مقدمة عن العقود الذكية
ما هو العقد الذكي؟
"العقد الذكي" هو ببساطة برنامج يعمل على سلسلة كتل إيثيريوم. إنه مجموعة من التعليمات البرمجية (وظائفه) والبيانات (حالته) التي توجد في عنوان محدد على سلسلة كتل إيثيريوم.
العقود الذكية هي نوع من حسابات إيثيريوم. هذا يعني أن لديها رصيدًا ويمكن أن تكون هدفًا للمعاملات. ومع ذلك، لا يتحكم فيها مستخدم، بل تُنشر على الشبكة وتعمل كما تمت برمجتها. يمكن لحسابات المستخدمين بعد ذلك التفاعل مع العقد الذكي عن طريق إرسال معاملات تنفذ وظيفة محددة في العقد الذكي. يمكن للعقود الذكية تحديد قواعد، مثل العقد العادي، وفرضها تلقائيًا عبر التعليمات البرمجية. لا يمكن حذف العقود الذكية افتراضيًا، والتفاعلات معها لا رجعة فيها.
المتطلبات الأساسية
إذا كنت قد بدأت للتو أو تبحث عن مقدمة أقل تقنية، فإننا نوصي بـ مقدمة عن العقود الذكية الخاصة بنا.
تأكد من قراءة المزيد عن الحسابات، والمعاملات، وآلة إيثيريوم الافتراضية قبل القفز إلى عالم العقود الذكية.
آلة بيع رقمية
ربما يكون أفضل تشبيه للعقد الذكي هو آلة البيع، كما وصفها نيك سابو (opens in a new tab). مع المدخلات الصحيحة، يتم ضمان مخرجات معينة.
للحصول على وجبة خفيفة من آلة البيع:
المال + اختيار الوجبة الخفيفة = صرف الوجبة الخفيفة
تمت برمجة هذا المنطق في آلة البيع.
العقد الذكي، مثل آلة البيع، يحتوي على منطق مبرمج فيه. إليك مثال بسيط على كيف ستبدو آلة البيع هذه إذا كانت عقدًا ذكيًا مكتوبًا بلغة Solidity:
pragma solidity 0.8.7;
contract VendingMachine {
// التصريح عن متغيرات حالة العقد
address public owner;
mapping (address => uint) public cupcakeBalances;
// عند نشر عقد 'VendingMachine':
// 1. تعيين العنوان الناشر كمالك للعقد
// 2. تعيين رصيد الكب كيك للعقد الذكي المنشور إلى 100
constructor() {
owner = msg.sender;
cupcakeBalances[address(this)] = 100;
}
// السماح للمالك بزيادة رصيد الكب كيك للعقد الذكي
function refill(uint amount) public {
require(msg.sender == owner, "Only the owner can refill.");
cupcakeBalances[address(this)] += amount;
}
// السماح لأي شخص بشراء الكب كيك
function purchase(uint amount) public payable {
require(msg.value >= amount * 1 ether, "You must pay at least 1 ETH per cupcake");
require(cupcakeBalances[address(this)] >= amount, "Not enough cupcakes in stock to complete this purchase");
cupcakeBalances[address(this)] -= amount;
cupcakeBalances[msg.sender] += amount;
}
}
مثلما تلغي آلة البيع الحاجة إلى موظف بائع، يمكن للعقود الذكية أن تحل محل الوسطاء في العديد من الصناعات.
غير مقيد بإذن
يمكن لأي شخص كتابة عقد ذكي ونشره على الشبكة. تحتاج فقط إلى تعلم كيفية البرمجة بـ لغة العقود الذكية، وأن يكون لديك ما يكفي من ETH لنشر عقدك. نشر العقد الذكي هو من الناحية الفنية معاملة، لذلك تحتاج إلى دفع الغاز بنفس الطريقة التي تحتاج بها لدفع الغاز مقابل تحويل ETH بسيط. ومع ذلك، فإن تكاليف الغاز لنشر العقد أعلى بكثير.
تمتلك إيثيريوم لغات صديقة للمطورين لكتابة العقود الذكية:
- Solidity
- Vyper
ومع ذلك، يجب تجميعها (compiled) قبل أن يتم نشرها حتى تتمكن آلة إيثيريوم الافتراضية من تفسير العقد وتخزينه. المزيد عن التجميع
قابلية التركيب
العقود الذكية عامة على إيثيريوم ويمكن اعتبارها واجهات برمجة تطبيقات (APIs) مفتوحة. هذا يعني أنه يمكنك استدعاء عقود ذكية أخرى في عقدك الذكي لتوسيع نطاق ما هو ممكن بشكل كبير. يمكن للعقود حتى نشر عقود أخرى.
تعرف على المزيد حول قابلية تركيب العقود الذكية.
القيود
لا يمكن للعقود الذكية وحدها الحصول على معلومات حول الأحداث في "العالم الحقيقي" لأنها لا تستطيع استرداد البيانات من مصادر خارج السلسلة. هذا يعني أنها لا تستطيع الاستجابة للأحداث في العالم الحقيقي. هذا مقصود في التصميم. الاعتماد على المعلومات الخارجية يمكن أن يعرض الإجماع للخطر، وهو أمر مهم للأمان واللامركزية.
ومع ذلك، من المهم لتطبيقات سلسلة الكتل أن تكون قادرة على استخدام البيانات خارج السلسلة. الحل هو الشبكات الوسيطة (oracles) وهي أدوات تستوعب البيانات خارج السلسلة وتجعلها متاحة للعقود الذكية.
قيد آخر للعقود الذكية هو الحد الأقصى لحجم العقد. يمكن أن يكون العقد الذكي بحد أقصى 24KB وإلا سينفد منه الغاز. يمكن الالتفاف على ذلك باستخدام نمط الماسة (The Diamond Pattern) (opens in a new tab).
عقود متعددة التوقيعات
العقود متعددة التوقيعات (Multisig) هي حسابات عقود ذكية تتطلب توقيعات صالحة متعددة لتنفيذ معاملة. هذا مفيد جدًا لتجنب نقاط الفشل الفردية للعقود التي تحتفظ بمبالغ كبيرة من الإيثر أو الرموز الأخرى. تقسم العقود متعددة التوقيعات أيضًا مسؤولية تنفيذ العقد وإدارة المفاتيح بين أطراف متعددة وتمنع فقدان مفتاح خاص واحد من أن يؤدي إلى فقدان الأموال بشكل لا رجعة فيه. لهذه الأسباب، يمكن استخدام العقود متعددة التوقيعات لحوكمة المنظمات المستقلة اللامركزية (DAO) البسيطة. تتطلب العقود متعددة التوقيعات N من التوقيعات من أصل M من التوقيعات المقبولة الممكنة (حيث N ≤ M, and M > 1) من أجل التنفيذ. يشيع استخدام N = 3, M = 5 و N = 4, M = 7. يتطلب العقد متعدد التوقيعات 4/7 أربعة توقيعات صالحة من أصل سبعة ممكنة. هذا يعني أن الأموال لا تزال قابلة للاسترداد حتى لو فُقدت ثلاثة توقيعات. في هذه الحالة، يعني ذلك أيضًا أن أغلبية حاملي المفاتيح يجب أن يوافقوا ويوقعوا من أجل تنفيذ العقد.
موارد العقود الذكية
عقود أوبن زبلن - مكتبة لتطوير العقود الذكية الآمنة.
- openzeppelin.com/contracts/ (opens in a new tab)
- GitHub (opens in a new tab)
- منتدى المجتمع (opens in a new tab)
قراءة إضافية
- كوين بيس: ما هو العقد الذكي؟ (opens in a new tab)
- تشين لينك: ما هو العقد الذكي؟ (opens in a new tab)
- فيديو: شرح مبسط - العقود الذكية (opens in a new tab)
- Cyfrin Updraft: منصة تعلم وتدقيق Web3 (opens in a new tab)
برامج تعليمية: توقيعات العقود الذكية (EIP-1271) على إيثيريوم
- EIP-1271: توقيع والتحقق من توقيعات العقود الذكية – كيف يُمكّن EIP-1271 العقود الذكية من التحقق من التوقيعات، مع شرح تفصيلي لتنفيذ Safe.