BIP-119 wprowadził w Bitcoina zamieszanie. Propozycja modernizacji protokołu Bitcoin, po kilku latach spokoju ponownie zwróciła wzrok społeczności Bitcoin, w stronę koncepcji decentralizacji. Ta historia ilustruje, jak wielopłaszczyznowym problemem jest decentralizacja i jak wiele istnieje nieoczywistych problemów do rozwiązania w otwartej sieci blockchain, aby sieć ta mogła poprawnie funkcjonować. W tym artykule:
  • przedstawię, na czym polega BIP-119, kontrowersyjna propozycja softforka do protokołu Bitcoin
  • opiszę na przykładzie, jak wdrożyć zmianę typu softfork do sieci blockchain, prezentując grupy interesów w blockchainie publicznym i zależności między tymi grupami

Czym jest BIP-119?

Sprawa dotyczy Jereremiego Rubina, developera Bitcoina. Przedstawił on BIP-119, propozycję dodania nowej funkcjonalności w Bitcoinie, która umożliwi, a właściwie rozszerzy możliwości definiowania tzw. covenants, czyli ograniczeń na transakcję. Softfork wprowadza nową operację do języka skryptowego Bitcoin: OP_CHECKTEMPLATEVERIFY zastępując niewykorzystany obecnie kod OP_NOP4. BIP, czyli Bitcoin Improvement Proposal to określenie na propozycję wprowadzenia zmiany, czy nowości do blockchaina Bitcoin. To nieformalny dokument, który opublikowany online (na Githubie) konfrontowany jest ze społecznością blockchaina Bitcoin, czyli użytkownikami, górnikami, giełdami, czy programistami. BIP-119 to kontrowersyjna propozycja, która spotkała się z dużą ilością sceptycyzmu. Wynika to z idei działania, a także propozycji jej wdrożenia.
Komentarz Adama Backa, CEO Blockstream dotyczący BIP-119, udostępniony przez Pettera McCormacka, twórcy podcastu What Bitcoin Did
Komentarz Andreas Antonopoulos do BIP-119: https://www.youtube.com/watch?v=vAE5fOZ2Luw&ab_channel=aantonop

Czym są covenants - ograniczenia transakcji?

Czym są covenants? Bitcoin celowo nie posiada możliwości tworzenia złożonych smart contractów, tak jak Ethereum, ale jego prosty język skryptowy umożliwia tworzenie ograniczeń na przesył transakcji, w taki sposób, że np. Bitcoiny da się przesłać, tylko posiadając podpisy od kilku osób (czyli klasyczne multi-sig) lub Bitcoiny da się przesłać tylko w określonym momencie w przyszłości, po wykopaniu określonego bloku. BIP-119 to propozycja rozszerzenia możliwości definiowania ograniczeń na transakcję, w taki sposób, że np. da się zdefiniować transakcję, która następnie będzie mogła być wykorzystana tylko przez inną konkretną transakcję. Na przykład wyślę na adres 1 BTC, ale to 1 BTC będzie mogło być wydane tylko przez konkretną transakcję np. tylko do konkretnie wskazanych adresów. Mechanizm umożliwia kilka przydatnych use-case'ów. Na przykład rozwiązuje w pewien sposób problem zatłoczonych transakcji. Przykład to giełda kryptowalut, która musi wysłać drogą transakcję do blockchaina w godzinach szczytu (wypłata do użytkowników), gdzie opłaty są wysokie. Wykorzystując BIP-119, giełda osiągnie ten efekt poprzez 2 transakcje:
  • pierwsza transakcja, zawiera mało danych, (nie wysyła jeszcze środków do docelowych odbiorców) przez co jest tania, ponieważ ilość odbiorców zwiększa rozmiar transakcji, co ma wpływ na ostateczną opłatę za transakcję (zwłaszcza gdy wiele innych transakcji też jest wysyłanych, czyli tzw. godziny szczytu). Tą transakcję można opisać następująco: wysyłam 100 Bitcoinów, które w przyszłości będą mogły być wysłane tylko do konkretnych adresów.
  • druga transakcja wykonuje przesył środków do konkretnych odbiorców, przy czym mechanizm skonstruowany jest w taki sposób, że ta druga transakcja wykorzystuje wcześniej wysłaną transakcję pierwszą, której wysłane środki są możliwe tylko do wykorzystania przez transakcję drugą. Druga transakcja jest większa, ale giełda wysyła ją w momencie, gdy opłaty w blockchainie są niskie, przez co kolektywnie mechanizm daje oszczędność i pozwala utylizować blockchain, gdy opłaty są niskie.
