Johdatus älykkäisiin sopimuksiin

Tässä artikkelissa tarkastellaan, mitä älysopimukset ovat, mitä ne ovat, tutustumme erilaisiin älykkäisiin sopimusalustoihin, niiden ominaisuuksiin ja keskustelemme myös siitä, miten ne toimivat ja mitä etuja ne voivat tuoda. Tämä materiaali on erittäin hyödyllinen lukijoille, jotka eivät ole hyvin perehtyneet älykkäiden sopimusten aiheeseen, mutta haluavat päästä lähemmäksi sen ymmärtämistä.

Normaali sopimus vs. älykäs sopimus

Ennen kuin syvennymme yksityiskohtiin, otetaan esimerkkinä paperille määritellyn tavallisen sopimuksen ja digitaalisesti esitettävän älysopimuksen eroista.

Johdatus älykkäisiin sopimuksiin

Miten tämä toimi ennen älykkäiden sopimusten tuloa? Kuvittele joukko ihmisiä, jotka haluavat luoda tietyt säännöt ja ehdot arvojen jakamiselle sekä tietyn mekanismin takaamaan tämän jaon toteuttamisen annettujen sääntöjen ja ehtojen mukaisesti. Sitten he kokoontuivat, laativat paperin, johon he kirjoittivat tunnistetietonsa, ehdot, arvot, päivämäärät ja allekirjoittivat. Tämän sopimuksen on myös vahvistanut luotettava osapuoli, kuten notaari. Lisäksi nämä ihmiset menivät eri suuntiin paperikopiollaan tällaisesta sopimuksesta ja alkoivat suorittaa joitain toimia, jotka eivät ehkä vastanneet itse sopimusta, eli he tekivät yhden asian, mutta paperilla varmennettiin, että heidän pitäisi tehdä jotain Täysin erilainen. Ja miten tästä tilanteesta pääsee eroon? Itse asiassa yhden ryhmän jäsenistä on otettava tämä paperi, otettava todisteita, vietävä se oikeuteen ja varmistettava, että sopimus ja todelliset toimet ovat yhdenmukaisia. Usein tämän sopimuksen oikeudenmukainen täytäntöönpano on vaikeaa, mikä johtaa epämiellyttäviin seurauksiin.

Mitä voidaan sanoa älykkäistä sopimuksista? Niissä yhdistyvät sekä mahdollisuus kirjoittaa sopimusehdot että niiden tiukan täytäntöönpanon mekanismi. Jos ehdot on asetettu ja vastaava tapahtuma tai pyyntö on allekirjoitettu, niin kun pyyntö tai tapahtuma on hyväksytty, ehtoja ei ole enää mahdollista muuttaa tai vaikuttaa niiden toteutumiseen.

Käytettävissä on yksi validaattori tai koko verkko sekä tietokanta, joka tallentaa kaikki suoritettaviksi lähetetyt älykkäät sopimukset tiukassa kronologisessa järjestyksessä. On myös tärkeää, että tämän tietokannan on sisällettävä kaikki laukaisuehdot älykkään sopimuksen toteuttamiseksi. Lisäksi sen on otettava huomioon juuri se arvo, jonka jakautuminen on kuvattu sopimuksessa. Jos tämä koskee jotakin digitaalista valuuttaa, tämän tietokannan tulisi ottaa se huomioon.

Toisin sanoen älykkäiden sopimusten validoijilla on oltava pääsy kaikkiin tietoihin, joita älykäs sopimus käyttää. Esimerkiksi yhtä tietokantaa tulisi käyttää digitaalisten valuuttojen, käyttäjien saldojen, käyttäjien tapahtumien ja aikaleimien kirjaamiseen samanaikaisesti. Silloin ehtona voi älysopimuksessa olla käyttäjän saldo tietyssä valuutassa, tietyn ajan saapuminen tai se, että tietty tapahtuma on suoritettu, mutta ei sen enempää.

Älykkään sopimuksen määritelmä

Yleisesti ottaen itse terminologian loi tutkija Nick Szabo, ja sitä käytettiin ensimmäisen kerran vuonna 1994, ja se dokumentoitiin vuonna 1997 artikkelissa, joka kuvaa älykkäiden sopimusten ideaa.

Älykkäät sopimukset edellyttävät, että suoritetaan jonkin verran arvonjaon automatisointia, joka voi riippua vain niistä ehdoista, jotka on ennalta määrätty. Yksinkertaisimmassa muodossaan se näyttää tiukasti määritellyn ehdon sopimukselta, jonka tietyt osapuolet allekirjoittavat.

Älykkäät sopimukset on suunniteltu minimoimaan luottamus kolmansiin osapuoliin. Joskus päätöksentekokeskus, josta kaikki riippuu, jää kokonaan pois. Lisäksi tällaiset sopimukset on helpompi tarkastaa. Tämä on seurausta tällaisen järjestelmän joistakin suunnitteluominaisuuksista, mutta useimmiten ymmärrämme älykkäällä sopimuksella hajautetun ympäristön ja toimintojen olemassaolon, joiden avulla kuka tahansa voi analysoida tietokantaa ja suorittaa täydellisen tarkastuksen sopimusten toteuttamisesta. Tällä varmistetaan suoja takautuvalta tietojen muutoksilta, jotka aiheuttaisivat muutoksia itse sopimuksen toiminnassa. Useimpien prosessien digitalisointi älysopimuksen luomisen ja käynnistämisen yhteydessä yksinkertaistaa usein teknologiaa ja niiden toteuttamisen kustannuksia.

Yksinkertainen esimerkki - Escrow-palvelu

Katsotaanpa hyvin yksinkertaista esimerkkiä. Se auttaa sinua ymmärtämään älykkäiden sopimusten toimivuutta ja ymmärtämään paremmin, missä tapauksissa niitä tulisi käyttää.

Johdatus älykkäisiin sopimuksiin

