Sissejuhatus nutilepingutesse

Selles artiklis arutame, mis on nutilepingud, millised need on, tutvume erinevate nutilepingute platvormidega, nende omadustega ning arutame, kuidas need toimivad ja milliseid eeliseid vÔivad endas peita. See materjal on vÀga kasulik lugejatele, kes ei ole nutilepingute teemaga piisavalt tuttavad, aga soovivad selle mÔistmiseni jÔuda.

TavapÀrane leping vs. nutileping

Enne kui sĂŒveneme ĂŒksikasjadesse, tuletame meelde tavapĂ€rase lepingu, mis on kirjalik, ja nutilepingu, mis on esitatud digitaalses vormis, erinevusi.

Sissejuhatus nutilepingutesse

Kuidas see toimis enne nutilepingute kasutuselevĂ”ttu? Kujutage ette rĂŒhma inimesi, kes soovivad kehtestada teatud reeglid ja tingimused vÀÀrtuste jaotamiseks ning kindlustada, et need reeglid ja tingimused ka tegelikult tĂ€idetakse. Nad kogunesid, koostasid dokumendi, kuhu kirja pandi nende isikuandmed, tingimused, kaasatud vÀÀrtused, kuupĂ€ev ja allkirjad. Seda lepingut kinnitas ka usaldusvÀÀrne osapool, nĂ€iteks notar. SeejĂ€rel lahkusid nad igaĂŒhega oma paberkandjal lepingust ja hakkasid tegema teatud toiminguid, mis vĂ”isid olla lepinguga mitteĂŒhtivad, st nad tegid ĂŒhte, samas kui paberil oli kinnitatud, et nad peaksid tegema midagi tĂ€iesti muud. Kuidas sellisest olukorrast vĂ€lja tulla? Tegelikult pidi ĂŒks osaleja vĂ”tma selle paberi, koguma mingid tĂ”endid, minema kohtusse ja nĂ”udma vastavust lepingu ja tegelike toimingute vahel. Sageli on Ă”iglase tĂ€itmise saavutamine keeruline, mis toob kaasa ebameeldivad tagajĂ€rjed.

Mida saab öelda nutilepingute kohta? Need ĂŒhendavad endas lepingutingimuste koostamise ja nende ranget tĂ€itmise mehhanismi. Kui tingimused on mÀÀratud ja vastav tehing vĂ”i pĂ€ring on allkirjastatud, siis ei saa pĂ€rast selle pĂ€ringu vĂ”i tehingu vastuvĂ”tmist tingimusi enam muuta ega mĂ”jutada nende tĂ€itmist.

Olgu ĂŒks valideerija vĂ”i terve vĂ”rgustik, samuti andmebaas, mis salvestab kĂ”ik nutilepingud, mis on tĂ€itmiseks laekunud rangelt kronoloogilises jĂ€rjekorras. Samuti on oluline, et see andmebaas sisaldaks kĂ”iki tingimuslikke kĂ€ivitajaid nutilepingute tĂ€itmiseks. Lisaks tuleb arvestada ka selle vÀÀrtusega, mille jaotust lepingus kirjeldatakse. Kui see puudutab mingit digitaalset valuutat, siis peab see andmebaas seda arvestama.

TeisisĂ”nu peavad nutilepingute valideerijatel olema juurdepÀÀs kĂ”ikidele andmetele, millega nutileping opereerib. NĂ€iteks peaks olema ĂŒks andmebaas, mida kasutatakse samal ajal digitaalsete valuutade, kasutajate saldode, kasutajate tehingute ja ajatempli arvestuseks. Siis vĂ”ib nutilepingus tingimuseks olla kasutaja saldo teatavas valuutas, mingi aja saabumine vĂ”i mĂ”ne tehingu tegemise fakt, kuid mitte rohkem.

Nutilepingu mÀÀratlemine

Tegelikult, kogu terminoloogia loodi teadlase Nick Szabo poolt ja seda rakendati esmakordselt 1994. aastal, samas kui see dokumenteeriti 1997. aastal artiklis, mis kirjeldab nutilepingute ideed.

Nutilepingud tÀhendavad, et toimub mingi vÀÀrtuse jaotuse automatiseerimine, mis vÔib sÔltuda ainult nendest tingimustest, mis on eelnevalt ette mÀÀratud. KÔige lihtsamal juhul nÀeb see vÀlja nagu leping, kus on rangelt mÀÀratletud tingimused, mille on allkirjastanud teatud osalised.

Nutika lepingud on loodud vĂ€hendama usaldust kolmandate osapoolte vastu. MĂ”nikord vĂ€listatakse tĂ€ielikult otsustusprotsess, mis kĂ”ik sĂ”ltub. Lisaks on selliste lepingute auditit lihtsam lĂ€bi viia. See tuleneb teatud sĂŒsteemide projekteerimise eripĂ€radest, kuid enamasti mĂ”istame nutika lepingu all detsentraliseeritud keskkonda ja funktsioone, mis vĂ”imaldavad igal soovijal andmebaasi analĂŒĂŒsida ja lepingute tĂ€itmise tĂ€ielikku auditit teha. Nii tagatakse kaitse tagantjĂ€rgi andmete muutuste eest, mis muudaksid lepingu tĂ€itmist. Enamik protsesside digitaliseerimine nutika lepingu loomisel ja kĂ€ivitamisel lihtsustab sageli tehnoloogiat ja nende elluviimise kulusid.

Lihtne nĂ€ide — Escrow teenus

Vaatame vÀga lihtsat nÀidet. See aitab lÀheneda nutikate lepingute funktsionaalsete vÔimaluste mÔistmisele ning paremini orienteeruda, millal neid kasutada tasub.

Sissejuhatus nutilepingutesse

