Blockchain kódovanie: Mnoho rôznych jazykov, ktoré potrebujete!

V tejto príručke si prejdeme niektoré z hlavných blockchainových kódovaní. A ak ešte len začínate, pozrite si naše komplexné kurzy blockchainu.

Technológia blockchain je neuveriteľne fascinujúca. Nebude priťahované myslieť na budúcnosť, ktorá bude celá postavená na nej. Čo sa teda musíte naučiť, aby ste sa mohli začať rozvíjať na blockchaine? V ktorých jazykoch získate výhodu? Začnime s blockchainovým kódovaním!

Programovanie problémov s blockchainom

Než začneme, pozrime sa na niektoré výzvy, ktorým vývojár blockchain čelí. Vytvorenie a údržba verejného blockchainu nie je ľahké z mnohých dôvodov.

(Než budeme pokračovať, obrovský výkrik pre Davida Schwartza pre jeho hlavný prejav týkajúci sa použitia C ++ pri vývoji blockchainového softvéru v CPPCON 2016.)

Blockchainové kódovanie

#Crypto ExchangeBenefits

1

Binance
Best exchange


VISIT SITE
  • ? The worlds biggest bitcoin exchange and altcoin crypto exchange in the world by volume.
  • Binance provides a crypto wallet for its traders, where they can store their electronic funds.

2

Coinbase
Ideal for newbies


Visit SITE
  • Coinbase is the largest U.S.-based cryptocurrency exchange, trading more than 30 cryptocurrencies.
  • Very high liquidity
  • Extremely simple user interface

3

eToro
Crypto + Trading

VISIT SITE
  • Multi-Asset Platform. Stocks, crypto, indices
  • eToro is the world’s leading social trading platform, with thousands of options for traders and investors.

Výzva č. 1: Problémy s kódovaním blockchainu: Bezpečnosť

Blockchains, as David Schwartz hovorí, mali by to byť pevnosti. Po prvé, kód je verejný a otvorený pre všetkých. Ktokoľvek môže nahliadnuť do kódu a skontrolovať chyby a chyby zabezpečenia. Na rozdiel od iných zdrojov otvoreného kódu je však nevýhoda hľadania slabých miest v blockchainovom kóde obrovská. Každý programátor sa môže nabúrať a dostať preč s potenciálnymi miliónmi a miliónmi dolárov. Z dôvodu týchto oprávnených obáv o bezpečnosť je vývoj na blockchaine zvyčajne veľmi pomalý.

Výzva č. 2: Problémy s kódovaním blockchainu: Správa zdrojov

Je dôležité držať krok so sieťou. Nemôžete zaostať príliš pozadu a nestíhať všetky požiadavky na sieť. Mali by ste byť dobre vybavení na vybavovanie vzdialených a miestnych dotazov.

Výzva č. 3: Problémy s kódovaním blockchainu: Výkon

#CRYPTO BROKERSBenefits

1

eToro
Best Crypto Broker

VISIT SITE
  • Multi-Asset Platform. Stocks, crypto, indices
  • eToro is the world’s leading social trading platform, with thousands of options for traders and investors.

2

Binance
Cryptocurrency Trading


VISIT SITE
  • ? Your new Favorite App for Cryptocurrency Trading. Buy, sell and trade cryptocurrency on the go
  • Binance provides a crypto wallet for its traders, where they can store their electronic funds.

#BITCOIN CASINOBenefits

1

Bitstarz
Best Crypto Casino

VISIT SITE
  • 2 BTC + 180 free spins First deposit bonus is 152% up to 2 BTC
  • Accepts both fiat currencies and cryptocurrencies

2

Bitcoincasino.io
Fast money transfers


VISIT SITE
  • Six supported cryptocurrencies.
  • 100% up to 0.1 BTC for the first
  • 50% up to 0.1 BTC for the second

Blockchain musí vždy pracovať na svojich najvyšších možných schopnostiach, ale aby k tomu došlo, musí byť zvolený jazyk mimoriadne univerzálny. Ide o to, že v blockchaine sú určité úlohy, ktoré sú porovnateľné, zatiaľ čo existujú niektoré úlohy, ktoré sa nedajú vykonať paralelne.

