برمجة Blockchain: Solidity. برمجة العقود الذكية

في أكثر من 10 سنوات من تطويرها ، توسعت blockchain بشكل كبير من نظام مباشر لنقل القيمة عبر العملات المعدنية إلى أساس Web 3.0 والتطبيقات اللامركزية. حدث هذا بشكل أساسي بسبب اندلاع مشاريع جديدة بعد أن قدمت Ethereum معيار ERC20 والعقود الذكية.

تم استخدام العقود الذكية على نطاق واسع في جمع الأموال لـ ICOs لضمان الشفافية للمشاركين. هذا جعلهم مشهورين ، لكن هذا لم يكن التطبيق الوحيد. هناك حالات ناجحة للعقود الذكية في إنشاء منظمات مستقلة موزعة وإدارة الحقوق وإجراء الحوكمة. إن الحاجة إليها واضحة لدرجة أن هناك محاولات لإنشاء عقود ذكية للبيتكوين.

إذا كنت ترغب في جعله في هندسة blockchain ، فسيتعين عليك معرفة كيفية عمل العقود الذكية وكيفية إنشائها. لحسن الحظ ، توفر Ethereum كل ما هو ضروري لها ، بما في ذلك لغة البرمجة الخاصة بها – Solidity. تم إنشاء هذه اللغة خصيصًا للعمل مع Ethereum Virtual Machine. من السهل جدًا فهمها ، ولكن هناك بعض الميزات المميزة التي يجب عليك وضعها في الاعتبار. اليوم سوف نتعمق في عالم العقود الذكية ونقوم بترميز بعضها. هيا نبدأ!

كيف يعمل Ethereum?

أولاً وقبل كل شيء ، نحتاج إلى فهم أساسيات blockchain في Ethereum وكيف تعمل. سيساعدنا هذا في فهم الفرق بين ترميز التطبيقات المركزية والتطبيقات اللامركزية (وهي العقود الذكية أساسًا).

في جوهرها ، تمتلك Ethereum آلة افتراضية. من المحتمل أنك واجهتها في وقت سابق عند تشغيل ألعاب قديمة في محاكي أو تشغيل بعض البرامج الخاصة بنظام التشغيل على نظام تشغيل غير أصلي. بعبارات بسيطة ، الجهاز الظاهري هو جهاز كمبيوتر داخل جهاز كمبيوتر يستخدم أجهزة الجهاز الأصلي. في حالة Ethereum ، يستخدم EVM موارد أجهزة الكمبيوتر المتصلة بالشبكة (العقد). مثل أي جهاز افتراضي آخر ، يمتلك جهاز Ethereum’s RAM و ROM الخاصة به ، والتي تستخدمها البرامج التي تعمل فوقها. الاستثناء الوحيد المهم هو أن ذاكرة ROM الخاصة بـ EVM هي blockchain ، لذلك بمجرد وصول شيء ما ، لا يمكن إزالته.

لماذا هذا مهم؟ يعد إنشاء العقود الذكية مسؤولية لا تصدق لأنه في حالة وجود ثغرة أمنية ، يمكن سرقة أموال المستخدمين أو فقدها. بينما يمكنك تعديل الكود أو استبداله بالكامل على خادم مركزي ، لا يمكنك القيام بذلك على جهاز افتراضي لامركزي. بالإضافة إلى ذلك ، يتطلب كل إجراء يتم تنفيذه باستخدام عقد ذكي دفع رسوم للشبكة. لماذا ا؟ لأن EVM يجب أن يعالج مهمة معينة ، ولا يمكنه القيام بذلك إلا من خلال الاستفادة من قوة معالجة بعض العقد. تُسمى الرسوم بالغاز ويتم دفعها بعملة Gwei ، والتي تشبه Bitcoin’s Satoshi.

كيف يعمل العقد الذكي?

إذا سبق لك استخدام Ethereum ، فقد قمت بإنشاء محفظة في الشبكة مرة واحدة على الأقل. محفظتك هي في الأساس حساب يمثله عنوان. العقد الذكي هو حساب أيضًا ، لكنه يختلف عن الحساب العادي.

