المصدر: مجتمع Starknet الصينيحقائق سريعة مختارة
مناقشة متعمقة حول بناء عقد جسر تجريبي على Bitcoin لصالح Starknet وضع الأساس لجسر على مستوى الإنتاج
تنفيذ أربعة عقود ذكية لتجميع الإيداع والسحب وموسع الجسر والسحب
استفد من العقود المتكررة وأشجار Merkle لتجميع طلبات الإيداع والسحب بكفاءة مع الحفاظ على سلامة وأمن حسابات المستخدمين.
مقدمة
< /h2>
في هذه المقالة، سنلقي نظرة متعمقة على sCrypt كيفية بناء عقد جسر تجريبي على البيتكوين. تم تصميم تطبيق إثبات المفهوم هذا لوضع الأساس لجسر على مستوى الإنتاج لشبكة Starknet Layer 2 (L2). يسمح تصميم الجسر بدمج معاملات طلب الإيداع أو السحب المتعددة في معاملة جذر واحدة ودمجها في عقد الجسر الرئيسي، وتحديث حالته، والذي يتكون من مجموعة من الحسابات المنظمة في شجرة Merkle.
نظرًا لأن النص البرمجي لعقد الجسر معقد جدًا، فإننا في sCrypt نستخدم لغة sCrypt الخاصة بمجال (DSL) لكتابة تنفيذه.
نظرة عامة
يتكون الجسر من نص بيتكوين العقدي المتكرر. هنا، يعني "العقد" أن نص القفل قادر على فرض شروط على معاملة الإنفاق، في حين أن "التكرار" يعني أن القواعد المذكورة أعلاه قوية بما يكفي لتحقيق المنطق المستمر والحالة على السلسلة (وهذا مطلب أساسي لأي عملية على السلسلة). -العقد الذكي لسلسلة).
يوجد هذا البرنامج النصي في سلسلة من المعاملات، حيث تفرض كل معاملة قيودًا على بنية المعاملات اللاحقة، وتفتح المعاملات اللاحقة مخرجات المعاملة الحالية. كلما تمت إضافة معاملة جديدة إلى هذه السلسلة، فإنها تمثل تحديثًا لحالة الجسر. ولذلك، فإن نهاية هذه السلسلة تحمل حالة الجسر الحالية.
يتم تخزين حالة العقد - على وجه التحديد، قيمة التجزئة الخاصة به - في ملف غير- إخراج OP_RETURN المستهلك. على الرغم من أننا لن ننفق هذا UTXO، إلا أنه يمكن فحص بياناته عند تنفيذ البرنامج النصي للعقد. على وجه التحديد، تحتفظ الولاية بالتجزئة الجذرية لشجرة Merkle التي تحتوي على بيانات الحساب، كما هو موضح أدناه:
p>
تحفظ شجرة Merkle مجموعة من بيانات فتحة الحساب الثابتة. تحتوي العقد الورقية على تجزئات لبيانات الحساب الخاصة بها، بما في ذلك العناوين والأرصدة. لتمثيل فتحات الحساب الفارغة، يتم تمييز هذه الفتحات بصفر بايت.
سيؤدي كل تحديث للجسر إلى تغيير شجرة الحساب. لتسهيل هذا التحديث، نعتمد على أدلة Merkle، التي يعد التحقق منها فعالًا جدًا في نص Bitcoin. يتكون التحديث بشكل أساسي من خطوتين. أولاً، نقوم بالتحقق من إثبات Merkle لإظهار أن شجرة Merkle تحتوي على الحالة الحالية لحساب معين. بعد ذلك، بعد حساب الحالة الجديدة للحساب، نستخدم نفس العقد المساعدة من دليل Merkle المذكور أعلاه لاشتقاق التجزئة الجذرية الجديدة.
يمكن أن يكون التحديث إيداعًا أو سحبًا. يمكن للجسر إجراء عمليات مجمعة لهذه التحديثات في معاملة واحدة.
الودائع
هدفنا هو تمكين المستخدمين من إرسال طلبات الإيداع أو السحب بشكل مستقل. للقيام بذلك، يقوم المستخدمون بإنشاء معاملات تدفع في عقد تجميع الإيداع أو السحب على التوالي. يجمع العقد هذه الطلبات في شجرة Merkle. يمكن دمج التجزئة الجذرية لهذه الشجرة في عقد الجسر الرئيسي، والذي يقوم بعد ذلك بمعالجة كل إيداع أو سحب.
في معاملات الإيداع، باستثناء In بالإضافة إلى تجزئة بيانات الإيداع وبناء شجرة ميركل، يضمن العقد أيضًا تجميع إيداعات ساتوشي المقيدة في مخرجات العقد بالطريقة الصحيحة إلى العقدة الجذرية للشجرة. تضمن عقود التجميع أن العقد الذكي الصحيح الموجود على السلسلة هو الوحيد الذي يمكنه استخدام هذه الأموال. (بالطبع، في بيئة الإنتاج، سنسمح أيضًا للمستخدمين بإلغاء معاملات الإيداع الخاصة بهم).
ينبع تصميم هذا الهيكل الشجري من القيود المفروضة على إنشاء البرنامج النصي للعقد، والذي لا يسمح بالمعاملات التي تحتوي على عدد كبير جدًا من المدخلات والمخرجات. يسمح لنا هيكل الشجرة بالتوسع في الإنتاجية التعسفية المحتملة.
طلبات السحب
يشبه تجميع طلبات السحب عمليات الإيداع، ولكن مع بعض الاختلافات. أولاً، نحتاج إلى طريقة مصادقة حتى يتمكن المستخدمون من سحب الأموال من حساباتهم. وهذا يختلف عن الودائع، حيث يمكن لأي شخص إيداع الأموال في أي حساب، على غرار كيفية استخدام عناوين البيتكوين. تتم المصادقة على مستوى العقدة الطرفية لشجرة التجميع. يتحقق عقد تجميع طلب السحب من تطابق عنوان السحب مع عنوان P2WPKH الأول الذي تم إدخاله في المعاملة الطرفية.
وهذا يضمن موافقة صاحب العنوان على السحب لأنه وقع على طلب معاملات السحب. هناك اختلاف دقيق آخر مقارنة بتجميع الودائع وهو أننا نقوم أيضًا بتجزئة الكميات المتراكمة المتوسطة وتمريرها إلى أعلى هيكل الشجرة. وذلك لأننا نحتاج إلى هذه البيانات عند توسيع نطاق عمليات السحب، المزيد عن ذلك لاحقًا.
قد يلاحظ القراء الأذكياء مشاكل محتملة في نموذج المصادقة هذا فيما يتعلق بطلبات السحب. ماذا لو قرر أحد المشغلين الغش وإنشاء معاملة في جذر شجرة التجميع التي تم تزوير بياناتها محليًا من خلال طلبات سحب وهمية غير مصادق عليها؟ نحن بحاجة إلى طريقة فعالة للتحقق من أن المعاملة الجذرية تأتي من معاملة طرفية صالحة.
لحل هذه المشكلة، نقوم بإجراء ما يسمى "فحص التكوين". بشكل أساسي، لدينا العقد الإجمالي يتحقق من معاملته السابقة والصفقتين السابقتين، "معاملات السلف". يتحقق العقد من أن هذه المعاملات تحتوي على نفس نص العقد ويقوم بإجراء نفس الفحوصات. وبهذه الطريقة، نقوم بإجراء فحص استقرائي لسجل المعاملات. وبما أن المعاملتين الأوليين أجرتا نفس الشيكات مثل العقد الحالي، يمكننا أن نؤكد أن "أسلاف" هذه المعاملات أجروا أيضًا نفس الشيكات، وصولاً إلى العقدة الطرفية (أي معاملة التكوين).
بالطبع قمنا بإجراء التحقق على فرعي الشجرة. ولذلك، يتم فحص إجمالي ما يصل إلى ستة معاملات لكل معاملة عقدة تجميع.
تمديد السحب
الآن دعنا نصل إلى الجزء الأخير من الحل: تمديد السحب. بعد معالجة مجموعة من طلبات السحب، يفرض عقد الجسر الرئيسي على المخرج دفع إجمالي مبلغ السحب إلى عقد التمديد. يمكننا أن نفكر في هذا العقد باعتباره عملية عكسية لما يفعله عقد تجميع طلب السحب. يبدأ من العقدة الجذرية لشجرة السحب ويوسعها إلى فرعين، يحتوي كل فرع على مبلغ السحب المقابل المستحق لذلك الفرع. تستمر هذه العملية حتى العقد الورقية لشجرة الانسحاب. تفرض المعاملات الورقية إخراج دفع بسيط إلى عنوان صاحب الحساب للمبلغ الذي طلب سحبه.
طريقة التنفيذ
لتنفيذ عقد الجسر الخاص بنا، قمنا بتطوير أربعة عقود ذكية من نوع sCrypt، يتعامل كل منها مع جوانب مختلفة من النظام. في هذا القسم، سنوضح بإيجاز وظيفة كل عقد.
عقد مجمع الودائع
يجمع عقد مجمع الودائع (DepositAggregator) الودائع الفردية في شجرة Merkle، ويتم بعد ذلك دمجها في سند الجسر الرئيسي. يتيح هذا التجميع معالجة إيداع الدفعات، مما يقلل من عدد المعاملات التي تحتاج إلى معالجتها بشكل فردي بواسطة الجسر. بالإضافة إلى ذلك، فهو يسمح للمستخدمين بتقديم الودائع بشكل مستقل، والتي تتم معالجتها لاحقًا بواسطة المشغلين.
تحتوي وظيفة إنشاء العقد على معلمتين:
ص>
يتم تغليف الوظيفة الأساسية لمجمع الودائع في الطريقة "المجمعة". تنفذ هذه الطريقة الخطوات التالية:
التحقق من صورة Sighash المسبقة وتوقيع المشغل: التأكد من أن المعاملة مرخصة من قبل مشغل الجسر وأن صورة Sighash المسبقة بالتنسيق الصحيح وتنتمي إلى إلى الصفقة الجاري تنفيذها. تعرف على المزيد حول التحقق من صحة الصورة المسبقة لـ Sighash في هذه المقالة.
إنشاء معرف المعاملة البادئة والتحقق من صحته: التحقق من التجميع المعاملة السابقة صالحة ويتم الرجوع إليها بشكل صحيح.
تجميع شجرة ميركل: تحقق من أن بيانات الإيداع التي تم تمريرها كشاهد تجزئة تتطابق مع الحالة المخزنة في مباريات الصفقة السابقة.
التحقق من المبلغ: تأكد من أن المبلغ الموجود في الإخراج الأمامي يطابق مبلغ الإيداع المحدد، مما يضمن يتم حساب الأموال بشكل صحيح في المجاميع.
تحديث الحالة: يحسب تجزئة جديدة عن طريق تسلسل تجزئات المعاملات السابقة ويحدث الحالة في مخرجات OP_RETURN.
منع هجوم إعادة الدخول: فرض نصوص برمجية ومبالغ صارمة للمخرجات لمنع التعديل غير المصرح به أو الإنفاق المزدوج.
مرة واحدة يتم تجميع الودائع ويجب دمجها في عقد الجسر الرئيسي. تتم معالجة هذه العملية من خلال طريقة "الانتهاء"، والتي تتضمن خطواتها ما يلي:
التحقق من المعاملة المسبقة: على غرار الطريقة "المجمعة"، تحقق من المعاملات السابقة للمعاملة التأكد من سلامة البيانات المدمجة.
التكامل مع عقد الجسر: تأكد من دمج الودائع المجمعة بشكل صحيح في عقد الجسر الرئيسي من خلال الرجوع إلى معرف معاملة الجسر والمفتاح العام للبرنامج النصي.
يمكن الاطلاع على كود المصدر الكامل لعقد تجميع الودائع على GitHub.
عقد مجمع السحب
عقد مجمع السحب (مجمع السحب) مصمم لتجميع طلبات السحب الفردية في Merk Ershu، المماثل لكيفية معالجة الودائع عن طريق مجمعي الودائع. ومع ذلك، تتطلب عمليات السحب مصادقة إضافية لضمان أن أصحاب الحسابات الشرعيين فقط هم من يمكنهم سحب الأموال من حساباتهم.
يتم تضمين الوظائف الأساسية لمجمع السحب في وفي الطريقة "التجميعية"، تقوم هذه الطريقة بالخطوات التالية:
إنشاء معرف المعاملة السابقة والتحقق من صحتها: تتحقق هذه العملية من صحة المعاملة السابقة المجمعة والإشارة إليها بشكل صحيح.
إثبات التحقق من الملكية: يضمن التحقق من معاملات إثبات الملكية أن المالك الشرعي فقط يمكنه سحب الأموال من الحساب.
التحقق من المنشأ عبر "معاملات السلف": على غرار مجمع الودائع، يقوم العقد بإجراء فحص استقرائي من خلال التحقق من صحة معاملات السلف. وهذا يضمن سلامة سجل المعاملات ويمنع المشغلين من إدخال طلبات سحب غير مصرح بها.
التحقق من المبلغ وحساب المبلغ الإجمالي: تقوم هذه الطريقة بحساب المبلغ الإجمالي المطلوب سحبه عن طريق إضافة مبالغ طلب السحب أو التجميع السابق. كمية.
تحديث الحالة: احسب تجزئة جديدة تحتوي على مجموع تجزئة المعاملة السابقة ومبلغ السحب. يتم تخزين هذا التجزئة في إخراج OP_RETURN لتحديث الحالة.
منع هجمات إعادة الدخول وإنفاذ المخرجات: تأكد من تحديد المخرجات بشكل صارم لمنع التعديل غير المصرح به أو هجمات إعادة الدخول.
السحب يمكن الاطلاع على الكود المصدري الكامل لعقد التجميع على GitHub.
عقد الجسر
يعد عقد الجسر هو المكون الأساسي لنظامنا والعقد الرئيسي للحفاظ على حالة الجسر، بما في ذلك شركة ميرك. حسابات مؤسسة إرشو وأرصدتها. إنه يتعامل مع عمليات الإيداع والسحب من خلال التكامل مع عقد التجميع الذي ناقشناه سابقًا.
تحتوي وظيفة إنشاء العقد على معلمتين:
طريقة الإيداع هي المسؤولة عن معالجة معاملات الإيداع المجمعة وتحديث رصيد الحساب وفقًا لذلك.
تتضمن خطوات تنفيذ طريقة الإيداع ما يلي:
< /p>
معالجة الودائع وتحديث الحسابات:
تحديث حالة الجسر والمخرجات:
بعد معالجة الإيداع، احسب حساب ميركل روت الجديد.
قم بإنشاء قيمة تجزئة حالة جديدة تمثل حالة الجسر المحدثة.
قم بإنشاء مخرجات العقد لإضافة إجمالي مبلغ الإيداع إلى رصيد الجسر.
تأكد من أن الإخراج بالتنسيق المتوقع للحفاظ على سلامة البيانات.
تقوم طريقة السحب بمعالجة معاملات السحب المجمعة وتحديث رصيد الحساب وإعداد الأموال المخصصة عبر موسع السحب.
تتضمن خطوات تنفيذ طريقة السحب ما يلي:
< /p >
معالجة طلبات السحب وتحديث الحسابات:
تحديث حالة الجسر والمخرجات:
بعد معالجة عمليات السحب، احسب الحساب الجديد جذر ميركل.
قم بإنشاء قيمة تجزئة حالة جديدة تمثل حالة الجسر المحدثة.
قم بإنشاء مخرجات العقد لطرح إجمالي مبلغ السحب من رصيد الجسر.
قم بإنشاء مخرجات ملحقة لعقد موسع السحب الذي يحتوي على إجمالي مبلغ السحب.
تأكد من أن الإخراج بالتنسيق المتوقع للحفاظ على سلامة البيانات.
يمكن الاطلاع على كود المصدر الكامل على GitHub.
عقد موسع السحب
يعد موسع السحب (WithdrawalExpander) المكون الأخير لنظام الجسر لدينا وهو مسؤول عن مبلغ السحب المجمع بناءً على معلومات المستخدم طلب السحب وزعت مرة أخرى على المستخدمين الفرديين. إنه يعكس عملية التجميع التي يقوم بها مجمع السحب، مما يؤدي إلى توسيع بيانات السحب المجمعة لتشمل مدفوعات المستخدم الفردية.
موسع السحب النواة يتم تغليف الوظيفة في طريقة "التوسيع". تقبل هذه الطريقة بيانات السحب المجمعة وتوسعها بشكل متكرر إلى معاملات سحب فردية، مع دفع المبلغ المقابل للمستخدم.
التوسيع إلى العقد الطرفية: إذا توسعت الطريقة إلى عقدة طرفية (سحب واحد)، فإنها تتحقق من صحة بيانات السحب وتنشئ مخرجات تدفع مباشرة إلى عنوان المستخدم.
مزيد من التوسع: إذا لم تصل الطريقة بعد إلى مستوى العقدة الطرفية، فإنها تستمر في التوسع، وتقسيم البيانات المجمعة إلى فرعين وإنشاء مخرجات للاستهلاك من خلال المزيد من المعاملات الموسعة.
< img src="https://img.jinse.cn/7329092_image3.png" title="7329092" alt="6YQAiFGQtiyEC10AdhATWiFGa4duEw0TlGiNTTYc.jpeg">
الاستنتاج
h2>
في تطبيق إثبات المفهوم هذا، نستخدم sCrypt قامت لغة المجال المحددة المدمجة (DSL) بتطوير عقد جسر يعتمد على Bitcoin المدعوم بـ OP_CAT. يستخدم الجسر العقود المتكررة وأشجار Merkle لتجميع طلبات الإيداع والسحب بكفاءة مع الحفاظ على سلامة وأمن حسابات المستخدمين. من خلال تصميم وتنفيذ DepositAggregator وWithdrawalAggregator وBridge وWithdrawal Extender (WithdrawalExpander) باستخدام هذه العقود الذكية الأربعة، نقدم طريقة لإدارة التفاعلات ذات الحالة على Bitcoin، مما يسهل إمكانية التشغيل البيني مع شبكات الطبقة الثانية مثل Starknet. يوفر هذا العمل أساسًا تقنيًا لبناء جسور على مستوى الإنتاج، مما قد يعزز قابلية التوسع والوظائف في نظام Bitcoin البيئي.
تتوفر جميع تطبيقات التعليمات البرمجية والاختبارات الشاملة على GitHub.
[ينتهي النص الكامل]
الرابط الأصلي: https://starkware.co/ المدونة /implementing-a-bridge-covenant-on-op-cat-bitcoin/
المرآة: https://mirror.xyz/starknet-zh.eth/zFbhQB7gfmSTV4CcTv5MRqJBUnKuwMLTNOgZ6jUgDK8