مقالات عمومی

توصیه هایی کاربردی برای توسعه دهندگان زبان سالیدیتی (Solidity) در اتریوم!

هر روز به طور متوسط ۲۰,۰۰۰ قرارداد هوشمند ایجاد می شود. تنها در نوامبر و دسامبر ۲۰۱۸ بیش از سه میلیون قرارداد هوشمند ایجاد شده است. گزارشی نشان می دهد که ۶۰ درصد از همه قرارداد های اتریوم هرگز مورد تعامل قرار نمی گیرند، کمتر از ۱۰ درصد قرارداد های ایجاد شده منحصر به فرد می باشند و در کمتر از ۱ درصد قرارداد ها کد منبع موجود است. گزارش دیگری نشان می دهد که بیش از ۲۵ درصد از همه قرارداد های هوشمند ایجاد شده به نوعی دارای باگ یا ایراد می باشند. در این مقاله مواردی ذکر می شود که به شما کمک می کند قرارداد های هوشمند بهتری بسازید.

اصل K.I.S.S

در موقع طراحی یک سیستم، اصل KISS مشهور و درخور توجه است. این اصل به ساده نگه داشتن موارد اشاره دارد و این امر احتمال خطا را کاهش می دهد. پس وقتی که یک قرارداد هوشمند طراحی می کنید، جریان منطقی ساده ای داشته باشید. پس با انجام این کار، در نهایت کدی تمیز و مرتب حاصل می شود.

استفاده مجدد

لازم نیست که همه چیز را از ابتدا شروع کنید. کتابخانه ها و چارچوب هایی مانند truffle و OpenZeppelin از قبل به خوبی تست شده اند و این به شما در ساخت و طراحی مجزای منطق خود با استفاده از آنها کمک می کند. چیز هایی مانند ایجاد ژنراتور عدد تصادفی خود را انجام ندهید.

الگو های طراحی مهندسی نرم افزار

الگو ها در حل تعدادی از مشکلات طراحی معماری بنیادین به ما کمک می کنند. الگو ها توسط میلیون ها نرم افزار در سراسر جهان مورد استفاده قرار می گیرند و زمینه ای از علوم کامپیوتر هستند که تحقیقات خوبی در مورد آنها انجام گرفته است. درک الگو ها به شما کمک می کند که مشکلات را سریع شناسایی کنید و با راه حل های بهتری برای آنها مواجه شوید.

Proxy Delegate یک الگوی طراحی خاص است. این الگو به افراد کمک می کند که قرارداد خود را به صورت ایمن ارتقا دهند.

موارد آزمایشی

بهتر است از TDD (طراحی مبتنی بر تست و آزمایش) تبعیت شود و این یعنی موارد آزمایش قبل از نوشتن کد ایجاد شوند و موارد آزمایش مثبت و منفی پوشش داده شوند. همچنین سعی کنید که کد خود را بشکنید و اشتباه هایی منطقی پیدا کنید. می توانید از Solidity-Coverage برای ایجاد پوشش آزمایش استفاده کنید.

استفاده از ابزار های امنیتی

امنیت قرارداد هوشمند باید بالاترین اولویت باشد. باید همه مسیر های حمله را پیدا کنید. قرارداد هوشمند و توکن ERC-20 دارای سابقه ایراد یا باگ می باشند. شما می توانید همچنین به بررسی Ethernaut Puzzles بپردازید تا با مشهورترین مشکلات امنیتی آشنا شوید. شما همچنین باید مقاله ویتالیک بوترین را در زمینه امنیت قرارداد هوشمند بخوانید. ابزار های تحلیل امنیتی متن بازی هم موجود هستند که می توانید برای تحلیل قرارداد هوشمند خود مورد استفاده قرار دهید. به چند مورد از آنها در موارد زیر اشاره می شود.

تجسم

  • Surya: ابزاری کاربردی برای سیستم های قرارداد هوشمند است که تعدادی خروجی بصری و اطلاعات در مورد ساختار قرارداد ها را ارائه می دهد. همچنین تحقیق در مورد گراف دعوت عملکرد را پشتیبانی می کند.
  • Solgraph: یک گراف DOT ایجاد می کند که جریان کنترل عملکرد یک قرارداد سالیدیتی (Solidity) را مجسم می سازد و بر آسیب پذیری های امنیتی بالقوه تاکید می کند.
  • EVMLab: یک بسته ابزاری غنی برای تعامل با EVM است که شامل یک VM، Etherchain API و یک ردیاب پیگیری (trace-viewer) است.
  • Ethereum-graph-debugger: یک اشکال زدای گرافیکی EVM است که گراف جریان کنترل تمام برنامه را نمایش می دهد.

