Uvod v pametne pogodbe

V tem članku si bomo ogledali, kaj so pametne pogodbe, kaj so, se seznanili z različnimi platformami pametnih pogodb, njihovimi značilnostmi ter razpravljali o tem, kako delujejo in kakšne prednosti lahko prinesejo. To gradivo bo zelo koristno za bralce, ki niso dobro seznanjeni s temo pametnih pogodb, vendar se želijo približati njenemu razumevanju.

Redna pogodba vs. pametna pogodba

Preden se poglobimo v podrobnosti, vzemimo primer razlik med navadno pogodbo, ki je navedena na papirju, in pametno pogodbo, ki je predstavljena digitalno.

Uvod v pametne pogodbe

Kako je to delovalo pred pojavom pametnih pogodb? Predstavljajte si skupino ljudi, ki želi vzpostaviti določena pravila in pogoje za distribucijo vrednosti, pa tudi določen mehanizem, ki zagotavlja izvajanje te distribucije v skladu z danimi pravili in pogoji. Nato so se zbrali, sestavili papir, na katerega so zapisali svoje identifikacijske podatke, izraze, vrednosti, ki jih zadeva, jih datirali in podpisali. To pogodbo je tudi overila zaupanja vredna oseba, na primer notar. Nadalje so ti ljudje šli v različne smeri s svojo papirnato kopijo takšne pogodbe in začeli izvajati nekatera dejanja, ki morda ne ustrezajo sami pogodbi, to pomeni, da so naredili eno stvar, na papirju pa je bilo potrjeno, da morajo nekaj narediti. popolnoma drugačen. In kako priti iz te situacije? Pravzaprav mora eden od članov skupine vzeti ta papir, vzeti nekaj dokazov, jih odnesti na sodišče in doseči skladnost med pogodbo in dejanskimi dejanji. Pogosto je težko doseči pošteno izvajanje te pogodbe, kar vodi do neprijetnih posledic.

Kaj lahko rečemo o pametnih pogodbah? Združujejo tako možnost pisanja pogodbenih pogojev kot mehanizem za njihovo dosledno izvajanje. Če so bili pogoji postavljeni in je bila ustrezna transakcija ali zahteva podpisana, potem ko je ta zahteva ali transakcija sprejeta, pogojev ni več mogoče spreminjati ali vplivati ​​na njihovo izvedbo.

Obstaja en validator ali celotno omrežje, kot tudi zbirka podatkov, ki hrani vse pametne pogodbe, ki so bile predložene v izvedbo v strogem kronološkem vrstnem redu. Pomembno je tudi, da mora ta baza vsebovati vse sprožilne pogoje za izvedbo pametne pogodbe. Poleg tega mora upoštevati samo vrednost, katere razdelitev je opisana v pogodbi. Če to velja za neko digitalno valuto, bi morala ta zbirka podatkov to upoštevati.

Z drugimi besedami, validatorji pametnih pogodb morajo imeti dostop do vseh podatkov, na podlagi katerih deluje pametna pogodba. Eno bazo podatkov je treba na primer uporabiti za istočasno obračunavanje digitalnih valut, uporabniških bilanc, uporabniških transakcij in časovnih žigov. Potem je pri pametni pogodbi pogoj lahko stanje uporabnika v določeni valuti, prihod določene ure ali dejstvo, da je bila določena transakcija izvedena, vendar nič več.

Opredelitev pametne pogodbe

Na splošno je samo terminologijo skoval raziskovalec Nick Szabo in jo prvič uporabil leta 1994, leta 1997 pa je bil dokumentiran v članku, ki opisuje samo idejo pametnih pogodb.

Pametne pogodbe pomenijo, da se izvaja določena avtomatizacija porazdelitve vrednosti, ki je lahko odvisna samo od tistih pogojev, ki so vnaprej določeni. V najpreprostejši obliki je videti kot pogodba s strogo določenimi pogoji, ki jo podpišejo določene stranke.

Pametne pogodbe so zasnovane tako, da zmanjšajo zaupanje v tretje osebe. Včasih je center odločanja, od katerega je vse odvisno, popolnoma izključen. Poleg tega je takšne pogodbe lažje revidirati. To je posledica nekaterih konstrukcijskih značilnosti takega sistema, vendar najpogosteje pod pametno pogodbo razumemo decentralizirano okolje in prisotnost funkcij, ki vsakomur omogočajo analizo baze podatkov in izvedbo popolne revizije izvajanja pogodb. S tem je zagotovljena zaščita pred retroaktivnimi spremembami podatkov, ki bi povzročile spremembe v samem izvajanju pogodbe. Digitalizacija večine procesov pri ustvarjanju in lansiranju pametne pogodbe pogosto poenostavi tehnologijo in stroške njihove implementacije.

Preprost primer - Deponirana storitev

Poglejmo zelo preprost primer. Pomagal vam bo približati se razumevanju funkcionalnosti pametnih pogodb in bolje razumeti, v katerih primerih jih je treba uporabiti.

Uvod v pametne pogodbe