بمجرد إنشاء محفظة ، يمكنك توصيلها بأي من الشبكات المتاحة ، والشيء الوحيد الذي سيتغير هو رصيدك. هذا لأن عناوين المستخدمين ليست داخلية في أي شبكة – فهي موجودة بالتوازي. من ناحية أخرى ، يتم تضمين مثيل عقد ذكي في blockchain معين ولا يمكن عرضه في سلسلة أخرى. لتكون قادرًا على إطلاق عقد على الشبكة الرئيسية بعد اختباره ، دعنا نقول Rinkeby ، سيحتاج منشئه إلى نشر نسخة جديدة من العقد. سيتطلب هذا تجميع الكود المصدري مرة أخرى. يمكن لمنشئ العقد إنشاء العديد من مثيلات الكود كما يحلو لهم ، طالما أن لديهم ما يكفي من ETH لدفع الغاز مقابل التفاعل مع الشبكة.

تمامًا مثل أي تطبيق مركزي ، يحتوي العقد الذكي على مكان مخصص لتخزين موارده وعنصر نائب للكود (صوره كصفحة ويب تقوم بتنزيلها من الإنترنت ، وسيكون به ملف .html وبعض المجلدات التي تحتوي على صور وغيرها. أمور). هناك أيضًا مؤشر على مقدار ETH في العقد في رصيده ؛ هذا أمر بالغ الأهمية لحالات الاستخدام المختلفة مثل جمع التبرعات ، والوصايا ، وما إلى ذلك. المخطط الكامل معروض في الصورة أدناه.

Ethereum EVM & amp؛ التخطيطي المحفظةمصدر الصورة: U.Today

كيفية بناء عقد ذكي?

الآن بعد أن عرفنا مبادئ كيفية عمل Ethereum وكيف تعمل العقود الذكية داخلها ، يمكننا إنشاء واحدة بأنفسنا. أولاً ، سنحتاج إلى تهيئة البيئة المناسبة. يمكنك الذهاب إلى طريقين ، إما كتابة الكود في المتصفح باستخدام Remix IDE المقدم من مؤسسة Ethereum أو تنزيل تطبيق ترميز من اختيارك مع بعض الحزم الخاصة به. لغرض هذا البرنامج التعليمي ، سنعرض لك كل من Remix و Atom (تطبيق ترميز عالمي لنظام التشغيل Mac & شبابيك).

سيأخذ أول عقد ذكي سنبرمه أسماء طرازات سيارات مختلفة وقدرتها الحصانية. ما نريد أن نراه هو حقلي إدخال ومخرجين للقيم التي لدينا. نظرًا لأننا سنغير المدخلات ، فنحن بحاجة إلى تعيين متغيرات من نوعين: سلسلة للأسماء وعدد صحيح للقدرة الحصانية.

قبل عقدنا ، سنضع سطرًا يحدد إصدار اللغة ، حيث سيساعد ذلك المترجم على تكييف الكود بشكل صحيح. يعد تجميع الشفرة أمرًا ضروريًا لأنه بمجرد وصولنا إلى مرحلة النشر ، سيتم تكييف الكود مع رمز الجهاز الذي سيتمكن جهاز EVM من قراءته ومعالجته. بالإضافة إلى ذلك ، سيتم إنشاء واجهة تطبيق ثنائية يمكن استخدامها بشكل أكبر في إنشاء تطبيق لامركزي كامل. يمكنك دائمًا التحقق من أحدث إصدار من Solidity على موقعها الرسمي. لتحديد ذلك ، اكتب “صلابة براغما” والإصدار بعد علامة “^”.

لتعيين حدود لعقدنا ، دعنا نعطيه اسمًا متبوعًا بقوس. أولاً ، سنعلن عن متغيرين: “طراز” و “HP”. الأول سيكون عبارة عن سلسلة تمثل طراز سيارة والثاني سيكون عددًا صحيحًا يمثل القدرة الحصانية لطراز سيارة معين. هناك شيئان يجب ذكرهما حول المتغيرات من حيث Solidity. الأول هو أننا يجب أن نعلن ما إذا كان يجب أن تكون الأطراف الثالثة قادرة على رؤيتها أم لا بوضعها “عامة” أو “خاصة” بجانبها. الأخير هو أن الأعداد الصحيحة في Solidity يمكن أن تكون موقعة أو غير موقعة. يمكن أن يكون العدد الصحيح بدون إشارة ممكنًا فقط ويتم كتابته كـ “uint”. يمكن أن يكون العدد الصحيح الذي يحمل إشارة موجبة & سلبي ومكتوب كـ “int”.

