Tip:
Highlight text to annotate it
X
Przedstawię teraz fikcyjną transakcję w systemie Bitcoin,
a następnie opiszę, w jaki sposób teoretycznie można oszukać ten system,
dlaczego jest to trudne z matematycznego punktu widzenia
i jaki bodziec ekonomiczny w systemie Bitcoin sprawia,
że ludzie korzystają z niego uczciwie.
Transakcji dokonuje osoba o imieniu Dan.
Dan chce zamówić pizzę z pizzerii prowadzonej przez Pete'a.
Przyjmijmy, że pizzeria akceptuje płatności w bitmonetach
i że pizza kosztuje 1 BTC.
Wyobraźmy sobie, że Dan otrzymał wcześniej 5 BTC od swojej kuzynki Carol.
Tak więc Carol, którą oznaczyłem literą "C", przekazała Danowi 5 BTC.
Tą sumę oznaczymy jako "B" w kółku.
Dan za jedną z tych pięciu bitmonet chce kupić pizzę od Pete'a.
Klient Bitcoin stworzy więc zapis transakcji,
zawierający informację o tym, jak te bitmonety znalazły się w portfelu Dana.
W tym przypadku chodzi o informację o transakcji między nim a Carol,
na 5 bitmonetach.
Ponadto zapis będzie stwierdzał, że Dan chce przekazać jedną z tych bitmonet Pete'owi...
Oznaczę Pete'a literą "P".
...oraz, że Dan zamierza zatrzymać pozostałe 4 bitmonety
jako resztę z tej transakcji.
W systemie Bitcoin zawsze należy określić resztę.
Wszystkie środki z portfela osoby uczestniczącej w transakcji muszą zostać zapisane.
Żadne wartości nie mogą więc znikać, muszą się bilansować.
Niewykorzystane w transakcji środki mogą stanowić resztę,
albo część z nich może zostać użyta jako opłata transakcyjna.
W naszym przykładzie dla uproszczenia założymy,
że opłata transakcyjna nie została wniesiona.
Opłata transakcyjna wynosi zero.
Skupimy się wyłącznie na konkretnej sytuacji,
gdzie wszystkie środki zostają wyliczone w transakcji.
Zapis tej transakcji zostanie ogłoszony
w całym systemie Bitcoin.
Pete otrzyma kopię zapisu tej transakcji.
Jednak oprócz niego
taką kopię otrzymają inni użytkownicy systemu Bitcoin.
Jak wspominałem w poprzednich filmach, istnieją specjalne węzły w systemie Bitcoin,
zwane węzłami generującymi.
Węzły generujące mają za zadanie
sprawdzenie całej transakcji w ujęciu globalnym.
Innymi słowy, przeanalizują one cały zapis transakcji,
który jest jawny
i nazywany jest łańcuchem bloków...
Podpiszę tutaj łańcuch bloków.
...łańcuch bloków zawiera historię
wszystkich transakcji kiedykolwiek przeprowadzonych w systemie Bitcoin
od początku jego istnienia,
czyli od utworzenia pierwszego bloku transakcji, noszącego nazwę bloku genezy.
Każdy ma możliwość zweryfikowania którejkolwiek transakcji,
ponieważ informacje o nich są jawne.
Węzły generujące w szczególności sprawdzą
czy Dan rzeczywiście otrzymał od kogoś 5 bitmonet,...
W tym przypadku ta osobą była Carol.
...czy Dan próbował wcześniej użyć tych monet w innej transakcji,
i tym podobne.
Wszystkie węzły generujące starają się przeanalizować każdą niedawną transakcję,
która do tej pory nie została zaksięgowana.
Nie chodzi wyłącznie o transakcje między Danem a Petem,
ale także inne niezapisane transakcje,
przeprowadzone mniej więcej w tym samym czasie.
Węzły generujące jednocześnie przeanalizują wszystkie te transakcje
i postarają się utworzyć z nich nowy blok transakcji.
Następnie będą chciały dodać ten blok
do istniejącego łańcucha bloków.
Wspominałem w poprzednich filmach,
że aby węzeł generujący mógł dodać blok transakcji do łańcucha,
musi rozwiązać tak zwaną łamigłówkę proof of work.
System Bitcoin został stworzony w ten sposób,
że łamigłówka jest rozwiązywana przez jeden z węzłów średnio co 10 minut.
Trzeba podkreślić, że może upłynąć dużo czasu
zanim konkretny węzeł generujący rozwiąże łamigłówkę...
Może to być nawet rok albo dwa lata.
...ale ponieważ tak duża liczba węzłów jednocześnie szuka rozwiązania,
jeden z nich ma szansę znaleźć je szybko.
Każda łamigłówka proof of work
przypisana do bloku transakcji
posiada swój własny współczynnik stopnia trudności.
Współczynnik ten wskazuje, jak dużo wysiłku trzeba było włożyć w rozwiązanie tej łamigłówki.
Wyobraźmy sobie, że są to konkretne wartości,
które ukazują
najaktualniejszy wskaźnik stopnia trudności.
Wartości te w pewien sposób obrazują,
ile pracy trzeba było włożyć w rozwiązanie danej łamigłówki.
Kiedy weźmiemy pod uwagę cały łańcuch,
system Bitcoin zwraca uwagę na to
jak dużo pracy zostało włożone w stworzenie tego łańcucha.
Jest to istotne dlatego,
że stopień trudności dla całego łańcucha,
czyli suma stopnia trudności bloków,
jest brany pod uwagę przez Pete'a i inne osoby, które otrzymują bitmonety
i pomaga im określić, czy transakcja jest uczciwa i wiarygodna.
Im więcej pracy włożono w stworzenie całego łańcucha,
tym większe zaufanie można mieć do transakcji.
Zależność ta wynika z konstrukcji samego systemu Bitcoin.
Jeśli kiedykolwiek w systemie znajdzie się więcej niż jeden łańcuch bloków...
Powiedzmy, że wynika to ze szkodliwego działania użytkownika
albo z tego, że ktoś nie otrzymał na czas danej wiadomości,
lub z innych powodów.
Jeśli kiedykolwiek w systemie znajdzie się więcej niż jeden łańcuch bloków,
zgodnie z protokołem Bitcoin, wszyscy mają za zadanie uznawać łańcuch,
w stworzenie którego włożono najwięcej pracy.
Należy zignorować łańcuchy, przy których wykonano mniejszą pracę
i brać pod uwagę tylko łańcuch, w stworzenie którego zostało włożone najwięcej pracy.
W systemie Bitcoin taki łańcuch nazywany jest najdłuższym łańcuchem.
W tym przypadku terminologia jest myląca,
ponieważ najdłuższym łańcuchem nie nazywamy tu łańcucha długiego w sensie fizycznym.
Mamy na myśli...
Postawię znak równości i dopiszę znaczenie tego zwrotu.
Pod tym pojęciem rozumiemy łańcuch, w stworzenie którego włożono najwięcej pracy.
Ilość pracy określamy właśnie za pomocą współczynników poziomu trudności.
Należy je zsumować, aby uzyskać współczynnik dla całego łańcucha.
Teraz skupimy się na łańcuchu, w stworzenie którego włożono najwięcej pracy
i będziemy go nazywać najdłuższym.
Wyobraźmy sobie, że Dan jest nieuczciwy
i po zjedzeniu pizzy...
Powiedzmy, że Pete uznał transakcję,
otrzymał od Dana bitmonetę, odczekał jakiś czas,
zaobserwował długi łańcuch, który zawiera tą transakcję,
wysłał pizzę do Dana,
Dan zjadł pizzę,
po czym zdecydował, że nie chce być uczciwy,
chce oszukać Pete'a albo cały system.
Dan może spróbować oszukać system
poprzez próbę stworzenia kolejnej transakcji,
w której przekazuje 5 bitmonet, które dostał od Carol, komuś innemu.
Przyjmijmy, że ta osoba ma na imię Fred.
Fred może być alter ego Dana, albo jego przyjacielem.
Tożsamość Freda nie ma znaczenia,
ponieważ wiemy, że nie jest on prawowitym właścicielem tych bitmonet.
Dan będzie próbował ponownie przeprowadzić transakcję na 5 btmonetach od Carol
i w ten sposób przekazać je Fredowi.
Takie zachowanie nie jest dozwolone,
ponieważ w ten sposób Dan dwukrotnie wydałby te same bitmonety,
tak jakby cały czas był ich właścicielem.
Jedna z tych transakcji musi zostać uznana za nielegalną.
Druga natomiast powinna być zaakceptowana.
Warto pamiętać, że jeśli Dan próbowałby dwukrotnie wydać te same bitmonety,
ale nie próbowałby ukryć tego faktu,
wszyscy użytkownicy zauważyliby, że Dan działa nieuczciwie,
ponieważ w najdłuższym łańcuchu bloków,
czyli łańcuchu istniejącym od powstania systemu,
znajduje się zapis o tym, że Dan wydał już te bitmonety
i nie wolno mu robić tego ponownie.
Aby oszukać system, Dan musi stworzyć inny łańcuch bloków,
który będzie zawierał zapis drugiej transakcji,
czyli przekazania pieniędzy Fredowi,
pominie natomiast zapis transakcji między Danem a Petem.
Dan będzie miał nadzieję, że pozostali użytkownicy uznają ten nowy łańcuch.
Ponieważ w systemie Bitcoin wszyscy uznają ten łańcuch bloków,
w stworzenie którego włożono najwięcej wysiłku,
czyli najdłuższy łańcuch,
Dan ma potencjalne szanse na oszukanie systemu.
Zastanówmy się, jakie jest prawdopodobieństwo, że mu się to uda.
Żeby Dan mógł przeprowadzić swój plan,
musi zacząć od wcześniej istniejącego łańcucha bloków
i spróbować dodać do niego swoją transakcję.
Nie chodzi tutaj o wcześniejszą transakcję
między nim a Petem,
ale o nieuczciwą transakcję z Fredem,
którą Dan będzie chciał stworzyć i dodać do łańcucha.
W nowym bloku znajdzie się więc nieuczciwa transakcja między Danem a Fredem.
W żargonie Bitcoin takie zjawisko nazywane jest rozwidleniem łańcucha.
Oznacza to, że w systemie istnieje więcej niż jedna wersja historii posiadania bitmonet.
Innymi słowy, ktoś próbuje przerabiać historię lub ukryć swoje ślady
i zmienić to, co zostało wcześniej zapisane.
Oznacza to, że mamy do czynienia z wieloma wersjami wydarzeń.
W naszym przykładzie, jedno odgałęzienie jest prawdziwe,
a drugie fałszywe.
Prawdziwe odgałęzienie zawiera zapis o transakcji między Danem a Petem,
a fałszywe zapis o kolejnej transakcji,
w wyniku której Dan chce przekazać Fredowi te same bitmonety.
Oczywiście każdy nowy blok transakcji dodawany do łańcucha
musi zawierać łamigłówkę proof of work,
dokładniej jej rozwiązanie.
W przeciwnym wypadku, taki łańcuch nie zostanie przez nikogo uznany.
Jeśli Dan chce oszukać system,
musi sam w tajemnicy rozwiązać nową łamigłówkę proof of work.
Niestety zaczyna on z przegranej pozycji,
ponieważ istnieje już dłuższy,
uznawany przez wszystkich łańcuch.
Ponieważ dłuższy łańcuch istnieje,
inne węzły mogły już zacząć tworzyć nowe bloki na jego podstawie.
Średnio co 10 minut jeden z węzłów dodaje blok do łańcucha.
W systemie mamy więc dłuższy łańcuch transakcji,
a Dan chce stworzyć swój własny fałszywy łańcuch.
Aby taki łańcuch wyglądał na wiarygodny,
musi stać się najdłuższym łańcuchem.
Dan musi więc rozwiązać wszystkie te łamigłówki
aby stworzyć dłuższy łańcuch.
Innymi słowy, musi sam stworzyć dłuższy łańcuch
i zdystansować istniejący ciąg proof of work.
Oznacza to, że będzie musiał rozwiązać nie jedną łamigłówkę,
ale prawdopodobnie kilka łamigłówek
aby stworzyć łańcuch dłuższy od obecnie istniejącego.
Jeśli to osiągnie i sprawi, że inni użytkownicy uznają jego łańcuch...
Z pewnością będzie do tego dążył,
ponieważ nowy łańcuch zawiera jego nieuczciwą transakcję
i pomija poprzednią, w wyniku której przekazał pieniądze Pete'owi.
Aby rozwiązać łamigłówkę proof of work, Dan musi wykorzystać całą dostępną moc obliczeniową
i z jej pomocą szukać prawidłowego rozwiązania.
Nie ma tutaj żadnej drogi na skróty.
W poprzednich filmach wspominałem,
że znalezienie takiego rozwiązania jest jak wygrana na loterii.
Jest to możliwe, ale zależy od ilości dostępnej mocy obliczeniowej.
Im większa moc obliczeniowa, do której mamy dostęp,
tym więcej mamy kuponów na loterię.
Nawet jeśli ktoś ma tylko jeden kupon, ma szansę na główną wygraną,
ale jest to o wiele mniej prawdopodobne,
niż w przypadku osoby posiadającej wiele kuponów.
Nawet jeśli raz uda nam się wygrać loterię posiadając małą liczbę kuponów,
prawdopodobieństwo wielokrotnego powtórzenia takiej sytuacji
jest bardzo niskie.
Dan staje właśnie przed takim zadaniem.
Musi kilkakrotnie wygrać loterię,
aż stworzy dłuższy łańcuch.
Kluczowa jest tutaj ilość mocy obliczeniowej, do której dostęp ma Dan
w stosunku do sumy mocy obliczeniowej, którą posiadają wszystkie uczciwe węzły.
Jeśli uczciwe węzły...
Nazwijmy to "uczciwą mocą obliczeniową".
Pod pojęciem "uczciwej mocy obliczeniowej" rozumiemy sumę mocy obliczeniowej
wszystkich uczciwych węzłów generujących w systemie.
Jeśli ta moc obliczeniowa
jest większa niż moc obliczeniowa, do której dostęp ma Dan,
czyli moc obliczeniowa Dana,
system Bitcoin jest bezpieczny,
ponieważ Danowi będzie niezwykle trudno stworzyć fałszywy łańcuch bloków,
gdyż nie wyprzedzi uczciwych użytkowników w znajdowaniu rozwiązań proof of work.
Uczciwi użytkownicy będą częściej wygrywać na loterii, więc stworzą dłuższy łańcuch.
Zadanie Dana będzie bardzo trudne.
Możliwe, że Dan będzie miał dostęp do dużej mocy obliczeniowej,
może jest bardzo bogaty, albo posiada duże zasoby.
Jednak aby odnieść sukces, potrzebuje naprawdę ogromnej mocy.
Większej niż wszyscy uczciwi użytkownicy razem wzięci.
Jest to pierwszy aspekt, świadczący, że łańcuch bloków jest bezpieczny.
Bardzo mało prawdopodobne, aby jedna osoba miała dostęp do tak ogromnej mocy obliczeniowej.
Istnieje jednak drugi aspekt, zapewniający bezpieczeństwo systemu Bitcoin.
Jeśli Dan miałby dostęp do tak dużej mocy, która pozwoliłaby mu rozwiązać wszystkie łamigłówki,
zamiast podejmować ogromny wysiłek w celu rozgałęzienia łańcucha,
stworzenia zapisu nieuczciwej transakcji itp.,
Dan prawdopodobnie osiągnie większe korzyści
wykorzystując swoją moc obliczeniową do uczciwego generowania bitmonet.
Jak wcześniej wspominałem, węzły generujące
otrzymują nagrodę...
Za przyłączenie bloku otrzymują określoną liczbę bitmonet.
...oraz inkasują opłatę transakcyjną za wszystkie transakcje z danego bloku.
Tak więc istnieje ekonomiczny bodziec, skłaniający Dana do uczciwego postępowania.
Pozwolę sobie krótko podsumować.
O bezpieczeństwie transakcji na bitmonetach
świadczy, po pierwsze, bariera obliczeniowa,
która utrudnia Danowi rozgałęzienie łańcucha bloków w nieuczciwy sposób,
a także bodziec ekonomiczny, skłaniający go do uczciwego zachowania
i samodzielnego generowania bitmonet.