
Sissejuhatus
Blockchaini arendajate kogukond on juba pikka aega vajanud võimsaid lähenemisviise nutikate lepingute turvalisuse ja terviklikkuse tagamiseks.
## Sissejuhatus ja kokkuvõte
See uus formaalne verifitseerimissüsteem muudab arendajate võimalusi oma Solidity nutikate lepingute õigsuse kindlakstegemiseks. See on paindlikum kui teised tavapärased automatiseeritud teoreemide tõestamise meetodid, kuna on inimese poolt programmeeritavam, kuid pakub ka varasemast suuremat paindlikkust õigsuse omaduste väljendamisel ja demonstreerimisel.
See annab arendajatele lihtsama lähtepositsiooni tõendite loomiseks, et spetsifikatsioonid tulenevad abstraktsest esitusest.
Raamistiku tutvustus
Raamistik koondab Yul-i nutilepingute õigsuse arvutiga kontrollitavad tõendid Lean proving assistant alamkeelde ning suudab koondada spetsifikatsioonid, et neid EVM-is testidega vastavuses täita, et kontrollida mudeli õigsust.
See kasutab ära Lean-ökosüsteemi rikkalikud matemaatilised raamatukogud ja tõestamise automatiseerimise, mistõttu on sellel meetodil rohkem käsitsi sekkumist kui teistel tuntud automatiseerimismeetoditel, kuid iga paberile kirjutatav korrektsuse argument on arvutiga tõestatav.
Raamistik kasutab tõhusaid matemaatilise formaliseerimise raamatukogusid ja valdkonnaspetsiifilisi automatiseerimisvõimalusi. Siiski, nagu paljud matemaatilised põhiteoreemid näitavad, on alati olemas väited, mida ei ole võimalik tõestada üheski piisavalt võimsa süsteemiga.
See võimalus peaks avama ukse keeruliste nutilepingute õigsuse omaduste kontrollimiseks. Raamistik sobib eriti hästi oma tugevuste illustreerimiseks, kontrollides detraliseeritud finantstarkvara rakendustes ja ahelas kasutatavate nullteadmiste kontrollijate numbriliste lähendusalgoritmide keerukaid omadusi.
Tehniline arhitektuur ja funktsioonid
Usalduse aluse täieliku tagamise hõlbustamiseks on raamistikku toetatud toetusrahastamisega, et testida semantiikat Ethereumi vastavustestide komplektide abil ja laiendada mudelit Ethereumi uusimate uuenduskavade suunas. See täiustatud mudel avaldatakse avaliku hüvena.
Raamistik sisaldab verifitseerimistingimuste generaatorit, mis suudab Yul-programme Lean-tõestusassistenti ekstraheerida. See mitte ainult jagab programmid kergesti mõistetavateks plokkideks, vaid genereerib ka nende plokkide semantikast lihtsustatud kirjeldused.
Raamistik toetab ka tõestuste kirjutamist, pakkudes teoreemide raamatukogu ja automatiseerimistööriistu. Tõestusi saab seejärel kontrollida LeanCompileri abil, mille tõestuste kontrollimise tuum on veidi väiksem, kuid mida peetakse praegu veavabaks selles mõttes, et see aktsepteerib valeväidete tõestusi.
Sellise lähenemise eeliseks on see, et see võimaldab kirjutada mis tahes omadust, mida on võimalik kirjalikult vormiliselt kirjutada ja tõestada, ning kontrollida seda LeanCompileriga, millel on suhteliselt väike tõestuskontrolli tuum ja mis praegu peetakse veavabaks selles mõttes, et see aktsepteerib valeväidete tõestusi. Selline paindlikkus on tugevam kui enamikul automatiseeritud meetoditel, mis on piiratud meetodite sisseehitatud järeldamisvõimega.
Kompositsionaalsus ja abstraktsioon
Kompositsionaalsus ja abstraktsioon tähendavad, et tõestatud koodikomponendid säilivad uutes olukordades. See võimaldab asendada suure osa keerulisest koodist lihtsate tegevuste kirjeldustega.
See toetab isegi koodi rakenduste turvalist asendamist alternatiivsete, kuid semantiliselt samaväärsete rakendustega, näiteks algoritmide optimeerimist ja korrektsuse tagamise säilitamist.
Raamistik pakub laiendatavat kontrollitud automatiseerimist kohandatud protseduuride abil, mis annavad alussüsteemi poolt kinnitatud tõendid. See vähendab oluliselt käsitsitööd ja tagab kontrolli garantii säilimise.
Süsteemi komponendid ja töövoog
Raamistikul on kolm põhikomponenti, mis koos pakuvad ulatuslikku kontrollivõimet:
- •Yul EVM dialekti mudel, mis selgitab Yul-koodi semantiikat tõestusabistaja keskkonnas. See annab programmide käitumise põhjendamisele selle aluseks oleva semantiika.
- •Kohandatud taktika ja teoreemide kogumik, mis on spetsiaalselt loodud Yul-programmide kohta tõestuste kirjutamise hõlbustamiseks. Need tööriistad töötlevad tavalisi mustreid ja operatsioone, mis esinevad sageli nutikate lepingute kontrollimisel
- •Verifitseerimistingimuste generaator loob kõrgetasemelise struktuuriga tõendite mallid ja toodab automaatselt tõendeid, mis lihtsustavad Yul-programme kanonilisteks vormideks. Neid verifitseerimistingimusi ei määratleta enam Yul-keele terminites, vaid pigem ligipääsetavamal viisil.
Verifitseerimine on struktureeritud protsess. Kasutajad alustavad Yul-programmiga ja kompileerivad selle spetsiaalsete kompilaatori valikutega, et luua kood, mis vastab raamistiku struktuurilistele eeldustele. See kood töödeldakse seejärel verifitseerimistingimuste generaatoriga, et luua vajalik tõendite infrastruktuur.
Alustage oma nutilepingute kontrollimist juba täna
Muutke oma Solidity arendust formaalse verifitseerimisega. Alustage kohe.
Lepingute koostamise nõuded
Raamistik eeldab Yul-koodide teatud struktuuri.
Praktiline rakendamine: korrutamisfunktsioon
Korrutamisfunktsiooni rakendamiseks tuleb järgida järgmisi struktuurilisi nõudeid, kompileerides järgmise koodi spetsiifiliste kompilaatori lipukestega. See näide näitab, kuidas raamistik suudab hallata kasutaja kirjutatud funktsioone ja suvalisi kontrollvoo struktuure.
Korrutamisprotsessil on kaks sisendit ja see teostab korrutamise, lisades ühe väärtuse akumulaatorile nõutava arvu kordi.
Tingimuslikke katkestusi kasutatakse silmuste sees tavaliste silmuste tingimuste asemel, et demonstreerida raamistiku võimet töötada keerulise kontrollvoo stsenaariumiga.
Verifitseerimistingimuste genereerimise protsess
Programmi kontrollitingimuste genereerija käivitamine loob struktureeritud failihierarhia koos selle genereeritud failidega. Üldine struktuur koosneb järgmistest osadest:
- •Genereeritud failid vastavalt igale Yul-failile ja lepingule
- •Muud tavalised alamkataloogid abstraktsete koodiblokkidega
Raamistik jagab programmid automaatselt üksusteks ja loob integratsiooniloogika, et tagada koostatud üksuste vastavus algupärasele programmile. Iga elementaarne koodiblokk loob kolm tüüpi faile, mis on kergesti mõistetavad, taaskasutatavad komponendid ning pakuvad paremat jõudlust ja skaleeritavust.
Yul-programmi kood ja raamistikupõhine põhjendus sisaldavad kontrollitingimusi ja tõendeid, et koodiploki käivitamine toob kaasa kontrollitingimuse, mis on esitatud loodud perekonna failides. Need failid ühendavad spetsifikatsiooni/vastavuse ja koodi täitmise ning kasutaja perekonna failidega tuleb olla eriti ettevaatlik, kuna need on raamistikupõhiselt loodud failid, mis sisaldavad kontrolliloogikat, mille kasutaja peab täitma.
Loogiliste lünkade täitmiseks peab süsteem andma tingimuslikud käitumisspetsifikatsioonid. Silmuste kontrolli semantikate väljendamiseks pakub süsteem utiliite, mis teevad rutiinseid operatsioone, nagu silmuse katkestamine ja muutujatele juurdepääs programmi olekutes.
Spetsifikatsioonid ei pea olema valed, kuid need võivad ebaõnnestuda kavandatud käitumise lihtsas kajastamises, kui need ei täpsusta olulisi punkte. Spetsifikatsiooniprobleemid on tavaliselt formaalse verifitseerimise kõige raskem osa, mõnikord isegi raskem kui tõendite tegelik kirjutamine.
Loop'i kontrolli ülesanded
Silmuseid on väga raske kontrollida kontrollisüsteemiga, mis on osaliselt tingitud induktiivsest mõtlemisest, mida selline süsteem sageli nõuab. Raamistik tegeleb sellega, andes silmuse komponentide süstemaatilised spetsifikatsioonid.
Kasutaja peab täpsustama:
- •Lõpetamise tingimused
- •Iteratsiooni järgne käitumine
- •Silmuse keha käitumine
- •Loop-invariandid üldiselt
Raamistik toetab lihtsate muutujate uuenduste tsükli semantikate kirjeldamist, et täpsustada tingimuslikku loogikat. Kuigi selline tehniline detail võib esmapilgul mitte väga läbipaistev tunduda, tagab see, et kõik täitmisvõimalused on kaetud.
Tõestuse koostamine ja automatiseerimine
Spetsifikatsioonide kehtestamisel peab kasutaja näitama, et kontrollitingimused suudavad spetsifikatsioonides sätestatud nõudeid tõendada. Raamistik pakub ulatuslikku automatiseerimist tüüpiliste tõendite töötlemiseks.
Kohandatud taktikaid kasutatakse järgmiste toimingute töötlemiseks:
- •Salvesta manipuleerimised muutujatesse
- •Kontrollvoo põhjendamine
- •Muud tavalised kontrolliprobleemid
Need automatiseeritud meetodid vähendavad oluliselt tõendite tegemiseks vajalikku käsitsitööd, säilitades samas äärmiselt kõrge kontrollitaseme.
Tõestamisprotsess algab tavaliselt vastavate abstraktsioonide avamisega, kuna need tõestused on otseselt seotud kasutaja määratud omadustega. See rakendab raamistikku, et automatiseerida suur hulk kontrollitingimusi üldotstarbeliste puhastustaktikatega, mida kasutatakse tehniliste detailide, nagu muutujate salvestamise operatsioonide ja oleku üleminekute haldamiseks.
Täiustatud funktsioonid ja tulevane areng
Raamistik on keerukas vahend, mille abil saab mis tahes Yul-programmi muuta programmi eeldatava toimimise kirjelduste kogumiks ja tõestada, et kood vastab ootustele. Programmid tõlgitakse esmalt abstraktse esitusviisiga järjepidevuse tõestustega programmideks, mis annavad lihtsustatud lähtepunktid edasiste spetsifikatsioonide tõestamiseks.
Yul-programmi mõtlemise mustrid, nagu muutujate salvestamise operatsioonid, käsitletakse kohandatud automatiseerimisprotseduuridega.
Edasiarendus
Edasiarendamine sisaldab mitmeid märkimisväärseid parandusi:
- •Usaldusväärne hash-mudel omab õiget krüptograafilise operatsiooni semantiikat
- •Ristlepinguliste kõnede modelleerimine võimaldab järeldada keeruliste suhtlusmustrite kohta
- •Semantilist täpsust kontrollitakse gaasimodelleerimise abil, võttes arvesse täitmiskulusid
- •Ethereumi uuenduste plaanide viimaste muudatuste järgimine tagab ühilduvuse olemasoleva võrgustiku toimimisega
- •Kasutuskogemuse parandamine võimaldab kasutajatel muuta igapäevane kasutamine tõhusamaks ja kasutajasõbralikumaks
Edasist tööd võib teha, et eraldada spetsifikatsioonidest Ethereumi täitmise kliendid ja luua ametlikult kinnitatud Yul-EVM-baitkoodi kompilaatorid.
Integreerimine matemaatiliste raamatukogudega
Raamistik tugineb oma aluseks olevas tõestussüsteemis laiale valikule matemaatika- ja infotehnoloogia raamatukogudele. Need raamatukogud pakuvad formaalseid kontseptsioone, mis esinevad sageli programmide kohta arutlemisel, lihtsustades oluliselt keeruliste tõestuste tegemist.
Kohandatud taktika põhineb tugeval metaprogrammeerimiskeskkonnal, ilma et see mõjutaks kontrolli. Automaatika komponeeritavus, mis tugineb täheldatud kasutusmustritele, tagab, et kasutatavus paraneb aja jooksul.
Arhitektuur, mis kodeerib Yuli otse tõestuskeskkonnas, muudab liidese läbipaistvaks ja loomulikuks arendajatele, kes on keelega harjunud, ning pakub automatiseeritud kontrollimisel varem nägemata võimalusi, et tagada koodi õigsus.