Se voidaan toteuttaa myös Bitcoinilla, vaikka tällä hetkellä Bitcoinia tuskin voi vielä kutsua täysimittaiseksi älykkäiden sopimusten alustaksi. Meillä on siis ostaja ja verkkokauppa. Asiakas haluaa ostaa näytön tästä kaupasta. Yksinkertaisimmassa tapauksessa ostaja suorittaa ja lähettää maksun, ja verkkokauppa hyväksyy sen, vahvistaa sen ja lähettää sitten tavarat. Tässä tilanteessa tarvitaan kuitenkin suurta luottamusta - ostajan täytyy luottaa verkkokauppaan koko näytön hinnasta. Koska verkkokaupalla voi olla huono maine ostajan silmissä, on olemassa riski, että kauppa jostain syystä maksun hyväksymisen jälkeen kieltäytyy palvelusta eikä lähetä tavaraa ostajalle. Siksi ostaja kysyy (ja vastaavasti verkkokauppa kysyy tämän kysymyksen), mitä voidaan tässä tapauksessa soveltaa tällaisten riskien minimoimiseksi ja tällaisten liiketoimien luotettavuuden lisäämiseksi.

Bitcoinin tapauksessa on mahdollista antaa ostajan ja myyjän valita itsenäisesti välittäjä. On monia ihmisiä, jotka ovat mukana ratkaisemassa kiistanalaisia ​​kysymyksiä. Ja osallistujamme voivat valita yleisestä välittäjien luettelosta sen, johon he luottavat. Yhdessä ne luovat 2/3 moniallekirjoitusosoitteen, jossa on kolme avainta ja kaksi allekirjoitusta millä tahansa kahdella avaimella tarvitaan kolikoiden kuluttamiseen kyseisestä osoitteesta. Yksi avain kuuluu ostajalle, toinen verkkokaupalle ja kolmas välittäjälle. Ja tällaiseen usean allekirjoituksen osoitteeseen ostaja lähettää tarvittavan summan näytön maksamiseen. Nyt kun myyjä näkee, että rahat on estetty joksikin aikaa hänestä riippuvaisessa moniallekirjoitusosoitteessa, hän voi lähettää näytön turvallisesti postitse.

Seuraavaksi ostaja vastaanottaa paketin, tarkastaa tavarat ja tekee päätöksen lopullisesta ostosta. Hän voi olla täysin samaa mieltä tarjotusta palvelusta ja allekirjoittaa avaimellaan kaupan, jossa hän siirtää kolikot moniallekirjoitusosoitteesta myyjälle, tai hän voi olla tyytymätön johonkin. Toisessa tapauksessa hän ottaa yhteyttä välittäjään kootakseen vaihtoehtoisen tapahtuman, joka jakaa kolikot eri tavalla.

Oletetaan, että näyttö saapui hieman naarmuuntuneena ja pakkauksessa ei ollut kaapelia tietokoneeseen liittämistä varten, vaikka verkkokaupan nettisivuilla sanottiin, että kaapeli pitäisi olla mukana. Sitten ostaja kerää tarvittavat todisteet todistaakseen sovittelijalle, että häntä on petetty tässä tilanteessa: hän ottaa kuvakaappauksia sivustosta, ottaa kuvan postin kuitista, ottaa kuvan näytön naarmuista ja osoittaa, että sinetti oli rikki ja kaapeli vedettiin ulos. Verkkokauppa puolestaan ​​kerää todisteensa ja välittää ne sovittelijalle.

Sovittelija on kiinnostunut tyydyttämään samanaikaisesti sekä ostajan närkästyksen että verkkokaupan edut (syy selviää myöhemmin). Kyseessä on kauppa, jossa usean allekirjoituksen osoitteesta saadut kolikot kulutetaan jossain suhteessa ostajan, verkkokaupan ja välittäjän välillä, koska hän ottaa osan itselleen palkkiona työstään. Oletetaan, että 90% kokonaissummasta menee myyjälle, 5% välittäjälle ja 5% korvaus ostajalle. Sovittelija allekirjoittaa tämän tapahtuman avaimellaan, mutta sitä ei voi vielä soveltaa, koska se vaatii kaksi allekirjoitusta, mutta vain yksi on sen arvoinen. Se lähettää tällaisen tapahtuman sekä ostajalle että myyjälle. Jos ainakin yksi heistä on tyytyväinen tähän kolikoiden uudelleenjakamisvaihtoehtoon, tapahtuma allekirjoitetaan etukäteen ja jaetaan verkkoon. Sen vahvistamiseksi riittää, että yksi kaupan osapuolista hyväksyy sovittelijan vaihtoehdon.

On tärkeää valita aluksi välittäjä, jotta molemmat osallistujat luottavat häneen. Tässä tapauksessa hän toimii riippumattomasti jommankumman eduista ja arvioi tilanteen objektiivisesti. Jos välittäjä ei tarjoa mahdollisuutta vähintään yhtä osallistujaa tyydyttävään kolikoiden jakeluun, niin ostaja ja verkkokauppa voivat yhdessä sovittuaan lähettää kolikot uuteen moniallekirjoitusosoitteeseen antamalla kaksi allekirjoitusta. Uusi moniallekirjoitusosoite laaditaan eri sovittelijan kanssa, joka saattaa olla asiassa pätevämpi ja tarjota paremman vaihtoehdon.

Esimerkki asuntolasta ja jääkaapista

Katsotaanpa monimutkaisempaa esimerkkiä, joka näyttää älykkään sopimuksen ominaisuudet selkeämmin.

Johdatus älykkäisiin sopimuksiin

Oletetaan, että on kolme kaveria, jotka muuttivat äskettäin samaan asuntolaan. He kolme ovat kiinnostuneita ostamaan jääkaapin huoneeseensa, jota he voivat käyttää yhdessä. Yksi heistä vapaaehtoisesti keräsi tarvittavan summan jääkaapin ostamiseen ja neuvottelemiseen myyjän kanssa. He tapasivat kuitenkin vasta äskettäin, eikä heidän välillään ole tarpeeksi luottamusta. Ilmeisesti kaksi heistä ottaa riskin antamalla rahaa kolmannelle. Lisäksi heidän on päästävä sopimukseen myyjän valinnassa.

