2017-08-22

Dialogic Blokkettingreeks #5

Daar is baie gesprekke oor blokketting, maar hoe lyk 'n blokketting werklik? Die beste manier om 'n nuwe tegnologie te leer ken, is deur self daarmee te speel. In hierdie artikel verduidelik ons hoe jy self met die blokketting kan eksperimenteer. Die bou van jou eie blokketting is beslis nie moeilik nie. Dit kan soms moeilik lyk - maar moenie bekommerd wees nie, dit is eintlik redelik eenvoudig.

Hierdie teks is outomaties vertaal en kan dus verskil van die oorspronklike. Geen regte kan aan hierdie vertaling ontleen word nie.

💬 Click here to read this page in English.

Sit die arms maar op!

Aan die werk: wat benodig jy?

Om 'n eenvoudige blokketting op te stel, kan jy gebruik maak van sagteware wat gratis beskikbaar is op die internet. Hierdie sagteware werk in die meeste gevalle op Windows- en Mac-rekenaars. In hierdie voorbeeld gaan ons gebruik maak van die Ethereum-platform. Ethereum is 'n openbare blokketting - die gebruik van die blokketting vereis die digitale 'ether'-geldeenheid. In hierdie voorbeeld gaan ons die sagteware onder die Ethereum-blokketting gebruik om ons eie, private kloon daarvan te maak.

Die klient installeer

Om te begin, benodig jy 'n klient. Dit is 'n stuk sagteware wat blokkettingkommunikasie met ander rekenaars ('nodes') reël. Deur die klient te begin, neem jy deel aan die blokketting en kan jy nuwe kontrakte in die blokketting stoor. Laai die 'Go Ethereum'-klient af van hierdie bladsy en installeer dit. Nadat jy dit gedoen het, is dit goed om te bevestig of die klient behoorlik geïnstalleer is. Om dit te doen, gaan jy (op Windows) na die Startmenu, 'Uitvoeren', en tik jy 'cmd' gevolg deur 'OK' (Mac-gebruikers maak die map Aansoekasies oop, dan die Hulpprogramme-maak en uiteindelik die 'Terminal'-program; die res van die instruksies is dieselfde). Tik 'geth version' in die skerm wat dan vertoon word, gevolg deur 'n enter. As alles goed verloop het, sal jy 'n oorsig sien van die geïnstalleerde weergawe van Go-Ethereum.

Die begin van die ketting: die blokketting-genesis

Nou dat die sagteware geïnstalleer is, is dit tyd om die blokketting op te bou. Soos voorheen beskryf, bestaan 'n blokketting uit 'n reeks 'blokke'. Die eerste blok word die 'genesis-blok' genoem en is spesiaal omdat dit die eerste blok is wat deur alle deelnemers sonder verdere beheer vertrou word. Alle blokke wat op die genesisblok volg, is deel van die blokketting.

Laai eerstens die lêer genesis.json af en sit dit op die lessenaar. Hierdie lêer beskryf hoe die genesisblok moet lyk. Voer dan die volgende bevel uit in die opdrag-skerm:

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

As alles na wense verloop het, sal die boodskap verskyn dat die genesisblok korrek geskep is. Op die lessenaar verskyn 'n 'data'-map - hierin stoor die klient alle nodige data wat benodig word om aan die blokketting deel te neem.

Nou dat die genesisblok geskep is, is dit tyd om die blokketting aan die gang te sit! Gebruik hiervoor die volgende bevel:

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

Wanneer die boodskap 'IPC-endpunt geopen' verskyn, is die klient gereed vir gebruik. Jy kan die klient stop deur op 'Ctrl-C' te druk in die opdrag-skerm. Nou is dit tyd om die blokketting werklik te begin gebruik. Jy kan dit op verskeie maniere doen; eerstens kan jy toegang tot die blokketting kry via die 'konsole'. Dit is 'n omgewing waar jy met bevele opdragte op die blokketting kan uitvoer. Laat die klient aan die gang bly en maak 'n nuwe opdragvenster oop (Begin, Uitvoer, cmd of die Terminal op Mac) en tik die volgende bevel in:

geth attach \\\\.\\pipe\\geth.ipc

As alles reg verloop, sal "Welkom by die Geth JavaScript-konsole!" verskyn saam met 'n paar weergawes. Eerstens moet ons 'n rekening skep - met 'n rekening kry jy toegang tot die blokketting. 'n Rekening word beveilig met 'n wagwoord. By die skep van 'n rekening stel jy hierdie wagwoord in. Skep 'n nuwe rekening met die volgende bevel:

personal.newAccount()

Vervolgens, telkens wanneer die klient herbegin word, moet jy die rekening ontgrendel. Dit kan gedoen word met die volgende bevel (wat vra vir die vroeër gekose wagwoord):

personal.unlockAccount(personal.listAccounts[0])

Om die klient nou blokke by die ketting te laat voeg, moet 'gemined' word. Begin die mynproses soos volg:

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