تحلیل استاتیک و دینامیک

  • Mythril Classic: یک تحلیلگر امنیتی متن باز برای کد سالیدیتی (Solidity) و قرارداد های هوشمند روی زنجیره است.
  • Mythril Platform: یک پلتفرم SaaS است که به هر فردی اجازه می دهد که به ساختن ابزار های امنیتی هدفمند بپردازد.
  • Slither: یک چارچوب تحلیلی استاتیک به همراه اکتشافگرانی برای بسیاری از مشکلات رایج سالیدیتی است. این ابزار دارای قابلیت های ردیابی ارزش و عیب است و به زبان پایتون نوشته شده است.
  • Echidna: تنها فازر (fuzzer) موجود برای نرم افزار اتریوم است. این ابزار از تست خصوصیات برای ایجاد ورودی های بدخواه که قرارداد هوشمند را متلاشی می کنند، استفاده می نماید.
  • Manticore: یک ابزار تحلیل باینری دینامیک با پشتیبانی EVM است.
  • Oyente: به تحلیل کد اتریوم برای پیدا کردن آسیب پذیری های رایج می پردازد.
  • Securify: تحلیلگر استاتیک آنلاین کاملا اتوماتیک برای قرارداد های هوشمند می باشد که یک گزارش امنیتی را بر اساس الگو های آسیب پذیری فراهم می آورد.
  • SmartCheck: ابزار تحلیل استاتیک کد منبع Solidity برای آسیب پذیری های امنیتی و انجام بهترین اقدامات ممکن است.
  • Octopus: ابزار تحلیل امنیتی برای قرارداد های هوشمند بلاک چینی با پشتیبانی از EVM و e) WASM) می باشد.

حملات شناخته شده و به روز رسانی ها

همیشه خودتان را با حملات شناخته شده و آپدیت های سالیدیتی (Solidity) به روز نگه دارید. آپدیت های برجسته سالیدیتی ممکن است تغییرات برجسته ای به دنبال داشته باشد. در این لینک می توانید لیستی از حملات شناخته شده قرارداد هوشمند را مشاهده نمایید.

وقتی که یک توکن ERC-20 را توسعه می دهید، چند چیز اساسی وجود دارد که باید مورد توجه قرار دهید:

  • مراقب حملات پیشرو (front-running) در ERC-20 باشید.
  • از انتقال توکن ها به آدرس 0x0 جلوگیری کنید.
  • از انتقال توکن ها به آدرس تماس جلوگیری کنید.

استاندارد های اتریوم بهتری مانند ERC-223 و ERC-777 وجود دارند که به عنوان جایگزین ERC-20 می توان مورد استفاده قرار داد. همچنین EIP های امنیتی مهم هستند و باید مراقب آنها بود، هم برای درک اینکه EVM چگونه کار می کند و یا برای اطلاع از بهترین اقدامات در زمان توسعه یک سیستم قرارداد هوشمند مناسب می باشند.

توسعه دهنده بلاک چین

مستندات و رویه ها

وقتی که کد شما قابلیت سر و کار داشتن با میلیون ها دلار پول را دارد، مستندات اقدامی حائز اهمیت می باشد. مستندات به مشارکت کنندگان داخلی و خارجی، بازرسان و بازدید کنندگان مستقل کمک می کند تا قرارداد های شما را درک کنند.

  • مشخصات، ماشین های مرحله ای و مدل هایی ایجاد کنید که به دیگران در درک سیستم کمک می کنند.
  • یک طرح جدید بیرون دادن محصولات یا سرویس ها را با مستندات خود همراه کنید.
  • نسخه حال حاضر کامپایلر را تعیین کنید.
  • مشکلات شناخته شده، مسیر های حمله، محدودیت ها و درمان های احتمالی آنها را تعیین کنید.
  • آزمون همگرایی و تحلیلگران را مشخص کنید.
  • سابقه را حفظ کنید و تغییرات را به مرور زمان ثبت نمایید.
  • نویسندگان و مشارکت کنندگان قرارداد را با اطلاعات عمومی تماس آنها مشخص کنید.