He voivat käyttää escrow-palvelua eli valita sovittelijan, joka valvoo transaktion toteutumista ja ratkaisee kiistanalaisia ​​ongelmia, jos niitä ilmenee. Sitten sovittuaan he laativat älykkään sopimuksen ja määräävät siihen tietyt ehdot.

Ensimmäinen ehto on, että ennen tiettyä aikaa, esimerkiksi viikon sisällä, vastaavalle älysopimustilille on saatava kolme maksua tietyistä osoitteista tietylle summalle. Jos näin ei tapahdu, älykäs sopimus keskeytyy ja palauttaa kolikot kaikille osallistujille. Jos ehto täyttyy, asetetaan myyjän ja välittäjän tunnisteiden arvot ja ehto tarkistetaan, että kaikki osallistujat ovat samaa mieltä myyjän ja sovittelijan valinnasta. Kun kaikki ehdot täyttyvät, varat siirretään määritettyihin osoitteisiin. Tämä lähestymistapa voi suojella osallistujia petoksilta miltä tahansa osapuolelta ja poistaa yleensä tarpeen luottaa.

Näemme tässä esimerkissä sen periaatteen, että tämä kyky asettaa vaiheittain parametrit kunkin ehdon täyttämiseksi antaa sinun luoda minkä tahansa monimutkaisia ​​ja syviä sisäkkäisten tasojen järjestelmiä. Lisäksi voit ensin määritellä ensimmäisen ehdon älysopimuksessa ja vasta sen täyttymisen jälkeen voit asettaa parametreja seuraavalle ehdolle. Toisin sanoen ehto kirjoitetaan muodollisesti ja sille voidaan asettaa parametrit jo toiminnan aikana.

Älykkäiden sopimusten luokittelu

Luokittelua varten voit asettaa eri kriteeriryhmiä. Kuitenkin tekniikan kehityksen hetkellä neljä niistä on relevantteja.

Älykkäät sopimukset voidaan erottaa niiden toteutusympäristöstä, joka voi olla joko keskitetty tai hajautettu. Hajauttamisen tapauksessa meillä on paljon enemmän itsenäisyyttä ja vikasietoisuutta älykkäiden sopimusten toteuttamisessa.

Ne voidaan erottaa myös ehtojen asettamis- ja täyttämisprosessista: ne voivat olla vapaasti ohjelmoitavia, rajoitettuja tai ennalta määriteltyjä, eli tiukasti kirjoitettuja. Kun älysopimusalustalla on vain 4 erityistä älysopimusta, niiden parametrit voidaan asettaa millä tahansa tavalla. Vastaavasti niiden asettaminen on paljon yksinkertaisempaa: valitsemme sopimuksen luettelosta ja välitämme parametrit.

Aloitusmenetelmän mukaan on automatisoituja älykkäitä sopimuksia eli tiettyjen ehtojen täyttyessä ne toteutuvat itsestään, ja on sopimuksia, joissa ehdot on määritelty, mutta alusta ei automaattisesti tarkista niiden täyttymistä, vaan on aloitettava erikseen.

Lisäksi älykkäiden sopimusten yksityisyyden taso vaihtelee. Ne voivat olla joko täysin avoimia, osittain tai täysin luottamuksellisia. Jälkimmäinen tarkoittaa, että kolmannen osapuolen tarkkailijat eivät näe älykkäiden sopimusten ehtoja. Yksityisyyden aihe on kuitenkin hyvin laaja, ja on parempi tarkastella sitä erillään nykyisestä artikkelista.

Seuraavassa tarkastellaan lähemmin kolmea ensimmäistä kriteeriä selventääksemme nykyisen aiheen ymmärtämistä.

Älykkäät sopimukset suoritusajan mukaan

Johdatus älykkäisiin sopimuksiin

Toteutusympäristön perusteella erotetaan keskitetyt ja hajautetut älykkäiden sopimusalustat. Keskitetyissä digitaalisissa sopimuksissa käytetään yhtä palvelua, jossa on vain yksi validaattori ja voi olla varmuuskopiointi- ja palautuspalvelu, jota myös hallitaan keskitetysti. On olemassa yksi tietokanta, joka tallentaa kaikki tarvittavat tiedot älysopimuksen ehtojen asettamiseen ja arvon jakamiseen, joka otetaan huomioon juuri tässä palvelutietokannassa. Tällaisella keskitetyllä palvelulla on asiakas, joka asettaa ehtoja tietyille pyynnöille ja käyttää tällaisia ​​sopimuksia. Alustan keskitetystä luonteesta johtuen todennusmekanismit voivat olla vähemmän turvallisia kuin kryptovaluutoissa.

Esimerkkinä voimme ottaa matkapuhelinoperaattorit (eri matkapuhelinoperaattorit). Oletetaan, että tietty operaattori pitää keskitettyä kirjaa palvelimillaan liikenteestä, joka voidaan välittää eri muodoissa, esimerkiksi: äänipuheluina, tekstiviestien lähetyksenä, mobiilin Internet-liikenteen muodossa ja eri standardien mukaan, sekä pitää kirjaa. käyttäjien saldoissa olevista varoista. Näin ollen matkaviestinoperaattori voi tehdä sopimuksia tarjottujen palvelujen ja niiden maksamisen kirjanpidosta erilaisin ehdoin. Tässä tapauksessa on helppo asettaa ehtoja, kuten "lähetä tekstiviesti sellaisella ja sellaisella koodilla sellaiseen ja sellaiseen numeroon ja saat tällaiset ja sellaiset ehdot liikenteen jakamiseen."

Vielä yksi esimerkki voidaan antaa: perinteiset pankit, joissa on laajennettu verkkopankkitoiminto ja hyvin yksinkertaiset sopimukset, kuten säännölliset maksut, saapuvien maksujen automaattinen muuntaminen, automaattinen koron vähennys tietylle tilille jne.

