Introduktion till smarta kontrakt

I denna artikel gÄr vi igenom vad smarta kontrakt Àr, vilka typer som finns, vi bekantar oss med olika plattformar för smarta kontrakt, deras egenskaper, samt diskuterar hur de fungerar och vilka fördelar de kan ha. Detta material kommer vara mycket anvÀndbart för lÀsare som inte Àr tillrÀckligt bekanta med Àmnet smarta kontrakt, men som vill nÀrma sig en förstÄelse för det.

Vanligt kontrakt vs. smart kontrakt

Innan vi fördjupar oss i detaljerna, lÄt oss ta ett exempel för att förklara skillnaderna mellan ett vanligt kontrakt, som skrivs pÄ papper, och ett smart kontrakt, som finns i digital form.

Introduktion till smarta kontrakt

Hur fungerade det innan smarta kontrakt? TÀnk dig en grupp mÀnniskor som vill stÀlla upp vissa regler och villkor för fördelningen av vÀrden samt ha en mekanism som garanterar att fördelningen sker enligt dessa regler och villkor. DÄ samlades de och skrev ner sina identifierande uppgifter, villkoren, de involverade vÀrdena, satte datum och signerade. Detta kontrakt blev sedan granskat av en betrodd part, exempelvis en notarie. DÀrefter gick dessa personer skilda vÀgar med sina papperskopior av kontraktet och började utföra ÄtgÀrder som kanske inte överensstÀmde med sjÀlva kontraktet, det vill sÀga de gjorde en sak, men pÄ papperet var det bekrÀftat att de skulle göra nÄgot helt annat. Och hur löser man denna situation? I praktiken behövde nÄgon av deltagarna i gruppen ta detta papper, ta fram bevis och föra det till domstol för att krÀva överensstÀmmelse mellan kontraktet och de faktiska ÄtgÀrderna. Det Àr ganska ofta svÄrt att uppnÄ rÀttvis fullgörande av detta kontrakt, vilket leder till otrevliga konsekvenser.

Vad kan man sÀga om smarta kontrakt? De förenar bÄde möjligheten att skriva kontraktsvillkor och mekanismen för strikt efterlevnad av dessa. Om villkoren har stÀllts upp och en motsvarande transaktion eller begÀran har signerats, sÄ Àr det efter att begÀran eller transaktion har accepterats inte lÀngre möjligt att Àndra villkoren eller pÄverka deras utförande.

Det finns en eller flera validators samt en databas som lagrar alla smarta kontrakt som har skickats för att utföras i strikt kronologisk ordning. Det Àr ocksÄ viktigt att denna databas ska innehÄlla alla villkor och triggers för att utföra det smarta kontraktet. Dessutom mÄste den ta hÀnsyn till det vÀrde vars fördelning beskrivs i kontraktet. Om detta rör en viss digital valuta, mÄste denna databas ocksÄ ha den informationen.

Med andra ord mÄste validators för smarta kontrakt ha tillgÄng till all den information som smarta kontrakt hanterar. Till exempel bör en databas anvÀndas för att spÄra digitala valutor, anvÀndarbalanser, anvÀndartransaktioner och tidsstÀmplar samtidigt. DÄ kan villkoret i det smarta kontraktet vara anvÀndarens balans i en specifik valuta, intrÀffandet av viss tid, eller att en viss transaktion har genomförts, men inte mer.

Definition av smart kontrakt

SjÀlva terminologin myntades av forskaren Nick Szabo och anvÀndes för första gÄngen 1994, samt dokumenterades 1997 i en artikel som beskriver sjÀlva idén bakom smarta kontrakt.

Smarta kontrakt implicerar att det finns en automatisering av vÀrdespridning, som endast kan bero pÄ de villkor som har förinstÀllts. I sin enklaste form ser det ut som ett kontrakt med strikt faststÀllda villkor som har signerats av specifika parter.

Smarta kontrakt syftar till att minimera tilliten till tredje parter. Ibland utesluts helt ett beslutsfattande centrum, vilket allt handlar om. Dessutom Àr det enklare att utföra revisioner för sÄdana kontrakt. Detta Àr en följd av vissa designfunktioner av sÄdana system, men oftast förstÄr vi med smarta kontrakt en decentraliserad miljö och förekomsten av funktioner som gör att alla intresserade kan analysera databasen och genomföra en fullstÀndig revision av kontraktens genomförande. Detta garanterar skydd mot Àndringar av data i efterhand, vilket skulle pÄverka genomförandet av sjÀlva kontraktet. Digitalisering av de flesta processer vid skapandet och lanseringen av ett smart kontrakt förenklar ofta teknologin och kostnaden för deras genomförande.

Ett enkelt exempel — Escrow-tjĂ€nst

LÄt oss titta pÄ ett mycket enkelt exempel. Det kommer att hjÀlpa till att förstÄ de funktionen hos smarta kontrakt bÀttre och att navigera i vilka situationer de Àr lÀmpliga att anvÀnda.

Introduktion till smarta kontrakt

