Introduktion till smarta kontrakt

I den hÀr artikeln ska vi titta pÄ vad smarta kontrakt Àr, vad de Àr, vi kommer att bekanta oss med olika smarta kontraktsplattformar, deras funktioner, och Àven diskutera hur de fungerar och vilka fördelar de kan ge. Detta material kommer att vara mycket anvÀndbart för lÀsare som inte Àr vÀl bekanta med Àmnet smarta kontrakt, men som vill komma nÀrmare att förstÄ det.

Vanligt kontrakt vs. smart kontrakt

Innan vi fördjupar oss i detaljerna, lÄt oss ta ett exempel pÄ skillnaderna mellan ett vanligt kontrakt, som Àr specificerat pÄ papper, och ett smart kontrakt, som representeras digitalt.

Introduktion till smarta kontrakt

Hur fungerade detta innan smarta kontrakt kom? FörestÀll dig en grupp mÀnniskor som vill upprÀtta vissa regler och villkor för fördelningen av vÀrderingar, samt en viss mekanism för att garantera genomförandet av denna fördelning enligt de givna reglerna och villkoren. Sedan skulle de trÀffas, upprÀtta ett papper dÀr de skrev ner sina identifikationsuppgifter, villkoren, de inblandade vÀrdena, datera dem och underteckna dem. Detta kontrakt har ocksÄ certifierats av en betrodd part, till exempel en notarie. Vidare gick dessa mÀnniskor Ät olika hÄll med sin papperskopia av ett sÄdant kontrakt och började utföra nÄgra ÄtgÀrder som kanske inte motsvarade sjÀlva kontraktet, det vill sÀga de gjorde en sak, men pÄ papper var det intygat att de skulle göra nÄgot helt annorlunda. Och hur tar man sig ur denna situation? Faktum Àr att en av gruppmedlemmarna mÄste ta detta papper, ta nÄgra bevis, ta det till domstol och uppnÄ överensstÀmmelse mellan kontraktet och faktiska ÄtgÀrder. Ganska ofta Àr det svÄrt att uppnÄ rÀttvis genomförande av detta kontrakt, vilket leder till obehagliga konsekvenser.

Vad kan man sÀga om smarta kontrakt? De kombinerar bÄde möjligheten att skriva villkoren i kontraktet och mekanismen för deras strikta genomförande. Om villkoren har stÀllts och motsvarande transaktion eller begÀran har undertecknats, Àr det inte lÀngre möjligt att Àndra villkoren eller pÄverka implementeringen nÀr den begÀran eller transaktionen har accepterats.

Det finns en validator eller ett helt nÀtverk, samt en databas som lagrar alla smarta kontrakt som lÀmnats in för utförande i strikt kronologisk ordning. Det Àr ocksÄ viktigt att denna databas mÄste innehÄlla alla triggervillkor för att utföra det smarta kontraktet. Dessutom mÄste den ta hÀnsyn till sjÀlva vÀrdet vars fördelning beskrivs i kontraktet. Om detta gÀller nÄgon digital valuta, bör denna databas ta hÀnsyn till det.

Med andra ord mÄste smarta kontraktsvaliderare ha tillgÄng till all data som det smarta kontraktet fungerar pÄ. Till exempel bör en enda databas anvÀndas för att samtidigt redogöra för digitala valutor, anvÀndarsaldon, anvÀndartransaktioner och tidsstÀmplar. Sedan, i ett smart kontrakt, kan villkoret vara anvÀndarens saldo i en viss valuta, förekomsten av en viss tid eller det faktum att en viss transaktion har genomförts, men inget mer.

Definition av ett smart kontrakt

I allmÀnhet myntades sjÀlva terminologin av forskaren Nick Szabo och anvÀndes först 1994, och dokumenterades 1997 i en artikel som beskriver sjÀlva idén med smarta kontrakt.

Smarta kontrakt innebÀr att viss automatisering av vÀrdefördelning utförs, vilket bara kan bero pÄ de villkor som Àr förutbestÀmda i förvÀg. I sin enklaste form ser det ut som ett kontrakt med strikt definierade villkor, som Àr undertecknat av vissa parter.

Smarta kontrakt Àr utformade för att minimera förtroendet för tredje part. Ibland Àr det beslutscentrum som allt beror pÄ helt uteslutet. Dessutom Àr sÄdana kontrakt lÀttare att granska. Detta Àr en konsekvens av vissa designfunktioner i ett sÄdant system, men oftast förstÄr vi med ett smart kontrakt en decentraliserad miljö och nÀrvaron av funktioner som gör det möjligt för vem som helst att analysera databasen och genomföra en fullstÀndig granskning av utförandet av kontrakt. Detta sÀkerstÀller skydd mot retroaktiva dataÀndringar som skulle medföra förÀndringar i fullgörandet av sjÀlva kontraktet. Digitalisering av de flesta processer nÀr man skapar och lanserar ett smart kontrakt förenklar ofta tekniken och kostnaden för deras implementering.

Ett enkelt exempel - Escrow-tjÀnst

LÄt oss titta pÄ ett mycket enkelt exempel. Det hjÀlper dig att komma nÀrmare att förstÄ funktionaliteten hos smarta kontrakt, samt bÀttre förstÄ i vilka fall de ska anvÀndas.

Introduktion till smarta kontrakt