Jos puhumme älykkäistä sopimuksista, joissa on hajautettu suoritusympäristö, meillä on ryhmä validaattoreita. Ihannetapauksessa kuka tahansa voi tulla validoijaksi. Tietokannan synkronointiprotokollan ja yhteisymmärryksen saavuttamisen ansiosta meillä on yhteinen tietokanta, joka tallentaa nyt kaikki tapahtumat tiukasti kuvatuilla sopimuksilla, ei joitain ehdollisia kyselyitä, joiden muodot usein muuttuvat, eikä avointa määritystä ole. Täällä tapahtumat sisältävät ohjeet sopimuksen toteuttamiseksi tiukkojen eritelmien mukaisesti. Tämä määrittely on avoin, ja siksi alustan käyttäjät voivat itse tarkastaa ja validoida älykkäitä sopimuksia. Tässä näemme, että hajautetut alustat ovat keskitettyjä parempia itsenäisyyden ja vikasietoisuuden suhteen, mutta niiden suunnittelu ja ylläpito ovat paljon monimutkaisempia.

Älykkäät sopimukset ehtojen asettamisen ja täyttämisen avulla

Katsotaanpa nyt tarkemmin, kuinka älykkäät sopimukset voivat erota tavasta, jolla ne asettavat ja täyttävät ehdot. Tässä kiinnitämme huomiomme älykkäisiin sopimuksiin, jotka ovat satunnaisesti ohjelmoitavia ja Turingin valmiita. Turingin täydellinen älykäs sopimus mahdollistaa lähes minkä tahansa algoritmin asettamisen ehdoiksi sopimuksen toteuttamiselle: kirjoitusjaksot, jotkin todennäköisyyksien laskentafunktiot ja vastaavat – aina omiin sähköisen allekirjoituksen algoritmeihin asti. Tässä tapauksessa tarkoitamme todella mielivaltaista logiikan kirjoittamista.

On myös mielivaltaisia ​​älykkäitä sopimuksia, mutta ei Turingin täydellisiä. Tämä sisältää Bitcoinin ja Litecoinin omalla skriptillään. Tämä tarkoittaa, että voit käyttää vain tiettyjä operaatioita missä tahansa järjestyksessä, mutta et voi enää kirjoittaa silmukoita ja omia algoritmeja.

Lisäksi on älykkäitä sopimusalustoja, jotka toteuttavat ennalta määritettyjä älykkäitä sopimuksia. Näitä ovat Bitshares ja Steemit. Bitsharesilla on valikoima älykkäitä sopimuksia kaupankäyntiin, tilinhallintaan, itse alustan ja sen parametrien hallintaan. Steemit on samankaltainen alusta, mutta se ei ole enää keskittynyt tokenien myöntämiseen ja kauppaan, kuten Bitshares, vaan bloggaamiseen, eli se tallentaa ja käsittelee sisältöä hajautetusti.

Mielivaltaisiin Turingin sopimuksiin kuuluvat Ethereum-alusta ja RootStock, joka on edelleen kehitteillä. Siksi alla käsittelemme hieman tarkemmin Ethereum-älysopimusalustaa.

Älykkäät sopimukset aloitusmenetelmällä

Älykkäät sopimukset voidaan myös jakaa aloitustavan perusteella vähintään kahteen ryhmään: automaattisiin ja manuaalisiin (ei automatisoituihin). Automatisoiduille on ominaista se, että kaikki tunnetut parametrit ja ehdot huomioon ottaen älykäs sopimus toteutetaan täysin automaattisesti, eli se ei vaadi ylimääräisten tapahtumien lähettämistä ja lisäpalkkion kuluttamista jokaisesta seuraavasta suorituksesta. Alustalla itsessään on kaikki tiedot laskeakseen, kuinka älykäs sopimus toteutuu. Logiikka siellä ei ole mielivaltaista, vaan ennalta määrättyä ja kaikki tämä on ennustettavissa. Eli voit arvioida etukäteen älykkään sopimuksen toteuttamisen monimutkaisuuden, käyttää siitä jonkinlaista jatkuvaa provisiota, ja kaikki sen toteuttamisprosessit ovat tehokkaampia.

Vapaasti ohjelmoitujen älykkäiden sopimusten toteuttaminen ei ole automatisoitua. Tällaisen älykkään sopimuksen käynnistämiseksi on käytännössä joka vaiheessa luotava uusi tapahtuma, joka kutsuu seuraavan suoritusvaiheen tai seuraavan älykkään sopimuksen menetelmän, maksaa asianmukaisen välityspalkkion ja odottaa tapahtuman vahvistamista. Suoritus voi päättyä onnistuneesti tai ei, koska älykäs sopimuskoodi on mielivaltainen ja joitain arvaamattomia hetkiä saattaa ilmetä, kuten ikuinen silmukka, joidenkin parametrien ja argumenttien puute, käsittelemättömät poikkeukset jne.

Ethereum-tilit

Ethereum-tilityypit

Katsotaanpa, minkä tyyppisiä tilejä Ethereum-alustalla voi olla. Täällä on vain kahdenlaisia ​​tilejä, eikä muita vaihtoehtoja ole. Ensimmäistä tyyppiä kutsutaan käyttäjätiliksi, toista sopimustiliksi. Selvitetään kuinka ne eroavat toisistaan.

Käyttäjätiliä hallitaan vain sähköisen allekirjoituksen henkilökohtaisella avaimella. Tilin omistaja luo oman avainparinsa sähköistä allekirjoitusta varten käyttämällä ECDSA (Elliptic Curve Digital Signature Algorithm) -algoritmia. Vain tällä avaimella allekirjoitetut tapahtumat voivat muuttaa tämän tilin tilaa.

