Единици
1. Вовед во вештачката интелигенција во блокчејн и веб3: улоги, граници, автентикација и безбедност-критичност 2. Поддршка за паметно пишување договори: Solidity/Vyper Draft и генерирање безбедно кодови 3. Поддршка за паметна ревизија на договор: безбедносен преглед и нацрт-наоди 4. Скенирање на ранливост: вообичаени модели на ранливост и автоматска анализа 5. Анализа на податоци во синџирот: Да се создаде смисла за блокирање, трансакции и податоци од паричник 6. Анализа на DeFi и протокол: ликвидност, MEV и економски напади 7. Токеномичко моделирање: снабдување, дистрибуција, поттик и симулација 8. Документација и техничко пишување: Бела книга, NatSpec и Упатство за употреба 9. Измама, влечење и откривање ризик: црвени знамиња на синџирот 10. Безбедносно-критична ревизија, одобрување од експерти и одговорна употреба 11. Работен тек од крај до крај, управување, верификација и етика
Единица 2 / 11

Поддршка за паметно пишување договори: Solidity/Vyper Draft и генерирање безбедно кодови

Добивки:

  • Способност да се користи вештачка интелигенција за производство на рамки, тестови и прегледување нацрти врз основа на докажани библиотеки (на пр. OpenZeppelin) и разбирање дека луѓето гарантираат безбедност на производството
  • Способност да се потврди верзијата на кодот, шемата и контролата на пристап произведени од вештачката интелигенција преку компилација, тестирање и тест мрежа
  • Да се биде во можност да се разликува дека компилацијата не значи да се биде безбеден и дека тест мрежата и ревизијата се од суштинско значење.

Пишувањето паметен договор е различно од обичниот софтвер: кодот што го пишувате е јавен, непроменлив и програма која директно ги движи парите. Во оваа единица, ќе научите како да користите вештачка интелигенција како асистент за развој на паметни договори; Ќе учиме од изработка на нацрти до пишување тестови, од отповикување на шаблони до оптимизација на гас (такса за трансакција). Но, да бидеме јасни од самиот почеток: вештачката интелигенција произведува нацрти; Луѓето обезбедуваат безбеден код кој оди во производство.

Прво основа: јазик и животна средина

Најчестиот јазик за паметни договори е Solidity (јазикот на Ethereum и EVM — Ethereum Virtual Machine, виртуелната машина на која работат договорите — компатибилни синџири). Алтернативата е Vyper (јазик сличен на Python кој има за цел да биде повеќе ограничен и читлив). Вашиот код троши гас (трошокот за секоја трансакција до блокчејнот); Неефикасниот код е скап. Одржувањето на овие термини јасни во контекстот што го давате на вештачката интелигенција е клучно за добивање точен резултат.

Онаму каде што вештачката интелигенција е највредна не е „пишувањето од нула“, туку во производството на рамка + добар калап: почеток во согласност со стандардите, план на кој ќе ја додадете вашата експертиза.

Слоеви на користење на вештачка интелигенција при кодирање

1. Генерирање скелети. Вештачката интелигенција брзо го ископува скелетот на стандарден токен (ERC-20) или NFT (ERC-721 — единствен стандард за дигитални средства). Но, не заборавајте да ја натерате вештачката интелигенција да користи докажана библиотека: на пример, OpenZeppelin (доверлива, ревидирана стандардна библиотека за договори на заедницата). Правилото е да се користи тестираниот блок наместо да се пишува безбедност од нула.

2. Опис и преглед на функцијата. Објаснувањето на постоечката функција на вештачката интелигенција ви овозможува рано да ги забележите логичките грешки.

3. Тест генерирање. Вештачката интелигенција е добра во генерирање на тест случаи за рабови: нула влез, многу голем број, неовластен повикувач, повторен повик. Ова потсетува на сценаријата што некој ги прескокнува.

4. Гас и читливост. Вештачката интелигенција означува скапи обрасци како што е непотребното складирање пишува и предлага алтернативи.

Совет: Наредете ја вештачката интелигенција да „изгради на ревидираните договори на OpenZeppelin, да ја преработи безбедноста од нула“. Многу е поризично за вештачката интелигенција да напише оригинален безбедносен код отколку да користи тестирана библиотека.

Слаб промпт / Силен промпт

Слаба навестување:

Напиши ми симболичен договор.