Det kan Àven implementeras med Bitcoin, Àven om Bitcoin just nu knappast kan kallas en fullfjÀdrad plattform för smarta kontrakt. SÄ vi har en köpare och vi har en webbutik. En kund vill köpa en bildskÀrm frÄn denna butik. I det enklaste fallet genomför och skickar köparen en betalning, och webbutiken accepterar den, bekrÀftar den och skickar sedan varorna. Men i denna situation finns ett behov av stort förtroende - köparen mÄste lita pÄ nÀtbutiken för hela kostnaden för monitorn. Eftersom en nÀtbutik kan ha ett lÄgt anseende i köparens ögon finns det en risk att butiken av nÄgon anledning efter att ha accepterat betalningen vÀgrar service och inte skickar varorna till köparen. DÀrför stÀller köparen frÄgan (och följaktligen stÀller onlinebutiken denna frÄga) vad som kan anvÀndas i det hÀr fallet för att minimera sÄdana risker och göra sÄdana transaktioner mer tillförlitliga.

NÀr det gÀller Bitcoin Àr det möjligt att lÄta köparen och sÀljaren sjÀlvstÀndigt vÀlja en medlare. Det finns mÄnga mÀnniskor som Àr involverade i att lösa kontroversiella frÄgor. Och vÄra deltagare kan vÀlja frÄn en allmÀn lista över medlare den de kommer att lita pÄ. Tillsammans skapar de en 2 av 3 multisignaturadress dÀr det finns tre nycklar och tvÄ signaturer med tvÄ valfria nycklar krÀvs för att spendera mynt frÄn den adressen. En nyckel kommer att tillhöra köparen, den andra till nÀtbutiken och den tredje till medlaren. Och till en sÄdan multisignaturadress skickar köparen det belopp som krÀvs för att betala för monitorn. Nu, nÀr sÀljaren ser att pengar Àr blockerade under en tid pÄ en multisignaturadress som beror pÄ honom, kan han sÀkert skicka monitorn med post.

DÀrefter tar köparen emot paketet, inspekterar varorna och fattar beslut om det slutliga köpet. Han kan helt och hÄllet gÄ med pÄ den tillhandahÄllna tjÀnsten och underteckna transaktionen med sin nyckel, dÀr han överför mynt frÄn multisignaturadressen till sÀljaren, eller sÄ kan han vara missnöjd med nÄgot. I det andra fallet kontaktar han en medlare för att sÀtta ihop en alternativ transaktion som kommer att fördela dessa mynt annorlunda.

LÄt oss sÀga att bildskÀrmen kom lite repad och att satsen inte inkluderade en kabel för anslutning till datorn, Àven om webbbutikens webbplats sa att kabeln borde ingÄ i satsen. Sedan samlar köparen in de bevis som krÀvs för att bevisa för medlaren att han blev lurad i den hÀr situationen: han tar skÀrmdumpar av webbplatsen, tar ett foto av postkvittot, tar ett foto av reporna pÄ monitorn och visar att förseglingen var trasig och kabeln drogs ut. NÀtbutiken samlar i sin tur in sina bevis och överför dem till medlaren.

Medlaren Àr intresserad av att samtidigt tillfredsstÀlla bÄde köparens indignation och nÀtbutikens intressen (det kommer att bli klart varför senare). Det utgör en transaktion dÀr mynt frÄn en multisignaturadress kommer att spenderas i nÄgon proportion mellan köparen, nÀtbutiken och medlaren, eftersom han tar en del för sig sjÀlv som belöning för sitt arbete. LÄt oss sÀga att 90 % av det totala beloppet gÄr till sÀljaren, 5 % till medlaren och 5 % ersÀttning till köparen. Medlaren undertecknar denna transaktion med sin nyckel, men den kan Ànnu inte tillÀmpas, eftersom den krÀver tvÄ signaturer, men bara en Àr vÀrd det. Den skickar en sÄdan transaktion till bÄde köparen och sÀljaren. Om minst en av dem Àr nöjd med detta alternativ för omfördelning av mynt, kommer transaktionen att försigneras och distribueras till nÀtverket. För att validera det rÀcker det att en av parterna i transaktionen samtycker till medlarens alternativ.

Det Àr viktigt att först vÀlja en medlare sÄ att bÄda deltagarna litar pÄ honom. I det hÀr fallet kommer han att agera oberoende av den ena eller den andras intressen och objektivt bedöma situationen. Om förmedlaren inte ger möjlighet att distribuera mynt som tillfredsstÀller minst en deltagare, kan bÄde köparen och nÀtbutiken, efter att ha kommit överens, skicka mynten till en ny multisignaturadress genom att sÀtta sina tvÄ signaturer. Den nya multisignaturadressen kommer att sammanstÀllas med en annan medlare, som kan vara mer kompetent i frÄgan och ge ett bÀttre alternativ.

Exempel med en sovsal och ett kylskÄp

LÄt oss titta pÄ ett mer komplext exempel som visar kapaciteten hos ett smart kontrakt mer explicit.

Introduktion till smarta kontrakt

LÄt oss sÀga att det Àr tre killar som nyligen flyttat in i samma sovsal. De tre Àr intresserade av att köpa ett kylskÄp till sitt rum som de kan anvÀnda tillsammans. En av dem anmÀlde sig frivilligt att samla in den nödvÀndiga summan för att köpa ett kylskÄp och förhandla med sÀljaren. Men de trÀffade varandra först nyligen och det finns inte tillrÀckligt med förtroende mellan dem. Uppenbarligen tar tvÄ av dem en risk genom att ge pengar till den tredje. Dessutom mÄste de komma överens om att vÀlja sÀljare.

De kan anvÀnda depositionstjÀnsten, det vill sÀga vÀlja en medlare som kommer att övervaka genomförandet av transaktionen och lösa kontroversiella problem om nÄgra uppstÄr. Sedan, efter att ha kommit överens, upprÀttar de ett smart kontrakt och föreskriver vissa villkor i det.

