Добици:
- Способност коришћења вештачке интелигенције за израду оквира, тестова и прегледа нацрта заснованих на провереним библиотекама (нпр. ОпенЗеппелин) и разумевање да људи гарантују сигурност производње
- Способност верификације верзије кода, шаблона и контроле приступа коју производи вештачка интелигенција путем компилације, тестирања и тестне мреже
- Бити у стању разликовати ту компилацију не значи бити сигуран и да су тест мрежа и ревизија од суштинског значаја.
Писање паметног уговора се разликује од обичног софтвера: код који пишете је јаван, непроменљив и програм који директно покреће новац. У овој јединици ћете научити како да користите АИ као помоћника за развој паметних уговора; Учићемо од израде нацрта до писања теста, од опозива шаблона до оптимизације гаса (трансакциона накнада). Али да будемо јасни од почетка: АИ производи нацрте; Људи осигуравају сигуран код који иде у производњу.
Прво: језик и окружење
Најчешћи језик паметних уговора је Солидити (језик Етхереума и ЕВМ — Етхереум Виртуал Мацхине, виртуелна машина на којој се покрећу уговори — компатибилни ланци). Алтернатива је Випер (језик сличан Питхон-у који има за циљ да буде ограниченији и читљивији). Ваш код троши гас (цена сваке трансакције у блок ланцу); Неефикасан код је скуп. Одржавање ових термина јасним у контексту који их дајете АИ кључно је за добијање тачног резултата.
Оно што је АИ највредније није у „писању од нуле“, већ у производњи оквира + доброг калупа: почетак у складу са стандардима, нацрт на који можете додати своју стручност.
Слојеви коришћења АИ у кодирању
1. Генерисање скелета. АИ брзо копа костур стандардног токена (ЕРЦ-20) или НФТ (ЕРЦ-721 — јединствени стандард дигиталних средстава). Али будите сигурни да АИ користи проверену библиотеку: на пример, ОпенЗеппелин (поуздана, ревидирана стандардна библиотека за уговарање заједнице). Правило је да користите тестирани блок уместо да пишете сигурност од нуле.
2. Опис и преглед функције. Објашњење постојеће функције АИ омогућава вам да рано уочите логичке грешке.
3. Генерисање тестова. АИ је добар у генерисању тест случајева за рубне случајеве: нула уноса, веома велики број, неовлашћени позивалац, поновљени позив. Ово подсећа на један од сценарија који се прескаче.
4. Гас и читљивост. АИ означава скупе обрасце као што је непотребно уписивање у складиште и предлаже алтернативе.
Савет: Упутите вештачку интелигенцију да „награди на ОпенЗеппелин-овим ревидираним уговорима, препише безбедност од нуле“. Много је ризичније за вештачку интелигенцију да напише оригинални безбедносни код него да користи тестирану библиотеку.
Слаби промпт / Јаки промпт
Слабо обавештење:
Напишите ми симболични уговор.
Овај упит је опасан: није јасно који стандард, који ланац, која библиотека, који безбедносни захтев. АИ генерише насумични, можда застарели или небезбедни код.
Снажан упит:
Ваша улога: старији програмер Солидити. Генеришите нацрт токена ЕРЦ-20 за ланац компатибилан са ЕВМ. Правила:- На основу ревидираних ОпенЗеппелин-ових ЕРЦ20 и Овнабле уговора.- Експлицитно напишите Солидити верзију и лиценцу (СПДКС).- Само власник има дозволу за ковање; додајте капу против бесконачног притиска. - Додајте НатСпец коментар свакој функцији. - Напишите сигурност од нуле; Користите стандардни блок. - Додајте упозорење на крају: „Ово је нацрт; потребна је ревизија и тестирање“. Означите области за које нисте сигурни са // ТОДО.
Разлика: јак промпт даје јасну улогу, стандард, библиотеку, безбедносну границу, документацију и очекивања валидације.
Четири шаблона за копирање
1) Скелет заснован на стандардима:
Ваша улога: Солидити девелопер. Генеришите [ЕРЦ-20 / ЕРЦ-721 / стекинг] оквир уговора заснован на ОпенЗеппелин ревидираној библиотеци. Напишите СПДКС лиценцу и прагма верзију. Додајте контролу приступа (ко може да зове) свакој спољној функцији. Реинвентинг сецурити; Користите стандардне блокове. Ово је нацрт.
2) Преглед функције:
Проучите следећу функцију као старији програмер: шта ради, која стања мења, ко може да је позове? Означите могуће логичке грешке и безбедносне ризике као ХИПОТЕЗЕ, повезујући сваку са линијом у коду. Немојте рећи „безбедно“ директно; само наведите тачке пажње.
3) Нацрт сценарија теста:
Предложите тестне случајеве за овај уговор (може бити нацрт за Фоундри/Хардхат). Посебно покријте граничне случајеве: нула уноса, веома велики број, неовлашћени позив, поновни позив, недовољно средстава. Напишите ШТА сваки тест потврђује.
4) Преглед гаса и читљивости:
У овом уговору означите обрасце који могу смањити трошкове гаса: непотребно писање складиштења, екстерни позив у петљи, понављајући прорачун. Објасните разлику пре/после у сваком предлогу. Препоручите оптимизације за пробијање безбедности; Ако није јасно, реците „питајте ревизора“.
Три мини кофера (у бројевима)
Случај 1 — Скелет је уштеђен 4 сата. Један тим је за 30 минута ископао костур ревидованог библиотечког уговора о стицању права са АИ; Ручно је требало ~4 сата. Тим је посветио време безбедности и тестирању. Добитак није дошао од преношења безбедности, већ од убрзања досадног оквира.
Случај 2 — Замка застарела верзија. АИ је произвео образац који шаље сирови Етер преносом, што се више не препоручује јер су подаци о обуци застарели. Програмер је то приметио и променио га на тренутни образац заснован на позивима и заштићен од поновног уласка. Лекција: Библиотека/образац АИ увек се потврђује да је ажуриран; АИ не зна даље од датума прекида обуке.
Случај 3 — Пробни нацрт је искочио скривену грешку. Тест „неовлашћеног позиваоца“ који је произвела АИ открио је да је програмер заборавио контролу приступа у функцији. онлиОвнер недостаје 1 линија, ухваћен за 5 минута на тестнету; Могао је да дође до губитка средстава на главној мрежи. Лекција: АИ покрива људску слепу тачку у тестирању.
Сећање на безбедносне обрасце са АИ
АИ је добар у подсећању на познате обрасце рањивости као што је контролна листа. Најчешћи обрасци:
- Поновни улазак: Упућивање екстерног позива без ажурирања статуса. Решење: редослед провере-ефекта-интеракције, заштита поновног уласка.
- Недостатак контроле приступа: Свако може позвати критичну функцију.
- Интегер оверфлов/ундерфалл: Модерн Солидити хвата већину њих, али и даље представља ризик у коду ниског нивоа.
- Неадекватна валидација уноса: нулта адреса, нулта контрола количине.
- Орацле зависност: Слепо поверење у спољне податке (као што је цена).
Пажња: АИ може да се сети ове листе, али не може да гарантује да ли је ставка на листи у вашем специфичном коду. Контролна листа је почетак; То није замена за контролу контејнера.
Исправан контекст: Тајна доброг кода од АИ
Квалитет кода који АИ производи зависи директно од квалитета контекста који му дате. У Веб3 ово је посебно критично јер један мали детаљ (који ланац, која верзија Солидитија, који токен стандард) мења цео излаз. Добар контекст укључује:
- Циљни ланац и окружење: Етхереум маиннет или Лаиер 2 (јефтинији бочни ланац који ради на врху главног ланца)? Цена гаса и неке карактеристике варирају у зависности од ланца.
- Верзија и библиотека: Која верзија Солидити-а, која верзија ОпенЗеппелина? Ако није наведена ниједна верзија, АИ може произвести застареле, застареле обрасце.
- Сигурносни захтеви: Да ли постоји ограничење, може ли се паузирати, може ли се повећати? Ово треба рећи од самог почетка.
- Ограничења: Јасна ограничења као што су „немојте користити склоп“, „избегавајте спољни позив“, „оптимизујте гас, али одржавајте читљивост“.
Још једна моћна техника је да прво од АИ затражите план, а затим шифру: "Прво наведите функције овог уговора и шта ће сваки радити; напишите код када га одобрим." Ово рано ухвати АИ како иде у погрешном правцу и омогућава вам да задржите архитектонску одлуку.
Савет: Питајте АИ "зашто сте написали овај код овако?" питати. Објашњење образложења ће убрзати ваше учење и изнети на површину све логичке грешке (нпр. лажну безбедносну претпоставку). Не верујте резултату вештачке интелигенције која не може да одбрани сопствени код.
Уобичајене грешке
- Постављање сигурности у АИ од нуле. Користите тестирану библиотеку.
- Не потврђује верзију/узорак произведен од АИ. Подаци о обуци могу бити стари.
- Заобилажење тестнета. Сваки нацрт треба да се покрене на пробној мрежи пре објављивања.
- Не додаје се НатСпец/документација. Инспекција и одржавање постају тешки.
- „Састављено је, тако да је сигурно“ заблуда. Бити састављен не значи бити сигуран.
- Заборављам контролу приступа. То је једна од најчешћих и најскупљих грешака.
Укратко
- У писању паметних уговора, АИ производи оквире, тестове и прегледа нацрте; Човек гарантује безбедност производње.
- Изградите безбедност не од нуле, већ на основу проверених библиотека (нпр. ОпенЗеппелин).
- Ажурност верзија и шаблона које производи ИЗ увек се потврђује.
- Тест стубови су драгоцени у хватању људских мртвих тачака (ограничени случајеви, контрола приступа).
- Бити састављен не значи бити безбедан; тестнет и ревизија су обавезни.
Задатак апликације
За једноставан ЕРЦ-20 токен, генеришите нацрт користећи „костур заснован на стандардима“ изнад. Затим: (1) проверите да ли користи проверену библиотеку, (2) проверите контроле приступа, (3) генеришите тестове са промптом „нацрт теста случаја“ и заправо покрените најмање један тест лажног позиваоца. Пронађите и забележите бар једну безбедносну тачку коју је АИ пропустио.
контролна листа
- [ ] Јасно сам навео стандард и ланац у промпту.
- [ ] Желео сам доказану библиотечку продукцију.
- [ ] Доступна СПДКС лиценца и прагма верзија.
- [ ] У свакој критичној функцији постоји контрола приступа.
- [ ] Направио сам и покренуо тестове за граничне случајеве.
- [ ] Потврдио сам да је библиотека/шаблон ажуриран.
- [ ] Означио сам код за ревизију и тестирање; Нисам га добио без надзора на главној мрежи.