Seda vĂ”ib ellu viia ka Bitcoiniga, kuigi praegu ei saa Bitcoini veel nimetada tĂ€isvÀÀrseks plokiahela platvormiks nutilepingute jaoks. Niisiis, meil on ostja ja veebipood. Ostja soovib osta selle poe kaudu monitori. KĂ”ige lihtsamas olukorras esitab ostja makse ja veebipood aktsepteerib selle, kinnitab ning seejĂ€rel saadab kauba. Kuid selles olukorras on vajalik suur usaldus — ostja peab kogu monitori maksumuse osas usaldama veebipoodi. Kuna veebipood vĂ”ib ostja silmis olla madala mainega, siis on oht, et mingil pĂ”hjusel, pĂ€rast makse vastuvĂ”tmist, poe teenuseid ei osutata ja kaup ei saadeta ostjale. SeetĂ”ttu kĂŒsib ostja endalt (samuti kĂŒsib seda veebipood), mida selles olukorras rakendada, et minimeerida selliseid riske ja muuta sellised tehingud usaldusvÀÀrsemaks.

Bitcoini puhul on vĂ”imalik ostjal ja mĂŒĂŒjal eraldi valida vahendaja. On palju inimesi, kes tegelevad vaidluste lahendamisega. Meie osalised saavad valida usaldusvÀÀrsete vahendajate ĂŒldisest nimekirjast. Koos loovad nad multisignature aadressi 2-3, kus on kolm vĂ”tit ja mĂ”lema kahe vĂ”tmega on vaja kaht allkirja, et kulutada mĂŒnte sellest aadressist. Üks vĂ”ti kuulub ostjale, teine veebipoele ning kolmas vahendajale. Sellisele multisignature aadressile saadab ostja summa, mis on vajalik monitori eest tasumiseks. NĂŒĂŒd, kui mĂŒĂŒja nĂ€eb, et raha on mĂ”neks ajaks multisignature aadressil blokeeritud, mis sĂ”ltub temast, vĂ”ib ta julgelt saata monitori posti.

SeejĂ€rel vaatab ostja pakki, uurib toodet ja teeb lĂ”pliku ostuotsuse. Ta vĂ”ib olla tĂ€ielikult rahul pakutava teenusega ja kinnitada tehingu oma vĂ”tmega, millega ta edastab mĂŒĂŒjale mĂŒnte multisignature aadressilt, vĂ”i vĂ”ib ta olla millegagi rahulolematu. Teisel juhul pöördub ta vahendaja poole, et koostada alternatiivne tehing, mis jagab neid mĂŒnte teistmoodi.

Oletame, et monitor saabus veidi kriimustatud ja komplektis ei olnud arvutiga ĂŒhendamiseks vajalikku kaablit, kuigi veebipoe lehel oli kirjas, et kaabel peaks olema komplektis. Sel juhul kogub ostja tĂ”endusmaterjali, et tĂ”estada vahendajale, et teda on petetud: ta teeb ekraanipilte veebilehelt, teeb foto postituste tĆĄekist, teeb foto monitori kriimudest ja nĂ€itab, et pitsat oli rikutud ning kaabel oli vĂ€lja vĂ”etud. SeejĂ€rel kogub veebipood omakorda oma tĂ”endid ja edastab need vahendajale.

Vahendaja soovib samal ajal rahuldada nii ostja rahulolematust kui ka internetipoe huve (hiljem selgub, miks). Ta koostab sellise tehingu, kus multiallkirjastatud aadressilt kulutatakse mĂŒnte teatud proportsioonis ostja, internetipoe ja vahendaja vahel, kuna ta vĂ”tab osa oma töö tasuna. Oletame, et 90% kogu summast lĂ€heb mĂŒĂŒjale, 5% vahendajale ja 5% kompensatsiooniks ostjale. Selle tehingu vahendaja allkirjastab oma vĂ”tmega, kuid sellega ei saa veel toimetada, kuna on vajalik kaks allkirja, aga hetkel on vaid ĂŒks. Sellise tehingu saadab ta nii ostjale kui mĂŒĂŒjale. Kui vĂ€hemalt ĂŒks neist on rahul sellise mĂŒntide jaotamise variandi ĂŒle, siis tehing allkirjastatakse ja levitatakse vĂ”rku. Selle valideerimiseks piisab, kui ĂŒks tehingu osaline nĂ”ustub vahendaja pakkumisega.

Oluline on alguses valida mediĂĄtor, kellele mĂ”lemad osalised usaldavad. Sellisel juhul tegutseb ta sĂ”ltumatult ĂŒhe vĂ”i teise huvidest ja hindab olukorda objektiivselt. Kui mediĂĄtor ei paku sellist rahade jaotamise varianti, mis rahuldaks vĂ€hemalt ĂŒhte osalist, vĂ”ivad ostja ja veebipood kokkuleppel saata rahad uuele multisignatuuri aadressile, lisades oma kaks allkirja. Uus multisignatuuri aadress koostatakse juba teise mediĂĄtoriga, kes vĂ”ib-olla on selles kĂŒsimuses pĂ€devam ja pakub paremat varianti.

NĂ€ide ĂŒhiselamu ja kĂŒlmkapi kohta

Vaatame keerulisemat nÀiteks, mis nÀitab nutikust lepingu vÔimalusi selgemalt.

Sissejuhatus nutilepingutesse

Oletame, et on kolm noormeest, kes on hiljuti asunud ĂŒhte ĂŒhiselamusse. Nad kĂ”ik soovivad osta oma tuppa kĂŒlmkapi, mida nad saavad ĂŒhiselt kasutada. Üks neist on nĂ”ustunud koguma vajamineva summa kĂŒlmiku ostmiseks ja pidama lĂ€birÀÀkimisi mĂŒĂŒjaga. Kuid nad on ĂŒksteist alles hiljuti tundma Ă”ppinud ja usaldust nende vahel pole piisavalt. Ilmselgelt riskivad kaks neist, olles kolmanda raha usaldanud. Samuti peavad nad jĂ”udma kokkuleppele mĂŒĂŒja valimisel.

Nad vÔivad kasutada escrow-teenust, valides vahendaja, kes jÀlgib tehingu tÀitmist ja lahendab vaidlusi, kui need peaksid tekkima. SeejÀrel, kokkuleppides, koostavad nad nutikonto ja kirja pandud tingimused.