Det första villkoret Àr att innan en viss tidpunkt, sÀg inom en vecka, mÄste motsvarande smarta kontraktskonto fÄ tre betalningar frÄn vissa adresser för ett visst belopp. Om detta inte hÀnder slutar det smarta kontraktet att utföras och returnerar mynten till alla deltagare. Om villkoret Àr uppfyllt stÀlls vÀrdena för sÀljarens och medlarens identifierare, och villkoret kontrolleras att alla deltagare Àr överens om valet av sÀljare och medlare. NÀr alla villkor Àr uppfyllda kommer medlen att överföras till de angivna adresserna. Detta tillvÀgagÄngssÀtt kan skydda deltagare frÄn bedrÀgeri frÄn vilken sida som helst och eliminerar i allmÀnhet behovet av att lita pÄ.

Vi ser i detta exempel sjÀlva principen att denna förmÄga att steg-för-steg stÀlla in parametrar för att uppfylla varje villkor gör att du kan skapa system av vilken komplexitet och djup som helst av kapslade nivÄer. Dessutom kan du först definiera det första villkoret i det smarta kontraktet, och först efter att det har uppfyllts kan du stÀlla in parametrar för nÀsta villkor. Villkoret Àr med andra ord formellt skrivet och parametrar för det kan stÀllas in redan under dess drift.

Klassificering av smarta kontrakt

För klassificering kan du stÀlla in olika grupper av kriterier. Men i ögonblicket för teknikutvecklingen Àr fyra av dem relevanta.

Smarta kontrakt kan sÀrskiljas genom sin exekveringsmiljö, som kan vara antingen centraliserad eller decentraliserad. NÀr det gÀller decentralisering har vi mycket större oberoende och feltolerans nÀr vi utför smarta kontrakt.

De kan ocksÄ sÀrskiljas genom processen att stÀlla in och uppfylla villkor: de kan vara fritt programmerbara, begrÀnsade eller fördefinierade, d.v.s. strikt maskinskrivna. NÀr det bara finns 4 specifika smarta kontrakt pÄ den smarta kontraktsplattformen kan parametrarna för dem stÀllas in pÄ vilket sÀtt som helst. Följaktligen Àr det mycket enklare att stÀlla in dem: vi vÀljer ett kontrakt frÄn listan och skickar parametrarna.

Enligt initieringsmetoden finns det automatiserade smarta kontrakt, det vill sÀga nÀr vissa villkor uppstÄr Àr de sjÀlvutförande, och det finns kontrakt dÀr villkoren Àr specificerade, men plattformen kontrollerar inte automatiskt att de uppfylls; för detta mÄste initieras separat.

Dessutom varierar smarta kontrakt i sin integritetsnivĂ„. De kan vara antingen helt öppna, delvis eller helt konfidentiella. Det senare innebĂ€r att tredjepartsobservatörer inte ser villkoren för smarta kontrakt. Ämnet om integritet Ă€r dock mycket brett och det Ă€r bĂ€ttre att övervĂ€ga det separat frĂ„n den aktuella artikeln.

Nedan kommer vi att titta nÀrmare pÄ de tre första kriterierna för att fÄ större klarhet i förstÄelsen av det aktuella Àmnet.

Smarta kontrakt efter körtid

Introduktion till smarta kontrakt

UtifrÄn exekveringsmiljön skiljer man mellan centraliserade och decentraliserade smarta kontraktsplattformar. Vid centraliserade digitala kontrakt anvÀnds en enda tjÀnst, dÀr det bara finns en validator och det kan finnas en backup- och ÄterstÀllningstjÀnst, som ocksÄ hanteras centralt. Det finns en databas som lagrar all nödvÀndig information för att faststÀlla villkoren för det smarta kontraktet och distribuera vÀrdet som tas med i berÀkningen i just denna tjÀnstedatabas. En sÄdan centraliserad tjÀnst har en kund som stÀller villkor med vissa förfrÄgningar och anvÀnder sÄdana kontrakt. PÄ grund av plattformens centraliserade karaktÀr kan autentiseringsmekanismer vara mindre sÀkra Àn i kryptovalutor.

Som exempel kan vi ta mobilkommunikationsleverantörer (olika mobiloperatörer). LÄt oss sÀga att en viss operatör för ett centraliserat register över trafiken pÄ sina servrar, som kan överföras i olika format, till exempel: i form av röstsamtal, SMS-överföring, mobil Internettrafik och enligt olika standarder, och Àven för register av medel pÄ anvÀndarsaldon. Mobilkommunikationsleverantören kan följaktligen upprÀtta avtal om redovisning av de tillhandahÄllna tjÀnsterna och deras betalning med olika villkor. I det hÀr fallet Àr det lÀtt att stÀlla in villkor som "skicka ett SMS med en sÄdan kod till ett sÄdant och ett sÄdant nummer och du kommer att fÄ sÄdana och sÄdana villkor för trafikdistribution."

Ytterligare ett exempel kan ges: traditionella banker med utökad funktionalitet av internetbank och mycket enkla kontrakt som regelbundna betalningar, automatisk omvandling av inkommande betalningar, automatisk avdrag av rÀnta till angivet konto, etc.

