Co bychom měli vybudovat blockchain?

Celá historie lidstva je nepřetržitý proces zbavování se řetězů a vytváření nových, ještě silnějších. (anonymní autor)

Při analýze mnoha blockchainových projektů (Bitshares, Hyperledger, Exonum, Ethereum, Bitcoin atd.) chápu, že z technického hlediska jsou všechny postaveny na stejných principech. Blockchainy připomínají domy, které přes veškerou rozmanitost designů, dekorů a účelů mají základy, stěny, střechu, okna, dveře, které jsou spolu určitým způsobem propojeny. A pokud rozumíte základním principům projektování budov a znáte vlastnosti použitých materiálů, můžete určit zamýšlený účel konkrétního domu. V současné době nastala u blockchainu situace, že o něm každý slyšel, ale architektuře a principům fungování rozumí málokdo. Proto panuje nepochopení, proč a jak má smysl využívat blockchainové technologie.

V tomto článku si rozebereme vlastnosti a principy společné všem blockchainům. Dále se podívejme na problémy, které lze vyřešit pomocí blockchainu, a abychom tento materiál posílili, postavme na našem virtuálním webu malý, ale skutečný blockchain!

Pojďme si tedy připomenout, jaké problémy blockchain zpočátku řešil.

Jsem si jistý, že mnozí budou říkat o distribuované, decentralizované, veřejné a neměnné databázi. Ale proč to všechno bylo nutné?

Upřednostňuji začít studovat jakoukoli technologii čtením norem, protože z nich vycházejí všechny články a knihy na studované téma. V současné době však neexistují žádné standardy blockchainu, ISO pouze vytvořilo výbory pro jejich rozvoj. V současné době má každý veřejný blockchainový projekt svůj vlastní dokument White paper, což je v podstatě technická specifikace. Prvním veřejně známým blockchainovým projektem je bitcoinová síť. Přejděte na oficiální webovou stránku sítě a podívejte se jak to všechno začalo.

Blockchain Challenge

Úkolem, který blockchain vyřešil v síti bitcoinových průkopníků, je tedy provést důvěryhodný převod vlastnictví digitálních aktiv (aktiv) v nedůvěryhodném prostředí bez prostředníků. Například v bitcoinové síti jsou digitálním aktivem bitcoinové digitální mince. A všechna technická řešení bitcoinu a dalších blockchainů se skládají k vyřešení tohoto problému.

Problémy, které blockchain řeší

Předpokládejme, že určitá finanční organizace říká, že vybudovala po celém světě síť, s jejíž pomocí je možné převádět peníze jakékoli osobě. Budete jí věřit? Pokud je tato organizace Visa nebo MasterCard, s největší pravděpodobností tomu uvěříte, ale pokud, relativně vzato, AnonymousWorldMoney, pravděpodobně ne. Proč? Ale protože moc dobře víme, jak dělají distribuované systémy soukromé společnosti, k jakým účelům a k čemu to může vést. Pojďme se blíže podívat na problémy takových systémů a na to, jak je lze řešit pomocí blockchain technologií.

Řekněme, že v podmíněném AnonymousWorldMoney jsou servery s databázemi a je dobré, když jich je v různých datových centrech několik. Když odesílatel převede peníze, zaregistruje se transakce, která se replikuje na všechny servery a peníze se dostanou k příjemci.

Co bychom měli vybudovat blockchain?

