Čo by sme mali vybudovať blockchain?

Celá história ľudstva je neustálym procesom zbavovania sa reťazí a vytvárania nových, ešte silnejších. (anonymný autor)

Pri analýze mnohých blockchainových projektov (Bitshares, Hyperledger, Exonum, Ethereum, Bitcoin atď.) chápem, že z technického hľadiska sú všetky postavené na rovnakých princípoch. Blockchainy pripomínajú domy, ktoré napriek všetkej rozmanitosti dizajnov, dekorácií a účelov majú základy, steny, strechu, okná, dvere, ktoré sú navzájom prepojené určitými spôsobmi. A ak pochopíte základné princípy projektovania budov a poznáte vlastnosti použitých materiálov, potom môžete určiť zamýšľaný účel konkrétneho domu. V súčasnosti nastala pri blockchaine situácia, že o ňom každý počul, no architektúre a princípom fungovania rozumie málokto. Preto existuje nepochopenie, prečo a ako má zmysel využívať blockchain technológie.

V tomto článku rozoberieme vlastnosti a princípy spoločné pre všetky blockchainy. Ďalej sa pozrime na problémy, ktoré je možné vyriešiť pomocou blockchainu, a aby sme tento materiál posilnili, vybudujme malý, ale skutočný blockchain na našej virtuálnej stránke!

Poďme si teda pripomenúť, aké problémy blockchain spočiatku riešil.

Som si istý, že mnohí povedia o distribuovanej, decentralizovanej, verejnej a nemennej databáze. Ale prečo bolo toto všetko potrebné?

Radšej začnem študovať akúkoľvek technológiu čítaním noriem, keďže z nich vychádzajú všetky články a knihy na skúmanú tému. V súčasnosti však neexistujú žiadne štandardy blockchainu; ISO iba vytvorilo výborov pre ich rozvoj. V súčasnosti má každý verejný blockchainový projekt svoj vlastný dokument White paper, ktorý je v podstate technickou špecifikáciou. Prvým verejne známym blockchainovým projektom je bitcoinová sieť. Prejdite na oficiálnu webovú stránku siete a pozri kde to všetko začalo.

Blockchain Challenge

Úlohou, ktorú blockchain vyriešil v sieti priekopníkov Bitcoinu, je teda vykonať dôveryhodný prevod vlastníctva digitálnych aktív (aktíva) v nedôveryhodnom prostredí bez sprostredkovateľov. Napríklad v bitcoinovej sieti sú digitálnym aktívom bitcoinové digitálne mince. A všetky technické riešenia bitcoinu a iných blockchainov vedú k vyriešeniu tohto problému.

Problémy, ktoré blockchain rieši

Predpokladajme, že určitá finančná organizácia hovorí, že vybudovala po celom svete sieť, pomocou ktorej je možné previesť peniaze na akúkoľvek osobu. Uveríte jej? Ak je touto organizáciou Visa alebo MasterCard, s najväčšou pravdepodobnosťou tomu uveríte, ale ak, relatívne povedané, AnonymousWorldMoney, pravdepodobne nie. prečo? Ale preto, že veľmi dobre vieme, ako sa vyrábajú distribuované systémy súkromnými spoločnosťami, na aké účely a k čomu to môže viesť. Pozrime sa bližšie na problémy takýchto systémov a na to, ako ich možno vyriešiť pomocou blockchainových technológií.

Povedzme, že v podmienenom AnonymousWorldMoney sú servery s databázami a je dobré, ak ich je niekoľko v rôznych dátových centrách. Keď odosielateľ prevedie peniaze, zaregistruje sa transakcia, ktorá sa replikuje na všetky servery a peniaze sa dostanú k príjemcovi.

Čo by sme mali vybudovať blockchain?