Omdat die mynproses redelik wat rekenaarkrag kos, kies ons hier om die spoed te beperk - die syfer '1' bepaal dat slegs een verwerker in jou rekenaar vir die mynproses gebruik word. In 'n 'regte' netwerk sal jy al jou rekenaarkrag gebruik. Wanneer jy vir die eerste keer begin myn, sal jy sien dat dit 'n rukkie duur voordat daar werklik blokke verskyn (in die klient se skerm sal 'n paar keer 'Genererende DAG' verskyn). Daarna behoort jy elke paar sekondes 'n blok te sien verskyn:

Omdat in die genesislêer ingestel is dat die myn van blokke maklik is, verskyn daar vinnig nuwe blokke. In 'n 'regte' blokketting is myn moeiliker en verskyn die blokke stadiger. Om 'n blokketting te toets, is dit egter gerieflik wanneer blokke vinnig verskyn - dan word jou slimme kontrakte vinniger verwerk.

Jy kan die konsole nou verlaat deur 'exit' te tik. Dit kan geen skade aanrig om die konsole nog 'n rukkie oop te hou nie.

Slimme kontrakte skryf

Om slimme kontrakte te skryf en in die blokketting te plaas, gebruik jy die Solidity-programmeeromgewing. Laai Solidity af via hierdie skakel - pak die zip-lêer uit en dubbelklik op die lêer 'index.html'. As alles reg verloop het, sal 'n leë teksveld verskyn:

Ons moet nog aan die Solidity-redakteur vertel dat dit met ons eie blokketting (via ons eie klient) kan kommunikeer. Om dit te doen, gaan na die 'Kontrak'-tab en kies onder 'Kies uitvoeringsomgewing' vir 'Web3-provider'. Klik dan deur alle insette.

Jy is nou gereed om jou eerste slimme kontrak te skryf! Ons sal in volgende artikels ingaan op verskillende slimme kontrakte. Hieronder is 'n baie eenvoudige kontrak wat eintlik niks doen nie, maar waarmee ons kan toets of die blokketting werk:

pragma solidity ^0.4.0;

kontrak Hello {
    adres openbaar eienaar;

    funksie Hello() {
        eienaar = msg.sender;
    }

    // Geen betalings kan gestuur word nie
    funksie () {
        throw;
    }
}

Wat sê hierdie? Die eerste reël dui eintlik net aan watter weergawe van die programmeertaal wat ons wil gebruik (0.4.0). Dan begin die kontrak ("kontrak Hello"). Die reël 'adres openbaar eienaar' dui aan dat daar in hierdie kontrak een gegewe gestoor word, naamlik die adres ('rekeningnommer') van die persoon wat die kontrak gemaak het. Die 'funksie Hello' dui aan wat moet gebeur as hierdie kontrak opgestel word. Wat ons nou doen is net om te stoor wie die kontrak geskep het, in die vroeër bespreekte adresveld. Laastens kom ons by 'n paar reëls om te verseker dat blokkettinggeld nie bloot kan oorgedra word ná die kontrak nie.

Die kode vir 'n kontrak moet jy sien as 'n bloudruk - jy kan een of meer kontrakte instansieer wat werk volgens die kode (net soos daar in die wêreld van 'normale' kontrakte byvoorbeeld verskeie 'koopooreenkomste' gesluit kan word wat oor verskillende huise kan gaan, maar wat andersins dieselfde lyk).

Om 'n nuwe kontrak aan te gaan, klik in Solidity op 'Skep' op die 'Kontrak'-tab. As alles reg gegaan het, sal daar aanvanklik 'wag vir transaksie om gepubliseer te word' staan. Dit kan wees dat 'n foutboodskap verskyn - in daardie geval het jou rekening dalk weer 'op slot' gegaan. Voer dan in die konsole weer die bevel 'personal.unlockAccount(personal.listAccounts[0]))' uit. As alles reg verloop, sal daar uiteindelik 'n blok verskyn 'Untitled:Hello at' gevolg deur 'n lang nommer. Hierdie nommer is die adres van die kontrak, eintlik die kontraknommer. Met hierdie nommer kan jy spesifieke aksies met die kontrak uitvoer - hier kom ons later op terug. In die blok self vind jy die eienskappe van die kontrak, insluitend die rekeningnommer van die 'eienaar'. Vir nou laat ons dit hier - jy het jou eerste slimme kontrak gemaak!

Tot slot

Op grond van jou eie blokketting kan jy in beginsel verskeie toepassings bou op grond van slimme kontrakte. Dit beteken egter nie noodwendig dat dit verstandig is om jou eie blokketting daarvoor te gebruik nie. Die eerste vraag wat jy moet vra, is of die gebruik van 'n blokketting werklik noodsaaklik is. Wanneer al die partye wat inligting moet uitruil en afsprake met mekaar maak, mekaar volledig vertrou, is 'n 'eenvoudige' gedeelde databasis eintlik genoeg. As jy nogtans 'n blokketting wil gebruik, is dit verstandig om aan te sluit by bestaande blokkettings: hierdie het die massa om die voordele van blokkettings maksimaal tot hul reg te laat kom.

Om te verstaan hoe iets werklik werk, gee ek die voorkeur daaraan om iets heeltemal uitmekaar te haal, en probeer ek dit dan self weer inmekaar te sit.

Wil jy meer weet oor hierdie tema?

Tommy van der Vorst, partner

Ontmoet Tommy

Vra 'n kwotasie aan?

Het jy 'n konkrete navorsingsvraag of -opdrag en wil jy 'n kwotasie van ons ontvang? Dan kan jy jou vraag per e-pos stuur aan tenderdesk@dialogic.nl. Jy kan ons ook via hierdie adres inlig oor (openbare) tenderprosesse. Ons reageer binne vyf werksdae.

Meer inligting