Älykäs sopimustilille on erillinen logiikka. Sitä voidaan ohjata vain ennalta määritetyllä ohjelmistokoodilla, joka määrittää täysin älysopimuksen toiminnan: kuinka se hallitsee kolikoitaan tietyissä olosuhteissa, minkä käyttäjän aloitteesta ja millä lisäehdoilla näitä kolikoita jaetaan. Jos kehittäjät eivät ole sisällyttäneet joitain kohtia ohjelmakoodiin, saattaa ilmetä ongelmia. Esimerkiksi älykäs sopimus voi saada tietyn tilan, jossa se ei hyväksy jatkosuorituksen aloitusta miltään käyttäjiltä. Tässä tapauksessa kolikot itse asiassa jäädytetään, koska älykäs sopimus ei edellytä tästä tilasta poistumista.

Kuinka tilit luodaan Ethereumissa

Käyttäjätilin tapauksessa omistaja luo itsenäisesti avainparin ECDSA:n avulla. On tärkeää huomata, että Ethereum käyttää täsmälleen samaa algoritmia ja täsmälleen samaa elliptistä käyrää sähköisille allekirjoituksille kuin Bitcoin, mutta osoite lasketaan hieman eri tavalla. Tässä kaksoishajautustulosta ei enää käytetä, kuten Bitcoinissa, vaan yksi hajautus on varustettu Keccak-toiminnolla 256 bitin pituudella. Vähiten merkitsevät bitit leikataan pois saadusta arvosta, nimittäin vähiten merkitsevät 160 bittiä ulostulon hajautusarvosta. Tämän seurauksena saamme osoitteen Ethereumissa. Itse asiassa se vie 20 tavua.

Huomaa, että Ethereumin tilitunnus on koodattu hex-muodossa ilman tarkistussummaa, toisin kuin Bitcoin ja monet muut järjestelmät, joissa osoite on koodattu perusnumerojärjestelmään 58 lisättynä tarkistussummalla. Tämä tarkoittaa, että sinun on oltava varovainen työskennellessäsi tilitunnisteiden kanssa Ethereumissa: jopa yksi virhe tunnisteessa johtaa taatusti kolikoiden menettämiseen.

Siinä on tärkeä ominaisuus, ja se on, että yleisen tietokantatason käyttäjätili luodaan sillä hetkellä, kun hän hyväksyy ensimmäisen saapuvan maksun.

Älykkään sopimustilin luominen vaatii täysin erilaista lähestymistapaa. Aluksi yksi käyttäjistä kirjoittaa älysopimuksen lähdekoodin, jonka jälkeen koodi kulkee Ethereum-alustaa varten tarkoitetun kääntäjän kautta hankkien tavukoodin omalle Ethereum-virtuaalikoneelleen. Tuloksena oleva tavukoodi sijoitetaan tapahtuman erityiseen kenttään. Se on varmennettu aloittajan tilin puolesta. Seuraavaksi tämä tapahtuma leviää koko verkossa ja sijoittaa älykkään sopimuskoodin. Maksutapahtumasta ja vastaavasti sopimuksen toteuttamisesta veloitetaan aloitteentekijän tilin saldosta.

Jokainen älykäs sopimus sisältää välttämättä oman (tämän sopimuksen) rakentajan. Se voi olla tyhjä tai siinä voi olla sisältöä. Rakentajan suorittamisen jälkeen luodaan älysopimustilitunniste, jonka avulla voit lähettää kolikoita, kutsua tiettyjä älykkäitä sopimusmenetelmiä jne.

Ethereum-tapahtumarakenne

Selvyyden vuoksi alamme tarkastella Ethereum-tapahtuman rakennetta ja esimerkkiä älykkäiden sopimusten koodista.

Johdatus älykkäisiin sopimuksiin

Ethereum-tapahtuma koostuu useista kentistä. Ensimmäinen näistä, nonce, on tapahtuman tietty sarjanumero suhteessa itse tiliin, joka jakelee sen ja on sen tekijä. Tämä on tarpeen kaksinkertaisten tapahtumien erottamiseksi, toisin sanoen sen tapauksen sulkemiseksi pois, että sama tapahtuma hyväksytään kahdesti. Tunnistetta käyttämällä jokaisella tapahtumalla on yksilöllinen hajautusarvo.

Seuraavaksi tulee kenttä kuten kaasun hinta. Tämä ilmaisee hinnan, jolla Ethereumin perusvaluutta muunnetaan kaasuksi, jolla maksetaan älykkään sopimuksen toteuttaminen ja virtuaalikoneen resurssien allokointi. Mitä se tarkoittaa?

Bitcoinissa maksut maksetaan suoraan perusvaluutta – Bitcoin itse. Tämä on mahdollista yksinkertaisen laskentamekanismin ansiosta: maksamme tiukasti tapahtuman sisältämien tietojen määrästä. Ethereumissa tilanne on monimutkaisempi, koska tapahtumatietojen määrään on erittäin vaikea luottaa. Tässä tapahtuma voi sisältää myös ohjelmakoodia, joka suoritetaan virtuaalikoneessa, ja jokainen virtuaalikoneen toiminto voi olla erilainen monimutkaisuus. On myös toimintoja, jotka varaavat muistia muuttujille. Niillä on oma monimutkaisuus, josta kunkin toimenpiteen maksu riippuu.

Jokaisen toimenpiteen hinta kaasuekvivalentteina on vakio. Se otetaan käyttöön erityisesti kunkin toimenpiteen vakiokustannusten määrittämiseksi. Verkon kuormituksesta riippuen kaasun hinta muuttuu, eli kerroin, jonka mukaan perusvaluutta muunnetaan tähän apuyksikköön palkkion maksamiseksi.

Ethereumissa on vielä yksi tapahtuman ominaisuus: sen sisältämä tavukoodi suoritettavaksi virtuaalikoneessa suoritetaan, kunnes se saa päätökseen jonkin tuloksen (onnistuminen tai epäonnistuminen) tai kunnes tietty määrä varattuja kolikoita loppuu palkkion maksamiseen. . Jotta vältettäisiin tilanne, jossa kaikki lähettäjän tilin kolikot menivät jonkin virheen sattuessa välityspalkkioon (esimerkiksi virtuaalikoneessa alkoi jonkinlainen ikuinen kierto), on olemassa seuraava kenttä - käynnistä bensa (kutsutaan usein kaasurajaksi) - se määrittää kolikoiden enimmäismäärän, jonka lähettäjä on valmis maksamaan tietyn tapahtuman suorittamiseen.

Seuraava kenttä on nimeltään määränpään osoite. Tämä sisältää kolikoiden vastaanottajan osoitteen tai tietyn älykkään sopimuksen osoitteen, jonka menetelmiä kutsutaan. Sen jälkeen tulee kenttä arvo, johon syötetään kohdeosoitteeseen lähetettyjen kolikoiden määrä.

Seuraavaksi on mielenkiintoinen ala nimeltä tiedot, johon koko rakenne sopii. Tämä ei ole erillinen kenttä, vaan koko rakenne, jossa virtuaalikoneen koodi määritellään. Voit sijoittaa mielivaltaisia ​​tietoja tähän - tätä varten on erilliset säännöt.

Ja viimeinen kenttä on nimeltään allekirjoitus. Se sisältää samanaikaisesti sekä tämän tapahtuman tekijän sähköisen allekirjoituksen että julkisen avaimen, jolla tämä allekirjoitus varmennetaan. Julkisesta avaimesta saat tämän tapahtuman lähettäjän tilitunnisteen, eli lähettäjän tilin yksilöivän itse järjestelmässä. Saimme selville tärkeimmän kaupan rakenteesta.

Esimerkki älykkäästä sopimuskoodista Soliditylle

Tarkastellaan nyt tarkemmin yksinkertaisinta älysopimusta esimerkin avulla.

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

Yllä on yksinkertaistettu lähdekoodi, joka voi säilyttää käyttäjien kolikoita ja palauttaa ne pyynnöstä.

Joten on olemassa Pankin älykäs sopimus, joka suorittaa seuraavat toiminnot: se kerää kolikoita saldolleen, eli kun tapahtuma vahvistetaan ja tällainen älykäs sopimus tehdään, luodaan uusi tili, joka voi sisältää kolikoita saldollaan; se muistaa käyttäjät ja kolikoiden jakautumisen heidän välillään; on useita menetelmiä saldojen hallintaan, eli on mahdollista täydentää, nostaa ja tarkistaa käyttäjän saldo.

Käydään läpi jokainen lähdekoodirivi. Tässä sopimuksessa on vakiokenttiä. Yksi niistä, jolla on tyyppiosoite, on nimeltään omistaja. Tässä sopimus muistaa tämän älykkään sopimuksen luoneen käyttäjän osoitteen. Lisäksi on olemassa dynaaminen rakenne, joka ylläpitää vastaavuutta käyttäjäosoitteiden ja saldojen välillä.

Tätä seuraa pankkimenetelmä - sillä on sama nimi kuin sopimuksella. Näin ollen tämä on sen rakentaja. Täällä omistajamuuttujalle määritetään sen henkilön osoite, joka asetti tämän älykkään sopimuksen verkkoon. Tämä on ainoa asia, joka tapahtuu tässä rakentajassa. Eli tässä tapauksessa msg on juuri ne tiedot, jotka siirrettiin virtuaalikoneeseen yhdessä tämän sopimuksen koko koodin sisältävän tapahtuman kanssa. Vastaavasti msg.sender on tämän koodin isännöivän tapahtuman kirjoittaja. Hän on älykkään sopimuksen omistaja.

Talletusmenetelmällä voit siirtää tietyn määrän kolikoita sopimustilille tapahtumakohtaisesti. Tässä tapauksessa älykäs sopimus, joka vastaanottaa nämä kolikot, jättää ne taseeseensa, mutta kirjaa saldokakenteeseen kuka tarkalleen oli näiden kolikoiden lähettäjä tietääkseen kenelle ne kuuluvat.

Seuraavaa menetelmää kutsutaan nostoksi ja se vaatii yhden parametrin - kolikoiden määrän, jonka joku haluaa nostaa tästä pankista. Tämä tarkistaa, onko tällä menetelmällä kutsuvan käyttäjän saldossa tarpeeksi kolikoita lähettääkseen ne. Jos niitä on tarpeeksi, niin älysopimus itse palauttaa kyseisen määrän kolikoita soittajalle.

Seuraavaksi tulee tapa tarkistaa käyttäjän nykyinen saldo. Kuka tahansa kutsuu tätä menetelmää, sitä käytetään tämän saldon hakemiseen älykkäässä sopimuksessa. On syytä huomata, että tämän menetelmän muokkaaja on näkymä. Tämä tarkoittaa, että menetelmä itsessään ei muuta luokkansa muuttujia millään tavalla ja se on itse asiassa vain lukumenetelmä. Tämän menetelmän kutsumiseksi ei luoda erillistä tapahtumaa, maksua ei makseta ja kaikki laskelmat suoritetaan paikallisesti, jonka jälkeen käyttäjä saa tuloksen.

Tappomenetelmää tarvitaan älykkään sopimuksen tilan tuhoamiseen. Ja tässä on lisätarkistus, onko tämän menetelmän soittaja tämän sopimuksen omistaja. Jos näin on, sopimus tuhoutuu itsestään, ja tuhoamistoiminto ottaa yhden parametrin - tilin tunnisteen, johon sopimus lähettää kaikki saldoonsa jäävät kolikot. Tässä tapauksessa jäljellä olevat kolikot menevät automaattisesti sopimuksen omistajan osoitteeseen.

Kuinka täydellinen solmu Ethereum-verkossa toimii?

Katsotaanpa kaavamaisesti, kuinka tällaisia ​​älykkäitä sopimuksia toteutetaan Ethereum-alustalla ja kuinka koko verkon solmu toimii.

Johdatus älykkäisiin sopimuksiin

Ethereum-verkon täydessä solmussa on oltava vähintään neljä moduulia.
Ensimmäinen, kuten kaikissa hajautetuissa protokollissa, on P2P-verkkomoduuli - moduuli verkkoyhteyteen ja työskentelyyn muiden solmujen kanssa, jossa vaihdetaan lohkoja, tapahtumia ja tietoja muista solmuista. Tämä on perinteinen komponentti kaikille hajautetuille kryptovaluutoille.

