Kodakondsuseta ja riiklikud blokeeringute lepingud. Krediidipilt David di Veroli Unsplash.

Riigivabad vs kodakondsuseta plokiahela lepingud

Või mis on Ethereumi lepingutel viga ja kuidas uued Ardori kerglepingud seda parandada saavad

Vaadake rohkem kerglepinguid käsitlevaid artikleid

Et mõista, kui katkised on olemasolevad Ethereumi nutilepingud, vaadake ühte nende lihtsamat näidet, kerige natuke allapoole ja vaadake üle süütu välimusega 30 koodirida, mis esindavad MyTokeni lepingunäidet.

Crowdfund teie idee - Ethereumi nutika lepingu näide

See on omamoodi näide, kust iga uus nutika lepingu arendaja alustab, otse hobuse suust, edastab ethereum.org.

Mis saab sellises kahjutu välimusega näites nii viga olla? Lõikame lahti lepingu toimimise ja proovime tuvastada probleemid.

Ethereumi lepingud on riiklikud

Massiivi real # 8 olev tasakaal on kogu kurjuse ema (arvutiteadlikult öeldes). See massiiv hoiab MyTokenit omavate kontode saldosid, kõnepruugi programmeerimisel nimetame seda saldo massiivi lepingu olekuks, kuna seda teavet hoitakse lepingu sisselogimise vahel ja see salvestatakse plokiahelas.

Selle lähenemisviisi puhul on viga ainult selles, et see on magnet samaaegsusprobleemide ja mitmesuguste eksootiliste rünnakute vektorite jaoks.

Näiteks vaadake ülekande () meetodit real # 23 ja mõelge, mis juhtuks, kui ülekandemeetodile viidaks kahe erineva lõime abil, mis mõlemad eemaldavad sama sõnumi saatja kogu saldo teisele kontole, kumbki töötab oma kontol samal ajal oma protsessor.

Kui ühel protsessoril läbib niit rea 24 saldokontrolli, kuid ei jõudnud veel rea nr 26 saldo mahaarvamiseni, samal ajal kui mõni teine ​​protsessor, mis töötab teisel protsessoril, kutsub ülekannet samalt saatjalt korraga, läbivad mõlemad niidid tšeki nr 24 kontroll, mis võimaldab sõnumi saatjal kaks korda kulutada oma märgid, st ületada oma saadaoleva saldo kuni kaks korda.

Me nimetame seda probleemi võistlustingimuseks ja iga programm, mis säilitab jagatud olekut, nagu näiteks tasakaalumassi massiiv kannatab selle all.

See tähendab, et Ethereumi lepinguid ei saa paralleelselt täita. Seetõttu, isegi kui teie töölaual on üks neist koletistest, täidavad teie lepingud endiselt ainult ühte protsessorit, jättes kogu serveri enamasti jõude. Ideaalis tahaksime lepingute kutsumise tehingutest koosneva ploki töötlemisel käivitada kõiki lepinguid paralleelselt, kuid jagatud oleku tõttu on see võimatu.

Jagatud olek põhjustab muid probleeme, näiteks mis juhtuks, kui ridade 26 ja 27 vahel otsustab lepingu arendaja tugineda välislepingule? See välisleping võib endast erandi jätta saatja ilma tema jäägita, ehkki seda saldo ei olnud saajale veel krediteeritud.

Veelgi hullem, selline väline hankelepingu sõlmimine võib pahatahtlikult tugineda edastamise viisile väliste lepingute korral, mis žetoone endale edastavad. Järgmine ressurss nimetab seda probleemi eksitavalt „rassitingimuseks”, ehkki sellel pole mingit pistmist samaaegsusega, ning määratleb mõned parimad tavad, mida nende probleemide vältimiseks järgida. Kuna lepingud muutuvad keerukamaks ja missioonikriitiliseks, muutuvad need parimad tavad väga keeruliseks.

Kokkuvõtteks võib öelda, et lepingule oma riigi päästmiseks lootmine on halb idee, see avab mitmeid rünnakuvektoreid ja manipuleerimisvõimalusi ning põhjustab ka lepingus rahaliste vahendite lukustamise pidevat riski, kuna vigade leidmine on keeruline.

Ardor Kerglepinguid päästetöödeks

NXT-tehnoloogial põhineval Ardoril on juba mitu võimalust oleku turvaliseks salvestamiseks plokiahelas, kasutades üksusi nagu sõnumid, konto atribuudid, varjunimed, pilveandmed, erinevat tüüpi märgid ja palju muud. Kõik need üksused on sisseehitatud tuumiku plokiahelasse, kasutades oma tehingutüüpe ja API-sid.

Selle olemasoleva funktsionaalsuse põhjal kujundasime oma kerged lepingud kodakondsusetuks. See tähendab, et leping ise ei salvesta kunagi ühtegi riiki, näiteks tasakaalu massiivi. Selle asemel esitatakse kõik lepingus nõutavad olekumuudatused tavaliste tehingutena, mis on pärast plokiahelasse aktsepteerimist muutnud mõnda eespool loetletud üksust, et salvestada teave plokiahelasse. Hiljem, kui sama või teine ​​kerge leping nõuab teatud olekuteavet, näiteks sümboolikat või konto KYC-i teavet, kasutab ta seda plokkketist päringute tegemiseks ühte avalike API-dega.

Ülaltoodud Ethereumi lepinguga sarnase väikesemahulise lepingu otsene näide 1: 1 pole teostatav, kuna Ardoris vajatakse vaid sümboolika muutmiseks vaid TransferAsset API-d, nii et vaatame, kuidas see toimib, mõnda teist näidet.

See lihtsustatud Hello Worldi näide (mis hõlmab ka 30 koodirida) näitab, kuidas Ardori kerglepingu abil saab muuta plokiahela olekut, saates teateteate ilma sisemist olekut säilitamata.

Kuna HelloWorldi lepingus pole ühiskasutusse salvestatud andmeid, on ilmne, et paljud HelloWorldi lepingulised eksemplarid saavad paralleelselt täide minna, põhjustamata samaaegsusega seotud probleeme ega Ethereumi-suguseid võistlustingimusi.

Kõiki lepinguga esitatud tehinguid haldab võistlusolukorra ennetamiseks sisseehitatud plokkskeem, mis vabastab lepingu keerukate probleemide lahendamise vastutuse lepingu arendajatelt põhilistele plokiahelate arendajatele.

Kuna väikesemahulisi lepinguid täidab üks sõlme, mitte kõik sõlmed, pole ohtu, et plokiahelat üle ujutatakse duplikaattehingutega. Nagu näete, lepingut kutsutakse üles töötlema, esitama mõned tehingud ja lõpetama. Järgmine hankelepingu sõlmimine ei toetu lepingus endas salvestatud andmetele, nii et see võib toimuda paralleelselt.

Usume, et kodakondsuseta lähenemisviis lepingu täitmisele, mida Ardor kasutas, osutub muude riiklike lähenemisviisidega võrreldes turvalisemaks ja skaleeritavamaks.