Egység 2 / 11

Intelligens szerződésírás támogatása: Solidity/Vyper Draft és Secure Code Generation

Nyereség:

  • Képes a mesterséges intelligencia felhasználására keretrendszerek, tesztek és vázlatok áttekintésére a bevált könyvtárak (pl. OpenZeppelin) alapján, valamint annak megértése, hogy az emberek garantálják a termelés biztonságát
  • Lehetőség a mesterséges intelligencia által előállított kódverzió, minta és hozzáférés-szabályozás ellenőrzésére fordítás, tesztelés és teszthálózat segítségével
  • Az, hogy meg tudjuk különböztetni, hogy a fordítás nem jelenti azt, hogy biztonságos, és hogy a testnet és az auditálás elengedhetetlen.

Az intelligens szerződés megírása különbözik a hagyományos szoftverektől: az Ön által írt kód nyilvános, megváltoztathatatlan, és egy olyan program, amely közvetlenül pénzt mozgat. Ebben az egységben megtanulhatja, hogyan használhatja az AI-t intelligens szerződéses fejlesztési asszisztensként; Tanulunk a vázlatgyártástól a tesztírásig, a minta visszahívásától a gáz (tranzakciós díj) optimalizálásig. De legyünk tiszták az elején: az AI tervrajzokat készít; Az emberek biztosítják a biztonságos kódot, amely a gyártásba kerül.

Első a talaj: nyelv és környezet

A leggyakoribb intelligens szerződéses nyelv a Solidity (az Ethereum és az EVM nyelve – Ethereum Virtual Machine, a virtuális gép, amelyen a szerződések futnak – kompatibilis láncok). Az alternatíva a Vyper (egy Python-szerű nyelv, amelynek célja, hogy korlátozottabb és olvashatóbb legyen). Kódja gázt fogyaszt (az egyes tranzakciók költsége a blokklánc számára); A nem hatékony kód drága. A pontos kimenet eléréséhez kulcsfontosságú, hogy tisztán tartsa ezeket a kifejezéseket az AI-nak adott szövegkörnyezetben.

A mesterséges intelligencia a legértékesebb nem az "a nulláról való írás", hanem a keret + jó forma létrehozása: a szabványoknak megfelelő kezdés, egy terv, amelyre hozzáadhatja a szakértelmét.

Az AI használatának rétegei a kódolásban

1. Csontvázak generálása. A mesterséges intelligencia gyorsan kibányászza a szabványos token (ERC-20) vagy az NFT (ERC-721 – egyedülálló digitális eszközszabvány) vázát. De ügyeljen arra, hogy az AI egy bevált könyvtárat használjon: például az OpenZeppelint (a közösség megbízható, ellenőrzött szabványos szerződéses könyvtára). A szabály az, hogy a tesztelt blokkot használja, ahelyett, hogy a biztonságot a semmiből írná.

2. Funkció leírása és áttekintése. Egy létező függvény magyarázata a mesterséges intelligencia számára lehetővé teszi a logikai hibák korai észlelését.

3. Tesztgenerálás. Az AI jó tesztesetek generálására szélső esetekre: nulla bemenet, nagyon nagy szám, jogosulatlan hívó, ismételt hívás. Ez az egyik kihagyott forgatókönyvre emlékeztet.

4. Gáz és olvashatóság. A mesterséges intelligencia megjelöli a drága mintákat, például a szükségtelen tárolási írásokat, és alternatívákat javasol.

Tipp: Utasítsa az AI-t, hogy "épüljön az OpenZeppelin auditált szerződéseire, írja át a biztonságot a semmiből." Egy mesterséges intelligencia számára sokkal kockázatosabb eredeti biztonsági kódot írni, mint tesztelt könyvtárat használni.

Gyenge felszólítás / Erős felszólítás

Gyenge felszólítás:

Írj nekem jelképes szerződést.

Ez a prompt veszélyes: nem világos, melyik szabvány, melyik lánc, melyik könyvtár, melyik biztonsági követelmény. Az AI véletlenszerű, esetleg elavult vagy nem biztonságos kódot generál.

Erőteljes felszólítás:

Az Ön szerepköre: vezető Solidity fejlesztő. ERC-20 token piszkozat létrehozása az EVM-kompatibilis lánchoz. Szabályok:- Az OpenZeppelin auditált ERC20 és Ownable szerződései alapján.- Írja kifejezetten a Solidity verzió és licenc (SPDX) sort.- Csak a tulajdonosnak van engedélye a pénzverésre; adjon hozzá egy sapkát a végtelen nyomás ellen. - Adjon hozzá NatSpec megjegyzést minden funkcióhoz. - Írjon biztonságot a semmiből; Használja a szabványos blokkot. - Figyelmeztetés a végére: "Ez egy tervezet; auditálás és tesztelés szükséges". Jelölje meg azokat a területeket, amelyekben nem vagy biztos a // TODO segítségével.

