Jan 2014

Vysvetlenie Bitcoinu

Bitcoin je decentralizovaná anonymná kryptografická peer-to-peer virtuálna mena, prvýkrát popísaná v článku z roku 2008, ktorého autor/autori vystupujú pod pesudonymom Satoshi Nakamoto. V tomto článku sú popísané základné, skôr technické vlastnosti systému, nič sa v ňom nehovorí o napr. množstve obeživa. Článok je k dispozícii TU.

bitcoin_logo

Systém začal fungovať v januári 2009, kedy bola tiež uverejnená prvá verzia klientského programu Bitcoin-qt. Neexistuje tu centrálna autorita, čo jej dodáva stabilitu; nezasahuje do nej žiadna vláda, nie je možné ju falšovať, devalvovať či zabavovať účty. Nie je možné revertovať transakcie. Neexistuje tu inflácia, nakoľko Bitcoin je mena deflačná (objem peňazí v systéme je konečný). Poplatky za prevod sú nulové, pokiaľ chcete transakciu urýchliť, tak si môžte "priplatiť". A navyše rastie počet inštitúcií, ktoré túto menu akceptujú.
Systém Bitcoinu pozostáva z účastníkov, ktorí majú každý svoju adresu, prípadne niekoľko adries. Účastník môže vytvoriť transakciu, ktorú rozošle uzlom siete. Úlohou uzlov je skladať transakcie do blokov, ktoré sa zostavujú do jednej veľkej reťaze blokov, predstavujúcej kompletnú históriu transakcií, ktorá je distribuovaná. O každej časti systému si bližšie povieme v nasledujúcich kapitolách.

Celkovo bude v systéme vytvorených 21 milónov Bitcoins. Vedľajšou jednotkou Bitcoin je Satoshi, pomenovanej podľa pseudonymu autora systému. Pri vzniku Bitcoin bola hodnota 1BTC okolo 1 centu, dnes je to okolo 108USD. Na grafe môžte vidieť, ako sa vyvíjal kurz BTC voči doláru za posledné 2 roky. Za povšimnutie stojí vystrelenie hodnoty Bitcoin v apríli 2013 na vyše 220USD, polroka sa držal okolo hranice 110USD za 1BTC a v novembri 2013 prudko vystrelil a presiahol hodnotu 1000 USD za 1 Bitcoin.

bitcoin-graf-2013

Adresa, Transakcie

Adresa v sieti Bitcoin


Aby bolo možné prijímať a odosielať platby, musí mať každý účasník nejaký identifikátor svojho konta. Je to systém postavený na asymetrickej kryptografii, každý účasník disponuje privátnym kľúčom a z neho spočítaným verejným kľúčom, z ktorého sa vypočíta adresa. V rámci Bitcoin klienta máte tzv. peňaženku, v ktorej si môžte viesť viacero adries.   Pre tých, ktorí nevedia ako funguje asymetrická kryptorafia, odporúčam aspoň článok na
wikipédii. V skratke - algoritmicky je vygenerovaný privátny a verejný kľúč. Správa podpísaná privátnym kľúčom sa dá overiť iba verejným kľúčom. Verejný kľúč je známy, aby mohol byť overený autor správy, privátny kľúč musí ostať utajený, v opačnom prípade dôjde k strate identity. Je výpočetne veľmi náročné (faktorizácia na prvočísla, eliptické krivky,...) získať z verejného kľúča kľúč privátny. Základom je algoritmus ECDSA, pomocou ktorého je vygenerovaný privátny kľúč o dĺžke 256 bitov. Privátny kľúč je veľmi dôležitý - práve naň sú totiž naviazané všetky platby a voči nemu je držaný zostatok!
Samotná Bitcoin adresa, na ktorú je možné prijímať platby alebo z nej platby odosielať, je generovaná práve z verejného kľúča (a ten je generovaný z privátneho kľúča). Postup je nasledovný:
  • máme 256-bitový privátny kľúč vygenerovaný algoritmom ECDSA z eliptickej krivky Secp256k1 podľa štandardu SEC2 (viac TU).
  • vygenerujeme 520-bitový nekomprimovaný verejný kľúč PubK
  • nad verejným kľúčom spočítame SHA256 hash, výstup - 256-bit číslo S = SHA256(PubK)
  • S prebehneme hashovacou funkcoiu RIPEMD-160, výstupom je 160-bitové číslo R = RIPEMD(S)
  • pred R pridaj číslo verzie, v súčasnosti 0x00, výstup má 168 bitov E = "0x00"+R, kde "+" značí bitovú konkatenáciu
  • spočítaj SHA256 nad E, nad výsledkom znova SHA256, výstup 256-bit D = SHA256(SHA256(E))
  • Z čísla D zober prvých 32 bitov, ktoré predstavujú kontrolný súčet adresy, označ ako C
  • Adresa vznikne spojením E+C (+ je opäť konkatenácia), čím dostávame 200-bitovú Bitcoin adresu.
  • Aby bola lepšie čitateľná, používa sa prevod čísla do formátu base58 (obdoba base64, ale bez znakov l,I,O,0 - malé L a veľké I, nula a veľké O; nakoľko sa podobajú)               