Dobrým príkladom „paralelizovateľnej“ úlohy je overenie digitálneho podpisu. Všetko, čo potrebujete na overenie podpisu, je kľúč, transakcia a podpis. Iba s tromi údajmi môžete vykonať overenie paralelne.

Nie všetky funkcie na blockchaine by sa však mali robiť týmto spôsobom. Popremýšľajte nad samotným vykonaním transakcie. Nie je možné vykonať viac transakcií súčasne; je potrebné postupovať po jednom, aby ste sa vyhli chybám, ako sú dvojnásobné výdavky. Niektoré jazyky sú dobré v paralelných operáciách, zatiaľ čo iné v paralelných operáciách.

Trénujte, aby ste sa stali vývojárom blockchainu

Začnite svoju bezplatnú skúšobnú verziu ešte dnes!

Výzva č. 4: Blockchain Coding obtížnosť: Izolácia

Čo je to deterministické správanie?

  • Ak A + B = C, potom bez ohľadu na okolnosti bude A + B vždy rovné C. Toto sa nazýva deterministické správanie..
  • Hašovacie funkcie sú deterministické, čo znamená, že hash A bude vždy H (A).

Takže pri vývoji blockchainu musia byť všetky transakčné operácie deterministické. Nemôžete mať transakciu, ktorá sa bude správať jedným spôsobom a nasledujúci deň sa bude správať iným spôsobom. Podobne nemôžete mať inteligentné zmluvy, ktoré fungujú dvoma rôznymi spôsobmi na dvoch rôznych strojoch.

Jediným riešením je izolácia. V zásade izolujete svoje inteligentné zmluvy a transakcie od nedeterministických prvkov.

Diskutovali sme teda o hlavných problémoch, ktorým vývojári blockchainu čelia. Teraz sa konečne pozrime na niektoré z jazykov, ktoré vývojári môžu používať na kódovanie v blockchaine.

Blockchain Coding Language # 1: C++

V prvom rade začnime s otcom všetkých, ktorým je vždyzelený C++. C ++ vytvoril Bjarne Stroustrup ako rozšírenie jazyka C. Jazyk bol navrhnutý tak, aby mal flexibilitu a účinnosť jazyka C, ale s niektorými zásadnými rozdielmi. Najväčší rozdiel medzi C a C ++ je v tom, že zatiaľ čo C je procesne orientovaný, C ++ je objektovo orientovaný.

To znamená, že v C ++ sú dáta a funkcie zabalené do jedného čistého malého balíčka s názvom „objekty“, čo znamená, že akonáhle je objekt vytvorený, je možné ho ľahko zavolať a znovu použiť v iných programoch, čo výrazne skracuje čas kódovania.

Pozrime sa na najjednoduchší program C ++ na svete. Program „Hello World“:

#include

hlavný()

{

cout << "Ahoj svet!";

návrat 0;

}

Tento kód vytlačí „Hello World!“

Prečo teda ľudia stále používajú na kódovanie jazyk C ++? Určite teraz existujú oveľa viac očarujúce jazyky, prečo ľudia stále trvajú na návrate k C ++? Prečo je bitcoinový blockchain kódovaný na C++?

Ako sa už stáva, C ++ má určité vlastnosti, vďaka ktorým je veľmi lákavý. (Pre nasledujúce vysvetlenie kričte Peter Wiulle a David Schwartz).

Funkcia č. 1: Ovládanie pamäte

Pamätáte si, čo sme už hovorili o výzvach vývoja blockchainu? Blockchainy by mali byť nielen zabezpečené pevnosti, ale mali by mať aj efektívne riadenie zdrojov. Blockchain má interagovať s mnohými nedôveryhodnými koncovými bodmi a pritom stále poskytovať rýchlu službu všetkým a všetkým uzlom.

Táto rýchla a pohotová služba je rozhodujúca pre úspech kryptomeny ako bitcoin. Pamätajte, že všetky sú založené na princípe „konsenzu“, všetky uzly v sieti musia akceptovať a odmietať úplne rovnaké bloky, inak by v reťazci mohla byť vidlica.

Aby ste uspokojili všetky tieto požiadavky a dosiahli najvyššiu úroveň, potrebujete prísnu a úplnú kontrolu nad využitím procesora a pamäte. C ++ to dáva svojim používateľom.

Funkcia č. 2: Vlákanie