بعد تحديد متغيراتنا ، حان الوقت لكتابة بعض الوظائف التي سيؤديها عقدنا الذكي. أولاً ، نحتاج إلى عمل عناصر نائبة لنموذجنا و HP. سنستخدم مجموعة من الوظائف العامة ونقوم بإرفاق المتغيرات الخاصة بنا بها. ثانيًا ، نحتاج إلى تحديد اثنين من الوظائف العامة التي ستعود بمدخلات. ألق نظرة على شكل عقدنا الذكي.

طراز السيارة وأمبير. عقد ذكي حصانامصدر الصورة: U.Today

كيفية عمل توكن على إيثريوم?

انجذب الكثير من الأشخاص إلى صناعة blockchain بسبب المكاسب الفادحة في سوق العملات المشفرة في نهاية عام 2017. كان هذا بشكل أساسي نتيجة ظهور معيار الرمز المميز ERC20 الجديد الذي استخدمه عدد كبير من الشركات الناشئة لإطلاق الرموز المميزة ورفعها المال من أجل التنمية. على الرغم من التراجع في الضجيج ، لا تزال بعض الشركات تطلق الرموز المميزة الخاصة بها على Ethereum وتقوم بالبيع للمساهمين ، مما يثبت أن الطلب لا يزال موجودًا. إذا كنت تحلم دائمًا ببناء شركة ناشئة وإطلاق رمزك المميز ، فسيكون هذا الجزء ممتعًا للغاية.

يعني إنشاء رمز استخدام معيار ERC20 ، والذي يمكن البحث عنه بسرعة عبر Google. لا تنس تعيين إصدار Solidity قبل المعيار نفسه. ستكون هناك مجموعة من الوظائف واثنين من الأحداث التي من المفترض أن تسجل الإجراءات في دفتر الأستاذ في Ethereum. من بين الوظائف ، ستجد مجموعة من الوظائف الضرورية: واحدة لتحديد إجمالي العرض ، وواحدة للتحقق من رصيد محفظة معينة ، وواحدة لنقل الرموز بين المحافظ. نظرًا لأن Ethereum يسمح بالتحكم في المحافظ من محافظ أخرى ، فستجد أيضًا وظائف تحدد المحفظة المستهدفة وتسمح بتحويل الرصيد والموافقة على المعاملة. احفظ هذا في ملف منفصل.

حان الوقت لوضع الخطوط العريضة لرمزنا المميز. ابدأ بمواصفات إصدار Solidity. ثم قم باستيراد الواجهة وإرفاقها بعقد ذكي جديد عبر “is”. للمضي قدمًا سنقوم بما يلي:

  • أولاً ، حدد الرمز والاسم وعدد الكسور العشرية في المتغيرات. يسمح عدد الكسور العشرية للمستخدم بنقل وتخزين أجزاء من رمز مميز ، العدد الأكثر شيوعًا من الكسور العشرية هو 18. يجب أن تكون جميع هذه الكسور مرئية للمستخدمين ، لذلك نجعلها عامة.

  • ثانيًا ، سوف نحدد إجمالي العرض. في حالة هذا البرنامج التعليمي ، سيتم إصلاحه ويساوي مليار.

  • ثالثًا ، دعونا نجعل تعيينات لفحص الأرصدة على المحافظ والبدلات في حالة سيطرة أي طرف ثالث على العنوان.

  • رابعًا ، سنقوم بتعيين وظيفة سيتم تنفيذها مرة واحدة فقط عند نشر العقد (المُنشئ) والتي ستمنح عنواننا جميع الرموز التي سننشئها.

  • خامسًا ، نحتاج إلى إنشاء عدد من الوظائف التي تقيد ما لدينا في الواجهة. سيتم أخذ إجمالي العرض من المتغير الذي أعلناه من قبل. سيتم فحص الأرصدة وفقًا للتعيين. لن يُسمح بالنقل إلا إذا كان لدى المستخدم بعض ETH وكان يرسل أقل أو يساوي ما لديه بالفعل. سيتم التحكم في محفظة أخرى وفقًا للتعيين المحدد مسبقًا والتحقق من المبلغ المسموح به. تحقق من الكود الذي حصلنا عليه أدناه.

رمز UTD ERC20مصدر الصورة: U.Today

