Blockchain Coding: Mnoho různých jazyků, které potřebujete!

V této příručce projdeme některými z hlavních blockchainových kódování. A pokud právě začínáte, podívejte se na naše komplexní kurzy blockchainu.

Technologie blockchain je neuvěřitelně fascinující. Nebude příliš přitažlivé myslet na budoucnost, která bude zcela postavena na ní. Co se tedy musíte naučit, abyste se mohli začít rozvíjet na blockchainu? Které jazyky vám poskytnou výhodu? Začněme s blockchainovým kódováním!

Programování problémů s blockchainem

Než začneme, pojďme se podívat na některé z výzev, kterým vývojář blockchain čelí. Vytváření a udržování veřejného blockchainu není snadné z mnoha důvodů.

(Než budeme pokračovat, obrovský výkřik Davida Schwartze za jeho hlavní adresu týkající se použití C ++ při vývoji softwaru blockchain v CPPCON 2016.)

Blockchain kódování

Blockchain Coding Difficulty Challenge # 1: Zabezpečení

Blockchains, as David Schwartz řekne to, měly by to být pevnosti. Nejprve je kód veřejný a otevřený pro všechny. Kdokoli může nahlédnout do kódu a zkontrolovat chyby a chyby zabezpečení. Na rozdíl od jiných zdrojů otevřeného kódu je však nevýhoda hledání zranitelností v kódu blockchain obrovská. Každý programátor se může nabourat a dostat pryč s potenciálně miliony a miliony dolarů. Z důvodu těchto oprávněných bezpečnostních obav je vývoj na blockchainu obvykle velmi pomalý.

Blockchain Coding Obtížnost Výzva č. 2: Správa zdrojů

Je důležité držet krok se sítí. Nemůžete zaostávat příliš pozadu a nedržet krok se všemi požadavky na síť. Měli byste být dobře vybaveni pro zpracování vzdálených a místních dotazů.

Blockchain Coding Obtížnost Výzva č. 3: Výkon

Blockchain musí vždy fungovat na svých nejvyšších možných schopnostech, ale aby k tomu mohlo dojít, musí být zvolený jazyk extrémně univerzální. Jde o to, že v blockchainu jsou určité úkoly, které jsou paralelizovatelné, zatímco existují úkoly, které nelze provádět paralelně.

Dobrým příkladem „paralelizovatelného“ úkolu je ověření digitálního podpisu. Vše, co potřebujete pro ověření podpisu, je klíč, transakce a podpis. Pouze se třemi údaji můžete provádět ověření paralelně.

Tímto způsobem by však neměly být prováděny všechny funkce na blockchainu. Přemýšlejte o samotném provedení transakce. Několik transakcí nelze provést paralelně; je třeba to dělat jeden po druhém, aby se zabránilo chybám, jako je dvojnásobné utrácení. Některé jazyky jsou dobré v paralelních operacích, jiné v neparalelních operacích.

Trénujte, abyste se stali vývojářem blockchainu

Začněte svou bezplatnou zkušební verzi ještě dnes!

Blockchain Coding Obtížnost Výzva č. 4: Izolace

Co je to deterministické chování?

  • Pokud A + B = C, pak bez ohledu na okolnosti bude A + B vždy stejné jako C. Tomu se říká deterministické chování.
  • Funkce hash jsou deterministické, což znamená, že hash A bude vždy H (A).

Ve vývoji blockchainu tedy musí být všechny transakční operace deterministické. Nemůžete mít transakci, která se chová jedním způsobem a další den se chová jiným způsobem. Podobně nemůžete mít inteligentní smlouvy, které fungují dvěma různými způsoby na dvou různých strojích.

Jediným řešením je izolace. V zásadě izolujete své inteligentní smlouvy a transakce od nedeterministických prvků.

Diskutovali jsme tedy o hlavních problémech, kterým vývojáři blockchainu čelí. Nyní se konečně podívejme na některé z jazyků, které vývojáři mohou použít ke kódování na blockchainu.