بازبینی قرارداد

شرکت هایی وجود دارند که می توانند به شما کمک کنند که به بازرسی قرارداد هوشمند خود بپردازید. این سرویس ها مفید می باشند زیرا کارشناسان کد شما را برای آسیب پذیری های احتمالی مورد بررسی قرار می دهند. اگر در حال ساختن قرارداد هوشمندی هستید که کسب و کار شما به آن بستگی دارد، این کار شدیدا توصیه می شود.

پاداش های باگ

همیشه کمک می کند که افراد بیشتری مراقب کد شما باشند. پاداش هایی که برای باگ ها در نظر گرفته می شوند، بازده ای عالی دارند. توصیه های زیر برای اجرای چنین برنامه هایی مفید هستند:

  • در مورد کل بودجه و ارزی که پاداش ها را با آن پرداخت می کنید، تصمیم گیری نمایید.
  • بودجه خود را برحسب انواع مختلف آسیب پذیری طبقه بندی کنید.
  • یک تیم برای داوری کردن در مورد پاداش اختصاص یافته ایجاد نمایید.
  • یک کانال ارتباطی صحیح برای گزارش دادن باگ ها معرفی کنید.
  • از مخازن خصوصی برای تعمیر باگ استفاده نمایید و چند تا از افرادی که در جستجوی پاداش هستند را در ارزیابی تعمیرات وارد نمایید.
  • در دادن پاداش به یابندگان عیب و ایراد تاخیر نکنید.

در این زمینه می توانید برنامه پروژه 0x را مورد بررسی قرار دهید.

آمادگی برای شکست

در جایی که کد وجود دارد، احتمال وجود باگ هم هست. وقتی که نوبت به قرارداد های هوشمند می رسد، یک طرح جامع برای بدترین سناریو ها ایجاد نمایید. Alan J. Perlis می گوید:

دو روش برای نوشتن برنامه های عاری از خطا وجود دارد که تنها سومی آنها کار می کند!

توصیه های زیر می توانند به شما در ایجاد چنین طرحی برای توکن خود کمک کنند:

  • یک قطع کننده مدار (circuit breaker) به قرارداد هوشمند خود اضافه کنید که همه انواع تراکنش ها را متوقف نمایند.
  • طرحی برای ارتقای قرارداد، ترمیم باگ و بهبودی ها ایجاد نمایید.
  • یک کانال ارتباطی و راهنمای مناسب برای سیاست افشای اطلاعات ایجاد نمایید.
  • تاثیر باگ ها و ریسک پول را به حداقل برسانید. برای زمان ضرر برنامه داشته باشید تا به آن متوسل شوید. از جمله این برنامه ها می توان به بیمه، صندوق جریمه و غیره اشاره کرد.

نتیجه گیری

همیشه قرارداد هوشمند خود را برای استفاده از gas بهینه کنید. پیشگیری بهتر از درمان است؛ همیشه برای هر شرایطی که ممکن است روی دهد برنامه داشته باشید. در مورد قراردادهای هوشمند، این پول واقعی است که در گرو قرار دارد، پس به عنوان برنامه نویس باید بسیار مواظب باشید. همیشه در جریان آخرین تغییرات زبان سالیدیتی (Solidity)، کامپایلر و حملات شناخته شده در اکوسیستم باشید. با بلاک چین اتریوم، ماهیت هر چیزی عمومی می شود و در این میان به بلوغ حال حاضر این اکوسیستم توجه داشته باشید و مواظب باشید که چیزی در اثر اعتماد به نفس بیش از حد فدا نشود. پس به ساخت، آزمایش، برنامه ریزی و دنبال کردن فرآیند هایی بپردازید که آسیب پذیری های احتمالی را در قرارداد هوشمند شما کم می کنند. هوشمندانه به کدگذاری بپردازید.

منبع
medium

نوشته های مشابه

اشتراک
اطلاع از
0 دیدگاه
Inline Feedbacks
View all comments
دکمه بازگشت به بالا