Esimene tingimus on see, et enne kindla aja saabumist, nĂ€iteks ĂŒhe nĂ€dala jooksul, peab vastavale nutilepingukontole saabuma kolm makset kindlatest aadressidest kindla summa eest. Kui seda ei juhtu, lĂ”petab nutileping oma tĂ€itmise ja tagastab kĂ”ik mĂŒndid osalistele. Kui tingimus tĂ€idetakse, siis mÀÀratakse mĂŒĂŒja ja vahendaja identifikaatorid ning kontrollitakse tingimust, et kĂ”ik osalised on nĂ”us mĂŒĂŒja ja vahendaja valikuga. Kui kĂ”ik tingimused on tĂ€idetud, siis kantakse fondid edasi mÀÀratud aadressidele. Sarnane lĂ€henemine vĂ”ib kaitsta osalisi petmisest igalt poolt ning vĂ€listab ĂŒldiselt vajaduse usaldada.

Selle nĂ€ite kaudu nĂ€eme pĂ”himĂ”tet, et vĂ”imalus samm-sammult mÀÀrata tingimusi iga tingimuse tĂ€itmiseks vĂ”imaldab luua sĂŒsteeme mis tahes keerukuse ja sĂŒgava sisemise tasemega. Lisaks saab nutilepingus esmalt mÀÀrata esimese tingimuse ja alles pĂ€rast selle tĂ€itmist mÀÀrata jĂ€rgmise tingimuse parameetrid. TeisisĂ”nu, tingimus on formaalselt mÀÀratletud, kuid selle parameetrid vĂ”ivad olla mÀÀratud juba selle töö kĂ€igus.

Nutilepingute klassifitseerimine

Klassifitseerimiseks saab mÀÀrata erinevaid kriteeriumigruppide rĂŒhmi. Siiski on praegusel tehnoloogia arengutasemel reaalselt olulised neli neist.

Nutilepinguid saab eristada nende tÀitmis keskkonna jÀrgi, mis vÔib olla kas tsentraliseeritud vÔi detsentraliseeritud. Detsentraliseerimise korral omame nutilepingute tÀitmisel palju suuremat sÔltumatust ja tÔrketaluvust.

Neid saab eristada ka tingimuste mÀÀramise ja tĂ€itmise protsessi kaudu: need vĂ”ivad olla vabalt programmeeritavad, piiratud vĂ”i eeldefineeritud, st rangelt tĂŒpiseeritud. Kui nutilepingute platvormil eksisteerib ainult 4 kindlat nutilepingut, saab nende parameetreid mÀÀrata vabalt. SeetĂ”ttu on nende mÀÀramine palju lihtsam: valime lepingud loetelust ja edastame parameetrid.

Algatamise viisi pÔhjal on olemas automatiseeritud nutilepingud, mis tÀhendab, et need tÀituvad iseenesest, kui mÀÀratud tingimused tÀituvad. Samuti on olemas lepingud, kus tingimused on mÀÀratud, kuid platvorm ei kontrolli nende tÀitmist automaatselt; neid tuleb eraldi algatada.

Lisaks erinevad nutilepingud privaatsuse taseme jÀrgi. Need vÔivad olla kas tÀielikult avatud, osaliselt vÔi tÀielikult konfidentsiaalsed. Viimane tÀhendab, et vÀlised vaatlejad ei nÀe nutilepingute tingimusi. Siiski on privaatsuse teema ÀÀrmiselt lai ja seda oleks parem kÀsitleda eraldi kÀesolevast artiklist.

Allpool kÀsitleme kolme esimest kriteeriumi, et tuua rohkem selgust arutletavale teemale.

Nutilepingud tÀitmise keskkonna jÀrgi

Sissejuhatus nutilepingutesse

TĂ€itmisse keskkonna jĂ€rgi eristatakse nutilepingute keskseid ja detsentraliseeritud platvorme. Kesksete digitaalsete lepingute puhul kasutatakse ĂŒhte teenust, kus on ainult ĂŒks valideerija, ja vĂ”ib olla varundus- ja taastusteenus, mis on samuti keskse halduse all. On olemas ĂŒks andmebaas, mis sisaldab kogu vajalikku teavet nutilepingu tingimuste seadmiseks ja selle andmebaasi teenuse kaudu arvestatava vÀÀrtuse jaotamiseks. Sellise keskses teenuses on klient, kes esitab teatud pĂ€ringud, et mÀÀrata tingimused ja kasutada neid lepinguid. Kuna platvorm on keskne, vĂ”ivad autentimise mehhanismid olla vĂ€hem usaldusvÀÀrsed kui krĂŒptovaluutades.

NĂ€iteks vĂ”ib tuua mobiilside operaatorid. Oletame, et konkreetne operaator haldab oma serverites keskse sĂŒsteemi kaudu liiklusarvestust, mis vĂ”ib toimuda erinevates vormingutes, nagu hÀÀleseadmed, SMS-edastamine, mobiilse interneti liiklus ja erinevad standardid, samuti jĂ€lgib kasutajate kontode jÀÀke. Vastavalt sellele saab mobiilside operaator koostada lepingud pakutavate teenuste ja nende tasumise kohta erinevate tingimustega. Sellisel juhul on lihtne mÀÀrata tingimusi, nĂ€iteks „saada SMS sellise koodiga sellele numbrile ja saad sellised liikluse jaotamise tingimused”.

VĂ”ib tuua veel ĂŒhe nĂ€ite: traditsioonilised pangad, millel on laiaulatuslikud internetipanganduse vĂ”imalused, ja sellised lihtsad lepingud nagu regulaarnaatlused, saabumiste automaatne konverteerimine, automaatne protsent mÀÀratud kontole jne.

