Kreiranje kriptovalute korištenjem Ethereum-a

Izvor: SIS Wiki
Skoči na: orijentacija, traži

Autor: Damir Drempetić

Sadržaj

Ethereum

Uvod i osnovni pojmovi

Ethereum je decentralizirana platforma koja omogućuje korištenje pametnih ugovora (eng. smart contracts). Sami pametni ugovori su aplikacije koje se mogu koristiti u različite svrhe. U kontekstu riječi aplikacije, pametni ugovori su isto tako napisan programski kod kao što su isprogramirane neke druge računalne aplikacije. Bitna razlika je što taj programski kod pametnih ugovora nije ni na jednom poslužitelju, ne može postati nedostupan, mijenjan ili na bilo koji način biti pod utjecajem trećih strana. Takav kod se izvršava na blockchain tehnologiji. U blockchainu postoje jednakopravni čvorovi gdje svaki čvor sadržava potrebne podatke. Zbog toga kažemo da je Ethereum decentralizirana platforma jer ne postoji središnje tj. centralno mjesto spremanja podataka koje bi nazivali poslužiteljem. Dodatno je bitno spomenuti da je Ethereum platforma otvorena tj. open-source, što znači da praktički svatko može kreirati vlastite pametne ugovore.

Za stvaranje vlastitih pametnih ugovora koristi se poseban programski jezik Solidity. Sam jezik je dodatno spomenut i korišten kasnije u praktičnom prikazu kreiranja vlastite kriptovalute. Kreiranjem pojedinog pametnog ugovora stvara se zapravo vlastita kriptovaluta koju čini određena količina digitalnog tokena koji se može razmjenjivati. Takav digitalni token može predstavljati bilo kakvu valutu, vrijednost neke stvari ili vlasništvo nad nečime. Količina tokena kojima će se baratati unutar kriptovalute može biti fiksna ili promjenjiva prema zadanom skupu pravila unutar pametnog ugovora.

Za mogućnost kreiranja pametnih ugovora i provedbu transakcija na cijeloj Ethereum platformi koristi se jedinstveni token Ether. Možemo reći da praktički Ether pogoni čitavu Ethereum platformu jer kod svake provedbe transakcije potrebna je naknada od neke količine Ethera. Većina blockchain implementacija ima mogućnost izvršavanja određenog programskog koda ali sa nekim ograničenjima. Ono što karakterizira Ethereum blockchain je da razvojni programer može implementirati logiku i operacije kakve želi da pametni ugovor izvršava.

Kao što je spomenuto, za provedbu transakcija na Ethereum platformi potrebna je naknada u obliku Ethera. Pametni ugovori zbog nekog događaja ili korisnik sa računa može zatražiti slanje određene transakcije. Količina naknade za provođenje transakcije naziva se gorivo (eng. gas) koje sukladno tome ima svoju cijenu (eng. gas price). Cijena je određena mrežom i implementacijom pametnog ugovora.

Korisnik pristupa Ethereum platformi i obavlja transakcije sa računa. Svaki račun (kao i pametni ugovor) ima svoju jedinstvenu adresu u heksadecimalnom formatu i ta adresa računa je javna. Osim javne adrese tj. javnog ključa, svaki račun posjeduje i svoj privatni ključ koji je potrebno čuvati na siguran način jer on omogućuje pristup svemu na računu.

Prednosti Ehereuma u kontekstu blockchaina

Vjeruje se da je ideja za samom blockchain tehnologijom i kriptovalutama krenula sa pojavom Bitcoina. No ono zbog čega ideja Ethereum platforme inicijalno nastala je da se umjesto za svaku primjenu, različitu kriptovalutu i pametni ugovor kreira potpuno novi blockchain, da postoji univerzalna platforma za to. Upravo tome služi Ethereum, da svatko može kreirati različiti pametni ugovor sa različitim digitalnim tokenima, a sve na istom blockchainu.