Prefix 0x00, ktorý sme pridali v kroku 5, má v kódovaní base58 špeciálny index 1, preto každá Bitcoin adresa začína týmto číslom. Sieť môže mať najviac 2160 adries, teda približne 1048 účastníkov (limitom je 160-bit RIPEMD hash). Typický príklad adresy je napr.

162ofeqVgtq9egFFF26UUpzJKfCAkiHvrk

Adresu si môže vygenerovať kto chce, nepotrebujete dokonca ani pripojenie k internetu alebo niekam zadávať osobné údaje, obvykle to za Vás obstará klientský program alebo webová služba. Z tohto pohľadu poskytuje Bitcoin anonymitu pri platení (internet treba až pri použití adresy). Navyše môžte používať toľko adries, koľko sa Vám zapáči. Rozsah adries je tak veľký, že je teoreticky nepravdepodobné (ehm, nikdy nehovor nikdy), aby v systéme existovala kolízia, resp. aby dvaja ľudia vygenerovali či už rovnaký privátny kľúč a rovnakú adresu, alebo rovnakú adresu z rôzneho privátneho kľúča. Až do doby, kým niekto nezlomí SHA256 alebo RIPEMD-160...
Aby sa adresa nemusela ručne komplikovane vpisovať do peňaženky pri transakcii, používajú užívatelia tzv. QR kódy. Typický prepis spomenutej adresy v peňaženke do QR kódu je takýto:

qrcode_btc

Transakcie v sieti Bitcoin


Teraz sa bližšie pozrieme na to, ako je celý systém Bitcoin postavený. Máme nejakú svoju adresu, resp. máme privátny kľúč a k nemu prislúchajúci verejný kľúč, alias Bitcoin adriesu. A tú by sme radi použili pri platení, resp. pri získavaní platieb.

Transakcia medzi dvoma adresami je, z technického hľadiska, správa pre Bitcoin sieť obsahujúca vstupy a výstupy - okrem adries, obnosov peňazí taktiež digitálne podpisy, a to nielen podpis od odosielajúcej strany, ale aj z predchádzajúcej transakcie, z ktorej Bitcoiny pochádzajú.

transakcie-640x380
(jednoduchý sled transakcií, resp. presun meny)

Pokiaľ by som od Majiteľa1 obdržal 1BTC nejakou potvrdenou transakciou a chcel by som túto 1BTC poslať Majiteľovi3 (t.j. vytvárame tretiu transakciu ako na obrázku hore), musím do novej transakcie uviesť ako vstup hash z druhej transakcie, podpísať túto novú transakciu svojím privátnym kľúčom (my = Majiteľ2) a priložiť svoj verejný kľúč pre overenie. Na výstupe sa objaví hodnota 1BTC ako počet Satoshi - najmenšia jednotka BTC, ktorá predstavuje 1/108 BTC (jednu stomilióntinu BTC) - teda uvediem číslo 100000000, časové razítko a samozrejme adresa (= hash verejného kľúča) prijímateľa Majiteľ3.

skladanie_transakcii-640x531
(skladanie viacerých transakcií)

Vznikal by tu ale problém - ak mám 1BTC a chcem poslať napr. len 0.5BTC? Práve preto môže mať transakcia nielen viacero vstupov (skombinovanie prijatých peňazí z niekoľkých iných transakcií), ale aj viacero výstupov. A práve cez výstupy sa rieši napr. to, ako poslať niekomu 0.5BTC pokiaľ mám evidovaú napr. len jedinú transakciu s prijmom 1BTC. Taká transakcia bude mať 2 výstupy - 0.5BTC nasmerujem recipentovi, a zvyšok pošlem sám sebe. To taktiež zamädzuje odoslať z účtu viac, ako sám vlastním - nemôžem odoslať peniaze, ktoré som nikdy neprijal. Pokiaľ by hodnota peňazí na vstupe bola väčšia ako na výstupe, je tento rozdiel považovaný za transakčný poplatok. O tom však v kapitolách venovaných blokom a dolovaniu.

