22.8.2017

Dialogic Blockchain-serie #5

Det snakkes mye om blockchain, men hvordan ser en blockchain faktisk ut? Den beste måten å bli kjent med en ny teknologi på, er å prøve den selv. I denne artikkelen forklarer vi hvordan du kan eksperimentere med blockchain på egen hånd. Å bygge din egen blockchain er faktisk ikke vanskelig i det hele tatt. Det kan virke vanskelig til tider - men fortvil ikke, det er egentlig ganske enkelt.

Denne teksten er automatisk oversatt og kan derfor avvike fra originalen. Ingen rettigheter kan utledes fra denne oversettelsen.

💬 Click here to read this page in English.

Brette opp ermene!

Begynn å jobbe: hva trenger du?

For å sette opp en enkel blockchain kan du bruke programvare som er gratis tilgjengelig på internett. Denne programvaren fungerer i de fleste tilfeller på Windows- og Mac-datamaskiner. I dette eksempelet vil vi bruke Ethereum-plattformen. Ethereum er en offentlig tilgjengelig blockchain - bruk av blockchain betales med digital valuta kalt 'ether'. I dette eksempelet bruker vi programvaren under Ethereum-blockchain for å lage vår egen private kopi.

Installer klienten

For å komme i gang trenger du en klient. Dette er en programvare som regulerer blockchain-kommunikasjon med andre datamaskiner ('noder'). Ved å starte klienten, blir du en del av blockchainen og kan lagre nye kontrakter i blockchainen. Last ned 'Go Ethereum'-klienten fra denne siden og installer den. Når du har gjort dette, er det lurt å sjekke om klienten er riktig installert. For å gjøre dette, gå (i Windows) til Start-menyen, 'Kjør', og skriv 'cmd' etterfulgt av 'OK' (Mac-brukere åpner via Applications-mappen Utilities-mappen og deretter programmet 'Terminal'; de andre instruksjonene er like). I skjermen som dukker opp, skriver du 'geth version' etterfulgt av enter. Hvis alt har gått bra, vil du se en oversikt over den installerte versjonen av Go-Ethereum.

Begynnelsen av kjeden: blockchain-genesis

Nå som programvaren er installert, er det på tide å begynne å bygge opp blockchainen. Som beskrevet tidligere, består en blockchain av en kjede med "blokker". Den første blokken kalles "genesis-blokken" og er spesiell fordi den er den første blokken som alle deltakerne stoler på uten ytterligere bekreftelse. Alle blokkene som følger etter genesisblokken, er en del av blockchainen.

Last ned først filen genesis.json og plasser den på skrivebordet. Denne filen beskriver hvordan genesisblokken skal se ut. Deretter kjører du følgende kommando i kommandolinjen:

geth –datadir %USERPROFILE%/Desktop/data –networkid 3336 init %USERPROFILE%/Desktop/genesis.json

Hvis alt har gått bra, vil du se en melding om at genesisblokken er opprettet. En 'data'-map vil vises på skrivebordet - her lagrer klienten all data som er nødvendig for å delta i blockchainen.

Når genesisblokken er opprettet, er det på tide å starte blockchainen! Bruk følgende kommando for dette:

geth –datadir %USERPROFILE%\Desktop\data –ipcpath ./geth.ipc –rpc –rpccorsdomain “*” –networkid 3336

Når meldingen 'IPC endpoint opened' vises, er klienten klar til bruk. Du kan stoppe klienten ved å trykke 'Ctrl-C' i kommandolinjen. Nå er tiden inne for å faktisk begynne å bruke blockchainen. Dette kan gjøres på flere måter; først kan du få tilgang til blockchainen via 'konsollen'. Dette er en omgivelse der du kan utføre kommandoer på blockchainen. La klienten fortsette å kjøre, og åpne et nytt kommandovindu (Start, Kjør, cmd eller Terminal på Mac) og skriv inn følgende kommando:

geth attach \\.\pipe\geth.ipc

Hvis alt går bra, vises "Welcome to the Geth JavaScript console!" og noen versjonsnumre. Først må vi opprette en konto - med en konto får du tilgang til blockchainen. En konto er sikret med et passord. Når du oppretter en konto, angir du dette passordet. En ny konto opprettes med følgende kommando:

personal.newAccount()

Dernest, hver gang klienten startes på nytt, må kontoen åpnes (‘unlockes’). Dette kan gjøres med følgende kommando (denne ber om det tidligere valgte passordet):

personal.unlockAccount(personal.listAccounts[0])

For å la klienten legge til blokker i kjeden, må det 'mines'. Du starter miningsprosessen slik:

miner.setEtherbase(personal.listAccounts[0])
miner.start(1)