Blockchain Coding Language # 1: C++

Za prvé a především začněme s vnukem všech, kterým je vždyzelený C.++. C ++ vytvořil Bjarne Stroustrup jako rozšíření jazyka C. Jazyk byl navržen tak, aby měl flexibilitu a účinnost C, ale s některými zásadními rozdíly. Největší rozdíl mezi C a C ++ spočívá v tom, že zatímco C je procesně orientovaný, C ++ je objektově orientovaný.

To znamená, že v C ++ jsou data a funkce zabaleny do jednoho čistého malého balíčku s názvem „objekty“, což znamená, že jakmile je objekt vytvořen, lze jej snadno volat a znovu použít v jiných programech, což výrazně zkracuje čas kódování.

Podívejme se na nejjednodušší program C ++ na světě. Program „Hello World“:

#zahrnout

hlavní()

{

cout << "Ahoj světe!";

návrat 0;

}

Tento kód vytiskne „Hello World!“

Proč tedy lidé stále používají C ++ pro kódování? Určitě nyní existují mnohem okouzlující jazyky, proč lidé stále trvají na návratu do C ++? Proč je bitcoinový blockchain kódován na C++?

Jak se to stane, C ++ má určité funkce, díky nimž je velmi atraktivní. (Křičte Peter Wiulle a David Schwartz pro následující vysvětlení).

Funkce č. 1: Ovládání paměti

Pamatujete si, co jsme řekli dříve o výzvách vývoje blockchainu? Nejen, že by blockchainy měly být zabezpečeny pevnostmi, ale měly by mít také efektivní správu zdrojů. Blockchain má interagovat s mnoha nedůvěryhodnými koncovými body a přitom stále poskytovat rychlou službu všem a všem uzlům.

Tato rychlá a pohotová služba je zásadní pro úspěch kryptoměny, jako je bitcoin. Pamatujte, že všechny jsou založeny na principu „konsensu“, všechny uzly v síti musí přijímat a odmítat přesně stejné bloky, jinak by v řetězci mohla být vidlice.

Abyste mohli uspokojit všechny tyto požadavky a pracovat na nejvyšší úrovni, potřebujete přísnou a úplnou kontrolu nad využitím CPU a paměti. C ++ to dává svým uživatelům.

Funkce č. 2: Vlákání

Jak jsme již diskutovali, jednou z hlavních výzev programování blockchainu je integrace úkolů, které se dobře paralelizují, a úkolů, které se neparalelizují. Většina jazyků se specializuje na jeden jazyk, ale schopnost podprocesů v C ++ je dost dobrá na to, aby zvládla paralelní i neparalelní úkoly. Vlákno je sada instrukcí, které lze provádět současně. C ++ umožňuje nejen vynikající možnosti multithreadingu s efektivní komunikaci mezi vlákny, ale také optimalizuje výkon jednoho vlákna.

Funkce č. 3: Přesunout sémantiku

Jedním z nejzajímavějších aspektů C ++ je pohybová sémantika. Přesunout sémantiku poskytuje způsob, jak se obsah přesouvat mezi objekty, místo aby se přímo kopíroval. Podívejme se na rozdíly mezi sémantikou kopírování a sémantikou přesunů. (Následující data jsou převzata z odpovědi Petera Alexandra v „Stackoverflow“).

Kopírovat sémantiku:

  • tvrdit (b == c);
  • a = b;
  • tvrdit (a == b && b == c);

Co se tady děje? Hodnota b jde do a ab zůstane na konci celé věci beze změny.

Zvažte to.

Přesunout sémantiku:

  • tvrdit (b = = c);
  • tah (a, b);
  • tvrdit (a = = c);

Co se tady děje?

Vidíte rozdíl mezi těmito dvěma bloky kódů?