Om vi ​​pratar om smarta kontrakt med en decentraliserad exekveringsmiljö sĂ„ har vi en grupp validerare. Helst kan vem som helst bli validerare. PĂ„ grund av databassynkroniseringsprotokollet och att nĂ„ konsensus har vi en gemensam databas som nu kommer att lagra alla transaktioner med strikt beskrivna kontrakt, och inte nĂ„gra villkorliga frĂ„gor, vars format ofta Ă€ndras, och det finns ingen öppen specifikation. HĂ€r kommer transaktioner att innehĂ„lla instruktioner för att utföra kontraktet enligt en strikt specifikation. Denna specifikation Ă€r öppen och dĂ€rför kan plattformsanvĂ€ndare sjĂ€lva granska och validera smarta kontrakt. HĂ€r ser vi att decentraliserade plattformar Ă€r överlĂ€gsna centraliserade nĂ€r det gĂ€ller oberoende och feltolerans, men deras design och underhĂ„ll Ă€r mycket mer komplext.

Smarta kontrakt genom metoden att sÀtta och uppfylla villkor

LÄt oss nu titta nÀrmare pÄ hur smarta kontrakt kan skilja sig Ät i hur de sÀtter och uppfyller villkoren. HÀr riktar vi vÄr uppmÀrksamhet mot smarta kontrakt som Àr slumpmÀssigt programmerbara och Turing kompletta. Ett Turing-komplett smart kontrakt lÄter dig stÀlla in nÀstan vilka algoritmer som helst som villkor för genomförandet av kontraktet: skrivcykler, vissa funktioner för att berÀkna sannolikheter och liknande - Ànda ner till dina egna elektroniska signaturalgoritmer. I det hÀr fallet menar vi verkligen godtycklig skrivning av logik.

Det finns ocksÄ godtyckliga smarta kontrakt, men inte Turing kompletta. Detta inkluderar Bitcoin och Litecoin med eget skript. Det betyder att du bara kan anvÀnda vissa operationer i valfri ordning, men du kan inte lÀngre skriva loopar och dina egna algoritmer.

Dessutom finns det smarta kontraktsplattformar som implementerar fördefinierade smarta kontrakt. Dessa inkluderar Bitshares och Steemit. Bitshares har en rad smarta kontrakt för handel, kontohantering, hantering av sjÀlva plattformen och dess parametrar. Steemit Àr en liknande plattform, men den Àr inte lÀngre fokuserad pÄ att ge ut tokens och handel, som Bitshares, utan pÄ att blogga, det vill sÀga den lagrar och bearbetar innehÄll pÄ ett decentraliserat sÀtt.

Godtyckliga Turing-kompletta kontrakt inkluderar Ethereum-plattformen och RootStock, som fortfarande Àr under utveckling. DÀrför kommer vi nedan att uppehÄlla oss lite mer i detalj pÄ Ethereums smarta kontraktsplattform.

Smarta kontrakt med initieringsmetod

Baserat pÄ metoden för initiering kan smarta kontrakt ocksÄ delas in i minst tvÄ grupper: automatiserade och manuella (ej automatiserade). Automatiserade sÄdana kÀnnetecknas av det faktum att, med alla kÀnda parametrar och villkor, det smarta kontraktet exekveras helt automatiskt, det vill sÀga det krÀver inte att du skickar nÄgra ytterligare transaktioner och spenderar en extra provision pÄ varje efterföljande utförande. Plattformen sjÀlv har all data för att berÀkna hur det smarta kontraktet kommer att slutföras. Logiken dÀr Àr inte godtycklig, utan förutbestÀmd och allt detta Àr förutsÀgbart. Det vill sÀga, du kan i förvÀg uppskatta komplexiteten i att utföra ett smart kontrakt, anvÀnda nÄgon form av konstant provision för det, och alla processer för dess implementering Àr mer effektiva.

För smarta kontrakt som Àr fritt programmerade Àr utförande inte automatiserat. För att initiera ett sÄdant smart kontrakt mÄste du i praktiskt taget varje steg skapa en ny transaktion, som kommer att anropa nÀsta exekveringssteg eller nÀsta smarta kontraktsmetod, betala lÀmplig provision och vÀnta pÄ att transaktionen ska bekrÀftas. Exekveringen kan slutföras framgÄngsrikt eller inte, eftersom den smarta kontraktskoden Àr godtycklig och nÄgra oförutsÀgbara ögonblick kan dyka upp, sÄsom en evig loop, brist pÄ vissa parametrar och argument, obehandlade undantag, etc.

Ethereum-konton

Ethereum-kontotyper

LÄt oss titta pÄ vilka typer av konton det kan finnas pÄ Ethereum-plattformen. Det finns bara tvÄ typer av konton hÀr och det finns inga andra alternativ. Den första typen kallas ett anvÀndarkonto, den andra Àr ett kontraktskonto. LÄt oss ta reda pÄ hur de skiljer sig Ät.

AnvÀndarkontot styrs endast av den personliga nyckeln till den elektroniska signaturen. KontoÀgaren genererar sitt eget nyckelpar för elektronisk signatur med hjÀlp av algoritmen ECDSA (Elliptic Curve Digital Signature Algorithm). Endast transaktioner som signerats med denna nyckel kan Àndra kontots tillstÄnd.

En separat logik tillhandahÄlls för det smarta kontraktskontot. Det kan endast kontrolleras av fördefinierad mjukvarukod som helt bestÀmmer beteendet hos det smarta kontraktet: hur det kommer att hantera sina mynt under vissa omstÀndigheter, pÄ initiativ av vilken anvÀndare och under vilka ytterligare villkor dessa mynt kommer att distribueras. Om vissa punkter inte tillhandahÄlls av utvecklarna i programkoden kan problem uppstÄ. Till exempel kan ett smart kontrakt fÄ ett visst tillstÄnd dÀr det inte accepterar initiering av ytterligare exekvering frÄn nÄgon av anvÀndarna. I det hÀr fallet kommer mynten faktiskt att frysas, eftersom det smarta kontraktet inte ger dig möjlighet att lÀmna detta tillstÄnd.