Kui rÀÀkida nutilepingutest detsentraliseeritud tĂ€itmiskeskkonnas, siis meil on validaatorite rĂŒhm. Ideaalis vĂ”ib validaatoriks olla tegelikult keegi. Andmebaasi sĂŒnkroniseerimise protokolli ja konsensuse saavutamise kaudu omame mingit ĂŒhist andmebaasi, mis hakkab nĂŒĂŒd talletama kĂ”iki tehinguid rangelt mÀÀratletud lepingutega, mitte mingeid tingimusi, mille formaadid sageli muutuvad ja avatud spetsifikatsiooni ei ole. Siin sisaldavad tehingud juhiseid lepingute tĂ€itmiseks vastavalt rangale spetsifikatsioonile. See spetsifikatsioon on avatud ja seega saavad platvormi kasutajad teha auditi ja valideerida nutilepingud. Siin nĂ€eme, et detsentraliseeritud platvormid ĂŒletavad kesksetele platvormidele sĂ”ltumatuse ja töökindluse osas, kuid nende projekteerimine ja hooldus on seejuures palju keerulisem.

Nutilepingud tingimuste seadmiseks ja tÀitmiseks

Vaatame nĂŒĂŒd lĂ€hemalt, kuidas nutilepingud vĂ”ivad erineda tingimuste mÀÀramise ja tĂ€itmise viisi poolest. Keskendume nutilepingutele, mida saab programmeerida meelevaldselt ja mis on Turingi tĂ€ielikud. Turingi tĂ€ielik nutileping vĂ”imaldab mÀÀrata praktiliselt igasuguseid algoritme lepingutingimustena: kirjutada tsĂŒkleid, mingeid tĂ”enĂ€osuse arvutamise funktsioone ja sarnast — kuni omaenda elektroonilise allkiri algoritmideni. Sellisel juhul rÀÀgime tĂ”eliselt meelevaldse loogika kirjutamisest.

Erinevad ka meelevaldsed nutilepingud, kuid mitte Turingi tĂ€ielikud. Siia alla kuuluvad Bitcoin ja Litecoin oma skriptiga. See tĂ€hendab, et saab meelevaldselt kasutada ainult teatud operatsioone, kuid tsĂŒkleid ja oma algoritme kirjutada ei saa.

Lisaks on olemas ka sellised nutilepingute platvormid, mis rakendavad eelnevalt seadistatud nutilepinguid. Nende hulka kuuluvad Bitshares ja Steemit. Bitshares'il on terve rida nutilepinguid kaubanduseks, konto haldamiseks, platvormi enda ja selle parameetrite haldamiseks. Steemit on sarnane platvorm, kuid see keskendub mitte tokenite vÀljastamisele ja kaubandusele, nagu Bitshares, vaid blogimisele, st see salvestab ja töötleb sisu detsentraliseeritud viisil.

Turingi tÀielikele lepingutele vÔib omistada platvormi Ethereum ja RootStock, mis on veel arendamise faasis. SeetÔttu peatume jÀrgmisena natuke pÔhjalikumalt nutilepingute platvormil Ethereum.

Nutilepingud algatamisviisi jÀrgi

Selle jĂ€rgi, kuidas nutilepingud algatatakse, saab neid jagada vĂ€hemalt kaheks rĂŒhmaks: automatiseeritud ja kĂ€sitsi (mitte automatiseeritud). Automatiseeritud lepingute puhul toimub kogu tĂ€itmine automaatselt, kui kĂ”ik teadaolevad parameetrid ja tingimused on tĂ€idetud, st ei nĂ”ua lisatehingute saatmist ega tĂ€iendavate tasude maksmist iga jĂ€rgmise tĂ€itmise korral. Platvormil on kĂ”ik vajalikud andmed, et arvutada, kuidas nutileping lĂ”peb. Selle loogika ei ole juhuslik, vaid eelnevalt mÀÀratletud ning kĂ”ik see on etteaimatav. Seega on vĂ”imalik eelnevalt hinnata nutilepingute tĂ€itmise keerukust, kasutada selle jaoks mingit konstantsset tasu ning kĂ”ik protsessid tema tĂ€itmise kĂ€igus toimuvad tĂ”husamalt.

Ühelt poolt, et kasutada tarkvaraga programmeeritavat nutilepingut, pole tĂ€itmine automatiseeritud. Sellise nutilepingu kĂ€ivitamiseks on iga sammu korral vajalik luua uus tehing, mis kutsub ĂŒles jĂ€rgmise tĂ€itmise vĂ”i nutilepingu jĂ€rgmise meetodi, tasuda vastav tasu ja oodata tehingu kinnitamist. TĂ€itmine vĂ”ib lĂ”ppeda nii edukalt kui ka ebaĂ”nnestunult, kuna nutilepingu kood on suvaline ja vĂ”ivad tekkida ettenĂ€gematud olukorrad, nagu lĂ”putu tsĂŒkkel, teatud parameetrite ja argumentide puudumine, töötlemata erandid jne.

Ethereum'i kontod

Ethereum'i konto tĂŒĂŒbid

Vaatame, milliseid kontosid saab Ethereum'i platvormil luua. Siin on olemas ainult kaks tĂŒĂŒpi kontot, rohkem variante ei ole. Esimene tĂŒĂŒp on kasutajakonto ja teine – lepingu konto. Selgitame vĂ€lja, millega nad erinevad.

Kasutaja kontot hallatakse ainult isikliku digitaalallkirja vÔtmega. Konto omanik genereerib oma digitaalallkirja vÔtmete paari ECDSA (Elliptic Curve Digital Signature Algorithm) algoritmi alusel. Selle konto olekut saavad muuta ainult selle vÔtmega allkirjastatud tehingud.

Nutilepingu konto jaoks on ette nĂ€htud eraldi loogika. Seda saab hallata ainult eelnevalt mÀÀratud programmikoodi kaudu, mis mÀÀrab tĂ€ielikult nutilepingu kĂ€itumise: kuidas see teatud tingimustes oma mĂŒnte haldab, millise kasutaja algatusel ja milliste tĂ€iendavate tingimuste alusel need mĂŒndid jagatakse. Kui teatud aspektid ei ole arendajate poolt programmikoodis ette nĂ€htud, vĂ”ivad tekkida probleemid. NĂ€iteks vĂ”ib nutileping saavutada kindla oleku, kus see ei aktsepteeri edasiste toimingute algatamist ĂŒheltki kasutajalt. Sellisel juhul jÀÀvad mĂŒndid tegelikult kĂŒlmutatuks, kuna nutileping ei vĂ”imalda sellest olekust vĂ€ljuda.

