آزمایش قراردادهای هوشمند

ساخت وبلاگ

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

تست قرارداد هوشمند چیست؟

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

تست قرارداد هوشمند اشکال مختلفی به خود می گیرد و روش های مختلف مزایای آن را ارائه می دهد. استراتژی های آزمایش قراردادهای هوشمند Ethereum را می توان به دو دسته گسترده طبقه بندی کرد: آزمایش خودکار و آزمایش دستی.

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

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

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

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

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

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

چرا آزمایش قراردادهای هوشمند مهم است؟

آزمایش قراردادهای هوشمند به دلایل زیر مهم است:

1. قراردادهای هوشمند برنامه های با ارزش بالا هستند

قراردادهای هوشمند غالباً با دارایی های مالی با ارزش بالا ، به ویژه در صنایعی مانند مالی غیرمتمرکز (DEFI) و موارد ارزشمند مانند نشانه های غیرقانونی (NFTS) سروکار دارند. به همین ترتیب ، آسیب پذیری های جزئی در قراردادهای هوشمند می تواند و اغلب منجر به خسارات گسترده و غیرقابل برگشت برای کاربران شود. با این حال ، آزمایش های جامع می تواند خطاها را در کد قرارداد هوشمند افشا کرده و خطرات امنیتی را قبل از استقرار کاهش دهد.

2. قراردادهای هوشمند تغییر ناپذیر هستند

قراردادهای هوشمند مستقر در دستگاه مجازی Ethereum (EVM) به طور پیش فرض تغییر ناپذیر است. در حالی که ممکن است از توسعه دهندگان سنتی برای رفع اشکالات نرم افزاری پس از راه اندازی استفاده شود ، Ethereum Development فضای کمی برای لکه دار کردن نقص های امنیتی پس از زندگی یک قرارداد هوشمند در blockchain باقی می ماند.

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

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

تست خودکار برای قراردادهای هوشمند

1. آزمایش عملکردی

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

آزمایش عملکردی سه روش را در بر می گیرد: آزمایش واحد ، آزمایش ادغام و آزمایش سیستم.

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

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

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

نمونه هایی از ادعاهای مربوط به قرارداد عبارتند از:

من."فقط مدیر می تواند قرارداد را مکث کند"

ii."غیر Admins نمی تواند نشانه های جدید را نعناع کند"

iii"قرارداد به خطاها برمی گردد"

آزمایش ادغام سطح بالاتر از آزمایش واحد در سلسله مراتب آزمایش است. در تست ادغام ، مؤلفه های فردی قرارداد هوشمند با هم آزمایش می شوند.

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

آزمایش ادغام می تواند برای اطمینان از مواردی مانند وراثت (در یک برگه جدید) مفید باشد و تزریق وابستگی به درستی کار می کند.

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

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

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

2. تجزیه و تحلیل استاتیک/پویا

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

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

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

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

مانند هر برنامه ، قراردادهای هوشمند به ورودی های ارائه شده توسط کاربران برای اجرای توابع متکی هستند. و ، در حالی که فرض می کنیم کاربران ورودی های صحیحی را ارائه می دهند ، ممکن است همیشه اینگونه نباشد.

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

تست دستی برای قراردادهای هوشمند

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

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

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

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

برنامه های فضل اشکال اغلب کلاس گسترده ای از هکرهای اخلاقی و متخصصان امنیتی مستقل با مهارت و تجربه منحصر به فرد را به خود جلب می کنند. این ممکن است یک مزیت نسبت به ممیزی های قرارداد هوشمند باشد که عمدتاً به تیم هایی که ممکن است تخصص محدود یا باریک داشته باشند متکی هستند.

آزمایش در مقابل تأیید رسمی

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

به این ترتیب ، توسعه دهندگان تشویق می شوند تا تأیید رسمی را در رویکرد خود برای ارزیابی صحت قراردادهای هوشمند وارد کنند. تأیید رسمی از روشهای رسمی استفاده می کند (در یک برگه جدید باز می شود) - تکنیک های دقیق و دقیق برای مشخص کردن و تأیید نرم افزار.

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

تست ابزار و کتابخانه

ابزار تست واحد