Hur konton skapas pÄ Ethereum

NÀr det gÀller ett anvÀndarkonto genererar Àgaren sjÀlvstÀndigt ett nyckelpar med hjÀlp av ECDSA. Det Àr viktigt att notera att Ethereum anvÀnder exakt samma algoritm och exakt samma elliptiska kurva för elektroniska signaturer som Bitcoin, men adressen berÀknas pÄ ett lite annorlunda sÀtt. HÀr anvÀnds inte lÀngre resultatet av dubbelhashning, som i Bitcoin, utan enkel hashning förses med Keccak-funktionen i en lÀngd av 256 bitar. De minst signifikanta bitarna skÀrs av frÄn det resulterande vÀrdet, nÀmligen de minst signifikanta 160 bitarna av det utgÄende hashvÀrdet. Som ett resultat fÄr vi en adress i Ethereum. Faktum Àr att den tar upp 20 byte.

Observera att kontoidentifieraren i Ethereum Àr kodad i hex utan att anvÀnda en kontrollsumma, till skillnad frÄn Bitcoin och mÄnga andra system, dÀr adressen Àr kodad i ett bas 58-nummersystem med tillÀgg av en kontrollsumma. Det betyder att du mÄste vara försiktig nÀr du arbetar med kontoidentifierare i Ethereum: Àven ett misstag i identifieraren kommer garanterat att leda till förlust av mynt.

Det finns en viktig funktion och det Àr att ett anvÀndarkonto pÄ generell databasnivÄ skapas i det ögonblick dÄ han accepterar den första inkommande betalningen.

Att skapa ett smart kontraktskonto tar ett helt annat tillvÀgagÄngssÀtt. Inledningsvis skriver en av anvÀndarna kÀllkoden för det smarta kontraktet, varefter koden skickas genom en kompilator som Àr special för Ethereum-plattformen och erhÄller bytekod för sin egen virtuella Ethereum-maskin. Den resulterande bytekoden placeras i ett speciellt fÀlt för transaktionen. Det Àr certifierat pÄ uppdrag av initiativtagarens konto. DÀrefter sprids denna transaktion i nÀtverket och placerar den smarta kontraktskoden. Provisionen för transaktionen och följaktligen för genomförandet av kontraktet dras frÄn saldot pÄ initiativtagarens konto.

Varje smart kontrakt innehÄller nödvÀndigtvis sin egen konstruktör (av detta kontrakt). Den kan vara tom eller sÄ kan den ha innehÄll. Efter att konstruktören har körts skapas en identifierare för smart kontraktskonto, med hjÀlp av vilken du kan skicka mynt, anropa vissa smarta kontraktsmetoder, etc.

Ethereums transaktionsstruktur

För att göra det tydligare kommer vi att börja titta pÄ strukturen för en Ethereum-transaktion och ett exempel pÄ en smart kontraktskod.

Introduktion till smarta kontrakt

En Ethereum-transaktion bestÄr av flera fÀlt. Den första av dessa, nonce, Àr ett visst serienummer för transaktionen i förhÄllande till sjÀlva kontot som distribuerar den och Àr dess författare. Detta Àr nödvÀndigt för att sÀrskilja dubbla transaktioner, det vill sÀga för att utesluta fallet nÀr samma transaktion accepteras tvÄ gÄnger. Genom att anvÀnda en identifierare har varje transaktion ett unikt hashvÀrde.

DÀrefter kommer ett fÀlt som gaspris. Detta indikerar priset till vilket Ethereums basvaluta omvandlas till gas, som anvÀnds för att betala för genomförandet av det smarta kontraktet och allokeringen av den virtuella maskinresursen. Vad betyder det?

I Bitcoin betalas avgifter direkt av basvalutan – Bitcoin sjĂ€lv. Detta Ă€r möjligt tack vare en enkel mekanism för att berĂ€kna dem: vi betalar strikt för mĂ€ngden data som ingĂ„r i transaktionen. I Ethereum Ă€r situationen mer komplicerad, eftersom det Ă€r mycket svĂ„rt att lita pĂ„ mĂ€ngden transaktionsdata. HĂ€r kan transaktionen Ă€ven innehĂ„lla programkod som kommer att exekveras pĂ„ den virtuella maskinen, och varje operation av den virtuella maskinen kan ha olika komplexitet. Det finns ocksĂ„ operationer som allokerar minne för variabler. De kommer att ha sin egen komplexitet, pĂ„ vilken betalningen för varje operation kommer att bero pĂ„.

Kostnaden för varje operation i gasekvivalenter kommer att vara konstant. Den introduceras specifikt för att faststÀlla den konstanta kostnaden för varje operation. Beroende pÄ belastningen pÄ nÀtet kommer gaspriset att Àndras, det vill sÀga koefficienten enligt vilken basvalutan kommer att omvandlas till denna hjÀlpenhet för att betala provisionen.

Det finns ytterligare en funktion för en transaktion i Ethereum: bytekoden som den innehÄller för exekvering i en virtuell maskin kommer att exekveras tills den slutförs med nÄgot resultat (framgÄng eller misslyckande) eller tills en viss mÀngd mynt som tilldelats tar slut för att betala provisionen . Det Àr för att undvika en situation dÀr, i hÀndelse av nÄgot fel, alla mynt frÄn avsÀndarens konto spenderades pÄ kommission (till exempel nÄgon form av evig cykel som startade i en virtuell maskin), finns följande fÀlt - starta gas (ofta kallad gasgrÀns) - den bestÀmmer den maximala mÀngden mynt som avsÀndaren Àr villig att spendera för att slutföra en viss transaktion.