V ideálním světě toto schéma funguje skvěle, ale v našem nastávají následující problémy:

  1. Problém identifikace účastníků na straně jedné a nutnost anonymity transakcí na straně druhé. Tito. potřebujete převést peníze konkrétnímu příjemci a to tak, aby o této transakci nikdo nevěděl kromě účastníků transakce. Banky mají čísla účtů a bankovní karty spojené s konkrétní fyzickou nebo právnickou osobou a bankovní tajemství chrání informace o transakcích. A kdo zaručí, že podmíněný AnonymousWorldMoney nepoužívá osobní údaje a informace o transakcích pro své vlastní účely?
  2. Jak zajistit, aby příjemce obdržel přesně takovou částku, která mu byla převedena? Relativně řečeno, odesílatel převedl 100 USD a příjemce obdržel 10 USD. Odesílatel přijde do kanceláře AnonymousWorldMoney se svou účtenkou a úředník ukáže jeho verzi, kde je napsáno, že odesílatel převedl pouze 10 $.
  3. Problém nedůvěryhodného prostředí, například podvod zvaný double-spending. Bezohledný účastník může utratit svůj zůstatek několikrát, dokud nebude platba replikována na všechny servery. CAP věta, samozřejmě nikdo nezrušil a k dohodě nakonec dojde, ale někdo nedostane peníze za poskytnuté služby nebo zboží. Pokud tedy neexistuje úplná důvěra v platební organizaci nebo účastníky transakcí, je nutné vybudovat síť založenou nikoli na důvěře, ale na kryptografii.
  4. Conditional AnonymousWorldMoney má omezený počet serverů, které se mohou stát nedostupnými neúmyslně nebo kvůli zlým úmyslům.
  5. AnonymousWorldMoney si vezme svou vlastní hmotnou provizi.
  6. Možnost ovládání. Během fungování bitcoinu se ukázalo, že lidé chtějí nejen převádět coiny mezi sebou, ale také kontrolovat různé podmínky transakce, programovat scénáře práce, automaticky provádět akce v závislosti na podmínkách atd.

Jak blockchain řeší tyto problémy

  1. Identifikace účastníků se provádí pomocí dvojice klíčů: soukromého a veřejného a algoritmus digitálního podpisu jednoznačně identifikuje odesílatele a příjemce, přičemž jejich identita zůstává anonymní.
  2. Transakce se shromažďují do bloků, vypočítá se hash bloku a zapíše se do dalšího bloku. Tato sekvence zaznamenávání hashů v blocích dává technologii blockchain její jméno a také znemožňuje nepozorovatelně měnit / mazat bloky nebo jednotlivé transakce z bloků. Pokud je tedy transakce zahrnuta do blockchainu, můžete si být jisti, že její data zůstanou nezměněna.
  3. Podvodům s dvojím utrácením se zabrání dosažením síťového konsenzu o tom, která data považovat za platná a která vyřadit. V bitcoinové síti je konsensu dosaženo důkazem práce (PoW).
  4. Spolehlivost sítě je dosažena tím, že blockchain je veřejný, kde každý účastník může provozovat svůj vlastní uzel, obdržet kompletní kopii blockchainu a navíc nezávisle začít kontrolovat správnost transakcí. Je třeba poznamenat, že moderní blockchainy umožňují budovat nejen veřejné (otevřené), ale i soukromé (uzavřené) blockchainy a také využití kombinovaných schémat.
  5. Blockchain se provizí úplně nezbaví, protože... musíte platit lidem, kteří síť podporují, ale v blockchainu je potřeba provize prokázána tak přesvědčivě, že o její nezbytnosti není pochyb.
  6. Moderní blockchainy mají schopnost implementovat obchodní logiku, která se v blockchainu nazývá Smart Contracts. Logika chytrých kontraktů je implementována v různých jazycích na vysoké úrovni.

Dále se budeme těmito řešeními zabývat podrobněji.

Blockchain architektura

Komponenty blockchainu

Každý účastník může spustit svůj vlastní uzel s úplnou kopií blockchainu (plný uzel). Jsou volány úplné uzly, které mohou zaznamenávat transakce na blockchainu konsenzuální uzly (svědek) nebo horníci (horník). Jsou volány plné uzly, které pouze kontrolují správnost transakcí auditní uzly (audit). Lehcí klienti (lehcí klienti) neukládají plné kopie blockchainu, ale interagují se sítí pomocí plných uzlů.
Většina uživatelů používá k provádění transakcí lehké klienty nebo webové peněženky. Všechny uzly jsou vzájemně propojeny. S touto sadou prvků se architektura sítě stává stabilnější:

Co bychom měli vybudovat blockchain?

Životní cyklus transakce

Podívejme se na životní cyklus transakce a rozeberme si jej kousek po kousku:

Co bychom měli vybudovat blockchain?

Technologie blockchain

Zastavme se podrobněji u technických řešení a jejich vzájemných souvislostí.

Identifikace

Každá blockchain transakce musí být digitálně podepsána. Proto k dokončení transakce musí mít každý účastník pár klíčů: soukromý / veřejný. Někdy se pár klíčů nazývá peněženka, protože klíče jsou jednoznačně spojeny s jedinečnou digitální adresou a zůstatkem účastníka. Ve skutečnosti jsou klíče a adresy jen řetězce čísel v různých číselných systémech. Příklady klíčů a adres peněženky:

Private key: 0a78194a8a893b8baac7c09b6a4a4b4b161b2f80a126cbb79bde231a4567420f
Public key: 0579b478952214d7cddac32ac9dc522c821a4489bc10aac3a81b9d1cd7a92e57ba
Address: 0x3814JnJpGnt5tB2GD1qfKP709W3KbRdfb27V

K vytvoření digitálního podpisu v blockchainech se používá algoritmus založený na eliptických křivkách: Elliptic Curve Digital Signature Algorithm (ECDSA). Aby to fungovalo, soukromý klíč (256bitové číslo) se obvykle bere náhodně. Počet možností klíče je 2 až 256, takže můžeme mluvit o praktické nemožnosti spárování hodnot soukromých klíčů.

Dále se veřejný klíč získá ze soukromého klíče vynásobením jeho hodnoty souřadnicemi bodu umístěného na eliptické křivce, výsledkem jsou souřadnice nového bodu na stejné křivce. Tato akce zajistí, že získáte pár klíčů vhodný pro digitální podepisování transakcí. Nakonec je adresa peněženky jednoznačně odvozena z veřejného klíče.

Existuje mnoho článků s podrobnostmi o kryptografii používané v blockchainu, například: Bitcoin v kostce – kryptografie

Soukromý klíč musí být přísně důvěrný a zabezpečený. Veřejný klíč zná každý. Pokud dojde ke ztrátě soukromého klíče, přístup k aktivu (coinům) nelze obnovit a peníze budou navždy ztraceny. Proto je úkol bezpečného ukládání soukromých klíčů mimořádně důležitý, protože Toto není banka, kde můžete vždy přijít s pasem a obnovit svůj účet. Na výrobu takzvaných studených kryptopeněženek, podobných flash diskům, existuje celé odvětví:

Co bychom měli vybudovat blockchain?

nebo můžete použít spolehlivější metody, například označení hodnoty soukromého klíče na tokeny:

Co bychom měli vybudovat blockchain?

Transakce

Více podrobností o struktuře transakce naleznete v článku Bitcoin v kostce – transakce. Je důležité, abychom pochopili, že každá transakce obsahuje alespoň následující údaje:

From: 0x48C89c341C5960Ca2Bf3732D6D8a0F4f89Cc4368 - цифровой адрес отправителя
To: 0x367adb7894334678b90аfe7882a5b06f7fbc783a - цифровой адрес получателя
Value: 0.0001 - сумма транзакции
Transaction Hash: 0x617ede331e8a99f46a363b32b239542bb4006e4fa9a2727a6636ffe3eb095cef - хэш транзакции

Dále je transakce podepsána soukromým klíčem a odeslána (viz podrobnosti o fungování protokolu Bitcoin v kostce - protokol) všem uzlům v blockchainu, které kontrolují platnost transakcí. Algoritmus ověření transakce není triviální a zahrnuje dva tucty kroků.

Transakční bloky

Po kontrole platnosti transakcí z nich uzly tvoří bloky. Kromě transakcí se do bloku zapíše hash předchozího bloku a číslo (počítadlo Nonce) a pomocí algoritmu SHA-256 se vypočítá hash aktuálního bloku. Hash musí mít stanovené podmínky složitosti. Například v bitcoinové síti se obtížnost hashe automaticky mění každé 2 týdny v závislosti na výkonu sítě tak, že blok je generován přibližně jednou za 10 minut. Složitost je určena následující podmínkou: nalezený hash musí být menší než předem určené číslo. Pokud tato podmínka není splněna, pak se k Nonce přidá 1 a práce na výpočtu hashe se opakuje. Pro výběr hash se používá pole Noce, protože Toto jsou jediné údaje v bloku, které lze změnit, zbytek musí zůstat nezměněn. Platný hash musí mít určitý počet úvodních nul, jako je jeden ze skutečných hashů:

000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91

Úspěšné nalezení hashe je důkazem odvedené práce (Proof-of-Work, PoW) pro sítě Bitcoin nebo Ethereum. Proces hledání hashů se nazývá těžba, podobně jako těžba zlata. Název poměrně přesně definuje podstatu procesu, protože existuje jednoduché vyhledávání možností a pokud někdo najde vhodný hash, tak je to opravdu štěstí. Je to jako najít skutečný zlatý nuget v tunách hlušiny. Bloková odměna je nyní 12.5 BTC a pokud ji vynásobíte aktuálním kurzem bitcoinu 3900 $, získáte více než kilogram ryzího zlata. Je o co bojovat!

Po úspěšném nalezení hashe se blok a samotný nalezený hash zapíše do blockchainu jako další blok. Více podrobností o struktuře bloků naleznete v článku Bitcoin v kostce – blockchaina níže je zjednodušený diagram:

Co bychom měli vybudovat blockchain?

Blockchain začíná blokem, který ještě nemá hash předchozího bloku. V blockchainu je pouze jeden takový blok a má svůj vlastní název Genesis block. Zbývající bloky mají stejnou strukturu a liší se pouze počtem transakcí. Skutečné transakce a bloky, které se aktuálně vytvářejí v bitcoinech nebo ethereu, lze zobrazit Block Explorer.

Velikost bloků v bitcoinech je omezena na 1 MB a s minimálním množstvím informací v transakci asi 200 bajtů může být maximální počet transakcí v bloku asi 6000. Odsud mimochodem následuje výkon Bitcoinu, kterému se všichni smějí: blok se generuje přibližně jednou za 10 minut * 60 sekund = 600 sekund, což dává formální výkon asi 10 TPS. I když to ve skutečnosti není produktivita, ale záměrně implementovaný algoritmus práce. V Ethereu pro konkurenci jednoduše udělali dobu generování bloku 15 sekund. a produktivita formálně stoupla. Proto v blockchainech, které používají PoW jako konsensus, nemá smysl vůbec porovnávat výkon, protože přímo závisí na složitosti výpočtu cache, které lze přiřadit libovolnou hodnotu.

Vidličky

Co se stane, když například několik uzlů najde hashe, který splňuje podmínky složitosti, ale má různou hodnotu (jinými slovy, došlo k jinému konsensu) a zapsalo bloky do blockchainu? Pojďme se podívat, jak blockchain proti této situaci chrání. V tomto případě dochází k takzvanému rozvětvení a blockchain má dvě verze řetězce:

Co bychom měli vybudovat blockchain?

Co se stane dál? Dále část sítě začne pracovat na bloku N+2 z jednoho řetězce a část z jiného:

Co bychom měli vybudovat blockchain?

Jeden z těchto bloků bude nalezen dříve a odeslán do blockchainu a poté bude muset blockchain podle pravidel přejít na delší řetězec a zrušit všechny transakce z alternativního bloku:

Co bychom měli vybudovat blockchain?

Zároveň může nastat situace, kdy transakce účastníka byla pouze v jednom z fork bloků, který byl zrušen. Proto, abyste si byli jisti, že požadovaná transakce je zaznamenána v blockchainu, existuje obecné doporučení – než transakci důvěřujete, měli byste počkat, dokud se do blockchainu nepřidají další bloky. Doporučení, kolik bloků čekat na různé blockchainy, se liší. Například pro bitcoinovou síť je minimum 2 bloky, maximum je 6.

Stejný obrázek s blokovými vidlemi bude pozorován během takzvaného 51% útoku - to je, když se skupina těžařů snaží vypěstovat alternativní blokový řetězec a snaží se tento řetězec zrušit svými podvodnými transakcemi. I když v současnosti je místo podvodů výhodnější utrácet svou sílu za poctivou těžbu.

Konsensus

Aby bylo možné zaznamenat blok na blockchainu, musí síť dosáhnout konsensu. Připomeňme si úkol dosáhnout konsensu v počítačových komunikačních sítích. Problém je formulován jako úkol byzantských generálů BFT (Byzantská odolnost proti chybám). Pomineme-li malebný popis problémů byzantské armády, lze problém formulovat následovně: jak mohou síťové uzly dojít ke společnému výsledku, když je některé síťové uzly mohou záměrně deformovat. Stávající algoritmy pro řešení problému BFT ukazují, že síť může fungovat správně, pokud je méně než 1/3 podvodníků. Proč nebyl na bitcoinovou síť aplikován konsenzus BFT? Proč bylo nutné použít PoW? Důvodů je několik:

  • BFT funguje dobře s malou pevnou sadou uzlů, ale ve veřejném blockchainu je počet uzlů nepředvídatelný a navíc lze uzly zapínat a vypínat náhodně.
  • Je potřeba motivovat lidi, aby spouštěli blockchainové uzly. K tomu musí být lidé odměněni. V BFT není formálně za co získat odměnu, ale za co je odměna v PoW, je každému jasné na intuitivní úrovni: za elektřinu spotřebovanou procesorem v procesu hledání blokového hashe.

Kromě PoW existuje několik dalších konsensů, které se používají v moderních blockchainech, například:

  • PoS (Proof-of-Stake) – na blockchainu Hyperledger
  • DPoS (Delegated Proof-of-Stake) – na blockchainu BitShares
  • Úpravy BFT: SBFT (zjednodušený BFT) a PBFT (praktický BFT), například v blockchainu Exonum

Zastavme se trochu u konsenzu PoS, protože... Právě PoS a jeho odrůdy jsou v soukromých blockchainech nejrozšířenější. Proč v soukromí? Na jednu stranu jsou vlastnosti PoS ve srovnání s PoW lepší, protože K dosažení konsenzu je potřeba méně výpočetních zdrojů, což znamená, že se zvyšuje rychlost zápisu dat do blockchainu. Ale na druhou stranu má PoS více příležitostí k podvodům, takže k neutralizaci je třeba znát všechny účastníky blockchainu.

PoS konsenzus je založen na výběru uzlu, který dokáže zapsat blok s transakcemi do blockchainu v závislosti na množství finančních prostředků na účtu, respektive ne na účtu, ale v kolaterálu, tzn. Čím více prostředků máte jako zajištění, tím je pravděpodobnější, že si síť vybere váš uzel, aby zapsal blok. V případě neplatnosti bloku se záloha nevrací. To poskytuje ochranu proti podvodům. Existují následující varianty PoS:

  • Konsensus Delegated PoS (DPoS) rozděluje účastníky na „voliče“ a „validátory“. Držitelé mincí (hlasující účastníci) delegují svou pravomoc ověřovat a zaznamenávat transakce na blockchainu na ostatní účastníky. Validátoři tedy odvádějí veškerou výpočetní práci a dostávají za ni odměnu a přítomnost hlasujících účastníků zaručuje poctivost validátorů, protože lze je kdykoli změnit.
  • Konsenzus LPoS (Leased Proof-of-Stake) vám umožňuje pronajmout vaše finanční prostředky jiným uzlům, aby měly větší šanci na ověření bloků. Že. Můžete získat provizi za transakce, aniž byste se účastnili skutečného ověření transakce a těžby bloků.

Existuje i řada konsensů, které se zatím nerozšířily, uvedu je zde jen pro informaci a přehled samotných konsenzuálních algoritmů najdete například v článku: Konsensuální algoritmy v blockchainu.

  • PoET (Proof-of-Elapsed Time)
  • PoC (Proof-of-Capacity)
  • PoB (Proof-of-Burn)
  • PoWeight (Proof-of-Weight)
  • PoA (Proof-of-Activity) – PoW + PoS
  • PoI (důkaz důležitosti)

Spolehlivost a modely nasazení blockchainů

Veřejný blockchain

Stabilita Soukromí nebo jiné jméno Blockchain bez povolení Toho je dosaženo tím, že kdokoli se může připojit a prohlížet informace nebo dokonce připojit svůj vlastní uzel a důvěra je postavena na konsensu PoW.

Soukromý blockchain

soukromý nebo Soukromý povolený blockchain. V těchto blockchainech má přístup k informacím pouze určitá skupina účastníků (organizace nebo lidé). Takové blockchainy jsou vytvářeny organizacemi s cílem zvýšit celkový přínos nebo efektivitu. Jejich spolehlivost je zajištěna společnými cíli účastníků a konsenzuálními algoritmy PoS a BFT.

Blockchain konsorcium

tam Konsorcium nebo Veřejně povolený blockchain. Jedná se o blockchainy, ke kterým se může připojit kdokoli a prohlížet si je, ale účastník může přidávat informace nebo připojit svůj uzel pouze se svolením ostatních účastníků. Takové blockchainy jsou vytvářeny organizacemi za účelem zvýšení důvěry na straně zákazníků nebo spotřebitelů produktů nebo společnosti jako celku. Zde je spolehlivosti dosaženo také přítomností důvěry mezi účastníky a stejnými algoritmy PoS a BFT.

Inteligentní smlouvy

Blockchainy implementované po bitcoinu do té či oné míry přidaly schopnost provádět chytré smlouvy. Inteligentní smlouva je v podstatě transakce, ve které je kód programu umístěn pro provedení. Chytré kontrakty v síti Ethereum jsou prováděny v EVM (Ethereum Virtual Machine). Pro zahájení realizace smart kontraktu musí být výslovně spuštěn jinou transakcí, nebo musí být splněny předpoklady pro realizaci. Výsledky realizace smart kontraktu budou také zaznamenány v blockchainu. Příjem dat mimo blockchain je možný, ale extrémně omezený.

Jakou obchodní logiku lze implementovat pomocí chytré smlouvy? Ve skutečnosti toho moc není, například kontrola podmínek pomocí dat z blockchainu, změna vlastníků digitálních aktiv v závislosti na těchto podmínkách, zaznamenávání dat do trvalého úložiště v rámci blockchainu. Logika je implementována ve speciálním vysokoúrovňovém jazyce Solidity.

Klasickým příkladem funkčnosti, která je implementována pomocí smart kontraktů, je vydávání tokenů pro ICO. Například jsem implementoval inteligentní smlouvu na vydání skromných 500 000 000 AlexToken. Podle odkaz v Etherscanu je

zdrojový kód chytré smlouvy v jazyce Solidity

pragma solidity ^0.4.23;
library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
**/
function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
if (a == 0) {
return 0;
}
c = a * b;
assert(c / a == b);
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
**/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
// uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return a / b;
}
/**
* @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
**/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
/**
* @dev Adds two numbers, throws on overflow.
**/
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a + b;
assert(c >= a);
return c;
}
}
/**
* @title Ownable
* @dev The Ownable contract has an owner address, and provides basic authorization control
* functions, this simplifies the implementation of "user permissions".
**/
contract Ownable {
address public owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev The Ownable constructor sets the original `owner` of the contract to the sender account.
**/
constructor() public {
owner = msg.sender;
}
/**
* @dev Throws if called by any account other than the owner.
**/
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
/**
* @dev Allows the current owner to transfer control of the contract to a newOwner.
* @param newOwner The address to transfer ownership to.
**/
function transferOwnership(address newOwner) public onlyOwner {
require(newOwner != address(0));
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
}
/**
* @title ERC20Basic interface
* @dev Basic ERC20 interface
**/
contract ERC20Basic {
function totalSupply() public view returns (uint256);
function balanceOf(address who) public view returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
}
/**
* @title ERC20 interface
* @dev see https://github.com/ethereum/EIPs/issues/20
**/
contract ERC20 is ERC20Basic {
function allowance(address owner, address spender) public view returns (uint256);
function transferFrom(address from, address to, uint256 value) public returns (bool);
function approve(address spender, uint256 value) public returns (bool);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @title Basic token
* @dev Basic version of StandardToken, with no allowances.
**/
contract BasicToken is ERC20Basic {
using SafeMath for uint256;
mapping(address => uint256) balances;
uint256 totalSupply_;
/**
* @dev total number of tokens in existence
**/
function totalSupply() public view returns (uint256) {
return totalSupply_;
}
/**
* @dev transfer token for a specified address
* @param _to The address to transfer to.
* @param _value The amount to be transferred.
**/
function transfer(address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[msg.sender]);
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
emit Transfer(msg.sender, _to, _value);
return true;
}
/**
* @dev Gets the balance of the specified address.
* @param _owner The address to query the the balance of.
* @return An uint256 representing the amount owned by the passed address.
**/
function balanceOf(address _owner) public view returns (uint256) {
return balances[_owner];
}
}
contract StandardToken is ERC20, BasicToken {
mapping (address => mapping (address => uint256)) internal allowed;
/**
* @dev Transfer tokens from one address to another
* @param _from address The address which you want to send tokens from
* @param _to address The address which you want to transfer to
* @param _value uint256 the amount of tokens to be transferred
**/
function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[_from]);
require(_value <= allowed[_from][msg.sender]);
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
emit Transfer(_from, _to, _value);
return true;
}
/**
* @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
*
* Beware that changing an allowance with this method brings the risk that someone may use both the old
* and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
* race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
* @param _spender The address which will spend the funds.
* @param _value The amount of tokens to be spent.
**/
function approve(address _spender, uint256 _value) public returns (bool) {
allowed[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
/**
* @dev Function to check the amount of tokens that an owner allowed to a spender.
* @param _owner address The address which owns the funds.
* @param _spender address The address which will spend the funds.
* @return A uint256 specifying the amount of tokens still available for the spender.
**/
function allowance(address _owner, address _spender) public view returns (uint256) {
return allowed[_owner][_spender];
}
/**
* @dev Increase the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To increment
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _addedValue The amount of tokens to increase the allowance by.
**/
function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
/**
* @dev Decrease the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To decrement
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _subtractedValue The amount of tokens to decrease the allowance by.
**/
function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
uint oldValue = allowed[msg.sender][_spender];
if (_subtractedValue > oldValue) {
allowed[msg.sender][_spender] = 0;
} else {
allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
}
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
}
/**
* @title Configurable
* @dev Configurable varriables of the contract
**/
contract Configurable {
uint256 public constant cap = 1000000000*10**18;
uint256 public constant basePrice = 100*10**18; // tokens per 1 ether
uint256 public tokensSold = 0;
uint256 public constant tokenReserve = 500000000*10**18;
uint256 public remainingTokens = 0;
}
/**
* @title CrowdsaleToken 
* @dev Contract to preform crowd sale with token
**/
contract CrowdsaleToken is StandardToken, Configurable, Ownable {
/**
* @dev enum of current crowd sale state
**/
enum Stages {
none,
icoStart, 
icoEnd
}
Stages currentStage;
/**
* @dev constructor of CrowdsaleToken
**/
constructor() public {
currentStage = Stages.none;
balances[owner] = balances[owner].add(tokenReserve);
totalSupply_ = totalSupply_.add(tokenReserve);
remainingTokens = cap;
emit Transfer(address(this), owner, tokenReserve);
}
/**
* @dev fallback function to send ether to for Crowd sale
**/
function () public payable {
require(currentStage == Stages.icoStart);
require(msg.value > 0);
require(remainingTokens > 0);
uint256 weiAmount = msg.value; // Calculate tokens to sell
uint256 tokens = weiAmount.mul(basePrice).div(1 ether);
uint256 returnWei = 0;
if(tokensSold.add(tokens) > cap){
uint256 newTokens = cap.sub(tokensSold);
uint256 newWei = newTokens.div(basePrice).mul(1 ether);
returnWei = weiAmount.sub(newWei);
weiAmount = newWei;
tokens = newTokens;
}
tokensSold = tokensSold.add(tokens); // Increment raised amount
remainingTokens = cap.sub(tokensSold);
if(returnWei > 0){
msg.sender.transfer(returnWei);
emit Transfer(address(this), msg.sender, returnWei);
}
balances[msg.sender] = balances[msg.sender].add(tokens);
emit Transfer(address(this), msg.sender, tokens);
totalSupply_ = totalSupply_.add(tokens);
owner.transfer(weiAmount);// Send money to owner
}
/**
* @dev startIco starts the public ICO
**/
function startIco() public onlyOwner {
require(currentStage != Stages.icoEnd);
currentStage = Stages.icoStart;
}
/**
* @dev endIco closes down the ICO 
**/
function endIco() internal {
currentStage = Stages.icoEnd;
// Transfer any remaining tokens
if(remainingTokens > 0)
balances[owner] = balances[owner].add(remainingTokens);
// transfer any remaining ETH balance in the contract to the owner
owner.transfer(address(this).balance); 
}
/**
* @dev finalizeIco closes down the ICO and sets needed varriables
**/
function finalizeIco() public onlyOwner {
require(currentStage != Stages.icoEnd);
endIco();
}
}
/**
* @title LavevelToken 
* @dev Contract to create the Lavevel Token
**/
contract AlexToken is CrowdsaleToken {
string public constant name = "AlexToken";
string public constant symbol = "ALT";
uint32 public constant decimals = 18;
}

a binární reprezentace, jak ji vidí síť

60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029

Více podrobností o smart kontraktech najdete v článku: Co jsou chytré smlouvy v Ethereu.

Závěr

Vyjmenovali jsme technologie, na kterých jsou moderní blockchainy postaveny a jak jsou vzájemně propojeny. Pojďme si nyní zformulovat, které problémy lze pomocí blockchainu vyřešit a která řešení budou přinejlepším neúčinná. Použití blockchainu tedy není nutné, pokud:

  • Transakce jsou prováděny v důvěryhodném prostředí;
  • Přítomnost komise zprostředkovatelů nezhoršuje život účastníků;
  • Účastníci nemají majetek, který lze reprezentovat jako digitální aktiva;
  • V digitálních aktivech nedochází k distribuci, tzn. hodnotu vlastní nebo dodává pouze jeden účastník.

Jaká je budoucnost blockchainu? Nyní můžeme jen spekulovat o možných způsobech rozvoje blockchainových technologií:

  • Blockchain se stane stejnou běžnou databázovou technologií jako například SQL nebo NoSQL pro řešení jeho specifické řady problémů;
  • Blockchain se stane rozšířeným protokolem, jako je HTTP pro internet;
  • Blockchain se stane základem pro nový finanční a politický systém na planetě!

V příštím díle se podíváme na to, jaké blockchainy v současnosti existují a proč se používají v různých odvětvích.

To je jen začátek!

Zdroj: www.habr.com

Přidat komentář