ساهمت القدرة التي توفرها تطبيقات decentralized finance في تحفيزي للتعلم أكثر عن تطوير شبكة الإيثيريوم. العقود الذكية كانت واحدة من أوائل المفاهيم التي تعلمتها عندما تعمقت في هذا الموضوع. لقد كنت جاهزًا لأتعلم هذي التقنية من الصفر، ولكن بعد أخذ نظرة متعمقة، أدركت أن الرجوع إلى مفاهيم Object-Oriented وتطوير مواقع الويب هي الطريقة المفيدة للبدء. في هذا المقال، سأقوم بشرح العقود الذكية smart contracts التي يتم كتابتها باستخدام لغة Solidity، وذلك لتطوير مفاهيمك ومنحك أساسًا قويًا للبدء بتطوير تطبيقات على شبكة بلوكتشين الإيثيريوم.
مقدمة
العقود الذكية ليست ذكية ولا قانونية. هي عبارة عن برنامج كمبيوتر يحتوي على مجموعة من الأكواد (functions) وبيانات (State) تتواجد على عنوان محدد على شبكة بلوكتشين الإيثيريوم. من الممكن تصور العقد الذكي على أنه برنامج يتم تنفيذه على كمبيوتر عالمي، متواجد وقابل للدخول لأي شخص.
تعتبر العقود التي تم نشرها غير قابلة للتعديل أبدًا (immutable). الطريقة الوحيدة لتعديل العقد الذكي هي عن طريق نشر نموذج جديد. وبالنظر إلى نفس سياق المعاملة وحالة Ethereum Blockchain، ستكون النتيجة هي نفسها لأي شخص يقوم بتشغيل العقد.
مفهوم التنفيذ
يحتوي العقد في لحظة التنفيذ على محتويات محددة، وتتألف من:
- معلومات الدخول إلى حالتهم.
- محتوى المعاملة التي بدأت التنفيذ.
- حالة شبكة بلوكتشين الإيثيريوم (بعض المعلومات عن البلوكات القليلة السابقة).
من خصائص العقود الذكية أنها تبقى خاملة، حيث يتم تنفيذها فقط عندما تطلبها إحدى المعاملات. ويتم تسجيل حالة العقد أو تغييرات الحساب التي تم إجراؤها أثناء المعاملة على البلوكتشين إذا انتهى التنفيذ بنجاح.
شرح عقد ذكي بسيط
دعنا نشرح عقدًا ذكيًا بسيطًا مكتوبًا بلغة Solidity:
pragma solidity ^0.8.13;
contract Greeting {
string public name;
string public constant HELLO = "Hello";
function set(string memory _name) public {
name = _name;
}
function get() public view returns (string memory) {
return string.concat(HELLO, ' ', name);
}
}
يحدد السطر الأول نسخة الـ Pragma:
pragma solidity ^0.8.13;
يعمل هذا السطر على توجيه المترجم لإرشاده أي الإصدارات التي سيعمل عليها العقد المكتوب. حيث يخبر هذا السطر المترجم بكيفية التعامل مع شفرة المصدر. في هذه الحالة، تم تحديد الكود المكتوب لإصدار Solidity بحد أدنى 0.8.13، وتشير علامة ^ إلى السماح بإجراء تعديلات طفيفة مثل 0.8.14 أو 0.8.15، ولكن ليست المراجعات الرئيسية 0.9.0، وهذا لضمان عدم قيام الكود بتقسيم التغييرات.
يعرّف السطر الثالث العقد:
contract Greeting { ... }
تعمل contract، وهي عبارة عن data type، على تعريف العنصر. يشابه هذا التعريف تعريف class في لغات object-oriented. يمكن أن يحتوي contract object على data وmethods.
تعريف المتغيرات
في لغة Solidity، يحتاج كل متغير state إلى data type وvisibility. السطر الرابع من العقد يقوم بتعريف متغير حالة عام (public state variable) باسم name من نوع string:
string public name;
هنالك ثلاث مستويات ممكنة لـ visibility للمتغيرات في لغة Solidity:
- النوع Public: تسمح للعقود الأخرى بقراءة قيمها. يقوم المترجم بتوليد دالة getter لها تلقائيًا.
- النوع Default: مستوى visibility داخلي. يمكن الدخول إلى هذه المتغيرات فقط من داخل عقودها أو من عقود مشتقة منها.
- النوع Private: مشابهة إلى حد كبير لـ internal variable، ولكنها غير مرئية للعقود المشتقة.
يعرّف السطران السابع والحادي عشر دالة عامة (public)، وهذا هو المنطق البرمجي لتعريف الدالة في لغة Solidity. مثلها مثل متغيرات الحالة، تحتوي الدالة على مستويات لـ visibility:
- المستوى الأول Public: يمكن الدخول على الدالة من معاملات الحسابات الداخلية أو العقود، كما يمكن للدوال الأخرى على نفس العقد مشاهدتها.
- المستوى الثاني external: مشابهة لدوال public، لكن لاستدعائها من داخل العقد يجب أن تسبق الدعوة بالكلمة الأساسية this.
- المستوى الثالث internal: يمكن الدخول إليها من داخل العقد فقط والعقود المشتقة منها.
- المستوى الرابع Private: مشابهة لدوال internal، ولكن لا يمكن الدخول إليها عن طريق الدوال المشتقة.
يمكنك جعل عقدك مرئيًا للعامة عن طريق نشره في البلوكتشين، حيث تحدد الاستدعاءات internal و private الكيفية والوقت الممكن للدخول إلى دوال عقدك.
سلوك الدوال
يمكن أن تحتوي الدالة على ثلاثة تصريحات سلوكية محتملة:
- constant أو view: لا تقوم هذه الدوال بتعديل أي قيم متغيرة للحالة.
- pure: لا تحتوي على أي أعراض جانبية، فلا تقرأ ولا تكتب أي متغيرات في وسائط التخزين.
- payable: تقبل الدالة عمليات الدفع الواردة.
الخلاصة
هنالك العديد من عمليات التطوير النشطة حول التقنيات اللامركزية، حيث تلعب العقود الذكية دورًا مهمًا في هذا المجال. آمل أن تمنحك هذه المقدمة نظرة شاملة للبدء في العمل على تنفيذ رحلتك اللامركزية بثبات وثقة.