Det kan ocksĂ„ genomföras med hjĂ€lp av Bitcoin, Ă€ven om Bitcoin för nĂ€rvarande fortfarande Ă€r svĂ„rt att kalla en fullfjĂ€drad plattform för smarta kontrakt. SĂ„ vi har en köpare och en webbutik. Köparen vill köpa en skĂ€rm frĂ„n denna butik. I det enklaste fallet gör köparen en betalning och skickar den, och webbutiken accepterar den, bekrĂ€ftar den och skickar sedan varan. Men i denna situation finns det ett stort behov av tillit — köparen mĂ„ste lita fullt ut pĂ„ webbutiken för hela beloppet av skĂ€rmen. Eftersom webbutiken kan ha ett lĂ„gt rykte i köparens ögon, finns det en risk att butiken av nĂ„gon anledning vĂ€grar att fullfölja bestĂ€llningen efter att ha mottagit betalningen och inte skickar varan till köparen. DĂ€rför undrar köparen (och webbutiken stĂ€ller ocksĂ„ denna frĂ„ga) vad som kan tillĂ€mpas för att minimera sĂ„dana risker och göra liknande affĂ€rer mer tillförlitliga.

I fallet med Bitcoin kan man ge möjligheten för köparen och sÀljaren att oberoende vÀlja en medlare. Det finns mÄnga personer som arbetar med att lösa tvister. VÄr deltagare kan vÀlja en medlare frÄn en gemensam lista som de bÄda kan lita pÄ. Tillsammans skapar de en multisignaturadress 2 av 3, dÀr det finns tre nycklar och tvÄ signaturer frÄn vilka som helst av de tvÄ nycklarna krÀvs för att spendera mynten frÄn denna adress. En nyckel kommer att tillhöra köparen, den andra webbutiken och den tredje medlaren. Och pÄ denna multisignaturadress kommer köparen att skicka beloppet som krÀvs för att betala för skÀrmen. Nu, nÀr sÀljaren ser att pengarna Àr blockerade pÄ multisignaturadressen som Àr kopplad till honom under en tid, kan han tryggt skicka skÀrmen med post.

Köparen fÄr sedan paketet, granskar varan och fattar ett beslut om det slutgiltiga köpet. Han kan vara helt nöjd med den tillhandahÄllna servicen och signera transaktionen med sin nyckel, dÀr han överför mynt frÄn sÀljarnas multisignaturadress, eller sÄ kan han vara missnöjd. I det andra fallet kontaktar han medlaren för att upprÀtta en alternativ transaktion som pÄ annat sÀtt kommer att fördela dessa mynt.

Anta att monitorn har anlÀnt nÄgot repad och att det inte följde med en kabel för att ansluta till datorn, trots att det stod pÄ webbshoppen att en kabel skulle ingÄ. DÄ samlar köparen bevis för att visa medlaren att han har blivit lurad i denna situation: han tar skÀrmdumpar av webbplatsen, fotograferar kvittot frÄn posten, tar ett foto pÄ reporna pÄ monitorn och visar att förseglingen har brutits och kabeln tagits bort. Webbshoppen Ä sin sida samlar sina bevis och skickar dem till medlaren.

Medlaren Àr intresserad av att tillfredsstÀlla bÄde köparens missnöje och webbshopens intressen (det blir tydligt varför senare). Han upprÀttar en transaktion dÀr mynt frÄn multisignaturadressen kommer att fördelas i viss proportion mellan köparen, webbshoppen och medlaren, eftersom han behÄller en del som belöning för sitt arbete. Anta att 90% av hela summan gÄr till sÀljaren, 5% till medlaren och 5% som kompensation till köparen. Denna transaktion signerar medlaren med sin nyckel, men den kan Ànnu inte tillÀmpas, eftersom det behövs tvÄ signaturer, men det finns bara en. Han skickar denna transaktion till bÄde köparen och sÀljaren. Om Ätminstone en av dem Àr nöjd med detta förslag för omfördelningen av mynt, sÄ kommer transaktionen att undertecknas och spridas i nÀtverket. För att validera den rÀcker det att en av deltagarna i affÀren samtycker till medlarens förslag.

Det Àr viktigt att frÄn början vÀlja en medlare som bÄda parter har förtroende för. I sÄ fall kommer han att agera oberoende av intressen hos nÄgon av parterna och objektivt bedöma situationen. Om medlaren inte erbjuder en fördelning av mynt som tillfredsstÀller Ätminstone en av parterna, kan bÄde köparen och e-handelsbutiken, genom att enas, överföra mynten till en ny multisignaturadress och sÀtta sina tvÄ underskrifter. Den nya multisignaturadressen kommer att bestÄ av en annan medlare, som kanske Àr mer kompetent i frÄgan och kan erbjuda ett bÀttre alternativ.

Exempel med studenthem och kylskÄp

LÄt oss titta pÄ ett mer komplext exempel som tydligare illustrerar möjligheterna med smarta kontrakt.

Introduktion till smarta kontrakt

Anta att det finns tre killar som nyligen har flyttat in i samma rum i ett studenthem. De Àr alla intresserade av att köpa ett kylskÄp som de kommer att anvÀnda gemensamt i sitt rum. En av dem erbjuder sig att samla ihop det nödvÀndiga beloppet för att köpa kylskÄpet och förhandla med sÀljaren. Men de har relativt nyligen lÀrt kÀnna varandra och har inte tillrÀckligt med förtroende för varandra. Det Àr uppenbart att tvÄ av dem riskerar att ge pengar till den tredje. Dessutom mÄste de nÄ en överenskommelse om valet av sÀljare.

De kan anvÀnda en escrow-tjÀnst, det vill sÀga vÀlja en medlare som kontrollerar genomförandet av affÀren och löser eventuella tvister som kan uppstÄ. DÄ, genom att enas, skriver de ett smart kontrakt och specificerar vissa villkor.