Ako sme už diskutovali, jednou z hlavných výziev programovania blockchainu je integrácia úloh, ktoré sa dobre paralelizujú, a úloh, ktoré sa neparalelizujú. Väčšina jazykov sa špecializuje na jeden jazyk, schopnosť vlákien v C ++ je však dosť dobrá na to, aby zvládla paralelné aj neparalelné úlohy. Vlákno je sada pokynov, ktoré je možné vykonať súčasne. C ++ umožňuje nielen vynikajúce možnosti viacerých vlákien s efektívnou komunikáciou medzi vláknami, ale tiež optimalizuje výkon jedného vlákna.

Funkcia č. 3: Sémantika pohybu

Jedným z najzaujímavejších aspektov C ++ je pohybová sémantika. Sémantika Move poskytuje spôsob, ako sa dá obsah presúvať medzi objektmi, a nie rovno kopírovať. Pozrime sa na rozdiely medzi sémantikou kopírovania a sémantikou presunov. (Nasledujúce údaje sú prevzaté z odpovede Petra Alexandra v „Stackoverflow“).

Kopírovať sémantiku:

  • tvrdiť (b == c);
  • a = b;
  • tvrdiť (a == b && b == c);

Čo sa tu teda deje? Hodnota b ide do a a b zostane na konci celej veci nezmenená.

Teraz to zvážte.

Sémantika pohybu:

  • tvrdiť (b = = c);
  • ťah (a, b);
  • tvrdiť (a = = c);

Čo sa tu deje?

Vidíte rozdiel medzi dvoma blokmi kódov?

Keď používame sémantiku pohybu, hodnota „b“ sa nemusí meniť. To je rozdiel medzi sémantikou kopírovania a sémantikou presunov. Najväčšou výhodou sémantiky presunov je, že kópie určitých údajov môžete získať, len keď ich potrebujete, čo výrazne znižuje nadbytočnosť kódu a výrazne zvyšuje výkon. Ako teda vidíte, táto efektívna správa pamäte a vysoký výkon sú pre blockchain žiaduce.

Funkcia č. 4: Zostavte časový polymorfizmus

Čo je to polymorfizmus?

Pamätáte si, keď sme C ++ nazvali „objektovo-orientovaným programovacím jazykom (OOP)“? Polymorfizmus je náhodou vlastnosťou OOP. Pomocou polymorfizmu používate konkrétnu funkciu viac ako jedným spôsobom. V C ++ je možné polymorfizmus použiť dvoma spôsobmi:

  • Polymorfizmus v čase kompilácie.
  • Polymorfizmus za behu.

Tu sa budeme venovať iba polymorfizmu v čase kompilácie. Existujú dva spôsoby, ako C ++ implementuje polymorfizmus v čase kompilácie:

  • Funkčné preťaženie.
  • Preťaženie operátora.

Preťaženie funkcií:

Preťaženie funkcií je, keď máte veľa funkcií s rovnakým názvom, ale s rozdielnym príjmom parametrov.

Zvážte tento program:

#include

pomocou namespace std;

trieda A

{

void func (int x) // prvá inštancia funkcie má iba jednu celočíselnú hodnotu

{

cout<<X<<endl;

}

void func (double x) // druhá inštancia funkcie má iba jednu dvojnásobnú hodnotu

{

cout<<X<<endl;

}

void func (int x, int y) // tretia inštancia funkcie má dve celočíselné hodnoty

{

cout<<x = r<<endl;

}

}

int main ()

{

Obj1 // vytvorenie jedného objektu triedy A

// teraz budeme volať funkcie

obj1.func (2);

obj1.func (2,65);

obj1.func (2,5);

návrat 0;

}

Teraz, keď spustíte túto funkciu, výstup bude:

  • 2
  • 2,65
  • 7

Ako teda vidíte, rovnaká funkcia func () bola použitá 3 rôznymi spôsobmi.

Preťaženie operátora:

V C ++ môže mať ten istý operátor viac ako jeden význam.

  • Napr. „+“ Možno použiť ako na matematické sčítanie, tak aj na zreťazenie.
  • Zreťazenie v zásade znamená zobrať dva reťazce a skombinovať ich ako jednu.
  • Takže 3 + 4 = 7.

A

  • Block + geeks = Blockgeeks.
  • Ten istý operátor urobil dve rôzne funkcie, to je preťaženie operátora.