Lahko se izvaja tudi z uporabo Bitcoina, čeprav trenutno Bitcoin še vedno težko imenujemo polnopravna platforma za pametne pogodbe. Torej, imamo nekega kupca in imamo spletno trgovino. Stranka želi kupiti monitor v tej trgovini. V najenostavnejšem primeru kupec izpolni in pošlje plačilo, spletna trgovina pa ga sprejme, potrdi in nato blago odpošlje. Vendar pa je v tej situaciji potrebno veliko zaupanje – kupec mora spletni trgovini zaupati celotno ceno monitorja. Ker ima lahko spletna trgovina v očeh kupca nizek ugled, obstaja tveganje, da bo trgovina iz nekega razloga po sprejetju plačila zavrnila storitev in kupcu ne bo poslala blaga. Zato se kupec vpraša (in temu primerno tudi spletna trgovina), kaj je v tem primeru mogoče uporabiti, da bi zmanjšali takšna tveganja in naredili takšne transakcije bolj zanesljive.

V primeru Bitcoina je možno omogočiti kupcu in prodajalcu, da samostojno izbereta posrednika. Veliko je ljudi, ki sodelujejo pri reševanju spornih vprašanj. In naši udeleženci lahko iz splošnega seznama mediatorjev izberejo tistega, ki mu bodo zaupali. Skupaj ustvarijo naslov z več podpisi 2 od 3, kjer so trije ključi in dva podpisa s katerima koli dvema ključema sta potrebna za porabo kovancev s tega naslova. En ključ bo pripadal kupcu, drugi spletni trgovini, tretji pa posredniku. In na tak naslov z več podpisi bo kupec poslal znesek, potreben za plačilo monitorja. Zdaj, ko prodajalec vidi, da je denar nekaj časa blokiran na večpodpisnem naslovu, ki je odvisen od njega, lahko varno pošlje monitor po pošti.

Nato kupec prevzame pošiljko, pregleda blago in se odloči o končnem nakupu. Lahko se popolnoma strinja z opravljeno storitvijo in s svojim ključem podpiše transakcijo, kjer prodajalcu prenese kovance iz multipodpisnega naslova ali pa je s čim nezadovoljen. V drugem primeru stopi v stik s posrednikom, da sestavi alternativno transakcijo, ki bo te kovance razdelila drugače.

Recimo monitor je prišel malo spraskan in v kompletu ni bil priložen kabel za povezavo z računalnikom, čeprav je na spletni strani spletne trgovine pisalo, da mora biti kabel v kompletu. Nato kupec zbere potrebne dokaze, da posredniku dokaže, da je bil v tej situaciji prevaran: naredi posnetek zaslona strani, fotografira potrdilo o prejemu pošte, fotografira praske na monitorju in pokaže, da je bil pečat zlomljen in kabel je bil izvlečen. Spletna trgovina pa zbira svoje dokaze in jih posreduje posredniku.

Posrednik je zainteresiran hkrati zadovoljiti ogorčenje kupca in interese spletne trgovine (zakaj bo jasno kasneje). Gre za transakcijo, pri kateri se bodo kovanci z multisignature naslova v nekem razmerju porabili med kupcem, spletno trgovino in posrednikom, saj si le-ta vzame del kot nagrado za svoje delo. Recimo 90% celotnega zneska gre prodajalcu, 5% posredniku in 5% odškodnine kupcu. Mediator podpiše to transakcijo s svojim ključem, vendar je še ni mogoče uporabiti, ker zahteva dva podpisa, vendar se splača le eden. Takšno transakcijo pošlje tako kupcu kot prodajalcu. Če je vsaj eden od njih zadovoljen s to možnostjo prerazporeditve kovancev, bo transakcija vnaprej podpisana in poslana v omrežje. Za potrditev je dovolj, da se ena od strank v poslu strinja z opcijo mediatorja.

Pomembno je, da na začetku izberete mediatorja, da mu oba udeleženca zaupata. V tem primeru bo deloval neodvisno od interesov enega ali drugega in objektivno ocenil situacijo. Če posrednik ne ponudi možnosti distribucije kovancev, ki bi zadovoljila vsaj enega udeleženca, potem lahko po skupnem dogovoru tako kupec kot spletna trgovina pošljeta kovance na nov večpodpisni naslov s svojima dvema podpisoma. Nov večpodpisni naslov bo sestavljen z drugim posrednikom, ki bo morda bolj kompetenten v zadevi in ​​bo ponudil boljšo možnost.

Primer s spalnico in hladilnikom

Oglejmo si bolj zapleten primer, ki bolj eksplicitno prikazuje zmožnosti pametne pogodbe.

Uvod v pametne pogodbe

Recimo, da so se trije fantje pred kratkim preselili v isto sobo v študentskem domu. Vsi trije se zanimajo za nakup hladilnika za svojo sobo, ki bi ga lahko uporabljali skupaj. Eden izmed njih se je prostovoljno javil, da bo zbral potrebno vsoto za nakup hladilnika in se pogajal s prodajalcem. Vendar sta se spoznala šele pred kratkim in med njima ni dovolj zaupanja. Očitno dva od njih tvegata s tem, ko dajeta denar tretjemu. Poleg tega morajo doseči dogovor pri izbiri prodajalca.

Uporabijo lahko storitev escrow, torej izberejo posrednika, ki bo spremljal izvedbo posla in reševal sporna vprašanja, če do njih pride. Nato po dogovoru sestavijo pametno pogodbo in v njej predpišejo določene pogoje.

