فهم العقود الذكية: قراءة، كتابة، ومراجعة

متقدم11/26/2023, 12:41:25 PM
يغطي هذا المقال تقنيات برمجة العقود الذكية، بما في ذلك الإرشادات للقراءة، والكتابة، والتدقيق. فهم هيكل وكتل الشفرة للعقود الذكية هو الخطوة الأولى لكتابتها بلغة الصلاد أو لغات أخرى. نظرًا لأن العقود الذكية تعتبر مركزية لتمويل اللامركزية (DeFi) وتطبيقات اللامركزية (DApps)، فإن ضمان أمنها وخلوها من العيوب أمر حاسم، مع تلعب فحوصات العقود الذكية دورًا رئيسيًا.

قراءة العقود الذكية

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

فهم العقود الذكية: الأساسيات والغرض

العقد الذكيمخصصة لتأتيمتز blockchain-specific تعاملات. حيث تعتبر عقود محددة الشروط، لذلك لا تتطلب وسطاء. ما يجعل العقود الذكية مفيدة هو توافقها عبر مجموعة واسعة من حالات الاستخدام، بما في ذلك الخدمات المالية، وإدارة سلسلة التوريد، وأكثر. وعلى عكس الشفرات التقليدية التي تبرمج في ننقرة، تتطلب العقود الذكية استراتيجيات آمنة للغاية وتتطلب الكثير من الوقت.

كيف تتوافق العقود الذكية مع تكنولوجيا البلوكشين: BeInCrypto

يوحي المصطلح الشائع "web3" بالعادات البرمجية الضعيفة والغير آمنة للويب. عندما يتم برمجة العملات المشفرة أو العقود الذكية مثل صفحة ويب، فهي محكومة بالفشل. تعتمد سلاسل الكتل الناجحة وتطبيقاتها بشكل مستدام على طرق برمجية أكثر أمانًا وحذرًا وبطيئة بكثير.

نيك سزابو، عالم تشفير وعالم حاسوب: تويتر

يمكن للعقود الذكية العمل مع الرموز الخاصة بتقنية البلوكشين، مثل ERC-20 لسلسلة الكتل Ethereum، محفزة الجهود ونقل المعاملات. نظرًا لوجود شروط وتكاليف كودية، يجب أن تكون حذرًا عند قراءتها وكتابتها وتدقيقها.

العقود الذكية وأهميتها

المغزى الحقيقي للعقود الذكية يتعلق بطبيعتها وتصويبها. لسيناريو معين - مثلاً شخص A ينقل الأموال إلى الشخص B عندما يكتمل الشخص B الخدمة - يتم حفظ نسخة من العقد الذكي وتنفيذها من قبل عقداء البلوكشين. تُحفظ العقود الذكية كأكواد عقد داخل السلسلة. هذا التحقق المتعدد المسارات هو سمة تتمحور حول البلوكشين ويحافظ على الأمان.

بالإضافة إلى ذلك، هناك عقود ذكية تسلسلية أو متزامنة و العقود الذكية الغير متزامنةحيث تُنفذ المهام بشكل متوازٍ. لذلك، يحدد نوع وغرض العقد الذكي كيفية كتابته، قراءته، أو حتى مراجعته.

العقود التقليدية، أواكت العقارات، وصيغ الوصايا، وما إلى ذلك هي قوانين خاصة، 'صاغها أفراد خاصون بدلاً من السياسيين أو الموظفين الحكوميين.' العقود الذكية هي شكل جديد من هذا النوع من صنع القوانين المركزية.https://t.co/EU2Y28FznK
— نيك سزابو (@NickSzabo4)15 مارس 2018

لننظر إلى بجدول السيولة القياسي الذي يحكمه عقد ذكي.

تخيل أن حوض الرموز يمكن استخدامه للتداول، وفي كل مرة يحدث فيها تداول ناجح، يتم إرسال 0.3% من قيمة التداول الإجمالية إلى مزود السيولة الذي جعل هذا التداول ممكنًا أو أضاف سيولة لتلك الأصل التداولي المعطى. جميع الشروط التي تسلط الضوء على سيناريوهات التداول، ورسوم التداول، وشروط عدم الامتثال وفشل التداول مُشفرة كـ العقد الذكي، والتي يتم تخزينها في السلسلة كرمز عقد.

خصائص العقود الذكية

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

بعض صفات العقد الذكي القياسي: BeInCrypto

العقود القابلة للبرمجة

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

غير موثوق

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

مستقل

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

مؤمن

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

قابل للتحقق

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

لذا في المرة القادمة التي تخطط فيها لقراءة عقد ذكي، تأكد من أن النص القياسي أو الوثائق تحتوي على جميع السمات المذكورة.


نسخة مبسطة من العقد الذكي: رديت

قراءة العقود الذكية بناءً على السمات

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

/ SPDX-License-Identifier: MITpragma solidity ^0.8.0;// Basic Smart Contract Boilerplatecontract SimpleTrustlessEscrow {// State variablesaddress public depositor; // Account depositing etheraddress payable public beneficiary; // Account receiving etheruint256 public releaseTime; // Timestamp to release ether// Events for verifying contract activityevent Deposited(address indexed _from, uint256 _value);event Released(address indexed _to, uint256 _value);// The contract constructor initializes the smart contractconstructor(address payable _beneficiary, uint256 _releaseTime) {    require(_releaseTime > block.timestamp, “Release time must be in the future”);    // Secure and Trustless: Contract binds depositor and beneficiary    depositor = msg.sender;    beneficiary = _beneficiary;    releaseTime = _releaseTime;}// Deposit function – autonomous execution (fallback function)receive() external payable {    emit Deposited(msg.sender, msg.value);}// Release the ether to the beneficiaryfunction release() public {    // Programmable: Can only be executed after releaseTime    require(block.timestamp >= releaseTime, “Too early to release”);    // Autonomous: Automatically executes based on condition    uint256 amount = address(this).balance;    beneficiary.transfer(amount);    emit Released(beneficiary, amount);}}

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

الجزء "القابل للبرمجة"

انظر إلى العقد عن كثب لهذه الجزء من الرمز:

require(block.timestamp >= releaseTime, “مبكر جدا للإطلاق”);

uint256 amount = address(this).balance;

المستفيد.تحويل(المبلغ);

يجب أن تُطلق الأموال فقط عندما تتوفر شرط releaseTime المحدد، مما يجعل هذه العقود قابلة للبرمجة.

الجزء "غير الموثوق به"

فيما يلي مقتطف شفرة سريع مما سبق:

المودع = msg.sender ؛

المستفيد = _beneficiary;

releaseTime = _releaseTime;

في العقد ، كل شخص ملزم بالكود من المودع إلى الشخص الذي يتلقى الأموال. لا يحتاج أي شخص إلى التفاعل مع الآخر أو الوثوق به لأن وظيفة تحويل الأموال مرتبطة ب releaseTime - وهي معلمة قائمة على التعليمات البرمجية.

الجزء "المستقل"

هنا هو جزء "إطلاق الصندوق" من الشيفرة:

 function release() public {require(block.timestamp >= releaseTime, 'مبكر جدًا للإطلاق');uint256 amount = address(this).balance;beneficiary.transfer(amount);emit Released(beneficiary, amount);}

العملية بأكملها آلية، حيث لا تتم الإفراج عن الأموال إلا عندما يفي releaseTime بمعيار معين. لاحظ أن الكود ليس قابلاً للبرمجة جزئيًا ولكنه آلي بالكامل.

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

الجزء المؤمن

Concerned as to which element lends الأمانإلى العقد؟ تحقق من هذا الجزء من الشيفرة:

constructor(address payable _beneficiary, uint256 _releaseTime) {require(_releaseTime > block.timestamp, “Release time must be in the future”);depositor = msg.sender;beneficiary = _beneficiary;releaseTime = _releaseTime;}

لاحظ كيف يوجد أولوية مجموعة من وظيفة releaseTime بالنسبة للطابع الزمني. لا شيء عشوائي، ويجب تحقيق الشروط.

الجزء 'القابل للتحقق'

يتم تسجيل كل عملية مرتبطة بالعقد الذكي داخل السلسلة، بفضل عناصر النشاط في السجل المنفصلة.

حدث تم الإيداع(address indexed _from، uint256 _value);

event Released(address indexed _to, uint256 _value);