Kuidas luuakse kontosid Ethereumis

Kasutaja konto puhul genereerib omanik ise ECDSA vĂ”tmepaari. Oluline on mĂ€rkida, et Ethereum kasutab elektroonilistes allkirjades tĂ€pselt sama algoritmi ja sama elliptilist kĂ”verat nagu Bitcoin, kuid aadress arvutatakse veidi teistmoodi. Siin ei kasutata topelthashimist nagu Bitcoinis, vaid on ette nĂ€htud ĂŒhekordne hashimine Keccak-funktsiooni abil, mille pikkus on 256 bitti. Saadud vÀÀrtusest lĂ”igatakse Ă€ra madalamad bitid, tĂ€psemalt 160 madalamat bitti hash-funktsiooni vĂ€ljundist. Tulemusena saame Ethereumis aadressi, mis tegelikult vĂ”tab 20 bitti.

MĂ€rgem, et Ethereumis kodeeritakse konto ID hex-formaadis ilma kontrollsummata, erinevalt Bitcoinist ja paljusid teistest sĂŒsteemidest, kus aadress kodeeritakse 58-pĂ”hisesse arvestussĂŒsteemi koos kontrollsummaga. See tĂ€hendab, et Ethereumis tuleb konto ID-dega olla ettevaatlik: isegi ĂŒks viga ID-s viib kindlasti mĂŒntide kadumiseni.

Oluline omadus on see, et kasutaja konto ĂŒldise andmebaasi tasandil luuakse siis, kui ta aktsepteerib esimest sissetulevat makset.

Nutilepingu konto loomise osas rakendatakse tÀiesti teistsugust lÀhenemist. Algselt kirjutab keegi kasutajatest nutilepingu lÀhtekoodi, seejÀrel lÀbib kood platvormi Ethereum spetsiaalset kompilaatorit, saades bytecode'i oma Ethereum'i virtuaalmasinale. Saadud bytecode lisatakse spetsiaalsesse tehingu vÀljale. See allkirjastatakse algataja konto nimel. Edasi levitatakse see tehing vÔrgus ja paigutatakse nutilepingu kood. Tehingutasu ning vastavalt ka lepingu tÀitmise tasu lahutatakse algataja konto saldost.

Iga nutileping sisaldab kindlasti oma konstruktorit (seda lepingut). See vĂ”ib olla tĂŒhi vĂ”i vĂ”ib sisaldada sisu. PĂ€rast konstruktorite tĂ€itmist luuakse nutilepingu konto identifikaator, mille abil saab saata mĂŒnte, kutsuda esile kindlaid nutilepingu meetodeid jne.

Ethereum'i tehingustruktuur

Et oleks selgem, vaatame Ethereum'i tehingustruktuuri ja nutika lepingu koodinÀidet.

Sissejuhatus nutilepingutesse

Ethereum'i tehing koosneb mitmest vÀljast. Esimene neist, nonce, on tehingu jÀrjestusnumber vÔrreldes konto endaga, mis selle levitab ja on selle autor. See on vajalik, et eristada tehingu koopiaid, et vÀltida olukorda, kus sama tehingut vÔetakse vastu kaks korda. TÀnu identifikaatori kasutamisele on igal tehingul ainulaadne hash-vÀÀrtus.

Edasi jÀrgneb selline vÀli nagu gas price. Siin nÀidatakse hinda, mille eest alusvaluuta Ethereum vahetatakse gas'i vastu, millega tasutakse nutika lepingu tÀitmise ja virtuaalmasina ressursi eraldamise eest. Mida see tÀhendab?

Bitcoini transaktsioonide tasud makstakse otse alusvaluutas — ise Bitcoini. See on vĂ”imalik tĂ€nu lihtsatele arvutamismehhanismidele: maksame tĂ€pselt andmemahtu, mis transaktsioonis sisaldub. Ethereumis on olukord keerulisem, kuna on vĂ€ga keeruline arvestada andmemahtu transaktsiooni pĂ”hjal. Siin vĂ”ib transaktsioon sisaldada ka programmeerimiskoodi, mis jooksutab virtuaalmasinas, ja iga virtuaalmasina operatsioon vĂ”ib omada erinevat keerukust. Samuti on olemas operatsioonid, mis eraldavad mĂ€lu muutuja jaoks. Neil on oma keerukus, millest sĂ”ltub iga operatsiooni tasu.

Iga operatsiooni hind gas'i ekvivalentina jÀÀb konstantseks. See on spetsiaalselt sisse toodud selleks, et mÀÀrata iga operatsiooni konstantne hind. Olenevalt vĂ”rgu koormusest gas price muutub, st koefitsient, mille alusel alusvaluuta konverteeritakse selleks abivĂ€ikeseks ĂŒhiseks tasu maksmiseks.

Ethereum'i tehingute veel ĂŒks omadus on see, et selle baidikood, mis on mĂ”eldud tĂ€itmiseks virtuaalses masinas, tĂ€idetakse kuni selle lĂ”petamiseni mĂ”ne tulemusega (Ă”nnestumine-e Ă”nnestumine) vĂ”i kuni lĂ”ppeb kindel hulk mĂŒnti, mis on ette nĂ€htud teenustasu katmiseks. Just nimelt sellepĂ€rast, et vĂ€ltida olukorda, kus saatja kontolt kulutatakse kĂ”ik mĂŒndid teenustasu katteks (nĂ€iteks kui virtuaalses masinas kĂ€ivitub lĂ”putu tsĂŒkkel), on olemas jĂ€rgmine vĂ€li — start gas (seda tuntakse sageli ka kui gas limit) — see mÀÀratleb maksimaalse mĂŒntide hulga, mida saatja on valmis kulutama konkreetse tehingu tĂ€itmiseks.