Prvi pogoj je, da mora pred določenim časom, recimo v enem tednu, ustrezni račun pametne pogodbe prejeti tri plačila z določenih naslovov za določen znesek. Če se to ne zgodi, se pametna pogodba preneha izvajati in vrne kovance vsem udeležencem. Če je pogoj izpolnjen, se določijo vrednosti identifikatorjev prodajalca in posrednika ter preveri pogoj, da se vsi udeleženci strinjajo z izbiro prodajalca in posrednika. Ko bodo izpolnjeni vsi pogoji, bodo sredstva nakazana na navedene naslove. Ta pristop lahko zaščiti udeležence pred goljufijami s katere koli strani in na splošno odpravlja potrebo po zaupanju.

V tem primeru vidimo samo načelo, da vam ta zmožnost postopnega nastavljanja parametrov za izpolnjevanje vsakega pogoja omogoča ustvarjanje sistemov poljubne kompleksnosti in globine ugnezdenih ravni. Poleg tega lahko v pametni pogodbi najprej določite prvi pogoj in šele po njegovi izpolnitvi lahko nastavite parametre za naslednji pogoj. Povedano drugače, pogoj je formalno zapisan, parametre zanj pa lahko nastavimo že med delovanjem.

Razvrstitev pametnih pogodb

Za razvrščanje lahko nastavite različne skupine kriterijev. Vendar so v trenutku razvoja tehnologije pomembni štirje.

Pametne pogodbe je mogoče razlikovati po izvajalnem okolju, ki je lahko centralizirano ali decentralizirano. V primeru decentralizacije imamo veliko večjo neodvisnost in toleranco napak pri izvajanju pametnih pogodb.

Ločimo jih tudi po postopku postavljanja in izpolnjevanja pogojev: lahko so prosto programabilni, omejeni ali vnaprej določeni, torej strogo tipizirani. Kadar so na platformi pametnih pogodb le 4 določene pametne pogodbe, lahko parametre zanje nastavite na poljuben način. Zato je njihova nastavitev veliko enostavnejša: s seznama izberemo pogodbo in posredujemo parametre.

Glede na način iniciacije obstajajo avtomatizirane pametne pogodbe, to pomeni, da se ob nastopu določenih pogojev izvajajo same od sebe, in obstajajo pogodbe, v katerih so pogoji določeni, vendar platforma ne preverja samodejno njihovega izpolnjevanja, za to je treba začeti ločeno.

Poleg tega se pametne pogodbe razlikujejo glede na stopnjo zasebnosti. Lahko so popolnoma odprti, delno ali popolnoma zaupni. Slednje pomeni, da tretji opazovalci ne vidijo pogojev pametnih pogodb. Vendar pa je tema zasebnosti zelo široka in jo je bolje obravnavati ločeno od trenutnega članka.

V nadaljevanju si bomo podrobneje ogledali prve tri kriterije, da bomo razumeli trenutno temo bolj jasno.

Pametne pogodbe glede na čas izvajanja

Uvod v pametne pogodbe

Glede na okolje izvajanja ločimo centralizirane in decentralizirane pametne pogodbene platforme. V primeru centraliziranih digitalnih pogodb se uporablja ena sama storitev, kjer je samo en validator in lahko obstaja storitev varnostnega kopiranja in obnovitve, ki se prav tako upravlja centralno. Obstaja ena baza podatkov, ki shranjuje vse potrebne informacije za določitev pogojev pametne pogodbe in distribucijo vrednosti, ki se upošteva v tej bazi podatkov storitve. Takšen centraliziran servis ima naročnika, ki postavlja pogoje z določenimi zahtevami in uporablja takšne pogodbe. Zaradi centralizirane narave platforme so lahko mehanizmi za preverjanje pristnosti manj varni kot pri kriptovalutah.

Kot primer lahko vzamemo ponudnike mobilnih komunikacij (različne mobilne operaterje). Recimo, da določen operater na svojih strežnikih vodi centralizirano evidenco prometa, ki se lahko prenaša v različnih formatih, na primer: v obliki glasovnih klicev, prenosa SMS, mobilnega internetnega prometa in po različnih standardih ter vodi tudi evidenco. sredstev na dobroimetjih uporabnikov. Skladno s tem lahko ponudnik mobilnih komunikacij sestavi pogodbe za obračun opravljenih storitev in njihovo plačilo z različnimi pogoji. V tem primeru je enostavno nastaviti pogoje, kot je "pošljite SMS s takšno in takšno kodo na takšno in takšno številko in prejeli boste takšne in takšne pogoje za porazdelitev prometa."

Lahko navedemo še en primer: klasične banke z razširjeno funkcionalnostjo internetnega bančništva in zelo enostavnimi pogodbami, kot so redna plačila, avtomatska konverzija vplačil, samodejni odtegljaj obresti na določen račun itd.