Különbség: az erős prompt egyértelmű szerepet, szabványt, könyvtárat, biztonsági határt, dokumentációs és érvényesítési elvárásokat ad meg.

Négy másolható sablon

1) Szabvány alapú váz:

Az Ön szerepe: Solidity fejlesztő. Generáljon [ERC-20 / ERC-721 / staking] szerződési keretrendszert az OpenZeppelin auditált könyvtár alapján. Írjon SPDX licencet és pragma verziót. Adjon hozzá hozzáférés-vezérlést (ki hívhat) minden külső funkcióhoz. A biztonság újrafeltalálása; Használjon szabványos blokkokat. Ez egy piszkozat.

2) Funkció áttekintése:

Vizsgálja meg a következő funkciót, mint egy vezető fejlesztő: mit csinál, milyen állapotokat változtat meg, ki hívhatja? Jelölje meg a lehetséges logikai hibákat és biztonsági kockázatokat HIPOTÉZIS-ként, és mindegyiket a kód egy sorához kapcsolja. Ne mondd egyenesen, hogy „biztonságos”; csak sorold fel a figyelem pontjait.

3) Tesztforgatókönyv-vázlat:

Javasoljon teszteseteket ehhez a szerződéshez (ez lehet a Foundry/Hardhat tervezete). Kifejezetten fedezi a limites eseteket: nulla bemenet, nagyon nagy szám, jogosulatlan hívás, visszatérő hívás, elégtelen forrás. Írd meg, MIT erősít meg minden teszt!

4) Gáz és olvashatóság felülvizsgálata:

Ebben a szerződésben jelölje meg azokat a mintákat, amelyek csökkenthetik a gázköltséget: felesleges tároló írás, külső hívás a hurokban, ismétlődő számítás. Magyarázza meg az előtte/utána különbséget az egyes javaslatokban. Biztonságot feltörő optimalizációk ajánlása; Ha nem egyértelmű, mondja azt, hogy „kérdezze meg a könyvvizsgálót”.

Három mini tok (számokban)

1. eset – A csontváz 4 órát mentett meg. Az egyik csapat 30 perc alatt kibányászta az AI-val kötött, auditált könyvtári alapú átruházási szerződés vázát; Kézzel kb 4 órát vett igénybe. A csapat időt fordított a biztonságra és a tesztelésre. A haszon nem a biztonság átadásából származott, hanem az unalmas keretrendszer felgyorsításából.

2. eset – Elavult verzió csapda. Az AI olyan mintát hozott létre, amely átvitel útján nyers étert küld, ami már nem ajánlott, mert a képzési adatok elavultak. A fejlesztő észrevette ezt, és megváltoztatta a jelenlegi hívásalapú és visszalépés-védett mintára. Tanulság: Az AI könyvtára/mintája mindig naprakész; Az AI nem tud túl a képzés határidején.

3. eset – A tesztvázlat rejtett hibát észlelt. Az AI által készített "jogosulatlan hívó" teszt feltárta, hogy a fejlesztő elfelejtette a hozzáférés-szabályozást egy funkcióban. csak a tulajdonosnak hiányzik 1 sor, 5 perc alatt elkapták a tesztneten; Pénzkiesés történhetett a mainneten. Tanulság: Az AI lefedi az emberi holtteret a tesztelés során.

Biztonsági minták emlékezése mesterséges intelligencia segítségével

A mesterséges intelligencia alkalmas arra, hogy emlékeztesse Önt az ismert sebezhetőségi mintákra, például egy ellenőrzőlista. A leggyakoribb minták:

  • Reentancy: Külső hívás kezdeményezése az állapot frissítése nélkül. Megoldás: ellenőrzések-hatások-kölcsönhatások sorrendje, visszatérési őr.
  • Hozzáférés-szabályozás hiánya: Bárki meghívhatja a kritikus funkciót.
  • Integer overflow/underfall: A Modern Solidity elkapja a legtöbbet, de még mindig kockázatot jelent az alacsony szintű kódban.
  • Nem megfelelő bemenet érvényesítés: Nulla cím, nulla mennyiség ellenőrzés.
  • Oracle-függőség: vak bizalom a külső adatokban (például az árban).
Figyelem: A mesterséges intelligencia elő tudja idézni ezt a listát, de nem tudja garantálni, hogy a listában szereplő elem az Ön konkrét kódjában szerepel-e. Az ellenőrző lista a kezdet; Nem helyettesíti a konténervezérlést.