transakcia_schema-640x445
(transakcia v detaile)

Transakcia tiež obsahuje špeciálny skript (rozdelený na 2 časti - pre vstupy a výstupy) napísaný v zásobníkovom skriptovacom jazyku vytvoreného špeciálne pre Bitcoin. Ako implicitný vstup do prvej časti tohto skriptu je verejný kľúč (nie adresa, adresa je hash verejného kľúča) odosielateľa a digitálne podpísaný hash transakcie od odosielateľa (tiež slúži k zisteniu, či nebolo s transakciou manipulované). V prvej vstupnej časti sa digitálny podpis odosielateľa overí jeho verejným kľúčom. Vo výstupnej časti sa pomocou preddefinovanej sady príkazov udáva postup, ako overiť transakciu, teda v podstate "postup" pre získanie peňazí príjemcom, resp. jeho overenie. Obvykle je prijímateľ overený tak, že na vstup skriptu ide jeho podpis transakcie (teda privátnym kľúčom prijímateľa) a verejný kľúč. V skripte sa najprv overí adresa, ktorá vznikne hashom verejného kľúča. Potom sa verejným kľúčom overí digitálny podpis transakcie prijímateľa, čím potvrdí, že je určená jemu.
Teoreticky je možné uviesť taký skript, ktorý povedie k úmyselne neplatnej transakcii, alebo že transkakcia vôbec nevyžaduje overenie. Na druhej strane, je možné vytvoriť transakciu tak, že bude platná len ak bude pospísaná viacerými kľúčami. Existuje dokonca možnosť požadovať heslo pri prijatí transakcie. Množstvo príkazov v jazyku je pomerne veľké, pre detailnejšie informácie viď
TU. Vďaka tomu, že do transakcie môžu vstupovať len také vstupy, ktoré už sami boli výstupom nejakej inej transakcie, nie je možné v systéme náhodne generovať peniaze, nakoľko pôvod všetkých peňazí je vystopovateľný (viac pri blokoch). Transkakcia je odoslaná nezašifrovane (žiadna správa v rámci Bitcoin protokolu nie je šifrovaná, ale len podpísaná) a to do celej Bitcoin siete, takže síce adresy sú anonymné, pohyb peňazí anonymný nie je - všetci vedia všetko. Pokiaľ by človek používal len jednu jedinú adresu a niekomu by sa podarilo zistiť, že je to práve vaša adresa, je možné sa celkom ľahko dohľadať k Vášmu zostatku. Preto sa obvykle používa viac adries v rámci jednej peňaženky, čím sa tento problém dá eliminovať.

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*10
13 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 venovaný ďaľší článok. Ď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.

Bitcoin klienti

Existuje množstvo programov a webových služieb, pomocou ktorých si môžete založiť Bitcoin adresu/adresy, letmo sa pozrieme na niektoré z nich.

Bitcoin-qt


Referenčný program, v počiatku napísaný samotným autorom Bitcoinu, v súčasnej dobe je na jeho čele Wladimir J. van der Laan. Je napísaný v multiplatformnom rozhraní QT a funguje pod Windowsom, Linuxom aj MacOS. Dostupný je TU, dokonca v slovenčine.

bitcoin-qt-640x430
(synchronizovaný Bitcoin-qt klient)

Po prvom spustení Vám automaticky vegeneruje jednu Bitcoin adresu pre príjem platieb.Program však musí stiahnuť celú block chain, ktorú pod Windows ukladá do priečinka %APPDATA%\Bitcoin\, pričom v závislosti na rýchlosti pripojenia a výkonu PC trvá stiahnutie a spracovanie reťaze blkov niekoľko hodín až dní (z vlastného pozorovania okolo 2-5 dní podľa výkonu počítača). Taktiež štart programu je pomerne dlhý, najmä pokiaľ ste ho nepúšťali hoci aj pár dní, musí sa totiž aktualizovať.
Poskytuje základnú prácu s Bitcoin - disponujete jednou peňaženkou, v rámci ktorej si môžte evidovať viacero adries. Peňaženku tvorí fyzicky súbor wallet.dat (umiestnený taktiež v %APPDATA%\Bitcoin\), kde sú uložené všetky údaje, a to vrátane privátnych kľúčov k adresám, preto sa odporúča tento súbor zašifrovať (dokáže samotný program). V prípade, že chcete používať jednu peňaženku na viacerých PC, skopírujete súbor wallet.dat a nakopírujete do druhého počítača, napr. v práci. Tento súbor Vám umožnuje dostať sa k svojím peniazom, v prípade straty alebo náhodného zmazania (ak nemáte zálohu) prídete o všetky BTC!

