21 milionów BTC? Okazało się, że można więcej! Szok! Tym wyrażeniem śmiało można określić to, co zostało odkryte i poprawione w kodzie bitcoin w zeszłym tygodniu.
Więcej, niż 21 milionów BTC
Cała społeczność dociekała, zastanawiała się i analizowała lukę ukrytą przez ostatnie dwa lata w kodzie bitcoin. Problem dotyczył możliwości, do których bug mógł zostać wykorzystany. Światło dzienne ujrzał bowiem fakt, że można było wydobyć więcej, niż 21 milionów BTC, które założył Satoshi Nakamoto. Problem i dyskusja, która nawiązała się po ujawnieniu tego buga stała się iskrą do zastanowienia się, w jaki sposób zapobiegać występowaniu takich i podobnych błędów w przyszłości?
Pierwsza reakcja – woda w ustach. Kilka dni po wykryciu błędu nie podano żadnych formalnych propozycji. Nie oznacza to bynajmniej, ze dyskusja o problemie nie została rozpoczęta. Zaczęto zastanawiać się, jak działa Bitcoin i jakie jeszcze inne błędy skrywa w sobie jego oprogramowanie. W jaki sposób szybko identyfikować te błędy, aby móc je skutecznie rozwiązywać w przyszłości?
Duża porażka
Moderator subreddit’a Bitcoin, wypowiadający się pod pseudonimem „Theymos” zaapelował do społeczności, aby pod żadnym pozorem nie zapominała o ujawnionym bugu. W jednym z postów stwierdził, że błąd „był niezaprzeczalnie poważną porażką” i dodał:
Jeśli wszystkie zasady i praktyki Bitcoin Core pozostaną bez zmian to nieuniknione jest, że podobna awaria w końcu się powtórzy i być może nie będziemy mieli tyle szczęścia (…)
Ta wypowiedź stanowi potwierdzenie, że potrzebny jest solidny przegląd kodu Bitcoin Core. Większy niż jakikolwiek, który miał miejsce do tej pory.
W obecnym stanie rzeczy Bitcoin Core utrzymywane jest przez ogromną, stale rosnącą ilość deweloperów, którzy wnoszą swój wkład do open source’owej bazy kodu bitcoin. Testowania też jest dużo – można zakładać, że testy obejmują prawie 20% kodu.
Mea culpa?
Deweloperzy twierdzą, że można zrobić więcej, aby zapewnić płynność działania cyfrowej waluty. Theymos na przykład sądzi, że jedna z metod będzie stworzenie „bardziej wyrafinowanych” testów dostosowanych do zlokalizowania ciężkich i trudnych do znalezienia błędów – takich, jak chociażby bug z zeszłego tygodnia:
Być może wszystkie duże firmy (…) powinny, zgodnie z oczekiwaniami społeczności, przypisać do Core wykwalifikowanych specjalistów w zakresie testów (…),
Kontynuował, dodając:
Obecnie wiele firm nie przyczynia się do rozwoju Core.
Inny człowiek związany z Bitcoin Core – James Hilliard zwrócił uwagę na tą samą kwestię i dodatkowo podkreślił, że programiści mogą zwiększyć „ilość” i „jakość ” testów. Pewnie łatwiej powiedzieć, niż zrobićJ Greg Maxwell z kolei zgodził się w wątku, który rozpoczął Theymos, że testowanie jest ważne, ale ważna w tym jest przede wszystkim jakość i szczegółowość przeprowadzanych testów:
Kierowanie większego wysiłku na testowanie było dla nas wyzwaniem długoterminowym po części dlatego, że sztuka testowania jest nie mniej trudna, niż jakikolwiek inny aspekt inżynierii systemów. Testowanie obejmuje szczególne zdolności i umiejętności, które nie każdy posiada.
Nie jest łatwo znaleźć dobrych testerów:
Rozwijanie kodu bitcoin w dużej mierze zależy od poprawnego przeglądania kodu i niema zbyt wielu ludzi, którzy są w stanie to zrobić, powiedział Hilliard.
Wielu uważa jednak, ze odpowiedzialność za błędy powinna spoczywać nie tylko na programistach. Jedną z wartości Bitcoina było przecież to, że jako zdecentralizowany projekt jest pozbawiony jakichkolwiek liderów. Utrzymywanie go zatem bez błędów leży w odpowiedzialności wszystkich korzystających.
Szukanie winnych
Często zwraca się uwagę na fakt, że w wielu przypadkach ludzie wskazują na konkretnych deweloperów, by to właśnie im przypisać winę za błędy. To coś w stylu „szukania winnego” – taka już jest ludzka natura. A przecież cały projekt bitcoin jest otwarty, nie istnieje pojęcie „członkostwa”, a użytkownicy ponoszą tak samo dużą odpowiedzialność za kontrolę jakości kodu, jak deweloperzy, którzy działają aktywnie na jego rzecz.
Podobne odczucie podziela również Wladimir van der Laan, związany z Bitcoin Core, który napisał na Twitterze:
To było złe, że zbugowany kod był scalony. Tak – spieprzylismy to, ale „my”, którzy to spieprzyliśmy, to o wiele szersze pojęcie. Spieprzyła to cała społeczność poprzez nie dość dokładne sprawdzanie zmian w ramach konsensusu
Inżynier John Newberry zgodził się. Mimo tego, że nie był on autorem żadnego błędu w kodzie argumentował, że jako deweloper również odegrał w tym jakąś rolę poprzez niezbyt dokładne patrzenie na kod jako całość.
Posunął się nawet do stwierdzenie, że zauważył w kodzie coś „zabawnego”. Założył jednak, że inni już to sprawdzili:
Zamiast weryfikować sam siebie zaufałem, że ludzie mądrzejsi i bystrzejsi ode mnie już się tym zajęli. Uznałem za pewnik, że ktoś inny wykonał pracę. Uznałem za pewnik, że ktoś inny wykonał pracę, stwierdził.
Bitcoin Knots i szukanie rozwiązań
Dzisiaj w bitcoin znajduje się jedno główne oprogramowanie – Bitcoin Core,które obsługuje 95 procent węzłów sieci. Co ciekawe – nie istnieje sposób, aby zobaczyć każdy węzeł bitcoin z osobna, ponieważ niektóre węzły chcą więcej prywatności i nie ogłaszają istnienia w pozostałej części sieci.
Jednym z pomysłów jest zatem próba wprowadzenia większej liczby implementacji kodu bitcoin. W ten sposób, jeśli jedna z implementacji stanie się ofiara jakiegoś błędu, który spowoduje awarię sieci – pozostałe instancje nadal będą działać w porządku, utrzymując całość sieci bitcoin w ryzach.
Do pewnego stopnia takie rozwiązania już istnieją. Działają już, być może mniej znane implementacje kodu, takie jak na przykład Bitcoin Knots i Btcd. W świecie kryptowalut innych, niż Bitcoin, podobne rozwiązania stają się standardem. Ethereum chociażby posiada dwie dominujące implementacje: geth i parity,z których każda może być używana przez każdego, kto korzysta z oprogramowania.
Pomimo tego wielu deweloperów bitcoin wyraża obawę, że dodanie więcej implementacji kodu do Bitcoin Core może spowodować problemy. Te zaś, mogą okazać się jeszcze bardziej dotkliwe, niż luka ujawniona w zeszłym tygodniu:
Wielu ludzi nie zdaje sobie sprawy z tego, że posiadanie różnych implementacji ułatwi atakującym dzielenie sieci – argumentował Andrew Chow na forum bitcointalk. W związku z tym, programiści nie są do końca zgodni odnośnie sposobów działania i strategii w tej sprawie.
Podsumowanie
Bug pozwalający na stworzenie więcej, niż 21 milionów BTC zelektryzował społeczność. Dał również nowe, szerokie pole do zastanowienia się, w jaki sposób radzić sobie z podobnymi zdarzeniami w przyszłości. Theymos bardzo dobrze wyraził to, gdy powiedział:
Nie wiem dokładnie, w jaki sposób można zapobiec wystąpieniu takiego błędu ponownie. Wiem jednak, że błędem społeczności byłoby, jeśli zbagatelizowałaby ten błąd tylko dlatego, że tym razem nic się nie stało.
A jakie jest Twoje zdanie na ten temat?
Co to jest Bitcoin? | Jak działa Bitcoin? | Sprawdź kurs BTC | Giełdy kryptowalut | Portfele Bitcoin