Eining 2 / 11

Stuðningur við snjöll samningsritun: Solidity/Vyper Draft og Secure Code Generation

Hagnaður:

  • Hæfni til að nota gervigreind til að búa til ramma, prófanir og endurskoða drög byggðar á sannreyndum bókasöfnum (t.d. OpenZeppelin) og skilja að menn tryggja framleiðsluöryggi
  • Geta til að sannreyna kóðaútgáfu, mynstur og aðgangsstýringu framleidd af gervigreind með samantekt, prófun og testneti
  • Að geta greint þá samantekt þýðir ekki að vera örugg og að prófnet og endurskoðun séu nauðsynleg.

Að skrifa snjallsamning er frábrugðið venjulegum hugbúnaði: kóðinn sem þú skrifar er opinber, óbreytanlegur og forrit sem flytur peninga beint. Í þessari einingu muntu læra hvernig á að nota gervigreind sem snjallsamningsþróunaraðstoðarmann; Við munum læra frá drögum að framleiðslu til prófunarskrifa, frá munsturinnköllun til hagræðingar á gasi (viðskiptagjaldi). En við skulum hafa það á hreinu frá upphafi: gervigreind framleiðir teikningar; Menn tryggja öruggan kóða sem fer í framleiðslu.

Jarðvegur fyrst: tungumál og umhverfi

Algengasta snjallsamningamálið er Solidity (tungumál Ethereum og EVM - Ethereum Virtual Machine, sýndarvélin sem samningar keyra á - samhæfðar keðjur). Valkosturinn er Vyper (python-líkt tungumál sem miðar að því að vera takmarkaðra og læsilegra). Kóðinn þinn eyðir gasi (kostnaður við hverja færslu í blockchain); Óhagkvæmur kóði er dýr. Að halda þessum hugtökum á hreinu í samhengi sem þú gefur gervigreindinni er lykillinn að því að fá nákvæma framleiðslu.

Þar sem gervigreind er verðmætust er ekki í því að „skrifa frá grunni“ heldur í að búa til ramma + gott mót: byrjun sem samræmist stöðlum, teikning til að bæta við sérfræðiþekkingu þinni.

Lög af notkun AI í kóðun

1. Búa til beinagrindur. AI vinnur fljótt beinagrind staðlaðs tákns (ERC-20) eða NFT (ERC-721 — einstakur stafrænn eignastaðall). En vertu viss um að láta gervigreindina nota sannað bókasafn: til dæmis OpenZeppelin (traust, endurskoðað staðlað samningabókasafn samfélagsins). Reglan er að nota prófuðu blokkina frekar en að skrifa öryggi frá grunni.

2. Starfslýsing og yfirferð. Að útskýra núverandi aðgerð fyrir gervigreind gerir þér kleift að koma auga á rökfræðivillur snemma.

3. Próf kynslóð. Gervigreind er góð í að búa til próftilvik fyrir jaðartilvik: núll inntak, mjög stór tala, óviðkomandi hringir, endurtekið símtal. Þetta minnir mann á atburðarásina sem maður sleppir.

4. Gas og læsileiki. Gervigreind flaggar dýr mynstur eins og óþarfa geymsluskrif og bendir á valkosti.

Ábending: Leiðbeina gervigreindinni að "Byggja á endurskoðuðum samningum OpenZeppelin, endurskrifa öryggi frá grunni." Það er miklu áhættusamara fyrir gervigreind að skrifa upprunalegan öryggiskóða en að nota prófað bókasafn.

Veik kvaðning / Sterk kvaðning

Veik kvaðning:

Skrifaðu mér táknrænan samning.

Þessi hvetja er hættuleg: það er ekki ljóst hvaða staðall, hvaða keðja, hvaða bókasafn, hvaða öryggiskröfur. Gervigreindin býr til handahófskenndan, hugsanlega úreltan eða óöruggan kóða.

Öflug tilvitnun:

Þitt hlutverk: eldri Solidity verktaki. Búðu til ERC-20 tákndrög fyrir EVM samhæfða keðju. Reglur:- Byggt á endurskoðuðum ERC20 og Ownable samningum OpenZeppelin.- Skrifaðu Solidity útgáfuna og leyfislínuna (SPDX) beinlínis.- Aðeins eigandinn hefur leyfi til að slá; bæta við loki gegn endalausri pressu. - Bættu NatSpec athugasemd við hverja aðgerð. - Skrifaðu öryggi frá grunni; Notaðu venjulega blokkina. - Bættu við viðvörun í lokin: "Þetta eru drög; endurskoðun og prófun er nauðsynleg". Merktu svæðin sem þú ert ekki viss um með // TODO.

