Kuidas siluda Ethereumi nutikaid lepinguid

Tehingu silumine plokiahelas erineb traditsioonilise rakenduse silumisest c ++ või JavaScriptiga, kuna te ei käivita koodi reaalajas, selle asemel kaardistatakse ajaloolise tehingu täitmine siduskoodiga tehingu silumiseks.

Nutikas leping on kooditükk, mida käivitatakse blockchaini ülaosas, nutikatel lepingutel peab olema täpne tähendus. Nutika lepingu silumine analüüsib tehingut samm-sammult, kuidas sisemiselt töötavad ja toimivad või kus tegelik tehing on ebaõnnestunud.

Võimaldab tehingu silumiseks kõigepealt üksikasjalikult arutada soliidsusvea tüüpe.

Kindluse veatüübid -

1. Süntaksiviga

Süntaksiviga ilmneb siis, kui nutika lepingukoodi süntaksis on probleem, kui teie koodirikke korral süntaksivigaga ei saa nutikas leping teie blokeeritud ketti koostada ega juurutada.

Süntaksivigu saab remiksi abil hõlpsalt diagnoosida, nagu näete allolevalt pildilt, kui semikoolon (;) eemaldatakse Remmix IDE-st ülaltoodud koodist, kuvatakse see tõrketeade koos süntaksivea lahendusega.

Süntaksivigu saab hõlpsasti diagnoosida trühvli, remiksi või mis tahes IDE abil.

2. Käitusaja viga

Käitusaja vead tekivad ainult siis, kui olete blokeeringu jaoks kasutusele võtnud nutika lepingu ja teie soliidsuskood on kompileeritud EVM-i (Ethereumi virtuaalmasin) arusaadavaks baidikoodiks. EVM on määratletud kui Ethereumi komponent, mis käitab kindluskoodi ja käitusaja viga ilmneb siis, kui EVM arvab, et teete oma nutika lepingukoodiga midagi valesti või teete tehingut koodi loogika alusel.

Käitusaja vigu on keerulisem diagnoosida kui süntaksiviga, kuna neid vigu ei tuvastata enne blockchaini juurutamist, need võivad ilmneda alles siis, kui olekumuudatus toimub nutilises lepingus, arutame lähemalt käitusaja vigade ja käitusaja vigade silumise kohta üksikasjad.

3. Loogikavead

Loogikavigu ei saa siluda ühegi IDE ega tööriista abil, kuna loogikavigu EVM ei hõiva, vastavalt EVM-ile on kõik täiuslik ja koodi saab hõlpsalt käitada. loogikaviga tekib siis, kui arendaja teeb vea ja avab ründajate nutilises lepingus avad.

Loogikavea näide: Kuulus DAO-rünnak (reentrantsus) on näide loogikaveast, kus arendaja tegi vea ja edastas eetri enne kasutaja saldo värskendamist.

Loogilisi vigu saab tuvastada nutika lepingu auditeerimise kaudu, sest mõnikord läheb arendaja mõtteviisi kohaselt kõik hästi ja arukates lepingutes ei pruugi viga olla, kuid audiitor saab aruka lepingu sõlmida eesmärgiga leida ahelaid, kontrollida äriloogikat ja leida nutikaid lepinguid puudusi turvalisusest.

Nutika lepingu loogika kontrollimiseks võib kasutada ametlikku verifitseerimist.

Käitusaja veatüübid

Gaasist väljas

Gaasiväline tõrge ilmneb siis, kui te ei anna tehingu tegemiseks piisavalt gaasi või kui gaasist ei piisa tehingu lõpuleviimiseks.

Ennista

Tehingu tagasivõtmine toimub siis, kui proovite teostada tehingut, mida ei saa nutika lepingu loogika kohaselt täita, seega tagastab EVM vea ja tehing tühistatakse.

Vale kood

Vale kood on siis, kui proovite helistada koodile, mida pole olemas.

kehtetu hüpe

Kehtetu hüpe toimub siis, kui proovite helistada funktsioonile, mida pole olemas, näiteks kui helistate mõnele lepingule, mida ei eksisteeri, siis toimub kehtetu hüpe. Seda tüüpi tõrked tekivad ka siis, kui kasutate montaažikeelt ja osutate valele mälule.

