سود:
- توانایی استفاده از هوش مصنوعی برای تولید چارچوبها، آزمایشها و بررسی پیشنویسها بر اساس کتابخانههای اثباتشده (مانند OpenZeppelin) و درک اینکه انسانها امنیت تولید را تضمین میکنند.
- امکان تایید نسخه کد، الگو و کنترل دسترسی تولید شده توسط هوش مصنوعی از طریق کامپایل، تست و تست شبکه
- توانایی تشخیص اینکه کامپایل به معنای ایمن بودن نیست و شبکه آزمایشی و حسابرسی ضروری هستند.
نوشتن یک قرارداد هوشمند با نرم افزار معمولی متفاوت است: کدی که می نویسید عمومی، غیرقابل تغییر و برنامه ای است که مستقیماً پول را جابجا می کند. در این بخش، نحوه استفاده از هوش مصنوعی را به عنوان دستیار توسعه قرارداد هوشمند یاد خواهید گرفت. ما از تولید پیش نویس تا نوشتن تست، از فراخوان الگو تا بهینه سازی گاز (کارمزد تراکنش) یاد خواهیم گرفت. اما بیایید از همان ابتدا روشن باشیم: هوش مصنوعی طرحهای اولیه را تولید میکند. انسان ها کد ایمن را که وارد تولید می شود تضمین می کنند.
زمینه اول: زبان و محیط
رایجترین زبان قراردادهای هوشمند Solidity است (زبان اتریوم و EVM - ماشین مجازی اتریوم، ماشین مجازی که قراردادها روی آن اجرا میشود - زنجیرههای سازگار). جایگزین Vyper است (زبانی شبیه پایتون که هدف آن محدودتر و خواندن بیشتر است). کد شما گاز مصرف می کند (هزینه هر تراکنش برای بلاک چین)؛ کد ناکارآمد گران است. روشن نگه داشتن این عبارات در زمینه ای که آن را به هوش مصنوعی می دهید، کلید دریافت خروجی دقیق است.
جایی که هوش مصنوعی بیشترین ارزش را دارد نه در "نوشتن از ابتدا" بلکه در تولید چارچوب + قالب خوب است: شروعی مطابق با استانداردها، طرحی که می توانید تخصص خود را روی آن بیافزایید.
لایه های استفاده از هوش مصنوعی در کدنویسی
1. تولید اسکلت. هوش مصنوعی به سرعت اسکلت یک توکن استاندارد (ERC-20) یا NFT (ERC-721 - یک استاندارد دارایی دیجیتال منحصر به فرد) را استخراج می کند. اما مطمئن شوید که هوش مصنوعی را از یک کتابخانه اثبات شده استفاده کنید: به عنوان مثال، OpenZeppelin (کتابخانه قراردادی استاندارد و مورد اعتماد جامعه). قانون این است که به جای نوشتن امنیت از ابتدا از بلوک آزمایش شده استفاده کنید.
2. شرح و بررسی عملکرد. توضیح یک عملکرد موجود به هوش مصنوعی به شما امکان می دهد خطاهای منطقی را زودتر تشخیص دهید.
3. تولید تست. هوش مصنوعی در ایجاد موارد آزمایشی برای موارد لبه خوب است: ورودی صفر، تعداد بسیار زیاد، تماس گیرنده غیرمجاز، تماس مکرر. این یکی را به یاد سناریوهایی می اندازد که از آنها می گذرد.
4. گاز و خوانایی. هوش مصنوعی الگوهای گران قیمتی مانند ذخیرهسازی غیرضروری را علامتگذاری میکند و جایگزینهایی را پیشنهاد میکند.
نکته: به هوش مصنوعی دستور دهید "بر اساس قراردادهای حسابرسی شده OpenZeppelin، امنیت را از ابتدا بازنویسی کنید." نوشتن کد امنیتی اصلی برای یک هوش مصنوعی بسیار خطرناک تر از استفاده از یک کتابخانه آزمایش شده است.
اعلان ضعیف / اعلان قوی
اعلان ضعیف:
برای من یک قرارداد رمزی بنویس
این اعلان خطرناک است: مشخص نیست کدام استاندارد، کدام زنجیره، کدام کتابخانه، کدام نیاز امنیتی. هوش مصنوعی کد تصادفی، احتمالا قدیمی یا ناامن تولید می کند.
اعلان قدرتمند:
نقش شما: توسعه دهنده ارشد Solidity. یک پیش نویس توکن ERC-20 برای یک زنجیره سازگار با EVM ایجاد کنید. قوانین: - بر اساس قراردادهای بازرسی شده OpenZeppelin ERC20 و Ownable. - خط نسخه Solidity و مجوز (SPDX) را به صراحت بنویسید. - فقط مالک اجازه ضرب کردن را دارد. یک کلاه در برابر فشار بی نهایت اضافه کنید. - اضافه کردن نظر NatSpec به هر تابع. - امنیت را از ابتدا بنویسید. از بلوک استاندارد استفاده کنید. - در پایان یک هشدار اضافه کنید: "این یک پیش نویس است؛ حسابرسی و آزمایش لازم است". مناطقی را که از آن مطمئن نیستید با // TODO علامت بزنید.
تفاوت: اعلان قوی نقش، استاندارد، کتابخانه، مرز امنیتی، اسناد و انتظارات اعتبار سنجی را مشخص می کند.
چهار قالب قابل کپی
1) اسکلت مبتنی بر استاندارد:
نقش شما: توسعه دهنده Solidity. چارچوب قرارداد [ERC-20 / ERC-721 / staking] را بر اساس کتابخانه حسابرسی شده OpenZeppelin ایجاد کنید. مجوز SPDX و نسخه پراگما را بنویسید. کنترل دسترسی (چه کسی می تواند تماس بگیرد) را به هر عملکرد خارجی اضافه کنید. اختراع مجدد امنیت؛ از بلوک های استاندارد استفاده کنید. این یک پیش نویس است.
2) بررسی عملکرد:
عملکرد زیر را مانند یک توسعه دهنده ارشد بررسی کنید: چه کاری انجام می دهد، چه وضعیتی را تغییر می دهد، چه کسی می تواند آن را فراخوانی کند؟ خطاهای منطقی احتمالی و خطرات امنیتی را به عنوان HYPOTHESIS علامت گذاری کنید و هر کدام را به یک خط در کد مرتبط کنید. صراحتاً «ایمن» نگویید. فقط نکات مورد توجه را لیست کنید
3) پیش نویس سناریوی آزمایشی:
موارد آزمایشی را برای این قرارداد پیشنهاد دهید (ممکن است پیشنویسی برای Foundry/Hardhat باشد). به طور خاص موارد محدود را پوشش دهید: ورودی صفر، تعداد بسیار زیاد، تماس غیرمجاز، تماس با ورود مجدد، وجوه ناکافی. بنویسید که هر تست چه چیزی را تایید می کند.
4) بررسی گاز و خوانایی:
در این قرارداد، الگوهایی را علامت گذاری کنید که می توانند هزینه گاز را کاهش دهند: نوشتن ذخیره سازی غیر ضروری، تماس خارجی در حلقه، محاسبه تکراری. تفاوت قبل و بعد را در هر پیشنهاد توضیح دهید. بهینه سازی های امنیتی را توصیه کنید. اگر واضح نیست، بگویید «از حسابرس بپرس».
سه کیف کوچک (به تعداد)
مورد 1 - اسکلت 4 ساعت ذخیره کرد. یک تیم اسکلت یک قرارداد واگذاری مبتنی بر کتابخانه ممیزی شده با هوش مصنوعی را در 30 دقیقه استخراج کرد. 4 ساعت به صورت دستی طول کشید. تیم زمانی را به امنیت و آزمایش اختصاص داد. سود حاصل از انتقال امنیت نبود، بلکه از سرعت بخشیدن به چارچوب خسته کننده حاصل شد.
مورد 2 - تله نسخه قدیمی. هوش مصنوعی الگویی ایجاد کرد که اتر خام را با انتقال ارسال می کند، که دیگر توصیه نمی شود زیرا داده های آموزشی قدیمی هستند. توسعهدهنده متوجه این موضوع شد و آن را به الگوی فعلی مبتنی بر تماس و محافظت از ورود مجدد تغییر داد. درس: کتابخانه/الگوی هوش مصنوعی همیشه به روز بودن تایید شده است. هوش مصنوعی فراتر از تاریخ قطع آموزش نمی داند.
مورد 3 - پیش نویس اشکال پنهان را آزمایش کنید. تست "تماس گیرنده غیرمجاز" که هوش مصنوعی تولید کرد نشان داد که توسعه دهنده کنترل دسترسی را در یک تابع فراموش کرده است. فقط مالک 1 خط را از دست داد، در 5 دقیقه در تست نت گرفتار شد. ممکن است منابع مالی در شبکه اصلی از دست رفته باشد. درس: هوش مصنوعی نقاط کور انسان را در آزمایش پوشش می دهد.
به یاد آوردن الگوهای امنیتی با هوش مصنوعی
هوش مصنوعی در یادآوری الگوهای آسیب پذیری شناخته شده مانند چک لیست خوب است. رایج ترین الگوها:
- ورود مجدد: برقراری تماس خارجی بدون به روز رسانی وضعیت. راه حل: دستور چک-اثر-تعامل، نگهبان ورود مجدد.
- عدم کنترل دسترسی: هر کسی می تواند تابع بحرانی را فراخوانی کند.
- سرریز/زیاد اعداد صحیح: Solidity مدرن اکثر آنها را جذب می کند، اما همچنان در کدهای سطح پایین یک خطر است.
- اعتبار سنجی ورودی ناکافی: آدرس صفر، کنترل کمیت صفر.
- وابستگی اوراکل: اعتماد کور به داده های خارجی (مانند قیمت).
توجه: هوش مصنوعی میتواند این لیست را به خاطر بیاورد، اما نمیتواند تضمین کند که آیا موردی در لیست در کد خاص شما قرار دارد یا خیر. چک لیست یک شروع است. این جایگزینی برای کنترل کانتینر نیست.
درست کردن زمینه: راز کد خوب از هوش مصنوعی
کیفیت کدی که هوش مصنوعی تولید می کند مستقیماً به کیفیت زمینه ای که به آن می دهید بستگی دارد. در Web3 این امر بسیار مهم است زیرا یک جزئیات کوچک (کدام زنجیره، کدام نسخه Solidity، کدام استاندارد نشانه) کل خروجی را تغییر می دهد. یک زمینه خوب شامل:
- زنجیره هدف و محیط: شبکه اصلی اتریوم یا لایه 2 (زنجیره جانبی ارزانتری که در بالای زنجیره اصلی اجرا میشود)؟ هزینه گاز و برخی از ویژگی ها بر اساس زنجیره متفاوت است.
- نسخه و کتابخانه: کدام نسخه Solidity، کدام نسخه OpenZeppelin؟ اگر نسخه ای مشخص نشده باشد، هوش مصنوعی ممکن است الگوهای منسوخ و منسوخ تولید کند.
- الزامات امنیتی: آیا سقفی وجود دارد، آیا می توان آن را متوقف کرد، آیا می توان آن را افزایش داد؟ اینها را باید از اول گفت.
- محدودیت ها: محدودیت هایی مانند "از مونتاژ استفاده نکنید"، "جلوگیری از تماس خارجی"، "بهینه سازی گاز اما حفظ خوانایی" را پاک کنید.
یکی دیگر از تکنیک های قدرتمند این است که ابتدا طرح را از هوش مصنوعی بپرسید، سپس کد را بپرسید: "ابتدا کارکردهای این قرارداد و کارهایی که هر کدام انجام خواهند داد را فهرست کنید؛ زمانی که آن را تایید کردم، کد را بنویسید." این امر باعث میشود که هوش مصنوعی زود هنگام در جهت اشتباه حرکت کند و به شما امکان میدهد تصمیم معماری را حفظ کنید.
نکته: از هوش مصنوعی بپرسید "چرا این کد را اینگونه نوشتید؟" بپرسید توضیح منطقی هم سرعت یادگیری شما را افزایش می دهد و هم هرگونه خطای منطقی (مثلاً یک فرض امنیتی نادرست) را آشکار می کند. به خروجی یک هوش مصنوعی که نمی تواند از کد خود دفاع کند، اعتماد نکنید.
اشتباهات رایج
- قرار دادن امنیت در هوش مصنوعی از ابتدا. از یک کتابخانه آزمایش شده استفاده کنید.
- تایید نکردن نسخه/الگوی تولید شده توسط هوش مصنوعی. داده های آموزشی ممکن است قدیمی باشد.
- دور زدن شبکه آزمایشی هر پیش نویس باید قبل از پخش زنده در شبکه آزمایشی اجرا شود.
- NatSpec/documentation اضافه نمی شود. بازرسی و نگهداری مشکل می شود.
- تصور نادرست "تدوین شده است، بنابراین ایمن است". کامپایل شدن به معنای ایمن بودن نیست.
- فراموش کردن کنترل دسترسی این یکی از رایج ترین و گران ترین اشتباهات است.
به طور خلاصه
- در نوشتن قرارداد هوشمند، هوش مصنوعی چارچوبها، آزمایشها و پیشنویسها را بررسی میکند. انسان ایمنی تولید را تضمین می کند.
- امنیت را نه از ابتدا، بلکه بر اساس کتابخانه های اثبات شده (مانند OpenZeppelin) ایجاد کنید.
- به روز بودن نسخه ها و الگوهای تولید شده توسط YZ همیشه تایید شده است.
- قطعات آزمایشی در ثبت نقاط کور انسان (موردهای محدود، کنترل دسترسی) ارزشمند هستند.
- کامپایل بودن به معنای ایمن بودن نیست. تست نت و حسابرسی الزامی هستند.
وظیفه کاربردی
برای یک توکن ساده ERC-20، با استفاده از اعلان "اسکلت مبتنی بر استاندارد" در بالا یک پیش نویس ایجاد کنید. سپس: (1) بررسی کنید که آیا از یک کتابخانه بررسی شده استفاده می کند، (2) کنترل های دسترسی را بررسی کنید، (3) آزمایش هایی را با اعلان "تست مورد پیش نویس" ایجاد کنید و در واقع حداقل یک تست تماس گیرنده سرکش را اجرا کنید. حداقل یک نقطه امنیتی را که هوش مصنوعی از قلم انداخته است، بیابید و یادداشت کنید.
چک لیست
- [ ] من استاندارد و زنجیره را به وضوح در اعلان بیان کرده ام.
- [ ] من تولید مبتنی بر کتابخانه اثبات شده می خواستم.
- [ ] مجوز SPDX و نسخه پراگما موجود است.
- [ ] کنترل دسترسی در هر عملکرد حیاتی وجود دارد.
- [ ] من آزمایش هایی را برای موارد محدود ایجاد و اجرا کردم.
- [ ] تایید کردم که کتابخانه/الگو به روز است.
- [ ] کد ممیزی و آزمایش را علامت گذاری کردم. من آن را بدون نظارت در شبکه اصلی دریافت نکردم.