Če govorimo o pametnih pogodbah z decentraliziranim okoljem izvajanja, potem imamo skupino validatorjev. V idealnem primeru lahko vsakdo postane validator. Zaradi protokola za sinhronizacijo baz podatkov in doseganja konsenza imamo neko skupno bazo, ki bo zdaj shranjevala vse transakcije s strogo opisanimi pogodbami in ne nekimi pogojnimi poizvedbami, katerih formati se pogosto spreminjajo in ni odprte specifikacije. Tukaj bodo transakcije vsebovale navodila za izvedbo pogodbe v skladu s strogo specifikacijo. Ta specifikacija je odprta in zato lahko uporabniki platforme sami revidirajo in potrdijo pametne pogodbe. Tukaj vidimo, da so decentralizirane platforme boljše od centraliziranih v smislu neodvisnosti in tolerance napak, vendar sta njihova zasnova in vzdrževanje veliko bolj zapletena.

Pametne pogodbe po načinu postavljanja in izpolnjevanja pogojev

Zdaj pa si podrobneje oglejmo, kako se pametne pogodbe lahko razlikujejo glede na način, kako postavljajo in izpolnjujejo pogoje. Tukaj se osredotočamo na pametne pogodbe, ki jih je mogoče naključno programirati in Turing popolne. Turingovsko popolna pametna pogodba vam omogoča, da kot pogoje za izvedbo pogodbe nastavite skoraj vse algoritme: pisalne cikle, nekatere funkcije za izračun verjetnosti in podobno – vse do lastnih algoritmov elektronskega podpisa. V tem primeru mislimo na resnično poljubno pisanje logike.

Obstajajo tudi poljubne pametne pogodbe, ne pa Turingovih popolnih. To vključuje Bitcoin in Litecoin z lastnim skriptom. To pomeni, da lahko uporabljate le določene operacije v poljubnem vrstnem redu, ne morete pa več pisati zank in lastnih algoritmov.

Poleg tega obstajajo platforme za pametne pogodbe, ki izvajajo vnaprej določene pametne pogodbe. Ti vključujejo Bitshares in Steemit. Bitshares ima vrsto pametnih pogodb za trgovanje, upravljanje računa, upravljanje same platforme in njenih parametrov. Steemit je podobna platforma, vendar ni več osredotočena na izdajanje žetonov in trgovanje, kot Bitshares, temveč na bloganje, torej decentralizirano shranjuje in obdeluje vsebine.

Samovoljne Turing-complete pogodbe vključujejo platformo Ethereum in RootStock, ki je še v razvoju. Zato se bomo v nadaljevanju nekoliko podrobneje posvetili platformi pametnih pogodb Ethereum.

Pametne pogodbe po metodi iniciacije

Glede na način iniciacije lahko tudi pametne pogodbe razdelimo v vsaj dve skupini: avtomatizirane in ročne (neavtomatizirane). Za avtomatizirane je značilno, da se glede na vse znane parametre in pogoje pametna pogodba v celoti izvrši avtomatsko, torej ne zahteva pošiljanja nobenih dodatnih transakcij in porabe dodatne provizije pri vsaki nadaljnji izvedbi. Sama platforma ima vse podatke za izračun, kako bo pametna pogodba zaključena. Logika tam ni poljubna, ampak vnaprej določena in vse to je predvidljivo. To pomeni, da lahko vnaprej ocenite zapletenost izvajanja pametne pogodbe, zanjo uporabite nekakšno stalno provizijo in vsi postopki za njeno izvajanje so učinkovitejši.

Pri pametnih pogodbah, ki so prosto programirane, izvedba ni avtomatizirana. Za iniciacijo takšne pametne pogodbe je treba tako rekoč na vsakem koraku ustvariti novo transakcijo, ki bo priklicala naslednjo fazo izvedbe ali naslednjo metodo pametne pogodbe, plačati ustrezno provizijo in počakati na potrditev transakcije. Izvedba se lahko zaključi uspešno ali ne, ker je koda pametne pogodbe poljubna in se lahko pojavijo nekateri nepredvidljivi trenutki, kot so večna zanka, pomanjkanje nekaterih parametrov in argumentov, neobravnavane izjeme itd.

Računi Ethereum

Vrste računov Ethereum

Poglejmo, katere vrste računov so lahko na platformi Ethereum. Tu sta samo dve vrsti računov in drugih možnosti ni. Prva vrsta se imenuje uporabniški račun, druga pa pogodbeni račun. Ugotovimo, kako se razlikujejo.

Uporabniški račun se upravlja le z osebnim ključem elektronskega podpisa. Lastnik računa ustvari svoj par ključev za elektronski podpis z uporabo algoritma ECDSA (Elliptic Curve Digital Signature Algorithm). Samo transakcije, podpisane s tem ključem, lahko spremenijo stanje tega računa.

Za račun pametne pogodbe je na voljo posebna logika. Upravlja ga lahko le vnaprej določena programska koda, ki v celoti določa obnašanje pametne pogodbe: kako bo upravljala svoje kovance v določenih okoliščinah, na pobudo katerega uporabnika in pod kakšnimi dodatnimi pogoji se bodo ti kovanci distribuirali. Če razvijalci v programski kodi nekaterih točk ne predvidevajo, lahko pride do težav. Na primer, pametna pogodba lahko prejme določeno stanje, v katerem ne sprejema iniciacije nadaljnjega izvajanja od katerega koli uporabnika. V tem primeru bodo kovanci dejansko zamrznjeni, saj pametna pogodba ne predvideva izhoda iz tega stanja.