Když používáme sémantiku pohybu, hodnota „b“ nemusí být nezměněna. To je rozdíl mezi sémantikou kopírování a sémantikou tahů. Největší výhodou pohybové sémantiky je, že kopie určitých dat můžete získat, pouze když je potřebujete, což značně snižuje redundanci v kódu a poskytuje obrovské zvýšení výkonu. Jak vidíte, tato efektivní správa paměti a vysoký výkon jsou pro blockchain žádoucí.

Funkce č. 4: Kompilace časového polymorfismu

Co je to polymorfismus?

Pamatujete si, když jsme C ++ nazvali „objektově orientovaným programovacím jazykem (OOP)“? Polymorfismus je náhodou vlastností OOP. Pomocí polymorfismu používáte konkrétní funkci více než jedním způsobem. V C ++ lze polymorfismus použít dvěma způsoby:

  • Polymorfismus v době kompilace.
  • Polymorfismus za běhu.

Tady se budeme soustředit pouze na polymorfismus v době kompilace. C ++ implementuje polymorfismus v době kompilace dvěma způsoby:

  • Přetížení funkce.
  • Přetížení operátora.

Přetížení funkce:

Přetížení funkce je, když máte mnoho funkcí se stejným názvem, ale s odlišným příjmem parametrů.

Zvažte tento program:

#zahrnout

pomocí jmenného prostoru std;

třída A

{

void func (int x) // první instance funkce trvá pouze jednu celočíselnou hodnotu

{

cout<<X<<endl;

}

void func (double x) // druhá instance funkce má pouze jednu dvojnásobnou hodnotu

{

cout<<X<<endl;

}

void func (int x, int y) // třetí instance funkce přebírá dvě celočíselné hodnoty

{

cout<<x = y<<endl;

}

}

int main ()

{

Obj1 // výroba jednoho objektu třídy A.

// nyní budeme volat funkce

obj1.func (2);

obj1.func (2,65);

obj1.func (2,5);

návrat 0;

}

Nyní, když spustíte tuto funkci, bude výstup:

  • 2
  • 2.65
  • 7

Jak tedy vidíte, stejná funkce func () byla použita třemi různými způsoby.

Přetížení operátora:

V C ++ může mít stejný operátor více než jeden význam.

  • Např. „+“ Lze použít jak pro matematické sčítání, tak pro zřetězení.
  • Zřetězení v zásadě znamená vzít dva řetězce a spojit je jako jeden.
  • Takže 3 + 4 = 7.

A

  • Block + geeks = Blockgeeks.
  • Stejný operátor provedl dvě různé funkce, jedná se o přetížení operátora.

Polymorfismus v době kompilace hodně pomáhá při vývoji blockchainu. Pomáhá při samostatném ukládání odpovědnosti do různých funkcí a při zvyšování výkonu celého systému.

Funkce č. 5: Izolace kódu

C ++ má funkce jmenného prostoru, které lze importovat z jednoho programu do druhého. Obor názvů pomáhá předcházet kolizím jmen. Protože C ++ má třídy, může také působit jako hranice mezi různými API a pomáhat při jasném oddělení.

Třída v C ++ je uživatelem definovaný typ nebo datová struktura deklarovaná pomocí třídy klíčového slova, která má jako své členy data a funkce. K funkcím deklarovaným ve třídě můžete přistupovat deklarováním objektů dané konkrétní třídy.

Funkce č. 6: Zralost

Jazyk je dospělý a pravidelně aktualizovaný. Existují minimálně 3 kompilátory, jak říká David Schwartz, a nové funkce jsou zaměřeny na řešení skutečných problémů. Debuggery a analytické nástroje všeho druhu jsou k dispozici pro vše od profilování výkonu až po automatickou detekci problémů všeho druhu. To znamená, že jazyk neustále roste a začleňuje nové a lepší funkce.

Kvůli výše uvedeným funkcím si Satoshi Nakamoto vybral C ++ jako základní jazyk zdrojového kódu bitcoinů.

Blockchain Coding Language # 2: Javascript

Dále máme Javascript.

