سوف نتعمق أكثر في العقود الذكية: ما هي وكيف تعمل وكيف يمكنك البناء معها بأمان.
أولا ، تعريف عام. العقود الذكية هي برامج يتم نشرها على شبكة blockchain يتم تنفيذها تلقائيًا عند تشغيلها بواسطة معاملات صالحة. التشبيه الأساسي للعقد الذكي هو آلة البيع: يقوم العميل بوضع النقود ، , ويضغط كود العنصر المطلوب. بافتراض إدخال صالح ، ستحرر آلة البيع العنصر المطلوب.
الخصائص التالية مطلوبة في أي نظام عقد ذكي:
- عدم الثقة بمعنى يمكن لطرفين أو أكثر العمل على اتفاق دون الاعتماد على أي وسيط لتسهيل المعاملة
- يمكن الوصول إليها عالميًا بمعنى يجب أن يكون كل مشارك قادرًا على الوصول إلى النظام واستخدامه. لا ينبغي عليهم الاعتماد على موافقة أي شخص للمشاركة في الشبكة.
- قابلية التتبع يجب أن تكون معاملات العقد التي يمكن تتبعها قابلة للتتبع. مصدر البيانات أمر بالغ الأهمية لحل النزاعات والامتثال القانوني.
- المعاملات غير قابلة للتغيير يجب أن تكون المعاملات غير قابلة للعكس (ذرية). يجب ألا يكون المشاركون قادرين على إلغاء قراراتهم ، تمامًا كما أن العقود القانونية ملزمة ، وكذلك العقود الذكية.
- التنفيذ الذاتي نريد الابتعاد قدر الإمكان عن التنفيذ اليدوي وجعل هذه العقود تلقائية. يخضع مدى التنفيذ الذاتي لعقد التنفيذ الذاتي لتغير حالة الاستخدام.
لفهم أين تتناسب العقود الذكية مع blockchain ، دعنا نراجع النموذج العقلي blockchain الذي أنشأناه هنا.
نموذج عقلي لسلسلة blockchain العامة
لنقم بتكبير واجهة الشبكة (Network Interface) – بروتوكول الإجماع (Consensus Protocol) – عناصر حالة الشبكة (Network State) في الزاوية اليسرى السفلية. سنقوم أيضًا بتحديث أسماء شبكة Ethereum:
رسم بياني يوضح معالجة المعاملات في شبكة الإيثيريوم
تعد آلة Ethereum Virtual Machine (EVM) بيئة تنفيذ آمنة للعقود الذكية. يتم تنفيذ EVM bytecode على الجهاز الإفتراضي للإيثريوم والنتيجة تشكل الحالة العالمية الجديدة. EVM مكتمل Turing ، مما يعني أنه يمكنه تنفيذ كود أكثر تقدمًا من شبكة Bitcoin. ومع ذلك ، للتأكد من عدم تكرار المعاملات إلى الأبد ، فإن المعاملات على شبكة Ethereum لها أيضًا حدود غاز ، كما ناقشنا.
شبكة ethereum كسلسلة من تحولات الحالة
EVM bytecode هو كود ألة ، مما يعني أنه من الصعب جدًا على البشر قراءته أو البرمجة فيه. ومع ذلك ، فقد أنشأ مطورو البرامج الأساسية لغات عقود ذكية عالية المستوى يتم تجميعها إلى EVM bytecode إحدى لغات العقود الذكية المعروفة ذات المستوى الأعلى والتي يتم تجميعها وصولاً إلىEVM bytecode هي Solidity.
في ما يلي رسم تخطيطي يوضح كيفية تجميع كود Solidity إلى EVM bytecode ، والذي يتم نشره بعد ذلك في شبكة Ethereum:
رسم بياني يوضح كيفية تجميع الصلابة إلى الرمز الثانوي
سير عمل العقد الذكي: الإنشاء والتنفيذ
هناك نوعان عمليان من المعاملات التي تتضمن العقود الذكية: إنشاء العقد ومكالمة الرسائل
توضح الصورة أدناه عملية إنشاء العقد. عند نشر عقد ذكي على الشبكة ، تتم تهيئة الكود ويتم إنشاء الحالات باستخدام العناوين.
هنا ، يمكننا أن نرى العملية رفيعة المستوى التي يقوم بها جهاز EVM لتنفيذ معاملة لعقد ذكي. تتضمن المعاملة بيانات الإدخال ، والتي يتم إدخالها في bytecode للعقد الذكي. تساهم نتيجة المعاملة في تغيير حالة الشبكة.
دعنا نلقي نظرة أكثر على كيفية تعامل EVM مع بيانات bytecode والعقد المنشور عند تنفيذ رمز EVM bytecode للمعاملة.
في حين أن هناك الكثير من العناصر في هذه الصورة ، حاول أن تضع في اعتبارك أننا ننظر إلى آلة حالة بسيطة. يتم تغذية الحالة في المكدس ، ويقوم EVM بمعالجة المكدس ، ويتم إما حفظ النتيجة ، إذا كانت تؤثر على حالة الشبكة ، أو يتم تجاهلها ، إذا كانت ضرورية فقط لتنفيذ المعاملة.
الحالة في مكدس EVM في ثلاثة مواضع:
- الذاكرة هذه ذاكرة متقلبة ، مما يعني أنه ما لم تتم كتابتها بشكل صريح مرة أخرى في حالة الشبكة ، فلن يكون الوصول إليها متاحًا إلا أثناء تنفيذ المعاملة.
- التخزين هذه ذاكرة ثابتة مأخوذة من حالة الشبكة. تعد القراءة والكتابة في حالة الشبكة أكثر تكلفة من الذاكرة ، لأنها تؤثر على الحالة العالمية للشبكة.
- تكديس المعلومات التي تتم معالجتها بواسطة مكدس EVM أثناء المرور عبر الرمز الثانوي. (Stack عبارة عن بنية بيانات تستخدمها جميع معالجات الكمبيوتر ، يمكنك معرفة المزيد عنها هنا)
عندما يرغب EVM في معالجة معاملة ما ، فإنه يأخذ أولاً بيانات الإدخال ، ويجلب bytecode للعقد ذي الصلة وأي بيانات تخزين حساب حالة عالمية. بعد ذلك ، تقوم أداة EVM بمعالجة بيانات المعاملة من خلال نوع بيانات المكدس. أخيرًا ، بعد انتهاء EVM من معالجة المعاملة ، يأخذ أي بيانات حالة عالمية تم تغييرها بواسطة المعاملة ويكتب هذه التغييرات إلى الحالة العالمية. يوضح الرسم البياني أدناه هذه العملية (لاحظ أن PC هو عداد البرنامج ، بشكل أساسي تتبع خطوات قياس الغاز):
يمكن أن يكون التعامل مع الذاكرة والتخزين في عملية تنفيذ المعاملات أحد أصعب التحديات للمطورين الجدد في هذا المجال. سنتطرق إليها أكثر في قسم Solidity ، لكن كن مدركًا أنه مستوى برمجة مختلف عن JavaScript أو Python النموذجي.
التطورات الجديدة واعتبارات الأمن
تحتوي العملية التي أوضحناها للتو على العديد من التحديات للمطورين الذين يدخلون إلى الفضاء ، مثل:
- العقود الذكية غير قابلة للتغيير ولا يمكن تعديلها (إعادة نشرها فقط). شعار تطوير الويب الشائع هو “التحرك بسرعة وكسر الأشياء”. هذا غير مستحسن في تطوير العقود الذكية بسبب هذا الأمر.
- التكلفة العالية للفشل تطوير البرامج النموذجي الذي يمكن الوصول إليه لا ينطوي على احتمال خسارة قيمة مالية هائلة. من المرجح أن تواجه هذا المستوى من التدقيق والأمان في برمجة الأجهزة والخدمات المالية.
- معلومات العقود الذكية عامة ويمكن لأي شخص الاتصال بوظائفك العامة بمجرد نشر التعليمات البرمجية الخاصة بك وخاصة إذا بدأت في اكتساب القيمة ، فستجذب المزيد من الفرص لاختراقها أو إساءة استخدامها.
مواد اضافية
- ويكيبيديا: Smart Contracts, Stack (Abstract data type)
- فيديو:Ethereum Virtual Machine (Ethereum.org) فيديو يصف معنى أن تكون لغة تورينج كاملة ، والفرق بين بيئة تنفيذ Bitcoin و EVM هو أن EVM مكتمل.
- ويكي: Ethereum Virtual Machine (Ethereum.org)
- سلايدات:Slides: Ethereum VM Illustrated (Takenobu T.) مجموعة شرائح تصف Ethereum VM. العديد من المخططات في هذا القسم مأخوذة من مجموعة الشرائح هذه
إضافة تعليق