bitcoin-qt_send-640x430

Transakciu vytvoríte veľmi rýchlo - vložíte adresu, sumu a prípadný popis, peniaze sa hneď odošlú. Do polhodiny by mala byť transakcia potvrdená.

MultiBit


Ťažkopádnosť Bitcoin-qt dala implulz pre vznik alternatívnych klientov. Jedným z nich je napr. MultiBit, napísaný v Jave. Jedná sa o flexibilnejší program než Bitcoin-qt, nakoľko nesťahuje celú block chain. Má taktiež podporu pre viacero peňaženiek, mal by poskytovať aktuálny výmený kurz BTC na burzách MTtGox a VirtEx, avšak táto funkcia pri testovaní nefungovala. Príjemným prekvapením bola aj podpora slovenčiny.

multibit-640x412

Ďalšou vychytávkou v Multibite je podpora QR-kódov - platiť môžete napr. tak, že na stránke chytíte obrázok s QR kódom a pretiahnete ho do okna programu, kde sa z neho automaticky prečíta adresa a požadovaná suma k zaplateniu.


multibit - transakcie-640x412

Migrovať medzi klientami sa dá. V podstate potrebujete exportovať Váš privátny kľúč a ten potom naimportovať do nového programu, spolu s približným dátumom, kedy bol vytvorený. Nakoľko každému privátnemu kľúču odpovedá vždy jeden verejný kľúč, vygeneruje sa Vám potom vaša pôvodná adresa. A z blockchain sa zase získa Váš aktuálny zostatok, pričom pre zjednodušenie prehľadávania sa bude reťaz prechádzať len približne od dátumu, ktorý ste uviedli ako vznik kľúča, a nie celá. Presný postup pre MultiBit nájdete napr. TU.

Electrum


Ďalší ľahký klient je napr. Electrum, ktorý si tiež nesťahuje celú blockchain, tú držia spriaznené servery, od ktorých získava potrebné informácie. Sami sa môžte stať jedným zo serverov Electrum a poskytovať blockchain ostatným. Program beží na Windowse, Linuxe aj Mac OSX.

electrum-640x353

Po stiahnutí sa Vám vygeneruje peňaženka prostredníctvom generujúceho reťazca, ktorý si môžete uližiť pre prípad zálohy. Zároveň Vám program vygeneruje QR kód pre jednoduchší import privátneho kľúča. Následne si vyberiete Electrum server, z ktorých chcete získavať informácie z block chain, a program je pripravený k použitiu.

Weboví klienti


Ďalším druhom sú weboví klienti. Obvykle nemusíte nič sťahovať do počítača, o správu vášho konta sa stará zvolená webová služba a tak máte svoje konto k dispozícii kdekoľvek. Na druhej strane, stránka musí poskytovať dostatočne kvalitné zabezpečenie proti zneužitiu v prípade, že by boli servery tejto služby napadnuté. Delia sa na 2 skupiny - u jednej sú všetky vaše údaje, vrátane privátneho kľúča, uložené na strane služby. Druhou skupinou sú tzv hybridné služby - privátny kľúč máte vy, stránke má len jeho hash a na získanie privátneho kľúča potrebuje Vaše heslo. Hybridné vznikli práve po tom, čo bolo niekoľko internetových stránok so správou Bitcoin účtov hacknutých.

strongcoin-640x517
(peňaženka vytvorená na webe Strongcoin)


Niektoré stránky poskytujúce Bitcoin online peňaženku:
-
https://www.strongcoin.com/ - https://blockchain.info/wallet/ - https://coinbase.com/ - https://bips.me/

Ťaženie - mining Bitcoinu


Ťažíme mince - potrebný hardware