Spolu s HTML a CSS je to jedna ze tří základních technologií v produkci obsahu webu. Javascript se obvykle používá k vytváření vysoce interaktivních webových stránek. Takže teď uvidíme, jak vytvořit velmi jednoduchý blockchain pomocí Javascript. Obrovský výkřik pro savjee.be pro obsah v této sekci.

Předpokládejme, že chceme vytvořit jednoduchý blockchain v Javascript. Než tak učiníme, je třeba vyřešit určité věci.

Co je blockchain a jak přesně to funguje … kódově?

Blockchain je v podstatě řetězec bloků, které obsahují data. Je to v podstatě oslavovaný propojený seznam. Čím je však tak výjimečný? Blockchain je neměnný. To znamená, že jakmile se data dostanou dovnitř bloku, nelze je nikdy změnit. Jak blockchain dosáhne neměnnosti? Je to z důvodu jednoduchého, ale důmyslného mechanismu zvaného „hashování“. Podívejte se na následující diagram:

Blockchain Coding: Mnoho různých jazyků, které potřebujete!

Obrázek se svolením: Lauri Hartikka, střední článek

Každý blok je připojen k předchozímu bloku pomocí hash ukazatele, který obsahuje hash předchozího bloku. Jak to tedy dělá řetěz nezměnitelným?

Jednou z nejzajímavějších vlastností kryptografických hashovacích funkcí je, že pokud dokonce trochu změníte vstup, může to výrazně ovlivnit výstupní hash. Např. Koukni na tohle:

Blockchain Coding: Mnoho různých jazyků, které potřebujete!

Pouhá změna prvního „T“ z velkého na malá písmena drasticky změnila výstupní hash.

Jak to tedy ovlivní blockchain?

Každý blok je připojen k předchozímu pomocí hash ukazatele. Pokud by tedy někdo měl manipulovat s daty v bloku, drasticky by to změnilo hash a ve výsledku by to ovlivnilo celý řetězec (protože všechny bloky jsou propojeny). To by zmrazilo řetězec, což je nemožné, a proto bloky zůstaly nezměněny.

Jak tedy uděláme blok? Z čeho se skládá jednoduchý blok? V našem jednoduchém kryptocoinu, který hodláme vydělat (řekněme „BlockGeeksCoin“), bude mít každý blok následující informace:

  • Rejstřík: Chcete-li znát číslo bloku.
  • Časové razítko: Znát čas stvoření.
  • Data: Data uvnitř bloku.
  • Předchozí hash: hash předchozího bloku.
  • Hash: Hash aktuálního bloku.

Než budeme pokračovat. Musíte porozumět určitým pojmům, které v našem programu použijeme:

  • tento: Klíčové slovo „this“ je vyvoláno uvnitř funkce a umožňuje přístup k hodnotám uvnitř konkrétního objektu, který tuto konkrétní funkci volá.
  • Konstruktor: Konstruktor je speciální funkce, která může pomoci vytvořit a inicializovat objekt ve třídě. Každá třída je omezena pouze na jednoho konstruktora.

Teď, když je to hotové, začněme vyrábět náš blok.

Vytváření bloku

const SHA256 = vyžadovat ("crypto-js / sha256");

třída Block

{

konstruktor (index, časové razítko, data, previousHash = ”)

{

this.index = index;

this.previousHash = previousHash;

this.timestamp = timestamp;

this.data = data;

this.hash = this.calculateHash ();

}

vypočítat hash ()

{

vrátit SHA256 (this.index + this.previousHash + this.timestamp + JSON.stringify (this.data)). toString ();

}

}

Analýza kódu

Dobře, takže tohle tady je blok. V prvním řádku kódu jsme tedy nazvali knihovnu crypto-js, protože hash funkce sha256 není k dispozici v JavaScriptu.

Dále jsme vyvolali konstruktor uvnitř třídy, který volá objekty, které budou mít určité hodnoty. Věc, která vás pravděpodobně zaujme, je funkce countHash (). Podívejme se, co přesně dělá.