Helyes szövegkörnyezet: Az AI jó kódjának titka

Az AI által előállított kód minősége közvetlenül függ a neki adott környezet minőségétől. A Web3-ban ez különösen kritikus, mert egy apró részlet (melyik lánc, melyik Solidity verzió, melyik token szabvány) megváltoztatja a teljes kimenetet. A jó kontextus a következőket tartalmazza:

  • Céllánc és környezet: Ethereum mainnet vagy Layer 2 (olcsóbb oldallánc, amely a főlánc tetején fut)? A gáz költsége és bizonyos jellemzők lánconként eltérőek.
  • Verzió és könyvtár: Melyik Solidity verzió, melyik OpenZeppelin verzió? Ha nincs megadva verzió, az AI elavult, elavult mintákat állíthat elő.
  • Biztonsági követelmények: Van felső határ, szünetelhető, növelhető? Ezeket már az elején el kell mondani.
  • Megszorítások: Világos korlátok, mint például "ne használjon összeállítást", "kerülje a külső hívást", "optimalizálja a gázt, de tartsa fenn az olvashatóságot".

Egy másik hatékony technika az, hogy először a MI-től kérjük meg a tervet, majd a kódot: "Először sorolja fel a szerződés funkcióit és azt, hogy mindegyik mit fog tenni; írja meg a kódot, miután jóváhagyom." Ez korán észreveszi, hogy a mesterséges intelligencia rossz irányba halad, és lehetővé teszi az építészeti döntés megőrzését.

Tipp: Kérdezd meg az AI-t, hogy "miért írtad ezt a kódot így?" kérdez. Az indoklás elmagyarázása felgyorsítja a tanulást, és felszínre hoz minden logikai hibát (pl. hamis biztonsági feltételezést). Ne bízzon egy olyan mesterséges intelligencia kimenetében, amely nem tudja megvédeni a saját kódját.

Gyakori hibák

  • Az AI biztonságának megteremtése a semmiből. Használjon tesztelt könyvtárat.
  • Nem erősíti meg az AI által készített verziót/mintát. Előfordulhat, hogy a képzési adatok régiek.
  • Testnet megkerülése. Minden piszkozatnak futnia kell a teszthálózaton az éles indítás előtt.
  • Nem ad hozzá NatSpec/dokumentációt. Az ellenőrzés és a karbantartás nehézkessé válik.
  • "Össze van állítva, tehát biztonságos" tévhit. Az, hogy összeállítottak, nem jelenti azt, hogy biztonságban vagyunk.
  • A hozzáférés-szabályozás elfelejtése. Ez az egyik leggyakoribb és legdrágább hiba.

Összefoglalva

  • Az intelligens szerződésírás során az AI keretrendszereket, teszteket és felülvizsgálati tervezeteket készít; Az ember garantálja a gyártás biztonságát.
  • Építsen biztonságot nem a semmiből, hanem a bevált könyvtárak (pl. OpenZeppelin) alapján.
  • Az YZ által gyártott változatok és minták naprakészsége mindig megerősített.
  • A tesztcsonkok értékesek az emberi holtfoltok rögzítésében (határesetek, hozzáférés-szabályozás).
  • Összeállítottnak lenni nem jelenti azt, hogy biztonságban vagyunk; a testnet és az auditálás kötelező.

Pályázati feladat

Egy egyszerű ERC-20 tokenhez hozzon létre egy piszkozatot a fenti „szabványalapú váz” prompt segítségével. Ezután: (1) ellenőrizze, hogy használ-e ellenőrzött könyvtárat, (2) ellenőrizze a hozzáférés-vezérlőket, (3) teszteket generáljon a "teszteset vázlat" prompttal, és futtasson le legalább egy csaló hívó tesztet. Keressen meg és jegyezzen fel legalább egy biztonsági pontot, amelyet az AI nem fogadott el.

ellenőrző lista

  • [ ] A promptban egyértelműen megadtam a szabványt és a láncot.
  • [ ] Bevált könyvtári alapú produkciót akartam.
  • [ ] SPDX licenc és pragma verzió elérhető.
  • [ ] Minden kritikus funkcióhoz tartozik hozzáférés-vezérlés.
  • [ ] Létrehoztam és lefuttattam a limites esetekre vonatkozó teszteket.
  • [ ] Megerősítettem, hogy a könyvtár/minta naprakész.
  • [ ] Megjelöltem a kódot az auditáláshoz és teszteléshez; Nem kaptam felügyelet nélkül a mainneten.