Polymorfizmus v kompilácii veľmi pomáha pri vývoji blockchainu. Pomáha pri samostatnom ukladaní zodpovednosti do rôznych funkcií a pri zvyšovaní výkonu celého systému.

Funkcia č. 5: Izolácia kódu

C ++ má funkcie menného priestoru, ktoré je možné importovať z jedného programu do druhého. Obor názvov pomáha predchádzať kolíziám mien. Pretože C ++ má triedy, môže tiež pôsobiť ako hranica medzi rôznymi API a pomáhať pri jasnom oddeľovaní.

Trieda v C ++ je používateľom definovaný typ alebo dátová štruktúra deklarovaná pomocou triedy kľúčových slov, ktorá má ako svoje členy údaje a funkcie. K funkciám deklarovaným v triede máte prístup vyhlásením objektov tejto konkrétnej triedy.

Funkcia č. 6: Splatnosť

Jazyk je dospelý a pravidelne aktualizovaný. Ako hovorí David Schwartz, existujú minimálne 3 solídne prekladače a nové funkcie sú zamerané na riešenie skutočných problémov. Debuggery a analytické nástroje všetkého druhu sú k dispozícii pre všetko, od profilovania výkonu až po automatickú detekciu problémov všetkého druhu. To znamená, že jazyk neustále rastie, aby začleňoval novšie a lepšie funkcie.

Z dôvodu vyššie uvedených funkcií si Satoshi Nakamoto vybral ako základný jazyk zdrojového kódu bitcoinu jazyk C ++.

Blockchain Coding Language # 2: Javascript

Ďalej máme Javascript.

Spolu s HTML a CSS je to jedna z troch základných technológií vo výrobe webového obsahu. Javascript sa zvyčajne používa na vytváranie vysoko interaktívnych webových stránok. Takže teraz uvidíme, ako vytvoriť veľmi jednoduchý blockchain pomocou Javascriptu. Pre obsah v tejto sekcii obrovský výpadok na stránku savjee.be.

Predpokladajme, že chceme vytvoriť jednoduchý blockchain v Javascript. Skôr ako tak urobíme, musíme sa zaoberať určitými vecami.

Čo je blockchain a ako presne funguje … kódovo?

Blockchain je v podstate reťazec blokov, ktoré obsahujú údaje. Je to v podstate oslavovaný prepojený zoznam. Čím je však taký výnimočný? Blockchain je nemenný. To znamená, že keď sa dáta dostanú do bloku, už ich nemožno zmeniť. Ako blockchain dosiahne nemennosť? Je to kvôli jednoduchému, ale dômyselnému mechanizmu, ktorý sa nazýva „hashovanie“. Skontrolujte nasledujúcu schému:

Blockchain kódovanie: Mnoho rôznych jazykov, ktoré potrebujete!

Obrázok so súhlasom: Lauri Hartikka, stredný článok

Každý blok je pripojený k predchádzajúcemu bloku pomocou hash ukazovateľa, ktorý obsahuje hash predchádzajúceho bloku. Ako to teda robí reťaz nemennou??

Jednou z najfascinujúcejších vlastností kryptografických hašovacích funkcií je, že ak čo i len trochu zmeníte vstup, môže to výrazne ovplyvniť výstupný hash. Napr. Pozri na toto:

Blockchain kódovanie: Mnoho rôznych jazykov, ktoré potrebujete!

Len zmena prvého „T“ z veľkých na malé písmená tak výrazne zmenila výstupný hash.

Ako to teda ovplyvňuje blockchain?

Každý blok je pripojený k predchádzajúcemu pomocou hash ukazovateľa. Ak by teda niekto neoprávnene upravil údaje v bloku, drasticky by sa zmenil hash a vo výsledku by to ovplyvnilo celý reťazec (pretože všetky bloky sú prepojené). To by zmrazilo reťaz, čo je nemožné, a preto by bloky zostali nezmenené.

Ako teda urobíme blok? Z čoho pozostáva jednoduchý blok? V našom jednoduchom kryptomene, ktorú budeme vyrábať (nazvime to „BlockGeeksCoin“), bude mať každý blok nasledujúce informácie:

  • Register: Poznať číslo bloku.
  • Časová pečiatka: Poznať čas stvorenia.
  • Údaje: Údaje vo vnútri bloku.
  • Predchádzajúci hash: hash predchádzajúceho bloku.
  • Hash: Hash aktuálneho bloku.

