Jak działa łańcuch bloków? cz.2

  • November 21st, 2019
  • General
  • 0 Comments
  • Robert Pardela

This page is available in English

W pierwszej części cyklu „Jak działa łańcuch bloków?” opisałem elementy, które wpływają na bezpieczeństwo kryptograficzne łańcucha bloków. Należą do nich: cyfrowy odcisk palca (funkcja skrótu), drzewo Merkle’a oraz kryptografia asymetryczna. W tym wpisie przedstawię podstawowe komponenty występujące w łańcuchu bloków, a w ostatniej części wykorzystam wszystkie przedstawione wcześniej informacje i zaprezentuję kompletny opis działania łańcucha bloków.

Muszę uprzedzić, że jak zwykle zastosowałem uproszczenia, jednak w opisach najbliżej mi do specyfikacji platformy Ethereum.

Jeśli czujesz potrzebę zdobycia bardziej szczegółowej wiedzy zapraszam do bezpośredniego kontaktu oraz/lub zachęcam do przeczytania specjalistycznej literatury.

 

Podstawowe komponenty

Pomijając bardzo techniczne elementy zawarte w protokołach P2P, DLT, itp, w łańcuchu bloków występują 4 istotne komponenty:

  • Konto
  • Transakcja
  • Blok
  • Węzeł

Na bardzo ogólnym poziomie można stwierdzić, że każdy łańcuch bloków składa się z tych komponentów.

Konto

Wszystkie konta identyfikowane są przez unikalny adres (unikalność gwarantowana jest przez kryptograficzną funkcję skrótu opisaną w poprzedniej części).

Rozróżniamy dwa rodzaje kont: konta użytkowników oraz konta inteligentnych kontraktów.

Konta użytkowników (EOA – Externally Owned Accounts)

Jest to konto podobne do typowego konta w banku. Tego rodzaju konta spełniają dwie podstawowe funkcje:

  • Służą do magazynowania tokenów lub krypto-waluty
  • Umożliwiają identyfikowanie użytkowników poprzez ich klucz prywatny

Konto użytkownika posiada dwa klucze: publiczny oraz prywatny (kryptografia asymetryczna), które powstają podczas tworzenia konta użytkownika.

Adres tego konta jest stworzony z ostatnich 20 bajtów skrótu klucza publicznego konta użytkownika. Adres ten można porównać do numeru konta w banku. Transfer tokenów i krypto-waluty odbywa się z/do adresów kont użytkowników.

Inteligentne kontrakty

Drugi rodzaj konta to miejsce, gdzie znajduje się kod inteligentnego kontraktu. Wcześniej nie opisywałem jeszcze czym są inteligentne kontrakty. Można im poświęcić kilka osobnych artykułów, niemniej jednak postaram się tu trochę przybliżyć ten temat.

Inteligentne kontrakty nadają łańcuchowi bloków cechę programowalności. Oznacza to, że łańcuch bloków po za trwałym przechowywaniem stanu może również wykonywać pewne operacje. Te operacje mogą również zmieniać stan łańcucha. Gdybyśmy chcieli porównać tą cechę do systemów baz danych to inteligentny kontrakt można by porównać do procedur składowanych. Oczywiście jest to olbrzymie uproszczenie. Tak naprawdę na platformach Blockchain można tworzyć pełnowartościowe zdecentralizowane aplikacje. Celowo dla uproszczenia pomijam tu kwestię „Turing kompletności” wykorzystywanego na platformie języka programowania kontraktów.

Wracając do konta typu inteligentny kontrakt musimy zapamiętać, że pod adresem tego konta znajduje się kod inteligentnego kontraktu, który możemy wywoływać i wykonywać.

W tym przypadku adres konta jest zbudowany ze skrótu zawartości kontraktu (kodu źródłowego).

Transakcja

Patrząc na transakcje trzeba uświadomić sobie, że Blockchain jest globalną maszyną stanową, a transakcja to jedyna możliwość zmiany jej stanu.

Transakcje to podpisane kryptograficznie komunikaty pochodzące z konta (użytkownika lub kontraktu) przesyłane przez sieć Blockchain i zapisywane w łańcuchu. Transakcje rozprzestrzeniają się jak plotka od węzła w którym powstały do całej sieci. Węzły przekazują transakcje do węzłów z którymi są bezpośrednio połączone. Można powiedzieć, że transakcje wprawiają łańcuch bloków w ruch.