Społeczność Bitcoin jest aktualnie raczej sceptyczna do możliwości, jakie Bitcoin wprowadziłby, gdyby BIP-119 funkcjonowało. Istnieją założenia, że firma Jeremiego Rubina - Judica, może zyskać finansowo na wprowadzonej zmianie, natomiast nie do końca wiadomo ile wartości (albo problemów) zmiana doda w innych zastosowaniach. Temat jednak prowokuje ciekawy problem, który chciałbym wyjaśnić.

W jaki sposób wprowadzić zmianę w sieć blockchain? Decentralizacja w praktyce.

Proponowana modernizacja protokołu Bitcoin z BIP-119 to softfork. Oznacza to, że nie łamie zasad konsensusu. Węzły, które nie zaktualizują się do wersji zawierającej zmiany, nadal będą w stanie poprawnie otrzymywać bloki z sieci, nawet te zawierające zmiany z softforka. Węzły, które zaktualizują się nowych reguł, mają nowe możliwości i są nadal w stanie przetwarzać transakcje od starych węzłów.
Zmiany w sieci blockchain to temat wielopłaszczyznowy. Wprowadzanie zmian wymaga koordynacji uczestników sieci i jest grą interesów, w której idealnym przypadkiem jest pełna zgoda wszystkich grup interesów.
Żeby jednak w praktyce pokazać, w jaki sposób działa wprowadzanie zmian w blockchain i przedstawić wspomnianą koncepcję gry interesów - opiszę proces wprowadzania do sieci blockchain zmiany typu softfork. Pozwoli to zrozumieć, jak trudny jest to w praktyce proces i jak odporny przez to na manipulacje jest blockchain.

Kod źródłowy

Wszystko zaczyna się od kodu źródłowego, który tworzą programiści, w tym przypadku programiści Bitcoina (do których autor BIP-119 - Jeremi należy). Kod Bitcoina jest publiczny, istnieje kilka niezależnych implementacji, a nad jego rozwojem pracują programiści z całego świata. Proces wprowadzania zmian do publicznego kodu (który jest na Githubie), podlega wielu powszechnie wykorzystywanym zabezpieczeniom: pojedynczy developer nie jest w stanie wprowadzić poprawki, podobnie nieautoryzowany użytkownik nie wprowadzi zmian. Zaproponować zmianę (jako BIP), może każdy. Wprowadzić zmianę do swojej lokalnej kopii kodu Bitcoina też może każdy. Natomiast wprowadzenie zmian do publicznej wersji kodu Bitcoina, wymaga aprobaty programistów. Należy jednak zauważyć, że nie istnieje jedno repozytorium Bitcoina, które w momencie buntu programistów próbujących zniszczyć protokół - spowoduje zniszczenie Bitcoina. Programiści Bitcoina kooperują ze społecznością i nawet jeśli programiści tworzą kod, następnie wydają wersję węzła Bitcoina, to społeczność ostatecznie instaluje węzeł Bitcoina, zbudowany na bazie kodu, który jest spójny z decyzjami społeczności. Dlatego rozwój Bitcoina skoordynowany jest z potrzebami społeczności, a nie tylko i wyłącznie wolą programistów rozwijających kod Bitcoina. Co dzieje się ze zmianą typu softfork, która trafia do publicznego repozytorium kodu Bitcoina?

Węzły