Ова известување е опасно: не е јасно кој стандард, кој синџир, која библиотека, кој услов за безбедност. ВИ генерира случаен, можеби застарен или небезбеден код.

Моќен потсетник:

Вашата улога: постар развивач на Solidity. Создадете нацрт на токени ERC-20 за синџир компатибилен со EVM. Правила:- Врз основа на ревидираните договори ERC20 и Ownable на OpenZeppelin.- Напишете ја експлицитно линијата Solidity верзија и лиценца (SPDX).- Само сопственикот има дозвола да кова; додадете капа против бесконечно притискање. - Додајте NatSpec коментар на секоја функција. - Напишете безбедност од нула; Користете го стандардниот блок. - Додадете предупредување на крајот: „Ова е нацрт; потребна е ревизија и тестирање“. Обележете ги областите за кои не сте сигурни со // TODO.

Разлика: силната порака дава јасна улога, стандард, библиотека, безбедносна граница, документација и очекувања за валидација.

Четири шаблони за копирање

1) Скелет заснован на стандарди:

Вашата улога: развивач на Solidity. Генерирајте рамка за договор [ERC-20 / ERC-721 / staking] заснована на ревидирана библиотека на OpenZeppelin. Напишете SPDX лиценца и прагма верзија. Додајте контрола на пристап (кој може да повикува) на секоја надворешна функција. Повторно измислување безбедност; Користете стандардни блокови. Ова е нацрт.

2) Преглед на функцијата:

Испитајте ја следнава функција како постар програмер: што прави, какви состојби се менува, кој може да ја повика? Обележете ги можните логички грешки и безбедносните ризици како ХИПОТЕЗА, поврзувајќи ја секоја со линија во кодот. Не кажувајте директно „безбедно“; само наведете ги точките на внимание.

3) Нацрт на сценарио за тестирање:

Предложете тест случаи за овој договор (може да биде нацрт за Леарница/Хардхет). Посебно покријте ги граничните случаи: нула влез, многу голем број, неовластен повик, повик за повторно влегување, недоволни средства. Напиши ШТО потврдува секој тест.

4) Преглед на гас и читливост:

Во овој договор, означете ги обрасците што можат да ја намалат цената на гасот: непотребно пишување за складирање, надворешен повик во јамката, повторувачка пресметка. Објаснете ја разликата пред/после во секој предлог. Препорачај оптимизации кои ја кршат безбедноста; Ако не е јасно, кажете „прашајте го ревизорот“.

Три мини футроли (во бројки)

Случај 1 - Скелет заштеди 4 часа. Еден тим го минираше скелетот на ревидиран договор за стекнување со вештачка интелигенција заснован на библиотека за 30 минути; Потребни се ~ 4 часа рачно. Тимот посвети време на безбедноста и тестирањето. Добивката не дојде од пренесување на безбедноста, туку од забрзување на мачната рамка.

Случај 2 - Замка за застарена верзија. Вештачката интелигенција произведе шема која испраќа суров етер со пренос, што повеќе не се препорачува бидејќи податоците за обуката се застарени. Програмерот го забележа ова и го смени на тековната шема заснована на повик и заштитена со повторно влегување. Лекција: Библиотеката/шемата на вештачката интелигенција секогаш се потврдува дека е ажурирана; Вештачката интелигенција не знае надвор од датумот на прекин на обуката.

Случај 3 - Проверете го нацртот на скриената грешка. Тестот за „неовластен повикувач“ што го направи вештачката интелигенција откри дека развивачот ја заборавил контролата на пристап во некоја функција. само на сопственикот му недостасува 1 линија, фатена за 5 минути на тестнет; Можеше да има загуба на средства на главната мрежа. Лекција: ВИ ја покрива човечката слепа точка при тестирањето.

Сеќавање на безбедносни обрасци со вештачка интелигенција

Вештачката интелигенција е добра во потсетувањето на познатите шеми на ранливост како листа за проверка. Најчестите модели:

  • Повторно влегување: остварување надворешен повик без ажурирање на статусот. Решение: редослед на проверки-ефекти-интеракции, заштита за повторно влегување.
  • Недостаток на контрола на пристап: секој може да ја повика критичната функција.
  • Прелевање/опаѓање на цели броеви: Modern Solidity ги фаќа повеќето од нив, но сепак е ризик во кодот на ниско ниво.
  • Несоодветна валидација на влезот: Нулта адреса, контрола на нулта количина.
  • Зависност од Oracle: Слепа доверба во надворешни податоци (како што е цената).