Det första villkoret Àr att innan en viss tidpunkt, sÀg under en vecka, mÄste tre betalningar göras till det aktuella smartkontraktets konto frÄn angivna adresser pÄ ett specificerat belopp. Om detta inte sker, avbryts smartkontraktet och mynten returneras till alla deltagare. Om villkoret dÀremot uppfylls, stÀlls sÀljare och medlare identifieringsnummer, och det kontrolleras att alla deltagare Àr överens om valet av sÀljare och medlare. NÀr alla villkor har uppfyllts kommer medlen att överföras till de angivna adresserna. Denna metod kan skydda deltagarna frÄn bedrÀgerier frÄn vilken sida som helst och eliminerar i stort sett behovet av att lita pÄ andra.

Vi ser i detta exempel sjÀlva principen att möjligheten att stegvis faststÀlla parametrar för att uppfylla varje villkor gör att system av alla svÄrighetsgrader och djup av nivÄer kan skapas. Dessutom kan första villkoret först definieras i smartkontraktet, och först efter att det har uppfyllts kan parametrar för nÀsta villkor faststÀllas. Med andra ord, formellt skrivs villkoret ut, men parametrarna för det kan sÀttas under dess verkstÀllande.

Klassificering av smartkontrakt

För klassificering kan olika grupper av kriterier anges. Men för nÀrvarande Àr fyra av dem relevanta i teknologins utveckling.

Smartkontrakt kan skiljas Ät beroende pÄ exekveringsmiljön, som kan vara antingen centraliserad eller decentraliserad. Vid decentralisering har vi mycket större oberoende och motstÄndskraft vid utförande av smartkontrakt.

De kan ocksÄ skiljas Ät efter processen för att ange och utföra villkor: de kan vara fritt programmerbara, begrÀnsade eller förinstÀllda, det vill sÀga strikt typade. NÀr det pÄ smartkontraktsplattformen endast finns 4 specifika smartkontrakt, kan parametrarna för dem anges pÄ ett godtyckligt sÀtt. DÀrför Àr det mycket enklare att stÀlla in dem: vi vÀljer kontraktet frÄn listan och överför parametrarna.

Det finns automatiserade smarta kontrakt som initieras av vissa villkor, vilket innebÀr att de körs automatiskt nÀr dessa villkor uppfylls. Det finns ocksÄ kontrakt dÀr villkoren Àr definierade, men plattformen kontrollerar inte automatiskt deras uppfyllelse; dessa mÄste initieras separat.

Dessutom varierar smarta kontrakt beroende pÄ nivÄ av privatliv. De kan vara helt öppna, delvis öppna eller helt konfidentiella. Det sistnÀmnda innebÀr att externa observatörer inte ser villkoren för de smarta kontrakten. Emellertid Àr Àmnet privatliv mycket omfattande och bör behandlas separat frÄn den aktuella artikeln.

Nedan kommer vi att fokusera mer pÄ de tre första kriterierna för att klargöra förstÄelsen av det aktuella Àmnet.

Smarta kontrakt utifrÄn körningsmiljö

Introduktion till smarta kontrakt

UtifrÄn körningsmiljö sÀrskiljs centraliserade och decentraliserade plattformar för smarta kontrakt. I fallet med centraliserade digitala kontrakt anvÀnds en enda tjÀnst dÀr det finns en enda validerare, och det kan finnas en back-up och ÄterstÀllningstjÀnst som ocksÄ hanteras centraliserat. Det finns en databas som lagrar all nödvÀndig information för att stÀlla in villkoren för det smarta kontraktet och fördelning av det vÀrde som redovisas i denna databas. Denna centraliserade tjÀnst har en klient som sÀtter villkoren med specifika förfrÄgningar och anvÀnder dessa kontrakt. Eftersom plattformen Àr centraliserad kan autentiseringsmekanismerna vara mindre pÄlitliga Àn inom kryptovalutor.

Som ett exempel kan vi ta mobiloperatörer (olika teleoperatörer). Anta att en viss operatör pĂ„ sina servrar pĂ„ ett centraliserat sĂ€tt hanterar trafik som kan överföras i olika format, till exempel som röstsamtal, SMS-överföringar, mobil Internet-trafik, och enligt olika standarder, samt hanterar kontobalanser hos anvĂ€ndare. Följaktligen kan mobiloperatören skapa kontrakt för redovisning av de tjĂ€nster som erbjuds och deras betalningar med olika villkor. I sĂ„dana fall Ă€r det lĂ€tt att ange villkor sĂ„som ”skicka ett SMS med en viss kod till ett visst nummer för att fĂ„ sĂ„dana och sĂ„dana villkor för trafikfördelning.”

Ett annat exempel kan vara: traditionella banker med utvidgad funktionalitet för internetbanking och vÀldigt enkla kontrakt, som Äterkommande betalningar, automatisk konvertering av inkommande betalningar, automatiska avdrag av procent pÄ det angivna kontot och sÄ vidare.

