Njësia 2 / 11

Mbështetje për shkrimin inteligjent të kontratës: Solidity/Vyper Draft dhe Secure Code Generation

Fitimet:

  • Aftësia për të përdorur inteligjencën artificiale për të prodhuar korniza, teste dhe rishikim të drafteve të bazuara në biblioteka të provuara (p.sh. OpenZeppelin) dhe për të kuptuar se njerëzit garantojnë sigurinë e prodhimit
  • Aftësia për të verifikuar versionin e kodit, modelin dhe kontrollin e aksesit të prodhuar nga inteligjenca artificiale përmes përpilimit, testimit dhe rrjetit testues
  • Të jesh në gjendje të dallosh se përpilimi nuk do të thotë të jesh i sigurt dhe se rrjeti testues dhe auditimi janë thelbësorë.

Shkrimi i një kontrate inteligjente është i ndryshëm nga softveri i zakonshëm: kodi që shkruani është publik, i pandryshueshëm dhe një program që lëviz drejtpërdrejt paratë. Në këtë njësi, ju do të mësoni se si të përdorni AI si një asistent i zhvillimit të kontratave inteligjente; Ne do të mësojmë nga prodhimi i draftit deri tek shkrimi i testit, nga rikthimi i modelit deri te optimizimi i gazit (tarifa e transaksionit). Por le të jemi të qartë që në fillim: AI prodhon plane; Njerëzit sigurojnë kod të sigurt që hyn në prodhim.

Baza e parë: gjuha dhe mjedisi

Gjuha më e zakonshme e kontratave inteligjente është Solidity (gjuha e Ethereum dhe EVM - Ethereum Virtual Machine, makina virtuale në të cilën ekzekutohen kontratat - zinxhirë të pajtueshëm). Alternativa është Vyper (një gjuhë e ngjashme me Python që synon të jetë më e kufizuar dhe e lexueshme). Kodi juaj konsumon gaz (kostoja e çdo transaksioni në blockchain); Kodi joefikas është i shtrenjtë. Mbajtja e qartë e këtyre termave në kontekstin që i jepni AI-së është çelësi për të marrë rezultate të sakta.

Aty ku inteligjenca artificiale është më e vlefshme nuk është në "të shkruarit nga e para", por në prodhimin e kornizës + kallëp të mirë: një fillim në përputhje me standardet, një plan mbi të cilin mund të shtoni ekspertizën tuaj.

Shtresat e përdorimit të AI në kodim

1. Gjenerimi i skeleteve. AI minon shpejt skeletin e një token standard (ERC-20) ose NFT (ERC-721 - një standard unik i aseteve dixhitale). Por sigurohuni që të bëni që AI të përdorë një bibliotekë të provuar: për shembull, OpenZeppelin (biblioteka kontraktuese standarde e besuar dhe e audituar e komunitetit). Rregulli është të përdorni bllokun e testuar në vend që të shkruani sigurinë nga e para.

2. Përshkrimi dhe rishikimi i funksionit. Shpjegimi i një funksioni ekzistues në AI ju lejon të dalloni gabimet logjike herët.

3. Gjenerimi i testit. Inteligjenca artificiale është e mirë në gjenerimin e rasteve testuese për rastet e skajshme: hyrje zero, numër shumë i madh, telefonues i paautorizuar, thirrje e përsëritur. Kjo të kujton një nga skenarët që kapërcesh.

4. Gazi dhe lexueshmëria. Inteligjenca artificiale shënon modele të shtrenjta, të tilla si ruajtja e panevojshme, shkruan dhe sugjeron alternativa.

Këshillë: Udhëzoni AI-në të "Ndërtoni mbi kontratat e audituara të OpenZeppelin, të rishkruajë sigurinë nga e para". Është shumë më e rrezikshme për një AI të shkruajë kodin origjinal të sigurisë sesa të përdorë një bibliotekë të testuar.

Prompt i dobët / Prompt i fortë

Njoftim i dobët:

Më shkruaj një kontratë simbolike.

Kjo kërkesë është e rrezikshme: nuk është e qartë se cili standard, cili zinxhir, cili bibliotekë, cilin kërkesë sigurie. AI gjeneron kod të rastësishëm, ndoshta të vjetëruar ose të pasigurt.

Njoftim i fuqishëm:

Roli juaj: zhvillues i lartë i Solidity. Gjeneroni një draft token ERC-20 për një zinxhir të pajtueshëm me EVM. Rregullat:- Bazuar në kontratat ERC20 dhe Ownable të audituara të OpenZeppelin.- Shkruani në mënyrë eksplicite versionin e Solidity dhe licencën (SPDX).- Vetëm pronari ka leje për të prerë; shtoni një kapak kundër shtypjes së pafund. - Shtoni komentin NatSpec për secilin funksion. - Shkruani sigurinë nga e para; Përdorni bllokun standard. - Shtoni një paralajmërim në fund: "Ky është një draft; kërkohet auditim dhe testim". Shënoni zonat për të cilat nuk jeni të sigurt me // TODO.