Vyššie sme si priblížili fungovanie systému Bitcoin z pohľadu bežného užívateľa, ktorý by si chcel vygenerovať adresu a z nej prijímať/odosielať platby. Taktiež odznelo, že jediný spôsob, ako sa v systéme generujú peniaze, je prostredníctvom dolovania v uzloch. Tie skladajú transakcie do blokov hľadaním hashu bloku s určitými kritériami, za čo v prípade nájdenia dosta
ú odmenu.
Bitcoin je mena deflačná - je presne daný počet BTC, ktorý bude kedy v systéme cirkulovať. Ten bol tvorcami stanovený na 21 miliónov BTC, ktoré sú "dolovačmi" postupne uvoľňované do systému. Odmena pre nájdenie bloku však nie je konštanná - po vydolovaní polovice zostávajúceho počtu BTC sa aj odmena zníži o polovicu (teda presne po vydolovaní 210 000 blokov). Na počiatku (2009) bola odmena za získanie bloku 50BTC, v novembri 2012, kedy došlo k vydolovaniu 10 500 000 BTC, bola táto odmena znížená na súčasných 25BTC. Tento stav pravdepodobne potrvá 4 roky, kým nedôjde opäť k zníženiu odmeny na 12.5BTC za blok, atď. Takýchto iterácií, kedy by došlo k zníženiu odmeny, je podľa odhadov 34, pričom každá trvá približne 4 roky. Teda posledný BTC bude vyťažený niekedy v roku 2140, samozrejme za predpokladu, že systém dovtedy prežije. A prečo sa oplatí zaoberať sa ťažbou BTC? Hodnota 1BTC bola k 18.5.2013, 122USD, resp. 93€, a k 11.1.2014 už je 730 € !, čo nie je málo. Navyše spočítaním bloku ich získate hneď 25, čo dnes je 18.250,- €!

Ako na to?


Chcem byť miner! Chcem zarobiť strašné peniaze! Nie je však všetko zlato, čo sa blyští. Minerov je v súčasnej dobe veľa a vypočetný výkon siete takisto veľký, takže šanca, že by ste len tak sami spočítali blok, je veľmi nízka. Pokiaľ by ste si chceli zarobiť ťažením BTC, môžte skúšať šťastie sám, čo však silne neodporúčam. Lepšie je pridať sa do nejakého mining pool, kde počítate kolektívne - a odmena sa rozdeľuje medzi všetkých podľa zásluh. Čo však k tomu treba? Existujú v podstate 4 spôsoby, resp. 4 druhy "železa", na ktorom môžete počitať - využiť procesor, grafickú kartu, FPGA (programovateľné hradlové pole) alebo ASIC (Application-Specific Integrated Circuit, špecializovaný obvod/čip). Ich výkon sa obvykle meria v MH/s (mega hashov za sekundu).

Procesor


Na nich sa pred rokmi začínalo, no v súčasnosti je to najhoršia možnosť, nakoľko reálny zárobok je skoro nulový. Na to by ste museli mať jeden z najvýkonnejších modelov, pričom za ich cenu sa radšej oplatí kúpiť grafickú kartu, ktorá podáva výkon ďaleko vyšší. Parametre niektorých procesorov v tabuľke, údaje prebraté zo stránky projektu alebo diskusných fór. Výkon tiež závisí na použitom programe a jeho stupni optimalizácie a nastavení. Snažil som sa uviesť výkon na továrenskej frekvencii.
Intel


Model

Výkon (MH/s)

Atom Z520

1.2

Core 2 Extreme X9000

7.2

Core 2 Duo E8400

7.0

Core 2 Duo T9400

4.2

Core 2 Quad Q8200

10.9

Core i7 980X

19.2

Core i5 650

5.1

Core i5 2400

14.0

4x Xeon E7450

60

AMD




Model

Výkon (MH/s)

Turion X2 RM-70

1.9

Athlon64 X2 6000+

2.8

Phenom II X4 810

11.0

Phenom II X6 1150

15.8

2x Opteron 6128

32.4

4x Opteron 6174

115





O ARM či PowerPC sa nemá význam baviť, ich výkon zväčša nedosahuje ani 1MH/s, okrem Cellu, ktorý podáva výkon asi 26MH/s. Taktiež tabuľka je do istej miery nekonzistentná, vzhľadom na plejádu použitých programov a ich rôznom nastavení. K výsledkom novších procesorov, najmä od AMD, som sa nemohol dopracovať, nakoľko sa v súčasnej dobe na mining nepoužívajú, práve kvôli nízkemu výkonu oproti grafickým kartám. V priemere však počítajte do 20MH/s s novým multi-core CPU.

Grafické karty, FPGA, ASIC


Tu to začína byť omnoho zaujímavejšie, a pravdepodobne riešenie pre väčšinu minerov. Grafické karty poskytujú niekoľkonásobne vyšší výkon než procesory.
nVidia


