Bitcoin pod lupou, časť 1/2

Bloky, verifikácia transakcií

Už v úvode odznelo, že systém Bitcoin je decentralizovaný a teda nemá žiadnu centrálnu autoritu, ktorá by transakcie spravovala. Namiesto toho, systém je distribuovaný medzi množstvo uzlov a tie dokážu spravovať transakcie bez nejakého centrálneho bodu.

V rámci rekapitulácie - transakcia v skratke obsahuje hash predošlej transakcie, digitálny podpis od odosielateľa a jeho verejný kľúč, finančný obnos, adresu prijímateľa a overovací skript.

Bitcoin sieť tvoria okrem účastníkov transakcií taktiež uzly (nodes). Tie sa obvykle na vytváraní transakcií nepodieľajú, ale ich úlohou je práve udržovať konzistenciu transakcií - vytvárajú tzv bloky, ktoré sú zoskupované do veľkej reťaze blokov (block chain). Táto reťaz tvorí históriu všetkých transakcií, ktoré v systéme nastali. Každý jeden uzol musí mať kópiu block chain, aby na základe histórie vedel, či nová transakcia, ktorú odchytil, je platná alebo nie (či sedia podpisy, alebo napr. či sa nejedná o tzv. double spending (dvojité utrácanie - keď sa potenciálny defraudant snaží použiť prostriedky 2x). Veľkosť tejto reťaze pochopiteľne stále rastie, v súčasnej dobe má, k 1.5.2013, 6864MB, teda rastie o necelé 2GB každým rokom (cca 2-3MB za deň). Pokiaľ uzol pozbiera určité množstvo transakcií, ktoré ešte pred ním nikto nepridal do bloku, môže sa pokúsiť z nich takýto blok zostaviť. Formát bloku je nasledujúci:

  • identifikátor začiatku bloku, vždy 0xD9B4BEF9
  • veľkosť bloku v bajtoch
  • hlavička:
    • verzia bloku
    • hash predchádzajúceho bloku
    • hash všetkých transakcií v bloku (koreň hashovacieho stromu, tzv. Merkle tree)
    • časové razítko (štandardné, teda počet sekúnd od 1.1.1970)
    • tzv. target, cieľ zložitosti
    • nonce (32-bitové číslo), tzv. kryptografická soľ
  • počet transakcií v bloku
  • samotný zoznam transakcií (formát popísaný v predchádzajúcej kapitole)

Vytvoriť obyčajný hash zo všetkých transakcií by bola normálne primitívna a rýchla operácia, čo by však potenciálne predstavovalo bezpečnostnú hrozbu - pokiaľ by bolo jednoduché blok vygenerovať, bolo by možné veľmi jednoduché spamovať po sieti bloky, čím by vznikal chaos. Potenciálne by to mohlo viesť k útokom na sieť s cieľom pripojiť neplatné transakcie do systému. Preto je implementovaný tzv. systém proof-of-work (voľne preložení ako "dôkaz o vykonanej práci"), inšpirovaný systémom HashCash, ktorý napr. zabraňuje spamovaniu. V princípe sa jedná o to poslať správu tak, aby obsahovala nejakú extra informáciu, ktorej pravdivosť je veľmi jednoduché overiť, ale výpočetne náročné spočítať - obvykle to nie je možné dosiahnuť algoritmicky, ale práve hrubou výpočetou silou. Práve spočítanie tejto informácie je dôkaz, že spáva je vierohodná a nebude zahodená.

V systéme Bitcoin ide, v rámci pricípu proof-of-work, o to nájsť taký 256-bitový SHA256 hash bloku transakcií (konkrétne dvojitý hash), ktorý bude čo do hodnoty menší ako tzv. súčasný target daný zložitosťou. Presne definované - nájdi také náhodné 32-bitové číslo nonce, ktoré po pridaní do transakcie spolu s aktuálnym časovým razítkom spôsobí, že po dvojitom zhashovaní dostaneme číslo (hash), ktoré bude menšie, ako aktuálny cieľ zložitosti - teda obsahuje, pokiaľ uvažujeme little-endian zobrazenie, viac núl zľava, ako je cieľ zložitosti (target). Cieľ sa postupne znižuje, čím zložitosť rastie (zložitosť rastie logaritmicky). Táto úloha nie je algoritmicky riešiteľná a k výsledku je možné sa dopátrať jedine hrubou silou náhodným skúšaním (resp. na algoritmický spôsob sa doteraz neprišlo, nie je teda možné predikovať výsledok hashu resp. výsledok dvojitého hashu transakcie), na druhej strane, overiť riešenie je veľmi jednoduché - spočíta sa dvojitý SHA256 hash bloku a overí sa tým, ktorý je uvedený.

Práve vďaka tomu mechanizmu je v celej sieti uzlov vygenerovaný jeden blok raz za približne 5-10 minút a nedochádza tak k spamovaniu blokov po sieti, nakoľko každý uzol vie veľmi rýchlo spočítať, či nový blok v sieti je platný alebo nie. Aby bola táto doba udržovaná, je zložitosť korigovaná a sa mení v priemere každých 2016 blokov (približne každé 2 týždne). Pokiaľ je však zložitosť nastavená príliš vysoko, môže byť pre ďalší blok zložitosť zlížená (teda target nebude znížený o predpokladanú hodnotu, ale o menšiu) a naopak. V dobe písania článku je aktuálny odhadovaný výkon celej siete približne 70TH/s (Tera hashov za sekundu, teda 7*1013 hashov za sekundu), hľadanie bloku je naozaj lotéria.

Transakcia je označená za platnú až vtedy, keď je do block chain pridaných ešte niekoľko ďalších blokov, obvykle 6. Teda trvá približne hodinu, kým je transakcia označená ako potvrdená. Niektoré inštitúcie však môžu vyžadovať viacero potvrdení o transakcii, čo je možné veľmi jednoducho odsledovať.

Aby však uzlom stálo za to hľadať takto špecifikovaný hash, je za vytvorenie bloku odmena, ktorú si pripíše majiteľ uzlu na svoj účet. Vtedy do bloku pridá špeciálnu transakciu s adresou, na ktorú sa mu odmena pripíše. Je to zároveň jediný spôsob, ako sa v celom systéme vytvárajú peniaze. Celé sa to podobá ťažbe zlata - človek musí vykonať nejakú prácu na to, aby ho našiel. A keďže to, čo nájde, má nejakú hodnotu (= je po tom dopyt a ľudia to chcú), môže to so ziskom predať. Preto sa procesu hľadania bloku príznačne hovorí dolovanie, resp. mining, ktorému bude venovený druhý diel článku.

Ďalší spôsob, ako sa uzol (miner) môže dostať k odmene, je transakčný poplatok. Pokiaľ v rámci jednej alebo viacerých transakcií existuje stav, kedy je množstvo BTC na vstupe väčšie ako na výstupe, tento rozdiel pripadá práve majiteľovi uzlu, ktorý spočítal blok s danou transakciou.

Komentáre (1)
Petr
Obchodujete někdo i pomocí BTC binární opce? Já jsem nedávno našel stránku http://bitplutos.com , kde se dají obchodovat zcela anonymně, tak se chci zeptat, jestli tu má někdo s touto stránkou zkušenosti. Moc se mi líbí jejich platforma, tak asi vyzkouším pár obchodu :). Kdyby je někdo měl, tak mi napište prosím na petr88@email.cz
Pridať nový komentár
TOPlist