Seuraavaksi meillä on moduuli lohkoketjutietojen tallentamiseen, käsittelyyn, prioriteettihaaran valitsemiseen, lohkojen liittämiseen, lohkojen linkityksen poistamiseen, näiden lohkojen validointiin jne.

Kolmas moduuli on nimeltään EVM (Ethereum-virtuaalikone) - tämä on virtuaalikone, joka vastaanottaa tavukoodin Ethereum-tapahtumista. Tämä moduuli ottaa tietyn tilin nykyisen tilan ja tekee muutoksia sen tilaan vastaanotetun tavukoodin perusteella. Jokaisen verkkosolmun virtuaalikoneen version on oltava sama. Jokaisessa Ethereum-solmussa tapahtuvat laskelmat ovat täsmälleen samat, mutta ne tapahtuvat asynkronisesti: joku tarkistaa ja hyväksyy tämän tapahtuman aikaisemmin, eli suorittaa kaiken sen sisältämän koodin ja joku myöhemmin. Vastaavasti, kun tapahtuma luodaan, se jaetaan verkkoon, solmut hyväksyvät sen ja varmennushetkellä, samalla tavalla kuin Bitcoin Script suoritetaan Bitcoinissa, tässä suoritetaan virtuaalikoneen tavukoodi.

Tapahtuma katsotaan varmennetuksi, jos kaikki sen sisältämä koodi on suoritettu, tietylle tilille on luotu uusi tila ja tallennettu, kunnes on selvää, onko tapahtumaa käytetty vai ei. Jos tapahtumaa sovelletaan, tätä tilaa ei pidetä vain valmiina, vaan myös nykyisenä. On tietokanta, joka tallentaa kunkin tilin tilan jokaiselle verkkosolmulle. Koska kaikki laskelmat tapahtuvat samalla tavalla ja lohkoketjun tila on sama, myös kaikkien tilien tilat sisältävä tietokanta on sama jokaiselle solmulle.

Älykkäiden sopimusten myytit ja rajoitukset

Mitä tulee Ethereumin kaltaisten älykkäiden sopimusalustojen rajoituksiin, voidaan mainita seuraava:

  • koodin suorittaminen;
  • varaa muistia;
  • lohkoketjun tiedot;
  • lähettää maksuja;
  • luoda uusi sopimus;
  • soita muihin sopimuksiin.

Katsotaanpa virtuaalikoneelle asetettuja rajoituksia ja näin ollen hälventää joitain myyttejä älykkäistä sopimuksista. Virtuaalikoneessa, joka voi olla paitsi Ethereumissa, myös vastaavissa alustoissa, voit suorittaa todella mielivaltaisia ​​loogisia toimintoja, eli kirjoittaa koodia ja se suoritetaan siellä, voit lisäksi varata muistia. Maksu kuitenkin maksetaan erikseen jokaisesta operaatiosta ja jokaisesta varatusta lisämuistiyksiköstä.

Seuraavaksi virtuaalikone voi lukea dataa lohkoketjutietokannasta käyttääkseen tätä dataa laukaisimena yhden tai toisen älykkään sopimuslogiikan suorittamiseksi. Virtuaalikone voi luoda ja lähettää tapahtumia, se voi luoda uusia sopimuksia ja kutsua muita älykkäitä sopimuksia, jotka on jo julkaistu verkossa: olemassa, saatavilla jne.

Yleisin myytti on, että Ethereumin älykkäät sopimukset voivat käyttää ehdoissaan tietoja mistä tahansa Internet-resurssista. Totuus on, että virtuaalikone ei voi lähettää verkkopyyntöä jollekin ulkoiselle tietoresurssille Internetissä, eli on mahdotonta kirjoittaa älykästä sopimusta, joka jakaa arvoa käyttäjien kesken riippuen esimerkiksi siitä, millainen sää ulkona on, tai kuka voitti jonkin mestaruuden, tai sen perusteella, mitä muuta ulkomaailmassa tapahtui, koska tietoa näistä tapauksista ei yksinkertaisesti ole itse alustan tietokannassa. Eli lohkoketjussa ei ole mitään tästä. Jos se ei näy siellä, virtuaalikone ei voi käyttää näitä tietoja laukaisimina.

Ethereumin haitat

Listataan tärkeimmät. Ensimmäinen haittapuoli on, että älykkäiden sopimusten suunnittelussa, kehittämisessä ja testaamisessa Ethereumissa on joitain vaikeuksia (Ethereum käyttää Solidity-kieltä älykkäiden sopimusten kirjoittamiseen). Käytäntö osoittaakin, että erittäin suuri osa kaikista virheistä johtuu inhimillisestä tekijästä. Tämä pätee itse asiassa jo kirjoitettuihin Ethereum-älysopimuksiin, joiden monimutkaisuus on keskimäärin tai suurempi. Jos yksinkertaisissa älykkäissä sopimuksissa virheen todennäköisyys on pieni, niin monimutkaisissa älykkäissä sopimuksissa on hyvin usein virheitä, jotka johtavat varojen varastukseen, niiden jäädyttämiseen, älykkäiden sopimusten tuhoutumiseen odottamattomalla tavalla jne. Monet tällaiset tapaukset ovat jo olemassa. tiedossa.

Toinen haittapuoli on, että virtuaalikone itsessään ei ole täydellinen, koska se on myös ihmisten kirjoittama. Se voi suorittaa mielivaltaisia ​​komentoja, ja siinä piilee haavoittuvuus: useita komentoja voidaan konfiguroida tietyllä tavalla, mikä johtaa ennalta arvaamattomiin seurauksiin. Tämä on erittäin monimutkainen alue, mutta on jo useita tutkimuksia, jotka osoittavat, että nämä haavoittuvuudet ovat olemassa Ethereum-verkon nykyisessä versiossa ja ne voivat johtaa monien älykkäiden sopimusten epäonnistumiseen.