Model

Výkon (MH/s)

8800GT

25

9800GTX

32

GTX 285

53

GTS 450

45

GTX 480

100

GTX 560 Ti

67

GTX 570

98

GTX 580

156

GTX 590

193

GTX 670

112

GTX 680

120

GTX Titan

340

 
AMD

HD 4850

75

HD 4870

90

HD 5570

73

HD 5750

116

HD 5770

156

HD 5850

250

HD 5870

340

HD 6750

170

HD 6850

250

HD 6870

300

HD 6970

385

HD 6990

740

HD 7770

190

HD 7850

300

HD 7870

400

HD 7950

500

HD 7970

650

HD 7990

1200

Pri pohľade na tabuľku nVidie a AMD si mnoho ľudí povie, že je tam nejaká chyba, veď taký Titan predsa nemôže byť rovnako výkonný, ako 2 generácie starý Radeon HD 5870. A tiež prečo je GTX 680 pomalšia ako jej predchodca, a zároveň podáva pätinový výkon ako jej rival, HD 7970?
Čím to teda je, že karty od nVidie podávajú, v porovnaní s Radeonmi, zlomkový výkon? Môže za to odlišná architektúra čipov oboch výrobcov a zároveň povaha riešeného problému. Veľmi dobrý článok, ktorý sa práve touto problematikou zaoberá, bol uverejnený na webe
Extremetech.
V provom rade, grafické operácie prebiehajú s číslami v plávajúcej desatinnej čiarke, (FP16/32), no naproti tomu, kryptografické operácie sú vyslovene celočíselné operácie. Jedným z krokov pri výpočte hashu pomocou SHA256 sú pravé bitové rotácie nad 32-bitovými celými číslami - zjednodušene povedané, vezmeme jeden bit sprava, celé 32-bitové číslo posunieme o 1 doprava. Najpravejší bit, ktorý sme v prvom kroku vybrali, vložíme zase ako prvý zľava. Táto operácie nie je v moderných procesoroch či grafických kartách riešená takto naivne, napr. také GPU od AMD má pre túto operáciu natívnu inštrukciu (v jednom kroku o N bitov), ktorej vykonanie trvá 1 takt. Karty nVidie, okrem GTX Titanu, však toto správanie musia riešiť troma inštrukciami - dvoma posunmu (shift) a jedným sčítaním.
Radeony a GTX Titan majú taktickú výhodu - tzv.
funnel shifter, súčasť ALU, ktorá dokáže vykonávať akýkoľvek druh posunov alebo rotácií za jeden takt. Tento funkčný blok pozostáva z jedného registra o 2x väčšej dĺžke (v našom prípade má 64 bitov). Pokiaľ by sme chceli rotovať určité 32-bitové číslo napravo, nakopírujeme ho do oboch polovíc tohto registra, a potom pomocou 32-bitového okna "vysekneme" z neho časť, ktorá nás zaujíma.

shifter-640x382
(schéma bitovej rotácie doprava o "offset" bitov pomocou funnel shiftera)

Pokiaľ by sme chceli urobiť bitovú rotáciu doprava o 1, nastavíme výsekové okno úplne doprava a pohneme s ním raz doľava. Nakoľko obe polovice registrov sú rovnaké, úplne naľavo sa objaví najpravejší bit a celok je zároveň posunutý doprava. Pokiaľ rotujeme o N bitov, operácia vyseknutia zaberie stále len 1 takt.
Vďaka tomu je Titan schopný vykonať 2x viac bitových posunov na (a rotácií) na multiprocesor (SMX) za takt, než GTX 680 - 32 VS 64. Titan má dohromady 14 SMX, čo dáva teoreticky 896 bitových posunov za takt. Výkon Radeonov je tiež 64 shiftov na jeden Compute Unit (CU, približne ekvivalent SMX). Lenže AMD má granulárnejšiu architektúru (=viac jednoduchších elementov), CU neobsahujú toľko výpočtových procesorov ako nVidia, no na druhej strane má viac takýchto jednoduchších CU - a to až 32. Čipy Tahiti v kartách HD 7970 zvládnu teoreticky až 2048 shiftov za takt, 2.2x viac ako Titan a 8x viac ako GTX 680, ktorá má 8 SMX.
 
Porovnanie výkonu kariet v shift operácii





Čip

SM/CUpočet integer shift op. na jeden SM/CU za taktshifts na celý čip za takt

Radeon HD 7970

32

64
2048

GeForce GTX 580

16

16
256