NÀr det handlar om smarta kontrakt med en decentraliserad utförandemiljö har vi dÄ en grupp validerare. Idealt kan vem som helst bli en validerare. Genom databasens synkroniseringsprotokoll och uppnÄdd konsensus har vi en gemensam databas som nu kommer att lagra alla transaktioner med strikt beskrivna kontrakt, istÀllet för ospecificerade förfrÄgningar vars format ofta Àndras utan nÄgon öppen specifikation. HÀr innehÄller transaktionerna instruktioner för att genomföra kontraktet enligt den strikta specifikationen. Denna specifikation Àr öppen, vilket innebÀr att anvÀndarna av plattformen sjÀlva kan genomföra revision och validera smarta kontrakt. HÀr ser vi att decentraliserade plattformar övertrÀffar centraliserade i frÄga om oberoende och felresistens, men deras design och underhÄll Àr betydligt mer komplicerade.

Smarta kontrakt baserat pÄ sÀttet att ange och genomföra villkor

LĂ„t oss nu gĂ„ in pĂ„ hur smarta kontrakt kan skilja sig Ă„t i sĂ€ttet att ange och genomföra villkor. HĂ€r kommer vi att fokusera pĂ„ smarta kontrakt som programmeras fritt och Ă€r Turing-kompletta. Ett Turing-komplett smart kontrakt gör det möjligt att stĂ€lla nĂ€stan vilka algoritmer som helst som villkor för genomförandet av kontraktet: skriva loopar, funktioner för sannolikhetsberĂ€kning och sĂ„ vidare — Ă€ven egna algoritmer för elektronisk signatur. I det hĂ€r fallet handlar det verkligen om en godtycklig skrivning av logik.

Det finns ocksÄ godtyckliga smarta kontrakt som inte Àr Turing-kompletta. Hit hör Bitcoin och Litecoin med sitt skript. HÀr innebÀr det att man i godtycklig ordning kan anvÀnda endast vissa operationer, men man kan inte skriva loopar eller egna algoritmer.

Dessutom finns det plattformar för smarta kontrakt som implementerar förinstÀllda smarta kontrakt. Dessa inkluderar Bitshares och Steemit. Bitshares har en rad olika smarta kontrakt för handel, kontoadministration och plattformens parameterhantering. Steemit Àr en liknande plattform, men den Àr inte inriktad pÄ tokenutgivning och handel som Bitshares, utan pÄ bloggande, det vill sÀga den lagrar och bearbetar innehÄll pÄ ett decentraliserat sÀtt.

Bland de allmÀnna Turing-kompletta kontrakten kan vi rÀkna plattformarna Ethereum och RootStock, som fortfarande Àr under utveckling. DÀrför kommer vi lÀngre fram att titta nÀrmare pÄ Ethereum-smarta kontraktsplattformen.

Smarta kontrakt efter initiationsmetod

Efter initiationsmetod kan smarta kontrakt ocksÄ delas in i minst tvÄ grupper: automatiserade och manuella (icke-automatiserade). Automatiserade kontrakt kÀnnetecknas av att de vid kÀnda parametrar och intrÀffade villkor genomförs helt automatiskt, vilket innebÀr att det inte krÀvs nÄgra ytterligare transaktioner eller avgifter för varje efterföljande genomförande. Plattformen har all information för att berÀkna hur det smarta kontraktet kommer att avslutas. Logiken Àr inte godtycklig, utan fördefinierad, och allt detta Àr förutsÀgbart. Det innebÀr att man i förvÀg kan bedöma komplexiteten i att genomföra det smarta kontraktet, anvÀnda en konstant avgift för det och alla processer för dess genomförande gÄr mer effektivt.

För smarta kontrakt som programmeras pÄ ett godtyckligt sÀtt Àr genomförande inte automatiserat. För att initiera ett sÄdant smart kontrakt mÄste man i princip skapa en ny transaktion vid varje steg, vilket kommer att Äberopa nÀsta steg i genomförandet eller nÀsta metod för det smarta kontraktet, betala den relevanta avgiften och vÀnta pÄ transaktionsbekrÀftelse. Genomförandet kan avslutas framgÄngsrikt eller inte, eftersom koden för det smarta kontraktet Àr godtycklig och det kan ge upphov till oförutsÀgbara situationer, sÄsom oÀndliga loopar, brist pÄ vissa parametrar och argument, ohanterade undantag och sÄ vidare.

Konton i Ethereum

Typer av Ethereum-konton

LĂ„t oss titta pĂ„ vilka typer av konton som kan finnas pĂ„ Ethereum-plattformen. HĂ€r finns det endast tvĂ„ typer av konton, och inga fler alternativ Ă€n sĂ„. Den första typen kallas anvĂ€ndarkonto, den andra — kontraktskonto. LĂ„t oss förstĂ„ vad som skiljer dem Ă„t.

AnvÀndarkontot styrs endast av en privat nyckel för elektronisk signatur. Kontoinnehavaren genererar sitt eget nyckelpar för elektronisk signatur med algoritmen ECDSA (Elliptic Curve Digital Signature Algorithm). Endast transaktioner som Àr signerade med denna nyckel kan Àndra tillstÄndet för kontot.

För kontraktskontot finns det en separat logik. Det kan endast styras genom fördefinierad programkod, som helt bestÀmmer beteendet hos kontraktet: hur det kommer att hantera sina mynt under vissa omstÀndigheter, pÄ initiativ av vilken anvÀndare och under vilka ytterligare villkor mynten kommer att distribueras. Om vissa aspekter inte tÀcks av utvecklarna i programkoden kan det uppstÄ problem. Till exempel kan kontraktet hamna i ett visst tillstÄnd dÀr det inte accepterar initiativ för fortsatt utförande frÄn nÄgon anvÀndare. I sÄ fall kommer mynten i praktiken att vara frysta, eftersom kontraktet inte förutsÀtter en vÀg ut ur detta tillstÄnd.