Razni centralizirani servisi bi na neki način mogli biti decentralizirani korištenjem Ethereuma. Osim toga, moguće je stvoriti takozvane decentralizirane autonomne organizacije (eng. Decentralized Autonomous Organizations - DAO). Takve organizacije nemaju upravitelja ni drugog oblika direktnog ljudskog upravljanja. Njima se upravlja programskim kodom, odnosno pametnim ugovorima na Ethereum blockchainu. Zamišljeno je da programski kod zamijeni strukturu i pravila uobičajenih organizacija te potrebu za ljudskom kontrolom. U DAO sudjeluje svatko tko posjeduje definirani digitalni token.

Iz sigurnosnih aspekata i prednosti Ethereum platforme mogli bi navesti tri bitne značajke:

1. Nepromjenjivost i otpornost na manipulaciju - treća strana ne može raditi nikakve promjene, sve je na mreži i transparentno vidljivo svima

2. Sigurnost - Ne postoji centralna točka prekida, stoga su napadi na mrežu znatno teži

3. Nemogućnost pada usluge - aplikacije na platformi ne mogu nikad biti onemogućene ili ugašene

Aplikacije koje koriste Ethereum

Postoje razne primjene Ethereuma i razni realni slučajevi koje je moguće riješiti pomoću takve blockchain tehnologije.

Weifund pruža mogućnost stvaranja crowdfunding kampanja. Moguće je koristiti njihove predloške ugovora ili stvoriti vlastite pametne ugovore.

Uport je platforma za upravljanje vlastitim identitetom i osobnim podacima. Omogućava spremanje i dijeljenje osobnih podataka.

BlockApps omogućava brže kreiranja decentraliziranih aplikacija. Moguće je korištenje postojećih alata i tehnologija poput Javascripta, Visual Studia i sl.

Provenance omogućava transparentno praćenje lanca nabave. Na taj način proizvođači, prodavači, kupci i partneri mogu na transparentan način sudjelovati u skupljanju i pregledu podataka za pojedini proizvod.

Augur je platforma koja omogućava prognoze događaja. Moguće je kupiti udio za pojedini ishod nekog događaja, i ako je taj ishod u konačnici točan tada se ostvaruje određena zarada.

Još mnogo različitih primjena i projekata decentraliziranih aplikacija (dApps) izgrađenih na Ethereumu moguće je pronaći na stateofthedapps.com

Korišteni izvori u ovom dijelu:

ethereum.org - Ethereum Project

netokracija.com - Što je Ethereum, gdje ćemo ga koristiti, kakva ga budućnost čeka

blockgeeks.com - What is Ethereum? A Step-by-Step Beginners Guide

medium.com - Super Beginner’s Guide to Ethereum

blog.singulargarden.com - Where and how application data is stored in Ethereum?

coindesk.com - How Ethereum Works

Kreiranje vlastite kriptovalute

Na službenim stranicama Ethereum projekta postoje dobro objašnjene upute za kreiranje vlastite kriptovalute korištenjem Ethereuma. Cilj ovog poglavlja je detaljno proći te upute i pojasniti neke dodatne korake koji bi se mogli podrazumijevati, ali i totalnim početnicima zainteresiranima za ovu tehnologiju predstavljati problem.

Preuzimanje i instalacija Ethereum Walleta

Za početak potrebno je preuzeti Ethereum Wallet aplikaciju za operacijski sustav koji koristite.

U ovom slučaju korišten je Windows 10 PRO 64-bitni operacijski sustav. Ethereum Wallet je aplikacija koja omogućuje pristup decentraliziranim aplikacijama na Ethereum blockchainu. Pomoću nje je moguće baratati Etherom i drugim kriptovalutama na Ethereumu, kao i sa pametnim ugovorima (eng. smart contracts). Postoji izvršna .exe verzija pomoću koje se Ethereum Wallet može instalirati ili se jednostavno može preuzeti .zip arhiva iz koje se datoteke Ethereum Walleta raspakiraju u željenu mapu na računalu.

Odabir mreže, kreiranje računa i sinkronizacija blokova

Otvaranjem Ethereum Wallet aplikacije potrebno je odabrati da li se želi koristiti glavnom Ethereum mrežom gdje se koriste stvarni Ether prave vrijednosti ili je moguće koristiti testnu Rinkeby mrežu. Nakon toga potrebno je kreirati kroisnički račun koji će biti i Main account (etherbase) te mu odrediti lozinku. Kasnije u aplikaciji se preko izbornika Develop-Network moguće prebaciti i na Ropsten testnu mrežu, glavnu mrežu ili "solo" mrežu, a računi na tim mrežama su međusobno neovisni, tj za svaku od njih je potrebno kreirati posebno račun. Svaki račun dobiva svoju jedinstvenu javnu heksadecimalnu adresu koja se koristi kasnije za transakcije i ostale radnje.

Jednom kada je račun kreiran potrebno je pričekati neko vrijeme da se blokovi, odnosno blockchain sa odabrane mreže preuzmu na računalo.

Slika 1 - Sinkroniziranje blokova sa testnom mrežom

Sinkronizacija blokova može potrajati ovisno o broju drugih čvorova spojenih na mrežu. Moguće je da sinkronizacija stane negdje na zadnjih 300 blokova pa je preporučljivo zatvoriti Ethereum Wallet i ponovno pokrenuti kako bi se ti zadnji blokovi sinkronizirali.

Prebacivanje Ethera na račun

Nakon što se svi blokovi sinkroniziraju, moguć je ulazak u aplikaciju i pregled kreiranih računa na mreži, obavljenih transakcija i rukovanje kriptovalutama tj. ugovorima (eng. contracts) i slanje Ethera.

Slika 2 - Početno sučelje Ethereum Walleta

Nama je cilj kreirati vlastitu kriptovalutu tj. pametni ugovor no potrebno je prvo na računu posjedovati neku količinu Ethera za to. Pošto se radi o testnoj mreži, nije nužno Ether kupiti ili rudariti već postoji servis Rinkeby Crypto Faucet sa kojeg je moguće zatražiti određenu količinu Ethera za testiranje.

Slika 3 - Sučelje za preuzimanje Ethera na Rinkeby mreži

U ovom slučaju objavljen je javni post na Google Plus društvenoj mreži sa adresom računa na koji želimo zaprimiti Ether i adresa tog posta je proslijeđena Rinkeby Faucet servisu. Kao što je navedeno u uputama servisa, isto je moguće i sa Twitter ili Facebook računima. Time je na račun zaprimljeno 18.75 Ethera i nije moguće slati zahtjeve na Rinkeby Faucet za dodatnim Etherom u roku od 3 dana. Postoje još i opcije za zahtjeve 3 ili 7.5 Ethera. Sa drugog računa je za probu prebačeno još 11.75 Ethera pomoću Metamaska što će biti objašnjeno kasnije u svrhu mogućnosti slanja tj. prijenosa Ethera i Ethereum kriptovaluta tj. tokena.

Za dodatnu pomoć moguće je pronaći neki od YouTube tutoriala za Rinkeby faucet.

Slika 4 - Račun sa 30 Ethera

Kreiranje digitalnog tokena

Ostvarivanjem dva osnovna preduvjeta sinkroniziranog Ethereum Wallet-a spojenog na Rinkeby mrežu i nekolicinu Ethera na računu moguće je krenuti sa kreiranjem digitalnog tokena tj. kriptovalute. Moguće je slijediti službene upute kao nadopunu ovim materijalima.

Definiranje osnovnog koda ugovora

Klikom na Contracts i opciju Deploy New Contract unutar Ethereum Walleta otvara se sučelje za kreiranje tokena.

Slika 5 - Sučelje za kreiranje tokena

Unutar Solidity contract source code prozora za pisanje koda moguće je definirati kod ugovora za digitalni token. Bez kodiranja i poznavanja sintakse Solidity programskog jezika moguće je zalijepiti programski kod i kreirati ugovor. Solidity je programski jezik koji omogućuje pisanje ugovora raznih namjena za Ethereum platformu.

Za kreiranje osnovnog ugovora s mogućnošću prijenosa digitalnog tokena dovoljan je sljedeći isječak koda: SIS Ethereum token.txt. Opcionalno za razumijevanje je u idućem koraku objašnjena funkcionalnost ovoga programskog koda.

Moguće je koristiti i neki drugi kompleksniji programski kod ugovora poput ovoga Ethereum TokenERC20.txt ili onih na službenoj stranici.

(OPCIONALNO) Razumijevanje programskog koda za osnovni ugovor

Kod ugovora nalazit će se unutar jedne contract klase sa proizvoljnim imenom, atributima (kasnije prosljeđivanim parametrima), metodama i obavezno konstruktorom. Za početak potrebno je mapirati adrese računa sa stanjima kriptovalute na računu. Adrese su u heksadecimalnom ethereum formatu. Mapiranje znači da će se stvoriti asocijativno polje balanceOf i pomoću adrese bilo kojeg računa se može pristupiti iznosu količine kriptovalute na tom računu.

contract SISToken {    
   mapping (address => uint256) public balanceOf;
}

Potrebno je dodati konstruktor gdje će se stvoritelju ugovora dodijeliti inicijalna količina kriptovalute.

   function SISToken(uint256 initialSupply) public {
       balanceOf[msg.sender] = initialSupply;
   }

Sada imamo mogućnost spremanja salda za svaki pojedini račun i određivanja inicijalne količine kriptovalute, a još nam je bitan i prijenos kritpovalute s jednog računa na drugi. Metoda transfer jednostavno pošiljatelju transakcije oduzima iznos tokena koji je poslao, a primatelju sa zadanom adresom dodaje taj isti iznos. Primjećujemo da je adresi pošiljatelja kao i gore kod dodjele inicijalne količine tokena, moguće pristupiti preko konstante msg.sender.

   function transfer(address _to, uint256 _value) public {
       balanceOf[msg.sender] -= _value;
       balanceOf[_to] += _value;
   }

U funkciju transfer je na sam početak potrebno i dodati provjeru da pošiljatelj tokena ima dovoljan iznos na računu da bi mogao poslati i primatelj nema već maksimalni iznos kriptovalute koji je dozvoljen.

require(balanceOf[msg.sender] >= _value && balanceOf[_to] + _value >= balanceOf[_to]);

U ugovor možemo dodati osnovne informacije o njemu koje će biti proslijeđene kao parametar.

   string public name;
   string public symbol;
   uint8 public decimals;

Zato je potrebno ažurirati i sami konstruktor ugovora koji će onda izgledati ovako.

   function SISToken(uint256 initialSupply, string tokenName, string tokenSymbol, uint8 decimalUnits) public {
       balanceOf[msg.sender] = initialSupply;
       name = tokenName;   
       symbol = tokenSymbol; 
       decimals = decimalUnits;
   }

Za kraj je potrebno dodati tzv. Event funkciju koja služi aplikacijama poput Ethereum Walleta za praćenje aktivnosti ugovora tj. tokena. Nju možemo definirati prije konstruktora.

event Transfer(address indexed from, address indexed to, uint256 value);

Event funkciju je još potrebno pozvati unutar same transfer funkcije.

Transfer(msg.sender, _to, _value);

U konačnici potrebno je dobiti ovaj kod.

Definiranje parametara

Potrebno je još proslijediti parametre za kreiranje digitalnog tokena pomoću ovog ugovora:

Initial supply (Početna količina): 10000
Token name (Naziv tokena): SIS Token 1
Token symbol (Simbol tokena): %
Decimal units (Broj decimalnih mjesta): 2

Za odabrane parametre na dnu je ponuđena najveća moguća naknada u Etheru za provedbu transakcije kriptovalute. Naknadu je moguće promijeniti na manje, ali će transakcije biti sporije provedene ili naknada može biti veća zbog čega će i brzina provedbe transakcije biti brža.

Slika 6 - Sučelje za kreiranje tokena - parametri

Stvaranje digitalnog tokena, objava ugovora

Definiranjem željene logike i programskog koda ugovora, klikom na gumb Deploy moguće je ugovor kreirati. Potrebno je upisati lozinku definiranu prilikom stvaranja Ethereum Wallet računa.

Slika 7 - Detalji ugovora koji će biti kreiran

Odabirom svog računa vidljivo je da je ugovor kreiran i transakcija provedena, ali je još potrebno pričekati minutu ili dvije da transakcija bude potvrđena od ostalih čvorova. U ovom slučaju je bilo potrebno 12 potvrda.

Slika 8 - Prikaz statusa potvrde ugovora Slika 9 - detalja kreiranog ugovora

Time je zapravo kreirana nova kriptovaluta pod nazivom SIS Token 1 i trenutno kao vlasnici kao što smo i definirali imamo 100% dijelova kriptovalute.

Slanje i prijenos kriptovalute

Tako kreirani digitalni token tj. kriptovalutu moguće je slati na isti način kao i sam Ether, barem što se testne mreže tiče. Za početak je prikazano na koji način je moguće prebaciti Ether s jednog računa na drugi, a zatim i novokreiranu SIS Token 1 kriptovalutu.

Korištenje Metamaska

Za demonstraciju slanja Ethera na testnoj mreži i slanja novokreirane kriptovalute korišten je MetaMask. Radi se o ekstenziji za najpopularnije internet preglednike (Chrome, Firefox, Opera). MetaMask ekstenzija omogućava pristup Ethereum blockchainu iz internet preglednika bez preuzimanja cijelog blockchaina.

U ovom slučaju korišten je MetaMask za Chrome. Dodavanjem ekstenzije, potrebno je definirati lozinku računa. Račun kao i svi ostali na Ethereum platformi ima svoju jedinstvenu adresu koja se koristi za identifikaciju računa.

Za dodatnu pomoć moguće je pogledati neki od MetaMask video tutoriala.

Slanje i prijenos Ethera iz MetaMaska na račun u Ethereum Wallet

Otvaranjem MetaMask ekstenzije unutar preglednika moguće je odabrati opciju Send. Tada se jednostavno u idućem koraku zalijepi adresa računa na koji se želi poslati Ether i sama količina Ethera. U ovom slučaju poslati ćemo 11.25 Ethera na Ethereum Wallet račun koji je korišten tokom cijelog ovog projekta s adresom 0x5d03CF62C4d21D3bb4658004087219C8115E0A57.

Slika 10 - Slanje metamaskom Slika 11 - Slanje metamaskom

Slanje će rezultirati povećanjem iznosa Ethera na računu unutar Etherum Walleta.

Slanje i prijenos novokreirane kriptovalute iz Ethereum Wallet računa na Metamask račun

Odabirom svog računa unutar Ethereum Walleta i klikom na opciju Transfer Ether and tokens otvara se sučelje za slanje Ethera i drugih tokena. U ovom slučaju poslati ćemo 10% novokreirane kriptovalute SIS token 1 sa Ethereum Wallet računa na račun na MetaMasku.

Slika 12 - Slanje iz Ethereum Walleta Slika 13 - Slanje iz Ethereum Walleta Slika 14 - Slanje iz Ethereum Walleta

Potrebno je upisati lozinku da bi se transakcija izvršila i oduzet će se određena količina Ethera kao naknada za provedbu transakcije.

Provjerom stanja na MetaMask računu neće biti vidljiva nikakva promjena jer račun ne prepoznaje taj token i potrebno ga je dodati. Unutar MetaMaska u kartici Tokens, potrebno je odabrati Add Token.

Potrebno je unijeti adresu pametnog ugovora tj. kriptovalute i simbol i broj decimalnih mjesta bi trebali biti automatski učitani.

Slika 15 - Dodavanje tokena u MetaMask

Tada će MetaMask prepoznati o kojem tokenu je riječ i da račun posjeduje 10% te kriptovalute.

Slika 16 - Prikaz tokena u MetaMasku

Pregled transakcija na EtherScan

Slika 17 - Prikaz transakcija na Etherscan

Na slici je prikaz svih transakcija za korišteni račun iz Ethereum Walleta. Isto je moguće vidjeti putem poveznice na rinkeby.etherscan.io/address/0x5d03CF62C4d21D3bb4658004087219C8115E0A57.

Vidljivo je da je prva transakcija bila primanje Ethera sa nekog računa (uz pomoć Rinkeby Faucet). Iduća transakcija je primjer prijenosa Ethera iz MetaMaska na Ethereum Wallet račun. Treća transakcija je kreiranje vlastite kriptovalute i posljednja je prebacivanje 10% novokreirane kriptovalute na račun na MetaMasku.

Slika 18 - Prikaz transakcija na Etherscan

Kao što je vidljivo na slici moguće je vidjeti i sve informacije o kreiranom tokenu. Vidljivo je da postoej dva vlasnika kriptovalute (jedan je račun Ethereum Walleta, a drugi na MetaMasku). Isto je moguće pratiti putem adrese rinkeby.etherscan.io/token/0xc31bd60cfdec7766a528570e05d5bdab084e27f7

Korišteni izvori u ovom dijelu:

ethereum.org - Ethereum Project

ethereum.org - Create your own crypto-currency with Ethereum

Zaključak

Decentralizirane aplikacije svakako nude svoje značajne prednosti u odnosu na klasičnu klijent-poslužitelj arhitekturu. Blockchain tehnologija nam na sve jednostavnije načine omogućava izradu i korištenje takvih aplikaciju. Ethereum platforma kao takva pruža i dodatne mogućnosti kreiranja pametnih ugovora. Pametne ugovore može kreirati svatko i oni mogu reprezentirati određenu kriptovalutu sa fiksnim ili promjenjivim ukupnim iznosom raspoloživih tokena. Kod promjenjivog broja tokena njihov broj ovisi o pravilima definiranim u pametnom ugovoru. Preduvjet za stavaranje pametnih ugovora te za transakcije i operacije na Ethereum mreži je određena količina glavnog tokena pod nazivom Ether. Kreiranje samog ugovora i kriptovalute u nekom od osnovnih oblika moguće je bez poznavanja potrebnog programskog koda i totalnim početnicima. Ipak, za ozbiljnije implementacije i modifikacije potrebno je daljnje razumijevanje i dorada pametnih ugovora. Uz to, kreiranje same kriptovalute kao same sebi svrha nema previše smisla ako iza toga ne postoji poslovni slučaj ili problem koji će ona riješavati.

Dodatni materijali vezani uz Ethereum

bigishdata.com - How To Write, Deploy, and Interact with Ethereum Smart Contracts on a Private Blockchain

businessinsider.com - Ethereum's blockchain is jamming up because of a new game that lets people buy virtual cats

facebook.com (CNBC Crypto) - Here’s why ethereum could be more lucrative than bitcoin

Dodatni materijali za istraživanje o povezanim temama

bigishdata.com - How to Build Your Own Blockchain Part 1

facebook.com (Svijet aplikacija) - Blockchain i kriptovalute!

businessinsider.com - BITCOIN 101: A beginner's guide to understanding the cryptocurrency

youtube.com - Meetup BlockchainZG Live Stream

youtube.com - Star Tech 3.02: Sve o kriptovalutama otkriva tech novinar Matej Majstorović

Osobni alati
Imenski prostori
Inačice
Radnje
Orijentacija
Traka s alatima