Be pilietybės ir valstybinės „blokinės grandinės“ sutartys. Kredito vaizdas David di Veroli Unsplash.

Valstybinės ir pilietybės neturinčios „Blockchain“ sutartys

Arba, kas negerai su „Ethereum“ sutartimis ir kaip tai gali pataisyti naujosios „Ardor“ lengvosios sutarties sutartys

Žr. Daugiau straipsnių apie lengvas sutartis

Norėdami suprasti, kaip sulaužytos galiojančios „Ethereum“ išmaniosios sutartys, pažvelkite į vieną iš paprasčiausių jų pavyzdžių, šiek tiek slinkite žemyn ir peržiūrėkite nekaltai atrodančias 30 kodo eilučių, vaizduojančių „MyToken“ sutarties pavyzdį.

Crowdfund jūsų idėja - „Ethereum Smart Contract“ pavyzdys

Tai yra pavyzdys, nuo kurio kiekvienas naujas intelektualiųjų sutarčių kūrėjas pradės tiesiai iš arklio burnos, ethereum.org.

Taigi, kas gali būti ne taip su tokiu nekenksmingu pavyzdžiu? Išskirkime sutarties vykdymą ir pabandykime išsiaiškinti problemas.

„Ethereum“ sutartys yra valstybinės

„Balanso masyvo“ eilutė Nr. 8 yra viso blogio motina (kompiuterių moksliškai kalbant). Šis masyvas palaiko sąskaitų, turinčių „MyToken“, likučius, programavimo žargonu mes šį balanso masyvą vadiname sutarties „būsena“, nes ši informacija yra palaikoma tarp sutarties kvietimų ir yra saugoma „blockchain“.

Klaidingas šis požiūris yra tai, kad tai yra derinimo problemų ir įvairių egzotinių išpuolių vektorių magnetas.

Pvz., Pažvelkite į 23 eilutėje esantį perkėlimo () metodą ir pagalvokite, kas nutiktų, jei perkėlimo būdas būtų panaudotas dviem skirtingais siūlais, abu atsiimdami visą to paties pranešimo siuntėjo likutį į kitą sąskaitą, kuri kiekviena veikia savo savo CPU tuo pačiu metu.

Jei viename procesoriuje sriegis praeina balanso patikrinimą 24 eilutėje, bet dar nepasiekė balanso išskaitymo eilutėje Nr. 26, o kita gija, veikianti kitame procesoriuje, tuo pačiu metu ragina perduoti iš to paties siuntėjo, abi gijos praeis. patikrinimas # 24 eilutėje, leidžiantis pranešimo siuntėjui du kartus išleisti savo žetonus, ty pervesti iki dvigubai daugiau jo turimo likučio.

Mes vadiname šią problemą lenktynių būkle ir bet kokia programa, palaikančia bendrą būklę, pavyzdžiui, balanso masyvo kenčia.

Tai reiškia, kad „Ethereum“ sutartys negali būti vykdomos lygiagrečiai. Todėl, net jei ant jūsų stalo yra vienas iš tų monstrų, jūsų sutartys vis tiek vykdomos tik viename iš procesorių, paliekant visą serverį nenaudojamą. Idealiu atveju to, ko mes norime, kai apdorojame visą sutarties kvietimo sandorių bloką, būtų vykdyti visas sutartis lygiagrečiai, tačiau tai neįmanoma dėl bendros būklės.

Bendra būsena sukelia kitų problemų, pavyzdžiui, ką daryti, jei tarp eilutės Nr. 26 ir Nr. 27 sutarties sudarytojas nusprendžia remtis išorės sutartimi? Ši išorinė sutartis gali sukelti išimtį paliekant siuntėją be jo likučio, net jei šis likutis dar nebuvo įskaitytas gavėjui.