استحکام پوشش - ابزار پوشش کد استحکام برای آزمایش قراردادهای هوشمند مفید است.

  • GitHub (در یک برگه جدید باز می شود)

WAFFLE - چارچوب توسعه و آزمایش پیشرفته قرارداد هوشمند (بر اساس Ethers. js).

  • مستندات (در یک برگه جدید باز می شود)
  • GitHub (در یک برگه جدید باز می شود)
  • وب سایت (در یک برگه جدید باز می شود)

تست های ریمیکس - ابزاری برای آزمایش استحکام قراردادهای هوشمند. در زیر افزونه "تست واحد استحکام" در زیر ریمیکس IDE کار می کند که برای نوشتن و اجرای موارد آزمون برای یک قرارداد استفاده می شود.

  • مستندات (در یک برگه جدید باز می شود)
  • GitHub (در یک برگه جدید باز می شود)

یاران تست OpenZeppelin - کتابخانه ادعای آزمایش قرارداد هوشمند Ethereum. اطمینان حاصل کنید که قراردادهای شما مطابق انتظار رفتار می کنند!

  • GitHub (در یک برگه جدید باز می شود)
  • مستندات (در یک برگه جدید باز می شود)

چارچوب تست قرارداد هوشمند ترافل - چارچوب تست خودکار برای آزمایش قراردادهای خود به نسیم.

  • مستندات (در یک برگه جدید باز می شود)
  • وب سایت (در یک برگه جدید باز می شود)

چارچوب تست واحد Brownie - Brownie از Pytest ، یک چارچوب تست غنی از ویژگی استفاده می کند که به شما امکان می دهد تست های کوچک را با حداقل کد ، مقیاس به خوبی برای پروژه های بزرگ بنویسید و بسیار قابل گسترش است.

  • مستندات (در یک برگه جدید باز می شود)
  • GitHub (در یک برگه جدید باز می شود)

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

  • GitHub (در یک برگه جدید باز می شود)
  • مستندات (در یک برگه جدید باز می شود)

Etheno-ابزار تست Ethereum All-in-one که شامل یک Multiplexer JSON RPC ، بسته بندی ابزار تجزیه و تحلیل و ابزار ادغام آزمون است. Etheno پیچیدگی تنظیم ابزارهای تجزیه و تحلیل مانند Manticore و Echidna را در پروژه های بزرگ و چند قرارداد از بین می برد.

  • GitHub (در یک برگه جدید باز می شود)

ابزارهای تجزیه و تحلیل استاتیک

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

  • GitHub (در یک برگه جدید باز می شود)
  • مستندات (در یک برگه جدید باز می شود)

Slither - چارچوب تجزیه و تحلیل استاتیک Solidity مبتنی بر پایتون برای یافتن آسیب پذیری ها، بهبود درک کد و نوشتن تحلیل های سفارشی برای قراردادهای هوشمند.

  • GitHub (در یک برگه جدید باز می شود)

Rattle - چارچوب تحلیل استاتیک بایت کد EVM که برای کار بر روی قراردادهای هوشمند مستقر طراحی شده است.

  • GitHub (در یک برگه جدید باز می شود)

ابزارهای تحلیل دینامیکی

Echidna - فوزر قرارداد سریع برای تشخیص آسیب پذیری در قراردادهای هوشمند از طریق آزمایش مبتنی بر دارایی.

  • GitHub (در یک برگه جدید باز می شود)

هاروی - ابزار fuzzing خودکار مفید برای تشخیص تخلفات دارایی در کد قرارداد هوشمند.

  • وب سایت (در یک برگه جدید باز می شود)

Manticore - چارچوب اجرای نمادین پویا برای تجزیه و تحلیل بایت کد EVM.

  • GitHub (در یک برگه جدید باز می شود)
  • مستندات (در یک برگه جدید باز می شود)

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

ConsenSys Diligence - خدمات حسابرسی قرارداد هوشمند به پروژه ها در سراسر اکوسیستم بلاک چین کمک می کند تا اطمینان حاصل کنند که پروتکل هایشان برای راه اندازی آماده هستند و برای محافظت از کاربران ساخته شده اند.

  • وب سایت (در یک برگه جدید باز می شود)