GeForce GTX 680

8

32
256

GeForce GTX Titan

14

64
896

Ako vidno v tabuľke, teoretický výkon GTX 580 (Fermi) a GTX 680 (Kepler) je rovnaký, no podľa zozbieraných údajov je nižší. Problém však je optimalizácia kernelu (=programu bežiaceho na GPU). Obe architektúry sú do značnej miery odlišné, pokiaľ by bol v testoch kernel správne napísaný na GTX 680, pravdepodobne by podávala vyšší výkon než GTX 580. Na rozdiel od procesorov sú grafické karty vzájomne veľmi odlišné a často musia mať program napísaný doslova na mieru.  
Porovnanie ceny a výkonu niektorých kariet





Model

Cena (€)Výkon (MH/s)€/MH

Radeon HD 7970

370

650
0.57

Radeon HD 7950

285

500
0.57

Radeon HD 7870

225

400
0.56

Radeon HD 7850

180

300
0.6

Radeon HD 7770

120

190
0.63

Radeon HD 7750

90

135
0.66

GeForce GTX Titan

980

340
2.88

GeForce GTX 680

450

120
3.75

GeForce GTX 660

200

78
2.56

GeForce GTX 650 Ti

130

55
2.36

Najlepší pomer cena/výkon majú prvé Radeony HD 7970/7950/7870, slabšie modely sa držia pomerne tesne v závese. nVidia je vzhľadom na nízky výkon úplne mimo, kupovať akúkoľvek GeForce špeciálne na Bitcoin mining sa vôbec neoplatí. Výber kariet je teda jasný - pre mining (a všeobecne pre použitie v kryptografii) jednoznačne karty AMD.

FPGA, ASIC


Grafické karty však rozhodne nepodávajú najvyšší výkon pri počítaní. Obvody na mieru sú, čo sa výkonu týka, úplne iná liga. V praxi ich môžeme rozdeliť na programovateľné hradlové polia (FPGA) a špecializované čipy (ASIC). Takýchto produktov je pomerne málo, no ich výkon (a samozrejme cena) je úplne niekde inde, najmä u ASIC. FPGA čo do výkonu skôr konkurujú grafickým kartám, no sú ďaleko úspornejšie - tak napr. X6500 FPGA Miner podáva výkon 400MH/s, no spotrebuje len 17W energie, čo je neporovnateľne menej, než zostava s HD 7870, ktorá má približne rovnaký výkon.
FPGA




Model

Výkon (MH/s)Spotreba (W)Cena (€)

Icarus

380

19
438

ModMiner Quad

800

40
820

X6500 FPGA Miner

400

17
420

ZTEX USB-FPGA Module 1.15b

90

?
250

ZTEX USB-FPGA Module 1.15x

215

?
310

ZTEX USB-FPGA Module 1.15y

860

?
1000

Oveľa zaujímavejšie však sú špecializované čipy. Majú nielen výrazne vyšší výkon než grafické karty, ale aj nižšiu spotrebu. Je to to najvýkonnejšie, čo si môžte pre mining v súčasnej dobe zaobstarať. Mnohé z nich sa ešte nezačali predávať.  

blockerupter13ghasicusb1
(Block Errupter Blade 13 GH/s, Bi Fury USB Asic Miner 5 GH/s)

ASIC





Model

Výkon (MH/s)Spotreba (W)Cena (€)

Avalon ASIC batch 1

66000

620
1000

BitForce SC 5GH/s

5000

30
210

BitForce SC 25GH/s

25000

?
960

BitForce SC 50GH/s

50000

?
1920

BitForce Mini Rig SC

1500000

?
23000

Block Errupter Blade

10752

70
49.99BTC (cca 5500€)

Niektoré ASIC riešenia sú dokonca stand-alone, t.j. nepotrebujú byť pripojené k počítaču, ako napr. Avalon ASIC či Block Errupter, ktoré majú vstavané sieťové adaptéry, v prípade Avalonu či Mini Rigu dokonca Wifi adaptér. Zvyšok sa pripája cez USB k počítaču. Nehovoriac o spotrebe, ktorá je oproti ekvivaletnému systému postaveného na Radeonoch zlomková.

Mining klienti, pools