Z kodu budowany jest węzeł blockchain, czyli podstawowy element sieci blockchain. To węzły przetwarzają dane blockchaina, to węzły tworzą sieć blockchain. Węzły uruchamiają użytkownicy Bitcoina, giełdy, górnicy. Uruchomić go może każdy. Jeśli uczestnicy sieci blockchain zgadzają się ze zmianami, które zostały wprowadzone do blockchaina - mogą zaktualizować swój węzeł, uruchamiając nową wersję, wydaną przez programistów. W tym momencie widać, jak działają grupy interesów. Społeczność uruchamia nowe wersje węzłów nie dlatego, że muszą, tylko dlatego, że chcą i mogą. Programiści Bitcoina nie mogą wyegzekwować na użytkownikach zainstalowanie konkretnej wersji węzła, uruchomienie konkretnych zmian - programiści są na usługach węzłów, nie odwrotnie. To decentralizacja, a przynajmniej jeden z jej aspektów. Brak możliwości wyegzekwowania na węzłach jakiejkolwiek zmiany powoduje, że nawet jeśli powszechnie przyjęta zmiana zostanie uruchomiona, to w praktyce pozostanie część węzłów, która zmiany nie uruchomi (i nie szkodzi, ponieważ te węzły nadal będą poprawnie działać). Opisujemy przypadek, w którym większość sieci aprobując zmiany, zaktualizowała się do wersji węzła, zawierającej softfork. To oznacza, że węzły mają nowe możliwości np. potrafią tworzyć transakcje specjalnego typu (tak jak np. w opisywanym BIP-119). Co dalej? Czy to wystarczy? Niekoniecznie. Większość węzłów ma możliwości, natomiast istnieje grupa uczestników sieci, których aktualizacja w tym momencie ma znaczenie: to węzły górników.

Górnicy

Wielokrotnie podkreślam, że władza górników jest ograniczona, ponieważ górnicy są na usługach sieci blockchain. Ich celem jest zabezpieczanie sieci i tworzenie nowych bloków, ponieważ są za to wynagradzani. Jednak fakt, że górnicy tworzą nowe bloki, sprawia że posiadają pewną formę władzy, nad stanem blockchaina. Teoretycznie w przypadku zmian typu softfork, górnicy nie aktualizując węzłów do wersji zawierającej softfork, nie łamią konsensusu, więc sieć powinna ich poprawnie wynagradzać za wykonaną pracę. Istnieją jednak mechanizmy zabezpieczające sieć przed niepodążaniem górników za "wolą" większości. Górnicy, którzy rozwiązali zagadkę - tworzą nowy blok. Wykorzystując własne węzły, publikują go do sieci. Blok zawiera transakcje, które górnicy postanowili w tym bloku zawrzeć. Zawarcie transakcji w bloku wymaga od górników przetworzenia transakcji, na własnych węzłach. Jeśli górnicy nie zaktualizują swoich węzłów do wersji, która zyskała aprobatę sieci, czyli takiej, na której działa większość węzłów w sieci - nie będą w stanie poprawnie zapisać w bloku transakcji, których "poprawnie" przetworzonych oczekują węzły w sieci. Rezultat może być taki, że sieć odrzuci taki blok - ponieważ nie jest on poprawny, a to oznacza dla górników stratę. Zależność górników względem sieci blockchain zmusza ich niejako do działania w sposób, w jaki oczekuje sieć, nawet w przypadku zmian typu softfork. Ostatecznie górnicy, chcąc uczestniczyć w sieci, aktualizują swoje węzły do wersji zawierającej softfork, czyli takiej, jaką aprobuje sieć.

Sieć działa według nowych reguł

Większość węzłów w sieci posiada węzły w wersji zawierającej softfork. Górnicy podążyli za wolą większości sieci, ponieważ nie chcieli ryzykować odrzuceniem ich bloków (poprzez brak aktualizacji) i generują bloki wg reguł z softforka. Węzły, które się nie zaktualizowały (nie wnikając w powody), poprawnie przetwarzają bloki tworzone według nowych reguł. Zmiana została sukcesywnie wdrożona.

Czy zmiana z BIP-119 została wprowadzona?

Zmiana z BIP-119 nie została wprowadzona do sieci blockchaina Bitcoin i pewnie przez jakiś czas nie zostanie wprowadzona. Jeremi zaproponował tzw. Speedy Trial Activation, co oznacza, że to górnicy mieli najpierw zasygnalizować, czy zgadzają się z wprowadzoną zmianą. Proces ten pozwala ocenić aprobatę sieci, w tym przypadku górników na proponowaną zmianę. Polega to na tym, że górnicy, wykopując bloki, dodają do bloku danych pewną informację, sygnalizując czy zgadzają, lub nie zgadzają się ze zmianą. Ta dodana informacja, oczywiście nie powoduje błędu u węzłów, które otrzymają nowy blok od górników. Służy to zbadaniu aprobaty górników w proponowanym softforku. Wspomniałem, że jest to softfork, co oznacza, że górnicy mogą tworzyć bloki, w których znajdują się transakcje uwzględniające zmianę z softforka, a niezakatualizowane węzły tworzące sieć nie odrzucą bloku (konsensus zachowany). Softfork nie łamie konsensusu, więc zmiana jest możliwa. Tak - jest to forma "władzy" jaką górnicy posiadają nad protokołem, ponieważ zmiany nie łamiące zasad konsensusu, są możliwe do egzekwowania przez górników. Nadal jednak zgodnie z opisem wyżej, możliwe jest odrzucenie przez węzły sieci bloków niełamiących konsensusu, ale takich, które np. nie przetwarzają transakcji według zmian z softforka, oczekiwanych przez sieć. To odrzucenie nie dzieje się automatycznie, natomiast gdyby taki stan miał się utrzymać i górnicy nie chcieliby podążyć za wolą społeczności sieci blockchain, dodanie pewnych programowych zmian do węzłów, może spowodować, że sieć przestanie akceptować bloki górników. Ostatecznie zmiana BIP-119 została odrzucona, jeszcze przed uruchomieniem Speedy Trial Activation, ponieważ developerzy i społeczność chcą więcej czasu na analizę optymalnych rozwiązań umożliwiających osiągnięcie efektów, jaki daje BIP-119. Kwintensencja filozofii Bitcoina: zmiany muszą być optymalne, najlepsze i kompatybilne wstecz.

Co jest wyjątkowego w propozycji BIP-119?

Przez BIP-119 społeczność Bitcoina ponownie zwróciła wzrok na koncepcję decentralizacji. Ostatnia podobna sytuacja dotyczyła zmiany SegWit, która wdrożona została do blockchaina Bitcoin w 2017 roku. Istniał wtedy poważny konflikt interesów między uczestnikami sieci. Historia tych wydarzeń opisana jest w książce o intrygującej nazwie The Blocksize War.
Okładka książki The Blocksize War, Jonathana Bier.
Niedawna aktualizacja w Bitcoinie, czyli Taproot - to duża zmiana w protokół, która uniknęła jakichkolwiek problemów, ponieważ spotkała się z aprobatą właściwie całego środowiska Bitcoin. Przypadek BIP-119 był jednak inny. Blockchain - działanie sieci, zarządzanie nią, wprowadzanie zmian to skomplikowany temat. Dotyczy to każdego blockchaina, a ze względu na swoją złożoność wprowadzanie zmian w innych sieciach może być problemem jeszcze większym, niż Bitcoinie. Zmiany w blockchainie są i będą, bo blockchain ewoluuje. Pytanie, czy znajdą się optymalne sposoby rozwiązania pewnych konfliktów interesów. Bitcoin przechodził wiele podobnych prób, które w kilku przypadkach skończyły się stworzeniem alternatywnych, niszowych projektów, które nie chciały dopasować się do większości (Bitcoin Cash, Bitcoin SV). Idealnym przypadkiem jest zgoda wszystkich uczestników sieci, co jest właściwie utopijną mrzonką, niewątpliwie jednak fascynującą.