Hvad er Smart Contracts?
Smart contracts (smartcontracts, smarte/intelligente kontrakter, smartkonktrakter, digitale kontrakter, … når du googler, vil du støde på mange forskellige betegnelser) er elektroniske kontrakter baseret på et computerprogram, der automatiserer forretningsprocesser på en juridisk sikker måde. Smartcontracts er baseret på blockchain-teknologi og udnytter fordelene ved denne teknologi, f.eks. gennemsigtighed, beskyttelse mod forfalskning og tilgængelighed.
Smartcontracts kan sammenlignes med konventionelle kontrakter, som f.eks. kontrakter, der indgås, når man køber en bil eller får et job. De anvendes ofte i forsyningskæder til at styre varetransporten mellem partnervirksomheder, til at gennemføre automatiske ordrer og dermed også automatiske betalinger.
Smartcontracts anvendes også i Internet of Things (IoT) til at behandle automatiske transaktioner. I IoT er forskellige enheder forbundet via internettet. Det kan være køretøjer, apparater, overvågningskameraer, sensorer og andre maskiner, der kommunikerer og udveksler data med hinanden. Smartcontracts kan netop også bruges til at styre denne udveksling af data. Dette muliggør automatiserede købekontrakter og fakturering og forvaltning af IoT-enheder.
Smartcontracts er ganske enkelt computerprogrammer. De koster færre penge og fungerer mere effektivt end manuelle processer og kontrakter i en virksomhed, f.eks. til at afgive ordrer og overvåge transport. Blockchains anvender ofte decentrale apps (dApps), som ikke har forbindelse til en server, men kører på deltagernes nodes (knudepunkter) i blockchain-netværket.
dApps er apps, der arbejder med og kører på blockchains, f.eks. smartcontracts. De spiller en vigtig rolle i blockchain-verdenen, også når det gælder opbygning af blockchain-applikationer baseret på Ethereum.
Menneskelige fejl er næsten umulige, når man bruger dApps og smartcontracts. Ikke desto mindre er der en menneskelig risiko, fordi automatiserede kontrakter kun er lige så gode som udviklerne og deres kode.
I øjeblikket er Ethereum den mest kendte blockchain-platform af dem, der tilbyder Turing-fuldstændig udvikling af smartcontracts. Ud over Ethereum er der også adskillige andre platforme som Cardano, Tezos eller i fremtiden IOTA Smart Contracts, der tilbyder denne service. Virksomheder, der i stedet bygger på deres egne blockchains, bruger ofte Hyperledger som grundlag.
Hvad er Smart Contracts – Definition
Smart contracts (ordret, som nævnt, intelligente kontrakter) er selvudførende kontrakter (computerprogrammer med en bestemt funktion). Her er vilkårene for aftalen mellem køber og sælger skrevet direkte ind i koden.
Smartcontracts er dApps (decentrale applikationer), der arbejder sammen med en blockchain eller DLT (distributed ledger technology). Koden for smartcontracts og de aftaler, de indeholder, findes på tværs af et distribueret, decentraliseret blockchain-netværk.
Smartcontracts gør det muligt at udføre fortrolige transaktioner og aftaler mellem forskellige pseudo-anonyme parter. Her er der ikke behov for centrale myndigheder i et retssystem eller andet eksternt.
Smartcontracts gør alle transaktioner sporbare, gennemsigtige og uigenkaldelige. Der er ingen central myndighed, men netværket og dets deltagere verificerer transaktionerne på grundlag af disse smartcontracts.
Smart Contracts og deres funktionsmåde
Smart contracts blev første gang beskrevet i 1993 af datalogen og kryptografen Nick Szabo. Han forstod, at smartcontracts kan anvendes i en blockchain og kan forenkle transaktioner mellem virksomheder enormt, uanset branche eller afdeling.
Kontrakter er aftaler mellem flere parter, som indeholder juridisk bindende hensigtserklæringer. Konventionelle, ikke-digitale kontrakter udfærdiges almindeligvis skriftligt og indeholder ud over oplysninger om de kontraherende parter også oplysninger om de pågældende parters respektive viljeserklæring, som skal gennemføres for at nå det fælles, kontraktmæssige mål. I denne henseende er konventionelle kontrakter i udgangspunktet ikke anderledes end smartcontracts.
Et simpelt eksempel: En købekontrakt om en bil indeholder oplysninger om bilforhandleren og køberen, f.eks. Holger Danske.
Endvidere skal aftalen i dette eksempel indeholde bilforhandlerens hensigt om at sælge et køretøj til kunden Holger Danske. Holger Danske skal også have skrevet ind i kontrakten, at han vil købe bilen. Kontrakten angiver, hvor meget Holger Danske skal betale for bilen, og hvad han til gengæld får.
Smartcontracts indeholder de samme oplysninger som konventionelle kontrakter. Kontraktoplysningerne er dog specificeret i koden for smartcontracten. Princippet her er, at code is law, dvs. det er koden, der gælder, og intet andet.
Bilforhandleren kan f.eks. bruge en smartcontract til at definere, at Holger Danske vil modtage bilen, når han har betalt 75.000 kr. for den. Det er sådan, smartcontracts fungerer: De indeholder “if”-regler, altså betingelser. Hvis en betingelse, der er defineret i kontrakten, opfyldes, medfører dette automatisk en konsekvens.
Det betyder, at specificerede aktiviteter, der skal realisere kontraktens formål, automatisk udføres, når visse betingelser opfyldes. Samtidig bliver alle medkontrahenter informeret om statusændringer i realtid.
En blockchains decentrale arkitektur kræver, at alle computere i netværket skal have adgang til de seneste oplysninger, for at den kan forblive sikker. Jo flere deltagere der samarbejder i en blockchain, jo større er sikkerheden og beskyttelsen mod forfalskning, i og med at der ingen central institution er, der kunne angribes, eller hvis data kunne manipuleres.
Et eksempel på en blockchain-platform, der tilbyder digitale kontrakter, og som vi nævnte i starten af denne artikel, er Ethereum. Ethereum-platformen er bygget på Bitcoins peer-to-peer-transaktionssystem. Bitcoin-netværket fungerer via et decentraliseret netværk af computere, som alle er forbundet med hinanden og som opdateres i realtid.
Alle computere i Bitcoin-netværket har enten alle eller i det mindste dele af Bitcoin-blockchainen gemt. Når en Bitcoin-transaktion udføres, sendes disse oplysninger automatisk til alle computere i netværket og gemmes af disse.
Ethereum gør det samme, som Bitcoin gør med transaktioner, blot også med digitale kontrakter, hvilket gør dem ekstra sikre. Alle, der ønsker at oprette smart contracts på Ethereum-netværket, bør se nærmere på Solidity-programmeringssproget.
Fordele ved Smart Contracts
Smart contracts har flere fordele sammenlignet med traditionelle kontrakter. Især følgende fordele kommer til udtryk i praksis:
- Pålidelighed: Hvis en smartcontract er programmeret korrekt, er det praktisk talt umuligt at fortolke kontraktvilkårene på anden vis end det, der står. Dette umuliggør også tab af vigtige dokumenter.
- Sikkerhed: Smartcontracts er beskyttet mod hackere ved hjælp af matematiske krypteringsmetoder. Ingen kan ændre de forhandlede kontraktvilkår efterfølgende. Det betyder dog ikke, at hackere ikke kan ændre og manipulere kildekoden.
- Effektivitet: Programmering af en smartcontracts tager mindre tid end de tilsvarende bureaukratiske anstrengelser, der er forbundet med konventionelle kontrakter. Det sparer tid og penge.
- Uafhængighed: Decentralt udførte smartcontracts kan unødvendiggør banker, forsikringsselskaber eller myndigheder. Den uforanderlige blockchain bruges til at verificere en kontrakt. Derfor gælder princippet om, at “code is law”. Kun programkoden for en kontrakt afgør, om betingelserne er blevet opfyldt korrekt eller ej.
Desuden er der mulighed for at implementere en kryptovaluta i disse digitale kontrakter. Det betyder, at kontraktens opfyldelse direkte kan betales i en kryptovaluta – dette er dog ikke obligatorisk. I tilfældet med Holger Dansker og bilforhandleren er det tænkeligt, at den digitale kontrakt sikrer, at forhandleren automatisk modtager betaling i ETH fra Holger Danske.
Ulemper ved Smart Contracts
Konceptet med digitale kontrakter er ikke fuldt udviklet endnu. De kan også forårsage problemer. Det kan f.eks. tænkes, at koden indeholder fejl. Da oplysninger i en blockchain er uforanderlige, kan sådanne fejl ikke rettes efterfølgende.
En fejl i programkoden for en mere kompleks digital kontrakt i form af en Decentralized Autonomous Organization (DAO), gjorde det muligt for hackere at stjæle Ether til en værdi af $50 millioner den 17. juni 2016. Som følge heraf måtte Ethereum foretage en hard fork, hvorved kryptovalutaen Ethereum Classic blev skabt.
Det er også tænkeligt, at der kan skrives bagdøre ind i koden. Derfor afhænger pålideligheden og uforanderligheden af en blockchainbaseret smart contract af dens programmør.
Desuden kan betingelserne for opfyldelse af kontrakten ændres tilfældigt. Hvis Holger Danske får leveret sin bil, men bilen er beskadiget, hvad sker der så? Er det noget, der registreres af smartcontracten? Det er uklart.
Et andet aspekt er de begrænsede anvendelsesmuligheder. Selv i dag er det langtfra alle verdens husstande, der har adgang til nettet eller blot tilsvarende apparater.
Brugen af smart contracts i erhvervslivet betyder, at virksomhederne skal bruge DLT (dsitributed ledger technology). Derfor er det nødvendigt at drive en egen infrastruktur eller anvende en anden decentraliseret løsning. Set fra dagens synspunkt er den nødvendige tekniske knowhow til at udvikle og anvende en blockchain- eller DLT-løsning endnu ikke tilgængelig i fornødne grad.
Desuden skal en virksomheds handelspartnere acceptere brugen af smartcontracts og også tilslutte sig infrastrukturen. En direkte konsekvens heraf er bl.a. høje omkostninger.
Brug af offentlige og private blockchains til smart contracts
I modsætning til offentlige blockchains, de såkaldte permissionless blockchains (tilladelsesfrie blockchains), som f.eks. Ethereum, findes der også private blockchains, som kaldes permissioned blockchains. Det mest kendte eksempel på en sådan privat blockchain er nok Hyperledger Fabric.
Fordelen set fra en virksomheds synspunkt er, at private blockchains kun er tilgængelige for en defineret, lille og afgrænset gruppe af brugere. Det betyder dog også, at det er vanskeligere at få adgang til blockchainen, da partnervirksomhederne først skal få oprettet en egen blockchain, inden de kan få adgang til en anden virksomheds protokol.
Generelt set er private blockchains heller ikke “rigtige” blockchains, men DLT’er. Teknologien er i princippet den samme, men kun nogle få deltagere har lov til at arbejde på DLT’en, hvilket naturligvis mindsker sikkerheden mod forfalskning. Grundlæggende bør nemlig et så stort fællesskab som muligt have adgang til en distributed ledger technology.
Private blockchains er for det meste bygget ved hjælp af Hyperledgers platforme og værktøjer. Et eksempel på dette er open source-platformen Hyperledger Iroha.
Smart Contracts og Ethereum 2.0
Ethereum findes i version 1 og 2. Smartcontracts vil blive indført omfattende, men kun gradvist i version 2. Version 1 understøtter allerede fuldt ud digitale kontrakter. Først fra udgivelsesfase 3 for Ethereum 2.0 er smartcontracts også integreret i Ethereum 2.0.
Ethereum 2.0 understøtter den nye virtuelle maskine eWASM. Ethereum WebAssembly (eWASM) er en ny version af Ethereums Smart Contract Layer (altså det lag, hvorpå smartcontracts kan udføres). Det nye lag siges at give mere ydeevne til smartcontracts. En anden ny funktion siges at være muligheden for at udvikle smartcontracts ved hjælp af C++ og Rust.
Praktiske eksempler på Smart Contracts
Der findes eksempler på anvendelse af smartcontracts i f.eks:
Forsyningskæder: Forsyningskæder af varer består normalt af flere parter. Fra forbrugeren, til detailhandleren, til grossisten, til virksomheden, til leverandøren og til producenten kan blockchain-baserede digitale kontrakter give alle involverede parter et fælles aftalegrundlag. Alle involverede parter kan i realtid følge med i, på hvilket stadie det tilbudte produkt befinder sig.
Sundhedsvæsenet: En smartcontract kan indeholde alle vigtige oplysninger om en patient, som så kun patienten selv, sygesikringen og læger har adgang til. Patienterne kan selv bestemme, hvilke informationer de ønsker at oplyse. Blockchain-applikationer og smart contracts er en effektiv måde at opdage og undgå produktforfalskning på. Dette gælder naturligvis især for lægemidler. Apoteker, hospitaler og andre leverandører i sundhedssektoren kan fakturere hinanden nemmere og hurtigere. Elektroniske recepter er også meget sikrere og nemmere at bruge på denne måde.
Økonomi: Selvfølgelig er blockchains også nyttige inden for finanssektoren. Det er ikke kun kryptovalutaer som Bitcoin, der har fordel af dette. I 2015 grundlagde forskellige banker konsortiet R3. R3 har lanceret en blockchain ved navn Corda, hvis open source-version hovedsageligt består af en masse smartcontracts. Fokus ligger her på at udvikle blockchain-løsninger til finanssektoren. Konsortiet omfatter bl.a. Barclays, BBVA, Commonwealth Bank of Australia, Credit Suisse, Goldman Sachs, Royal Bank of Scotland, State Street og UBS. Desuden er Bank of America, BNY Mellon, Citi, Commerzbank, Deutsche Bank, HSBC, Mitsubishi UFJ Financial Group, Morgan Stanley, National Australia Bank, Royal Bank of Canada, Skandinaviska Enskilda Banken, Société Générale og Toronto-Dominion Bank medlemmer.
Ejendom: Digitale kontrakter kan ikke kun regulere lejeforhold, men også lette køb eller salg af ejendom.
Regeringer: Stater kunne afholde valg via digitale kontrakter. Grundlaget herfor kunne være en kontrakt, der indgås mellem den pågældende regering og alle landets borgere. Det ville ikke kun give regeringen mulighed for at se, hvem der har stemt, men borgerne ville også have den fordel, at de nemt kunne afgive deres stemme med et enkelt klik. Allerede i 2017 havde byen Bolzano i Italien de første blockchain-løsninger til lokale myndigheder. Disse blev udviklet sammen med SAP.
Licensering: Digitale kontrakter kan f.eks. bruges til at udstede softwarelicenser på en effektiv måde. F.eks. kunne softwareudviklere specificere, at softwaren automatisk deaktiveres, hvis uautoriserede personer får adgang til den.
Smartcontracts anvendes allerede af nogle virksomheder. Der findes bl.a. eludbydere, der tilbyder deres kunder digitale kontrakter via Ethereum-platformen, så de nemt og hurtigt kan betale elregninger, og it-koncerner, der bygger deres infrastruktur på grundlag af blockchains.
På grund af en offentlig blockchains decentrale og pålidelige tilgang kan private applikationer i virksomheder også drage fordel af den. Transaktioner mellem forskellige virksomheder kan lettere valideres, da alle har adgang til Ethereum-mainnettet. Smartcontracts kan integreres og næsten fuldstændigt automatiseres via dette.
OpenLaw har til gengæld specialiseret sig i at digitalisere (for ikke at sige “blockchainisere”) traditionelle, juridiske aftaler.
Programmering af Smart Contracts
Til at skrive smartcontracts på Ethereum-platform bruges ofte det specialiserede programmeringssprog Solidity. Solidity blev nemlig udviklet af tidligere Ethereum-medarbejdere.
Vyper spiller også en vigtig rolle på Ethereum. Både Solidity og Vyper er programmeringssprog, der fokuserer på smartcontracts ved hjælp af Ethereum Virtual Machine.
Følgende eksempel illustrerer opsætningen af en salgsautomat ved hjælp af Solidity:
pragma solidity 0.6.11;
contract VendingMachine { // Declare state variables of the contract
address public owner;
mapping (address => uint) public cupcakeBalances;
// When 'VendingMachine' contract is deployed:
// 1. set the deploying address as the owner of the contract
// 2. set the deployed smart contract's cupcake balance to 100
constructor() public {
owner = msg.sender;
cupcakeBalances[address(this)] = 100;
}
// Allow the owner to increase the smart contract's cupcake balance
function refill(uint amount) public {
require(msg.sender == owner, "Only the owner can refill.");
cupcakeBalances[address(this)] += amount;
}
// Allow anyone to purchase cupcakes
function purchase(uint amount) public payable {
require(msg.value >= amount * 1 ether, "You must pay at least 1 ETH per cupcake");
require(cupcakeBalances[address(this)] >= amount, "Not enough cupcakes in stock to complete this purchase");
cupcakeBalances[address(this)] -= amount;
cupcakeBalances[msg.sender] += amount;
}
}
De, der ønsker at lære om udviklingen af smartcontracts, kan tage et kig på værktøjet Remix. I det browserbaserede udviklingsmiljø kan der udvikles automatiserede kontrakter til Ethereum. Remix understøtter Solidity og Vyper. Der kræves ingen installation for at bruge det.
Der er dog mange andre måder at programmere smartcontracts på. Azure Blockchain Development Kit med dets indeholdte skabeloner giver dig mulighed for at implementere Azure-tjenester i dine egne blockchain-løsninger. Der kan selvfølgelig også anvendes andre miljøer.
Der kan også bruges DevOps-tilgange til smartcontracts i blockchains. Desuden tilbyder Oracle muligheden for at udvikle smartcontracts på deres cloudplatform. Oracle viser udviklingen af sådanne smartcontracts med Oracle Cloud Platform mere detaljeret i en video.
AMD tilbyder en CPU med sine Ryzen Threadripper-processorer, som er blandt de bedste CPU’er inden for blockchain-beregninger. AMD samarbejder også med ConsenSys om dette. Smartcontracts kan også laves med blockchain-cloud-platformen W3BCLOUD.
Embark, Dapp, Truffle og Etherlime
Med Hyperledger Iroha kan selv mindre erfarne udviklere og brugere opsætte smartcontracts. Til dette formål har udviklerne integreret funktioner i Iroha, hvormed kommandoer kan udføres direkte uden at skulle kode fornødne programmer. Det betyder, at Hyperledger Iroha kan bruges til at udvikle smartcontracts både hurtigere og nemmere.
Embark er også et program, der er tilgængelig på Ethereum-platformen, og som kan bruges som framework til udvikling af dApps og digitale kontrakter. Dapp og Etherlime er yderligere to, der er baseret på ether.js.
Disse eksempler viser, hvor populære smartcontracts er, da der er flere og flere miljøer og frameworks, der kan bruges til at udvikle smarte kontrakter. Stort set alle frameworks understøtter Ethereum. Endnu et velkendt eksempel er Truffle . Truffle Boxes (https://www.trufflesuite.com/boxes) er en god adresse, hvor man kan finde Solidity-skabeloner og andre biblioteker.
Ethereum-udviklere er satser også på frameworket Cobra, når de skal udvikle smartcontracts. Cobra muliggør scriptede og automatiserede smartcontracts på offentlige eller private blockchains.
Udvikling af Smart Contracts med Visual Studio Code og Ethereum
Standardmiljøer og -redigeringsprogrammer som Microsoft Visual Studio Code kan også bruges som udviklingsmiljø for smartcontracts. Visual Studio Code er gratis og tilbyder også en udvidelse til Solidity. Med udvidelsen “ETHcode” kan kode, der er udviklet med Solidity og Vyper Code, skrives, implementeres og administreres. Derudover tilbyder Microsoft også gratis Blockchain Development Kit for Ethereum.
.NET kan i princippet også bruges til udvikling af smartcontracts. Især hvis disse også skal fungere sammen med andre applikationer i virksomheden, kan det give mening at arbejde med Microsoft-programmer, hvis der også anvendes andre Microsoft-løsninger i netværket.
Et eksempel på forbindelsen mellem Ethereum-blockchains, smartcontracts og .NET-teknologier findes på siden “A .NET Developer’s Workflow for Creating and Calling Ethereum Smart Contracts“.
Blockchains til brug af Smart Contracts
Virksomheder, der ønsker at bruge smartcontracts, gør ofte brug af Ethereum som deres blockchain. Til at udvikle egne blockchains til smartcontracts anvendes ofte Hyperledger open source-løsninger.
MultiChain er en open source-fork af Bitcoin. Med MultiChain kan egne blockchains anvendes i virksomheden, som igen kan danne grundlag for smartcontracts. Hovedfokus for MultiChain er driften af et manipulationssikkert og decentraliseret datalager, der kan bruges til forskellige formål.
Siden version 2 af MultiChain er det også muligt at kode, så miljøet også kan bruges til smartcontracts. De, der ønsker at bruge smartcontracts i SAP-miljøer, benytter sig oftest af Hyperledger Fabric i SAP Cloud Platform.
Hyperledger Fabric var allerede i begyndelsen af projektet optimeret til oprettelse af smartcontracts. Der findes adskillige SDK’er til stortset alle programmeringssprog til at lave smartcontracts med Hyperledger Fabric. Derfor er der mange flere værktøjer og udvidelser til Hyperledger Fabric på SAP Cloud Platform end til MultiChain eller Quorum.
Konklusion: Smart Contracts er et game changer
Digitale kontrakter er en innovation i forhold til traditionelle kontrakter. De kan indgås på verdensplan og mellem mange forskellige parter.
Med en smartcontract kan de kontraherende parter ikke blot via programkoden definere, hvilke kontraktbetingelser de er enige om, men også bestemme, hvad kontrakten automatisk skal udføre, når visse betingelser er opfyldt.
Det er muligt at integrere kryptovalutaer som betalingsmiddel i smartcontracts. Dvs. at smartcontracts muligvis vil være fremtidens mest almindelige form for kontrakt.