neděle 1. října 2017

Co možná nejpodrobněji o tom jak pracuje Bitcoin

Aby bylo jasno, nebudu se tu snažit popisovat ekonommickou podstatu BTC, kdo a co jí kryje, kdo jí vytvořil a nebudu ani spekulovat jak to s ní dopadne. Mým cílem je popsat tuto síť - protože to je to, čím bitcoin ve skutečnosti, po technické stránce, je. Možná se někdy příště podívám i čím je bitcoin lákavý pro zločinné podsvětí, pro nás ale platí, že na anonymitu majitele se nelze spolehnout Vše co se týče transakcí bitcoinu je totiž velmi transparentní. Možná se v následujícím povídání dopustím pár chyb, a to zejména proto, že hodlám prozatím jen přiblížit podstatu funkce kryptoměny laické veřejnosti. Takže pro začátek:

Hash

Předpokládal bych, že většina z vás to, jak pracuje a proč existuje hashování taknějak ví. Nakonec jsem dospěl k závěru, že by to byl mimořádně špatný předpoklad. Dalo by se říci, že hashování je speciální typ šifrování. Při klasickém šifrování musíme zajistit, aby příjemce zašifrované zprávy věděl jak zprávu vrátit do stavu před zašifrováním. Hash je udělán tak, aby neexistovala žádná operace, která by navrátila z hashe tu původní zprávu. Jediné co hash umožňuje, je ověřit, zda jsou dva hashe stejné. To by pak i původní zprávy byly shodné, čehož se využívá při ukládání a ověřování hesel téměř všude. Pokud by někdo ukládal hesla jako prostý text, považoval bych to za extra prasárnu...

Existují mineři 

Neboli do češtiny přeloženo těžaři. Jejich úkolem je jednou za cca. deset minut ověřit, zda všechny transakce mohou být provedeny, tedy zda má odesilatel dostatečný zůstatek v peněžence (peněženka (wallet anglicky) je důležitý termín) a když je v tom, podívá se miner taky kolik daný odesilatel nabízí peněz za samotné potvrzení. Ze všech transakcí, o kterých rozhodne, že jsou v pořádku vytvoří blok transakcí, a ten zahashuje. A tady to začíná být zajímavé. Síť funguje jako celek a kapacitu schopnou schvalovat takto transakce si hlídá. Čím je kapacita sítě těžařů silnější, tím těžší zadá úkol. Ten spočívá v tom, že hash, který je vytvořen z bloku transakcí musí mít na počátku určitý počet nul. Čím víc nul síť vyžaduje, tím složitější je vytvořit takový hash. Teprve tímto se stává blok těžko falšovatelný. Do sítě se totiž po demokratickém vzoru zapíše pouze ten blok, se kterým většina "výpočetního výkonu" souhlasí. Transakcí během snahy schválit blok přibívá a jediné, co lze v bloku měnit abychom si šanci jako těžaři zvýšili v čase mezi tím, je údaj zvaný nonce. Ten "ostatní výpočetní výkon", který problém hashe nevyřešil zkusí zadat stejný blok transakcí se stejnou noncí jako vítěz a pakliže hash vyjde stejně, a pakliže transakce jsou ty které dostali i všichni ostatní, pak si musí říct oukej, teď jsi to dal ty. Neustále se prostě stále dokola hashuje celej blok, dokud vám nevyjde takovej výsledek kterej síť požaduje. Kdo a kdy problém vyřeší je prostě náhoda. Obtížnost, tedy počet nul na počátku hashe, je nastaven tak, aby celá síť těžařů, na základě její výpočetní síly, vyřešila tento problěm jednou za cca. právě těch již výše zmíněných deset minut.

Abychom si vysvětlili, proč se těžař, tak jak jsme jej popsali, nazývá právě těžařem, musíme si ujasnit, že těžař je za schválený blok s požadovaným hashem odměňován, což je velmi důležitá věc. Nebýt těžařů, nikdo by neschvaloval transakce a zadarmo to těžaři dělat nebudou. Úspěšný těžař dostává 12,5 bitcoinu do své peněženky. Osobně předpokládám, že to funguje následovně: nálezce vítězného hashe do svého bloku transakcí prostě automaticky přidává transakci, která na jeho BTC adresu vloží stanovenou velikost odměny. K té může rovnou určitě přičíst i zbytky po odečtení přijatých a odeslaných plateb ze všech transakcí, což je způsob, jak schvalovatele-vítěze-těžaře odměňují sami odesilatelé peněz. Prostě pošlou 29,5 BTC, ale požadují aby na nějaký ůčet bylo zapsáno pouze 29 BTC. Konkurence je ale mezi těžaři obrovská a k tomu se každé cca. 4 roky odměna snižuje na polovic. Malí těžaři se združují do tzv. poolů, aby dlouho nečekali na odměny a spolupracujíc v nich si rozdělují odměny. Zakládají se těžařské farmy s gigantickou výpočetní silou. Při těžbě se hledí na návratovost za zakoupené či vyvynuté procesory, spotřebu a cenu energie.

Zajímavé, je, že

Důvod proč se odměny snižují je jednoduchý: bitcoinů bude omezený počet. Každých 210 tisíc schválených bloků se odměna sníží na polovic, aby se nakonec rozdělilo právě 21 milionů. Sranda je, že lze bitcoiny ztratit. Schopnost s nimi nakládat se zakládá na peněžence, kterážto může být na webu, souborem na disku stejně jako písmenka na papíře. Když se disk odporoučí, odporoučí se bitcoiny. To, ve prospěch ostatních majitelů, může způsobit mírnou deflaci měny. Podstatou je totiž znalost hesla, nebo lépe řečeno soukromého klíče. Většina programů, která slouží jako peněženka, vám soukromý klíč neukazuje, pouze si jej pamatuje jako trojici soukromý klíč, veřejný klíč a vaše adresa. Tyto tři údaje se generují automaticky a navzájem matematicky souvisí. Můžou být generovány offline, protože jejich datová délka je tak velká, že počet variací jest monstrózní - prakticky není možné, aby se jeden výsledek náhodou opakoval.

Obdržel jste BTC, gratulace...

Pro začátek nebudu komplikovat odesílání transakcí, které je taky malinko složitější. Začněme tím, že prostě někdo pošle bitcoiny na vaší adresu, kterou odesilateli sdělíte. Tu vygenerovala vaše peněženka společně s veřejným a soukromým klíčem. Protože adresa je nějakým způsobem hash veřejného klíče určité délky (předpokládám, že je k němu pouze doplněn kontrolní součet, aby se odesilatel bitcoinů nepřeklepl), a transakce, pakliže byla schválena, byla zapsána do blockchainu, lze ověřit, kolik se na té, či oné adrese nachází. To, že reálně daná osoba disponuje párem veřejného a soukromého klíče, lze prověřit třeba tím, že veřejný klíč zahashujeme, a měli bychom dostat přibližně adresu. Soukromý klíč má zase v souvislosti s veřejným klíčem tu vlastnost, že jedním se libovolný text či data zašifrují zatímco druhým způsobem se dešifrují. Pakliže dostaneme po zašifrování a dešifrování původní výsledek, evidentně patří tento soukromý k tomuto veřejnému klíči. Ta krása prosímvás spočívá v tom, že jeden z těch klíčů nemusíte vůbec prozradit, ba dokonce není ani se současnými znalostmi a výpočetními výkony možno jej dopočítat. Pomocí toho veřejného totiž kdokoli může nějaká data zašifrovat a poslat je vám, vy pak prokážete znalost soukromého tím, že odešlete zpět původní data. Jenže to, že vám někdo pošle prachy, vůbec nevyžaduje vaší ůčast. Ty BTC budou zapsaný v blockchainu tak dlouho, dokud je nepošlete dál. Veřejný a sukromý klíč použijete až v okamžiku, kdy peníze posíláte. Jediné, co musíte, je mít tuto trojici vygenerovánu.

A teď k tomu, v čem je odesílání BTC "trochu složitější"