JĂ€rgmine vĂ€li on nimetatud destination address. Siia kantakse sisse saajate aadress vĂ”i konkreetse nutilepinguga aadress, mille meetodeid kutsutakse. PĂ€rast seda jĂ€rgneb vĂ€li value, kuhu kantakse sisse mĂŒndihulk, mis saadetakse aadressile destination address.

SeejĂ€rel asub huvitav vĂ€li nimega data, kuhu mahub kogu struktuur. See ei ole eraldi vĂ€li, vaid terviklik struktuur, kus mÀÀratakse virtuaalmasina kood. Siia saab paigutada vabalt valitud andmeid — selleks on olemas eraldi reeglid.

Ja viimane vĂ€li nimetatakse signature. See sisaldab samaaegselt nii autori elektroonilist allkirja selle tehingu jaoks kui ka avalikku vĂ”tit, millega seda allkirja kontrollitakse. Avalikust vĂ”tme kaudu saab tuletada saatja konto identifitseerija selle tehingu jaoks, mis tĂ€hendab, et saab unikaalselt tuvastada saatja konto sĂŒsteemis. Tehingu struktuuri osas oleme pĂ”hiteema vĂ€lja selgitanud.

NĂ€ide nutilepingust Soliditys

Vaatame nĂŒĂŒd lĂ€hemalt kĂ”ige lihtsamat nutilepingut nĂ€ite kaudu.

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);
    }
}

Ülaltoodud on lihtsustatud lĂ€htekood, mis vĂ”ib sĂ€ilitada kasutajate mĂŒnte ja neid nĂ”udmisel tagastada.

Seega on olemas Bank nutileping, millel on jĂ€rgmised funktsioonid: see kogub oma kontole mĂŒnte, st tehingu kinnitamisel ja sellise nutilepingu paigutamisel luuakse uus konto, mis vĂ”ib sisaldada mĂŒnte; see mĂ€letab kasutajaid ja mĂŒntide jaotust nende vahel; sellel on mitmeid viise kontode haldamiseks, st on vĂ”imalik tĂ€iendada, vĂ€lja vĂ”tta ja kontrollida kasutaja bilanssi.

Vaadakem nĂŒĂŒd igat rida lĂ€htekoodis. Sellel lepingul on konstantseid vĂ€lju. Üks neist on aadressi tĂŒĂŒpi ja seda nimetatakse owner. Siin leping mĂ€letab kasutaja aadressi, kes selle nutilepingu lĂ”i. Edasi on dĂŒnaamiline struktuur, mis salvestab vastavused kasutajate aadresside ja bilansside vahel.

SeejĂ€rel tuleb meetod Bank — see on nimetatud samamoodi nagu leping. Vastavalt sellele on see tema konstruktor. Siin toimub muutujale owner selle aadressi mÀÀramine, kes on paigutanud selle nutilepingu vĂ”rku. See on ainus, mis selle konstruktoris toimub. See tĂ€hendab, et msg on antud juhul just need andmed, mis on edastatud virtuaalsesse masinasse koos tehinguga, mis sisaldab kogu selle lepingu koodi. Vastavalt sellele on msg.sender selle tehingu autor, mis paigutab selle koodi. Tema saab olema nutilepingu omanik.

Meetod deposit vĂ”imaldab edastada tehinguga kindla arvu mĂŒnte lepingu kontole. Antud juhul, kui nutileping saab need mĂŒnte, hoiab ta neid enda saldos, kuid struktuuri balances kirjutatakse, kes tĂ€pselt oli nende mĂŒntide saatja, et teada, kellele need kuuluvad.

JĂ€rgmine meetod nimetatakse withdraw ja see vĂ”tab ĂŒhe parameetri - summa mĂŒnte, mida keegi soovib sellest pangast vĂ€lja vĂ”tta. Siin kontrollitakse, kas kasutaja, kes seda meetodit kutsub, omab piisavalt mĂŒnte saldo peal, et neid edastada. Kui mĂŒnte on piisavalt, tagastab nutileping kutse tegijale selle summa mĂŒnte.

SeejÀrel tuleb kasutaja praeguse saldo kontrollimise meetod. Kutsuja, kes seda meetodit kutsub, kasutatakse selle saldoga smart lepingus. Oluline on mÀrkida, et selle meetodi modifikaator on view. See tÀhendab, et meetod ei muuda oma klassi muutujaid ning on tegelikult ainult lugemise meetod. Eraldi tehingut ei luleta selle meetodi kutsumise jaoks, komisjonitasu ei maksta ning kÔik arvutused tehakse kohalikult, pÀrast mida kasutaja saab tulemuse.

Kill meetod on vajalik, et hĂ€vitada nutilepingute olek. Siin on lisakontroll, kas meetodi kutsuja on selle lepinguga seotud omaniku. Kui on, siis leping hukkub automaatselt ja hĂ€vitamismeetod vĂ”tab ĂŒhe parameetri — konto identifikaatori, millele leping saadab kĂ”ik kaugendatud mĂŒndid, mis jÀÀvad selle saldole. Sellisel juhul saadetakse allesjÀÀnud mĂŒndid automaatselt omanikule.

Kuidas töötab Ethereum'i tÀielik soliit?

Vaadakem skeemist, kuidas nutilepingute tÀitmine toimub Ethereum'i platvormil ja kuidas töötab tÀielik soliit.

Sissejuhatus nutilepingutesse

Ethereum'i tÀielik soliit peab sisaldama vÀhemalt nelja moodulit.
Esimene on, nagu iga detsentraliseeritud protokolli puhul, P2P vĂ”rgumoodul — moodul, mis vastutab ĂŒhenduse ja teiste soliitidega suhtlemise eest, kus toimub plokkide, tehingute ja teabe vahetus teiste soliitide kohta. See on traditsiooniline komponent kĂ”igis detsentraliseeritud krĂŒptovaluutades.

JÀrgmiseks on meil plokiahela andmete salvestamise, töötlemise, prioriteetse haru valimise, plokkide lisamise, plokkide eemaldamise, nende plokkide kontrollimise jm moodul.