Hur konton skapas i Ethereum

NÀr det gÀller anvÀndarkontot genererar Àgaren sjÀlv ett nyckelpar med ECDSA. Det Àr viktigt att notera att Ethereum anvÀnder exakt samma algoritm och samma elliptiska kurva för elektronisk signatur som Bitcoin, men adressen berÀknas pÄ ett nÄgot annat sÀtt. HÀr anvÀnds inte resultatet av dubbel hashning, som i Bitcoin, utan enkel hashning med funktionen Keccak pÄ 256 bitars lÀngd. De 160 lÀgsta bitarna av hash-funktionens utdata tas bort. Resultatet blir en adress i Ethereum. Faktiskt tar den upp 20 byte.

Vi noterar att kontoidentifieraren i Ethereum kodas i hex utan checksumma, till skillnad frÄn Bitcoin och mÄnga andra system dÀr adressen kodas i bas 58 med tillÀgg av checksumma. Detta innebÀr att man mÄste vara försiktig nÀr man arbetar med kontoidentifierare i Ethereum: Àven ett enda fel i identifieraren kommer garanterat att leda till förlust av mynt.

Det finns en viktig egenhet, och den gÄr ut pÄ att anvÀndarens konto pÄ nivÄn av den allmÀnna databasen skapas i det ögonblick han accepterar den första inkommande betalningen.

NÀr det gÀller skapandet av smarta kontrakt tillÀmpas ett helt annat tillvÀgagÄngssÀtt. Först skriver nÄgon av anvÀndarna kÀllkoden för det smarta kontraktet, varefter koden körs genom en kompilerare speciellt för Ethereum-plattformen, vilket ger bytekod för den egna Ethereum-virtuella maskinen. Den resulterande bytekoden placeras i ett speciellt fÀlt i transaktionen. Denna transaktion undertecknas av initiatorens konto. DÀrefter sprids denna transaktion genom nÀtverket och publicerar koden för det smarta kontraktet. Avgiften för genomförandet av transaktionen och dÀrmed för utförandet av kontraktet dras frÄn initiatorens konto.

Varje smart kontrakt innehÄller alltid sin konstruktör (till detta kontrakt). Den kan vara tom, men den kan ocksÄ ha innehÄll. Efter att konstruktören har körts skapas en kontoidentifierare för det smarta kontraktet, med hjÀlp av vilken mynt kan skickas, vissa metoder för det smarta kontraktet kan anropas, etc.

Strukturen för Ethereum-transaktionen

För att göra det tydligare börjar vi titta pÄ strukturen av Ethereum-transaktionen och ett exempel pÄ koden för smarta kontrakt.

Introduktion till smarta kontrakt

Ethereum-transaktionen bestÄr av flera fÀlt. Det första av dem, nonce, Àr ett visst sekvensnummer för transaktionen i förhÄllande till det konto som sprider den och Àr dess författare. Detta behövs för att sÀrskilja dubletter av transaktioner, det vill sÀga för att utesluta situationer dÀr samma transaktion tas emot tvÄ gÄnger. Tack vare anvÀndningen av identifieraren har varje transaktion ett unikt hash-vÀrde.

DÀrefter följer ett fÀlt som kallas gas price. HÀr anges priset, vid vilket basvalutan Ethereum konverteras till gas, som anvÀnds för att betala för genomförandet av smarta kontrakt och tilldelning av resurser för den virtuella maskinen. Vad betyder detta?

I Bitcoin betalas avgifterna direkt med basvalutan — sjĂ€lva bitcoin. Detta Ă€r möjligt tack vare en enkel berĂ€kningsmekanism: vi betalar strikt för mĂ€ngden data som finns i transaktionen. I Ethereum Ă€r situationen mer komplicerad, eftersom det Ă€r vĂ€ldigt svĂ„rt att utgĂ„ frĂ„n volymen data i transaktionen. HĂ€r kan transaktionen dessutom innehĂ„lla programkod som kommer att köras pĂ„ den virtuella maskinen, och varje operation pĂ„ den virtuella maskinen kan ha olika svĂ„righetsgrader. Det finns ocksĂ„ operationer som allokerar minne för variabler. De kommer att ha sin svĂ„righetsgrad, som kommer att pĂ„verka betalningen för varje operation.

Kostnaden för varje operation i gas-ekvivalent kommer att vara konstant. Den införs specifikt för att bestÀmma den konstanta kostnaden för varje operation. Beroende pÄ belastningen pÄ nÀtverket kommer gaspriset att förÀndras, det vill sÀga koefficienten enligt vilken basvalutan kommer att konverteras till denna hjÀlp-enhet för att betala avgifter.

Det finns ytterligare en egenskap hos transaktionen i Ethereum: byte-koden som den innehĂ„ller för att utföras pĂ„ den virtuella maskinen, kommer att köras tills den Ă€r klar med nĂ„got resultat (framgĂ„ng-eller-fel) eller tills det belopp av mynt som avsatts för att betala avgiften Ă€r slut. För att undvika en situation dĂ€r alla mynt pĂ„ avsĂ€ndarens konto försvinner pĂ„ avgiften i hĂ€ndelse av ett fel (till exempel om en oĂ€ndlig cykel har startats pĂ„ den virtuella maskinen), finns det följande fĂ€lt — startgas (det kallas ofta gasgrĂ€ns) — det definierar den maximala mĂ€ngden mynt som avsĂ€ndaren Ă€r beredd att spendera för att genomföra en viss transaktion.