كيف تطلق عقد ذكي?

أنت تعرف الآن كيفية ترميز العقود الذكية البسيطة على Solidity. دعونا نحاول فهم كيف يمكن إطلاقها على شبكة Ethereum. أولاً ، نحتاج إلى تجميع الكود. لهذا الغرض ، يمكنك إما استخدام مترجم Remix المتكامل أو القيام بذلك على جهازك بمساعدة إطار عمل Truffle. دعنا نذهب إلى الطريق السهل أولاً.

قبل أن نبدأ ، من الضروري أن تقوم بإنشاء حساب Ethereum إذا لم تكن قد قمت بذلك حتى الآن. لهذا ، نوصي باستخدام ملحق Metamask الذي يمكن تثبيته أعلى متصفحات Chrome و Opera و Firefox و Brave. بمجرد إنشاء محفظة ، تأكد من حفظ العبارة الأولية لأنها ستكون الطريقة الوحيدة للوصول إلى المحفظة من الأجهزة الأخرى أو في حال اضطررت إلى إعادة تثبيت الامتداد. ميزة Metamask هي أنه يمكنك التبديل بين الشبكات المختلفة. سيكون هذا مفيدًا لأننا سنستخدم شبكة اختبار لتجاربنا. افتح الامتداد واختر شبكة Ropsten. بعد ذلك ، انتقل إلى الصنبور واطلب بعض ETH ، وتذكر أن كل عملية باستخدام EVM تكلف Wei.

افتح remix.ethereum.org. سترى رمزًا لبطاقة الاقتراع – أغلق علامة التبويب به. يحتوي Remix على متصفح مخصص لملفات sol ومترجم متكامل. في الجزء العلوي من المتصفح ، يوجد رمز متقاطع يسمح بإنشاء ملفات جديدة. دعنا ننشئ ملفًا وننسخ عقدنا الذكي الأول مع المركبات وقدرتها الحصانية. في الجزء الأيمن من الشاشة ، سترى المترجم ببضع علامات تبويب. في علامة التبويب الأولى ، حدد إصدار مترجم يتوافق مع إصدار Solidity الذي حددته وابدأ في عملية التجميع. إذا لم تكن هناك أخطاء ، فسيتم تقديمك برسالة “نجاح”. حدد علامة التبويب الثانية وسترى قسمًا حيث يجب عليك تحديد بيئة مناسبة (في حالتنا Web3) وتحقق من صحة عنوانك (يجب أن ينزل من Metamask). إذا كان كل شيء صحيحًا ، فاضغط على “نشر” وستظهر لك نافذة منبثقة من Metamask تحتوي على معاملة. قم بتأكيده وفويلا ، يتم نشر عقدك الذكي على الشبكة.

الآن إلى شيء أكثر إثارة للاهتمام. إذا استخدمت محرر نصوص على جهاز الكمبيوتر الخاص بك لكتابة الرمز ، فيمكنك نشره محليًا باستخدام Node.js. أولاً ، قم بتنزيله من الموقع الرسمي أو قم بتثبيته عبر Command Line (Windows) أو Terminal (OSX). في حالتنا ، سنستخدم OSX ، لكن العملية مماثلة.

تثبيت Node.js.مصدر الصورة: U.Today

ثانيًا ، قم بتثبيت إطار عمل Solidity Truffle عبر “تثبيت npm”.

تركيب الكمأةمصدر الصورة: U.Today

ثالثًا ، أنشئ مجلدًا جديدًا وأنشئ الريبو عبر الأمر “init”.

إنشاء مستودع الكمأةمصدر الصورة: U.Today

رابعًا ، قم بتثبيت HDWalletProvider في هذا الريبو عبر Node.js أيضًا.

تثبيت HDWalletProviderمصدر الصورة: U.Today

خامسًا ، انسخ الملفات بواجهة ERC20 وعقد الرمز المميز الخاص بك إلى مجلد “العقود” في الريبو الخاص بك. سادساً ، قم بإنشاء ملف JavaScript التالي في مجلد “Migrations” داخل الريبو.

ملف نشر JSمصدر الصورة: U.Today