V bloku vezmeme veškerý obsah a hashujeme je, abychom získali hash daného bloku. Používáme funkci JSON.stringify k převedení dat bloku na řetězec, abychom jej hashovali.

Dobře, takže máme blok připraven a je dobré jít. Nyní spojme bloky dohromady do blockchainu.

Vytváření blockchainu

třída Blockchain

{

// Sekce 1 Vytvoření bloku Genesis

konstruktor ()

{

this.chain = [this.createGenesisBlock ()];

}

createGenesisBlock ()

{

vrátit nový blok (0, "01/01/2017", "Genesis blok", "0");

}

// část 2 přidávání nových bloků

getLatestBlock ()

{

vrátit this.chain [this.chain.length – 1];

}

addBlock (newBlock) {

newBlock.previousHash = this.getLatestBlock (). hash;

newBlock.hash = newBlock.calculateHash ();

this.chain.push (newBlock);

}

// část 3 ověřování řetězce

isChainValid ()

{

pro (ať i = 1; i < this.chain.length; i ++)

{

const currentBlock = this.chain [i];

const previousBlock = this.chain [i – 1];

if (currentBlock.hash! == currentBlock.calculateHash ()) {

návrat false;

}

if (currentBlock.previousHash! == previousBlock.hash)

{

návrat false;

}

}

návrat true;

}

}

Analýza kódu

Dobře, takže v řetězci výše se děje spousta věcí, pojďme to rozdělit na části.

Část 1: Blok Genesis

Co je blok geneze?

Blok Genesis je prvním blokem blockchainu a důvodem, proč je zvláštní, je to, že zatímco každý bock ukazuje na blok, který předcházel, blok Genesis na nic neukazuje. V okamžiku vytvoření nového řetězce je tedy blok genesis vyvolán okamžitě. Můžete také vidět funkci „createGenesisBlock ()“, ve které jsme data bloku zadali ručně:

createGenesisBlock ()

{

vrátit nový blok (0, „01/01/2017“, „blok Genesis“, „0“);

}

Teď, když jsme postavili blok geneze, postavme zbytek řetězce.

Část 2: Přidání bloků

Nejprve budeme potřebovat vědět, co je poslední blok v blockchainu. K tomu používáme funkci getLatestBlock ().

getLatestBlock ()

{

vrátit this.chain [this.chain.length – 1];

}

Nyní, když jsme určili nejnovější blok, se podívejme, jak přidáme nové bloky.

addBlock (newBlock) {

newBlock.previousHash = this.getLatestBlock (). hash;

newBlock.hash = newBlock.calculateHash ();

this.chain.push (newBlock);

}

Co se tady děje? Jak přidáváme bloky? Jak kontrolujeme, zda je daný blok platný nebo ne?

Pamatujte si obsah bloku?

Blok má hash předchozího bloku vpravo?

To, co zde budeme dělat, je tedy jednoduché. Porovnejte předchozí hodnotu hash nového bloku s hodnotou hash nejnovějšího bloku.

Blockchain Coding: Mnoho různých jazyků, které potřebujete!

Obrázek se svolením: Lauri Hartikka, střední článek

Pokud se tyto dvě hodnoty shodují, znamená to, že nový blok je legitimní a přidá se do blockchainu.

Část 3: Ověření řetězce

Nyní musíme zkontrolovat, že se s naším blockchainem nikdo nepopletl a že je vše stabilní.

K přechodu z bloku 1 do posledního bloku používáme smyčku „pro“. Blok Genesis je blok 0.

pro (ať i = 1; i < this.chain.length; i ++)

{

const currentBlock = this.chain [i];

const previousBlock = this.chain [i – 1];

V této části kódu definujeme dva pojmy, aktuální blok a předchozí blok. A teď jednoduše najdeme hash těchto dvou hodnot.

if (currentBlock.hash! == currentBlock.calculateHash ()) {

návrat false;

}

if (currentBlock.previousHash! == previousBlock.hash)

{

návrat false;

}

}

