Czym jest łańcuch bloków

  • April 22nd, 2024
  • General
  • 0 Comments
  • Robert Pardela

This page is available in English

W sumie trudno opisać jednym zdaniem czym jest łańcuch bloków. Najczęściej myśląc blockchain myślimy o krypto-walutach w szczególności o Bitcoin. Ma to oczywiście sens bo krypto-waluty to główny powód powstania łańcucha bloków.

Skąd pomysł na łańcuch bloków?

 

Trochę historii

Koncepcja łańcucha bloków została po raz pierwszy zaprezentowana w 2008 roku przez osobę przedstawiającą się jako Satoshi Nakamoto (trwało wiele prób dotarcia do tej osoby i okazało się, że tak naprawdę ktoś taki nie istnieje, podejrzewa się, że za tym nickiem może kryć się grupa ludzi) w odpowiedzi na kryzys wywołany przez instytucje finansowe i spadek zaufania do tych instytucji. Koncepcja została opisana i udostępniona w internecie: http://www.bitcoin.org/bitcoin.pdf

Głównym celem platform blockchain było rejestrowanie zmian w prawach do własności bez pośredników takich jak instytucje finansowe. Na początku dotyczyło to tylko krypto-walut, aktualnie można wykorzystać łańcuch bloków w znacznie szerszym zakresie.

Dotychczasowy model aktualizowania zmian w prawach do własności opierał się na pośrednikach i centralnemu zarządzaniu własnością.

 

O co dokładnie chodzi?

Załóżmy, że chcemy nabyć akcje jakiejś spółki. Żeby tego dokonać potrzebujemy kilku pośredników: bank umożliwia zapłatę za akcje, biuro maklerskie wykona zlecenie a giełda papierów wartościowych doprowadzi do ich realizacji. W takim prostym scenariuszu mamy już 3 pośredników. Każdy pobiera prowizję za taką transakcję. W łańcuch bloków moglibyśmy zrealizować taką transakcję w bez pośredników, a jednocześnie z niepodważalnym dowodem praw do własności.

To co jest istotne w koncepcji łańcucha bloków to unikanie tworzenia rozwiązań scentralizowanych.

 

Czym jest centralizacja?

Jeśli popatrzymy na przykład banku to zauważymy, że każdy bank ma swój własny System informatyczny. Każdy właściciel konta łączy się z tym systemem jeśli chce wykonać operacje na swoim koncie. Oczywiście banki mają wiele centralnych systemów, ale system transakcyjny jest tym głównym. Takie rozwiązanie powoduje, że mamy instytucję, która zarządza naszymi środkami. Od tej instytucji zależy czy i kiedy będziemy mogli skorzystać z własnych środków. Jeśli nastąpi awaria takiego centralnego systemu automatycznie nie mamy dostępu do swoich środków. Jeśli regulator (np. Państwo) wprowadzi limity wypłat środków to również nasze własne pieniądze są zablokowane i dla nas nie dostępne.

Rozwiązaniem tego problemu jest rozproszone oprogramowanie działające w modelu Peer to Peer (P2P). Oznacza to, że mamy wiele węzłów oprogramowania wymieniających się informacjami, bez punktu centralnego do którego trafiają wszystkie transakcje. Awaria jednego z węzłów nie ma wpływu na działanie całej platformy.

W koncepcji łańcucha bloków został zaadresowany problem „podwójnego wydatkowania”.

 

Czym jest podwójne wydatkowanie?

Postaram się to wyjaśnić na bardzo uproszczonym przykładzie. Załóżmy, że mając stan konta w kwocie X mogę wykonać z tego konta przelewy, na kwotę przewyższającą X, jeśli taka operacja się powiedzie to właśnie doprowadziłem do podwójnego wydatkowania. Oczywiście jest to maksymalnie uproszczony opis problemu. Podwójne wydatkowanie może wystąpić w wyniku błędu ludzkiego, błędu systemu informatycznego lub może mieć na celu świadome wyłudzenie środków. Systemy rozproszone są szczególnie narażone na występowanie takich sytuacji, ponieważ transakcje inicjowane są na wielu węzłach jednocześnie.