سابعًا ، تحتاج إلى تعديل ملف تكوين Truffle. ومع ذلك ، هناك خطوة إضافية واحدة مطلوبة قبل القيام بذلك. ستقوم بإدخال ذاكرة محفظتك (التي قمت بحفظها سابقًا) وواجهة برمجة تطبيقات لشبكة اختبار Ropsten. للحصول على الأخير ، انتقل إلى Infura وقم بتسجيل مشروع. على صفحة المشروع ، سترى معرفه. استخدمه كواجهة برمجة تطبيقات.

تكوين الكمأةمصدر الصورة: U.Today

أخيرًا ، أنت جاهز لإطلاق عقدك الذكي. هذا ما يبدو عليه الأمر والعملية. في حالة وجود أي مشاكل ، سيتم عرضها عليك بدلاً من ذلك.

يتم نشر العقد الذكي محليًامصدر الصورة: U.Today

ماذا يمكنك أن تفعل بعقد ذكي?

عمل جيد ، لقد تم نشر أول عقدين ذكيين. ماذا الآن؟ بالنسبة للمبتدئين ، تحتاج إلى التحقق منها ونشرها. دعنا نعثر عليها أولاً في أي من مستكشفات الكتل في Ethereum. سوف نستخدم إثيرسكان.

أسرع طريقة للوصول إلى العقود الخاصة بك هي من خلال المعاملات من محفظتك. قم بالوصول إلى Metamask ، واضغط على ثلاث نقاط ، وسيتيح لك عرض حسابك في Etherscan. يحتوي عنوانك الآن على معاملة واحدة على الأقل لإنشاء العقد. عند الوصول إلى المعاملة ، ستجد عنوان الوجهة ، وهو في الأساس عنوان العقد. بمجرد أن ينتهي بك الأمر في صفحة العقد ، سترى بضع علامات تبويب. انتقل إلى علامة التبويب “الرمز” وانتقل إلى صفحة التحقق. أدخل هنا جميع المعلومات ذات الصلة واضغط على الزر لبدء عملية التحقق.

التحقق من الرمزمصدر الصورة: U.Today

بعد التحقق من أول عقد ذكي أنشأناه ، يمكنك الآن التفاعل معه. انتقل إلى علامة التبويب “كتابة العقد” وسترى العناصر النائبة التي حددناها. دعنا نربط Etherscan بـ Metamask وندخل Toyota Soarer بقوة 280 حصان. قم بتحديث الصفحة وسترى البيانات في قسم “قراءة”.

أعمال العقد الذكيمصدر الصورة: U.Today

ملخص

باختصار ، يعد بناء العقود الذكية مهارة ضرورية لكل مهندس blockchain هناك. كانت أول منصة لإدخال العقود الذكية هي Ethereum ؛ كما قدمت المؤسسة للمجتمع لغة مكتوبة بشكل خاص تسمى Solidity. على الرغم من حداثة المفهوم واللغة نفسها ، إلا أن بناء العقود الذكية ليس له شيء استثنائي. سيشعر الأشخاص الذين لديهم خبرة سابقة في لغات البرمجة الموجهة للكائنات ، وخاصة JavaScript ، براحة كبيرة في التجول.

العقود الذكية هي مجرد برامج ، لكن لها ميزات مميزة يجب على كل مطور مراعاتها. على سبيل المثال ، نظرًا لأن العقود الذكية تعمل فوق جهاز افتراضي لامركزي ، يتم تسجيل بياناتها بشكل ثابت في blockchain. وبالتالي ، لا يوجد مجال للخطأ ، ويعد اختبار العقد الذكي أمرًا بالغ الأهمية قبل نشره على الشبكة الرئيسية. من الخصائص الأخرى للعقد الذكي أن كل إجراء يتم من خلال المعاملات ، والتي تتطلب قوة معالجة EVM. نتيجة لذلك ، فإن نشر العقود الذكية والتفاعل معها يكلف المال.

شرحنا اليوم مبادئ عمل Ethereum Main وشبكات الاختبار ، وأظهرنا لك أدوات مختلفة لإنشاء عقود ذكية ، وحددنا عملية إبرام نوعين من العقود. أظهرنا أيضًا طرقًا مختلفة لإطلاق العقود الذكية على الشبكة وزيادة التفاعل معها. نعتقد أنه بهذه المعرفة ستكون جاهزًا للبدء كمهندس blockchain وبناء عقود ذكية استثنائية وتطبيقات لامركزية تعتمد عليها. استمتع!