Kako se ustvarijo računi na Ethereumu

V primeru uporabniškega računa lastnik samostojno ustvari par ključev s pomočjo ECDSA. Pomembno je omeniti, da Ethereum uporablja popolnoma enak algoritem in popolnoma enako eliptično krivuljo za elektronske podpise kot Bitcoin, le da se naslov izračuna na nekoliko drugačen način. Tukaj se rezultat dvojnega zgoščevanja ne uporablja več, kot v Bitcoinu, ampak je enojno zgoščevanje zagotovljeno s funkcijo Keccak v dolžini 256 bitov. Najmanj pomembni biti so odrezani od nastale vrednosti, in sicer najmanj pomembnih 160 bitov izhodne zgoščene vrednosti. Kot rezultat dobimo naslov v Ethereumu. Pravzaprav zavzame 20 bajtov.

Upoštevajte, da je identifikator računa v Ethereumu kodiran v šestnajstiški obliki brez uporabe kontrolne vsote, za razliko od Bitcoina in mnogih drugih sistemov, kjer je naslov kodiran v številskem sistemu z bazo 58 z dodatkom kontrolne vsote. To pomeni, da morate biti previdni pri delu z identifikatorji računa v Ethereumu: že ena napaka v identifikatorju bo zagotovo povzročila izgubo kovancev.

Pomembna lastnost je ta, da se uporabniški račun na ravni splošne baze ustvari v trenutku, ko sprejme prvo dohodno plačilo.

Ustvarjanje pametnega pogodbenega računa ima popolnoma drugačen pristop. Na začetku eden od uporabnikov napiše izvorno kodo pametne pogodbe, nato pa se koda prenese skozi prevajalnik, poseben za platformo Ethereum, in tako pridobi bajtno kodo za svoj virtualni stroj Ethereum. Nastala bajtna koda se postavi v posebno polje transakcije. Potrjeno je v imenu pobudnikovega računa. Nato se ta transakcija razširi po omrežju in postavi kodo pametne pogodbe. Provizija za transakcijo in s tem za izvedbo pogodbe se odtegne iz stanja na računu pobudnika.

Vsaka pametna pogodba nujno vsebuje svojega konstruktorja (te pogodbe). Lahko je prazen ali pa ima vsebino. Po izvedbi konstruktorja se ustvari identifikator računa pametne pogodbe, s katerim lahko pošiljate kovance, kličete določene metode pametne pogodbe itd.

Transakcijska struktura Ethereum

Da bo bolj jasno, si bomo začeli ogledati strukturo transakcije Ethereum in primer kode pametne pogodbe.

Uvod v pametne pogodbe

Transakcija Ethereum je sestavljena iz več polj. Prvi od teh, nonce, je določena serijska številka transakcije glede na sam račun, ki jo distribuira in je njen avtor. To je potrebno za razlikovanje dvojnih transakcij, to je za izključitev primera, ko je ista transakcija sprejeta dvakrat. Z uporabo identifikatorja ima vsaka transakcija edinstveno zgoščeno vrednost.

Sledi polje kot cena plina. To označuje ceno, po kateri se osnovna valuta Ethereum pretvori v plin, ki se uporablja za plačilo za izvedbo pametne pogodbe in dodelitev virov virtualnega stroja. Kaj to pomeni?

Pri Bitcoinu se provizije plačajo neposredno z osnovno valuto – samim Bitcoinom. To je mogoče zaradi preprostega mehanizma za njihov izračun: plačamo strogo glede na količino podatkov, ki jih vsebuje transakcija. V Ethereumu je situacija bolj zapletena, saj se je zelo težko zanesti na količino transakcijskih podatkov. Tu lahko transakcija vsebuje tudi programsko kodo, ki se bo izvajala na virtualnem stroju, vsaka operacija virtualnega stroja pa ima lahko drugačno kompleksnost. Obstajajo tudi operacije, ki dodeljujejo pomnilnik za spremenljivke. Imeli bodo svojo kompleksnost, od katere bo odvisno plačilo za vsako operacijo.

Stroški vsake operacije v ekvivalentu plina bodo konstantni. Uveden je posebej za določitev stalnih stroškov vsake operacije. Glede na obremenitev omrežja se bo spreminjala cena plina, to je koeficient, po katerem se bo osnovna valuta pretvorila v to pomožno enoto za plačilo provizije.

Obstaja še ena značilnost transakcije v Ethereumu: bajtna koda, ki jo vsebuje za izvedbo v virtualnem stroju, se bo izvajala, dokler se ne zaključi z določenim rezultatom (uspeh ali neuspeh) ali dokler ne zmanjka določene količine kovancev, dodeljenih za plačilo provizije. . Da bi se izognili situaciji, ko so bili v primeru napake vsi kovanci z računa pošiljatelja porabljeni za provizijo (na primer nekakšen večni cikel, ki se je začel v virtualnem stroju), obstaja naslednje polje - zagon plina (pogosto imenovan plinski limit) – določa največjo količino kovancev, ki jih je pošiljatelj pripravljen porabiti za dokončanje določene transakcije.

Pokliče se naslednje polje ciljni naslov. To vključuje naslov prejemnika kovancev ali naslov določene pametne pogodbe, katere metode bodo poklicane. Za njim pride polje vrednost, kjer je vpisana količina kovancev, ki so poslani na ciljni naslov.