Mismunur: sterk hvetja gefur skýrar væntingar um hlutverk, staðal, bókasafn, öryggismörk, skjöl og staðfestingu.

Fjögur afritanleg sniðmát

1) Staðlabyggð beinagrind:

Þitt hlutverk: Solidity verktaki. Búðu til [ERC-20 / ERC-721 / staking] samningsramma byggða á OpenZeppelin endurskoðuðu bókasafni. Skrifaðu SPDX leyfi og pragma útgáfu. Bættu aðgangsstýringu (hver getur hringt) við hverja ytri aðgerð. Að finna upp öryggi að nýju; Notaðu venjulega kubba. Þetta er drög.

2) Aðgerðaskoðun:

Skoðaðu eftirfarandi aðgerð eins og eldri þróunaraðili: hvað gerir það, hvaða ástandi breytir það, hver getur kallað það? Merktu mögulegar rökvillur og öryggisáhættu sem TILGJÖGUN, tengdu hverja við línu í kóðanum. Ekki segja „öruggt“ beint; listaðu bara athyglispunkta.

3) Drög að atburðarás prófunar:

Leggðu til prófunartilvik fyrir þennan samning (gæti verið uppkast fyrir Foundry/Hardhat). Taka sérstaklega til takmörkunartilvika: núll inntak, mjög stórt númer, óviðkomandi símtal, símtal fyrir endurkomu, ófullnægjandi fjármunir. Skrifaðu HVAÐ hvert próf staðfestir.

4) Athugun á gasi og læsileika:

Í þessum samningi skaltu merkja mynstur sem geta dregið úr gaskostnaði: óþarfa geymsluskrif, ytra símtal í lykkju, endurtekinn útreikningur. Útskýrðu fyrir/eftir muninn á hverri tillögu. Mæli með hagræðingum sem brjóta öryggi; Ef það er ekki ljóst, segðu "spyrðu endurskoðanda".

Þrjú smáhylki (í tölum)

Tilfelli 1 - Beinagrind sparast 4 klukkustundir. Eitt lið anna beinagrind endurskoðaðs bókasafnsbundins ávinnslusamnings við gervigreind á 30 mínútum; Það tók ~4 klukkustundir handvirkt. Teymið helgaði tíma til öryggis og prófana. Ávinningurinn kom ekki af því að flytja öryggi, heldur af því að flýta fyrir leiðinlegri umgjörð.

Mál 2 — Úrelt útgáfa gildra. AI framleiddi mynstur sem sendir hrátt eter með flutningi, sem ekki er lengur mælt með vegna þess að þjálfunargögnin eru úrelt. Framkvæmdaraðilinn tók eftir þessu og breytti því í núverandi símtalstengda og endurkomuvarið mynstur. Lexía: Bókasafn/mynstur gervigreindar er alltaf staðfest að sé uppfært; AI veit ekki lengra en að lokadagsetningu þjálfunar.

Tilfelli 3 - Prófdrög birt falin galla. „Óviðkomandi hringir“ prófið sem gervigreindin framleiddi leiddi í ljós að verktaki hafði gleymt aðgangsstýringu í aðgerð. Aðeins eiganda vantar 1 línu, náðist á 5 mínútum á testneti; Það gæti hafa verið tap á fjármunum á meginnetinu. Lexía: gervigreind nær yfir blindan blett hjá mönnum í prófunum.

Muna öryggismynstur með gervigreind

Gervigreind er góð í að minna þig á þekkt varnarleysismynstur eins og gátlista. Algengustu mynstur:

  • Reentrancy: Hringt utanaðkomandi án þess að uppfæra stöðuna. Lausn: pöntun á tékka-áhrif-víxlverkun, vörður um endurkomu.
  • Skortur á aðgangsstýringu: Hver sem er getur hringt í mikilvægu aðgerðina.
  • Heiltala yfirflæði/undirfall: Modern Solidity grípur flest þeirra, en samt áhætta í lágstigi kóða.
  • Ófullnægjandi staðfesting á inntak: Núll heimilisfang, núll magnstýring.
  • Oracle háð: Blint traust á ytri gögnum (eins og verð).
Athugið: AI getur afturkallað þennan lista, en það getur ekki ábyrgst hvort hlutur á listanum sé í þínum sérstaka kóða. Gátlistinn er byrjun; Það kemur ekki í staðinn fyrir gámaeftirlit.