Dallimi: kërkesa e fortë jep rol të qartë, standard, bibliotekë, kufi të sigurisë, dokumentacion dhe pritshmëri të vlefshmërisë.

Katër shabllone të kopjueshëm

1) Skeleti i bazuar në standarde:

Roli juaj: Zhvilluesi i soliditetit. Gjeneroni kornizën e kontratës [ERC-20 / ERC-721 / staking] bazuar në bibliotekën e audituar të OpenZeppelin. Shkruani licencën SPDX dhe versionin pragma. Shtoni kontrollin e aksesit (kush mund të telefonojë) në çdo funksion të jashtëm. Rishpikja e sigurisë; Përdorni blloqe standarde. Ky është një draft.

2) Rishikimi i funksionit:

Ekzaminoni funksionin e mëposhtëm si një zhvillues i vjetër: çfarë bën ai, çfarë gjendjesh ndryshon, kush mund ta thërrasë? Shënoni gabimet e mundshme logjike dhe rreziqet e sigurisë si HIPOTEZË, duke e lidhur secilën me një rresht në kod. Mos thoni "i sigurt" drejtpërdrejt; thjesht rendisni pikat e vëmendjes.

3) Drafti i skenarit të testimit:

Propozoni raste testimi për këtë kontratë (mund të jetë një draft për Foundry/Hardhat). Konkretisht mbuloni rastet kufitare: hyrje zero, numër shumë i madh, telefonatë e paautorizuar, thirrje rihyrëse, fonde të pamjaftueshme. Shkruani ÇFARË konfirmon çdo test.

4) Rishikimi i gazit dhe lexueshmërisë:

Në këtë kontratë, shënoni modelet që mund të zvogëlojnë koston e gazit: shkrimi i panevojshëm i ruajtjes, thirrje e jashtme në lak, llogaritje të përsëritura. Shpjegoni ndryshimin para/pas në secilin sugjerim. Rekomandoni optimizime që thyejnë sigurinë; Nëse nuk është e qartë, thoni "pyet auditorin".

Tre mini kuti (në numër)

Rasti 1 - Skeleti kurseu 4 orë. Një ekip nxori në 30 minuta skeletin e një kontrate sigurimi të audituar të bazuar në bibliotekë me AI; U deshën ~ 4 orë me dorë. Ekipi i kushtoi kohë sigurisë dhe testimit. Fitimi nuk erdhi nga transferimi i sigurisë, por nga përshpejtimi i kornizës së lodhshme.

Rasti 2 - Kurthi i versionit të vjetëruar. AI prodhoi një model që dërgon Eter të papërpunuar me transferim, i cili nuk rekomandohet më sepse të dhënat e trajnimit janë të vjetruara. Zhvilluesi e vuri re këtë dhe e ndryshoi atë në modelin aktual të bazuar në thirrje dhe të mbrojtur nga rihyrja. Mësimi: Biblioteka/modeli i AI konfirmohet gjithmonë se është i përditësuar; AI nuk e di përtej datës së ndërprerjes së trajnimit.

Rasti 3 - Provoni draftin e shfaqur një gabim të fshehur. Testi i "thirrësit të paautorizuar" që prodhoi AI zbuloi se zhvilluesi kishte harruar kontrollin e aksesit në një funksion. vetëm pronarit i mungon 1 rresht, kapet në 5 minuta në testnet; Mund të ketë pasur një humbje fondesh në rrjetin kryesor. Mësimi: AI mbulon pikën e verbër të njeriut në testim.

Kujtimi i modeleve të sigurisë me AI

Inteligjenca artificiale është e mirë t'ju kujtojë modelet e njohura të cenueshmërisë si një listë kontrolli. Modelet më të zakonshme:

  • Rihyrja: Kryerja e një telefonate të jashtme pa përditësuar statusin. Zgjidhja: urdhri i kontrolleve-efekteve-ndërveprimeve, roje e rihyrjes.
  • Mungesa e kontrollit të aksesit: Çdokush mund të thërrasë funksionin kritik.
  • Mbingarkesa/nënvlerësimi i numrave të plotë: Modern Solidity kap shumicën e tyre, por ende një rrezik në kodin e nivelit të ulët.
  • Vleresim joadekuat i hyrjes: Adresa zero, kontrolli i sasise zero.
  • Varësia nga Oracle: Besim i verbër në të dhënat e jashtme (siç është çmimi).
Kujdes: AI mund ta kujtojë këtë listë, por nuk mund të garantojë nëse një artikull në listë është në kodin tuaj specifik. Lista e kontrollit është një fillim; Nuk është një zëvendësim për kontrollin e kontejnerëve.