Sledi zanimivo področje, imenovano datum, kjer se prilega celotna struktura. To ni ločeno polje, ampak celotna struktura, v kateri je definirana koda za virtualni stroj. Tukaj lahko postavite poljubne podatke - za to obstajajo ločena pravila.

In zadnje polje se imenuje Podpis. Hkrati vsebuje tako elektronski podpis avtorja te transakcije kot tudi javni ključ, s katerim bo ta podpis verificiran. Iz javnega ključa lahko pridobite identifikator računa pošiljatelja te transakcije, torej unikatno identificirate račun pošiljatelja v samem sistemu. Ugotovili smo glavno o strukturi transakcije.

Primer kode pametne pogodbe za Solidity

Oglejmo si zdaj pobližje najenostavnejšo pametno pogodbo na primeru.

contract Bank {
    address owner;
    mapping(address => uint) balances;
    
    function Bank() {
        owner = msg.sender;
    }

    function deposit() public payable {
        balances[msg.sender] += msg.value;
    }

    function withdraw(uint amount) public {
        if (balances[msg.sender] >= amount) {
            balances[msg.sender] -= amount;
            msg.sender.transfer(amount);
        }
    }

    function getMyBalance() public view returns(uint) {
        return balances[msg.sender];
    }

    function kill() public {
        if (msg.sender == owner)
            selfdestruct(owner);
    }
}

Zgoraj je poenostavljena izvorna koda, ki lahko zadrži kovance uporabnikov in jih vrne na zahtevo.

Torej, obstaja bančna pametna pogodba, ki opravlja naslednje funkcije: kopiči kovance na svojem stanju, to pomeni, ko je transakcija potrjena in je takšna pametna pogodba postavljena, se ustvari nov račun, ki lahko vsebuje kovance na svojem stanju; zapomni si uporabnike in razdelitev kovancev med njimi; ima več načinov za upravljanje stanja, to je, da je možno polnjenje, dvig in preverjanje stanja uporabnika.

Pojdimo skozi vsako vrstico izvorne kode. Ta pogodba ima stalna polja. Eden od njih, s tipom naslov, se imenuje lastnik. Tukaj si pogodba zapomni naslov uporabnika, ki je ustvaril to pametno pogodbo. Poleg tega obstaja dinamična struktura, ki vzdržuje korespondenco med uporabniškimi naslovi in ​​stanjem.

Sledi bančna metoda - ima isto ime kot pogodba. V skladu s tem je to njegov konstruktor. Tukaj je spremenljivki lastnika dodeljen naslov osebe, ki je dala to pametno pogodbo v omrežje. To je edina stvar, ki se zgodi v tem konstruktorju. To pomeni, da so msg v tem primeru natanko podatki, ki so bili preneseni v virtualni stroj skupaj s transakcijo, ki vsebuje celotno kodo te pogodbe. V skladu s tem je msg.sender avtor te transakcije, ki gosti to kodo. On bo lastnik pametne pogodbe.

Metoda depozita vam omogoča prenos določenega števila kovancev na pogodbeni račun s transakcijo. V tem primeru pametna pogodba, ki prejme te kovance, jih pusti v svoji bilanci stanja, vendar v strukturi stanja zabeleži, kdo točno je bil pošiljatelj teh kovancev, da se ve, komu pripadajo.

Naslednja metoda se imenuje dvig in zajema en parameter - količino kovancev, ki jih nekdo želi dvigniti iz te banke. To preveri, ali je dovolj kovancev na stanju uporabnika, ki kliče to metodo, da jih pošlje. Če jih je dovolj, potem pametna pogodba sama vrne to število kovancev klicatelju.

Sledi metoda za preverjanje trenutnega stanja uporabnika. Kdor koli pokliče to metodo, bo uporabljen za pridobitev tega stanja v pametni pogodbi. Omeniti velja, da je modifikator te metode pogled. To pomeni, da sama metoda v ničemer ne spremeni spremenljivk svojega razreda in je pravzaprav samo bralna metoda. Za klic te metode se ne ustvari nobena ločena transakcija, ne plača se nobena provizija in vsi izračuni se izvedejo lokalno, nato pa uporabnik prejme rezultat.

Metoda kill je potrebna za uničenje stanja pametne pogodbe. In tukaj je dodatno preverjanje, ali je klicatelj te metode lastnik te pogodbe. Če je tako, potem se pogodba samouniči, funkcija uničenja pa sprejme en parameter - identifikator računa, na katerega bo pogodba poslala vse kovance, ki ostanejo na njenem stanju. V tem primeru bodo preostali kovanci samodejno šli na naslov lastnika pogodbe.

Kako deluje polno vozlišče v omrežju Ethereum?

Poglejmo shematično, kako se takšne pametne pogodbe izvajajo na platformi Ethereum in kako deluje celotno omrežno vozlišče.

Uvod v pametne pogodbe

Polno vozlišče v omrežju Ethereum mora imeti vsaj štiri module.
Prvi, kot pri vsakem decentraliziranem protokolu, je omrežni modul P2P - modul za omrežno povezavo in delo z drugimi vozlišči, kjer se izmenjujejo bloki, transakcije in informacije o drugih vozliščih. To je tradicionalna komponenta za vse decentralizirane kriptovalute.