Virna ülevool

Virna ületäitumine toimub siis, kui proovite funktsiooni rekursiivselt helistada ja selle peatamiseks pole ühtegi tingimust. Kindel virn võib olla maksimaalselt 1024 kaadrit, nii et funktsioon võib ennast kutsuda ainult 1024x korda, kui ületad selle virna, toimub ületäitumine.

Virna alavool

Virna alavool ilmneb montaažikeeles, kui proovite poputada muutujat, mida pole olemas.

Nutika lepingukoodi näidis, mida kasutatakse igat tüüpi vigade ja tehingute silumisel.

pragma tahkus 0,4,24;
lepingu näidis {
   uint256 avalik summaLõpp;
   aadress avalik summaOmanik;
  ehitaja (aadress _omanik) avalik makstav {
     nõuda (_omanik! = aadress (0));
     nõuda (msg.väärtus> 0,1 eetrit);
     sumaInContract = msg.value;
     sumaOmanik = _omanik;
   }
 funktsioon () väline {
  tagasi pöörama ();
 }
funktsioon eemalda () avalik {
nõuda (msg.sender == summaOmanik);
msg.sender.transfer (aadress (see) .balanss);
}
}

Siluri abil saab võimaluse samm-sammult siluda mis tahes tehingut (loomist või kõnet) ja mälu / salvestusruumi visualiseerida. See aitab jälgida gaasi maksumust opoodkoodi ja pärast iga sammu järelejäänud gaasi hinda.

Tehingu silumine-

Ülaltoodud koodi korral tuleb tasuda vastavalt määratud konstruktorile, samas kui lepingulise konstruktori juurutamine eeldas, et eetri väärtus peaks olema suurem kui 0,1 eetrit. Kui saadetakse vähem kui 0,1 eetrit või kui aadress on null, viskab see vea ja tehing ennistatakse.

Nagu allpool näidatud, ennistatakse tehing, seega silume tehingut samm-sammult, kasutades remix IDE-d.

1. samm. Pärast juurutamistehingu edastamist Remixi abil Ethereumi plokiahelale ei õnnestu tehing ülaltoodud viisil. Nüüd vajutage tehingu silumiseks ja tehingu ebaõnnestumise võimaliku põhjuse väljaselgitamiseks IDE remiksimisse siluri nuppu.

2. samm. Silumise alustamiseks sisestage ploki number ja tehingu räsi ning vajutage silumisnupu nuppu - see käivitab silumisprotsessi.

Ülalkirjeldatud tehingu silumisel kuvatakse koostekeeletoimingud koos kasutatud gaasi ja järelejäänud gaasiga. Remix IDE-s rõhutatakse ka koodi, kui tegelik tehing nurjus paralleelselt opoodiga, nagu allpool näidatud.

Tehing tühistatakse kokkupaneku opoodis. Kood on esile tõstetud, kui tegelik tehing tagasi pöördus.

Nagu ülaltoodud pildil näidatud, kui tehing ennistatakse eetris, saadetakse väärtus 0,1 eetrit, mis on nõutavast väiksem; seetõttu ebaõnnestus tehing selle stsenaariumi korral.

Seda protsessi saab kasutada mis tahes tehingu silumiseks, et saada rohkem teavet kasutatud gaasi, igal etapil järelejäänud gaasi, oleku muutuste ja mälu / salvestusruumi kuvamiseks.

Nutikat lepingu silumist saab teha ka trühvlite raamistiku abil, tehingu silumiseks on vaja tehingu räsi.

Täname, et lugesite Vaadake ka meie varasemaid blogipostitusi.

QuillAudits on QuillHash Technologies välja töötatud turvaline arukas lepingute auditeerimise platvorm. See on täielikult automatiseeritud platvorm arukate lepingute kontrollimiseks, et kontrollida turvaaukude olemasolu selle parema käsitsi ülevaatamise ja automatiseeritud tööriistade kaudu. Teostame nii arukaid lepinguauditeid kui ka hõlvamisteste, et leida võimalikke turvaaukude võimalusi, mis võivad kahjustada platvormi terviklikkust.

Meie tööga kursis olemiseks liituge meie kogukonnaga: -

Telegram | Twitter | Facebook | LinkedIn