Dobici:
- Sposobnost korištenja umjetne inteligencije za izradu okvira, testova i pregleda nacrta na temelju dokazanih biblioteka (npr. OpenZeppelin) i razumijevanje da ljudi jamče sigurnost proizvodnje
- Sposobnost provjere verzije koda, uzorka i kontrole pristupa koju proizvodi umjetna inteligencija putem kompilacije, testiranja i testneta
- Biti u stanju razlikovati da kompilacija ne znači biti siguran i da su testnet i revizija bitni.
Pisanje pametnog ugovora razlikuje se od običnog softvera: kod koji pišete je javan, nepromjenjiv i program koji izravno premješta novac. U ovoj ćete jedinici naučiti kako koristiti AI kao pomoćnika za razvoj pametnih ugovora; Učit ćemo od izrade nacrta do pisanja testa, od opoziva uzorka do optimizacije plina (transakcijska naknada). Ali budimo jasni od samog početka: AI proizvodi nacrte; Ljudi osiguravaju siguran kod koji ide u proizvodnju.
Osnova prije svega: jezik i okolina
Najčešći jezik pametnih ugovora je Solidity (jezik Ethereuma i EVM — Ethereum Virtual Machine, virtualni stroj na kojem se izvode ugovori — kompatibilni lanci). Alternativa je Vyper (jezik sličan Pythonu koji ima za cilj biti ograničeniji i čitljiviji). Vaš kod troši plin (trošak svake transakcije u blockchain); Neučinkovit kod je skup. Održavanje jasnih pojmova u kontekstu koji ste dali umjetnoj inteligenciji ključno je za dobivanje točnog rezultata.
Ono gdje je umjetna inteligencija najvrjednija nije u "pisanju od nule", već u izradi okvira + dobrog kalupa: početak usklađen sa standardima, nacrt na koji možete dodati svoju stručnost.
Slojevi korištenja AI u kodiranju
1. Generiranje kostura. AI brzo rudari kostur standardnog tokena (ERC-20) ili NFT (ERC-721 — jedinstveni standard digitalne imovine). Ali budite sigurni da AI koristi provjerenu biblioteku: na primjer, OpenZeppelin (pouzdana, revidirana standardna ugovorna biblioteka zajednice). Pravilo je koristiti testirani blok radije nego pisati sigurnost od nule.
2. Opis funkcije i pregled. Objašnjavanje postojeće funkcije umjetnoj inteligenciji omogućuje vam rano uočavanje logičkih pogrešaka.
3. Generiranje testa. AI je dobar u generiranju testnih slučajeva za rubne slučajeve: nula unosa, vrlo velik broj, neovlašteni pozivatelj, ponovljeni poziv. Ovo podsjeća na jedan od scenarija koji se preskaču.
4. Plin i čitljivost. AI označava skupe obrasce kao što je nepotrebno upisivanje u pohranu i predlaže alternative.
Savjet: Uputite umjetnu inteligenciju da "izradi na revidiranim ugovorima OpenZeppelina, ponovno napiše sigurnost od nule." Puno je riskantnije za AI napisati izvorni sigurnosni kod nego koristiti testiranu biblioteku.
Slab upit / Jak upit
Slab upit:
Napiši mi simbolični ugovor.
Ovaj upit je opasan: nije jasno koji standard, koji lanac, koja biblioteka, koji sigurnosni zahtjev. AI generira nasumični, vjerojatno zastarjeli ili nesiguran kod.
Snažan upit:
Vaša uloga: stariji Solidity programer. Generirajte nacrt tokena ERC-20 za lanac kompatibilan s EVM-om. Pravila:- Temeljeno na OpenZeppelin-ovim revidiranim ERC20 i Ownable ugovorima.- Izričito napišite liniju Solidity verzije i licence (SPDX).- Samo vlasnik ima dopuštenje za kovanje; dodati kapu protiv beskonačnog pritiskanja. - Dodajte NatSpec komentar svakoj funkciji. - Napišite sigurnost od nule; Koristite standardni blok. - Dodajte upozorenje na kraju: "Ovo je nacrt; potrebna je revizija i testiranje". Označite područja za koja niste sigurni s // TODO.
Razlika: snažan prompt daje jasnu ulogu, standard, biblioteku, sigurnosnu granicu, dokumentaciju i očekivanja provjere valjanosti.
Četiri predloška za kopiranje
1) Kostur temeljen na standardima:
Vaša uloga: Solidity programer. Generirajte [ERC-20 / ERC-721 / staking] ugovorni okvir na temelju OpenZeppelin revidirane knjižnice. Napišite SPDX licencu i pragma verziju. Dodajte kontrolu pristupa (tko može nazvati) svakoj vanjskoj funkciji. Ponovno otkrivanje sigurnosti; Koristite standardne blokove. Ovo je nacrt.
2) Pregled funkcije:
Ispitajte sljedeću funkciju poput starijeg programera: što radi, koja stanja mijenja, tko je može pozvati? Označite moguće logičke pogreške i sigurnosne rizike kao HIPOTEZE, povezujući svaku s retkom u kodu. Nemojte odmah reći "sigurno"; samo navedite točke pažnje.
3) Nacrt testnog scenarija:
Predloži testne slučajeve za ovaj ugovor (može biti nacrt za Ljevaonicu/Hardhat). Posebno pokrijte ograničene slučajeve: nulti unos, vrlo velik broj, neovlašteni poziv, reentrant poziv, nedostatna sredstva. Napišite ŠTO svaki test potvrđuje.
4) Pregled plina i čitljivosti:
U ovom ugovoru označite obrasce koji mogu smanjiti trošak plina: nepotrebno pisanje pohrane, vanjski poziv u petlji, ponavljajući izračun. Objasnite razliku prije/poslije u svakom prijedlogu. Preporučite optimizacije za probijanje sigurnosti; Ako nije jasno, recite "pitajte revizora".
Tri mini kofera (u broju)
Slučaj 1 — Kostur spašen 4 sata. Jedan tim je u 30 minuta iskopao kostur revidiranog ugovora o stjecanju prava temeljenog na knjižnici s AI; Ručno je trebalo ~4 sata. Tim je posvetio vrijeme sigurnosti i testiranju. Dobitak nije došao od prijenosa sigurnosti, već od ubrzavanja zamornog okvira.
Slučaj 2 — Zamka zastarjele verzije. AI je proizveo obrazac koji šalje sirovi Ether prijenosom, što se više ne preporučuje jer su podaci o obuci zastarjeli. Programer je to primijetio i promijenio u trenutni obrazac koji se temelji na pozivima i zaštićen je ponovnim ulaskom. Lekcija: Knjižnica/uzorak umjetne inteligencije uvijek se potvrđuje da je ažuran; AI ne zna dalje od krajnjeg datuma obuke.
Slučaj 3 — Testna skica otkrila je skrivenu pogrešku. Test "neovlaštenog pozivatelja" koji je AI napravio otkrio je da je programer zaboravio kontrolu pristupa u funkciji. onlyOwner nedostaje 1 linija, uhvaćen za 5 minuta na testnetu; Moglo je doći do gubitka sredstava na glavnoj mreži. Lekcija: AI pokriva ljudsku slijepu točku u testiranju.
Pamćenje sigurnosnih obrazaca pomoću AI
AI je dobra u podsjećanju na poznate obrasce ranjivosti poput popisa za provjeru. Najčešći uzorci:
- Ponovni pristup: Upućivanje vanjskog poziva bez ažuriranja statusa. Rješenje: redoslijed provjere-učinci-interakcije, zaštita od ponovnog ulaska.
- Nedostatak kontrole pristupa: Svatko može pozvati kritičnu funkciju.
- Integer overflow/underfall: Modern Solidity hvata većinu njih, ali još uvijek predstavlja rizik u kodu niske razine.
- Neadekvatna potvrda unosa: nula adresa, nula kontrola količine.
- Oracle ovisnost: slijepo povjerenje u vanjske podatke (kao što je cijena).
Pažnja: AI može pozvati ovaj popis, ali ne može jamčiti nalazi li se stavka na popisu u vašem specifičnom kodu. Popis za provjeru je početak; Nije zamjena za kontrolu kontejnera.
Pravilan kontekst: Tajna dobrog koda iz umjetne inteligencije
Kvaliteta koda koji AI proizvodi izravno ovisi o kvaliteti konteksta koji mu date. U Web3 ovo je posebno kritično jer jedan mali detalj (koji lanac, koja verzija Solidityja, koji standard tokena) mijenja cijeli izlaz. Dobar kontekst uključuje:
- Ciljni lanac i okruženje: Ethereum mainnet ili Layer 2 (jeftiniji bočni lanac koji radi na vrhu glavnog lanca)? Cijena goriva i neke značajke razlikuju se ovisno o lancu.
- Verzija i biblioteka: Koja verzija Solidityja, koja verzija OpenZeppelina? Ako verzija nije navedena, AI može proizvesti zastarjele, odbačene uzorke.
- Sigurnosni zahtjevi: Postoji li ograničenje, može li se pauzirati, može li se povećati? To treba reći od samog početka.
- Ograničenja: Jasna ograničenja kao što su "ne koristiti montažu", "izbjegavati vanjski poziv", "optimizirati plin, ali zadržati čitljivost".
Još jedna moćna tehnika je prvo zatražiti od umjetne inteligencije plan, a zatim kod: "Prvo navedite funkcije ovog ugovora i što će svaka raditi; napišite kod kad ga odobrim." Ovo rano hvata AI kako ide u krivom smjeru i omogućuje vam da zadržite arhitektonsku odluku.
Savjet: Pitajte AI "zašto ste napisali ovaj kod ovako?" pitati. Objašnjenje obrazloženja ubrzat će vaše učenje i iznijeti na površinu sve logičke pogreške (npr. lažnu sigurnosnu pretpostavku). Ne vjerujte rezultatima umjetne inteligencije koja ne može obraniti vlastiti kod.
Uobičajene greške
- Stavljanje sigurnosti u AI od nule. Koristite testiranu biblioteku.
- Ne potvrđuje se verzija/uzorak koji je izradio AI. Podaci o obuci mogu biti stari.
- Zaobilaženje testne mreže. Svaka skica trebala bi se pokrenuti na testnoj mreži prije objavljivanja.
- Ne dodaje se NatSpec/dokumentacija. Inspekcija i održavanje postaju otežani.
- Zabluda "Sastavljeno je, pa je sigurno". Biti sastavljen ne znači biti siguran.
- Zaboravljamo kontrolu pristupa. To je jedna od najčešćih i najskupljih grešaka.
Ukratko
- U pisanju pametnih ugovora AI proizvodi okvire, testove i preglede nacrta; Human jamči sigurnost proizvodnje.
- Izgradite sigurnost ne od nule, već na temelju dokazanih biblioteka (npr. OpenZeppelin).
- Ažurnost verzija i uzoraka koje proizvodi YZ uvijek se potvrđuje.
- Testni dijelovi su vrijedni u hvatanju ljudskih slijepih točaka (granični slučajevi, kontrola pristupa).
- Biti sastavljen ne znači biti siguran; testnet i revizija su obavezni.
Zadatak aplikacije
Za jednostavan ERC-20 token, generirajte nacrt pomoću "kostura temeljenog na standardima" iznad. Zatim: (1) provjerite koristi li označenu biblioteku, (2) provjerite kontrole pristupa, (3) generirajte testove s upitom "skica testnog slučaja" i zapravo pokrenite barem jedan test lažnog pozivatelja. Pronađite i zabilježite barem jednu sigurnosnu točku koju je umjetna inteligencija propustila.
popis za provjeru
- [ ] Jasno sam naveo standard i lanac u upitu.
- [ ] Želio sam dokazanu produkciju temeljenu na knjižnici.
- [ ] SPDX licenca i pragma verzija dostupna.
- [ ] Postoji kontrola pristupa u svakoj kritičnoj funkciji.
- [ ] Kreirao sam i pokrenuo testove za granične slučajeve.
- [ ] Potvrdio sam da je biblioteka/uzorak ažuran.
- [ ] Označio sam kod za reviziju i testiranje; Nisam ga dobio bez nadzora na mainnetu.