NÀsta fÀlt kallas Destinations adress. Detta inkluderar adressen till mottagaren av mynten eller adressen till ett specifikt smart kontrakt vars metoder kommer att kallas. Efter det kommer fÀltet vÀrde, dÀr mÀngden mynt som skickas till destinationsadressen anges.

NÀsta Àr ett intressant fÀlt som heter datum, dÀr hela strukturen passar. Detta Àr inte ett separat fÀlt, utan en hel struktur dÀr koden för den virtuella maskinen Àr definierad. Du kan placera godtyckliga data hÀr - det finns separata regler för detta.

Och det sista fÀltet kallas namnteckning. Den innehÄller samtidigt bÄde den elektroniska signaturen frÄn författaren till denna transaktion och den publika nyckeln med vilken denna signatur kommer att verifieras. FrÄn den publika nyckeln kan du fÄ kontoidentifieraren för avsÀndaren av denna transaktion, det vill sÀga unikt identifiera avsÀndarens konto i sjÀlva systemet. Vi fick reda pÄ det viktigaste om transaktionens struktur.

Exempel pÄ smart avtalskod för Solidity

LÄt oss nu titta nÀrmare pÄ det enklaste smarta kontraktet med hjÀlp av ett exempel.

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

Ovan finns en förenklad kÀllkod som kan hÄlla anvÀndarnas mynt och returnera dem pÄ begÀran.

SÄ det finns ett banksmart kontrakt som utför följande funktioner: det ackumulerar mynt pÄ sitt saldo, det vill sÀga nÀr en transaktion bekrÀftas och ett sÄdant smart kontrakt skapas, skapas ett nytt konto som kan innehÄlla mynt pÄ sitt saldo; den minns anvÀndare och fördelningen av mynt mellan dem; har flera metoder för att hantera saldon, det vill sÀga det Àr möjligt att fylla pÄ, ta ut och kontrollera anvÀndarens saldo.

LÄt oss gÄ igenom varje rad med kÀllkod. Detta kontrakt har konstanta fÀlt. En av dem, med typadress, kallas Àgare. HÀr kommer kontraktet ihÄg adressen till anvÀndaren som skapade detta smarta kontrakt. Vidare finns det en dynamisk struktur som upprÀtthÄller överensstÀmmelse mellan anvÀndaradresser och balanser.

Detta följs av Bankmetoden - den har samma namn som kontraktet. Följaktligen Àr detta dess konstruktör. HÀr tilldelas Àgarevariabeln adressen till den person som lade detta smarta kontrakt pÄ nÀtverket. Detta Àr det enda som hÀnder i den hÀr konstruktören. Det vill sÀga, msg i det hÀr fallet Àr exakt den data som överfördes till den virtuella maskinen tillsammans med transaktionen som innehÄller hela koden för detta kontrakt. Följaktligen Àr msg.sender författaren till denna transaktion som Àr vÀrd för denna kod. Han kommer att vara Àgare till det smarta kontraktet.

InsÀttningsmetoden lÄter dig överföra ett visst antal mynt till kontraktskontot per transaktion. I det hÀr fallet lÀmnar det smarta kontraktet, som tar emot dessa mynt, dem pÄ sin balansrÀkning, men registrerar i balansstrukturen vem som var avsÀndaren av dessa mynt för att veta vem de tillhör.

NÀsta metod kallas uttag och det krÀvs en parameter - mÀngden mynt som nÄgon vill ta ut frÄn denna bank. Detta kontrollerar om det finns tillrÀckligt med mynt i saldot för anvÀndaren som anropar den hÀr metoden för att skicka dem. Om det finns tillrÀckligt med dem, returnerar det smarta kontraktet sjÀlvt det antalet mynt till den som ringer.

DÀrefter kommer metoden för att kontrollera anvÀndarens aktuella saldo. Den som anropar denna metod kommer att anvÀndas för att hÀmta detta saldo i det smarta kontraktet. Det Àr vÀrt att notera att modifieraren av denna metod Àr syn. Det betyder att metoden i sig inte Àndrar variablerna i sin klass pÄ nÄgot sÀtt och det Àr faktiskt bara en lÀsmetod. Ingen separat transaktion skapas för att anropa denna metod, ingen avgift betalas, och alla berÀkningar utförs lokalt, varefter anvÀndaren fÄr resultatet.

Killmetoden behövs för att förstöra det smarta kontraktets tillstÄnd. Och hÀr finns det en ytterligare kontroll om den som ringer denna metod Àr Àgaren till detta kontrakt. Om sÄ Àr fallet, förstör kontraktet sjÀlv, och förstöringsfunktionen tar en parameter - kontoidentifieraren till vilken kontraktet kommer att skicka alla mynt som finns kvar pÄ saldot. I det hÀr fallet kommer de ÄterstÄende mynten automatiskt att gÄ till kontraktsÀgarens adress.

Hur fungerar en full nod pÄ Ethereum-nÀtverket?

LÄt oss titta schematiskt pÄ hur sÄdana smarta kontrakt exekveras pÄ Ethereum-plattformen och hur en fullstÀndig nÀtverksnod fungerar.

Introduktion till smarta kontrakt

En full nod pÄ Ethereum-nÀtverket mÄste ha minst fyra moduler.
Den första, som för alla decentraliserade protokoll, Àr P2P-nÀtverksmodulen - en modul för nÀtverksanslutning och arbete med andra noder, dÀr block, transaktioner och information om andra noder utbyts. Detta Àr en traditionell komponent för alla decentraliserade kryptovalutor.

