Ostatnim z bardzo ważnych elementów,
które trzeba poznać, by zrozumieć działanie Bitcoina,
jest tzw. łańcuch bloków (blockchain). Poprzednio rozpatrzyliśmy
przykład użytkowniczki Alicji, która chciała przesłać trochę bitcoinów
innemu użytkownikowi, Bobowi. Żeby rozpocząć transakcję,
Alicja musiała skonstruować zapis zawierający informacje
o transakcji i podpisać go
przy użyciu klucza podpisu. Zapis zawierał też publiczny
klucz weryfikacyjny Alicji oraz publiczny klucz
weryfikacyjny Boba. Te dane transakcji
zostały rozesłane, jak wspomnieliśmy,
po całym systemie Bitcoin, do wszystkich węzłów
sieci peer-to-peer. W Bitcoinie
znajdują się rozmaite węzły. Otrzymają informacje
o tej transakcji. A także informacje
o wielu innych transakcjach odbywających się w tym czasie. Węzły zaczną pracować nad włączeniem zapisu
tej transakcji do księgi wszystkich transakcji, do których kiedykolwiek
doszło w systemie. Każdy węzeł najpierw bierze dane wszystkich nowych transakcji,
które do niego dotarły. Czyli wszystkich, do których doszło
w określonym przedziale czasowym. Chodzi o te wszystkie bitcoinowe
transakcje wokoło. Te węzły, nazywane kopalniami, otrzymają informacje
o transakcjach i zaczną je odnotowywać. Pierwszy cel
- to połączyć te transakcje w tzw. blok. W analogii do księgi rachunkowej... jedna transakcja bitcoinowa odpowiada jednemu wpisowi. Natomiast blok
odpowiada całej stronie, z licznymi transakcjami,
które tam wyszczególniono. Celem kopalni jest dodanie tej strony do globalnej księgi rachunkowej. Żeby wykonać to zadanie,
węzły biorą wszystkie rozesłane transakcje.
Powiedzmy, że to te cztery. Węzły zhaszują te transakcje parami. Powstanie drzewo. Zastosują do tych transakcji
kryptograficzną funkcję skrótu. Uzyskają więc skrót. Podobnie zrobią z tymi transakcjami,
zhaszują te skróty i uzyskają jeden, ostatni skrót. Koduje on wszystkie transakcje jeszcze niezarejestrowane, które dotarły
do poszczególnych węzłów. Zostanie połączony ze skrótem bloku transakcji zaakceptowanych przez sieć. Wyobraźcie sobie... Sieć będzie zawierać serię bloków,
które już zaakceptowano. Każdy blok, jak wspomniałem,
zawiera blok poprzedni. Ten będzie zawierał
blok wykorzystany tuż przed tym, a ten - jeszcze wcześniejszy, i tak dalej,
dosłownie do początków Bitcoina. Tutaj zaczął się
czas dla systemu Bitcoin. Tu mamy czas zerowy
dla Bitcoina. Węzły wezmą ten ostatni blok i... połączą go z najnowszym. Zatem mamy tu
nie tylko pojedynczy blok, bo każdy blok zawiera w sobie
ten poprzedni. Nie mamy do czynienia
z oddzielnymi blokami, ale z łańcuchem bloków, który zaczyna się
u samych początków Bitcoina. Te połączenia zakończycie
kryptograficznym haszowaniem. Uzyskacie ciąg liczb. Ten ciąg powstanie z łączenia bloków. Będzie zatem ciąg. Weźmiemy ten ciąg liczb i przekształcimy go
w ciąg zapytań w protokole "proof of work". Zrobiłem oddzielny film
o tym protokole. Obejrzyjcie go, żeby poznać
mechanizmy działania. W skrócie: kopalnia musi teraz wziąć bitcoin... bierze ciąg zapytań i stara się uzyskać inny ciąg liczb, który nazywamy dowodem pracy. Musi on mieć pewną
właściwość matematyczną. Chodzi o to że jeśli weźmiecie liczby z ciągu zapytań
i liczby z dowodu, połączycie je i wprowadzicie
do kryptograficznej funkcji skrótu, to wynik ma mieć
długi prefiks z samych zer. Cały nie musi składać się z zer,
ale duża część, na początku - tak. Pomyślcie: ponieważ wyniki kryptograficznych
funkcji skrótu wyglądają na losowe, to jest nieprawdopodobne,
że od razu dostrzeżecie dowód. Proponowany dowód
z długim ciągiem zer na początku. Górnik musi więc, przeciętnie, wypróbować wiele możliwości
szukając dowodu, aż natknie się na ciąg mający tę dziwną
statystyczną właściwość. Jak się domyślacie,
trudność ze znalezieniem tych liczb zależy od tego,
ile dokładnie zer ma mieć ciąg. Im więcej zer
wymaganych jest w dowodzie, tym więcej trzeba czasu
na znalezienie dowodu pasującego do danego ciągu zapytań. Im mniej trzeba zer,
tym mniej czasu to zajmie. Konkretna liczba... bitów równych 0
wymaganych w protokole zmienia się. Jest ustalana tak, by, przeciętnie, czas poświęcony szukaniu w systemie wynosił około 10 minut. Zatem trzeba 10 minut, by co najmniej jeden węzeł
podał prawidłowy dowód. Pamiętajmy,
że wiele węzłów pracuje jednocześnie. Gdy dowód pracy zostanie znaleziony...
powiedzmy, że tak się stało... kopalnia ogłasza wyniki
w całej sieci peer-to-peer. Weźmie dowód oraz cały ciąg zapytań i roześle je do wszystkich węzłów.
Węzły powiedzą: "Hej, ktoś znalazł dowód. Rzućmy inną robotę i zacznijmy budować coś
na tym nowym dowodzie". Pamiętajcie, nowy dowód zawiera
wszystkie poprzednie bloki. Węzły zaczynają pracę nad nowym, uaktualnionym
łańcuchem bloków. Przyjmą do tego łańcucha
nowe niezarejestrowane transakcje. Parę spostrzeżeń. Po pierwsze, konstruując te bloki i włączając je do łańcucha, kopalnie otrzymują
małą nagrodę. Wolno im włączyć do bloku specjalną transakcję
tylko dla siebie. Będzie to nagroda... nagrodę zaznaczę na zielonkawo. Mogą wziąć pierwszy blok, pierwszą transakcję, jej zapis, i do tego zapisu
dodać nagrodę dla siebie. Wielkość nagrody zmienia się. Chciałbym dodać,
że transakcję nazywa się transakcją monetarną
albo transakcją generowania. Tak nowe monety
zostają wprowadzone do systemu. Gdy kopalnia
zdoła przedstawić dowód, może dopisać własną transakcję, aby wręczyć sobie nagrodę za wysiłek konieczny
do podania dowodu i za wykonanie pracy z dodawaniem nowego bloku do istniejącego łańcucha. To rozsądne. W końcu węzły
używają dużo mocy obliczeniowej, by znaleźć te dowody. A zużywanie
mocy obliczeniowej oznacza, że ktoś gdzieś
wydaje pieniądze na prąd itd. Chcę również zauważyć,
że prócz monetarnej nagrody węzły-kopalnie,
te, które znajdą dowód, mogą też wziąć opłatę transakcyjną
określoną w zapisie transakcji. Jeśli pamiętacie, osoba
zawierająca transakcję może odłożyć pewną ilość
pieniędzy, np. bitcoin lub jego ułamek, dla węzła, który poda prawidłowy dowód pracy. Ten węzeł może dodać
transakcję do łańcucha bloków. Węzeł, który wykona tę pracę,
otrzymuje nagrodę: kolejną opłatę transakcyjną.
Nagroda może być spora, bo węzeł dostanie nie tylko opłatę
transakcyjną przed jedną transakcją, ale też za wszystkie transakcje,
które pojawiły się w bieżącym bloku. Opłata będzie dotyczyć
transakcji połączonych. Druga uwaga: jest możliwe, że dwa węzły niezależnie poradzą sobie
z dowodem pracy. I oba spróbują go dodać
do istniejącego łańcucha bloków. Może dojść do dziwnego
rozwidlenia. W takiej sytuacji
węzły sieci Bitcoin wychodzą z impasu, wybierając dłuższy łańcuch. Nie taki, który zawiera
najwięcej transakcji, tylko taki, gdzie włożono
najwięcej wysiłku w wykonanie protokołu "proof
of work" w każdym z bloków. Rozważymy więc całkowity wysiłek
włożony w wygenerowanie łańcucha odnoszącego się do dowodu pracy.
Łańcuch skojarzony z największą ilością pracy
akceptują wszyscy. Możecie zauważyć rozbieżności
z powodu opóźnień w sieci, ale idea jest taka, że po kilku rundach
te "remisy" rozwiązują się same, o ile większość węzłów zachowuje się
uczciwie i wdraża protokół. Ponieważ kopalnie generują bitcoiny,
pojawia się pytanie o kontrolę
podaży pieniądza w Bitcoinie, i o zarządzanie środkami.
Omówię to w następnym filmiku.