W dużym uproszczeniu transakcja składa się z następujących elementów:

  • Nonce – jest to kolejny numer transakcji wysłanych z danego konta. Ma wpływ na kolejność wykonywania transakcji oraz mechanizm konsensusu.
  • Adres konta odbiorcy – konto adresata, użytkownika lub wywoływanego kontraktu
  • Wartość – ilość tokenów lub krypto-waluty przekazywanych na konto odbiorcy
  • Dane – tu umieszczane są dane dla np. inteligentnych kontraktów.

Każda zaakceptowana transakcja jest rejestrowana w systemie.

Warto zwrócić uwagę, że operacje wykonywane na łańcuchu bloków nie zmieniające jego stanu nie są transakcjami. Na przykład odczytanie stanu konta użytkownika nie jest transakcją.

Blok

Najprościej rzecz ujmując blok to zbiór transakcji wraz z dodatkowymi danymi towarzyszącymi.

Ilość transakcji w bloku oraz struktura danych bloku zależy od konkretnej platformy Blockchain.

Blok składa się z nagłówka oraz listy transakcji.

Nagłówek bloku posiada następującą strukturę:

  • Wartość funkcji skrótu (cyfrowy odcisk palca) nagłówka bloku nadrzędnego (poprzedniego)
  • Znacznik czasu
  • Korzeń drzewa Merkle’a dla wszystkich transakcji znajdujących się w bloku. Opisywałem algorytm tworzenia drzewa Merkle’a w poprzedniej części.
  • Poziom trudności – wartość ta dotyczy zagadki kryptograficznej, która ma zostać rozwiązania w ramach mechanizmu Proof of Work
  • Nonce – wartość umożliwiająca weryfikację poprawności rozwiązania zagadki kryptograficznej

 

Jak weryfikowana jest poprawność rozwiązania zagadki kryptograficznej?

W uproszczeniu węzeł, który weryfikuje poprawność bloku tworzy skrót z następujących elementów nagłówka weryfikowanego bloku:

  • Wartość funkcji skrótu nagłówka bloku nadrzędnego
  • Znacznik czasu
  • Korzeń drzewa Merkle’a.
  • Nonce

Wynikiem powinien być skrót spełniający wymagania związane z poziomem trudności. Wyliczenie tego skrótu jest bardzo szybkie i łatwe do weryfikacji. Jednak cały problem polega na znalezieniu odpowiedniej wartości parametru Nonce. Odbywa się to podczas tworzenia bloku i jest to proces tzw. „kopania”.

Poniższy rysunek przedstawia bloki połączone w łańcuch.

Blockchain detail tech
Rys.1 Połączone bloki

 

Węzeł

Każdy węzeł przechowuje aktualny stan łańcucha bloków. Tu widoczna jest redundancja związana z mechanizmami związanymi z teorią CAP, którą opisywałem we wcześniejszych wpisach.

Z technicznego punktu widzenia węzeł Blockchain to aplikacja, która implementuje konkretną specyfikację Blockchain np. GETH (implementacja węzła Ethereum w języku GO) i komunikuje się poprzez protokół peer-to-peer z innymi węzłami Blockchain. Oprogramowanie węzła może być implementowane przez różne zespoły i w różnych językach programowania oraz uruchamiane na wielu platformach systemowych.

Różne węzły współpracują ze sobą, jeśli spełniają wymagania specyfikacji referencyjnej i standardowych protokołów komunikacyjnych oraz oczywiście są odpowiednio skonfigurowane.

Węzły posiadają lokalną bazę danych zwykle w formacie key:value.

Węzły mają również zaimplementowane mechanizmy umożliwiające uruchamianie inteligentnych kontraktów np. EVM (Ethereum Virtual Machine).

Bardzo ważnym elementem węzła jest zdolność do osiągnięcia konsensusu dotyczącego poprawnego stanu łańcucha bloków.

 

Podsumowanie

Staram się bardzo upraszczać każdy wpis, żeby jednorazowo nie pisać za dużo i nie nudzić czytelników, a po drugie mam świadomość, że nie każdy czytelnik ma wystarczającą wiedzę techniczną.

Każdy z opisywanych tu elementów to materiał na osobny rozdział w książce 🙂

Jeśli czujesz niedosyt i masz potrzebę zgłębienia konkretnego obszaru to zachęcam do kontaktu. W najgorszym przypadku odeślę cię do konkretnej publikacji.

 

 

Robert Pardela

Leave a Comment

Your email address will not be published. Required fields are marked *

7 + eighteen =