أرسلت (المرسل، القيمة (الرسالة

إصدار (المستفيد، الكمية);

قراءة أجزاء أخرى من العقد الذكي

الآن بعد تحديد العناصر التي تحدد خصائص العقد الذكي، هنا هي عناصر العقد الأخرى لمساعدتك على فهم الحفرة بشكل أفضل.

Pragma الصلاد ^0.8.0; - الإصدار المطلوب من لغة برمجة Solidity لكتابة هذا العقد الذكي.

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

العقد الزمني للوقت { - يسند اسمًا إلى العقد الذكي، مثل تسمية.

مخاطبة المودع العام. – بما أن العقد يتضمن مودعا ومستفيدا ، فهذه هي النقطة التي يتم فيها ذكر العنوان العام للمودع. هذا المتغير هو محفظة الإثريومالعنوان ويمكن رؤيته علناً.

العنوان العام للمستفيد القابل للدفع؛ - هذا هو العنوان العام للمستفيد حيث يقوم الضمان بتحويل الأموال. كما أنه قابل للقراءة ويضفي شعورًا بالشفافية على العقود الذكية المعتمدة على تقنية سلسلة الكتل.

وقت الإصدار العام Uint256 ؛ - نظرا لأنه عقد محدد زمنيا ، فإن uint256 يعين المتغير المستند إلى الوقت للعقد. سيكون هذا هو الإطار الزمني الذي سيتم بموجبه إصدار الصندوق.

في الصلادة، uint (unsigned integer) هو الطريقة لتعيين القيم القائمة على الأعداد الصحيحة. اللاحقة 256 تعني تخزين كبير للأرقام.

بعد 5 سنوات من كتابة العقود الذكية ، أدرك اليوم فقط أن شعار الصلابة هو شعار Ethereum الذي تم الكشف عنه 🤯 pic.twitter.com/wlM369Eff9
— kaden.eth (@0xKaden)8 يوليو، 2023

يمكنك التفكير في القراءة وثائق الصلابةللتعرف على الصياغة النحوية والتعابير وعناصر الشيفرة الأخرى.

عناصر أخرى

constructor(address payable _beneficiary, uint256 _releaseTime) { – الـ"Constructor" هو وظيفة خاصة لمرة واحدة تُستدعى عند نشر العقد الذكي. يضع العقد في حركة. انتبه كيف يتم استدعاء وتهيئة جميع متغيرات العنوان التي أعلنا عنها سابقًا في هذه النقطة.

Receive() external payable { – هذه وظيفة خاصة تُسمى عندما تتحرك الأموال إلى عنوان العقد من الخارج. الخارجية تقترح من الخارج، و"قابل للدفع" يحدد طبيعة الحركة، وهي استلام رموز ERC-20.

تحرير الوظيفة() العام { - هذه وظيفة عامة تحدد حركة رموز ERC-20 من عنوان العقد إلى المستفيد. تعتمد هذه الوظيفة على releaseTime.

كل هذه العناصر هي أجزاء من العقد الودي الافتراضي الذي ناقشناه. تأكد من الانتقال عبر توثيق سوليديتي الكامل لتعرف أكثر عن اللغة.

تعرف على العناصر قبل أن تخطط لكتابة العقود الذكية: BeInCrypto

التطبيقات اللامركزية والعقود الذكية: العلاقة

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

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

البلوكشينات للعقود الذكية

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

ولكن أولاً، دعونا نناقشإثيريوم— المنصة المفضلة لمعظم مطوري العقود الذكية.

إثيريوم

العقود الذكية على الإيثيريوم مكتوبة بلغة برمجة سوليديتي. وواجهة الرمز لهذه المنصة لتطوير العقود الذكية هي ERC-20.

يمكنك العودة إلى العقد الذكي القائم على الضمان الذي تحدثنا عنه سابقًا لمعرفة كيفية كتابة عقد ذكي معتمد على إثريوم القياسي.

حتى إطلاق رمز ERC-20 على سلسلة الكتل الخاصة ب Ethereum هو ميزة تعتمد بشكل كبير على العقود الذكية، شيء سنناقشه بعمق أثناء كتابة عقد ذكي.

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

اعتبر ذلك سيناريواً تخيّلياً. ليس بالضرورة إطلاق عملة مشفرة BIC.

pragma الصلب ^0.8.0؛import "@openzeppelin/العقد الذكي/العملات/ERC20/ERC20.sol"؛العقد BICToken هو ERC20 {    constructor(uint256 العرض الأولي) ERC20("BIC Token", "BIC") {        _mint(msg.sender, العرض الأولي);    }}

سنناقش كل عنصر من هذا الكود لاحقًا عند كتابة عقدنا الذكي.

سلاسل الكتل الأخرى

مثل Ethereum ، يمكنك حتى إنشاء عقود ذكية على منصات مثل سولانا, باستخدام Rust و Cardano، باستخدام Plutus، وهو جزء من Haskell — لغة برمجة وظيفية.

هل لدى Cordona عقود ذكية؟
النكات عليك، صديقي.#CardanoADApic.twitter.com/j8SXCu72Sd
— Willybot 🇦🇺 (@wilbot28) 9 يوليو، 2023

هنا هي هيكلة الكود في Rust (سولانا) يبدو كما يلي:

ملاحظة: إنه عقد بسيط حيث يتم زيادة العداد.

use anchor_lang::prelude::*;declare_id!(“Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS”);#[برنامج] العهد العالمي {استخدم super::*;pub fn initialize(ctx: Context<Initialize>) -> ProgramResult {    let greeting_account = &mut ctx.accounts.greeting_account;    greeting_account.counter = 0;    Ok(())}pub fn increment(ctx: Context<Increment>) -> ProgramResult {    let greeting_account = &mut ctx.accounts.greeting_account;    greeting_account.counter += 1;    Ok(())}}

هل تعلم؟ بينما يعتبر Rust لغة البرمجة لإنشاء العقود الذكية المعتمدة على سولانا، مرساةهو إطار تطوير العقود الذكية الذي يُستخدم. لإنشاء عقود ذكية باستخدام Rust، يحتاج المطورون إلى سحب الوحدات من إطار Anchor - شيء يتطلبه السطر الأول من رمز العينة الخاص بنا (استخدام anchor_lang::prelude::*;) stands for.

توثيق سولاناستساعدك على فهم لغة العقد الذكي المحددة لراست.

وبالمثل ، يتبع كاردانو بلوتوس كاختيار للغة ، يليه الحبر! لغة ل بولكادوت, TEAL لألجوراند، C# لنيو، والمزيد. من النصح بتعلم توثيق كل سلسلة تفصيليًا قبل المتابعة مع كتابة العقد الذكي المتوافقة.

لماذا يجب عليك تعلم قراءة العقود الذكية؟

القدرة على كتابة العقود الذكية معترف بها بشدة، ولكن حتى القدرة على القراءة تأتي مع حصتها من الفوائد:

  1. القدرة على التعرف على تعقيدات التشغيل التلقائي المرتبطة بتطبيقات ديفي.
  2. تحليل معايير الملكية المرتبطة بالأصول توكينة.
  3. Understanding how منظمات الديسينترالية المستقلة (DAOs) function.
  4. فهم وتنفيذ منطق مدفوع بحالة الاستخدام المتعلق بالتأمين، تحقيق الدخل من المحتوى، التصويتالنظام والعوائد والعمود الأخرى.

كيفية كتابة العقود الذكية

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

لمعظم مناقشتنا، سنركز على إثريوم كسلسلة وصوليديتي كلغة.

دور البرمجة

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

سلاسل الكتل المختلفة واللغة المستخدمة لكتابة العقود الذكية: BeInCrypto

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

EVM والعقود الذكية: ملخص للوضع الحالي

أي شخص يخطط لكتابة العقود الذكية على إيثريوم يحتاج إلى فهم ما هو آلة إيثريوم الافتراضية (EVM) وكيف تعمل مع العقود الذكية. بالنسبة للمبتدئين، فإن EVM هو مكون إيثريوم يمنح البرامج بيئة معزولة ومراقبة للعمل. اعتبر هذا جهاز كمبيوتر عالمي يستضيف كل قطعة من شيفرة العقد الموجودة على إيثريوم. كل عقدعلى شبكة Ethereum يعمل EVM.

إذا كنت تطمح في أن تكون مطور عقود ذكية، فإليك ما تحتاج إلى معرفته فيما يتعلق بالعقود الذكية و EVM.

عندما تكتب البرنامج بلغة الصلادة، وهي لغة مستوى عالٍ، تحتاج إلى ترجمته إلى بايت كود - تنسيق منخفض المستوى قابل للفهم من قبل الجهاز. يتم إدخال هذا البايت كود إلى سلسلة الكتل الخاصة بـ Ethereum ويبقى هناك. أي شخص يتفاعل مع العقد الذكي يحتاج إلى إرسال عملية تحويل إلى عنوان العقد.

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

هل يمكن لأي شخص كتابة العقد الذكي؟

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

كل ذلك قد يصبح ساحقًا. لذا ها هي ورقة غش سريعة للبدء:

  1. ابدأ بتحديد المنصة أو السلسلة التي ترغب في العمل معها.
  2. تعلم لغة البرمجة المرتبطة بالسلسلة، مثل Solidity لـ Ethereum.
  3. تعرف على استخدام أدوات التطوير مثل بيئة التطوير المتكاملة مثل ريمكس.
  4. ابدأ بكتابة عقدك الأول ثم قم بالاختبار باستخدام شبكات الاختبار.
  5. بمجرد أن تكون راضيًا عن عناصر الكود، يمكنك نشره على السلسلة. تذكر أن نشر العقد على السلسلة سيكلفك رسوم الغاز.

هنا سلسلة سريعة مع بعض النصائح لكتابة عقود ذكية أفضل:

🥧 FREI-PI
‼️ لماذا يحتاج مطورو العقود الذكية إلى معرفة هذا!
وظيفة:
– متطلبات
– التأثيرات
– التفاعلات
بروتوكول
– الثوابت
هذا هو النمط الذي يجب عليكم جميعا التفكير فيه عند بناء العقود الذكية.
ها هو السبب 👇
— باتريك كولينز (@PatrickAlphaC)6 يوليو 2023

الغوص في البرمجة

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

هل تعلم؟ في عام 2022 وحده، وصل عدد تطبيقات اللامركزية إلى شبكة الإيثيريوم أكثر من 100،000 تطبيق.

لماذا الحصول على Ethereum؟

إثيريوم لديه مجتمع ضخم من المطورين. أي شيء تطوّره سيحظى فوراً بالاهتمام. بالإضافة إلى أن لغته الأصلية، Solidity، سهلة نسبياً للأفراد الذين يعرفون طريقهم في Python أو JavaScript. وأخيرًا، يساعد البرنامج العالمي لإثيريوم، EVM، في تنفيذ العقود بسلاسة.

إذا كنت في الأغلبية وتفضل استخدام إيثريوم والتضامن، ها هي قائمة سريعة بالأشياء التي تحتاج تتبعها قبل البدء في تطوير العقد الذكي:

  1. براغماس أو إصدار المترجم
  2. تعريف العقد للتصنيف
  3. المتغيرات الحالية لتخزين البيانات
  4. الأحداث لتسجيل EVM
  5. المعدلات لمنح حقوق محددة لهيئات محددة
  6. الوظائف أو الأنشطة في العقد الذكي التي تعمل
  7. الإرث للتوافق
  8. فهم الهياكل التحكم مثل if، else، for loops، أنواع البيانات مثل string، integer، وأكثر.

كتابة ونشر العقد الذكي الأول

الآن بعد أن نعرف كيف تسير الأمور على السلسلة، دعونا نغوص في كتابة ونشر العقد الذكي الأول. على الرغم من أن "مرحبًا بالعالم" يظل الخطوة الأولى، سنبدأ بإنشاء عقد ذكي لإطلاق رمز BIC الافتراضي مع إمداد مفتوح بنسبة 100٪ يبلغ مليون وحدة.

الأساسيات

الخطوة الأولى هي تثبيت أحدث إصدار من Node.js و NPM أو Node Package Manager. يهتم هذا بأدوات التطوير والبيئة المحلية للتطوير. أيضًا، يسمح لك Node.js و NPM بتعيين الواجهة الأمامية للويب لعقدك الذكي.

الآن، تحتاج إلى تعيين بيئة تطوير متكاملة لكتابة كود العقد. لذا، يمكنك تثبيت برنامج Visual Studio Code بسرعة. أو يمكنك تجنب التشتت وhopعلى Alchemy — منصة تطوير البلوكشين. مع Alchemy، يمكنك الحصول على ببعض ETH على شبكة الاختبار. سيغطي هذا رسوم الغاز عند نشر العقد الذكي على شبكة Goerli أو حتى شبكة Sepolia.

لاحظ أن سيبوليا هو شبكة اختبار أصغر سنًا وبالتالي تستغرق مساحة أقل على القرص عند نشر العقد الذكي.

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

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

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

خطوات لكتابة ونشر

هنا هو مقتطف الرمز البرمجي البسيط للرمز الظاهري:

pragma التماس ^0.8.0؛import "@openzeppelin/العقد/ERC20/ERC20.sol"؛العقد BICToken هو ERC20 {    constructor() ERC20("BIC Token", "BIC") {        _mint(msg.sender، 1000000 * 10 ** العشريات());    }}

إذا كنت على دراية بالصياغة النحوية، فستعرف ما يعنيه كل مكون في الشفرة. أما بالنسبة إلىOpenzepplinجزء، هو المكتبة المعتمدة لاستيراد العقود الذكية ERC-20. تقدم هذه المكتبة معايير التشغيل الأساسية للرموز ERC-20.

يتحدث وظيفة الصك عن الإمداد الأولي، الذي يتم نشره إلى عنوان العقد الذكي أو msg.sender.

لتثبيت هذا الكود محليًا واختباره، سنحتاج إلى ثلاث مكونات:

  1. Node.js و NPM (تم مناقشتها بالفعل): تعمل مثل محرك لتشغيل العقود الذكية الخاصة بك
  2. ترافل: يعمل مثل صندوق أدوات، مساعدة في تنظيم الشيفرة، النصوص، وأجزاء أخرى من عقد
  3. Ganache: يعمل مثل ساحة لعب افتراضية على الجهاز. فكر فيها كسلسلة كتل شخصية.

ما هي تنفيذ العقد؟

إذا مررت بعملية التفصيلية لكتابة العقد الذكي، من الضروري معرفة الكثير عن تنفيذ العقد. إنها عملية يتم خلالها تنفيذ كود العقد الذكي على السلسلة بواسطة العقد.

إن التوحيد المرتبط بتنفيذ العقد هو ما يجعل العقود الذكية شفافة ولا يمكن تغييرها. دعونا الآن نفهم العملية المتعددة الخطوات المرتبطة بتنفيذ العقد:

الخطوة 1

يجب تنفيذ مقتطفات الكود التي كنا نكتبها في مكان ما. في حالة العقود الذكية، هذا المكان للتنفيذ هو البلوكشين. يساعد العقد في التنفيذ العقد العُقَداء أو أعضاء السلسلة المشاركين.

الخطوة 2

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

الخطوة 3

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

الخطوة 4

يتم اختيار المعاملات المستهدفة نحو العقد الذكي من قبل المحققين، الذين يضمنون ضمها في كتل محددة.

الخطوة 5

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

الخطوة 6

يجب أن يصل كل عقد ذكي ينفذ إلى استنتاج حاسم - نفس الناتج لنفس مجموعة الإدخالات - مما يجعل طبيعة العقود موثوقة تمامًا وشفافة.

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

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

تطوير العقد الذكي وأفضل الممارسات

الآن بعد أن تعرفت على نحو كبير عن العقود الذكية، إليك بعض النقاط للبدء في تطوير العقد:

  1. أثناء كتابة العقود، من المستحسن الاعتماد على مكتبات موثوقة مثل تلك الموجودة في OpenZeppelin للالتزام بمعايير تحسين الكود والأمان المطلوبة.
  2. الفكرة هي أن نحافظ على العقد بشكل موديل وأبسط - مما يجعل من الأسهل اختباره ومراجعته.
  3. فكرة جيدة هي تنفيذ ضوابط الوصول الخاصة بالعقد. هذا يعني الإعلان عن بتات التعليمات البرمجية حيث يمكن لشخص أو كيان معين فقط تغيير السمات الحاسمة للعقد. يسهل التحكم في الوصول الحفاظ على أمان العقود الذكية.
  4. أثناء كتابة عقد، يجب دائمًا توفير تصرفات للتعامل مع الحالات الحدية والاستثناءات — وذلك أثناء كتابة اختبارات متعددة.

رعاية استدامة الشيفرة

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

  1. تعامل مع تخزين البيانات بكفاءة عن طريق استخدام مجموعات بيانات أصغر. على سبيل المثال، أثناء كتابة عقد، استخدم uint8 كقيمة تشغيلية بدلاً من uint256.
  2. أثناء كتابة عقد، من النصح تحسين الكود عن طريق دمج عمليات متعددة في واحدة. سنقوم بالتناول العميق لهذا في قطعتنا التفصيلية عن "كتابة العقود الذكية".
  3. فكرة جيدة هي استخدام التقدير الكسول فيما يتعلق بتنفيذ العقد الذكي. بهذه الطريقة، ستحتاج فقط إلى تنفيذ وظيفة عند الحاجة وليس في كل مرة يتم فيها دفع شيء إلى عنوان العقد الذكي.
  4. وأخيرًا ، الاعتماد على الحسابات خارج السلسلة هو أيضًا وسيلة جيدة للتركيز على الاستدامة. هذا يساعد في تخفيض متطلبات رسوم الغاز ويمكن أن يسرع حتى تنفيذ العقد.

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

كيفية تدقيق العقود الذكية؟

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

فيما يلي قائمة مراجعة تدقيق سريعة للبدء:
قائمة تدقيق عقود ذكية مذهلة😈
تأكد من التحقق منها في عملية التدقيق القادمة✅
سأكون ممتنًا لإعادة التغريد، انشر المعرفة🫡https://t.co/ILx0C67kf8
— cholakov (@cholakovv)7 يوليو 2023

العلاقة بين القراءة والكتابة والتدقيق: لماذا حتى تدقيق العقود الذكية؟

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

العقد الذكي الثغرات والإصلاحات

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

الانتهاكات تلقي دراسات وتعلمات

لا تزال غير متأكد كيف يمكن لتدقيق العقود الذكية المساعدة؟ حسنًا، دعونا نعود إلى الشهيرةDAOالاختراق في عام 2016، الذي استغل مشكلة إعادة الدخول وتسبب في خسارة تقريبا 3.6 مليون ETH. بالمثل، كان هناك اختراق عقد محفظة Parity في عام 2017، مما أدى إلى خسارة تقريبا 500،000 ETH. كان بإمكان تجنب هذه المشاكل بمجموعة صحيحة من عمليات التدقيق.


مخطط انسيابي لاختراق DAO: BeInCrypto

استراتيجيات تدقيق العقود الذكية

هناك العديد من الاستراتيجيات لتدقيق العقود الذكية. وتشمل بعض الأكثر شيوعًا:

أدوات التدقيق

هذه الأدوات تعمل كمجموعة أولية من الدفاعات وتستخدم بشكل أفضل لتحديد الثغرات الشائعة. تشمل بعض الأدوات الأكثر شيوعًا Securify و Mythril وغيرها — القادرة على أداء تحليل ثابت للكود وكشف أنماط الانتهاك والمساعدة في الحصول على بداية سريعة متعلقة بالأمان.

أدوات لتدقيق العقود الذكية: BeInCrypto

مراجعة الشيفرة

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

ها هي كيف تساعدك مراجعات الشفرة اليدوية في تحديد التهديدات:

معلومة صغيرة لمراجعينا الصغار!
لنذهب ونعيد التغريد إذا وجدت الخلل!pic.twitter.com/i14YtweXcz
- تشارلز بالادين (@PaladinCharles) 8 يوليو 2023

فحوصات تلقائية

أدوات مثل Snyk و GuardRails تساعد في مسح العقود التلقائي — تنفيذ أمان يتم استدعاؤه في كل مرة يتم فيها تحديث الكود. يضمن هذا الشكل من التدقيق أن التغييرات الجديدة التي تم إجراؤها على الكود آمنة وغير مُعتدِلة بطبيعتها.

التحقق الرسمي

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

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

طريقة بسيطة لتدقيق العقود الذكية: BeInCrypto

كيف تستعرض الكود بشكل صحيح؟

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

التحليل الثابت

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

تحليل ديناميكي

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

اختبار قطعة فعلية من الشيفرة

هنا مقتطف من العقد الذكي الذي يعمل كتخزين للصندوق، يحتوي على وظيفة سحب الأموال:

pragma الصلب ^0.6.1;العقد VulnerableContract {    تعيين(عنوان => uint256) العام الرصيد؛    وظيفة ودائع() العام دفع {        الأرصدة[msg.sender] += قيمة رسالة؛    }    وظيفة انسحب(uint256 _المبلغ) العام {        يتطلب(الأرصدة[msg.sender] >= _المبلغ, "رصيد غير كافٍ.");        (نجاح بول, ) = msg.sender.call{value: _المبلغ}("");        يتطلب(النجاح, "فشل التحويل.");        الأرصدة[msg.sender] -= _المبلغ;    }}

إذا نظرت إلى الشفرة عن كثب، هناك ثغرة رئيسية:

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

ها هو الرمز الثابت لنفس الشيء:

function withdraw(uint256 _amount) public {    require(balances[msg.sender] >= _amount, "رصيد غير كافي.");    balances[msg.sender] -= _amount;    (bool success, ) = msg.sender.call{value: _amount}("");
require(success, “Transfer failed.”);}

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

سلاسل غير الإيثريوم ومراجعة الكود

لقد انتقل عالم التطبيقات اللامركزية والعقود الذكية إلى ما وراء Ethereum. على الرغم من أن الجزء الأكبر من الإجراءات لا يزال يحدث داخل نظام Ethereum البيئي ، إلا أن هناك سلاسل أخرى مثل Cardano و Solana والمزيد تدعم العقود الذكية وتتطلب معايير تدقيق مختلفة.

لماذا تكون كل منصة فريدة؟

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

أدوات للانتقال إلى غير إثيريوم

الآن إذا كنت ترغب في تجاوز Ethereum ، فهناك بعض أدوات التدقيق المتخصصة لتبدأ. على سبيل المثال ، مع Cardano ، هناك مجموعة Marlowe للتحقق الرسمي والتدقيق. عندما يتعلق الأمر ب Solana ، فإن libfuzzer الخاص بالصدأ وزغب البضائع مخصصان للتدقيق واختبار العقود. يجب أن يكون المدقق متعدد السلاسل على دراية بهذه المفاهيم لإبعاد نقاط الضعف في العقد.

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

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

تفويض تدقيقاتك

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

أيضًا، هنا عوامل يجب ملاحظتها أثناء تفويض مهام التدقيق:

اختيار الشركة المناسبة

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

فهم المسؤوليات والتكاليف والمصروفات العامة

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

أفضل ممارسات تدقيق العقود الذكية

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

  1. تركيز دائم على مراجعة الشيفرة بشكل شامل، بما في ذلك الصياغة والمنطق
  2. ابدأ بالتقاط نقاط الضعف الشائعة باستخدام أدوات مثل Slither و MythX والمزيد
  3. تصفح سجل تصنيف ضعف العقد الذكي أو SWC للعثور على الثغرات المعروفة والتحقق منها مسبقًا.
  4. اختبار العقود الذكية بدقة، بما في ذلك اختبارات التكامل، اختبارات الوحدة، والمزيد، لاختبار الكود عبر مجموعة واسعة من السيناريوهات.
  5. من المهم التحقق من فرص هجمات إعادة الدخول بشكل خاص. أفضل طريقة لمكافحتها هي التحقق من الاستدعاءات التكرارية التي يمكن أن يقوم بها القراصنة قبل دالة العقد الذكي الأولى.
  6. التركيز على الوظائف التي تؤدي إلى المكالمات الخارجية. يمكن أن يؤدي الخطأ في هذا الصدد إلى تغيير الحالة وتدفق التحكم، وهو أمر غير مرغوب فيه.
  7. تحقق دائمًا من أجزاء الكود التي تشير إلى استخدام الغاز. لا تريد أن يبدأ عقدك تفاعلات مكلفة للغاية.

تطوير العقد الذكي والذكاء الاصطناعي: المستقبل

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

إخلاء المسؤولية:

  1. هذه المقالة مأخوذة من [ Beincrypto], and the copyright belongs to the original author [Ananda Banerjee]. If there are objections to the reproduction, please contact the Gate Learn team, and the team will process it promptly according to relevant procedures.
  2. تنويه: تعبر الآراء والآراء المعبر عنها في هذا المقال فقط عن آراء الكاتب الشخصية ولا تشكل أي نصيحة استثمارية.
  3. تتم ترجمة النسخ الأخرى من المقال بواسطة فريق Gate Learn. من دون ذكر Gate.io، لا يُسمح بنسخ أو نشر أو ارتكاب الانتحال في المقالات المترجمة.

Поділіться

فهم العقود الذكية: قراءة، كتابة، ومراجعة

متقدم11/26/2023, 12:41:25 PM
يغطي هذا المقال تقنيات برمجة العقود الذكية، بما في ذلك الإرشادات للقراءة، والكتابة، والتدقيق. فهم هيكل وكتل الشفرة للعقود الذكية هو الخطوة الأولى لكتابتها بلغة الصلاد أو لغات أخرى. نظرًا لأن العقود الذكية تعتبر مركزية لتمويل اللامركزية (DeFi) وتطبيقات اللامركزية (DApps)، فإن ضمان أمنها وخلوها من العيوب أمر حاسم، مع تلعب فحوصات العقود الذكية دورًا رئيسيًا.

قراءة العقود الذكية

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

فهم العقود الذكية: الأساسيات والغرض

العقد الذكيمخصصة لتأتيمتز blockchain-specific تعاملات. حيث تعتبر عقود محددة الشروط، لذلك لا تتطلب وسطاء. ما يجعل العقود الذكية مفيدة هو توافقها عبر مجموعة واسعة من حالات الاستخدام، بما في ذلك الخدمات المالية، وإدارة سلسلة التوريد، وأكثر. وعلى عكس الشفرات التقليدية التي تبرمج في ننقرة، تتطلب العقود الذكية استراتيجيات آمنة للغاية وتتطلب الكثير من الوقت.

كيف تتوافق العقود الذكية مع تكنولوجيا البلوكشين: BeInCrypto

يوحي المصطلح الشائع "web3" بالعادات البرمجية الضعيفة والغير آمنة للويب. عندما يتم برمجة العملات المشفرة أو العقود الذكية مثل صفحة ويب، فهي محكومة بالفشل. تعتمد سلاسل الكتل الناجحة وتطبيقاتها بشكل مستدام على طرق برمجية أكثر أمانًا وحذرًا وبطيئة بكثير.

نيك سزابو، عالم تشفير وعالم حاسوب: تويتر

يمكن للعقود الذكية العمل مع الرموز الخاصة بتقنية البلوكشين، مثل ERC-20 لسلسلة الكتل Ethereum، محفزة الجهود ونقل المعاملات. نظرًا لوجود شروط وتكاليف كودية، يجب أن تكون حذرًا عند قراءتها وكتابتها وتدقيقها.

العقود الذكية وأهميتها

المغزى الحقيقي للعقود الذكية يتعلق بطبيعتها وتصويبها. لسيناريو معين - مثلاً شخص A ينقل الأموال إلى الشخص B عندما يكتمل الشخص B الخدمة - يتم حفظ نسخة من العقد الذكي وتنفيذها من قبل عقداء البلوكشين. تُحفظ العقود الذكية كأكواد عقد داخل السلسلة. هذا التحقق المتعدد المسارات هو سمة تتمحور حول البلوكشين ويحافظ على الأمان.

بالإضافة إلى ذلك، هناك عقود ذكية تسلسلية أو متزامنة و العقود الذكية الغير متزامنةحيث تُنفذ المهام بشكل متوازٍ. لذلك، يحدد نوع وغرض العقد الذكي كيفية كتابته، قراءته، أو حتى مراجعته.

العقود التقليدية، أواكت العقارات، وصيغ الوصايا، وما إلى ذلك هي قوانين خاصة، 'صاغها أفراد خاصون بدلاً من السياسيين أو الموظفين الحكوميين.' العقود الذكية هي شكل جديد من هذا النوع من صنع القوانين المركزية.https://t.co/EU2Y28FznK
— نيك سزابو (@NickSzabo4)15 مارس 2018

لننظر إلى بجدول السيولة القياسي الذي يحكمه عقد ذكي.

تخيل أن حوض الرموز يمكن استخدامه للتداول، وفي كل مرة يحدث فيها تداول ناجح، يتم إرسال 0.3% من قيمة التداول الإجمالية إلى مزود السيولة الذي جعل هذا التداول ممكنًا أو أضاف سيولة لتلك الأصل التداولي المعطى. جميع الشروط التي تسلط الضوء على سيناريوهات التداول، ورسوم التداول، وشروط عدم الامتثال وفشل التداول مُشفرة كـ العقد الذكي، والتي يتم تخزينها في السلسلة كرمز عقد.

خصائص العقود الذكية

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

بعض صفات العقد الذكي القياسي: BeInCrypto

العقود القابلة للبرمجة

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

غير موثوق

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

مستقل

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

مؤمن

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

قابل للتحقق

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

لذا في المرة القادمة التي تخطط فيها لقراءة عقد ذكي، تأكد من أن النص القياسي أو الوثائق تحتوي على جميع السمات المذكورة.


نسخة مبسطة من العقد الذكي: رديت

قراءة العقود الذكية بناءً على السمات

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

/ SPDX-License-Identifier: MITpragma solidity ^0.8.0;// Basic Smart Contract Boilerplatecontract SimpleTrustlessEscrow {// State variablesaddress public depositor; // Account depositing etheraddress payable public beneficiary; // Account receiving etheruint256 public releaseTime; // Timestamp to release ether// Events for verifying contract activityevent Deposited(address indexed _from, uint256 _value);event Released(address indexed _to, uint256 _value);// The contract constructor initializes the smart contractconstructor(address payable _beneficiary, uint256 _releaseTime) {    require(_releaseTime > block.timestamp, “Release time must be in the future”);    // Secure and Trustless: Contract binds depositor and beneficiary    depositor = msg.sender;    beneficiary = _beneficiary;    releaseTime = _releaseTime;}// Deposit function – autonomous execution (fallback function)receive() external payable {    emit Deposited(msg.sender, msg.value);}// Release the ether to the beneficiaryfunction release() public {    // Programmable: Can only be executed after releaseTime    require(block.timestamp >= releaseTime, “Too early to release”);    // Autonomous: Automatically executes based on condition    uint256 amount = address(this).balance;    beneficiary.transfer(amount);    emit Released(beneficiary, amount);}}

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

الجزء "القابل للبرمجة"

انظر إلى العقد عن كثب لهذه الجزء من الرمز:

require(block.timestamp >= releaseTime, “مبكر جدا للإطلاق”);

uint256 amount = address(this).balance;

المستفيد.تحويل(المبلغ);

يجب أن تُطلق الأموال فقط عندما تتوفر شرط releaseTime المحدد، مما يجعل هذه العقود قابلة للبرمجة.

الجزء "غير الموثوق به"

فيما يلي مقتطف شفرة سريع مما سبق:

المودع = msg.sender ؛

المستفيد = _beneficiary;

releaseTime = _releaseTime;

في العقد ، كل شخص ملزم بالكود من المودع إلى الشخص الذي يتلقى الأموال. لا يحتاج أي شخص إلى التفاعل مع الآخر أو الوثوق به لأن وظيفة تحويل الأموال مرتبطة ب releaseTime - وهي معلمة قائمة على التعليمات البرمجية.

الجزء "المستقل"

هنا هو جزء "إطلاق الصندوق" من الشيفرة:

 function release() public {require(block.timestamp >= releaseTime, 'مبكر جدًا للإطلاق');uint256 amount = address(this).balance;beneficiary.transfer(amount);emit Released(beneficiary, amount);}

العملية بأكملها آلية، حيث لا تتم الإفراج عن الأموال إلا عندما يفي releaseTime بمعيار معين. لاحظ أن الكود ليس قابلاً للبرمجة جزئيًا ولكنه آلي بالكامل.

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

الجزء المؤمن

Concerned as to which element lends الأمانإلى العقد؟ تحقق من هذا الجزء من الشيفرة:

constructor(address payable _beneficiary, uint256 _releaseTime) {require(_releaseTime > block.timestamp, “Release time must be in the future”);depositor = msg.sender;beneficiary = _beneficiary;releaseTime = _releaseTime;}

لاحظ كيف يوجد أولوية مجموعة من وظيفة releaseTime بالنسبة للطابع الزمني. لا شيء عشوائي، ويجب تحقيق الشروط.

الجزء 'القابل للتحقق'

يتم تسجيل كل عملية مرتبطة بالعقد الذكي داخل السلسلة، بفضل عناصر النشاط في السجل المنفصلة.

حدث تم الإيداع(address indexed _from، uint256 _value);

event Released(address indexed _to, uint256 _value);

أرسلت (المرسل، القيمة (الرسالة

إصدار (المستفيد، الكمية);

قراءة أجزاء أخرى من العقد الذكي

الآن بعد تحديد العناصر التي تحدد خصائص العقد الذكي، هنا هي عناصر العقد الأخرى لمساعدتك على فهم الحفرة بشكل أفضل.

Pragma الصلاد ^0.8.0; - الإصدار المطلوب من لغة برمجة Solidity لكتابة هذا العقد الذكي.

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

العقد الزمني للوقت { - يسند اسمًا إلى العقد الذكي، مثل تسمية.

مخاطبة المودع العام. – بما أن العقد يتضمن مودعا ومستفيدا ، فهذه هي النقطة التي يتم فيها ذكر العنوان العام للمودع. هذا المتغير هو محفظة الإثريومالعنوان ويمكن رؤيته علناً.

العنوان العام للمستفيد القابل للدفع؛ - هذا هو العنوان العام للمستفيد حيث يقوم الضمان بتحويل الأموال. كما أنه قابل للقراءة ويضفي شعورًا بالشفافية على العقود الذكية المعتمدة على تقنية سلسلة الكتل.

وقت الإصدار العام Uint256 ؛ - نظرا لأنه عقد محدد زمنيا ، فإن uint256 يعين المتغير المستند إلى الوقت للعقد. سيكون هذا هو الإطار الزمني الذي سيتم بموجبه إصدار الصندوق.

في الصلادة، uint (unsigned integer) هو الطريقة لتعيين القيم القائمة على الأعداد الصحيحة. اللاحقة 256 تعني تخزين كبير للأرقام.

بعد 5 سنوات من كتابة العقود الذكية ، أدرك اليوم فقط أن شعار الصلابة هو شعار Ethereum الذي تم الكشف عنه 🤯 pic.twitter.com/wlM369Eff9
— kaden.eth (@0xKaden)8 يوليو، 2023

يمكنك التفكير في القراءة وثائق الصلابةللتعرف على الصياغة النحوية والتعابير وعناصر الشيفرة الأخرى.

عناصر أخرى

constructor(address payable _beneficiary, uint256 _releaseTime) { – الـ"Constructor" هو وظيفة خاصة لمرة واحدة تُستدعى عند نشر العقد الذكي. يضع العقد في حركة. انتبه كيف يتم استدعاء وتهيئة جميع متغيرات العنوان التي أعلنا عنها سابقًا في هذه النقطة.

Receive() external payable { – هذه وظيفة خاصة تُسمى عندما تتحرك الأموال إلى عنوان العقد من الخارج. الخارجية تقترح من الخارج، و"قابل للدفع" يحدد طبيعة الحركة، وهي استلام رموز ERC-20.

تحرير الوظيفة() العام { - هذه وظيفة عامة تحدد حركة رموز ERC-20 من عنوان العقد إلى المستفيد. تعتمد هذه الوظيفة على releaseTime.

كل هذه العناصر هي أجزاء من العقد الودي الافتراضي الذي ناقشناه. تأكد من الانتقال عبر توثيق سوليديتي الكامل لتعرف أكثر عن اللغة.

تعرف على العناصر قبل أن تخطط لكتابة العقود الذكية: BeInCrypto

التطبيقات اللامركزية والعقود الذكية: العلاقة

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

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

البلوكشينات للعقود الذكية

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

ولكن أولاً، دعونا نناقشإثيريوم— المنصة المفضلة لمعظم مطوري العقود الذكية.

إثيريوم

العقود الذكية على الإيثيريوم مكتوبة بلغة برمجة سوليديتي. وواجهة الرمز لهذه المنصة لتطوير العقود الذكية هي ERC-20.

يمكنك العودة إلى العقد الذكي القائم على الضمان الذي تحدثنا عنه سابقًا لمعرفة كيفية كتابة عقد ذكي معتمد على إثريوم القياسي.

حتى إطلاق رمز ERC-20 على سلسلة الكتل الخاصة ب Ethereum هو ميزة تعتمد بشكل كبير على العقود الذكية، شيء سنناقشه بعمق أثناء كتابة عقد ذكي.

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

اعتبر ذلك سيناريواً تخيّلياً. ليس بالضرورة إطلاق عملة مشفرة BIC.

pragma الصلب ^0.8.0؛import "@openzeppelin/العقد الذكي/العملات/ERC20/ERC20.sol"؛العقد BICToken هو ERC20 {    constructor(uint256 العرض الأولي) ERC20("BIC Token", "BIC") {        _mint(msg.sender, العرض الأولي);    }}

سنناقش كل عنصر من هذا الكود لاحقًا عند كتابة عقدنا الذكي.

سلاسل الكتل الأخرى

مثل Ethereum ، يمكنك حتى إنشاء عقود ذكية على منصات مثل سولانا, باستخدام Rust و Cardano، باستخدام Plutus، وهو جزء من Haskell — لغة برمجة وظيفية.

هل لدى Cordona عقود ذكية؟
النكات عليك، صديقي.#CardanoADApic.twitter.com/j8SXCu72Sd
— Willybot 🇦🇺 (@wilbot28) 9 يوليو، 2023

هنا هي هيكلة الكود في Rust (سولانا) يبدو كما يلي:

ملاحظة: إنه عقد بسيط حيث يتم زيادة العداد.

use anchor_lang::prelude::*;declare_id!(“Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS”);#[برنامج] العهد العالمي {استخدم super::*;pub fn initialize(ctx: Context<Initialize>) -> ProgramResult {    let greeting_account = &mut ctx.accounts.greeting_account;    greeting_account.counter = 0;    Ok(())}pub fn increment(ctx: Context<Increment>) -> ProgramResult {    let greeting_account = &mut ctx.accounts.greeting_account;    greeting_account.counter += 1;    Ok(())}}

هل تعلم؟ بينما يعتبر Rust لغة البرمجة لإنشاء العقود الذكية المعتمدة على سولانا، مرساةهو إطار تطوير العقود الذكية الذي يُستخدم. لإنشاء عقود ذكية باستخدام Rust، يحتاج المطورون إلى سحب الوحدات من إطار Anchor - شيء يتطلبه السطر الأول من رمز العينة الخاص بنا (استخدام anchor_lang::prelude::*;) stands for.

توثيق سولاناستساعدك على فهم لغة العقد الذكي المحددة لراست.

وبالمثل ، يتبع كاردانو بلوتوس كاختيار للغة ، يليه الحبر! لغة ل بولكادوت, TEAL لألجوراند، C# لنيو، والمزيد. من النصح بتعلم توثيق كل سلسلة تفصيليًا قبل المتابعة مع كتابة العقد الذكي المتوافقة.

لماذا يجب عليك تعلم قراءة العقود الذكية؟

القدرة على كتابة العقود الذكية معترف بها بشدة، ولكن حتى القدرة على القراءة تأتي مع حصتها من الفوائد:

  1. القدرة على التعرف على تعقيدات التشغيل التلقائي المرتبطة بتطبيقات ديفي.
  2. تحليل معايير الملكية المرتبطة بالأصول توكينة.
  3. Understanding how منظمات الديسينترالية المستقلة (DAOs) function.
  4. فهم وتنفيذ منطق مدفوع بحالة الاستخدام المتعلق بالتأمين، تحقيق الدخل من المحتوى، التصويتالنظام والعوائد والعمود الأخرى.

كيفية كتابة العقود الذكية

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

لمعظم مناقشتنا، سنركز على إثريوم كسلسلة وصوليديتي كلغة.

دور البرمجة

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

سلاسل الكتل المختلفة واللغة المستخدمة لكتابة العقود الذكية: BeInCrypto

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

EVM والعقود الذكية: ملخص للوضع الحالي

أي شخص يخطط لكتابة العقود الذكية على إيثريوم يحتاج إلى فهم ما هو آلة إيثريوم الافتراضية (EVM) وكيف تعمل مع العقود الذكية. بالنسبة للمبتدئين، فإن EVM هو مكون إيثريوم يمنح البرامج بيئة معزولة ومراقبة للعمل. اعتبر هذا جهاز كمبيوتر عالمي يستضيف كل قطعة من شيفرة العقد الموجودة على إيثريوم. كل عقدعلى شبكة Ethereum يعمل EVM.

إذا كنت تطمح في أن تكون مطور عقود ذكية، فإليك ما تحتاج إلى معرفته فيما يتعلق بالعقود الذكية و EVM.

عندما تكتب البرنامج بلغة الصلادة، وهي لغة مستوى عالٍ، تحتاج إلى ترجمته إلى بايت كود - تنسيق منخفض المستوى قابل للفهم من قبل الجهاز. يتم إدخال هذا البايت كود إلى سلسلة الكتل الخاصة بـ Ethereum ويبقى هناك. أي شخص يتفاعل مع العقد الذكي يحتاج إلى إرسال عملية تحويل إلى عنوان العقد.

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

هل يمكن لأي شخص كتابة العقد الذكي؟

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

كل ذلك قد يصبح ساحقًا. لذا ها هي ورقة غش سريعة للبدء:

  1. ابدأ بتحديد المنصة أو السلسلة التي ترغب في العمل معها.
  2. تعلم لغة البرمجة المرتبطة بالسلسلة، مثل Solidity لـ Ethereum.
  3. تعرف على استخدام أدوات التطوير مثل بيئة التطوير المتكاملة مثل ريمكس.
  4. ابدأ بكتابة عقدك الأول ثم قم بالاختبار باستخدام شبكات الاختبار.
  5. بمجرد أن تكون راضيًا عن عناصر الكود، يمكنك نشره على السلسلة. تذكر أن نشر العقد على السلسلة سيكلفك رسوم الغاز.

هنا سلسلة سريعة مع بعض النصائح لكتابة عقود ذكية أفضل:

🥧 FREI-PI
‼️ لماذا يحتاج مطورو العقود الذكية إلى معرفة هذا!
وظيفة:
– متطلبات
– التأثيرات
– التفاعلات
بروتوكول
– الثوابت
هذا هو النمط الذي يجب عليكم جميعا التفكير فيه عند بناء العقود الذكية.
ها هو السبب 👇
— باتريك كولينز (@PatrickAlphaC)6 يوليو 2023

الغوص في البرمجة

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

هل تعلم؟ في عام 2022 وحده، وصل عدد تطبيقات اللامركزية إلى شبكة الإيثيريوم أكثر من 100،000 تطبيق.

لماذا الحصول على Ethereum؟

إثيريوم لديه مجتمع ضخم من المطورين. أي شيء تطوّره سيحظى فوراً بالاهتمام. بالإضافة إلى أن لغته الأصلية، Solidity، سهلة نسبياً للأفراد الذين يعرفون طريقهم في Python أو JavaScript. وأخيرًا، يساعد البرنامج العالمي لإثيريوم، EVM، في تنفيذ العقود بسلاسة.

إذا كنت في الأغلبية وتفضل استخدام إيثريوم والتضامن، ها هي قائمة سريعة بالأشياء التي تحتاج تتبعها قبل البدء في تطوير العقد الذكي:

  1. براغماس أو إصدار المترجم
  2. تعريف العقد للتصنيف
  3. المتغيرات الحالية لتخزين البيانات
  4. الأحداث لتسجيل EVM
  5. المعدلات لمنح حقوق محددة لهيئات محددة
  6. الوظائف أو الأنشطة في العقد الذكي التي تعمل
  7. الإرث للتوافق
  8. فهم الهياكل التحكم مثل if، else، for loops، أنواع البيانات مثل string، integer، وأكثر.

كتابة ونشر العقد الذكي الأول

الآن بعد أن نعرف كيف تسير الأمور على السلسلة، دعونا نغوص في كتابة ونشر العقد الذكي الأول. على الرغم من أن "مرحبًا بالعالم" يظل الخطوة الأولى، سنبدأ بإنشاء عقد ذكي لإطلاق رمز BIC الافتراضي مع إمداد مفتوح بنسبة 100٪ يبلغ مليون وحدة.

الأساسيات

الخطوة الأولى هي تثبيت أحدث إصدار من Node.js و NPM أو Node Package Manager. يهتم هذا بأدوات التطوير والبيئة المحلية للتطوير. أيضًا، يسمح لك Node.js و NPM بتعيين الواجهة الأمامية للويب لعقدك الذكي.

الآن، تحتاج إلى تعيين بيئة تطوير متكاملة لكتابة كود العقد. لذا، يمكنك تثبيت برنامج Visual Studio Code بسرعة. أو يمكنك تجنب التشتت وhopعلى Alchemy — منصة تطوير البلوكشين. مع Alchemy، يمكنك الحصول على ببعض ETH على شبكة الاختبار. سيغطي هذا رسوم الغاز عند نشر العقد الذكي على شبكة Goerli أو حتى شبكة Sepolia.

لاحظ أن سيبوليا هو شبكة اختبار أصغر سنًا وبالتالي تستغرق مساحة أقل على القرص عند نشر العقد الذكي.

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

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

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

خطوات لكتابة ونشر

هنا هو مقتطف الرمز البرمجي البسيط للرمز الظاهري:

pragma التماس ^0.8.0؛import "@openzeppelin/العقد/ERC20/ERC20.sol"؛العقد BICToken هو ERC20 {    constructor() ERC20("BIC Token", "BIC") {        _mint(msg.sender، 1000000 * 10 ** العشريات());    }}

إذا كنت على دراية بالصياغة النحوية، فستعرف ما يعنيه كل مكون في الشفرة. أما بالنسبة إلىOpenzepplinجزء، هو المكتبة المعتمدة لاستيراد العقود الذكية ERC-20. تقدم هذه المكتبة معايير التشغيل الأساسية للرموز ERC-20.

يتحدث وظيفة الصك عن الإمداد الأولي، الذي يتم نشره إلى عنوان العقد الذكي أو msg.sender.

لتثبيت هذا الكود محليًا واختباره، سنحتاج إلى ثلاث مكونات:

  1. Node.js و NPM (تم مناقشتها بالفعل): تعمل مثل محرك لتشغيل العقود الذكية الخاصة بك
  2. ترافل: يعمل مثل صندوق أدوات، مساعدة في تنظيم الشيفرة، النصوص، وأجزاء أخرى من عقد
  3. Ganache: يعمل مثل ساحة لعب افتراضية على الجهاز. فكر فيها كسلسلة كتل شخصية.

ما هي تنفيذ العقد؟

إذا مررت بعملية التفصيلية لكتابة العقد الذكي، من الضروري معرفة الكثير عن تنفيذ العقد. إنها عملية يتم خلالها تنفيذ كود العقد الذكي على السلسلة بواسطة العقد.

إن التوحيد المرتبط بتنفيذ العقد هو ما يجعل العقود الذكية شفافة ولا يمكن تغييرها. دعونا الآن نفهم العملية المتعددة الخطوات المرتبطة بتنفيذ العقد:

الخطوة 1

يجب تنفيذ مقتطفات الكود التي كنا نكتبها في مكان ما. في حالة العقود الذكية، هذا المكان للتنفيذ هو البلوكشين. يساعد العقد في التنفيذ العقد العُقَداء أو أعضاء السلسلة المشاركين.

الخطوة 2

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

الخطوة 3

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

الخطوة 4

يتم اختيار المعاملات المستهدفة نحو العقد الذكي من قبل المحققين، الذين يضمنون ضمها في كتل محددة.

الخطوة 5

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

الخطوة 6

يجب أن يصل كل عقد ذكي ينفذ إلى استنتاج حاسم - نفس الناتج لنفس مجموعة الإدخالات - مما يجعل طبيعة العقود موثوقة تمامًا وشفافة.

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

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

تطوير العقد الذكي وأفضل الممارسات

الآن بعد أن تعرفت على نحو كبير عن العقود الذكية، إليك بعض النقاط للبدء في تطوير العقد:

  1. أثناء كتابة العقود، من المستحسن الاعتماد على مكتبات موثوقة مثل تلك الموجودة في OpenZeppelin للالتزام بمعايير تحسين الكود والأمان المطلوبة.
  2. الفكرة هي أن نحافظ على العقد بشكل موديل وأبسط - مما يجعل من الأسهل اختباره ومراجعته.
  3. فكرة جيدة هي تنفيذ ضوابط الوصول الخاصة بالعقد. هذا يعني الإعلان عن بتات التعليمات البرمجية حيث يمكن لشخص أو كيان معين فقط تغيير السمات الحاسمة للعقد. يسهل التحكم في الوصول الحفاظ على أمان العقود الذكية.
  4. أثناء كتابة عقد، يجب دائمًا توفير تصرفات للتعامل مع الحالات الحدية والاستثناءات — وذلك أثناء كتابة اختبارات متعددة.

رعاية استدامة الشيفرة

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

  1. تعامل مع تخزين البيانات بكفاءة عن طريق استخدام مجموعات بيانات أصغر. على سبيل المثال، أثناء كتابة عقد، استخدم uint8 كقيمة تشغيلية بدلاً من uint256.
  2. أثناء كتابة عقد، من النصح تحسين الكود عن طريق دمج عمليات متعددة في واحدة. سنقوم بالتناول العميق لهذا في قطعتنا التفصيلية عن "كتابة العقود الذكية".
  3. فكرة جيدة هي استخدام التقدير الكسول فيما يتعلق بتنفيذ العقد الذكي. بهذه الطريقة، ستحتاج فقط إلى تنفيذ وظيفة عند الحاجة وليس في كل مرة يتم فيها دفع شيء إلى عنوان العقد الذكي.
  4. وأخيرًا ، الاعتماد على الحسابات خارج السلسلة هو أيضًا وسيلة جيدة للتركيز على الاستدامة. هذا يساعد في تخفيض متطلبات رسوم الغاز ويمكن أن يسرع حتى تنفيذ العقد.

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

كيفية تدقيق العقود الذكية؟

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

فيما يلي قائمة مراجعة تدقيق سريعة للبدء:
قائمة تدقيق عقود ذكية مذهلة😈
تأكد من التحقق منها في عملية التدقيق القادمة✅
سأكون ممتنًا لإعادة التغريد، انشر المعرفة🫡https://t.co/ILx0C67kf8
— cholakov (@cholakovv)7 يوليو 2023

العلاقة بين القراءة والكتابة والتدقيق: لماذا حتى تدقيق العقود الذكية؟

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

العقد الذكي الثغرات والإصلاحات

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

الانتهاكات تلقي دراسات وتعلمات

لا تزال غير متأكد كيف يمكن لتدقيق العقود الذكية المساعدة؟ حسنًا، دعونا نعود إلى الشهيرةDAOالاختراق في عام 2016، الذي استغل مشكلة إعادة الدخول وتسبب في خسارة تقريبا 3.6 مليون ETH. بالمثل، كان هناك اختراق عقد محفظة Parity في عام 2017، مما أدى إلى خسارة تقريبا 500،000 ETH. كان بإمكان تجنب هذه المشاكل بمجموعة صحيحة من عمليات التدقيق.


مخطط انسيابي لاختراق DAO: BeInCrypto

استراتيجيات تدقيق العقود الذكية

هناك العديد من الاستراتيجيات لتدقيق العقود الذكية. وتشمل بعض الأكثر شيوعًا:

أدوات التدقيق

هذه الأدوات تعمل كمجموعة أولية من الدفاعات وتستخدم بشكل أفضل لتحديد الثغرات الشائعة. تشمل بعض الأدوات الأكثر شيوعًا Securify و Mythril وغيرها — القادرة على أداء تحليل ثابت للكود وكشف أنماط الانتهاك والمساعدة في الحصول على بداية سريعة متعلقة بالأمان.

أدوات لتدقيق العقود الذكية: BeInCrypto

مراجعة الشيفرة

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

ها هي كيف تساعدك مراجعات الشفرة اليدوية في تحديد التهديدات:

معلومة صغيرة لمراجعينا الصغار!
لنذهب ونعيد التغريد إذا وجدت الخلل!pic.twitter.com/i14YtweXcz
- تشارلز بالادين (@PaladinCharles) 8 يوليو 2023

فحوصات تلقائية

أدوات مثل Snyk و GuardRails تساعد في مسح العقود التلقائي — تنفيذ أمان يتم استدعاؤه في كل مرة يتم فيها تحديث الكود. يضمن هذا الشكل من التدقيق أن التغييرات الجديدة التي تم إجراؤها على الكود آمنة وغير مُعتدِلة بطبيعتها.

التحقق الرسمي

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

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

طريقة بسيطة لتدقيق العقود الذكية: BeInCrypto

كيف تستعرض الكود بشكل صحيح؟

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

التحليل الثابت

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

تحليل ديناميكي

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

اختبار قطعة فعلية من الشيفرة

هنا مقتطف من العقد الذكي الذي يعمل كتخزين للصندوق، يحتوي على وظيفة سحب الأموال:

pragma الصلب ^0.6.1;العقد VulnerableContract {    تعيين(عنوان => uint256) العام الرصيد؛    وظيفة ودائع() العام دفع {        الأرصدة[msg.sender] += قيمة رسالة؛    }    وظيفة انسحب(uint256 _المبلغ) العام {        يتطلب(الأرصدة[msg.sender] >= _المبلغ, "رصيد غير كافٍ.");        (نجاح بول, ) = msg.sender.call{value: _المبلغ}("");        يتطلب(النجاح, "فشل التحويل.");        الأرصدة[msg.sender] -= _المبلغ;    }}

إذا نظرت إلى الشفرة عن كثب، هناك ثغرة رئيسية:

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

ها هو الرمز الثابت لنفس الشيء:

function withdraw(uint256 _amount) public {    require(balances[msg.sender] >= _amount, "رصيد غير كافي.");    balances[msg.sender] -= _amount;    (bool success, ) = msg.sender.call{value: _amount}("");
require(success, “Transfer failed.”);}

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

سلاسل غير الإيثريوم ومراجعة الكود

لقد انتقل عالم التطبيقات اللامركزية والعقود الذكية إلى ما وراء Ethereum. على الرغم من أن الجزء الأكبر من الإجراءات لا يزال يحدث داخل نظام Ethereum البيئي ، إلا أن هناك سلاسل أخرى مثل Cardano و Solana والمزيد تدعم العقود الذكية وتتطلب معايير تدقيق مختلفة.

لماذا تكون كل منصة فريدة؟

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

أدوات للانتقال إلى غير إثيريوم

الآن إذا كنت ترغب في تجاوز Ethereum ، فهناك بعض أدوات التدقيق المتخصصة لتبدأ. على سبيل المثال ، مع Cardano ، هناك مجموعة Marlowe للتحقق الرسمي والتدقيق. عندما يتعلق الأمر ب Solana ، فإن libfuzzer الخاص بالصدأ وزغب البضائع مخصصان للتدقيق واختبار العقود. يجب أن يكون المدقق متعدد السلاسل على دراية بهذه المفاهيم لإبعاد نقاط الضعف في العقد.

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

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

تفويض تدقيقاتك

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

أيضًا، هنا عوامل يجب ملاحظتها أثناء تفويض مهام التدقيق:

اختيار الشركة المناسبة

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

فهم المسؤوليات والتكاليف والمصروفات العامة

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

أفضل ممارسات تدقيق العقود الذكية

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

  1. تركيز دائم على مراجعة الشيفرة بشكل شامل، بما في ذلك الصياغة والمنطق
  2. ابدأ بالتقاط نقاط الضعف الشائعة باستخدام أدوات مثل Slither و MythX والمزيد
  3. تصفح سجل تصنيف ضعف العقد الذكي أو SWC للعثور على الثغرات المعروفة والتحقق منها مسبقًا.
  4. اختبار العقود الذكية بدقة، بما في ذلك اختبارات التكامل، اختبارات الوحدة، والمزيد، لاختبار الكود عبر مجموعة واسعة من السيناريوهات.
  5. من المهم التحقق من فرص هجمات إعادة الدخول بشكل خاص. أفضل طريقة لمكافحتها هي التحقق من الاستدعاءات التكرارية التي يمكن أن يقوم بها القراصنة قبل دالة العقد الذكي الأولى.
  6. التركيز على الوظائف التي تؤدي إلى المكالمات الخارجية. يمكن أن يؤدي الخطأ في هذا الصدد إلى تغيير الحالة وتدفق التحكم، وهو أمر غير مرغوب فيه.
  7. تحقق دائمًا من أجزاء الكود التي تشير إلى استخدام الغاز. لا تريد أن يبدأ عقدك تفاعلات مكلفة للغاية.

تطوير العقد الذكي والذكاء الاصطناعي: المستقبل

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

إخلاء المسؤولية:

  1. هذه المقالة مأخوذة من [ Beincrypto], and the copyright belongs to the original author [Ananda Banerjee]. If there are objections to the reproduction, please contact the Gate Learn team, and the team will process it promptly according to relevant procedures.
  2. تنويه: تعبر الآراء والآراء المعبر عنها في هذا المقال فقط عن آراء الكاتب الشخصية ولا تشكل أي نصيحة استثمارية.
  3. تتم ترجمة النسخ الأخرى من المقال بواسطة فريق Gate Learn. من دون ذكر Gate.io، لا يُسمح بنسخ أو نشر أو ارتكاب الانتحال في المقالات المترجمة.
Розпочати зараз
Зареєструйтеся та отримайте ваучер на
$100
!