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