Nato imamo modul za shranjevanje podatkov verige blokov, obdelavo, izbiro prednostne veje, dodajanje blokov, prekinitev povezav blokov, preverjanje teh blokov itd.

Tretji modul se imenuje EVM (Ethereum virtual machine) – to je virtualni stroj, ki prejema bajtno kodo iz transakcij Ethereum. Ta modul vzame trenutno stanje določenega računa in spremeni njegovo stanje na podlagi prejete bajtne kode. Različica navideznega stroja na vsakem omrežnem vozlišču mora biti enaka. Izračuni, ki potekajo na vsakem vozlišču Ethereum, so popolnoma enaki, vendar se dogajajo asinhrono: nekdo prej preveri in sprejme to transakcijo, torej izvede vso kodo, ki jo vsebuje, nekdo pa pozneje. V skladu s tem, ko je transakcija ustvarjena, se ta distribuira v omrežje, vozlišča jo sprejmejo in v času preverjanja se na enak način, kot se Bitcoin Script izvaja v Bitcoinu, tukaj izvede bajtna koda virtualnega stroja.

Transakcija se šteje za preverjeno, če je bila izvedena vsa koda, ki jo vsebuje, generirano in shranjeno novo stanje določenega računa, dokler ni jasno, ali je bila ta transakcija uporabljena ali ne. Če je transakcija uporabljena, se to stanje ne šteje le za zaključeno, ampak tudi za trenutno. Obstaja zbirka podatkov, ki shranjuje stanje vsakega računa za vsako omrežno vozlišče. Ker vsi izračuni potekajo na enak način in je stanje verige blokov enako, bo baza podatkov, ki vsebuje stanja vseh računov, enaka za vsako vozlišče.

Miti in omejitve pametnih pogodb

Kar zadeva omejitve, ki obstajajo za platforme pametnih pogodb, podobne Ethereumu, je mogoče navesti naslednje:

  • izvajanje kode;
  • dodeliti pomnilnik;
  • podatki blockchain;
  • pošiljanje plačil;
  • ustvarite novo pogodbo;
  • pokličite druge pogodbe.

Oglejmo si omejitve, ki so naložene virtualnemu stroju, in v skladu s tem razblinimo nekatere mite o pametnih pogodbah. Na virtualnem stroju, ki je lahko ne le v Ethereumu, ampak tudi na podobnih platformah, lahko izvajate resnično poljubne logične operacije, torej napišete kodo in se bo tam izvedla, lahko dodatno dodelite pomnilnik. Vendar se nadomestilo plača posebej za vsako operacijo in za vsako dodatno dodeljeno enoto pomnilnika.

Nato lahko navidezni stroj prebere podatke iz baze podatkov blockchain, da te podatke uporabi kot sprožilec za izvajanje ene ali druge logike pametne pogodbe. Virtualni stroj lahko ustvarja in pošilja transakcije, lahko ustvarja nove pogodbe in kliče metode drugih pametnih pogodb, ki so že objavljene v omrežju: obstoječih, razpoložljivih itd.

Najpogostejši mit je, da lahko pametne pogodbe Ethereum uporabljajo informacije iz katerega koli internetnega vira v svojih pogojih. Resnica je, da virtualni stroj ne more poslati omrežne zahteve nekemu zunanjemu informacijskemu viru na internetu, se pravi, da je nemogoče napisati pametno pogodbo, ki bo porazdelila vrednost med uporabniki glede na, recimo, kakšno je vreme zunaj, ali kdo je osvojil kakšno prvenstvo, ali na podlagi tega, kateri drug incident se je zgodil v zunanjem svetu, ker informacij o teh incidentih preprosto ni v bazi podatkov same platforme. To pomeni, da o tem v blockchainu ni ničesar. Če se tam ne prikaže, navidezni stroj teh podatkov ne more uporabiti kot sprožilce.

Slabosti Ethereuma

Naštejmo glavne. Prva pomanjkljivost je nekaj težav pri oblikovanju, razvoju in testiranju pametnih pogodb v Ethereumu (Ethereum za pisanje pametnih pogodb uporablja jezik Solidity). Praksa namreč kaže, da zelo velik odstotek vseh napak pripada človeškemu faktorju. To dejansko velja za že napisane pametne pogodbe Ethereum, ki imajo povprečno ali večjo kompleksnost. Če je pri enostavnih pametnih pogodbah verjetnost napake majhna, potem pri kompleksnih pametnih pogodbah zelo pogosto prihaja do napak, ki vodijo do kraje sredstev, njihove zamrznitve, uničenja pametnih pogodb na nepričakovan način itd. Veliko takih primerov je že znan.

Druga pomanjkljivost je, da sam virtualni stroj ni popoln, saj ga pišejo tudi ljudje. Izvaja lahko poljubne ukaze in v tem je ranljivost: številne ukaze je mogoče konfigurirati na določen način, ki bo povzročil vnaprej nepredvidene posledice. To je zelo zapleteno področje, vendar že obstaja več študij, ki kažejo, da te ranljivosti obstajajo v trenutni različici omrežja Ethereum in lahko vodijo do neuspeha številnih pametnih pogodb.

