blockchain / solidity

فهم العقود الذكية من خلال تعلم أساسيات Solidity

سمير سليمان الشويكان

ساهمت القدرة التي توفرها تطبيقات 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)، وهذا هو المنطق البرمجي لتعريف الدالة في لغة Solidity. مثلها مثل متغيرات الحالة، تحتوي الدالة على مستويات لـ visibility:

يمكنك جعل عقدك مرئيًا للعامة عن طريق نشره في البلوكتشين، حيث تحدد الاستدعاءات internal و private الكيفية والوقت الممكن للدخول إلى دوال عقدك.

سلوك الدوال

يمكن أن تحتوي الدالة على ثلاثة تصريحات سلوكية محتملة:

الخلاصة

هنالك العديد من عمليات التطوير النشطة حول التقنيات اللامركزية، حيث تلعب العقود الذكية دورًا مهمًا في هذا المجال. آمل أن تمنحك هذه المقدمة نظرة شاملة للبدء في العمل على تنفيذ رحلتك اللامركزية بثبات وثقة.

→ رجوع للمدونة تواصل معي