Det följande fÀltet kallas destination address. Hit skrivs mottagarens adress för mynten eller adressen till ett specifikt smart kontrakt vars metoder kommer att anropas. Efter detta följer fÀltet value, dÀr summan av mynt som skickas till destination address skrivs.

DĂ€refter finns det ett intressant fĂ€lt som kallas data, dĂ€r en hel struktur fylls i. Det Ă€r inte ett separat fĂ€lt, utan en hel struktur dĂ€r koden för den virtuella maskinen definieras. HĂ€r kan man lĂ€gga in godtyckliga data — det finns sĂ€rskilda regler för detta.

Det sista fÀltet kallas signatur. Det innehÄller bÄde den elektroniska signaturen frÄn författaren av denna transaktion och den offentliga nyckeln som kommer att anvÀndas för att verifiera denna signatur. FrÄn den offentliga nyckeln kan man fÄ fram identifieraren för avsÀndarens konto för denna transaktion, vilket unikt identifierar avsÀndarkontot inom systemet. Vi har nu klargjort det vÀsentliga med transaktionsstrukturen.

Exempel pÄ smart kontrakt i Solidity

LÄt oss nu titta nÀrmare pÄ det enklaste smarta kontraktet som 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 ÄterlÀmna dem pÄ begÀran.

SÄ, det finns ett smart kontrakt Bank som utför följande funktioner: det ackumulerar mynt pÄ sin balans, det vill sÀga nÀr en transaktion bekrÀftas och ett sÄdant smart kontrakt placeras, skapas ett nytt konto som kan ha mynt pÄ sin balans; det kommer ihÄg anvÀndarna och fördelningen av mynt mellan dem; har flera metoder för att hantera balanser, det vill sÀga det finns möjligheter för insÀttning, uttag och kontroll av anvÀndarens balans.

LÄt oss gÄ igenom varje rad i kÀllkoden. I detta kontrakt finns det konstanta fÀlt. Ett av dem, av typen address, kallas owner. HÀr minns kontraktet adressen till anvÀndaren som skapade detta smarta kontrakt. Dessutom finns det en dynamisk struktur som lagrar motsvarigheter mellan anvÀndares adresser och balanser.

Efter detta följer metoden Bank — den kallas samma som kontraktet. DĂ€rmed Ă€r detta dess konstruktor. HĂ€r tilldelas variabeln owner adressen till den som la upp detta smarta kontrakt pĂ„ nĂ€tet. Det Ă€r det enda som sker i denna konstruktor. SĂ„ledes Ă€r msg i detta fall just de data som överfördes till den virtuella maskinen tillsammans med transaktionen som innehöll hela koden för detta kontrakt. DĂ€rmed Ă€r msg.sender avsĂ€ndaren av denna transaktion som lĂ€gger upp denna kod. Denne blir Ă€garen av det smarta kontraktet.

Metoden deposit tillÄter att överföra ett visst antal mynt till kontraktskontot via en transaktion. I detta fall behÄller smartkontraktet dessa mynt pÄ sin balans, men registrerar i strukturen balances vem som exakt var avsÀndaren av dessa mynt för att veta vem de tillhör.

Den följande metoden kallas withdraw och den tar ett parameter — det belopp av mynt som nĂ„gon vill ta ut frĂ„n denna bank. HĂ€r sker en kontroll för att se om det finns tillrĂ€ckligt med mynt pĂ„ anvĂ€ndarens balans som anropar denna metod, för att skicka dem. Om det finns tillrĂ€ckligt, Ă„tervĂ€nder smartkontraktet det angivna antalet mynt till den som anropar.

DÀrefter finns en metod för att kontrollera anvÀndarens aktuella balans. Den som anropar denna metod kommer att anvÀndas för att hÀmta denna balans i smartkontraktet. Det bör noteras att modifieraren för denna metod Àr view. Detta innebÀr att metoden inte Àndrar klassens variabler och den Àr faktiskt endast en lÀsmetod. Ingen separat transaktion skapas för att anropa denna metod, ingen avgift betalas, och alla berÀkningar görs lokalt, varefter anvÀndaren fÄr resultatet.

Metoden kill behövs för att förstöra tillstĂ„ndet av smartkontraktet. HĂ€r finns en ytterligare kontroll som ser om den som anropar denna metod Ă€r Ă€garen av kontraktet. Om sĂ„ Ă€r fallet, kommer kontraktet att sjĂ€lvförstöra sig och funktionen för förstörelse tar ett parameter — kontots identifierare dit kontraktet kommer att skicka alla mynt som finns kvar pĂ„ dess balans. I detta fall kommer de kvarvarande mynten automatiskt att gĂ„ till Ă€garens adress.

Hur fungerar ett fullstÀndigt nod i Ethereum-nÀtverket?

LÄt oss schematiskt betrakta hur exekveringen av sÄdana smartkontrakt pÄ Ethereum-plattformen sker och hur ett fullstÀndigt nod i nÀtverket fungerar.

Introduktion till smarta kontrakt