Kolmas moodul kannab nime EVM (Ethereum virtuaalmasin) — see on virtuaalne masin, mis vĂ”tab vastu Ethereum'i tehingute baitkoodi. See moodul vĂ”tab etteantud konto praeguse oleku ja rakendab muudatusi selle olekus saadud baitkoodi pĂ”hjal. Iga vĂ”rgu sĂ”lme virtuaalmasina versioon peab olema sama. Arvutused toimuvad kĂ”igis Ethereum'i sĂ”lmedes tĂ€iesti ĂŒhtlaselt, kuid need toimuvad asĂŒnkroonselt: keegi kontrollib ja aktsepteerib selle tehingu varem, st tĂ€idab kogu selles sisalduva koodi, ja keegi hiljem. Vastavalt sellele, kui tehing luuakse, levitab see end vĂ”rku, sĂ”lmed vĂ”tavad selle vastu ja kontrollimise hetkel tĂ€pselt nii, nagu Bitcoini puhul tĂ€idetakse Bitcoin Script'i, tĂ€idetakse siin virtuaalmasina baitkoodi.

Tehingut loetakse kinnitatud, kui kĂ”ik selle sisu koodid on tĂ€idetud, on loodud uusi olekuid teatud kontole ning seda sĂ€ilitatakse kuni selgub, kas tehing on rakendatud vĂ”i mitte. Kui tehing on rakendatud, siis seda olekuid loetakse mitte ainult tĂ€idetuks, vaid ka kehtivaks. On olemas andmebaas, mis salvestab iga konto olekud iga vĂ”rgu sĂ”lme jaoks. Kuna kĂ”ik arvutused toimuvad ĂŒhtemoodi ja plokiahela olek on identne, on ka kĂ”ikide kontode olekute andmebaas sama igas sĂ”lmes.

MĂŒĂŒdid ja piirangud nutilepingute kohta

Mis puudutab piiranguid, mis kehtivad Ethereumile sarnastele nutilepingute platvormidele, siis vÔib tuua jÀrgmised:

  • koodi tĂ€itmine;
  • mĂ€lumahutite eraldamine;
  • plokiahela andmed;
  • maksete saatmine;
  • uue lepingu loomine;
  • muude lepingute vĂ€ljakutsumine.

Vaatame lĂ€hemalt, millised piirangud on mÀÀratud virtuaalmasinale, ja hajutame mĂ”ned mĂŒĂŒdid nutilepingutest. Virtuaalmasinal, mis ei pruugi olla ainult Ethereumis, vaid ka sarnastes platvormides, on vĂ”imalik teostada tĂ”eliselt juhuslikke loogilisi operatsioone, st kirjutada koodi, mis seal tĂ€idetakse, ning lisada mĂ€lumahtu. Kuid iga operatsiooni ja iga tĂ€iendava mĂ€lumahu eest tasutakse eraldi tasu.

Lisaks saab virtuaalmasin lugeda andmeid plokiahela andmebaasist, et kasutada neid andmeid nutilepingute teatud loogika tÀitmise kÀivitajana. Virtuaalmasin suudab luua ja saata tehinguid, luua uusi lepinguid ning kutsuda esile juba vÔrgus avaldatud teiste nutilepingute meetodeid: need on olemas, ligipÀÀsetavad jne.

KĂ”ige levinum mĂŒĂŒt on see, et Ethereum'i nutilepingud saavad kasutada teavet mis tahes veebiallikatest oma tingimustes. TĂ”de on see, et virtuaalne masin ei saa saata vĂ”rgupĂ€ringut vĂ€lisele teabeallikale internetis, seega ei saa kirjutada sellist nutilepingut, mis jagab vÀÀrtust kasutajate vahel sĂ”ltuvalt nĂ€iteks sellest, mis ilm on vĂ€ljas, kes on mĂ”nes meistrivĂ”istluses vĂ”itnud vĂ”i mĂ”ne muu vĂ€lismaailma sĂŒndmuse pĂ”hjal, kuna teavet nende sĂŒndmuste kohta lihtsalt ei ole platvormi andmebaasis. Seega ei ole blokkhaaval selle kohta midagi. Kui seal ei ilmu midagi, ei saa virtuaalne masin neid andmeid ka triggeritena kasutada.

Ethereum'i puudused

Loetleme mĂ”ned peamised. Esiteks on Ethereumi nutilepingute projekteerimisel, arendamisel ja testimisel teatavad raskused. (Ethereumis kasutatakse nutilepingute kirjutamiseks Solidity keelt.) TĂ”epoolest, praktika nĂ€itab, et vĂ€ga suur protsent kĂ”igist vigadest on tingitud inimfaktori mĂ”just. See on tĂ”sine probleem ka juba kirjutatud Ethereumi nutilepingute puhul, mille keerukus on keskmine vĂ”i kĂ”rgem. Kui lihtsate nutilepingute puhul on veaoht vĂ€ike, siis keerukates nutilepingutes esineb sageli vigu, mis viivad raha varastamiseni, nende kĂŒlmutamiseni, nutilepingute ettenĂ€gematule hĂ€vitamisele jne. Selliseid juhtumeid on juba palju teada.

Teine puudus seisneb selles, et virtuaalmasin ise pole ideaalne, kuna see on samuti inimeste kirjutatud. See vÔib tÀita juhuslikke kÀske ja just selles peitub haavatavus: teatud viisil on vÔimalik konfigureerida rida kÀske, mis viivad ettenÀgematute tagajÀrgedeni. See on vÀga keeruline valdkond, kuid on olemas juba mitmeid uuringuid, mis nÀitavad, et need haavatavused esinevad praeguses Ethereum'i versioonis ja need vÔivad viia paljude nutilepingute töökatkestuseni.

