Dobički:
- Sposobnost uporabe umetne inteligence za izdelavo ogrodij, testov in pregledovanje osnutkov na podlagi preverjenih knjižnic (npr. OpenZeppelin) in razumevanje, da ljudje zagotavljajo varnost proizvodnje
- Sposobnost preverjanja različice kode, vzorca in nadzora dostopa, ki ga je ustvarila umetna inteligenca s prevajanjem, testiranjem in testnim omrežjem
- Razločiti, da prevajanje ne pomeni biti varen in da sta testna mreža in revizija bistvena.
Pisanje pametne pogodbe se razlikuje od navadne programske opreme: koda, ki jo napišete, je javna, nespremenljiva in je program, ki neposredno premika denar. V tej enoti se boste naučili uporabljati AI kot pomočnika pri razvoju pametnih pogodb; Učili se bomo od izdelave osnutka do pisanja testa, od priklica vzorca do optimizacije plina (transakcijska provizija). Vendar bodimo jasni od začetka: AI proizvaja načrte; Ljudje zagotavljajo varno kodo, ki gre v proizvodnjo.
Prvi razlog: jezik in okolje
Najpogostejši jezik pametnih pogodb je Solidity (jezik Ethereuma in EVM — Ethereum Virtual Machine, virtualni stroj, na katerem tečejo pogodbe — združljive verige). Alternativa je Vyper (Pythonu podoben jezik, ki želi biti bolj omejen in berljiv). Vaša koda porablja plin (strošek vsake transakcije v verigi blokov); Neučinkovita koda je draga. Ohranjanje jasnih izrazov v kontekstu, ki ga daste AI, je ključnega pomena za točen rezultat.
Umetna inteligenca ni najbolj dragocena pri "pisanju iz nič", temveč pri izdelavi ogrodja + dober model: začetek, skladen s standardi, načrt, na katerega lahko dodate svoje strokovno znanje.
Plasti uporabe AI pri kodiranju
1. Ustvarjanje okostnjakov. AI hitro izkopava okostje standardnega žetona (ERC-20) ali NFT (ERC-721 — edinstven standard digitalnega sredstva). Vendar se prepričajte, da AI uporablja preizkušeno knjižnico: na primer OpenZeppelin (zaupanja vredna, revidirana standardna pogodbena knjižnica skupnosti). Pravilo je, da uporabite preizkušeni blok namesto pisanja varnosti od začetka.
2. Opis in pregled delovanja. Razlaga obstoječe funkcije AI vam omogoča zgodnje odkrivanje logičnih napak.
3. Generiranje testa. Umetna inteligenca je dobra pri ustvarjanju testnih primerov za robne primere: nič vnosa, zelo veliko število, nepooblaščen klicatelj, ponovljen klic. To spominja na enega od scenarijev, ki jih človek preskoči.
4. Plin in berljivost. AI označi drage vzorce, kot je nepotrebno pisanje v pomnilnik, in predlaga alternative.
Namig: Umetni inteligenci naročite, naj "gradi na revidiranih pogodbah OpenZeppelin, znova napiše varnost iz nič." Za AI je veliko bolj tvegano napisati originalno varnostno kodo kot uporabiti preizkušeno knjižnico.
Šibek poziv/močan poziv
Šibek poziv:
Napiši mi simbolično pogodbo.
Ta poziv je nevaren: ni jasno, kateri standard, katera veriga, katera knjižnica, katera varnostna zahteva. AI generira naključno, morda zastarelo ali nevarno kodo.
Močan poziv:
Vaša vloga: višji Solidity razvijalec. Ustvarite osnutek žetona ERC-20 za verigo, združljivo z EVM. Pravila:- Na podlagi revidiranih pogodb OpenZeppelin ERC20 in Ownable.- Izrecno napišite vrstico za različico in licenco Solidity (SPDX).- Samo lastnik ima dovoljenje za kovanje; dodajte pokrovček proti neskončnemu pritiskanju. - Dodajte komentar NatSpec vsaki funkciji. - Pisanje varnosti iz nič; Uporabite standardni blok. - Na koncu dodajte opozorilo: "To je osnutek; potrebna je revizija in testiranje". Označite področja, o katerih niste prepričani, z // TODO.
Razlika: močan poziv daje jasno vlogo, standard, knjižnico, varnostno mejo, dokumentacijo in pričakovanja pri preverjanju.
Štiri predloge za kopiranje
1) Okostje, ki temelji na standardih:
Vaša vloga: Solidity razvijalec. Ustvari [ERC-20 / ERC-721 / staking]pogodbeni okvir na podlagi revidirane knjižnice OpenZeppelin. Napišite licenco SPDX in različico pragma. Vsaki zunanji funkciji dodajte nadzor dostopa (kdo lahko kliče). Ponovno odkrivanje varnosti; Uporabite standardne bloke. To je osnutek.
2) Pregled funkcij:
Preglejte naslednjo funkcijo kot starejši razvijalec: kaj počne, katera stanja spremeni, kdo jo lahko pokliče? Označite morebitne logične napake in varnostna tveganja kot HIPOTEZO in vsako povežite z vrstico v kodi. Ne recite naravnost "varno"; samo naštejte točke pozornosti.
3) Osnutek preskusnega scenarija:
Predlagajte testne primere za to pogodbo (lahko je osnutek za Foundry/Hardhat). Posebej pokriva omejitvene primere: nič vnosa, zelo veliko število, nepooblaščen klic, ponovni klic, nezadostna sredstva. Napišite, KAJ vsak test potrdi.
4) Pregled plina in berljivosti:
V tej pogodbi označite vzorce, ki lahko znižajo stroške plina: nepotrebno pisanje v shranjevanje, zunanji klic v zanki, ponavljajoči se izračuni. Pojasnite razliko prej/potem v vsakem predlogu. Priporočite optimizacije za vdor v varnost; Če ni jasno, recite "vprašajte revizorja".
Trije mini kovčki (v številkah)
Primer 1 — Okostje rešeno 4 ure. Ena ekipa je v 30 minutah izkopala okostje revidirane knjižnične odmerne pogodbe z AI; Ročno je trajalo ~4 ure. Ekipa je čas posvetila varnosti in testiranju. Dobiček ni prišel zaradi prenosa varnosti, ampak zaradi pospešitve dolgočasnega okvira.
2. primer – past zastarele različice. Umetna inteligenca je ustvarila vzorec, ki pošilja neobdelani eter s prenosom, kar ni več priporočljivo, ker so podatki o usposabljanju zastareli. Razvijalec je to opazil in ga spremenil v trenutni vzorec, ki temelji na klicu in je zaščiten pred ponovnim vstopom. Lekcija: Knjižnica/vzorec AI je vedno potrjeno posodobljena; AI ne ve več o končnem datumu usposabljanja.
Primer 3 – Testni osnutek je odkril skrito napako. Test "nepooblaščenega klicatelja", ki ga je izdelal AI, je pokazal, da je razvijalec pozabil nadzor dostopa v funkciji. onlyOwner manjka 1 vrstica, ujeta v 5 minutah na testnem omrežju; Lahko bi prišlo do izgube sredstev v glavnem omrežju. Lekcija: AI pri testiranju pokriva človeško slepo pego.
Zapomni si varnostne vzorce z AI
Umetna inteligenca vas dobro opomni na znane vzorce ranljivosti, kot je kontrolni seznam. Najpogostejši vzorci:
- Ponovni vstop: Zunanji klic brez posodobitve statusa. Rešitev: vrstni red preverjanja-učinkov-interakcij, zaščita pred ponovnim vstopom.
- Pomanjkanje nadzora dostopa: Kdorkoli lahko pokliče kritično funkcijo.
- Integer overflow/underfall: Modern Solidity jih ujame večino, vendar še vedno predstavlja tveganje pri kodi nizke ravni.
- Neustrezna validacija vnosa: ničelni naslov, ničelna kontrola količine.
- Odvisnost od Oracla: slepo zaupanje zunanjim podatkom (kot je cena).
Pozor: AI lahko prikliče ta seznam, vendar ne more zagotoviti, ali je element na seznamu v vaši specifični kodi. Kontrolni seznam je začetek; Ni nadomestilo za nadzor posod.
Pridobivanje pravega konteksta: skrivnost dobre kode iz umetne inteligence
Kakovost kode, ki jo ustvari AI, je neposredno odvisna od kakovosti konteksta, ki ji ga podate. V Web3 je to še posebej kritično, ker ena majhna podrobnost (katera veriga, katera različica Solidity, kateri standard žetona) spremeni celoten rezultat. Dober kontekst vključuje:
- Ciljna veriga in okolje: glavno omrežje Ethereum ali sloj 2 (cenejša stranska veriga, ki teče na vrhu glavne verige)? Stroški plina in nekatere funkcije se razlikujejo glede na verigo.
- Različica in knjižnica: katera različica Solidity, katera različica OpenZeppelin? Če različica ni določena, lahko AI ustvari zastarele, opuščene vzorce.
- Varnostne zahteve: Ali obstaja omejitev, ali jo je mogoče začasno ustaviti, ali jo je mogoče povečati? Te je treba povedati že na samem začetku.
- Omejitve: jasne omejitve, kot so "ne uporabljajte sestavljanja", "izogibajte se zunanjemu klicu", "optimizirajte plin, vendar ohranite berljivost".
Druga zmogljiva tehnika je, da najprej vprašate AI za načrt, nato pa kodo: "Najprej navedite funkcije te pogodbe in kaj bo vsaka naredila; napišite kodo, ko jo odobrim." To zgodaj ujame, da gre AI v napačno smer, in vam omogoči, da ohranite arhitekturno odločitev.
Namig: vprašajte AI "zakaj ste napisali to kodo tako?" vprašaj. Razlaga utemeljitve bo pospešila vaše učenje in na površje prinesla morebitne logične napake (npr. napačno varnostno domnevo). Ne zaupajte rezultatom umetne inteligence, ki ne more braniti lastne kode.
Pogoste napake
- Vstavljanje varnosti v AI od začetka. Uporabite preizkušeno knjižnico.
- Ni potrditve različice/vzorca, ki ga je ustvaril AI. Podatki o usposabljanju so lahko stari.
- Obhod testnega omrežja. Vsak osnutek se mora izvajati v testnem omrežju, preden se objavi.
- Ni dodajanja NatSpec/dokumentacije. Pregled in vzdrževanje postaneta težavna.
- Napačno prepričanje "je sestavljeno, zato je varno". Biti sestavljen še ne pomeni biti varen.
- Pozabite na nadzor dostopa. Je ena najpogostejših in dragih napak.
Če povzamem
- Pri pisanju pametnih pogodb umetna inteligenca izdeluje okvire, teste in pregleduje osnutke; Human zagotavlja varnost proizvodnje.
- Gradite varnost ne iz nič, temveč na podlagi preverjenih knjižnic (npr. OpenZeppelin).
- Ažurnost različic in vzorcev, ki jih proizvaja YZ, je vedno potrjena.
- Testne škrbine so dragocene pri zajemanju človeških slepih točk (mejni primeri, nadzor dostopa).
- Biti preveden ne pomeni biti varen; testnet in revizija sta obvezna.
Aplikacijska naloga
Za preprost žeton ERC-20 ustvarite osnutek z zgornjim pozivom "okostje, ki temelji na standardih". Nato: (1) preverite, ali uporablja preverjeno knjižnico, (2) preverite nadzor dostopa, (3) ustvarite teste s pozivom "osnutek testnega primera" in dejansko zaženite vsaj en test lažnega klicatelja. Poiščite in zabeležite vsaj eno varnostno točko, ki jo je AI zgrešil.
kontrolni seznam
- [ ] V pozivu sem jasno navedel standard in verigo.
- [ ] Želel sem dokazano knjižnično produkcijo.
- [ ] Na voljo sta licenca SPDX in različica pragma.
- [ ] V vsaki kritični funkciji je nadzor dostopa.
- [ ] Ustvaril in izvajal sem teste za mejne primere.
- [ ] Potrdil sem, da je knjižnica/vzorec posodobljen.
- [ ] Označil sem kodo za revizijo in testiranje; Nisem ga dobil nenadzorovano na glavnem omrežju.