Ett fullstÀndigt nod i Ethereum-nÀtverket mÄste minst ha fyra moduler.
Den första, som för alla decentraliserade protokoll, Ă€r P2P networking module — nĂ€tverksmodulen för att ansluta till och arbeta med andra noder, dĂ€r utbyte av block, transaktioner och information om andra noder sker. Detta Ă€r en traditionell komponent för alla decentraliserade kryptovalutor.

Vidare har vi en modul för lagring av blockchain-data, processering, val av prioriterad kedja, tillÀgg av block, avskiljning av block, verifiering av dessa block etc.

Den tredje modulen kallas EVM (Ethereum Virtual Machine) — det Ă€r virtuell maskin, som tar emot bytekod frĂ„n Ethereum-transaktioner. Denna modul tar emot det aktuella tillstĂ„ndet för ett visst konto och utför förĂ€ndringar av dess tillstĂ„nd baserat pĂ„ den mottagna bytekoden. Versionen av den virtuella maskinen pĂ„ varje nĂ€tverksnod mĂ„ste vara densamma. BerĂ€kningarna pĂ„ varje Ethereum-nod Ă€r exakt lika, men de sker i asynkron ordning: nĂ„gon bekrĂ€ftar och accepterar denna transaktion tidigare, det vill sĂ€ga kör hela koden i den, medan nĂ„gon gör det senare. DĂ€rför, nĂ€r en transaktion skapas, sprids den i nĂ€tverket, noderna accepterar den och vid verifieringssteget, precis som i Bitcoin, utförs Bitcoin Script, hĂ€r körs bytekoden av den virtuella maskinen.

En transaktion anses vara verifierad om all kod som finns i den har körts, ett nytt tillstÄnd för det angivna kontot har genererats och detta tillstÄnd sparas tills det Àr klart om transaktionen har tillÀmpats eller ej. Om transaktionen har tillÀmpats, dÄ anses detta tillstÄnd inte bara vara utfört, utan ocksÄ aktuellt. Det finns en databas som lagrar tillstÄndet för varje konto för varje nod i nÀtverket. Eftersom alla berÀkningar sker likadant och blockchainens tillstÄnd Àr densamma, sÄ kommer Àven databasen som innehÄller tillstÄnden för alla konton att vara densamma för varje nod.

Myter och begrÀnsningar för smarta kontrakt

NÀr det gÀller begrÀnsningar som existerar för smarta kontrakt pÄ plattformar liknande Ethereum kan följande nÀmnas:

  • kodexekvering;
  • allokera minne;
  • blockchain-data;
  • skicka betalningar;
  • skapa nya kontrakt;
  • anropa andra kontrakt.

LÄt oss titta pÄ de begrÀnsningar som ÄlÀggs den virtuella maskinen och dÀrför avliva vissa myter om smarta kontrakt. PÄ den virtuella maskinen, som kan finnas inte bara i Ethereum utan Àven i liknande plattformar, kan man utföra verkligen godtyckliga logiska operationer, det vill sÀga skriva kod som kommer att köras dÀr, och dessutom Àr det möjligt att allokera minne. Dock betalas avgiften separat för varje operation och för varje ytterligare allokerad enhet av minneskapacitet.

Vidare kan den virtuella maskinen lÀsa data frÄn blockkedjans databas, för att anvÀnda dessa data som en trigger för att utföra olika logiker i smarta kontrakt. Den virtuella maskinen kan skapa och skicka transaktioner, den kan skapa nya kontrakt och kalla metoder frÄn andra smarta kontrakt som redan har publicerats pÄ nÀtverket: de finns, Àr tillgÀngliga och sÄ vidare.

Den mest utbredda myten Àr att Ethereum-smartkontrakt kan anvÀnda information frÄn vilken internetresurs som helst i sina villkor. Sanningen Àr att den virtuella maskinen inte kan skicka ett nÀtverksanrop till nÄgon extern informationsresurs pÄ internet, det vill sÀga man kan inte skriva ett sÄdant smart kontrakt som skulle fördela vÀrde mellan anvÀndare utifrÄn vilket vÀder som rÄder, eller vem som har vunnit i en tÀvling, eller baserat pÄ nÄgon annan hÀndelse i den yttre vÀrlden, eftersom information om dessa hÀndelser helt enkelt inte finns i plattformens databas. Det vill sÀga, pÄ blockkedjan finns inget om detta. Om det inte kommer dit kan den virtuella maskinen inte anvÀnda dessa data som triggers.

Nackdelar med Ethereum

LÄt oss lista de viktigaste av dem. Den första nackdelen Àr att det finns vissa svÄrigheter vid design, utveckling och testning av smarta kontrakt i Ethereum (i Ethereum anvÀnds programmeringssprÄket Solidity för att skriva smarta kontrakt). Faktiskt visar erfarenheten att en stor andel av alla fel beror pÄ mÀnskliga faktorer. Detta gÀller faktiskt ocksÄ för redan skrivna Ethereum-smarta kontrakt som har medelhög eller hög komplexitet. Om risken för fel Àr lÄg för enkla smarta kontrakt, sÄ förekommer det ofta fel i komplexa smarta kontrakt som leder till stöld av medel, frysing av medel, oavsiktlig destruktion av smarta kontrakt osv. MÄnga sÄdana fall Àr redan kÀnda.