Skôr ako pokračujeme. Musíte pochopiť určité výrazy, ktoré budeme používať v našom programe:

  • toto: Kľúčové slovo „toto“ je vyvolané vo vnútri funkcie a umožňuje vám prístup k hodnotám vo vnútri konkrétneho objektu, ktorý túto konkrétnu funkciu volá.
  • Konštruktér: Konštruktor je špeciálna funkcia, ktorá pomáha vytvárať a inicializovať objekt v triede. Každá trieda je obmedzená iba na jedného konštruktéra.

Teraz je to hotové, poďme začať vyrábať náš blok.

Vytváranie bloku

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

triedy Blok

{

konštruktor (index, časová pečiatka, údaje, previousHash = ”)

{

this.index = index;

this.previousHash = previousHash;

this.timestamp = timestamp;

this.data = údaje;

this.hash = this.calculateHash ();

}

vypočítať hash ()

{

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

}

}

Analýza kódu

Dobre, takže toto je blok. V prvom riadku kódu sme teda nazvali knižnicu crypto-js, pretože hash funkcia sha256 nie je k dispozícii v JavaScripte.

Ďalej sme vo vnútri triedy vyvolali konštruktor, ktorý volá objekty, ktoré budú mať určité hodnoty. To, čo vás pravdepodobne zaujme, je funkcia countHash (). Pozrime sa, čo presne to robí.

V bloku vezmeme všetok obsah a zahašujeme ho, aby sme dostali hash konkrétneho bloku. Pomocou funkcie JSON.stringify premeníme údaje bloku na reťazec, aby sme ich hashovali.

Dobre, takže máme blok pripravený a môžeme vyraziť. Teraz spojme bloky dohromady do blockchainu.

Vytvorenie blockchainu

trieda Blockchain

{

// Oddiel 1 Vytvorenie bloku Genesis

konštruktér ()

{

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

}

createGenesisBlock ()

{

vrátiť nový blok (0, "01.01.2017", "Blok Genesis", "0");

}

// oddiel 2 pridávanie nových blokov

getLatestBlock ()

{

vrátiť this.chain [this.chain.length – 1];

}

addBlock (newBlock) {

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

newBlock.hash = newBlock.calculateHash ();

this.chain.push (newBlock);

}

// oddiel 3 validácia reťazca

isChainValid ()

{

pre (nech 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 nepravdivý;

}

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

{

návrat nepravdivý;

}

}

návrat pravdivý;

}

}

Analýza kódu

Dobre, takže v reťazci vyššie sa deje veľa vecí, poďme to rozdeliť na časti.

Oddiel 1: Blok Genesis

Čo je blok genézy?

Genesis block je prvý blok blockchainu a dôvod, prečo je špeciálny, je to, že hoci každý bock ukazuje na predchádzajúci blok, genesis block na nič neukazuje. Takže v okamihu, keď sa vytvorí nový reťazec, blok genézy sa vyvolá okamžite. Môžete tiež vidieť funkciu „createGenesisBlock ()“, kde sme údaje o bloku zadali ručne:

createGenesisBlock ()

{

vrátiť nový blok (0, „1. 1. 2017“, „blok Genesis“, „0“);

}

Teraz, keď sme vytvorili blok genézy, postavme zvyšok reťazca.

Oddiel 2: Pridávanie blokov

Najskôr budeme musieť vedieť, aký je momentálne posledný blok v blockchaine. Na to používame funkciu getLatestBlock ().

getLatestBlock ()

{

vrátiť this.chain [this.chain.length – 1];

}

Teraz, keď sme určili najnovší blok, sa pozrime, ako pridáme nové bloky.

addBlock (newBlock) {

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

newBlock.hash = newBlock.calculateHash ();

this.chain.push (newBlock);

}

Takže, čo sa tu deje? Ako pridávame bloky? Ako kontrolujeme, či je daný blok platný alebo nie?

Zapamätajte si obsah bloku?

Blok má hash predchádzajúceho bloku vpravo?

To, čo tu budeme robiť, je teda jednoduché. Porovnajte hodnotu previousHash nového bloku s hodnotou hash najnovšieho bloku.

Blockchain kódovanie: Mnoho rôznych jazykov, ktoré potrebujete!

Obrázok so súhlasom: Lauri Hartikka, stredný článok

Ak sa tieto dve hodnoty zhodujú, znamená to, že nový blok je legitímny a pridá sa do blockchainu.

Oddiel 3: Validácia reťazca

Teraz musíme skontrolovať, či sa s našim blockchainom nikto nemaznal a či je všetko stabilné.

Na prechod z bloku 1 do posledného bloku používame slučku „pre“. Blok Genesis je blok 0.

pre (nech i = 1; i < this.chain.length; i ++)

{

const currentBlock = this.chain [i];

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

V tejto časti kódu definujeme dva pojmy, aktuálny blok a predchádzajúci blok. A teraz jednoducho nájdeme hash týchto dvoch hodnôt.

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

návrat nepravdivý;

}

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

{

návrat nepravdivý;

}

}

návrat pravdivý;

}

Ak sa „previousHash“ aktuálneho bloku nerovná „Hash“ predchádzajúceho bloku, potom táto funkcia vráti hodnotu False, inak vráti hodnotu True.

Pomocou blockchainu

Teraz konečne použijeme blockchain na vytvorenie našej BlockGeeksCoin.

  • nech BlockGeeksCoin = nový Blockchain ();
  • BlockGeeksCoin.addBlock (nový blok (1, „20. 7. 2017, {suma: 4}));
  • BlockGeeksCoin.addBlock (nový blok (2, „20. 7. 2017, {suma: 8}));

A to je všetko!

Čo sa tu teda stalo?

Na základe blockchainu sme vytvorili novú kryptomenu a pomenovali sme ju BlockGeeksCoin. Vyvolaním tohto nového objektu som aktivoval konštruktor, ktorý následne automaticky vytvoril blok Genesis.

Jednoducho sme k tomu pridali ďalšie dva bloky a dali sme im nejaké údaje.

Je to také jednoduché.

(Ďakujem savjee.be za úžasné a jednoduché vysvetlenie.)

Blockchain Coding Language # 3: Python

Guido van Rossum, holandský programátor, vytvoril Python už v roku 1991. Python je založený na jednoduchej filozofii: jednoduchosť a minimalizmus. Jedným z pozoruhodnejších spôsobov, ako začlenili jednoduchosť do svojho jazyka, je použitie bielych medzier na označenie blokov kódu namiesto zložených zátvoriek alebo kľúčových slov. Pozrime sa, čo to znamená.

Pozrime sa na jednoduchý program „ahoj svet“.

tlač („Ahoj, svet!“)

Áno, to je všetko!

Porovnajte to s programom „ahoj svet“ v C ++.

Vidíte, aké je to v porovnaní s tým menej komplikované? Čo tak urobiť niečo trochu komplikovanejšie? Povedzme, že pridáme dve čísla a výsledok vytlačíme.

num1 = 1,5

num2 = 6,3

suma = float (num1) + float (num2)

tlač („Súčet {0} a {1} je {2}“. formát (num1, num2, sum))

A to je všetko.

Výstupom tohto programu bude:

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

Takže poďme na to. Ako naprogramujeme celý blockchain pomocou Pythonu? Nasledujúce údaje a kód sú prevzaté z článku Geralda Nasha v médiu.

Vytváranie bloku

Najskôr urobme náš blok:

importovať hashlib ako hasher

blok triedy:

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

self.index = index

self.timestamp = časová známka

self.data = údaje

self.previous_hash = predchádzajúci_ash

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))

návrat sha.hexdigest ()

Analýza kódu

Začíname importom hashovacej knižnice, aby sme mohli používať hashové finácie SHA 256 (podobne ako Javascript).

Rovnako ako predtým má blok rovnakú hodnotu:

  • Register.
  • Časová značka.
  • Údaje.
  • Predchádzajúci hash.
  • Hash.

Raz sme proti, vypĺňame hodnoty hash pomocou funkcie, rovnako ako predtým.

Vytvára sa blok genézy

Poďme si vytvoriť blok Genesis:

importovať dátum a čas ako dátum

def create_genesis_block ():

návrat blok (0, date.datetime.now (), „blok Genesis“, „0“)

Analýza kódu

Importovali sme čas a čas, aby sme vložili časovú pečiatku.

Jednoducho sme vygenerovali blok genézy a ručne sme mu dali určité údaje, s ktorými môžeme pracovať. Predchádzajúca hodnota hash je „0“, pretože ukazuje na žiadny ďalší blok.

Vytvára sa zvyšok blokov

Teraz definujme, ako sa budú vytvárať nasledujúce bloky.

def next_block (last_block):

this_index = last_block.index + 1

this_timestamp = date.datetime.now ()

this_data = "Hej! Som blok " + str (this_index)

this_hash = last_block.hash

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

Analýza kódu

Ako teda budeme určovať hodnoty všetkých údajov v každom bloku?

Index bloku je jednoducho index posledného bloku + 1.

Časová pečiatka je aktuálny dátum a čas.

Údaje bloku sú jednoduchou správou: „Hej! Blokujem “.

Haš, ktorú vypočítavame pomocou funkcie, ktorú sme definovali skôr.

A nakoniec všetky tieto hodnoty vraciame do bloku.

Vytvorenie blockchainu

Na záver si vytvoríme blockchain.

blockchain = [create_genesis_block ()]

previous_block = blockchain [0]

num_of_blocks_to_add = 15

pre 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

# Povedzte o tom všetkým!

tlačiť "Do blockchainu bol pridaný blok # {}!".formát (block_to_add.index)

tlačiť "Haš: {} n".formát (block_to_add.hash)

Analýza kódu

Najskôr vytvoríme blok genézy a jeho hodnotu dáme „previous_block“.

Potom určíme, koľko blokov pridať, v tomto príklade ideme s 15.

Takže prevádzkujeme slučku, ktorá ide do 15 a pridáva každý a každý blok do blockchainu. Na konci tohto prehľadu tlačíme, ktorý blok čísel bol pridaný do blockchainu, a to zobrazením ich indexového čísla. Navyše tlačíme aj Hash.

Takto bude vyzerať výstup:

Blockchain kódovanie: Mnoho rôznych jazykov, ktoré potrebujete!

Obrázok so súhlasom: Gerald Nash, stredný článok

V tomto aj v javascripte je samozrejme možné pridať komplikovanejšie funkcie, ako napríklad Proof Of Work. Ak sa chcete dozvedieť, ako to implementovať, potom sa dôrazne odporúča prečítať si článok Geralda Nasha. Ale zatiaľ aspoň viete, ako v Pythone vytvoriť jednoduchý blockchain.

Jazyk č. 4: Dôstojnosť

Nakoniec prichádzame k Solidity. Pre každého, kto sa chce naučiť robiť DAPP (decentralizované aplikácie) alebo sa zapojiť do hry ICO, je učenie Solidity absolútnou nevyhnutnosťou. Už tu máme podrobného sprievodcu, ktorý si môžete prečítať tu. Tu vám však poskytneme základný prehľad. Solidity vyvinuli Gavin Wood, Christian Reitwiessner, Alex Beregszaszi, Yoichi Hirai a niekoľko bývalých hlavných prispievateľov ethereum, aby umožnili písanie inteligentných zmlúv na blockchainových platformách, ako je napríklad Ethereum.

Solidity je zámerne zoštíhlený, voľne písaný jazyk so syntaxou veľmi podobnou ECMAScript (Javascript). Z dokumentu Ethereum Design Rationale si treba pamätať niekoľko kľúčových bodov, konkrétne to, že pracujeme v rámci modelu typu stack-and-memory s veľkosťou 32-bajtového inštrukčného slova, EVM (Ethereum Virtual Machine) nám umožňuje prístup k programu “ zásobník “, ktorý je ako priestor registra, do ktorého môžeme tiež vložiť adresy pamäte, aby sme vytvorili slučku / skok čítača programu (pre sekvenčné riadenie programu), rozšíriteľnú dočasnú„ pamäť “a trvalejšiu„ pamäť “, ktorá sa skutočne zapíše do permanentnej pamäte. blockchain, a čo je najdôležitejšie, EVM vyžaduje úplný determinizmus v rámci inteligentných zmlúv.

Než teda pokračujeme, vyskúšajme si základný príklad zmluvy Solidity. (Kódy prevzaté z githubu).

Poďme spustiť slučku while, ktorá je solídna:

zmluva BasicIterator

{

tvorca adresy; // rezervuj jeden "adresa"-typové miesto

uint8 [10] celých čísel; // vyhradí si kus úložiska pre 10 8-bitových celých čísel bez znamienka v poli

funkcia BasicIterator ()

{

tvorca = msg.sender;

uint8 x = 0;

// Oddiel 1: Priradenie hodnôt

while (x < integers.length) {

celé čísla [x] = x;

x ++;

}}

funkcia getSum () neustále návraty (uint) {

uint8 suma = 0;

uint8 x = 0;

// Oddiel 2: Pridanie celých čísel do poľa.

while (x < integers.length) {

suma = suma + cele cisla [x];

x ++;

}

návratná suma;

}

// Oddiel 3: Zabitie zmluvy

funkcia kill ()

{

if (msg.sender == tvorca)

{

samovražda (tvorca);

}

}

}

Poďme si to teda rozobrať.

Oddiel 1: Priradenie hodnôt

V prvom kroku vypĺňame pole s názvom „celé čísla“, ktoré zaberá 10 8-bitových celých čísel bez znamienka. Spôsob, akým to robíme, je pomocou while cyklu. Pozrime sa, čo sa deje vo vnútri while cyklu.

while (x < integers.length) {

celé čísla [x] = x;

x ++;

}

Pamätajte, že celému číslu x sme už priradili hodnotu „0“. Cyklus while prechádza z 0 na integers.length. Integers.length je funkcia, ktorá vracia maximálnu kapacitu poľa. Takže ak sme sa rozhodli, že pole bude mať 10 celých čísel, arrayname.length vráti hodnotu 10. V slučke vyššie bude hodnota x 0-9 (<10) a priraďuje svoju vlastnú hodnotu aj celočíselnému poľu. Takže na konci cyklu budú mať celé čísla nasledujúcu hodnotu:

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

Oddiel 2: Pridanie obsahu poľa

Vo vnútri funkcie getSum () pridáme obsah samotného poľa. Spôsob, ako to urobíme, je opakovaním toho istého cyklu while, ako je uvedené vyššie, a použitím premennej „sum“ na pridanie obsahu poľa.

Oddiel 3: Zabitie zmluvy

Táto funkcia zabije zmluvu a odošle zostávajúce prostriedky v zmluve späť tvorcovi zmluvy.

Na otázku, čo bolo inšpiráciou a motiváciou pri vytváraní solídnosti, Dr. Gavin Woods povedal toto:

„To [Solidity] malo byť sofistikovaným nástrojom na vývoj zmlúv, ktorý by mohol v konečnom dôsledku poskytnúť vývojárom aj používateľom dobré informácie o tom, čo kód urobil. Aby som tomu pomohol, navrhol som NatSpec, formát dokumentácie vhodný pre zmluvy, a urobil som z neho prvotriedneho občana v Solidity. Tiež som navrhol podmnožinu formálneho jazyka korektúry (zatiaľ neimplementovanú), aby som maximalizoval druhy záruk správnosti, ktoré je možné poskytnúť.

Udalosti som ako prvotriedny občan uviedol do jazyka Solidity, aby som poskytol peknú abstrakciu pre LOGy podobné forme funkčných volaní. Inšpiráciou boli „signály“ metaobjektu systému Qt.

Jednou z ďalších funkcií, ktorú sme s Christianom R. spolu zistili, boli modifikátory funkcií; ktorý umožňuje atribútom umiestneným ako súčasť podpisu funkcie vykonať určité úpravy v zjavnom tele funkcie. Pretože je veľmi deklaratívnym vyjadrovacím prostriedkom, je to frazéma, ktorá pekne zapadá do zmluvne orientovaného programovacieho priestoru. “

Blockchain kódovanie: záver

V tomto článku sme sa zaoberali iba 4 jazykmi pre blockchainové kódovanie, ktoré sa používajú pri vývoji v blockchaine a okolo neho. V skutočnosti existuje oveľa viac jazykov, ktoré môžete potenciálne použiť (Java, Go). Ak ste programátor, potom sú možnosti pre vás skutočne nekonečné. Pretože svet sa stáva čoraz decentralizovanejším a blockchain čoraz viac mainstreamovým, budúcnosť pre vás je určite neobmedzená.

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