Toinen suuri vaikeus, sitä voidaan pitää haittana. Se johtuu siitä, että voit käytännössä tai teknisesti tulla siihen tulokseen, että jos käännät virtuaalikoneella suoritettavan sopimuksen tavukoodin, voit määrittää tietyn toimintojärjestyksen. Yhdessä suoritettuina nämä toiminnot kuormittavat suuresti virtuaalikoneen ja hidastavat sitä suhteettomasti näiden toimintojen suorittamisesta maksettuun maksuun verrattuna.

Aikaisemmin Ethereumin kehityksessä oli jo ajanjakso, jolloin monet kaverit, jotka ymmärsivät yksityiskohtaisesti virtuaalikoneen toiminnan, löysivät tällaisia ​​​​haavoittuvuuksia. Itse asiassa tapahtumat maksoivat hyvin pienen maksun, mutta käytännössä hidastivat koko verkon toimintaa. Näitä ongelmia on erittäin vaikea ratkaista, koska ensinnäkin on tarpeen määrittää ne, toiseksi säätää näiden toimintojen suorittamisen hintaa ja kolmanneksi suorittaa hard fork, mikä tarkoittaa kaikkien verkkosolmujen päivittämistä uuteen versioon. ohjelmistosta ja aktivoimalla nämä muutokset samanaikaisesti.

Mitä tulee Ethereumiin, on tehty paljon tutkimusta, saatu paljon käytännön kokemusta: sekä positiivista että negatiivista, mutta silti on edelleen vaikeuksia ja haavoittuvuuksia, jotka on vielä käsiteltävä jotenkin.

Joten artikkelin temaattinen osa on valmis, siirrytään kysymyksiin, joita syntyy melko usein.

Часто задаваемые вопросы

— Jos kaikki olemassa olevan älysopimuksen osapuolet haluavat muuttaa ehtoja, voivatko he peruuttaa tämän älykkään sopimuksen käyttämällä multisigiä ja luoda sitten uuden älykkään sopimuksen päivitetyillä toteutusehdoilla?

Vastaus tähän on kaksijakoinen. Miksi? Koska toisaalta älysopimus määritellään kerran eikä siihen enää liity muutoksia, ja toisaalta siinä voi olla ennalta kirjoitettu logiikka, joka mahdollistaa joidenkin ehtojen täydellisen tai osittaisen muutoksen. Eli jos haluat muuttaa jotain älysopimuksessasi, sinun on määrättävä ehdot, joilla voit päivittää nämä ehdot. Näin ollen sopimuksen uusiminen voidaan järjestää vain näin varovaisesti. Mutta täälläkin voi joutua vaikeuksiin: tehdä virhe ja saada vastaava haavoittuvuus. Siksi tällaisten asioiden on oltava erittäin yksityiskohtaisia ​​ja huolellisesti suunniteltuja ja testattuja.

— Entä jos sovittelija tekee sopimuksen jonkun osallistuvan osapuolen kanssa: escrow tai älysopimus? Tarvitaanko sovittelijaa älykkäässä sopimuksessa?

Älykkäässä sopimuksessa sovittelijaa ei vaadita. Sitä ei ehkä ole olemassa. Jos escrow-tapauksessa sovittelija tekee salaliiton toisen osapuolen kanssa, niin kyllä, tämä järjestelmä menettää jyrkästi kaiken arvonsa. Siksi sovittelijat valitaan siten, että kaikki tässä prosessissa mukana olevat osapuolet luottavat heihin samanaikaisesti. Näin ollen et yksinkertaisesti siirrä kolikoita usean allekirjoituksen osoitteeseen välittäjän kanssa, johon et luota.

— Onko mahdollista siirtää yhdellä Ethereum-tapahtumalla useita erilaisia ​​tokeneita osoitteestasi eri kohdeosoitteisiin, esimerkiksi vaihto-osoitteisiin, joissa näillä tokeneilla käydään kauppaa?

Tämä on hyvä kysymys, ja se koskee Ethereumin transaktiomallia ja kuinka se eroaa Bitcoin-mallista. Ja ero on radikaali. Jos Ethereum-tapahtumamallissa siirrät vain kolikoita, ne siirretään vain osoitteesta toiseen, ei muutosta, vain tietty määrittämäsi summa. Toisin sanoen tämä ei ole käyttämättömien tuotosten (UTXO) malli, vaan tilien ja vastaavien saldojen malli. On teoriassa mahdollista lähettää useita eri tokeneita yhdessä tapahtumassa kerralla, jos kirjoitat ovelan älysopimuksen, mutta sinun on silti tehtävä useita tapahtumia, luotava sopimus, siirrettävä siihen rahakkeita ja kolikoita ja kutsuttava sitten sopiva menetelmä . Tämä vaatii vaivaa ja aikaa, joten käytännössä se ei toimi niin ja kaikki Ethereumin maksut suoritetaan erillisinä tapahtumina.

— Yksi Ethereum-alustaa koskevista myyteistä on, että on mahdotonta kuvata olosuhteita, jotka riippuvat ulkoisen Internet-resurssin tiedoista, joten mitä tehdä?

Ratkaisu on, että älysopimus itsessään voi tarjota yhden tai useamman ns. luotetut oraakkelit, jotka keräävät tietoa ulkomaailman asioiden tilasta ja välittävät sen älykkäille sopimuksille erityismenetelmin. Itse sopimus pitää luotettavilta osapuolilta saamiaan tietoja todenmukaisina. Lisää luotettavuutta valitsemalla vain suuri joukko oraakkeleita ja minimoimalla niiden yhteensovittamisen riski. Itse sopimuksessa ei saa ottaa huomioon oraakkeleista saatuja tietoja, jotka ovat ristiriidassa enemmistön kanssa.

Yksi Blockchain-verkkokurssin luennoista on omistettu tälle aiheelle - “Johdatus älykkäisiin sopimuksiin".

Lähde: will.com

Lisää kommentti