Den andra nackdelen Àr att den virtuella maskinen inte Àr perfekt, eftersom den ocksÄ Àr skriven av mÀnniskor. Den kan utföra godtyckliga kommandon, vilket utgör en sÄrbarhet: det gÄr att konfigurera en rad kommandon pÄ ett visst sÀtt som leder till oönskade konsekvenser. Detta Àr ett mycket komplext omrÄde, men det finns redan flera studier som visar att dessa sÄrbarheter finns i den aktuella versionen av Ethereum-nÀtverket och att de kan leda till att mÄnga smarta kontrakt slutar fungera.

En annan stor svÄrighet, som kan betraktas som en nackdel, Àr att man pÄ praktiskt eller tekniskt sÀtt kan komma fram till att om man komprimerar bytekod för ett kontrakt som ska köras pÄ den virtuella maskinen, kan man bestÀmma en specifik ordning av operationer. NÀr dessa operationer utförs tillsammans kommer de att belasta den virtuella maskinen betydligt och fördröja den oproportionerligt i förhÄllande till den avgift som betalats för att utföra dessa operationer.

Tidigare har det funnits perioder i Ethereums utveckling dÀr mÄnga som kÀnde till den virtuella maskinens funktioner upptÀckte sÄdana sÄrbarheter. Faktiskt betalades mycket lÄga avgifter för transaktionerna, men de saktade nÀstan ner hela nÀtverkets funktion kraftigt. Dessa problem Àr svÄra att lösa, eftersom de först mÄste identifieras, sedan justera kostnaden för att utföra dessa operationer och till sist genomföra en hard fork, vilket innebÀr en uppdatering av alla nÀtverksnoder till den nya programvaruversionen, följt av en samtidig aktivering av dessa förÀndringar.

NÀr det gÀller Ethereum har det genomförts mÄnga studier och en stor mÀngd praktisk erfarenhet har samlats: bÄde positiv och negativ, men det kvarstÄr ÀndÄ svÄrigheter och sÄrbarheter som mÄste hanteras pÄ nÄgot sÀtt.

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

Vanliga frÄgor

— Om alla parter i ett gĂ€llande smart kontrakt vill Ă€ndra villkoren, kan de dĂ„ avsluta detta smarta kontrakt med hjĂ€lp av multipartsunderskrift och sedan skapa ett nytt smart kontrakt med uppdaterade villkor för dess genomförande?

Svaret hÀr kommer att vara dubbelt. Varför? För att Ä ena sidan sÀtts det smarta kontraktet en gÄng för alla och implicerar inga förÀndringar, men Ä andra sidan kan det ha en förutbestÀmd logik som möjliggör fullt eller delvis Àndring av vissa villkor. Det vill sÀga, om du vill Àndra nÄgot i ditt smarta kontrakt mÄste du pÄ förhand ange de villkor under vilka du kan uppdatera dessa villkor. DÀrmed kan uppdateringen av kontraktet endast organiseras pÄ ett sÄ förutseende sÀtt. Men Àven hÀr kan man stöta pÄ problem: göra nÄgot misstag och fÄ en motsvarande sÄrbarhet. DÀrför mÄste sÄdana saker planeras och testas mycket noggrant.

— Och om medlaren gĂ„r i samförstĂ„nd med en av deltagarna: escrow eller smart kontrakt? Är medlaren obligatorisk i ett smart kontrakt?

En medlare Àr inte nödvÀndig i smarterna. Den kan vara frÄnvarande. Om medlaren i en escrow-överenskommelse skulle samarbeta med en av parterna, sÄ förlorar den modellen snabbt sitt vÀrde. DÀrför vÀljs medlare pÄ ett sÄdant sÀtt att alla involverade parter litar pÄ dem samtidigt. DÀrmed kommer du helt enkelt inte att överföra mynt till en multisignaturadress med den medlare du inte litar pÄ.

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

Det Àr en bra frÄga och den rör modellen för Ethereum-transaktioner och dess skillnader frÄn Bitcoin-modellen. Skillnaden Àr radikal. I Ethereum-modellen överför du helt enkelt mynt, och de överförs endast frÄn en adress till en annan, utan vÀxel, bara det specifika beloppet som du angav. Med andra ord, det Àr inte en modell för obrukade utgÄngar (UTXO), utan en modell för konton och motsvarande saldon. En transaktion kan teoretiskt sett genomföra flera olika token om man skriver ett smart kontrakt, men man mÄste ÀndÄ göra mÄnga transaktioner, skapa kontraktet, överföra token och mynt till det, och sedan anropa motsvarande metod. Detta krÀver anstrÀngning och tid, sÄ i praktiken fungerar det inte sÄ och alla betalningar i Ethereum genomförs som separata transaktioner.

— En av myterna om Ethereum-plattformen Ă€r att det Ă€r omöjligt att beskriva sĂ„dana villkor som beror av data frĂ„n externa internetresurser, hur ska man göra dĂ„?

Lösningen Àr att sjÀlva smartkontraktet kan förutsÀtta en eller flera sÄ kallade pÄlitliga orakler, som samlar in data om tillstÄndet i den externa vÀrlden och överför dem till smartkontrakten via speciella metoder. SjÀlva kontraktet anser att de data Àr sanna som det fÄtt frÄn pÄlitliga kÀllor. För större tillförlitlighet vÀljs helt enkelt en större grupp orakler för att minimera risken för samverkan. SjÀlva kontraktet kan ignorera data frÄn orakler som motsÀger majoriteten.

Ämnet Ă€gnas Ă„t en av förelĂ€sningarna i onlinekursen om Blockchain — “Introduktion till smarta kontrakt”.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster