Ť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.