návrat true;

}

Pokud se „previousHash“ aktuálního bloku nerovná „Hash“ předchozího bloku, pak tato funkce vrátí False, jinak vrátí True.

Pomocí blockchainu

Nyní konečně použijeme blockchain k vytvoření naší BlockGeeksCoin.

  • nechť BlockGeeksCoin = nový Blockchain ();
  • BlockGeeksCoin.addBlock (nový blok (1, „20. 7. 2017“, {amount: 4}));
  • BlockGeeksCoin.addBlock (nový blok (2, „20. 7. 2017, {částka: 8}));

A to je vše!

Co se tady stalo?

Na základě blockchainu jsme vytvořili novou kryptoměnu a pojmenovali jsme ji BlockGeeksCoin. Vyvoláním tohoto nového objektu jsem aktivoval konstruktor, který zase automaticky vytvořil blok Genesis.

Jednoduše jsme k tomu přidali další dva bloky a poskytli jim nějaká data.

Je to tak jednoduché.

(Děkuji savjee.be za úžasné a jednoduché vysvětlení.)

Blockchain Coding Language # 3: Python

Guido van Rossum, holandský programátor, vytvořil Python již v roce 1991. Python je založen na jednoduché filozofii: jednoduchost a minimalismus. Jedním z pozoruhodnějších způsobů, jak do svého jazyka začlenili jednoduchost, je použití bílých mezer k označení bloků kódu namísto složených závorek nebo klíčových slov. Podívejme se, co to znamená.

Podívejme se na jednoduchý program „ahoj svět“.

tisk („Ahoj, svět!“)

Jo, to je ono!

Porovnejte to s programem C ++ „ahoj svět“.

Podívejte se, jak je to ve srovnání méně komplikované? Co kdybychom udělali něco trochu komplikovanějšího? Řekněme, že přidáme dvě čísla a výsledek vytiskneme.

num1 = 1,5

num2 = 6,3

součet = float (num1) + float (num2)

print („Součet {0} a {1} je {2}“. format (num1, num2, sum))

A to je vše.

Výstupem tohoto programu bude:

  • Součet 1,5 a 6,3 je 7,8

Pojďme tedy na ante. Jak budeme programovat celý blockchain pomocí Pythonu? Následující data a kód jsou převzaty z článku Geralda Nashe v médiu.

Vytváření bloku

Nejprve uděláme náš blok:

importovat hashlib jako hasher

třída blok:

def __init __ (self, index, timestamp, data, previous_hash):

self.index = index

self.timestamp = časové razítko

self.data = data

self.previous_hash = předchozí_hash

self.hash = self.hash_block ()

def hash_block (self):

sha = hasher.sha256 ()

sha.update (str (self.index) +

str (self.timestamp) +

str (self.data) +

str (self.previous_hash))

vrátit sha.hexdigest ()

Analýza kódu

Začínáme importem hash knihovny, abychom použili SHA 256 hash finctions (docela jako Javascript).

Stejně jako dříve má blok stejnou hodnotu:

  • Index.
  • Časové razítko.
  • Data.
  • Předchozí hash.
  • Hash.

Jakmile jsme proti, vyplňujeme hodnoty hash pomocí funkce, stejně jako dříve.

Vytváření bloku geneze

Nyní vytvořme blok Genesis:

import datetime jako datum

def create_genesis_block ():

návratový blok (0, date.datetime.now (), „Genesis Block“, „0“)

Analýza kódu

Importovali jsme datetime, abychom vložili časové razítko.

Jednoduše jsme vygenerovali blok genesis a ručně mu dali některá data, se kterými mohl pracovat. Předchozí hodnota hash je „0“, protože ukazuje na žádný jiný blok.

Vytváření zbytku bloků

Nyní definujme, jak budou vytvořeny následující bloky.

def next_block (last_block):

