Blockchain

**Blockchain** je v informatike špeciálny druh distribuovanej decentralizovanej databázy uchovávajúcej neustále sa rozširujúci počet záznamov, ktoré sú chránené proti neoprávnenému zásahu tak z vonkajšej strany, ako aj zo strany samotných uzlov peer-to-peer siete. Najčastejšou aplikáciou technológie *blockchainu* je použitie ako účtovná kniha kryptomien (napr. bitcoinu), ktorá uchováva transakcie vykonané užívateľmi. Kombinácia s kryptografiou umožňuje zaistiť atomicitu operácií a zabrániť neoprávneným transakciám.

## Hlavné výhody
Medzi hlavné výhody blockchainu patrí:
* Schopnosť veľkého počtu *uzlov* dospieť k jednému konsenzu ohľadom najaktuálnejšieho stavu veľkého množstva dát, napríklad záznamov v účtovnej knihe. To platí aj v prípade, keď sú jednotlivé *uzly* anonymné, pripojené cez nespoľahlivé spojenie jeden k druhému, či vedené podvodníkmi, ktorí sa snažia transakcie upravovať vo svoj prospech.
* Schopnosť ktoréhokoľvek *uzla* rozhodnúť sa s prijateľnou mierou istoty, že zadaná *transakcia* do *blockchainu* spadá alebo nie.
* Schopnosť ľubovoľného *uzla*, ktorý vytvoril či prijíma *transakciu*, po nejakej dobe rozhodnúť s uchádzajúcou mierou istoty, či je *transakcia* validná a začleniteľná do blockchainu natrvalo a či nedošlo ku kolízii dvoch *transakcií*. To je dôležité k riešeniu problému *double-spendigu* (*dvojutrácania*).
* Dostatočne veľká prekážka, ktorá bráni útočníkom v úpravách či prepísaniu *transakcií*.
* Automatická forma riešenia konfliktných *transakcií*, ktorá zaisťuje, že nevalidná *transakcia* (napríklad snaha minúť sumu na účte viackrát) sa nikdy nestanú súčasťou potvrdeného datasetu.

## Základný princíp
Implementácia *blockchainu* pozostáva z dvoch druhov záznamov: *transakcií* a *blokov*. *Transakcie* predstavujú dáta vložené do databázy užívateľovi, *bloky* potom záznamy potvrdzujúce, kedy a ako bola konkrétna transakcia pridaná do databázy blockchainu. *Transakcie* sú vytvárané užívateľmi, ktorí systém používajú ako databázu (v prípade *kryptomeny* ako účtovnú knihu). *Bloky* oproti tomu vytvárajú *ťažiari*, ktorí používajú softvér či hardvér vytvorený špecificky na vytváranie *blokov*.

*Transakcie* vytvorené užívateľmi sú voľne odovzdávané od *uzla* k *uzlu* podľa toho, kto má práve s kým naviazané spojenie. Definícia validnej *transakcie* sa líši v závislosti na štandarde, ktorý implementuje väčšina *uzlov* v sieti. V prípade väčšiny *kryptomien* je za validnú *transakciu* väčšinou považovaná taká, ktorá má správny elektronický podpis užívateľa, míňa peniaze z existujúcej peňaženky, ku ktorej užívateľ podpisom preukazuje vlastníctvo, a zároveň spĺňa niekoľko ďalších podmienok, ako napríklad patričný *honorár* (fee) pre *ťažiara* alebo uplynutie dostatočnej doby od chvíle, kedy bola zadaná posledná transakcie s týmto kusom meny.

*Ťažobné spoločnosti* sa potom snažia vytvoriť *blok*, ktorý potvrdzuje a začleňuje tieto *transakcie* do *blockchainu*. V *kryptomenách* založených na Bitcoine sú *ťažiari* motivovaní k *ťaženiu* dvomi druhmi odmien: preddefinovanou odmenou za vyťažený *blok* a transakčnými poplatkami či honorármi (fee), ktoré sú vyplatené ktorémukoľvek *ťažiarovi*, ktorý správne potvrdí *transakciu*.

## Decentralizácia
Každý *uzol* v sieti decentralizovanej *kryptomeny* obsahuje kompletnú či čiastočnú kópiu *blockchainu*. Tým je vyriešený problém centralizovanej databázy, ktorú používajú ostatné technológie, ako napríklad bankovníctvo alebo PayPal. Kým bežná účtovná kniha iba pasívne zaznamenáva presuny peňazí, bankových poukážok či príkazov na úhradu, ktoré existujú nezávisle na tejto knihe, v prípade *kryptomeny* sú jednotky meny a *blockchain* pevne spojené. *Blockchain* možno v týchto prípadoch považovať za jediné miesto, kde jednotky *kryptomeny* existujú vo forme neutrateného súčtu všetkých *transakcií*.