Druga velika težava, ki jo lahko štejemo za pomanjkljivost. Je v tem, da lahko praktično ali tehnično pridete do zaključka, da če sestavite bajtno kodo pogodbe, ki se bo izvajala na virtualnem stroju, lahko določite nek poseben vrstni red operacij. Če se izvajajo skupaj, bodo te operacije zelo obremenile virtualni stroj in ga upočasnile nesorazmerno s pristojbino, ki je bila plačana za izvajanje teh operacij.

V preteklosti je že bilo obdobje v razvoju Ethereuma, ko so številni fantje, ki so do potankosti razumeli delovanje virtualnega stroja, našli takšne ranljivosti. Pravzaprav so transakcije plačale zelo majhno provizijo, vendar so praktično upočasnile celotno omrežje. Te težave je zelo težko rešiti, saj jih je treba, prvič, določiti, drugič, prilagoditi ceno za izvajanje teh operacij in, tretjič, izvesti hard fork, kar pomeni posodobitev vseh omrežnih vozlišč na novo različico. programske opreme in nato hkratno aktiviranje teh sprememb.

Kar zadeva Ethereum, je bilo opravljenih veliko raziskav, pridobljenih je bilo veliko praktičnih izkušenj: tako pozitivnih kot negativnih, a kljub temu ostajajo težave in ranljivosti, s katerimi se je treba nekako spopasti.

Tako je tematski del članka zaključen, preidimo na vprašanja, ki se pogosto pojavljajo.

Pogosta vprašanja

— Če vse stranke obstoječe pametne pogodbe želijo spremeniti pogoje, ali lahko prekličejo to pametno pogodbo z uporabo multisig in nato ustvarijo novo pametno pogodbo s posodobljenimi pogoji njenega izvajanja?

Odgovor bo tukaj dvojen. Zakaj? Kajti po eni strani je pametna pogodba definirana enkrat in ne pomeni več nobenih sprememb, po drugi strani pa ima lahko vnaprej napisano logiko, ki predvideva popolno ali delno spremembo nekaterih pogojev. Se pravi, če želite nekaj spremeniti v svoji pametni pogodbi, potem morate predpisati pogoje, pod katerimi lahko te pogoje posodobite. V skladu s tem je le na tako preudaren način mogoče organizirati podaljšanje pogodbe. Toda tudi tukaj lahko naletite na težave: naredite kakšno napako in dobite ustrezno ranljivost. Zato je treba takšne stvari zelo podrobno oblikovati in testirati.

— Kaj pa, če mediator sklene pogodbo z eno od sodelujočih strank: escrow ali pametno pogodbo? Ali je pri pametni pogodbi obvezen posrednik?

V pametni pogodbi posrednik ni potreben. Morda ne obstaja. Če se pri escrowu posrednik zaplete v zaroto z eno od strank, potem ja, potem ta shema močno izgubi svojo vrednost. Zato so mediatorji izbrani tako, da jim zaupajo vse strani, ki sodelujejo v tem procesu hkrati. V skladu s tem preprosto ne boste prenesli kovancev na večpodpisni naslov s posrednikom, ki mu ne zaupate.

— Ali je mogoče z eno transakcijo Ethereum prenesti veliko različnih žetonov z vašega naslova na različne ciljne naslove, na primer naslove menjalnic, kjer se trguje s temi žetoni?

To je dobro vprašanje in se nanaša na transakcijski model Ethereum in kako se razlikuje od modela Bitcoin. In razlika je radikalna. Če v transakcijskem modelu Ethereum preprosto prenesete kovance, potem se prenesejo samo z enega naslova na drugega, brez sprememb, le določen znesek, ki ste ga določili. Z drugimi besedami, to ni model neporabljenih izhodov (UTXO), temveč model kontov in pripadajočih stanj. Teoretično je možno poslati več različnih žetonov v eni transakciji naenkrat, če napišete premeteno pametno pogodbo, vendar boste še vedno morali opraviti veliko transakcij, ustvariti pogodbo, nato vanjo prenesti žetone in kovance ter nato poklicati ustrezno metodo . To zahteva trud in čas, zato v praksi ne deluje tako in vsa plačila v Ethereumu potekajo v ločenih transakcijah.

— Eden od mitov o platformi Ethereum je, da je nemogoče opisati pogoje, ki bodo odvisni od podatkov zunanjega internetnega vira, kaj torej storiti?

Rešitev je v tem, da lahko pametna pogodba sama zagotovi enega ali več tako imenovanih zaupanja vrednih orakljev, ki zbirajo podatke o stanju stvari v zunanjem svetu in jih s posebnimi metodami posredujejo pametnim pogodbam. Sama pogodba podatke, ki jih je prejela od zaupanja vrednih oseb, šteje za resnične. Za večjo zanesljivost preprosto izberite veliko skupino orakljev in zmanjšajte tveganje njihovega dogovarjanja. Sama pogodba morda ne upošteva podatkov iz orakljev, ki so v nasprotju z večino.

Eno od predavanj spletnega tečaja o Blockchainu je posvečeno tej temi - “Uvod v pametne pogodbe".

Vir: www.habr.com

Dodaj komentar