Řekli jsme si, jak někdo pošle BTC na nějakou adresu. Na stejnou adresu může být posláno více peněz, ale zároveň si vaše peněženka může generovat libovolné množství adres a odesilatelé je vám mohou posílat tam. Tím pádem nelze sledovat stav účtu jednoho uživatele, pouze kolik se nachází na té, či oné adrese. Vaše peněženka kromě pamatování adres a klíčů slouží většinou i k tomu, aby sečetla bitcoiny ze všech adres, kterými disponujete. Jinými slovy a znovu: Vy nedisponujete konkrétními bitcoiny, ale transakcemi, které byly odeslány na adresy, ke kterým si vaše peněženka pamatuje klíče! Vám pak peněženka poví, že máte kupříkladu 1 BTC. Náhle se objeví situace, kdy potřebujete poslat někam bitcoiny. Konečně vytvoříme svou první transakci. Dejme tomu, že potřebujete za vraždu katalánského prezidenta zaplatit 0,5 bitcoinu. V tu chvíli vaše peněženka vezme tolik disponibilních transakcí, kolik v součtu stačí, ba většinou přesáhne požadovanou platbu, a pošle je těžařům. "Chlapi, pošlete to na tadytu adresu, jo?" Jenže když se sečtou nějaké transakce většinou vám vyjde o dost víc, než chcete platit. Takže současně pošlete i novou adresu, kterou vaše peněženka vygeneruje, aby vám na ni těžař poslal drobný nazpět. Tady mimo jiné platíte poplatek těžaři tím způsobem, že chcete méně drobných, než vám musí vracet. A tím ho i motivujete k tomu, aby vaší transakci zařadil do svého bloku. Aby mohl těžař prověřit vaší disponibilitu danými adresami pošlete k nim veřejné klíče, on je zahashuje a zjistí, ke kterým adresám patří a pomocí těchto stejných klíčů zašifruje náhodně vygenerované řetězece dat. Vy prokážete, že znáte i soukromé klíče tím, že mu pošlete původní dešifrovaná data.

A jako poslední blockchain

Řekli jsme si, jak se BTC posílají, jak se přijímají, jak se transakce ověřují a kdo z toho jak "těží"... Poslední co nám zbývá je řetězec bloků. Ten ukládá všechny bloky transakcí, bloky transakcí ukládají všechny transakce, takže blockchain je celá BTC historie. Kopie blockchainu si ukládají především těžaři, protože jim to umožňuje rychlejší ověřování, ale i některé peněženky si zálohují alespoň části řetězce, aby snáze dopočítali zůstatky na všech adresách. Každý nový blok v blockchainu odkazuje na předchozí, má ve svém obsahu zapsán vítězný hash toho předchozího. Takhle je to jednoduché. Za zmínku stojí také, že velikost bloku je limitována na 1MB. To každý blok omezuje v počtu transakcí a momentálně je BTC už natolik populární, že často překračuje tuto velikost. To má pak za následek dlouhé čekání či neprovedení transakce - to je problém. Změnit velikost bloku je fajn řešení, vyžaduje sice drobnou úpravu na softwaru všech uživatelů - aktualizaci, což bohužel vzhledem k povaze BTC není implementováno v žádném z nich celoplošně. Bylo by to stále nejmenší zlo, kdyby zároveň nebylo dopředu jasné, že by se stejná úprava nemusela učinit brzy znovu. Jakmile bychom do softwaru implementovali aktualizace, narušili bychom jeho decentralizaci. Blockchain a bitcoin není snadné obelstít. Ovládnutí nadpoloviční většiny výkonu by způsobilo zastavení činnosti BTC a umožnilo podvržení pouze vlastních transakcí, jediná skutečná hrozba je prolomení šifrování (případně hashování), které se v komunikaci BTC sítě používá.

Dneska uvedu pro srandu i nějaký zdroj, uvedl bych jich více, ale nepamatuju se kde jsem to četl. Zde je odkaz na blockchain explorer, jsou zde uvedeni uživatelé, kteří block ověřili, jednotlivé transakce, všechno. Je zde i popsáno programátorské rozhraní (API), aby si mohl člověk prohlédnout jak bitcoin pracuje, případně si naprogramovat peněženku. https://blockchain.info/

Programování těžby: http://www.righto.com/2014/02/bitcoin-mining-hard-way-algorithms.html