CertiK - شرکت امنیتی بلاک چین در استفاده از فناوری تأیید صحت رسمی در قراردادهای هوشمند و شبکه های بلاک چین پیشگام است.

  • وب سایت (در یک برگه جدید باز می شود)

Trail of Bits - شرکت امنیت سایبری که تحقیقات امنیتی را با ذهنیت مهاجم برای کاهش خطر و تقویت کد ترکیب می کند.

  • وب سایت (در یک برگه جدید باز می شود)

PeckShield - شرکت امنیتی بلاک چین که محصولات و خدماتی را برای امنیت، حریم خصوصی و قابلیت استفاده کل اکوسیستم بلاک چین ارائه می دهد.

  • وب سایت (در یک برگه جدید باز می شود)

QuantStamp - خدمات حسابرسی که پذیرش جریان اصلی فناوری بلاک چین را از طریق خدمات ارزیابی امنیت و ریسک تسهیل می کند.

  • وب سایت (در یک برگه جدید باز می شود)

OpenZeppelin - شرکت امنیتی قرارداد هوشمند که ممیزی های امنیتی را برای سیستم های توزیع شده ارائه می دهد.

  • وب سایت (در یک برگه جدید باز می شود)

Nethermind - خدمات حسابرسی Solidity و Cairo، تضمین یکپارچگی قراردادهای هوشمند و ایمنی کاربران در سراسر اتریوم و استارک نت.

  • وب سایت (در یک برگه جدید باز می شود)

پلتفرم های جایزه باگ

Immunefi - پلتفرم پاداش باگ برای قراردادهای هوشمند و پروژه های DeFi، که در آن محققان امنیتی کد را بررسی می کنند، آسیب پذیری ها را فاش می کنند، پول دریافت می کنند و کریپتو را ایمن تر می کنند.

  • وب سایت (در یک برگه جدید باز می شود)

HackerOne - پلتفرم هماهنگی آسیب پذیری و پاداش باگ که کسب وکارها را با آزمایش کنندگان نفوذ و محققان امنیت سایبری مرتبط می کند.

  • وب سایت (در یک برگه جدید باز می شود)
  • استحکام و تنظیم ادغام مداوم ترافل - نحوه تنظیم تراویس یا دایره CI برای آزمایش ترافل به همراه افزونه های مفید.
  • بررسی اجمالی محصولات - مرور کلی و مقایسه محصولات مختلف آزمایش.
  • نحوه استفاده از Echidna برای آزمایش قراردادهای هوشمند
  • نحوه استفاده از Manticore برای یافتن اشکالات قرارداد هوشمند
  • نحوه استفاده از slither برای یافتن اشکالات قرارداد هوشمند
  • چگونه می توان قراردادهای استحکام را برای آزمایش مسخره کرد
  • نحوه مهاجرت از تست های ترافل به محیط آزمایش OpenZeppelin (در یک برگه جدید باز می شود)
  • نحوه آزمایش قراردادها پس از اعزام آنها در یک شبکه (در یک برگه جدید باز می شود)
  • blockchain ، استحکام و توسعه کامل پشته Web3 را با JavaScript (YouTube) بیاموزید (در یک برگه جدید باز می شود)
  • استحکام ، blockchain و دوره قرارداد هوشمند (YouTube) (در یک برگه جدید باز می شود)
  • یک راهنمای عمیق برای آزمایش قراردادهای هوشمند Ethereum (در یک برگه جدید باز می شود) ↗ - Ben Hauser
  • نحوه آزمایش قراردادهای هوشمند Ethereum (در یک برگه جدید باز می شود) ↗ - الکس روان < SPAN> استحکام و تنظیم ادغام مداوم ترافل - نحوه تنظیم تراویس یا دایره CI برای آزمایش ترافل به همراه افزونه های مفید.
فارکس تحلیل تکنیکال...
ما را در سایت فارکس تحلیل تکنیکال دنبال می کنید

برچسب : نویسنده : مرتضی احمدی بازدید : <-PostHit-> تاريخ : يکشنبه 22 مرداد 1402 ساعت: 15:53