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