Внимание: вештачката интелигенција може да ја потсети оваа листа, но не може да гарантира дали ставка во списокот е во вашата специфична шифра. Списокот за проверка е почеток; Тоа не е замена за контрола на контејнери.

Правилно поставување на контекстот: Тајната на добриот код од вештачката интелигенција

Квалитетот на кодот што го произведува вештачката интелигенција зависи директно од квалитетот на контекстот што го давате. Во Web3 ова е особено критично бидејќи еден мал детал (кој синџир, која верзија Solidity, кој токен стандард) го менува целиот излез. Добриот контекст вклучува:

  • Целен синџир и околина: Ethereum mainnet или Layer 2 (поевтин страничен синџир што работи на врвот на главниот синџир)? Цената на гасот и некои карактеристики се разликуваат според синџирот.
  • Верзија и библиотека: која верзија на Solidity, која верзија на OpenZeppelin? Ако не е наведена верзија, вештачката интелигенција може да произведе застарени, застарени обрасци.
  • Безбедносни барања: Дали има капа, дали може да се паузира, дали може да се зголеми? Овие треба да се кажат од самиот почеток.
  • Ограничувања: јасни граници како „не користете склопување“, „избегнувајте надворешен повик“, „оптимизирајте го гасот, но одржувајте ја читливоста“.

Друга моќна техника е прво да побарате од вештачката интелигенција за планот, потоа кодот: „Прво наведете ги функциите на овој договор и што ќе прави секој; напишете го кодот штом ќе го одобрам“. Ова рано ја фаќа вештачката интелигенција како оди во погрешна насока и ви овозможува да ја задржите архитектонската одлука.

Совет: Прашајте ја вештачката интелигенција "зошто го напиша овој код вака?" прашај. Објаснувањето на образложението ќе го забрза вашето учење и ќе ги извади на површина сите логички грешки (на пример, лажна безбедносна претпоставка). Не верувајте на излезот на вештачката интелигенција која не може да го одбрани сопствениот код.

Вообичаени грешки

  • Ставање безбедност во вештачката интелигенција од нула. Користете тестирана библиотека.
  • Не се потврдува верзијата/шемата произведена од вештачката интелигенција. Податоците за обука може да се стари.
  • Заобиколувајќи ја тест мрежата. Секој нацрт треба да работи на мрежата за тестирање пред да започне во живо.
  • Не се додава NatSpec/документација. Инспекцијата и одржувањето стануваат тешки.
  • Заблуда „Тоа е составено, па затоа е безбедно“. Да се ​​биде составен не значи да се биде безбеден.
  • Заборавајќи ја контролата на пристап. Тоа е една од најчестите и најскапи грешки.

Сумирано

  • Во паметното пишување договори, вештачката интелигенција произведува рамки, тестови и нацрти за преглед; Human ја гарантира безбедноста на производството.
  • Изградете безбедност не од нула, туку врз основа на докажани библиотеки (на пр. OpenZeppelin).
  • Ажурноста на верзиите и моделите произведени од YZ секогаш се потврдува.
  • Тест никулци се вредни за снимање на човечки слепи точки (ограничени случаи, контрола на пристап).
  • Да се ​​биде составен не значи да се биде безбеден; тестнет и ревизија се задолжителни.

Задача за апликација

За едноставен токен ERC-20, генерирајте нацрт користејќи го погоре навестувањето „скелет заснован на стандарди“. Потоа: (1) проверете дали користи проверена библиотека, (2) проверете ги контролите за пристап, (3) генерирате тестови со промптот „тест случајот нацрт“ и всушност изврши барем еден тест за лажни повикувачи. Најдете и забележете барем една безбедносна точка што вештачката интелигенција ја пропушти.

листа за проверка

  • [ ] Јас јасно ги наведов стандардот и синџирот во промптот.
  • [ ] Сакав докажано производство базирано на библиотека.
  • [ ] Достапни се лиценца SPDX и прагма верзија.
  • [ ] Постои контрола на пристап во секоја критична функција.
  • [ ] Создадов и спроведов тестови за гранични случаи.
  • [ ] Потврдив дека библиотеката/шемата е ажурирана.
  • [ ] Ја означив шифрата за ревизија и тестирање; Не го добив без надзор на mainnet.