this_index = last_block.index + 1

this_timestamp = date.datetime.now ()

this_data = "Ahoj! Jsem blok " + str (this_index)

this_hash = last_block.hash

návratový blok (this_index, this_timestamp, this_data, this_hash)

Analýza kódu

Jak tedy budeme určovat hodnoty každého kusu dat uvnitř každého bloku?

Index bloku je jednoduše index posledního bloku + 1.

Časové razítko je aktuální datum a čas.

Data bloku jsou jednoduchá zpráva: „Hej! Blokuji “.

Hash, který počítáme pomocí funkce, kterou jsme definovali dříve.

A nakonec všechny tyto hodnoty vracíme do bloku.

Vytváření blockchainu

Nakonec vytvořme blockchain.

blockchain = [create_genesis_block ()]

previous_block = blockchain [0]

num_of_blocks_to_add = 15

pro i v rozsahu (0, num_of_blocks_to_add):

block_to_add = next_block (previous_block)

blockchain.append (block_to_add)

previous_block = block_to_add

# Řekněte o tom všem!

tisk "Do blockchainu byl přidán blok # {}!".formát (block_to_add.index)

tisk "Hash: {} n".formát (block_to_add.hash)

Analýza kódu

Nejprve vytvoříme blok genesis a dáme jeho hodnotu „previous_block“.

Poté určíme, kolik bloků přidat, v tomto příkladu jdeme s 15.

Takže provozujeme smyčku, která jde do 15 a přidává každý blok do blockchainu. Na konci vzhledu tiskneme, který blok čísel byl přidán do blockchainu pomocí zobrazení jejich indexového čísla. Navíc tiskneme také hash.

Takto bude vypadat výstup:

Blockchain Coding: Mnoho různých jazyků, které potřebujete!

Obrázek se svolením: Gerald Nash Střední článek

Je zřejmé, že v tomto i v JavaScriptu můžete přidat složitější funkce, jako je Proof Of Work. Pokud se chcete naučit, jak to implementovat, pak se důrazně doporučuje projít si článek Geralda Nashe. Ale prozatím alespoň víte, jak vytvořit jednoduchý blockchain v Pythonu.

Jazyk č. 4: Solidnost

Nakonec se dostáváme k Solidity. Pro každého, kdo se chce naučit dělat DAPP (Decentralizované aplikace) nebo se dostat do hry ICO, je učení Solidity absolutní nutností. Již k tomu máme podrobného průvodce, který si můžete přečíst zde. Zde vám však poskytneme základní přehled. Solidity vyvinuli Gavin Wood, Christian Reitwiessner, Alex Beregszaszi, Yoichi Hirai a několik bývalých hlavních přispěvatelů ethereum, aby umožnili psaní inteligentních smluv na blockchainových platformách, jako je Ethereum.

Solidity je záměrně zúžený, volně psaný jazyk se syntaxí velmi podobnou ECMAScript (Javascript). Z dokumentu Ethereum Design Rationale si musíme pamatovat několik klíčových bodů, konkrétně to, že pracujeme v rámci modelu zásobníku a paměti s velikostí slova instrukce 32 bajtů, EVM (Ethereum Virtual Machine) nám umožňuje přístup k programu “ stack “, což je jako prostor registru, kde můžeme také nalepit adresy paměti, abychom vytvořili smyčku / skok čítače programu (pro sekvenční ovládání programu), rozšiřitelnou dočasnou„ paměť “a trvalejší„ úložiště “, které je ve skutečnosti zapsáno do permanentního blockchain, a co je nejdůležitější, EVM vyžaduje v rámci inteligentních smluv totální determinismus.

Než tedy pokračujeme, podívejme se na základní příklad smlouvy Solidity. (Kódy převzaty z github).

Pojďme spustit jednoduchou smyčku while v solidnosti:

smlouva BasicIterator

{

tvůrce adresy; // rezervovat jeden "adresa"-místo typu

uint8 [10] celá čísla; // rezervuje kus úložiště pro 10 8bitových celých čísel bez znaménka v poli

funkce BasicIterator ()

{

tvůrce = msg.sender;

uint8 x = 0;

// Část 1: Přiřazení hodnot

while (x < integers.length) {

celá čísla [x] = x;

x ++;

}}

funkce getSum () konstantní výnosy (uint) {

uint8 součet = 0;

uint8 x = 0;

// Sekce 2: Přidání celých čísel do pole.

while (x < integers.length) {

součet = součet + celá čísla [x];

x ++;

}

návratná částka;

}

// Část 3: Zabití smlouvy

funkce kill ()

{

if (msg.sender == tvůrce)

{

sebevražda (tvůrce);

}

}

}

Pojďme tedy analyzovat.

Oddíl 1: Přiřazování hodnot

V prvním kroku vyplňujeme pole zvané „celá čísla“, které přijímá 10 8bitových celých čísel bez znaménka. Způsob, jakým to děláme, je pomocí while smyčky. Podívejme se, co se děje uvnitř smyčky while.

while (x < integers.length) {

celá čísla [x] = x;

x ++;

}

Pamatujte, že jsme již přiřadili hodnotu „0“ celému číslu x. Smyčka while přechází z 0 na integers.length. Integers.length je funkce, která vrací maximální kapacitu pole. Takže pokud jsme se rozhodli, že pole bude mít 10 celých čísel, arrayname.length vrátí hodnotu 10. Ve smyčce výše bude hodnota x 0-9 (<10) a přiřadí jeho hodnotu také celočíselnému poli. Takže na konci smyčky budou mít celá čísla následující hodnotu:

0,1,2,3,4,5,6,7,8,9.

Oddíl 2: Přidání obsahu pole

Uvnitř funkce getSum () přidáme obsah samotného pole. Způsob, jakým to uděláme, je opakováním stejné smyčky while jako výše a použitím proměnné „sum“ k přidání obsahu pole.

Část 3: Zabití smlouvy

Tato funkce zabije smlouvu a odešle zbývající prostředky ve smlouvě zpět tvůrci smlouvy.

Když byl dotázán, jaká byla inspirace a motivace pro vytvoření solidnosti, Dr. Gavin Woods řekl toto:

„To [Solidity] mělo být sofistikovaným nástrojem pro vývoj kontraktů, který by mohl v konečném důsledku poskytnout vývojářům i uživatelům dobré informace o tom, co kód udělal. Abych tomu pomohl, vymyslel jsem NatSpec, formát dokumentace vhodný pro smlouvy, a udělal jsem z něj prvotřídního občana v Solidity. Také jsem navrhl formální jazykovou podmnožinu (dosud neimplementovanou), abych maximalizoval druhy záruk správnosti, které by mohly být poskytnuty.

Události jsem zavedl jako prvotřídní občan do jazyka Solidity, abych poskytl příjemnou abstrakci pro LOGy podobné formě volání funkcí. Inspirací pro to byly „signály“ metaobjektu systému Qt.

Jednou z dalších funkcí, kterou jsme společně s Christianem R. zjistili, byly modifikátory funkcí; který umožňuje atributům umístěným jako součást podpisu funkce provést některé úpravy zjevného těla funkce. Jelikož je velmi deklarativním vyjadřovacím prostředkem, je to idiom, který pěkně spadá do smluvně orientovaného programovacího prostoru. “

Blockchain Coding: Závěr

V tomto článku jsme pokryli pouze 4 jazyky pro blockchainové kódování, které se používají při vývoji v blockchainu a jeho okolí. Ve skutečnosti existuje mnohem více jazyků, které můžete potenciálně použít (Java, Go). Pokud jste programátor, pak máte opravdu nekonečné možnosti. Jak se svět stává stále více decentralizovaným a blockchain se stává stále více hlavním proudem, budoucnost pro vás je rozhodně neomezená.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me
Like this post? Please share to your friends:
map