V ideálnom svete táto schéma funguje skvele, ale v našom svete vznikajú tieto problémy:

  1. Problém identifikácie účastníkov na jednej strane a potreba anonymity transakcií na strane druhej. Tie. potrebujete previesť peniaze konkrétnemu príjemcovi a to tak, aby o tejto transakcii nikto nevedel okrem účastníkov transakcie. Banky majú čísla účtov a bankové karty spojené s konkrétnou fyzickou alebo právnickou osobou a bankové tajomstvo chráni informácie o transakciách. A kto zaručuje, že podmienečný AnonymousWorldMoney nepoužíva osobné údaje a informácie o transakciách na svoje vlastné účely?
  2. Ako zabezpečiť, aby príjemca dostal presne tú sumu, ktorá mu bola poukázaná? Relatívne povedané, odosielateľ previedol 100 USD a príjemca dostal 10 USD. Odosielateľ príde do kancelárie AnonymousWorldMoney s potvrdením a úradník ukáže svoju verziu, kde je napísané, že odosielateľ previedol iba 10 dolárov.
  3. Problém nedôveryhodného prostredia, napríklad podvod s názvom double-spending. Bezohľadný účastník môže minúť svoj zostatok niekoľkokrát, kým sa platba nereplikuje na všetky servery. CAP veta, samozrejme, nikto nezrušil a dohoda sa nakoniec dosiahne, ale niekto nedostane peniaze za poskytnuté služby alebo tovar. Preto, ak neexistuje úplná dôvera v platobnú organizáciu alebo účastníkov transakcií, potom je potrebné vybudovať sieť založenú nie na dôvere, ale na kryptografii.
  4. Conditional AnonymousWorldMoney má obmedzený počet serverov, ktoré sa môžu stať nedostupnými neúmyselne alebo kvôli zlým úmyslom.
  5. AnonymousWorldMoney získa svoju vlastnú hmatateľnú províziu.
  6. Možnosť kontroly. Počas fungovania Bitcoinu sa ukázalo, že ľudia si chcú nielen prevádzať coiny medzi sebou, ale aj kontrolovať rôzne podmienky transakcie, programovať pracovné scenáre, automaticky vykonávať akcie v závislosti od podmienok atď.

Ako blockchain rieši tieto problémy

  1. Identifikácia účastníkov sa vykonáva pomocou dvojice kľúčov: súkromného a verejného, ​​pričom algoritmus digitálneho podpisu jednoznačne identifikuje odosielateľa a príjemcu, pričom ich identita zostáva anonymná.
  2. Transakcie sa zhromažďujú do blokov, vypočíta sa hash bloku a zapíše sa do ďalšieho bloku. Táto postupnosť zaznamenávania hashov v blokoch dáva blockchainovej technológii názov a tiež znemožňuje nepozorovateľne meniť / mazať bloky alebo jednotlivé transakcie z blokov. Ak je teda transakcia zahrnutá do blockchainu, môžete si byť istí, že jej údaje zostanú nezmenené.
  3. Podvodom s dvojitými výdavkami sa zabráni dosiahnutím konsenzu siete o tom, ktoré údaje sa majú považovať za platné a ktoré sa majú vyradiť. V bitcoinovej sieti sa konsenzus dosahuje dôkazom práce (PoW).
  4. Spoľahlivosť siete je dosiahnutá tým, že blockchain je verejný, kde každý účastník môže spustiť svoj vlastný uzol, získať kompletnú kópiu blockchainu a navyše nezávisle začať kontrolovať správnosť transakcií. Treba si uvedomiť, že moderné blockchainy umožňujú budovať nielen verejné (otvorené), ale aj súkromné ​​(uzavreté) blockchainy, ako aj využitie kombinovaných schém.
  5. Blockchain sa provízií úplne nezbaví, pretože... musíte zaplatiť ľuďom, ktorí sieť podporujú, no v blockchaine je potreba provízie dokázaná tak presvedčivo, že o jej nevyhnutnosti niet pochýb.
  6. Moderné blockchainy majú schopnosť implementovať obchodnú logiku, ktorá sa v blockchaine nazýva Smart Contracts. Logika inteligentných zmlúv je implementovaná v rôznych jazykoch na vysokej úrovni.

Ďalej tieto riešenia zvážime podrobnejšie.

Blockchain architektúra

Komponenty blockchainu

Každý účastník môže spustiť svoj vlastný uzol s úplnou kópiou blockchainu (úplný uzol). Volajú sa úplné uzly, ktoré môžu zaznamenávať transakcie na blockchaine konsenzuálne uzly (svedok) alebo baníci (baník). Volajú sa úplné uzly, ktoré iba kontrolujú správnosť transakcií uzly auditu (audit). Ľahkých klientov (ľahkí klienti) neukladajú úplné kópie blockchainu, ale interagujú so sieťou pomocou úplných uzlov.
Väčšina používateľov používa na uskutočňovanie transakcií nenáročných klientov alebo webové peňaženky. Všetky uzly sú navzájom prepojené. S touto sadou prvkov sa sieťová architektúra stáva stabilnejšou:

Čo by sme mali vybudovať blockchain?

Životný cyklus transakcie

Pozrime sa na životný cyklus transakcie a rozoberme si ho kúsok po kúsku:

Čo by sme mali vybudovať blockchain?

Blockchain technológie

Pozrime sa podrobnejšie na technické riešenia a ich vzájomné prepojenia.

identifikácia

Každá blockchainová transakcia musí byť digitálne podpísaná. Preto na dokončenie transakcie musí mať každý účastník pár kľúčov: súkromný / verejný. Niekedy sa pár kľúčov nazýva peňaženka, pretože kľúče sú jedinečne spojené s jedinečnou digitálnou adresou a zostatkom účastníka. V skutočnosti sú kľúče a adresy len reťazce čísel v rôznych číselných sústavách. Príklady kľúčov a adries peňaženky:

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

Na vytvorenie digitálneho podpisu v blockchainoch sa používa algoritmus založený na eliptických krivkách: Elliptic Curve Digital Signature Algorithm (ECDSA). Aby to fungovalo, súkromný kľúč (256-bitové číslo) sa zvyčajne berie náhodne. Počet možností kľúča je 2 až 256, takže môžeme hovoriť o praktickej nemožnosti zhody hodnôt súkromných kľúčov.

Ďalej sa verejný kľúč získa zo súkromného kľúča vynásobením jeho hodnoty súradnicami bodu umiestneného na eliptickej krivke, výsledkom čoho sú súradnice nového bodu na tej istej krivke. Táto akcia zabezpečí, že získate pár kľúčov vhodný na digitálne podpisovanie transakcií. Nakoniec je adresa peňaženky jednoznačne odvodená od verejného kľúča.

Existuje veľa článkov s podrobnosťami o kryptografii používanej v blockchaine, napríklad: Bitcoin v skratke – kryptografia

Súkromný kľúč musí byť prísne dôverný a musí byť chránený. Verejný kľúč pozná každý. Ak dôjde k strate súkromného kľúča, prístup k aktívu (minciam) nie je možné obnoviť a peniaze budú navždy stratené. Preto je úloha bezpečného ukladania súkromných kľúčov mimoriadne dôležitá, pretože Toto nie je banka, kde môžete vždy prísť s pasom a obnoviť svoj účet. Existuje celý priemysel na výrobu takzvaných studených krypto peňaženiek, podobných flash diskom:

Čo by sme mali vybudovať blockchain?

alebo môžete použiť spoľahlivejšie metódy, napríklad označiť hodnotu súkromného kľúča na tokenoch:

Čo by sme mali vybudovať blockchain?

Transakcie

Viac podrobností o štruktúre transakcie nájdete v článku Bitcoin v skratke – Transakcia. Je dôležité, aby sme pochopili, že každá transakcia obsahuje minimálne tieto údaje:

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

Ďalej je transakcia podpísaná súkromným kľúčom a odoslaná (pozri podrobnosti o fungovaní protokolu Bitcoin v skratke – protokol) na všetky uzly v blockchaine, ktoré kontrolujú platnosť transakcií. Algoritmus overenia transakcie nie je triviálny a zahŕňa dva tucty krokov.

Transakčné bloky

Po kontrole platnosti transakcií z nich uzly tvoria bloky. Okrem transakcií sa do bloku zapíše hash predchádzajúceho bloku a číslo (počítadlo Nonce) a pomocou algoritmu SHA-256 sa vypočíta hash aktuálneho bloku. Hash musí mať stanovené podmienky zložitosti. Napríklad v bitcoinovej sieti sa obtiažnosť hashu automaticky mení každé 2 týždne v závislosti od výkonu siete tak, aby sa blok vygeneroval približne raz za 10 minút. Zložitosť je určená nasledujúcou podmienkou: nájdený hash musí byť menší ako vopred určené číslo. Ak táto podmienka nie je splnená, potom sa k Nonce pridá 1 a práca na výpočte hashu sa zopakuje. Na výber hash sa používa pole Noce, pretože Toto sú jediné údaje v bloku, ktoré je možné zmeniť, ostatné musia zostať nezmenené. Platný hash musí mať určitý počet úvodných núl, ako napríklad jeden zo skutočných hash:

000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91

Úspešné nájdenie hashu je dôkazom vykonanej práce (Proof-of-Work, PoW) pre siete Bitcoin alebo Ethereum. Proces hľadania hashov sa nazýva ťažba, podobne ako ťažba zlata. Názov celkom presne definuje podstatu procesu, pretože existuje jednoduché vyhľadávanie možností a ak niekto nájde vhodný hash, tak je to naozaj šťastie. Je to ako nájsť skutočný zlatý nuget v tonách hlušiny. Bloková odmena je teraz 12.5 BTC a ak ju vynásobíte aktuálnym kurzom Bitcoinu 3900 $, získate viac ako kilogram čistého zlata. Je o čo bojovať!

Po úspešnom nájdení hashu sa blok a samotný nájdený hash zapíšu do blockchainu ako ďalší blok. Viac podrobností o štruktúre blokov nájdete v článku Bitcoin v skratke-Blockchaina nižšie je zjednodušený diagram:

Čo by sme mali vybudovať blockchain?

Blockchain začína blokom, ktorý ešte nemá hash predchádzajúceho bloku. V blockchaine je len jeden takýto blok a má svoj vlastný názov Genesis block. Zvyšné bloky majú rovnakú štruktúru a líšia sa len počtom transakcií. Skutočné transakcie a bloky, ktoré sa v súčasnosti vytvárajú v bitcoíne alebo ethereu, je možné zobraziť Block Explorer.

Veľkosť blokov v bitcoine je obmedzená na 1 MB a pri minimálnom množstve informácií v transakcii okolo 200 bajtov môže byť maximálny počet transakcií v bloku okolo 6000. Odtiaľto, mimochodom, nasleduje výkon Bitcoinu, ktorému sa všetci smejú: blok sa vygeneruje približne raz za 10 minút * 60 sekúnd = 600 sekúnd, čo dáva formálny výkon okolo 10 TPS. Aj keď v skutočnosti nejde o produktivitu, ale o zámerne implementovaný algoritmus práce. V Ethereu pre konkurenciu jednoducho spravili čas generovania bloku 15 sekúnd. a produktivita formálne vzrástla. Preto v blockchainoch, ktoré používajú PoW ako konsenzus, nemá zmysel vôbec porovnávať výkon, pretože priamo závisí od zložitosti výpočtu vyrovnávacej pamäte, ktorá môže byť priradená akejkoľvek hodnote.

Vidličky

Čo sa stane, ak napríklad niekoľko uzlov našlo hash, ktorý spĺňa podmienky zložitosti, no má rôznu hodnotu (inými slovami, dospeli k rôznym konsenzom) a zapísali bloky do blockchainu? Pozrime sa, ako blockchain chráni pred touto situáciou. V tomto prípade nastáva takzvaný fork a blockchain má dve verzie reťazca:

Čo by sme mali vybudovať blockchain?

Čo bude ďalej? Ďalej časť siete začne pracovať na bloku N+2 z jedného reťazca a časť z iného:

Čo by sme mali vybudovať blockchain?

Jeden z týchto blokov bude nájdený skôr a odoslaný do blockchainu a potom bude musieť blockchain podľa pravidiel prejsť na dlhší reťazec a zrušiť všetky transakcie z alternatívneho bloku:

Čo by sme mali vybudovať blockchain?

Zároveň môže nastať situácia, keď transakcia účastníka bola iba v jednom z forkových blokov, ktorý bol zrušený. Preto, aby ste si boli istí, že požadovaná transakcia je zaznamenaná v blockchaine, existuje všeobecné odporúčanie – pred dôverou v transakciu by ste mali počkať, kým sa do blockchainu pridá niekoľko ďalších blokov. Odporúčania, koľko blokov čakať na rôzne blockchainy, sa líšia. Napríklad pre bitcoinovú sieť je minimum 2 bloky, maximum je 6.

Rovnaký obrázok s block forkmi bude pozorovaný počas takzvaného 51% útoku - to je, keď sa skupina ťažiarov snaží vybudovať alternatívny block chain, snažiac sa zrušiť reťazec svojimi podvodnými transakciami. Aj keď v súčasnosti je namiesto podvodu výhodnejšie minúť svoju silu na poctivú ťažbu.