*Transakcie* vo forme záznamov *platca X posiela Y jednotiek meny príjemcovi Z* sú propagované celou sieťou použitím softvérových prostriedkov a asymetrickej kryptografie. Ktorýkoľvek *uzol* siete je schopný túto *transakciu* overiť, pridať do kópie svojej účtovnej knihy a preposlať tieto prírastky ostatným *uzlom*.

## Riešenie problému viacnásobného míňania
V decentralizovaných distribuovaných databázach vzniká nový druh problému, ktorý je v prípade klasických (centralizovaných) databáz riešený atomicitou systémových operácií. Ide o takzvaný *double spending* problém, slovensky tiež problém *dvojutrácania*, *viacutrácania* alebo *problém viacnásobného míňania*. Tento problém bránil prakticky do vzniku bitcoinu vytvoreniu distribuovaných databáz.

Problém vzniká, ak dva alebo viac *uzlov* v topologicky vzdialených bodoch siete v rovnaký okamih zadajú *transakciu* prikazujúcu presun peňazí z rovnakého účtu tak, že vo výslednej sume je presúvaná suma väčšia ako zostatok. Stav, kedy by po určitom čase došlo k propagácii všetkých zadaných *transakcií*, by viedol k nejednotnosti zostatkov na účtoch. Tie by sa tak mohli dostať do mínusu, čo by v konečnom dôsledku viedlo k strate dôvery v sieť a jej zánik.

Rôzne *kryptomeny* sa s týmto problémom vyrovnávajú rôznymi spôsobmi, najčastejšie použitím systémov decentralizovaných časových pečiatok a hlasovanie o poradí *transakcií* založených na algoritmoch proof of work (hlasovanie na základe preukázaného vlastníctva výpočtového výkonu) či proof of stake (hlasovanie na základe preukázania vlastníctva podielu *kryptomeny*).

V oboch prípadoch môže dôjsť k takzvanému 51% útoku, kedy vlastník viac ako 51% *kryptomeny* alebo výpočtového výkonu získava možnosť falšovať či upravovať *transakcie*. Väčšina implementácií *kryptomeny* tak obsahuje ešte ďalšie, dodatočné poistky, ktoré majú viesť k diverzifikácii siete *ťažiarov* (memory hard hashovacie algoritmy), aby týmto útokom bolo možné predchádzať.

## Block time
Pojem *block time* predstavuje parameter udávajúci dobu medzi dvoma vydanými *blokmi*. Väčšina *kryptomien* používa *block time* v rade desiatok minút (10 minút v prípade *bitcoinu*), poslednou dobou sa ale objavujú nové systémy, ktoré túto dobu znižujú na rádovo desiatky sekúnd. Príkladom takéhoto systému je napr. Ethereum, ktoré sa pohybuje medzi 10-20 sekundami.

Hodnota *block time* hrá dôležitú úlohu pri overovaní validity transakcií, pretože väčšina systémov považuje transakciu kvôli *problému viacnásobného míňania* za validnú až po niekoľkých ďalších blokoch (v prípade bitcoinu ich je šesť), do ktorých je transakcia začlenená.

Vo všeobecnosti sa teda dá povedať, že čím kratší čas medzi vydaním dvoch blokov, tým rýchlejšie môžu prebiehať dôveryhodné obchodné transakcie.

## Implementácia
* Bitcoin - Pôvodná kryptomena
* Namecoin - Pridáva schopnosť uchovávať v transakciách ľubovoľné dáta
* Peercoin - Hlasovací algoritmus Proof of work zmenený na Proof of stake
* Ethereum - Turingovsky kompletný chytrý kontrakt, 12-sekundový block time

## Externé odkazy
* Hľadá sa preklad slova "blockchain".
* Blockchain svým potenciálem přesahuje svět kryptoměn. U bank ale může narazit, říká expert 
* Čo je to blockchain?  - článok vysvetľujúci čo je blockchain a ako funguje. 
*Blockchain Slovakia - Občianske združenie venujúce sa osvete a vzdelávaniu v oblasti kryptomien a blockchainu.

## Zdroj

Kategória:Kryptomeny
Kategória:Databázy
Kategória:Financie
Kategória:Blockchain