Marrja e duhur e kontekstit: Sekreti i kodit të mirë nga AI

Cilësia e kodit që prodhon AI varet drejtpërdrejt nga cilësia e kontekstit që i jepni. Në Web3 kjo është veçanërisht kritike sepse një detaj i vogël (cili zinxhir, cili version Solidity, cili standard simbol) ndryshon të gjithë daljen. Një kontekst i mirë përfshin:

  • Zinxhiri i synuar dhe mjedisi: rrjeti kryesor i Ethereum apo një shtresë 2 (zinxhiri anësor më i lirë që shkon në krye të zinxhirit kryesor)? Kostoja e gazit dhe disa veçori ndryshojnë sipas zinxhirit.
  • Versioni dhe biblioteka: Cili version Solidity, cili version OpenZeppelin? Nëse nuk specifikohet asnjë version, AI mund të prodhojë modele të vjetruara dhe të vjetruara.
  • Kërkesat e sigurisë: A ka një kapak, a mund të ndërpritet, a mund të rritet? Këto duhen thënë që në fillim.
  • Kufizimet: Pastroni kufijtë si "mos përdorni montim", "shmangni thirrjen e jashtme", "optimizoni gazin, por ruani lexueshmërinë".

Një teknikë tjetër e fuqishme është të pyesni AI për planin fillimisht, pastaj kodin: "Së pari listoni funksionet e kësaj kontrate dhe çfarë do të bëjë secila; shkruani kodin sapo ta miratoj". Kjo e kap herët AI që shkon në drejtimin e gabuar dhe ju lejon të mbani vendimin arkitektonik.

Këshillë: Pyete AI "pse e ke shkruar këtë kod kështu?" pyesni. Shpjegimi i arsyetimit do të përshpejtojë mësimin tuaj dhe do të nxjerrë në sipërfaqe çdo gabim logjik (p.sh. një supozim i rremë i sigurisë). Mos i besoni daljes së një AI që nuk mund të mbrojë kodin e vet.

Gabimet e zakonshme

  • Vendosja e sigurisë në AI nga e para. Përdorni një bibliotekë të testuar.
  • Nuk konfirmon versionin/modelin e prodhuar nga AI. Të dhënat e trajnimit mund të jenë të vjetra.
  • Duke anashkaluar rrjetin testues. Çdo draft duhet të ekzekutohet në rrjetin e testimit përpara se të shfaqet drejtpërdrejt.
  • Nuk shtohet NatSpec/dokumentacioni. Inspektimi dhe mirëmbajtja bëhen të vështira.
  • Keqkuptimi "Është i përpiluar, kështu që është i sigurt". Të jesh i përpiluar nuk do të thotë të jesh i sigurt.
  • Duke harruar kontrollin e aksesit. Është një nga gabimet më të zakonshme dhe më të shtrenjta.

Në përmbledhje

  • Në shkrimin e kontratave inteligjente, AI prodhon korniza, teste dhe rishikime drafte; Human garanton sigurinë e prodhimit.
  • Ndërtoni sigurinë jo nga e para, por bazuar në bibliotekat e provuara (p.sh. OpenZeppelin).
  • Përditësimi i versioneve dhe modeleve të prodhuara nga YZ konfirmohet gjithmonë.
  • Stufat e testimit janë të vlefshëm në kapjen e pikave të verbëra të njeriut (rastet kufitare, kontrolli i aksesit).
  • Të jesh i përpiluar nuk do të thotë të jesh i sigurt; testnet dhe auditimi janë një domosdoshmëri.

Detyra e aplikimit

Për një shenjë të thjeshtë ERC-20, gjeneroni një draft duke përdorur kërkesën "skeleti i bazuar në standarde" më sipër. Më pas: (1) kontrolloni nëse përdor një bibliotekë të kontrolluar, (2) kontrolloni kontrollet e aksesit, (3) gjeneroni teste me kërkesën "projekt i rastit të testimit" dhe në të vërtetë kryeni të paktën një provë mashtruese. Gjeni dhe shënoni të paktën një pikë sigurie që AI humbi.

listë kontrolli

  • [ ] Unë kam deklaruar qartë standardin dhe zinxhirin në prompt.
  • [ ] Doja prodhim të provuar të bazuar në bibliotekë.
  • [ ] Licenca SPDX dhe versioni pragma disponohen.
  • [ ] Ekziston kontrolli i aksesit në çdo funksion kritik.
  • [ ] Kam krijuar dhe drejtuar teste për rastet limit.
  • [ ] Konfirmova që biblioteka/modeli është i përditësuar.
  • [ ] Kam shënuar kodin për auditim dhe testim; Nuk e mora pa mbikëqyrje në rrjetin kryesor.