Ťažiť je možné 2-ma spôsobmi - buď to na vlastnú päsť (tzv. sólo mining), alebo v skupinách - tzv. pooled mining. Sólo mining je pre niekoho s veľmi výkonným hardware, ideálne ASIC, ktorý má vďaka hrubej sile veľkú šancu nájsť blok aj sám a celú odmenu si pripísať. Pokiaľ však chcete dolovať sami, musíte mať k dispozícii celú block chain na svojom počítači. Najčastejšie sa používa originálny Bitcoin-qt klient, ktorý však musí stále bežať a priebežne svoju databázu aktualizovať. Ďaleko populárnejší je pooled mining, ktorý funguje tak, že sa so svojím strojom pripojíte do poolu a podieľate sa na dolovaní spolu s ostatnými. Na základe vami spočítaného podielu dostanete odmenu, niekedy si pool berie pár percent (okolo 2) z Vašej odmeny pre svoje vlastné fungovanie. Medzi veľmi populárne pooly patrí napr. český Slush's pool, ktorý nájdete TEJTO adrese. Sám Slush je autorom protokolu Stratum, ktorý používa v súčasnosti množstvo klientov pre získavanie práce z pool servera, podporovaný je aj starší protokol GetWork, v súčasnosti však pool vyvíja tlak na používateľov, aby prešli na novšie verzie klientských programov práve s podporou Stratumu, tých neochotných "pokutuje" 10% zrážkou z odmeny. Ako to funguje? Na stránke poolu si vytvoríte účet, pričom automaticky sa Vám vytvorí konto pre prvé zariadenie/počítač aj s heslom. Na jednom konte tak môžte mať množstvo počítačov. Netreba zabudnúť vyplniť Bitcoin adresu pre zasialanie odmien, prípadne aj prah zasielania odmien. V klientskom programe zadáte patričné údaje a môžete počítať, na stránke profilu by ste mali prakticky okamžite vidieť aktivitu novopripojeného počítača.
slush-640x378

(Slush's pool, prehľad ťažby)

Prehľad ďalších mining pools nájdete TU. Dokonca existujú programy, s ktorými si môžete zriadiť vlastný pool.
Pre mining je samozrejme treba aj nejaký program. Tých existuje pomerne dosť, na zopár vytypovaných sa pozrieme.

cgminer, bfgminer


Multiplatformové programy bez užívateľského rozhrania. Oba si rozumejú nielen s grafickými kartami, ale aj niektorými špecializovanými obvodmi (Icarus, Bitforce, Ztex, Avalon). Pre GPU sa používa OpenCL, pričom je možné si vybrať z niekoľkých kernelov; podporuje sólo aj pooled mining. Pre sólo ťažbu však musíte nastaviť cestu ku klientovi, obvykle k originál Bitcoin-qt kleintovi a ten musí byť zapnutý a stále aktualizovaný. Nastavuje sa cez konfiguračný súbor prípadne cez príkazový riadok, idálne je si vytvoriť dávku, cez ktorú ho spúšťať.
Pokiaľ máte Radeon, poskytuje program celú plejádu možností - od regulácie otáčok ventilátora cez zmeny frekvencií jadra/pamätí až po zmeny napätia jadra/pamäte. Podporuje multi-GPU systémy, pričom každú kartu si môžete nakonfigurovať ako chcete. Definujete tiež intenzitu výpočtov, napr. na primárnej karte chcete aj používať Windows a nechcete, aby Vám samotné GUI operačného systému sekalo, tak na nej intenzitu znížite. Naopak, na ostatných kartách, ktoré používate čisto na počítanie, nastavíte plnú intenzitu.
cgminer-640x328
Oba programy vyzerajú v podstate rovnako, bfgminer je totiž odnož projektu cgminer, ktorá sa oddelila po nezhodách jedného z programátorov so zvyškom projektu. Celkom slušný flamewar na túto tému je TU.                             cgminer môžte nájsť TU, bfgminer stiahnete TU.

GUIminer


Pre tých, ktorí preferujú radšej GUI pred terminálom je tu GUI miner, ktorý v sebe integruje niekoľko dolovacích utilít, ktoré púšťa podľa toho, aký máte v počítači hardware. Obsahuje cgminer pre karty AMD, Ultrasoft CPU miner pre procesory, CUDA miner pre karty nVidia. Má v sebe predkonfigurované adresy pre niektoré pooly, podporuje aj ťažbu sólo, pre ktorú je však treba mať Bitcoin-qt klienta.
guiminer
Medzi ďalších klientov patrí napr. poclbm napísaný v jazyku Python, cpuminer s podporou SSE2 pre ťažbu na CPU (len Linux), RPCminer, ktorý podporuje CPU a GPU mining alebo Phoenix2 s podporou CUDA a OpenCL.