Konsenzus

Na zaznamenanie bloku na blockchaine musí sieť dosiahnuť konsenzus. Spomeňme si na úlohu dosiahnutia konsenzu v počítačových komunikačných sieťach. Problém je formulovaný ako úloha byzantských generálov BFT (Byzantská tolerancia chýb). Ak vynecháme malebný opis problémov byzantskej armády, problém možno formulovať takto: ako môžu sieťové uzly dospieť k spoločnému výsledku, ak ich niektoré sieťové uzly môžu zámerne skresľovať. Existujúce algoritmy na riešenie problému BFT ukazujú, že sieť môže fungovať správne, ak existuje menej ako 1/3 podvodníkov. Prečo sa na bitcoinovú sieť neaplikoval konsenzus BFT? Prečo bolo potrebné použiť PoW? Existuje niekoľko dôvodov:

  • BFT funguje dobre s malou pevnou sadou uzlov, ale vo verejnom blockchaine je počet uzlov nepredvídateľný a navyše sa uzly môžu zapínať a vypínať náhodne.
  • Je potrebné motivovať ľudí, aby spúšťali blockchainové uzly. Aby sa to podarilo, ľudia musia byť odmenení. V BFT nie je formálne za čo dostať odmenu, ale za čo je odmena v PoW, je každému jasné na intuitívnej úrovni: za elektrinu spotrebovanú procesorom v procese hľadania blokového hashu.

Okrem PoW existuje niekoľko ďalších konsenzov, ktoré sa používajú v moderných blockchainoch, napríklad:

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

Zastavme sa trochu pri konsenze PoS, pretože... Práve PoS a jeho odrody sú v súkromných blockchainoch najrozšírenejšie. Prečo v súkromí? Na jednej strane sú vlastnosti PoS lepšie v porovnaní s PoW, pretože na dosiahnutie konsenzu je potrebných menej výpočtových zdrojov, čo znamená, že rýchlosť zápisu dát do blockchainu sa zvyšuje. Ale na druhej strane má PoS viac príležitostí na podvody, takže na neutralizáciu musia byť známi všetci účastníci blockchainu.

PoS konsenzus je založený na výbere uzla, ktorý dokáže zapísať blok s transakciami do blockchainu v závislosti od množstva prostriedkov na účte, respektíve nie na účte, ale v kolateráli, t.j. Čím viac prostriedkov máte ako kolaterál, tým je pravdepodobnejšie, že si sieť vyberie váš uzol na zapísanie bloku. V prípade neplatnosti bločku sa záloha nevracia. To poskytuje ochranu pred podvodmi. Existujú nasledujúce varianty PoS:

  • Konsenzus delegovaných PoS (DPoS) rozdeľuje účastníkov na „voličov“ a „validátorov“. Držitelia mincí (hlasujúci účastníci) delegujú svoju právomoc overovať a zaznamenávať transakcie na blockchaine na iných účastníkov. Validátori teda robia všetku výpočtovú prácu a dostávajú za ňu odmenu a prítomnosť hlasujúcich účastníkov zaručuje poctivosť validátorov, pretože môžu byť kedykoľvek zmenené.
  • Konsenzus LPoS (Leased Proof-of-Stake) vám umožňuje prenajať vaše prostriedky iným uzlom, aby mali väčšiu šancu na overenie blokov. To. Môžete získať províziu za transakcie bez účasti na skutočnom overovaní transakcie a blokovej ťažbe.

Existuje aj množstvo konsenzov, ktoré sa zatiaľ nerozšírili, uvediem ich tu len pre informáciu a prehľad samotných konsenzuálnych algoritmov nájdete napríklad v článku: Konsenzuálne algoritmy v blockchaine.

  • PoET (Dôkaz o uplynutom čase)
  • PoC (doklad o kapacite)
  • PoB (Proof-of-Burn)
  • PoWeight (Dôkaz o hmotnosti)
  • PoA (Proof-of-Activity) – PoW + PoS
  • PoI (Dôkaz o dôležitosti)

Modely spoľahlivosti a nasadenia blockchainov

Verejný blockchain

stabilita Verejnosť alebo iné meno Blockchain bez povolení Dosahuje sa to tým, že sa komukoľvek umožní pripojiť a prezerať si informácie alebo dokonca pripojiť svoj vlastný uzol a dôvera je postavená na konsenze PoW.

Súkromný blockchain

Súkromný alebo Súkromný povolený blockchain. V týchto blockchainoch má prístup k informáciám len určitá skupina účastníkov (organizácie alebo ľudia). Takéto blockchainy vytvárajú organizácie s cieľom zvýšiť celkový prínos alebo efektivitu. Ich spoľahlivosť je zabezpečená spoločnými cieľmi účastníkov a konsenzuálnymi algoritmami PoS a BFT.

Blockchain konzorcium

Tam Konzorcium alebo Verejne povolený blockchain. Ide o blockchainy, ku ktorým sa môže pripojiť ktokoľvek, aby si ich mohol prezerať, ale účastník môže pridať informácie alebo pripojiť svoj uzol iba s povolením ostatných účastníkov. Takéto blockchainy sú budované organizáciami s cieľom zvýšiť dôveru na strane zákazníkov alebo spotrebiteľov produktov alebo spoločnosti ako celku. Spoľahlivosť sa tu dosahuje aj prítomnosťou dôvery medzi účastníkmi a rovnakými konsenzuálnymi algoritmami PoS a BFT.

Inteligentné zmluvy

Blockchainy implementované po Bitcoine do tej či onej miery pridali schopnosť vykonávať inteligentné zmluvy. Inteligentná zmluva je v podstate transakcia, v ktorej je umiestnený programový kód na vykonanie. Inteligentné zmluvy v sieti Ethereum sa vykonávajú v EVM (Virtuálny stroj Ethereum). Na začatie vykonávania smart kontraktu musí byť explicitne spustený inou transakciou alebo musia byť splnené predpoklady na realizáciu. Výsledky realizácie smart kontraktu budú zaznamenané aj v blockchaine. Prijímanie údajov mimo blockchainu je možné, ale veľmi obmedzené.

Akú obchodnú logiku možno implementovať pomocou inteligentnej zmluvy? V skutočnosti toho nie je veľa, napríklad kontrola podmienok pomocou údajov z blockchainu, zmena vlastníkov digitálnych aktív v závislosti od týchto podmienok, zaznamenávanie údajov na trvalé úložisko v rámci blockchainu. Logika je implementovaná v špeciálnom vysokoúrovňovom jazyku Solidity.

Klasickým príkladom funkcionality, ktorá je implementovaná pomocou smart kontraktov, je vydávanie tokenov pre ICO. Napríklad som implementoval inteligentnú zmluvu na vydanie skromných 500 000 000 AlexTokenov. Autor: odkaz v Etherscan je

zdrojový kód smart kontraktu v jazyku 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árnu reprezentáciu, ako ju vidí sieť

60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029

Viac podrobností o smart kontraktoch nájdete v článku: Čo sú inteligentné zmluvy v Ethereu.

Záver

Uviedli sme technológie, na ktorých sú moderné blockchainy postavené a ako sú navzájom prepojené. Teraz si sformulujme, ktoré problémy možno pomocou blockchainu vyriešiť a ktoré riešenia budú prinajlepšom neúčinné. Používanie blockchainu teda nie je potrebné, ak:

  • Transakcie sa vykonávajú v dôveryhodnom prostredí;
  • Prítomnosť komisie sprostredkovateľov nezhoršuje život účastníkov;
  • Účastníci nemajú majetok, ktorý by bolo možné reprezentovať ako digitálny majetok;
  • V digitálnych aktívach neexistuje žiadna distribúcia, t.j. hodnotu vlastní alebo dodáva iba jeden účastník.

Aká je budúcnosť blockchainu? Teraz môžeme len špekulovať o možných spôsoboch rozvoja blockchainových technológií:

  • Blockchain sa stane rovnakou bežnou databázovou technológiou ako napríklad SQL alebo NoSQL na riešenie jeho špecifického rozsahu problémov;
  • Blockchain sa stane rozšíreným protokolom, ako je HTTP pre internet;
  • Blockchain sa stane základom pre nový finančný a politický systém na planéte!

V ďalšej časti sa pozrieme na to, aké blockchainy v súčasnosti existujú a prečo sa využívajú v rôznych odvetviach.

Toto je len začiatok!

Zdroj: hab.com

Pridať komentár