Að fá samhengið rétt: Leyndarmálið að góðum kóða frá gervigreind

Gæði kóðans sem gervigreind framleiðir fer beint eftir gæðum samhengisins sem þú gefur honum. Í Web3 er þetta sérstaklega mikilvægt vegna þess að eitt lítið smáatriði (hvaða keðja, hvaða Solidity útgáfa, hvaða táknstaðall) breytir öllu framleiðslunni. Gott samhengi felur í sér:

  • Markkeðja og umhverfi: Ethereum mainnet eða Layer 2 (ódýrari hliðarkeðja sem liggur ofan á mainchain)? Gaskostnaður og sumir eiginleikar eru mismunandi eftir keðju.
  • Útgáfa og bókasafn: Hvaða Solidity útgáfa, hvaða OpenZeppelin útgáfa? Ef engin útgáfa er tilgreind getur gervigreind framleitt úrelt, úrelt mynstur.
  • Öryggiskröfur: Er þak, er hægt að gera hlé á því, er hægt að auka það? Þetta ætti að segja frá upphafi.
  • Takmarkanir: Skýr takmörk eins og "ekki nota samsetningu", "forðastu utanaðkomandi símtal", "hagræða gas en viðhalda læsileika".

Önnur öflug tækni er að biðja gervigreindina um áætlunina fyrst, síðan kóðann: „Fyrstu lista yfir aðgerðir þessa samnings og hvað hver mun gera; skrifaðu kóðann þegar ég samþykki hann. Þetta fangar gervigreindina fara í ranga átt snemma og gerir þér kleift að halda byggingarfræðilegri ákvörðun.

Ábending: Spyrðu gervigreindina "af hverju skrifaðirðu þennan kóða svona?" spyrja. Að útskýra rökin mun bæði flýta fyrir námi þínu og koma upp á yfirborðið allar rökfræðilegar villur (t.d. rangar öryggisforsendur). Treystu ekki framleiðslu gervigreindar sem getur ekki varið eigin kóða.

Algeng mistök

  • Að setja öryggi í gervigreind frá grunni. Notaðu prófað bókasafn.
  • Staðfestir ekki útgáfuna/mynstrið framleitt af gervigreindinni. Þjálfunargögn geta verið gömul.
  • Framhjá prófneti. Sérhver drög ættu að keyra á prófunarnetinu áður en þau eru birt.
  • Ekki bæta við NatSpec/skjölum. Skoðun og viðhald verður erfitt.
  • "Það er tekið saman, svo það er öruggt" misskilningur. Að vera tekinn saman þýðir ekki að vera öruggur.
  • Að gleyma aðgangsstýringu. Það er ein algengasta og dýrasta mistökin.

Í stuttu máli

  • Í snjöllum samningsskrifum framleiðir gervigreind ramma, próf og endurskoðunardrög; Manneskjan tryggir framleiðsluöryggi.
  • Byggja upp öryggi ekki frá grunni heldur byggt á sannreyndum bókasöfnum (t.d. OpenZeppelin).
  • Uppfærð útgáfa og mynstrum sem YZ framleiðir er alltaf staðfest.
  • Prófunarstubbar eru dýrmætir til að fanga blinda bletti manna (takmörkunartilvik, aðgangsstýring).
  • Að vera tekinn saman þýðir ekki að vera öruggur; testnet og endurskoðun eru nauðsynleg.

Umsóknarverkefni

Fyrir einfaldan ERC-20 tákn skaltu búa til drög með því að nota „staðlabyggða beinagrind“ hvetjandi fyrir ofan. Síðan: (1) athugaðu hvort það notar athugað bókasafn, (2) athugaðu aðgangsstýringarnar, (3) búðu til próf með "test case draft" hvetjunni og keyrðu í raun að minnsta kosti eitt rogue-caler próf. Finndu og taktu eftir að minnsta kosti einum öryggispunkti sem gervigreindin missti af.

gátlisti

  • [ ] Ég hef tekið skýrt fram staðalinn og keðjuna í leiðbeiningunum.
  • [ ] Ég vildi sannaða framleiðslu á bókasafni.
  • [ ] SPDX leyfi og pragma útgáfa í boði.
  • [ ] Það er aðgangsstýring í öllum mikilvægum aðgerðum.
  • [ ] Ég bjó til og keyrði próf fyrir takmörkunartilvik.
  • [ ] Ég staðfesti að bókasafnið/mynstrið sé uppfært.
  • [ ] Ég merkti kóðann fyrir endurskoðun og prófun; Ég fékk það ekki án eftirlits á mainnet.