Ettersom mining krever mye regnekraft, velger vi her å begrense hastigheten - tallet '1' bestemmer at bare en prosessor i datamaskinen din vil bli brukt til mining. I et 'ekte' nettverk vil du bruke all regnekraften. Når du starter miningen for første gang, vil du se at det tar litt tid før faktiske blokker vises (i klientens vindu vises det flere ganger “Generating DAG”). Deretter bør du se at det vises en ny blokk hvert par sekund:

På grunn av at miningblokker er konfigurert som lette i genesisfilen, vises nye blokker raskt. I en ‘ekte’ blockchain er mining mer utfordrende, og blokkene vises tregere. For å teste en blockchain er det imidlertid gunstig når blokker vises raskt - dine smidige kontrakter blir da behandlet raskere.

Du kan forlate konsollen ved å skrive ‘exit’. Det er imidlertid ingenting galt i å la konsollen stå åpen litt til.

Skrive smarte kontrakter

For å skrive smarte kontrakter og legge dem inn i blockchainen, bruker du programmeringsmiljøet Solidity. Last ned Solidity via denne lenken - pakk ut zip-filen og dobbeltklikk på filen ‘index.html’. Hvis alt går som det skal, vises et tomt tekstfelt:

Vi må først fortelle Solidity-editoren at den kan snakke med vår egen blockchain (via vår egen klient). For å gjøre dette, navigerer du til fanen ‘Contract’ og velger under 'Select execution environment' 'Web3 provider'. Klikk deretter gjennom alle meldingene.

Nå er du klar til å skrive din første smarte kontrakt! Vi vil nærme oss ulike smarte kontrakter i kommende artikler. Nedenfor er en veldig enkel kontrakt som egentlig ikke gjør noe, men som lar oss teste om blockchainen fungerer:

pragma solidity ^0.4.0;

contract Hello {
    address public owner;

    function Hello() {
        owner = msg.sender;
    }

    // No payments can be sent
    function () {
        throw;
    }
}

Hva står det her? Den første linjen indikerer bare språkversjonen vi vil bruke (0.4.0). Deretter starter kontrakten ("contract Hello"). Linjen ‘address public owner’ indikerer at det i denne kontrakten er lagret én informasjon, nemlig adressen ('kontonummeret') til den som lagde kontrakten. ‘function Hello’ definerer hva som skal skje når denne kontrakten opprettes. Det eneste vi gjør nå er å lagre hvem som har opprettet kontrakten, i den tidligere diskuterte adressefeltet. Til slutt finner vi noen linjer som sørger for at det ikke kan sendes blockchain-penger til kontrakten.

Koden for en kontrakt bør betraktes som et grunnlag - du kan instanciere en eller flere kontrakter som fungerer etter koden (akkurat som i den ‘normale’ kontraktverdenen der forskjellige ‘kjøpsavtaler’ for eksempel kan inngås om forskjellige hus, men ser like ut i form).

For å inngå en ny kontrakt, klikker du i Solidity på ‘Create’ på fanen ‘Contract’. Det skal stå ‘waiting for transaction to be published’ først. Du kan få en feilmelding - i så fall kan det være at kontoen din har blitt 'låst' igjen. Skriv inn kommandoen 'personal.unlockAccount(personal.listAccounts[0])' i konsollen på nytt hvis alt har gått bra, vil til slutt en blokk ‘Untitled:Hello at’ vises etterfulgt av et langt tall. Dette tallet er adressen på kontrakten, egentlig kontraktnummeret. Med dette nummeret kan du utføre spesifikke handlinger med kontrakten - dette kommer vi tilbake til senere. I blokken finner du egenskapene til kontrakten, inkludert eieren sin adresse. For nå lar vi det være - du har laget din første smarte kontrakt!

Til slutt

Basert på din egen blockchain kan du i prinsippet bygge ulike applikasjoner basert på smarte kontrakter. Dette betyr imidlertid ikke nødvendigvis at det er lurt å bruke din egen blockchain for dette. Det første spørsmålet du må stille deg, er om bruken av en blockchain virkelig er nødvendig. Når alle parter som må utveksle informasjon og inngå avtaler med hverandre stoler fullstendig på hverandre, er en 'enkel' delt database egentlig tilstrekkelig. Hvis du likevel vil bruke blockchain, er det lurt å koble deg til eksisterende blockchains: disse har massene til å maksimere fordelene ved blockchains.

For å forstå hvordan noe virkelig fungerer, foretrekker jeg å ta noe helt fra hverandre og prøve å sette det sammen igjen selv.

Vil du vite mer om dette temaet?

Tommy van der Vorst, partner

Bli kjent med Tommy

Be om tilbud?

Har du en konkret forskningsspørsmål eller -oppdrag og ønsker du et tilbud fra oss? Da kan du sende forespørselen din via e-post til tenderdesk@dialogic.nl. Du kan også bruke denne adressen til å informere oss om (offentlige) anbud. Vi gir svar innen fem virkedager.

Mer informasjon