1 UVOD Prve kriptovalute (npr. B-money, Bit Gold, digicash, hashcash) so nastale že v 90. letih prejšnjega stoletja. Načeloma so bile podprte z nacionalno valuto ali dragoceno kovino (npr. zlato, srebro), izdajale pa so jih neuradne centralne avtoritete (kot banke). Čeprav so te kriptovalute delovale, so bile centralizirane in zato lahke tarče napadalcev in zaskrbljenih oblasti. Oktobra leta 2008 je psevdoanonimni avtor Satoshi Nakamoto objavil publikacijo »Bitcoin: A Peer-to-Peer Electronic Cash System« [1], v kateri je Bitcoin predstavljen kot popolnoma decentraliziran sistem digitalnega denarja, ki se ne zanaša na nobeno centralno avtoriteto ali kontrolno točko za izdajanje valute, potrjevanje in poravnavo nakazil. Ena ključnih novosti, ki jih je prinesel Bitcoin, je računsko zahtevni proces rudarjenja, v katerem lahko sodeluje vsakdo s prilagojeno računalniško opremo za rudarjenje (angl. mining rig). V zameno za uspešno potrjevanje nakazil bitcoin v decentraliziranem omrežju Bitcoin pa prejme nagrado v »digitalnih kovancih«, bitcoinih. Strojna rudarska oprema za rudarjenje bitcoinov se je zelo hitro razvila v samo nekaj letih obstoja Bitcoina [2]. Na začetku (2009) se je sprva rudarilo z namiznimi in prenosnimi računalniki (procesorji oz. centralnoprocesne enote, CPE), v letih 2010 in 2011 pa se je že rudarilo z igralnimi grafičnimi karticami Prejet 2. oktober, 2017 Odobren 30. november, 2017 254 MEDEN, KOS (grafičnoprocesne enote, GPE), ker so te namenjene izvajanju ponavljajočega se in vzporednega računanja in so se zato izkazale za okoli 50- do 100-krat hitrejše in energijsko učinkovitejše pri rudarjenju bitcoinov kot navadni procesorji. Uveljavilo se je tudi rudarjenje z vezji FPGA (angl. Field-Programmable Gate Array), ki so sicer bila približno enako hitra kot igralne grafične kartice, toda okoli 5-krat energijsko varčnejša. To je bilo dovolj za razvoj industrije rudarjenja bitcoinov; nastale so se prve »farme« za rudarjenje bitcoinov z več sto vezji FPGA. Leta 2013 so sledila prva specializirana vezja ASIC (angl. Application-Specific Integrated Circuit) za rudarjenje bitcoinov, ki so se izkazala za vsaj 1000-krat hitrejša in energijsko učinkovitejša pri rudarjenju bitcoinov kot GPE in vezja FPGA. Zato se od leta 2013 za rudarjenje bitcoinov uporabljajo le še specializirana vezja ASIC. Kljub temu smo izvedli podatkovno pretokovno aplikacijo za rudarjenje bitcoinov na dveh podatkovno pretokovnih računalnikih Maxeler (modela MAX2B in MAIA). Svojo aplikacijo smo nato primerjali z že obstoječo optimizirano opremo za rudarjenje bitcoinov (CPE, GPE, ASIC) in ovrednotili pridobljene rezultate. 2 RUDARJENJE BITCOINOV 2.1 Samostojno ali skupinsko rudarjenje? »Rudarji bitcoin« so prostovoljci s prilagojeno računalniško opremo za rudarjenje kriptovalut, ki zbirajo in potrjujejo nakazila bitcoin uporabnikov v omrežju Bitcoin. V zameno za uspešno potrjevanje nakazil prejmejo nagrado v bitcoinih na svoje bitcoin naslove in tako varujejo omrežje Bitcoin. Na začetku obstoja omrežja Bitcoin (2009-2010) se je zlahka rudarilo samostojno, dandanes pa je težavnost rudarjenja narasla na tako visoko raven, da se rudarji raje pridružijo rudarskim bazenom (angl. mining pools). Tako rudarji združujejo svoje računske moči (hitrost zgoščevanja, angl. hash rate) in si razdelijo morebitne nagrade v bitcoinih. Oprema za rudarjenje kriptovalut lahko komunicira z rudarskim bazenom prek enega od treh obstoječih »rudarskih protokolov« (angl. mining protocols): Getwork, GetBlockTemplate in Stratum [3]. Rudarji ustvarjajo »deleže« (angl. shares), ki morda ne zadostijo globalni tarči omrežja Bitcoin, zadostijo pa lažji lokalni tarči rudarskega bazena. Rudarski bazen na ta način prepozna rudarjevo dejavnost in računa prispevano računsko moč (hitrost zgoščevanja) njegove rudarske opreme. Vsake toliko časa se ustvari takšen delež, ki zadosti lažji lokalni tarči rudarskega bazena in težji globalni tarči omrežja Bitcoin. Iz tega deleža se sestavi blok z nakazili in če se ta doda na rep verige blokov (angl. blockchain), zmagajo vsi sodelujoči rudarji v zmagovalnem rudarskem bazenu. Po nekaj potrditvah bloka si lahko sodelujoči rudarji porazdelijo nagrado v bitcoinih. 2.2 Glava bloka Glava bloka je 640 bitov velika podatkovna struktura, ki sestoji iz šestih polj (tabeli 1 in 2) in je ključni sestavni del bloka z nakazili; njena dvojna zgoščena vrednost mora biti namreč manjša od globalne težavnostne meje omrežja Bitcoin oz. se mora začeti z določenim številom ničel. Tabela 1: Struktura glave bloka [2] Polje Pomen Velikost Različica Številka različice bloka 32 bitov Zgoščena vrednost glave prejšnjega bloka zgoščena vrednost glave bloka 256 bitov Merklov koren Zgoščena vrednost vseh nakazil v bloku 256 bitov Časovni žig časovni žig v sekundah od 1. 1. 1970, 00:00 dalje 32 bitov Tarča Trenutna tarča v kompaktnem formatu 32 bitov Enkratno število Spremenljivo enkratno število 32 bitov Tabela 2: Primer glave bloka Polje Vrednost v šestnajstiškem številskem sistemu Različica 01000000 Zgoščena vrednost glave prejšnjega bloka 81cd02ab7e569e8bcd9317e2fe99f2 de44d49ab2b8851ba4a30800000000 0000 Merklov koren e320b6c2fffc8d750423db8b1eb942 ae710e951ed797f7affc8892b0f1fc 122b Časovni žig c7f5d74d Tarča f2b9441a Enkratno število 42a14695 Edini spremenljivi del glave bloka je 32-bitno celo »enkratno število« (angl. nonce, number-once), ki lahko zavzame vrednosti od 0 (00000000) do vključno 232-1 (ffffffff); v tem primeru 42a14695. Če podano glavo bloka zgostimo dvakrat z zgoščevalnim algoritmom SHA-256, dobimo 256-bitno zgoščeno vrednost 1dbd981fe6985776b644b173a4d0385ddc1aa 2a829688d1e0000000000000000. Tej zgoščeni vrednosti je treba spremeniti zaporedje bajtov (angl. endianness), in sicer od zaporedja najpomembnejših bitov (angl. big-endian) v zaporedje najmanj pomembnih bitov (angl. little-endian). Spremenjena zgoščena vrednost glave bloka, to je 00000000000000001e8d6829a8a21adc5d38d 0a473b144b6765798e61f98bd1d, se zdaj lahko primerja z 256-bitno tarčo, npr. 00000000000044b9f20000000000000000000 000000000000000000000000000. Ker je dvojna zgoščena vrednost glave bloka z enkratnim številom 42a14695 manjša od tarče, je glava bloka s tem enkratnim številom primerna za sestavo bloka z nakazili (tabela 3). RUDARJENJE BITCOINOV S PODATKOVNO PRETOKOVNIMI RAČUNALNIKI MAXELER 255 Tabela 3: Struktura bloka z nakazili [2] Polje Pomen Velikost Velikost bloka Velikost bloka v bajtih 32 bitov Glava bloka Glava bloka z ustreznim enkratnim številom 640 bitov Število nakazil Število nakazil v bloku 8–72 bitov Nakazila Seznam nakazil Spremenljiva 3 PODATKOVNO PRETOKOVNO RAČUNANJE Višanje delovne frekvence procesorjev se je ustavilo že pred dobrim desetletjem zaradi izjemno povečane porabe električne energije in proizvedene toplote. Zato se raziskuje nov pristop za obdelavo velikih količin podatkov; to je vzporedno računanje. Podatkovno pretokovno računanje s podatkovno pretokovnimi računalniki Maxeler je ena od oblik vzporednega računanja, kjer podatki tečejo od vhodov do izhodov skozi morje aritmetičnih enot, kjer se izvajajo preproste računske operacije. 3.1 Podatkovno pretokovni računalniki Podatkovno pretokovni računalniki (angl. dataflow engines, DFE) so sestavni del računalniške delovne postaje in so namenjeni pospeševanju računskih algoritmov (slika 1). CPE računalniške delovne postaje poganja navadne operacije in programe s kontrolnim pretokom (angl. control flow), medtem ko DFE izvaja podatkovno pretokovno računanje (angl. dataflow computing). Slika 1: Arhitektura podatkovno pretokovnega računalnika [4] DFE sestoji iz integriranega vezja FPGA in več vrst pomnilnikov; hitri pomnilnik (angl. Fast Memory, FMem) se nahaja neposredno na čipu in lahko shrani nekaj megabajtov podatkov z zelo hitrim dostopom, pomnilnik z veliko zmogljivostjo (angl. Large Memory, LMem) pa se nahaja zunaj čipa in lahko shrani nekaj gigabajtov podatkov. Struktura DFE že sama po sebi pomeni računanje, zato ni potrebe po navodilih (slika 2). Navodila so namreč zamenjana z aritmetičnimi enotami, ki so razporejene v prostoru in povezane v primerno strukturo za določeno računsko opravilo (podatkovno pretokovni graf, angl. dataflow graph). Ker ni navodil, so računski viri DFE popolnoma predani računanju. DFE tako procesira velike količine podatkov, medtem ko CPE poganja redke operacije in nadzira komunikacijo z DFE. Slika 2: Vzporedno podatkovno pretokovno računanje [4] Vsaka aritmetična enota izvaja samo eno vrsto računske operacije (npr. seštevanje, množenje, premik bitov) in je preprosta, zato lahko ena DFE vsebuje več tisoč aritmetičnih enot. V nasprotju z zaporednim računanjem s kontrolnim tokom, kjer se operacije izvajajo ob različnih časih na istih funkcionalnih enotah (»računanje v času«), je podatkovno pretokovno računanje prostorsko porazdeljeno na čipu (»računanje v prostoru«). 4 IZVEDBA Podatkovno pretokovna aplikacija za rudarjenje bitcoinov je bila izvedena in preizkušena na dveh podatkovno pretokovnih računalnikih Maxeler; MAX2B in MAIA (tabeli 4 in 5). Aplikacija sestoji iz dveh delov (slika 3): • računalniški program s kontrolnim pretokom, ki je napisan v programskem jeziku C in ga izvaja navaden procesor, skrbi za komunikacijo med podatkovno pretokovnim računalnikom in izbranim rudarskim bazenom; • podatkovno pretokovni program, ki je napisan v programskem jeziku MaxJ (različica Jave) in ga izvaja DFE, izvaja računski algoritem (spreminjanje enkratnega števila v glavi bloka, dvojno zgoščevanje glave bloka z zgoščevalnim algoritmom SHA-256 in primerjanje zgoščenih vrednosti s tarčo). 256 MEDEN, KOS Tabela 4: Lastnosti DFE in pripadajočih delovnih postaj MAX2B MAIA FPGA Virtex-5 XC5VLX330T Altera Stratix V 5SGSMD8N2F45C2 LMem 12 GB DDR2 48 GB DDR3 Logična vrata 207360 262400 Vpogledne tabele (LUT) 207360 / Primarni flip-flopi (FF) 207360 524800 Sekundarni flip-flopi (FF) / 524800 Množilniki 192 (25x18) 3926 (18x18) Digitalni signalni procesorji (DSP) 192 1963 Blokovni pomnilnik 648 (BRAM18) 2567 (M20K) CPE delovne postaje Intel Core 2 Quad Q9400, 2.66 GHz Intel Core i7-6700K, 4.00 GHz Operacijski sistem Linux CentOS 6.5 Linux CentOS 6.9 PCI Express x4 x8 Različica MaxIDE 2013.3 2015.2 Tabela 5: Uporabljeni računski viri DFE (izvedba podatkovno pretokovne aplikacije za rudarjenje bitcoinov MAX2B MAIA Cevovodi 3 7 Stabilna frekvenca 95 MHz 210 MHz Pričakovana hitrost zgoščevanja 285 Mhash/s 1470 Mhash/s Dejanska hitrost zgoščevanja 282 Mhash/s 1430 Mhash/s Logična vrata 199295 / 207360 (96.11%) 225083 / 262400 (85.78%) Vpogledne tabele (LUT) 178919 / 207360 (86.28%) / Primarni flip-flopi (FF) 169889 / 207360 (81.93%) 387413 / 524800 (73.82%) Sekundarni flip-flopi (FF) / 49456 / 524800 (9.42%) Množilniki 0 / 192 (0.00%) 0 / 3926 (0.00%) Digitalni signalni procesorji (DSP) 0 / 192 (0.00%) 0 / 1963 (0.00%) Blokovni pomnilnik 68 / 648 (10.49%) 1268 / 2567 (49.40%) Slika 3: Delovanje podatkovno pretokovne aplikacije za rudarjenje bitcoinov, ki je sestavljena iz dveh delov (program za CPE in program za DFE) Podatkovno pretokovno računanje se izvaja po korakih v časovnih enotah, imenovanih »tick«. Na vsak »tick« se namreč vhodni podatki pomaknejo od ene aritmetične enote do naslednje in so korak bliže izhodu. Aplikacija je realizirana z več cevovodi tako, da se hkrati preizkusi več enkratnih števil na posamezen »tick« (slika 4). Zato je dosežena hitrost zgoščevanja hr približek zmnožku stabilne frekvence f in števila cevovodov N (tabela 5), kot prikazuje enačba (1). (1) RUDARJENJE BITCOINOV S PODATKOVNO PRETOKOVNIMI RAČUNALNIKI MAXELER 257 Slika 4: Abstrakcija podatkovno pretokovnega računanja z DFE; preizkušanje več enkratnih števil na posamezno časovno enoto (»tick«) 5 MERITVE IN REZULTATI Najprej smo izmerili hitrosti zgoščevanja in električne moči računalniške opreme za rudarjenje bitcoinov (tabela 6), nato pa smo na podlagi pridobljenih meritev izračunali energijsko učinkovitost preizkušenih strojnih komponent. Tabela 6: Konfiguracije preizkušene računalniške opreme za rudarjenje bitcoinov. Strojna komponenta Programska oprema CPE Intel 2 Core Quad Q9400, 2.66 GHz Cpuminer - minerd 2.4.5 (odprtokodna) CPE Intel i7-6700K, 4.00 GHz Cpuminer - minerd 2.4.5 (odprtokodna) GPE AMD Radeon 6950 HD Cgminer 3.7.2 (odprtokodna) DFE MAX2336B Lastna izvedba DFE MAX4848A Lastna izvedba Izmerjene povprečne hitrosti zgoščevanja strojnih komponent med rudarjenjem bitcoinov so podane na sliki 5 in medsebojno primerjane v tabeli 7. Slika 5: Izmerjene hitrosti zgoščevanja preizkušenih strojnih komponent med rudarjenjem bitcoinov (več je bolje) Tabela 7: Faktorji hitrosti zgoščevanja med preizkušenimi strojnimi komponentami (več je bolje) MAIA MAX2B Proti MAX2B 5 / Proti GPE 5 1 Proti CPE (i7-6700K) 24 5 Proti CPE (Q9400) 102 20 Delovne električne moči strojnih komponent med rudarjenjem bitcoinov so podane na sliki 6 in medsebojno primerjane v tabeli 8. Električne moči preizkušenih DFE so bile pri MAX2B izmerjene z merilnikom porabe električne energije VOLTCRAFT Energy Logger 4000 in pri MAIA s terminalnim ukazom v operacijskem sistemu Linux CentOS: maxtop –v. Električne moči navadnih procesorjev (CPE) in igralne grafične kartice (GPE) pa so podane kot teoretične vrednosti maksimalne termične moči (angl. Thermal Design Power, TDP), ki so navedene v specifikacijah strojnih komponent in so približne izmerjenim vrednostim [5]. Slika 6: Izmerjene (DFE) in teoretične (CPE in GPE) električne moči preizkušenih strojnih komponent med rudarjenjem bitcoinov (manj je bolje) Tabela 8: Faktorji električnih moči med preizkušenimi strojnimi komponentami (manj je bolje) MAIA MAX2B Proti MAX2B 1 / Proti GPE 0,28 0,28 Proti CPE (i7-6700K) 0,62 0,62 Proti CPE (Q9400) 0.59 0.59 Energijsko učinkovitost preizkušenih strojnih komponent pri rudarjenju bitcoinov smo izračunali kot razmerje med hitrostjo zgoščevanja in električno močjo po enačbi (2) 258 MEDEN, KOS       hash/s hash/s/W W hr eff P  , (2) kjer je eff energijska učinkovitost, hr hitrost zgoščevanja in P električna moč izbrane računalniške opreme za rudarjenje. Izračunane energijske učinkovitosti posameznih strojnih komponent pri rudarjenju bitcoinov so podane na sliki 7 in primerjane v tabeli 9. Slika 7: Izračunane energijske učinkovitosti preizkušenih strojnih komponent med rudarjenjem bitcoinov (več je bolje) Tabela 9: Faktorji energijske učinkovitosti med preizkušenimi strojnimi komponentami (več je bolje) MAIA MAX2B Proti MAX2B 5 / Proti GPE 17 3 Proti CPE (i7-6700K) 37 7 Proti CPE (Q9400) 256 50 DFE MAIA se je zelo izkazala v primerjavi s preostalo preizkušeno računalniško opremo v vseh treh preizkusnih kategorijah (hitrost zgoščevanja, delovna električna moč in energijska učinkovitost). Toda primerjava le-te s specializiranim vezjem ASIC za rudarjenje bitcoinov, Antminer S7 [6], pokaže izjemno veliko razliko v korist vezja ASIC (tabela 10). Tabela 10: Primerjava med DFE MAIA in ASIC Antminer S7 MAIA Antminer S7 Faktor Hitrost zgoščevanja 1,43 Ghash/s 4,73 Thash/s 3303 Električna moč 56 W 1300 W 23 Energijska učinkovitost 25,6 Mhash/s/W 3,64 Ghash/s/W 142 6 SKLEP V članku smo predstavili našo lastno izvedbo aplikacije za rudarjenje bitcoinov in jo preizkusili na dveh podatkovno pretokovnih računalnikih Maxeler, MAX2B in MAIA. V primerjavi s CPE in GPE smo dosegli precejšnje pospešitve računanja in precej večjo energijsko učinkovitost. Žal takšen način rudarjenja bitcoinov že nekaj časa ni več dobičkonosen. To je posledica uporabe specializirane rudarske opreme ASIC, ki je dvignila težavnost rudarjenja na nepredstavljivo visoko raven in so se zato amaterski rudarji premaknili na rudarjenje manj znanih alternativnih kriptovalut (»altcoinov«), npr. litecoin in ethereum. Prišla je tudi centralizacija omrežja Bitcoin; okoli 75 % celotne računske moči v omrežju Bitcoin namreč prihaja iz Kitajske, kar nasprotuje ključni ideji Bitcoina – decentralizaciji. Podatkovno pretokovni računalniki Maxeler sicer ne bodo nikoli presegli specializiranih vezij ASIC v hitrosti računanja in energijski učinkovitosti; jih je pa mogoče reprogramirati za druga računska opravila, medtem ko vezja ASIC za rudarjenje bitcoinov po navadi »zastarijo« v nekaj mesecih. ZAHVALA Zahvaljujemo se ekipi Maxeler Technologies v Beogradu za dostop do podatkovno pretokovnega računalnika Maxeler MAIA za preizkusne namene.