آلية عمل العقود الذكية في شبكات مثل Ethereum.
آلية عمل العقود الذكية في شبكات مثل Ethereum بشكل مفصل وبسيط في آنٍ واحد.
شبكة Ethereum هي أول وأشهر منصة عامة تدعم العقود الذكية، وهي التي أدخلت مفاهيم مثل الـ DApps وDeFi وNFTs للعالم الرقمي.
🔧 أولًا: ما المقصود بالعقد الذكي في Ethereum؟
هو عبارة عن كود برمجي مكتوب بلغة Solidity (أشهر لغة لعقود Ethereum)، يُخزّن على شبكة البلوكشين، ويُنفَّذ تلقائيًا عند استيفاء شروط معينة.
💬 يمكن التفكير فيه كـ"برنامج صغير غير قابل للتعديل بمجرد نشره، ولا يمكن إيقافه".
🧱 ثانيًا: مكونات العقد الذكي في Ethereum
المكون الوصف
الكود (Solidity Code) يكتب المبرمج من خلاله منطق العقد (من سيدفع؟ لمن؟ متى؟).
المخزن (Storage) حيث تُخزن البيانات (مثل أرصدة، ملكيات، حالات تنفيذ).
الحالة (State) هل العقد نشط؟ ما هي القيم الحالية للمتغيرات؟
الأحداث (Events) تُسجّل التغيرات المهمة (مثل الدفع أو النقل) ليستمع لها المستخدمون أو التطبيقات.
⚙️ ثالثًا: خطوات عمل العقد الذكي على Ethereum
1. كتابة العقد
بلغة Solidity.
يحتوي على الدوال (Functions) والشروط (Conditions) والمتغيرات.
2. تحويل الكود إلى Bytecode
يتم تحويله إلى EVM Bytecode (لغة تفهمها آلة Ethereum الافتراضية – EVM).
3. نشر العقد على البلوكشين
يتم تنفيذ معاملة (Transaction) بها الكود.
العقد يُنشر بعنوان فريد (Contract Address).
4. التفاعل مع العقد
المستخدم أو تطبيق DApp يرسل طلب (Function Call) إلى العقد.
العقد يتحقق من الشروط ثم ينفذها تلقائيًا.
5. تخزين النتائج ومعالجة الغاز
يتم تخزين نتائج التنفيذ على البلوكشين (إن وُجدت).
المستخدم يدفع رسوم Gas (تكلفة تنفيذ المعاملة).
⛽ ما هو الـ Gas في Ethereum؟
Gas = وحدة لقياس مقدار العمل الحسابي المطلوب لتنفيذ عقد أو معاملة.
المستخدم يدفع Gas Fees بالـ ETH.
كل عملية (مثل if، loop، transfer) لها تكلفة Gas معينة.
📌 الهدف: منع العقود من استهلاك الموارد بلا حدود (مثلاً: infinite loops).
🧪 مثال بسيط لعقد ذكي بـ Solidity
solidity
نسخ
تحرير
// عقد بسيط لتخزين رقم
pragma solidity ^0.8.0;
contract SimpleStorage {
uint256 public storedNumber;
function set(uint256 _num) public {
storedNumber = _num;
}
function get() public view returns (uint256) {
return storedNumber;
}
}
✅ كيف يعمل هذا العقد؟
يُخزن رقم في المتغير storedNumber.
يمكن لأي مستخدم استدعاء set() لتغييره.
get() تعرض الرقم الحالي.
🌐 من يتفاعل مع العقد؟
الطرف الوظيفة
المستخدم (User) يرسل معاملات إلى العقد (مثل شراء NFT، أو قفل أموال).
المطور (Developer) يكتب العقد ويرفعه باستخدام أدوات مثل Remix، Truffle، Hardhat.
العقد نفسه قد يستدعي عقودًا أخرى (مترابطة).
البلوكشين (Ethereum) ينفذ الكود عبر EVM ويحفظ الحالة الجديدة.
🔐 الأمان والقيود
العنصر التوضيح
غير قابل للتعديل لا يمكن تعديل العقد بعد نشره (إلا باستخدام آلية العقود القابلة للترقية – Upgradeable Contracts).
لا يمكن حذفه العقد يبقى موجودًا دائمًا على السلسلة.
معرّض للثغرات أخطاء برمجية قد تُستغل (مثل إعادة النداء).
شفافية تامة الكود والمخرجات مكشوفة على السلسلة لأي شخص.
🧠 خلاصة
العنصر القيمة
💡 الوظيفة تنفيذ تلقائي غير مركزي للعقود والمعاملات.
⚙️ المنطق مكتوب في Solidity، يُخزن ويُنفذ على EVM.
⛽ التكلفة كل عملية تستهلك Gas يتم دفعه بالـ ETH.
🔐 المزايا بدون وسطاء، بشفافية، وغير قابل للتعديل.
⚠️ القيود قابلية للثغرات، صعوبة التعديل، تكاليف مرتفعة أحيانًا.
تعليقات
إرسال تعليق