DÀrefter har vi en modul för att lagra blockchain-data, bearbeta, vÀlja en prioriterad gren, lÀgga till block, koppla bort block, validera dessa block, etc.

Den tredje modulen kallas EVM (Ethereum virtual machine) - detta Àr en virtuell maskin som tar emot bytekod frÄn Ethereum-transaktioner. Denna modul tar det aktuella tillstÄndet för ett visst konto och gör Àndringar i dess tillstÄnd baserat pÄ den mottagna bytekoden. Den virtuella maskinversionen pÄ varje nÀtverksnod mÄste vara densamma. BerÀkningarna som sker pÄ varje Ethereum-nod Àr exakt desamma, men de sker pÄ ett asynkront sÀtt: nÄgon kontrollerar och accepterar denna transaktion tidigare, det vill sÀga exekverar all kod som finns i den, och nÄgon senare. Följaktligen, nÀr en transaktion skapas, distribueras den till nÀtverket, noderna accepterar den, och vid tidpunkten för verifiering, pÄ samma sÀtt som Bitcoin Script exekveras i Bitcoin, exekveras bytekoden för den virtuella maskinen hÀr.

En transaktion anses verifierad om all kod som finns i den har utförts, ett nytt tillstÄnd för ett visst konto har genererats och sparats tills det Àr klart om denna transaktion har tillÀmpats eller inte. Om transaktionen tillÀmpas anses detta tillstÄnd inte bara vara avslutat utan ocksÄ aktuellt. Det finns en databas som lagrar statusen för varje konto för varje nÀtverksnod. PÄ grund av det faktum att alla berÀkningar sker pÄ samma sÀtt och blockkedjans tillstÄnd Àr detsamma, kommer databasen som innehÄller tillstÄnden för alla konton ocksÄ att vara densamma för varje nod.

Myter och begrÀnsningar för smarta kontrakt

NÀr det gÀller de begrÀnsningar som finns för smarta kontraktsplattformar som liknar Ethereum, kan följande nÀmnas:

  • kodexekvering;
  • allokera minne;
  • blockkedjedata;
  • skicka betalningar;
  • skapa nytt kontrakt;
  • ringa andra kontrakt.

LÄt oss titta pÄ begrÀnsningarna som ÄlÀggs en virtuell maskin, och följaktligen skingra nÄgra myter om smarta kontrakt. PÄ en virtuell maskin, som inte bara kan vara i Ethereum, utan ocksÄ i liknande plattformar, kan du utföra verkligt godtyckliga logiska operationer, det vill sÀga skriva kod och den kommer att köras dÀr, du kan dessutom tilldela minne. Avgiften betalas dock separat för varje operation och för varje extra minnesenhet som tilldelats.

DÀrefter kan den virtuella maskinen lÀsa data frÄn blockchain-databasen för att anvÀnda dessa data som en trigger för att exekvera en eller annan smart kontraktslogik. Den virtuella maskinen kan skapa och skicka transaktioner, den kan skapa nya kontrakt och anropsmetoder för andra smarta kontrakt som redan Àr publicerade pÄ nÀtverket: befintliga, tillgÀngliga, etc.

Den vanligaste myten Àr att Ethereums smarta kontrakt kan anvÀnda information frÄn vilken internetresurs som helst i sina villkor. Sanningen Àr att en virtuell maskin inte kan skicka en nÀtverksbegÀran till nÄgon extern informationsresurs pÄ Internet, det vill sÀga det Àr omöjligt att skriva ett smart kontrakt som kommer att fördela vÀrdet mellan anvÀndare beroende pÄ till exempel hur vÀdret Àr utanför, eller vem som vunnit nÄgot mÀsterskap, eller baserat pÄ vilken annan incident som hÀnde i omvÀrlden, eftersom information om dessa incidenter helt enkelt inte finns i sjÀlva plattformens databas. Det vill sÀga, det finns inget pÄ blockkedjan om detta. Om det inte visas dÀr kan den virtuella maskinen inte anvÀnda dessa data som utlösare.

Nackdelar med Ethereum

LÄt oss lista de viktigaste. Den första nackdelen Àr att det finns vissa svÄrigheter med att designa, utveckla och testa smarta kontrakt i Ethereum (Ethereum anvÀnder Solidity-sprÄket för att skriva smarta kontrakt). Praxis visar faktiskt att en mycket stor andel av alla fel tillhör den mÀnskliga faktorn. Detta Àr faktiskt sant för redan skrivna smarta Ethereum-kontrakt som har genomsnittlig eller högre komplexitet. Om sannolikheten för ett fel Àr liten för enkla smarta kontrakt, sÄ finns det i komplexa smarta kontrakt mycket ofta fel som leder till stöld av pengar, frysning av dem, förstörelse av smarta kontrakt pÄ ett ovÀntat sÀtt, etc. MÄnga sÄdana fall finns redan kÀnd.

Den andra nackdelen Àr att den virtuella maskinen i sig inte Àr perfekt, eftersom den ocksÄ Àr skriven av mÀnniskor. Den kan utföra godtyckliga kommandon, och dÀri ligger sÄrbarheten: ett antal kommandon kan konfigureras pÄ ett visst sÀtt som kommer att leda till konsekvenser som var oförutsedda pÄ förhand. Detta Àr ett mycket komplext omrÄde, men det finns redan flera studier som visar att dessa sÄrbarheter finns i den nuvarande versionen av Ethereum-nÀtverket och de kan leda till att mÄnga smarta kontrakt misslyckas.

