Ahoj,
toto je zápis z Bitcoin semináře pro ty z Vás, kteří jste se nezúčastnili. Seminář se povedl, děkuji slushovi, který nám trpělivě odpověděl skoro na vše a TMOVI, který dodal ten zbytek, který se týkal ekonomické teorie.
Za měsíc bych dal případně druhé sezení, berte tento email jako výzvu pro poslání námětů.
A teď k obsahu. Probrali jsme jak bitcoin funguje, jaké má jeho princip důsledky, jak se bitcoin vyrovná s případným prolomením sha256 a další témata. Já tu nyní nastíním zápis z toho, jak bitcoin funguje, protože to byl minimálně pro mě klíčový poznatek.
Jako první je nutné opustit myšlenku "fyzického" bitcoinu, tedy nějakého drahoceného shluku bajtů, který se dá srovnat se zlatem. Takový kousek by byl problém dělit a vůbec, prostě to tak nefunguje :). Stejně tak "hornící", tedy mineři nedolují bitcoiny, ale "jen" podepisují nějaká data, to rozvedu dále.
Bitcoin samotný je "jen" veřejná distribuovaná databáze transakcí, kde je napsáno, že z peněženky A bylo posláno 20 peněz do peněženky B. Pokud chcete vědět, kolik peněz je v peněžence B, projedete databázi transakcí a prostě posčítáte operace kdy peníze přišly a odečtete operace kdy peníze odešly. Víc v tom není :)
Distribuovaná databáze je postavena na p2p síti, kde jsou dva typy uzlů - klienti a hornící. Klienti si posílají peníze, horníci kutají. Data jsou uložena v tzv. blocích, resp. nejdelším řetězu bloků, obsahující seznam transakcí (viz dále).
Teď vám asi věhá hlavou, co tedy kutají horníci. Já se k nim ještě ale nedostanu, nejprve rozeberu transakce. Základem je, že mám peněženku, tedy mám privátní klíč, ke kterému se dá jednoduše nagenerovat veřejný klíč - to je právě adresa peněženky. Pro danou adresu jsem schopen projet databázi transakcí a posčítat, kolik je v ní peněz. Ale nejsem schopen vydat příkaz k převodu peněz jinam, pokud nejsem majitelem peněženky. Každou transakci totiž musím podepsat privátním klíčem, tedy potvrdím, že ten kdo má tuto peněženku s ní také opravdu chce něco dělat. Transakce může vést z více adres do více adres, můžu takhle přehazovat peníze a mlžit. Takovou transakci tedy podepíšete všemi privátními klíči ke všem platícím peněženkám a pošlete do světa. To samo o sobě ale nestačí, ještě tu transakci musí někdo zaúčtovat. A tady přicházejí horníci.
Horníci si vyberou z okolo poletujících transakcí ty, které jim vyhovují, nebo podle pořadí, to už je na nich a zabalí je do tzv. bloku. Při tom ověří podpisy, zůstatek apod. Distribuovaná databáze bitcoinů je totiž uložena v blocích. Kdo jste někdy studoval princip gitu, tak to funguje přesně tak. Blok obsahuje nějaký počet transakcí a odkaz na předchozí blok přičemž je tento blok podepsán. Takto lze z libovolného bloku získat celý řetězec jeho předků, kde jeden odkazuje na druhý a přitom jste schopni odvodit, že žádný nebyl změněn nebo vyhozen. A v čem spočívá to dolování? Blok vypadá nějak takto:
[transakce | odkaz na minulý blok | sůl] Sůl je náhodná sekvence bajtů a horník ji musí "natipovat" tak, aby hash celého bloku byl menší než nějaká konstanta (která je veřejně známá a pravidelně se upravuje podle toho, jak často se daří najít blok (aby to bylo nějak konstantní).
Co z toho horník má? No má z toho bitcoiny. Má totiž právo přidat si do spočteného bloku speciální transakci, která za mining převede 50 bitcoinů na libovolný účet. Transakce může mít i nějaký transakční poplatek, tedy částku, kterou dostane horník. Výši si určuje ten, od koho peníze plynou a horníci si můžou prioritně vybírat transakce ze kterých jim to nejvíc ponese. Při zabalení bloku si pak horník tuto manipulační částku převede do své peněženky.
Z uvedeného popisu vyplývá, že když chci někomu převést peníze, pak musím mít přístup k privátnímu klíči peněženky, mít dostatečný zůstatek (tedy v databázi musí být transakce, ze kterých to plyne) a nějaký horník mi musí transakci zahrnout do bloku. Výpočet bloku probíhá kompetitivně - vezmi hromadu transakcí, které máš po ruce a udělej blok. Je jasné, že ne každému se podaří spočítat takový blok jako prvnímu. "Problém" ale nastane proto, že i ti ostatní spočítají blok a teď se ho pokusí umístit jako další prvek řetězu. Klient si vždy ze všech možných řetězů vybírá ten nejdelší, tedy ten, ve kterém pokračovalo nejvíc horníků. Pomalí hornící blok nedodali včas a tedy už mezitím někdo další začal počítat další blok z toho, který už tam byl dřív a na něj pak navazují další a další bloky. Možná vás napadne, co se stane s penezi, které vydolují pomalejší hornící. V tom je právě to kouzlo - jejich blok není v nejdelším řetězu, tedy transakce nejsou v databázi, tedy ani jeho obsah není v databázi a tedy konečně tam není ani ta odměna za upočítání bloku - nic tedy nedostanou.
Pro klienta to zase znamená, že si může být plně jistý zaúčtováním až když se jeho transakce nachází v dostatečně dlouhém řetězu. Klient toto ukazuje "počtem potrvzení", tedy kolik dalších bloků bylo na blok obsahující transakci navázáno. Pokud je to dostatečně dlouhý řetěz, pak je jistota zaúčtování (musí být alespoň tak dlouhý, aby nebylo v silách rozumného počítače upočítat tak dlouhý blok dost rychle). Může se stát, že transakci nezaúčtuje nikdo - pak ji klient pošle znovu. Délka bloku se liší podle významu transakce, použiju-li slushůvh příklad, pokud si za bitcoiny koupíte vilu, asi vám šest potvrzení nestačí...
Může se stát, že dojde k netsplitu, tedy budou dvě různé sítě a v nich dvě zcela nezávislé databáze bitcoinu. V případě opětovného sjednocení dojde k zániku té kratší a tím i zániku všech transakcí v nich - jak už jsem mnohokrát napsal, existuje jen to, co je v databázi. Databázi tvoří nejdelší řetězec. U většiny transakcí to asi vyřeší klienti (pošlou transakce znovu), ale co když vám za tu vilu už nikdo ty bitcoiny znova nepošle? To je taková nedořešená otázka, přesahující svět bitcoinu.
Tolik asi letem světem k tomu, jak jsem pochopil, že bitcoin funguje. Snad jsem na nic nezapomněl, popsal jsem databázi bitcoinu, bloky, jejich dolování i to, jak fungují transakce a peněženky. Takže pokud vás to neodradilo, happy mining.
Michal Tuláček