Sådan skriver og implementerer du din første smarte kontrakt

Lige siden Ethereum prydede kryptorummet med sin tilstedeværelse i midten af ​​2015, har den revolutionerende opfindelse af den canadisk-russiske programmør Vitalik Buterin født mange nye decentrale applikationer (dApps). Sammen med det utal af dApps, der bygges, tilskrives Ethereums succes hovedsageligt implementeringen af ​​smarte kontrakter.

Interessant nok dateres opfindelsen af ​​smarte kontrakter tilbage til 1996. Computerforsker Nick Szabo udarbejdede udtrykket "smarte kontrakter" og forklarede dem som følger:

”Jeg kalder disse nye kontrakter” smarte ”, fordi de er langt mere funktionelle end deres livløse papirbaserede forfædre. Ingen brug af kunstig intelligens er underforstået. En smart kontrakt er et sæt løfter, specificeret i digital form, herunder protokoller, inden for hvilke parterne lever op til disse løfter ”- Nick Szabo, 1996

Hans arbejde fortsatte senere med at inspirere mange andre forskere og forskere, herunder Vitalik, der skabte Ethereum.

Grundlæggende info

Før vi går nærmere ind i guiden, er det vigtigt at forstå to vigtige begreber.

Den første ting, vi skal forstå, er, hvad Ethereum Virtual Machine ( EVM ) er. Dens eneste formål er at fungere som et runtime-miljø for smarte kontrakter baseret på Ethereum. Tænk på det som en global supercomputer, der kører alle smarte kontrakter. Som navnet antyder, er EVM virtuel og ikke en fysisk maskine. Du kan læse mere om EVM her.

Det andet koncept, vi skal forstå, er hvad der er gas . I EVM er gas en måleenhed, der bruges til at tildele et gebyr til hver transaktion med en smart kontrakt. Hver beregning, der sker i EVM, kræver gas. Jo mere kompleks og kedelig det er, jo mere gas er der brug for til at udføre den smarte kontrakt.

Hver transaktion specificerer den gaspris, den er villig til at betale i ether for hver enhed af gas, hvilket gør det muligt for markedet at bestemme forholdet mellem prisen på ether og omkostningerne ved beregningsoperationer (målt i gas). Det er kombinationen af ​​de to samlede anvendte gas ganget med betalt gaspris, der resulterer i det samlede gebyr betalt af en transaktion.

Fee for transaction = Total gas used * gas price;

Læs mere om gas her.

Nu hvor du har grundlæggende viden om, hvad en smart kontrakt er, og hvordan den smarte kontrakt kører, kan vi gå direkte ind i, hvordan vi skal lave vores helt egen smarte kontrakt!

Sætte op

Vi skal bruge et værktøj til dette: Pragma. Det er en brugervenlig platform til oprettelse og implementering af smarte kontrakter. Tilmeld dig her og gå til redaktøren:

Log ind på Metamask. Hvis du ikke har installeret MetaMask endnu, kan du starte her.

Skift til Kovan testnetværket både i Pragma og MetaMask.

Bare for at give dig en kort oversigt over testnet, tjek denne artikel.

Ethereum mainnet er det officielle Ethereum-netværk. Det er mere sikkert og bruger Ether, som har reel pengeværdi.

Testnet er legeplads Ethereum-netværk, hvor Ether er aftalt at have nogen pengeværdi. Udviklere bruger disse legepladser til at teste applikationer, inden de distribueres til mainnet for deres brugere.

For at skifte mellem disse netværk skal du klikke på netværksnavnet ud for MetaMask-ikonet og vælge netværket. Til denne vejledning skal du vælge Kovan .

Skrivning af den smarte kontrakt

Den følgende kontrakt implementerer den enkleste form for en kryptovaluta. Det er muligt at generere mønter ud af luften, men kun den person, der oprettede kontrakten, er i stand til at gøre det (det er trivielt at implementere en anden udstedelsesordning). Desuden kan alle sende mønter til hinanden uden at skulle registrere sig med et brugernavn og en adgangskode. Alt hvad du behøver er et Ethereum-tastatur.

Denne kode giver dig dybest set mulighed for at prikke og sende tokens til andre konti.

Lad os gå igennem det linje for linje:

pragma solidity ^0.4.21;

Dette indikerer, at kildekoden er skrevet til Solidity version 0.4.21 eller noget nyere, der ikke bryder funktionaliteten. Dette er for at sikre, at koden ikke opfører sig anderledes med de nye compilerversioner.

contract yourToken

Alt relateret til dinToken er inde i denne kontrakt. I det væsentlige er en soliditetskontrakt indsamling af funktioner og tilstand (kode og data), der sidder på en adresse på Ethereum blockchain.

address public minter;

Dette er minterens adresse. Nøgleordet "offentlig" gør disse variabler læsbare udefra.

event Sent(address from, address to, uint amount);

Begivenheder giver lette klienter (UI) mulighed for at reagere effektivt på ændringerne.

function yourToken() public {
minter = msg.sender;
}

Lad os indstille din Ethereum-adresse som minter for kontrakten. Du skal få adgang til kontrakten via din MetaMask for at kunne præges. Vi gennemgår dette igen efter implementering af kontrakten.

function mint(address receiver, uint amount) public {
if(msg.sender != minter) return;
balances[receiver]+=amount;
}

Med denne funktion kan du prikke den mængde mønter, du vil have. Du kan prikke så mange poletter, som du vil. Hvis-betingelsen fortæller systemet at stoppe med at udføre, hvis du ikke er minter, som er indstillet i dinToken-funktion.

Hvis du faktisk er minter, lader den dig prikke tokens.

function send(address receiver, uint amount) public {
if(balances[msg.sender] < amount) return;
balances[msg.sender]-=amount;
balances[receiver]+=amount;
emit Sent(msg.sender, receiver, amount);
}

Dette er en funktion, der lader en adresse sende tokens til en anden adresse. Det tager to parametre: modtager og beløb. Det reducerer beløbet fra afsenderens adresse og tilføjer det samme beløb til modtagerens adresse. Event Sent, som vi tidligere erklærede, bruges nu til at overføre. I øjeblikket har vi holdt afsenderen som msg.sender, som er minter, da vi ikke ønsker at komplicere kontrakten.

Det er det. Din kontrakt er nu klar, så lad os kompilere den.

Kompilering og implementering af den smarte kontrakt

Når kontrakten er udarbejdet, lad os anvende den på blockchain. Som tidligere nævnt bruger vi Kovan testnet til at implementere kontrakten.

Kontroller, om den smarte kontrakt er implementeret.

For den kontrakt, jeg implementerede til denne tutorial, er dette transaktionen. Du kan også se det i Pragma under dine kontrakter.

Interagere med den smarte kontrakt i Pragma

Der har du det. Din første smarte kontrakt, implementeret på blockchain. :)

En masse nye koncepter blev introduceret sammen med et par utroligt nyttige værktøjer. Det kan være lidt overvældende, og det er okay! Bare prøv at få hovedet rundt om begreberne og kør derefter med det.

Har du oprettet nogle enkle, men interessante smarte kontrakter? Send dem i kommentarerne, og jeg tilføjer dem i indlægget til reference.

Har du spørgsmål? Tilføj dem i kommentarerne, eller tilmeld dig vores telegramgruppe, og tal med os direkte.