Okazuje się jednak, że w tradycyjnym systemie bankowym również może wystąpić ryzyko podwójnego wydatkowania i w określonych warunkach możliwe jest przypisanie w jednym czasie tych samych środków do różnych kont. Bez wchodzenia w szczegóły warto zwrócić uwagę na wiele procesów bankowych m.in. rozliczenia (ang. clearing), rozrachunek (ang. settlement). Procesy te są realizowane podczas tzw. zamknięcia dnia, zamknięcia miesiąca oraz zamknięcia roku. Wszystkie te operacje służą między innymi uzgadnianiu kont oraz identyfikacji i poprawieniu ewentualnych nieprawidłowości związanych z podwójnym wydatkowaniem. Do tego istnieją jeszcze centralne izby rozliczeniowo-rozrachunkowe, które są niezbędne w procesie uzgadniania rozliczeń między bankami.

Łańcuch bloków mimo, że jest systemem rozproszonym, dzięki wbudowanym mechanizmom odporny jest na tego typu problemy i gwarantuje nam, że zawsze mamy stuprocentową pewność kto w danym momencie jest właścicielem środków wraz z dostępem do pełnej historii zmian w prawie własności do tych środków.

W jaki sposób zostało to osiągnięte postaram się wyjaśnić w dalszej części wpisu.

 

Czym jest łańcuch bloków?

Jeśli chodzi o samą definicję łańcuch bloków to wszystko zależy od punktu widzenia i konkretnej platformy wykorzystanej do zbudowania łańcucha bloków. Dla jednych będzie to rozproszony rejestr, zdecentralizowana struktura danych dla innych rozproszona maszyna stanowa, zdecentralizowana aplikacja lub komputer światowy. W sumie to niezmiernie ciężko jest zdefiniować blockchain bez wymieniania od razu jego najważniejszych cech: rozproszony, bezpieczny, nieusuwalny, wewnętrznie spójny.

Żeby zrozumieć, czym jest blockchain spójrzmy na jego wewnętrzną organizację.

 

Jak jest zbudowany łańcuch bloków?

Łańcuch bloków, czyli powiązane ze sobą bloki. Każdy blok zawiera pulę transakcji. Transakcje to wszystkie zdarzenia zmieniające stan danych w łańcuchu np. przekazywanie środków pomiędzy kontami, czyli zmiana prawa własności. Bloki ułożone są w łańcuchu chronologicznie i powiązane ze sobą jednokierunkowo tzn. nowszy blok wskazuje swojego poprzednika w łańcuchu. Jeśli na to nałożymy mechanizmy kryptograficzne pilnujące zawartości transakcji oraz całego bloku to otrzymamy łańcuch, który jest niemodyfikowalny i kryptograficznie bezpieczny co oznacza, że nie da się wprowadzić zmian w już istniejących i zaakceptowanych blokach.

Blockchain detail
Rys.1 Koncepcja łańcucha bloków

 

Z powyższego opisu wiemy już o niemodyfikowalnych blokach z transakcjami zmieniającymi stan danych, bloki powiązane są ze sobą chronologicznie bez możliwości usunięcia bloku oraz dodania nowego w innym miejscu niż na końcu łańcucha. I to jest właśnie kluczowa koncepcja łańcucha bloków, chociaż opisana w telegraficznym skrócie.

Kolejną często pojawiającą się cechą łańcucha bloków jest rozproszenie.

 

Na czym polega rozproszenie łańcucha bloków?

Aby to zrozumieć musimy spojrzeć z lotu ptaka na łańcuch bloków opisany dotychczas. Środowiskiem w jakim funkcjonuje łańcuch bloków jest węzeł. Możemy sobie wyobrazić węzeł jako czarną skrzynkę, która przechowuje w sobie powiązane ze sobą bloki i umożliwia obsługę zdarzeń/transakcji. Węzeł jest oprogramowaniem zarządzającym łańcuchem bloków. Takich węzłów może być wiele, każdy z nich na innym komputerze i u innego użytkownika.

W tradycyjnej scentralizowanej architekturze węzły wymagałyby połączenia do głównego centralnego węzła. Poniżej pokazałem tradycyjny scentralizowany model architektury systemów informatycznych.

Centralised architecture

Rys.2 Architektura scentralizowana

W łańcuchu bloków węzły powiązane są wyłącznie ze sobą. Mogą być ze sobą powiązane w modelu wiele do wielu, czyli jeden węzeł może łączyć się do wielu innych węzłów i wiele różnych węzłów może łączyć się do jednego węzła. Z węzłów tworzy się sieć połączeń, podobna do tej którą pokazałem na poniższym rysunku.

Blockchain decentralised
Rys.3 Przykład architektury rozproszonej

 

Taką sieć połączeń można zaprezentować w bardziej czytelny sposób:

Blockchain decentralised layout2
Rys.4 Przykład innej prezentacji architektury rozproszonej

 

Cechą rozproszonej sieci połączonych węzłów jest możliwość wyłączenia jednego lub wielu węzłów bez negatywnego wpływu na działanie całego łańcucha bloków. Pozwala nam to uniknąć w ten sposób ryzyka pojedynczego punktu awarii. To co łączy wszystkie działające węzły to identyczny stan przechowywanego w nich łańcucha bloków, niezależnie od tego w którym węźle został rozbudowany łańcuch (gdzie dodano nowy blok). To znaczy, że jeśli w jednym z węzłów została dodana transakcja to ta transakcja i konsekwencje jej wykonania znajdą się we wszystkich węzłach. Przy tej okazji widać, że łańcuch bloków ma również negatywne cechy, w tym przypadku redundancję (węzły na popularnych platformach blockchain osiągają wiele GB danych np. pojedynczy węzeł Bitcoin zawiera aktualnie około 200 GB). Każdy węzeł przechowuje pełną kopię łańcucha. Jednak dzięki redundancji łańcuch bloków ma dwie bardzo ważne pozytywne cechy: dostępność oraz odporność na podział (to dwie z trzech cech nie możliwych do osiągnięcia w systemach rozproszonych https://en.wikipedia.org/wiki/CAP_theorem, jak się okazuje blockchain nie poddaje się twierdzeniu CAP). Trzecia cecha związana z twierdzeniem CAP, którą posiada blockchain to spójność.

Dochodzimy teraz do bardzo ważnego momentu, czyli zrozumienia metod zachowanie spójności pomiędzy wszystkimi węzłami.

 

Jak działa łańcuch bloków?

Jeśli do każdego węzła można wprowadzać nowe bloki, a są one ułożone chronologicznie i powiązane ze swoimi poprzednikami to jak jest to składane w spójną całość pomiędzy węzłami?

Można powiedzieć, że łańcuch bloków pulsuje zgodnie z pojawiającymi się w nim transakcjami. Działa to w taki sposób, że jeśli do któregokolwiek węzła trafi nowa transakcja to jest ona natychmiast „rozgłaszana” do wszystkich węzłów, następnie transakcje trafiają do bloków i od tego momentu węzły ścigają się w zamknięciu i dodaniu bloku do łańcucha (trwa tzw. kopanie znane z zarabiania na krypto-walutach). Węzeł który jako pierwszy ogłosi nową „prawidłową” wersję łańcucha wygrywa i jego wersja jest uważana za ostateczną. To jest oczywiście bardzo uproszczony opis tego co się tak naprawdę dzieje. Niemniej jednak znowu widać duże marnotrawstwo zasobów tym razem mocy obliczeniowej, ponieważ wszystkie węzły wykonują to samo przetwarzanie żeby wygrać wyścig o ogłoszenie nowego bloku. Taka nadmiarowość jest niezbędna aby rozproszona aplikacja zbudowana na bazie łańcucha bloków była odporna na ataki z zewnątrz, które mogłyby spowodować wprowadzenie do łańcucha szkodliwych transakcji, co zostanie bardziej szczegółowo opisane dalej.

 

Jak zagwarantować, że dodane przez najszybszy węzeł bloki są prawidłowe? A co jeśli kilka węzłów w podobnym czasie ogłosiło różne wersje bloków? A jeśli mamy w sieci węzły, które celowo wprowadzają „złe” bloki w celu np. wyłudzenia?

Na takie sytuacje łańcuch bloków ma oczywiście zabezpieczenia, które są genialne w swojej prostocie. Każdy węzeł przy dodawaniu bloku musi rozwiązać pewną „zagadkę” kryptograficzną. Stopień skomplikowania tej zagadki jest ustalany przez oprogramowanie węzła, które jest identyczne na wszystkich działających węzłach danej platformy. Zagadka ma dwa cele, jednym z nich jest możliwość porównania wyników rozwiązania zagadki. Dzięki temu wszystkie węzły mogą zweryfikować czy rozwiązanie jest prawidłowe.

Drugim celem zagadki jest tzw. dowód pracy „Proof of Work – PoW” (istnieją również inne mniej popularne dowody np. Proof of Stake – PoS). Prawidłowy wynik zagadki stanowi dowód na wykonanie pracy związanej z przygotowaniem bloku. Czym bardziej skomplikowana zagadka tym więcej pracy (mocy obliczeniowej) muszą wykonać węzły w celu znalezienia jej rozwiązania a następnie dodania bloku do łańcucha bloków (dodawany blok musi mieć prawidłowe rozwiązanie).

 

Jak sprawdzić czy rozwiązanie zagadki jest prawidłowe?

Pamiętajmy, że łańcuch bloków jest systemem rozproszonym bez centralnego węzła podejmującego decyzje i zarządzającego całością. Jednak każdy węzeł zna algorytm umożliwiający rozwiązanie zagadki (są to deterministyczne metody kryptograficzne). W celu weryfikacji poprawności rozwiązania na platformach blockchain wprowadzono mechanizm konsensusu. Polega on na tym, że węzły rozwiązują zagadkę i „głosują” za znalezionymi rozwiązaniami. To rozwiązanie, które ma większość głosów uznawane jest za ostateczne i umożliwia dodanie bloku do łańcucha.

Z tego wynika, że aktualizacja łańcucha bloków następuje na podstawie konsensusu.

Będąc użytkownikiem takiego systemu możemy mieć uzasadnione obawy, że ktoś nieuczciwy, dla własnych celów, będzie chciał przejąć kontrolę nad głosowaniami i mechanizmem konsensusu, czyli uzyskać większość głosów (atak znany jako Sybil 51%). Teoretycznie wystarczy uruchomić dużo własnych węzłów, włączyć je do sieci i manipulować łańcuchem bloków.

 

Jak się bronić przed atakiem?

Tu znowu wspiera nas dowód pracy PoW. Rozwiązanie zagadki jest na tyle skomplikowane, że wydatek energetyczny potrzebny do zmanipulowania łańcucha bloków byłby finansowo nie opłacalny lub niemożliwy do uzyskania. Dla przykładu szacuje się, że do złamania blockchain Bitcoina potrzebna jest moc obliczeniowa 500 najszybszych komputerów dostępnych aktualnie na świecie. Wszystkie musiały by zajmować się wyłącznie „kopaniem” krypto-waluty. Co oczywiście nie jest możliwe do uzyskania i jak widać zabezpieczenie przed atakami jest bardzo silne i tym silniejsze im dłuższy jest aktualnie łańcuch bloków, czyli czym więcej jest w nim zrealizowanych transakcji.

 

Podsumowanie

Patrząc na cechy łańcucha bloków oraz funkcje jakie może pełnić, uważam że jest to jedno z ważniejszych rozwiązań informatycznych w historii IT. To co istotne to fakt, że odkrywcza jest koncepcja, natomiast zastosowane w niej technologie są znane od lat, co ułatwia zrozumienie, implementację i włączenie takich platform do istniejących już ekosystemów IT.

Mnie możliwości platform blockchain zafascynowały, szczególnie w przypadku platformy Ethereum, która jest czasami nazywana komputerem światowym ze względu na swoje cechy. Jestem przekonany, że w najbliższej przyszłości usłyszymy o przełomowych zastosowaniach tych platform.

Mam nadzieję, że udało mi się w miarę przystępny sposób wyjaśnić czym jest blockchain. Najważniejsze, aby po tym wyjaśnieniu obraz się nie zaciemnił 🙂

Niestety jest tu wiele ogólników, które były niezbędne, żeby ograniczyć długość tego wpisu. Starałem się stworzyć opis jak najmniej techniczny, gdzie mogłem unikałem technologicznego żargonu, a jednak mam świadomość, że nadal nie dla wszystkich będzie to zrozumiałe.

Wszystkich zainteresowanych tematem i jego rozwinięciem zachęcam do kontaktu.

Robert Pardela

Leave a Comment

Your email address will not be published.

twenty − 7 =