Dar blogiau, kad toks išorinės sutarties kvietimas gali piktybiškai panaudoti perkėlimo būdą iš išorinės sutarties, siunčiant žetonus sau. Šis šaltinis klaidinančiai pavadina šią problemą „lenktynių būkle“, nors ji neturi nieko bendra su lygiagrečiai, ir apibūdina gerąją patirtį, kurios reikia laikytis norint išvengti šių problemų. Tačiau, kadangi sutartys tampa sudėtingesnės ir svarbiausios misijai, šią geriausią praktiką įgyvendinti tampa labai sunku.

Apibendrinant galima teigti, kad pasitikėjimas sutartimi, siekiant išsaugoti savo valstybę, yra bloga idėja, ji atveria keletą išpuolių platintojų ir manipuliavimo galimybių, taip pat sukelia nuolatinę riziką užrakinti lėšas sutartyje dėl sunkiai randamų klaidų.

„Ardor“ lengvas kontraktas su gelbėjimu

„Ardor“, pagrįstas NXT technologija, jau turi keletą būdų, kaip saugiai išsaugoti būseną „blockchain“, naudodamas subjektus, tokius kaip pranešimai, paskyros ypatybes, slapyvardžius, debesų duomenis, įvairius žetonų tipus ir dar daugiau. Visi šie subjektai yra integruoti į pagrindinę grandininę grandinę naudojant jų pačių operacijas ir API.

Remdamiesi šiuo esamu funkcionalumu, mes sukūrėme mūsų lengvas sutartis be pilietybės. Reiškia, kad pati sutartis niekada neišsaugos tokios būsenos kaip balanso masyvas. Vietoj to, visos sutartyje reikalaujamos valstybės modifikacijos yra pateikiamos kaip įprastos operacijos, kurios, priėmus „blockchain“, pakeis kai kuriuos aukščiau išvardytus subjektus, kad būtų išsaugota informacija „blockchain“. Vėliau, kai ta pati ar kita lengva sutartis reikalauja tam tikros valstybės informacijos, pavyzdžiui, žetono likučio ar sąskaitos KYC informacijos, ji naudos vieną iš viešųjų API, norėdama pateikti užklausą iš „blockchain“.

Tiesioginis 1: 1 lengvosios sutarties, panašios į aukščiau pateiktą „Ethereum“ sutartį, pavyzdys nėra įmanomas, nes „Ardor“ viskas, ko jums reikia norint pakeisti žetono likutį, yra „TransferAsset“ API, todėl panagrinėkime kitą pavyzdį, kad pamatytume, kaip tai veikia.

Šis supaprastintas „Hello World“ pavyzdys (kuris taip pat apima 30 kodo eilučių) parodo, kaip lengva „Ardor“ sutartis gali pakeisti „blockchain“ būseną, siųsdama pranešimo operaciją, neišsaugodama jokios vidinės būsenos.

Kadangi „HelloWorld“ sutartyje nėra saugomų bendrų duomenų, akivaizdu, kad daugelis „HelloWorld“ sutarties egzempliorių gali būti vykdomi lygiagrečiai, nesukeliant jokių su lygiagrečiai susijusių problemų ar „Ethereum“ panašių lenktynių sąlygų.

Bet kurias pagal sutartį pateiktas operacijas vykdys „blockchain“, įmontuota lenktynių sąlygų prevencijai, tokiu būdu neperkraunant atsakomybės už šios sunkios problemos perdavimą iš sutarties kūrėjų pagrindiniams „blockchain“ kūrėjams.

Kadangi lengvas sutartis vykdo vienas mazgas, o ne visi mazgai, nėra jokios rizikos užtvindyti „blockchain“ dublikatų pranešimų siuntimo operacijomis. Kaip matote, sutartis yra pagrįsta, ji šiek tiek apdoroja, pateikia tam tikras operacijas ir pasitraukia. Kitas sutarties sudarymas nėra pagrįstas jokiais duomenimis, išsaugotais pačioje sutartyje, todėl gali būti vykdomas lygiagrečiai.

Mes tikime, kad „Ardor“ požiūris į sutarčių vykdymą be pilietybės pasirodys saugesnis ir labiau keičiamas, palyginti su kitais teigiamais požiūriais.