Veel ĂŒks suur keerukus, mida vĂ”ib pidada puuduseks. See seisneb selles, et praktiliselt vĂ”i tehniliselt on vĂ”imalik jĂ”uda olukorrani, kus kui kompileerida nutilepingu baitkood, mis töötab virtuaalmasinas, on vĂ”imalik mÀÀratleda teatud spetsiifiline tegevuste jĂ€rjekord. Kui need tegevused kokku tĂ€idetakse, koormavad need virtuaalmasinat vĂ€ga tugevalt ja aeglustavad selle tööd proportsioonitamata tasu vĂ”rreldes nendest tegevustest tasutud tasuga.

Minevik, et Ethereum on kogenud arenguperioode, mil paljud inimesed, kes said hĂ€sti aru virtuaalsest masinast, avastasid erinevaid turvaprobleeme. Tegelikult maksid tehingud vĂ€ga madalat tasu, kuid vĂ€hendasid mĂ€rkimisvÀÀrselt kogu vĂ”rgu töövĂ”imet. Neid probleeme on vĂ€ga keeruline lahendada, kuna tuleb kĂ”igepealt mÀÀratleda need, teiseks korrigeerida tehingute tĂ€itmise hinna ning kolmandaks lĂ€bi viia kĂ”va haru (hardfork), mis tĂ€hendab kĂ”ikide vĂ”rgu sĂ”lmede uuendamist uuele tarkvaraversioonile ja seejĂ€rel nende muudatuste ĂŒheaegset aktiveerimist.

KĂŒsimus, mis puudutab Ethereum'i, on see, et on tehtud palju uuringuid ning saadud arvestatav praktikakogemus: nii positiivne kui ka negatiivne. Siiski jÀÀvad alles keerukused ja turvavead, millega tuleb veel kuidagi tegeleda.

Nii on artikli sisuline osa lĂ”petatud, liikume edasi kĂŒsimuste juurde, mis esinevad ĂŒsna sageli.

Korduvad kĂŒsimused

— Kui kĂ”ik osalised kehtivast nutilepingust soovivad muuta tingimusi, kas nad saavad selle nutilepingut mitme allkirjaga tĂŒhistada ja seejĂ€rel luua uue nutilepingu uuendatud tĂ€itmise tingimustega?

Siin on vastus kahetine. Miks? Sest ĂŒhel poolt on nutileping ĂŒhekordselt defineeritud ja see ei eelda mingeid muudatusi, teisest kĂŒljest vĂ”ib see sisaldada eelnevalt mÀÀratletud loogikat, mis vĂ”imaldab tingimuste tĂ€ielikku vĂ”i osalist muutmist. See tĂ€hendab, et kui soovite oma nutilepingus midagi muuta, peate eelnevalt mÀÀrama tingimused, mille alusel saate neid tingimusi uuendada. Seega, ainult sellise ettevaatliku lĂ€henemisega on vĂ”imalik lepingut uuendada. Kuid ka siin vĂ”ib tekkida probleeme: teha mĂ”ni viga ja saada vastava haavatavuse. SeetĂ”ttu tuleb selliseid asju vĂ€ga detailselt ja hoolikalt projekteerida ning testida.

— Aga kui vahendaja puutub kokku ĂŒhe osalise osapoolega: escrow vĂ”i nutilepinguga? Kas vahendaja on nutilepingus kohustuslik?

Mediatoor ei ole nutilepingus kohustuslik. Seda ei pruugi olla. Kui seoses escrow’ga satuvad mediatoor ja ĂŒks osalistest kokku leppima, siis jah, see skeem kaotab jĂ€rsult oma vÀÀrtuse. SeetĂ”ttu valitakse mediatoorid nii, et neile usaldavad kĂ”ik osalised, kes antud protsessis on kaasatud. Vastavalt sellele ei edasta te lihtsalt mĂŒnte multisignatuuri aadressile sellise mediatooriga, kellele te ei usalda.

— Kas on vĂ”imalik ĂŒhe tehinguga Ethereumiga saata palju erinevaid mĂŒnte oma aadressilt erinevatele sihtaadressidele, nĂ€iteks börsi aadressidele, kus neid mĂŒnte kaubeldakse?

See kĂŒsimus on hea ja puudutab Ethereum'i tehingumudelit ning selle erinevusi Bitcoin'i mudelist. Need erinevused on pĂ”himĂ”ttelised. Kui Ethereum'i tehingumudelis edastate mĂŒnte, siis need edastatakse lihtsalt ĂŒhelt aadressilt teisele, ilma tagasimakseta, lihtsalt konkreetne summa, mida olete mÀÀranud. TeisisĂ”nu, see ei ole raiskamata vĂ€ljundite (UTXO) mudel, vaid kontode ja vastavate saldode mudel. Ühe tehinguga on teoreetiliselt vĂ”imalik saata korraga mitmeid erinevaid tokene, kui kirjutada nutikalt sĂ”lmitud nutileping, kuid sellegipoolest tuleb teha palju tehinguid, luua leping, edastada sellele tokene ja mĂŒnte ning seejĂ€rel kutsuda vastav meetod. See nĂ”uab pingutusi ja aega, seega praktikas nii ei toimi ning kĂ”ik maksed Ethereum'is tehakse eraldi tehingutena.

— Üks mĂŒĂŒt Ethereum'i platvormi kohta on see, et ei saa kirjeldada tingimusi, mis sĂ”ltuvad vĂ€lisest internetiressursist, kuidas siis olla?

Lahendus seisneb selles, et ise nutileping vĂ”ib ette nĂ€ha ĂŒhe vĂ”i mitu nii nimetatud usaldusvÀÀrset oraaklit, mis koguvad andmeid vĂ€lismaailma olukorra kohta ja edastavad need nutilepingutesse spetsiaalsete meetodite kaudu. Ise leping peab tĂ”eks neid andmeid, mis ta on saanud usaldusvÀÀrsetelt allikatelt. Suurema usaldusvÀÀrsuse saavutamiseks valitakse lihtsalt suurem rĂŒhm oraakleid, et minimeerida nende kokkuleppe riski. Ise leping ei pruugi arvestada andmeid oraaklitest, mis on vastuolus enamuse arvamusega.

Selle teema kohta on juttu ĂŒhes Blockchaini veebikursuse loengus — “Sissejuhatus nutilepingutesse”.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster