BlockChain is helemaal ‘hip and happening’ het afgelopen jaar. Het wereldwijde web staat vol met filmpjes en blogs over wat BlockChain is, hoe het werkt en hoe het de wereld zou kunnen gaan veranderen.
Een hele interessante ontwikkeling die sinds eind 2014 hard aan de weg timmert is Ethereum. Ethereum is een platform waarmee apps kunnen worden gemaakt op een BlockChain. Je kunt nu heel makkelijk zelf aan de slag om een applicatie te maken die gebruik maakt van de technologie van BlockChain.
In deze blog gaan we met behulp van Ethereum een eigen virtuele valuta creëren die wordt toegevoegd aan een BlockChain en die vervolgens verstuurd kan worden naar andere gebruikers.
Benodigdheden
Om deze tutorial te kunnen volgen heb je de Ethereum Wallet nodig. Vanuit deze applicatie heb je toegang tot de Ethereum BlockChain en bewaar en beveilig je de contracten die met Ethereum zijn gemaakt. In Ethereum Wallet kun je ook nieuwe contracten aanmaken.
De nieuwste versie van de Ethereum Wallet kun je via de volgende link op GitHub downloaden: https://github.com/ethereum/mist/releases
Er is een versie voor Windows, Linux en OSX.
Installatie Ehtereum Wallet
Bij het installeren van de Wallet kun je kiezen voor het Test Network of het Main Network.
Kies hierbij voor het Test Network.
Om transacties toe te voegen aan de BlockChain moet het contract ‘gemined’ worden. Voor de rekenkracht die hiervoor nodig is, worden in het Main Network kosten in rekening gebracht. In de terminologie van Ethereum wordt dit afgerekend in Ether. In het Test Network wordt er niet afgerekend in ‘echte’ Ether en kun je met jouw eigen computer het ‘minen’ uitvoeren.
Na het aanmaken van een (gratis) account gaat de Wallet eerst de blokken va de Ethereum BlockChain downloaden. Dit duurt circa 15 minuten, afhankelijk van de internetsnelheid. Nadat alle blokkken zijn gedownload, verschijnt de knop Launch Application:
Smart Contract
Ethereum werkt met zogenaamde slimme contracten. Deze contracten kan je heel flexibel inrichten door er functies aan toe te kennen wat het contract moet kunnen.
Begin met het aanmaken van een contract door boven in de Wallet te kiezen voor Contracts.
Kies vervolgens voor Deploy New Contract.
Onder in het scherm kun je onder het blok Solidity Contract Source Code de code invoeren waarmee je het contract aanmaakt.
Met de volgende code maak je het contract aan. In dit geval geven we het contract de naam RefineValuta, maar je kunt hier uiteraard elke willekeurige naam gebruiken.
[code language=”csharp”] contract RefineValuta {/* Hiermee wordt een adres gecreëerd waar alle saldo’s worden bewaard */
mapping (address => uint256) public balanceOf;
}
[/dm_code_snippet]
Beginwaardes van de valuta
De volgende stap is om de beginwaarde van de Valuta in te stellen met behulp van de volgende functie. Voeg deze functie in vlak boven de laatste } in bovenstaande code.
Let op dat de naam van deze functie wel hetzelfde moet zijn als de naam van het contract dat je hierboven hebt aangemaakt.
string public symbol;
uint8 public decimals;
function RefineValuta (uint256 initeelBedrag, string tokenNaam, uint8 aantalDecimalen, string tokenSymbool) {
balanceOf[msg.sender] = initeelBedrag;
name = tokenNaam;
symbol = tokenSymbool;
decimals = aantalDecimalen;
}[/dm_code_snippet]
Met de constructor balanceOf[msg.sender] wordt het initiële bedrag toegewezen aan de gebruiker die het contract toevoegt aan de BlockChain.
Parameters
De bovenstaande functie maakt gebruik van de parameters initieelBedrag, tokenNaam en aantalDecimalen en tokenSymbool die je zelf kun instellen.
Kies aan de rechterkant van het scherm onder Deploy a Contract voor het contract dat je zojuist hebt aangemaakt. In dit geval Refine Valuta.
Er verschijnt nu een overzicht met de Construct Parameters waar je de parameterwaardes kunt invullen.
Versturen van de valuta
De volgende stap is dat we een functie moeten maken waarmee de valuta van de ene gebruiker naar de andere gebruiker kunnen worden verstuurd.
Voeg de volgende functie toe, wederom vlak boven de laatste }.
[code language=”csharp”] /* Versturen valuta */function transfer(address _to, uint256 _value) {
/* Vaststellen of de gebruiker voldoende saldo heeft */
if (balanceOf[msg.sender] < _value)
/* Throw stop de uitvoering van het contract */
throw;
/* Berekenen van de nieuwe saldo’s per gebruiker */
balanceOf[msg.sender] -= _value;
balanceOf[_to] += _value;
}
[/dm_code_snippet]
Event
De laatste stap bij het creëren van het contract is het aanmaken van een Event. Een event is een speciale lege functie waarmee applicaties zoals Ethereum Wallet de activiteiten kunnen bijhouden die binnen een contract plaatsvinden. Belangrijk om te weten is dat een Event altijd met een hoofdletter moet beginnen.
Voeg de volgende code toe vlak boven de function RefineValuta.
event Transfer(address indexed from, address indexed to, uint256 value);
Dit event moet nu worden toegevoegd aan de transfer functie die we eerder hebben aangemaakt.
Voeg de volgende code toe aan de transfer function boven de onderste }:
Transfer(msg.sender, _to, _value);
Deployen van het contract
Het is nu tijd om het contract te deployen naar de (test) BlockChain.
Vul bij de parameters de volgende waardes in:
• InitieelBedrag = 10.000
• TokenNaam = Mijn Valuta
• Symbool = %
• aantalDecimalen = 2
Fee
Als je naar beneden scrolt in het scherm kun je zien hoeveel rekenkracht het ongeveer kost om het contract te deployen. Ook kun je aangeven hoeveel Ether je bereid bent om te betalen om het contract te deployen. Hoe sneller je het contract gedeployed wilt hebben, hoe meer Ether die zal kosten.
Aanmaken contract
Nadat je op Deploy hebt geklikt, kom je in een scherm waarin een samenvatting van het contract is opgenomen. Nadat je het wachtwoord van jouw account hebt ingegeven, kun je de transactie verzenden. Aangezien we nog gebruik maken van het Test Network, hoef je hier geen Ether voor te betalen.
Je komt nu terug in het hoofdscherm waar je onder in het scherm kunt zien dat het contract wordt aangemaakt.
In korte tijd krijg je de bevestiging dat het contract is aangemaakt:
Verzenden van jouw valuta
Om jouw valuta te versturen naar een ‘vriend’ klik je boven in de Wallet op Send.
Selecteer rechts onderin de Valuta die je wilt versturen. In dit geval MijnRefineValuta.
Vul bij ‘Amount’ het aantal in dat je wilt versturen en bij ‘To’ het adres waar je dit naar wilt versturen.
Ook voor het versturen van de valuta moet weer rekenkracht gebruikt worden en zal dit dus Ether kosten. In het Test Network kunnen we hier gewoon doorgaan.
Voor het uitvoeren van het contract moet je wederom het wachtwoord van jouw account opgeven.
Al snel zal je de bevestiging krijgen dat de transfer gelukt is:
Volgen van het contract
Jouw ‘vriend’ zal de nieuwe valuta nog niet gelijk zien. Hiervoor moet hij het adres van het door jouw aangemaakte contract volgen.
Dit adres vind je onder de knop Contracts. Als je het door jou aangemaakte contract opent kun je het adres van het contract kopiëren:
Als jouw vriend ook Ethereum Wallet gebruikt, kan hij het contract volgen door naar de tab Contracts te gaan en te klikken op Watch Tokens.
Plak het contractadres in het veld Token Contact Address:
Klik op OK en alles staat klaar om de Valuta onderling uit te wisselen.
Afsluiting
In deze blog is een eerste stap gezet met het Ethereum platform om applicaties te maken bovenop de BlockChain. Ethereum is heel flexibel en biedt vele mogelijkheden voor allerlei soorten applicaties. Voor inspiratie moet je zeker eens op de volgens website kijken: http://dapps.ethercasts.com/
Hier staan veel applicaties die door andere gebruikers zijn gemaakt met behulp van het Ethereum platform.
2 reacties. Leave new
Hallo,
Inmiddels wat aan het pionieren met Ethereum Blockchain.
Na toevoegen Event….. krijg ik rechts “Could not compile source code”
“Expected token Semicolon got ‘eth_compileSolidity’
Event Transfer(address indexed from, address indexed to, uint256 value);
^”
pragma solidity 0.4.8;
contract RefineValuta {
/* Hiermee wordt een adres gecreëerd waar alle saldo’s worden bewaard */
mapping (address => uint256) public balanceOf;
string public name;
string public symbol;
uint8 public decimals;
Event Transfer(address indexed from, address indexed to, uint256 value);
function RefineValuta (uint256 initeelBedrag, string tokenNaam, uint8 aantalDecimalen, string tokenSymbool)
{
balanceOf[msg.sender] = initeelBedrag;
name = tokenNaam;
symbol = tokenSymbool;
decimals = aantalDecimalen;
}
/* Versturen valuta */
function transfer(address _to, uint256 _value) {
/* Vaststellen of de gebruiker voldoende saldo heeft */
if (balanceOf[msg.sender] < _value)
/* Throw stop de uitvoering van het contract */
throw;
/* Berekenen van de nieuwe saldo’s per gebruiker */
balanceOf[msg.sender] -= _value;
balanceOf[_to] += _value;
}
Transfer(msg.sender, _to, _value);
}
Wat zie ik over het hoofd?
Beste Willem,
Heb je event met een kleine letter of met een hoofdletter?
Event Transfer(address indexed from, address indexed to, uint256 value);
Moet zijn
event Transfer(address indexed from, address indexed to, uint256 value);
Dit stond helaas niet goed in de blog.
Hoop dat het hiermee wel werkt.