En annan stor svÄrighet, det kan anses vara en nackdel. Det ligger i det faktum att du praktiskt eller tekniskt kan komma till slutsatsen att om du kompilerar bytekoden för ett kontrakt som kommer att exekveras pÄ en virtuell maskin, kan du bestÀmma nÄgon specifik operationsordning. NÀr de utförs tillsammans kommer dessa operationer att kraftigt belasta den virtuella maskinen och sakta ner den oproportionerligt mycket i förhÄllande till den avgift som betalades för att utföra dessa operationer.

Tidigare fanns det redan en period i utvecklingen av Ethereum, nÀr mÄnga killar som i detalj förstod driften av en virtuell maskin hittade sÄdana sÄrbarheter. Faktum Àr att transaktioner betalade en mycket liten avgift, men praktiskt taget saktade ner hela nÀtverket. Dessa problem Àr mycket svÄra att lösa, eftersom det för det första Àr nödvÀndigt att faststÀlla dem, för det andra att justera priset för att utföra dessa operationer och, för det tredje, att utföra en hÄrd gaffel, vilket innebÀr att uppdatera alla nÀtverksnoder till en ny version av programvaran och sedan samtidig aktivering av dessa Àndringar.

NÀr det gÀller Ethereum har mycket forskning utförts, mycket praktisk erfarenhet har vunnits: bÄde positiva och negativa, men ÀndÄ finns det svÄrigheter och sÄrbarheter som fortfarande mÄste hanteras pÄ nÄgot sÀtt.

SÄ, den tematiska delen av artikeln Àr klar, lÄt oss gÄ vidare till frÄgor som uppstÄr ganska ofta.

Vanliga frÄgor

— Om alla parter i ett befintligt smart kontrakt vill Ă€ndra villkoren, kan de sĂ€ga upp detta smarta kontrakt med multisig och sedan skapa ett nytt smart kontrakt med uppdaterade villkor för dess utförande?

Svaret hÀr kommer att vara tvÄdelat. Varför? För Ä ena sidan definieras ett smart kontrakt en gÄng och det innebÀr inte lÀngre nÄgra förÀndringar, och Ä andra sidan kan det ha förskriven logik som ger en fullstÀndig eller partiell Àndring av vissa villkor. Det vill sÀga om du vill Àndra nÄgot i ditt smarta kontrakt sÄ mÄste du föreskriva under vilka villkor du kan uppdatera dessa villkor. Följaktligen kan förnyelsen av avtalet endast organiseras pÄ ett sÄdant försiktigt sÀtt. Men Àven hÀr kan du rÄka ut för problem: gör nÄgot misstag och fÄ en motsvarande sÄrbarhet. DÀrför mÄste sÄdana saker vara mycket detaljerade och noggrant utformade och testade.

— Vad hĂ€nder om medlaren ingĂ„r ett avtal med en av de deltagande parterna: deposition eller smart kontrakt? KrĂ€vs en medlare i ett smart kontrakt?

En medlare krÀvs inte i ett smart kontrakt. Det kanske inte finns. Om, i fallet med deposition, medlaren inleder en konspiration med en av parterna, ja, detta system förlorar dÄ kraftigt allt sitt vÀrde. DÀrför vÀljs medlare ut pÄ ett sÄdant sÀtt att de fÄr förtroende av alla parter som Àr involverade i denna process samtidigt. Följaktligen kommer du helt enkelt inte att överföra mynt till en multisignaturadress med en medlare som du inte litar pÄ.

— Är det möjligt med en Ethereum-transaktion att överföra mĂ„nga olika tokens frĂ„n din adress till olika mĂ„ladresser, till exempel börsadresser dĂ€r dessa tokens handlas?

Detta Àr en bra frÄga och det gÀller Ethereum-transaktionsmodellen och hur den skiljer sig frÄn Bitcoin-modellen. Och skillnaden Àr radikal. Om du i Ethereum-transaktionsmodellen helt enkelt överför mynt, sÄ överförs de bara frÄn en adress till en annan, ingen förÀndring, bara det specifika beloppet du angav. Detta Àr med andra ord inte en modell av outnyttjade uttag (UTXO), utan en modell av konton och motsvarande saldon. Det Àr teoretiskt möjligt att skicka flera olika tokens i en transaktion samtidigt om du skriver ett listigt smart kontrakt, men du mÄste fortfarande göra mÄnga transaktioner, skapa ett kontrakt, sedan överföra tokens och mynt till det och sedan anropa lÀmplig metod . Detta krÀver anstrÀngning och tid, sÄ i praktiken fungerar det inte sÄ och alla betalningar i Ethereum görs i separata transaktioner.

— En av myterna om Ethereum-plattformen Ă€r att det Ă€r omöjligt att beskriva förhĂ„llanden som kommer att bero pĂ„ data frĂ„n en extern internetresurs, sĂ„ vad ska man göra dĂ„?

Lösningen Àr att det smarta kontraktet i sig kan tillhandahÄlla ett eller flera sÄ kallade betrodda orakel, som samlar in data om sakernas tillstÄnd i omvÀrlden och överför det till de smarta kontrakten genom speciella metoder. SjÀlva avtalet anser att uppgifterna som det mottagit frÄn betrodda parter Àr sanna. För större tillförlitlighet, vÀlj helt enkelt en stor grupp orakel och minimera risken för deras maskopi. SjÀlva kontraktet fÄr inte ta hÀnsyn till data frÄn orakel som motsÀger majoriteten.

En av förelÀsningarna i onlinekursen om Blockchain Àgnas Ät detta Àmne - "Introduktion till smarta kontrakt".

KĂ€lla: will.com

LĂ€gg en kommentar