Jak działa łańcuch bloków

Ukończone

Po zapoznaniu się z podstawami łańcucha bloków przyjrzyjmy się jego wewnętrznemu działaniu. Te informacje powinny pomóc w podjęciu decyzji, czy łańcuch bloków działa w danym scenariuszu.

Jak są rozpowszechniane dane?

W naszym scenariuszu istnieje wiele firm. Można mieć scentralizowaną bazę danych w firmie przetwarzającej produkty mleczne. Jednak żaden uczestnik nie chce pełnić roli urzędu centralnego. Możemy użyć rejestru rozproszonego łańcucha bloków. Użycie łańcucha bloków eliminuje konieczność udziału urzędu centralnego. Ponadto każdy uczestnik dysponujący węzłem łańcucha bloków ma kopię rejestru, dzięki czemu może przeprowadzać własne inspekcje i integrację z systemami. Nie ma jednak wymogu, zgodnie z którym każda firma powinna mieć własny węzeł. Węzły mogą być współdzielone między partnerami.

Każdy węzeł jest połączony z innymi węzłami przez sieć łańcucha bloków. Na przykład każde gospodarstwo Dalia Pelayo, fabryka lodów oraz lodziarnia mają węzły, którymi zarządzają. Contoso West i Contoso East są oddzielnymi partnerami, którzy korzystają z tej samej firmy macierzystej. Firma Contoso ma jeden węzeł. Nie musi być bezpośredniej relacji między węzłami a firmami.

Several participant blockchain nodes connected by a network.

Zmiana stanu

Dane w łańcuchu bloków reprezentują stan. Właśnie dlatego łańcuch bloków nadaje się do tokenów cyfrowych, takich jak kryptowaluta. W przypadku fizycznej waluty pojedyncza moneta może znajdować się w danej chwili w kieszeni tylko jednej osoby. Jeśli znajduje się w Twojej kieszeni, oznacza to, że jest Twoja. Jeśli dasz monetę znajomemu, to Twój znajomy stanie się jej właścicielem. W naszym scenariuszu przesyłki przechodzą przez łańcuch dostaw. Odpowiedzialność za produkt trzeba przekazywać. Dane, które nas interesują, dotyczą odpowiedzialnej strony, temperatury oraz zgodności produktu z przepisami.

Łańcuch bloków używa transakcji, aby zmienić stan danych z jednej wartości na inną. Musimy na przykład wiedzieć, czy lody są przechowywane poniżej temperatury zamarzania. Podczas transportu lodów czujnik temperatury co jakiś czas zgłasza temperaturę. Zgłoszona temperatura to transakcja, która zostaje wysłana do węzła transakcji łańcucha bloków.

Example transaction from an IoT temperature sensor. The transaction sets the temperature to -2° celsius in the ledger.

W scenariuszu dotyczącym lodów gdy przesyłka zostaje wysłana za pośrednictwem łańcucha dostaw, transakcja zostaje wysłana za każdym razem, gdy zmieni się status. Na ilustracji przedstawiono na przykład transakcje typowej przesyłki do fabryki lodów. Każda transakcja zmienia odpowiedzialną stronę lub temperaturę. Bieżącym stanem rejestru są transakcje zastosowane w kolejności.

List of transactions in order that change the responsible party and temperature. The combination of transactions result in a ledger state based on the order of transaction changes.

W przypadku wysyłania transakcji wysyła się ją do węzła transakcji łańcucha bloków. Przypuśćmy, że gospodarstwo Dalia Pelayo wysyła przesyłkę mleka za pośrednictwem firmy Contoso West Shipping. System wysyłkowy gospodarstwa Dalia Pelayo wysyła transakcję do węzła łańcucha bloków. Transakcja aktualizuje odpowiedzialność za przesyłkę z odpowiedzialności gospodarstwa na odpowiedzialność firmy Contoso West Shipping.

A transaction from the farmer being sent to the farmer's blockchain node.

Łańcuch bloków wysyła transakcję do sieci łańcucha bloków. Każdy węzeł pobiera kopię transakcji.

A transaction being copied to all participant blockchain node peers.

Każdy węzeł przetwarza transakcję, ale nadal wymaga ona walidacji przy użyciu mechanizmu porozumienia. Porozumienie zapewnia spójność i zaufanie do rejestru rozproszonego.

W jaki sposób można zyskać pewność, że dane rejestru są spójne?

W sieci rozproszonej trudno jest określić, co jest zgodne z prawdą, ponieważ modyfikacja danych musi wystąpić we wszystkich węzłach. Co się stanie, jeśli węzeł fabryki lodów nie pobierze transakcji przewozu? Skąd będzie wiadomo, że mleko zostało przewiezione z gospodarstwa? A jeśli ciężarówka chłodnicza firmy transportowej ulegnie awarii i mleko się zepsuje? Czy firma transportowa mogłaby zmodyfikować rejestr w celu uniknięcia odpowiedzialności?

Łańcuch bloków wykorzystuje mechanizm porozumienia do walidacji i zatwierdzania danych we wszystkich węzłach. Porozumienie sprawia, że wszystkie zdecentralizowane węzły przechodzą w ten sam stan. W przypadku przenoszenia wartości lub odpowiedzialności kolejność ma znaczenie. Jeśli na przykład przeniesiesz własność samochodu na znajomego, nie możesz również przenieść własności na kolegę z pracy. Problem ten nazywamy problemem podwójnego wydatku, który zostaje rozwiązany przez porozumienie. Porozumienie zapewnia poprawną kolejność transakcji oraz integralność łańcucha bloków. W ramach porozumienia grupa transakcji jest weryfikowana jako blok, a sieć musi wyrazić zgodę na dołączenie bloku do łańcucha bloków.

Consensus mechanism agrees on validated transactions across nodes. Each blockchain node writes the latest validated block to the blockchain.

Istnieje kilka algorytmów porozumienia łańcucha bloków, m.in. potwierdzenie pracy, potwierdzenie wkładu i potwierdzenie uprawnień. Każdy algorytm rozwiązuje kwestię spójności w inny sposób. W dużym uproszczeniu porozumienie sprawia, że rejestr rozproszony może przejść w stan wspólny.

Co to jest blok?

Blok to klaster danych w łańcuchu bloków, w którym są przechowywane informacje o transakcjach. Liczba transakcji w bloku jest zwykle oparta na czasie. Na ilustracji przedstawiono blok zawierający transakcje, które wystąpiły w ciągu ostatnich 10 minut.

Example of several transactions representing a block. The order of transactions result in a given state.

W wyniku porozumienia zweryfikowane bloki zostają dodane do łańcucha bloków w każdym węźle. Ponieważ wszystkie węzły mają te same bloki w łańcuchu, rejestr jest spójny w całej sieci. W związku z tym wszystkie węzły zawierają te same zweryfikowane dane w uzgodnionej kolejności.

Jak można mieć pewność, że rejestr jest niezmienny?

Może się wydawać, że jeśli kontrolujesz rejestr w swoim węźle, wystarczy, że zmodyfikujesz dane znajdujące się w swojej kopii. Jak więc może on być niezmienny?

Łańcuch bloków używa skrótu kryptograficznego, aby utworzyć połączenie między blokami. Dzięki połączeniu bloków można uzgodnić kolejność transakcji za pośrednictwem algorytmu porozumienia. Wartość skrótu kryptograficznego to algorytm, który mapuje dane dowolnego rozmiaru na reprezentację bitową rozmiaru stałego. Można ją traktować jako cyfrowy odcisk palca. Bitcoin wykorzystuje algorytm wyznaczania wartości skrótu SHA-256. Jeśli używasz funkcji skrótu SHA-256 w dokumencie 100 strony, dane wyjściowe funkcji są wartością skrótu 256-bitowego. Jeśli zmienisz tylko jeden znak w dokumencie i ponownie wygenerowano skrót, dane wyjściowe będą miały inną wartość skrótu 256-bitowego. Teraz wyobraźmy sobie, że użyjemy bloku jako danych wejściowych funkcji skrótu. Dane wyjściowe to unikatowa wartość skrótu dla danych w bloku.

A block is sent through a hash function and a cryptographic hash is generated.

Łańcuch bloków wykorzystuje wartości skrótu do wykrywania, czy bloki zostały zmodyfikowane. Poprzez dołączenie wartości skrótu poprzedniego bloku podczas generowania wartości skrótu następnego bloku bloki zostają połączone za pomocą wartości skrótu.

A block includes the previous block's hash when generating it's hash. Including the previous hash links the blocks together.

Łańcuch bloków wzbudza zaufanie dzięki wykorzystaniu wartości skrótu w celu potwierdzenia, że historia danych nie została zmodyfikowana. Poprzez uwzględnienie wartości skrótu poprzedniego bloku podczas tworzenia nowego bloku zostaje utworzony w kolejności niezmienny łańcuch transakcji.

Three blocks linked together by the previous block's hash

Jeśli dowolny blok łańcucha zostaje zmodyfikowany, wartość skrótu kolejnych bloków jest inna. W ten sposób walidacja powoduje wykrycie rozbieżności.

Zaufana logika

Łańcuch bloków pozwala na przechowywanie spójnych, godnych zaufania danych. Jak dodać logikę, która jest wykonywana w taki sam sposób w każdym węźle?

W naszym scenariuszu potrzebujemy logiki do przeniesienia odpowiedzialności za produkt z jednego uczestnika na drugiego. Musimy również użyć danych z czujnika temperatury IoT, aby sprawdzić, czy temperatura nie jest zbyt wysoka.

Aplikacja zdecentralizowana (DApp) to aplikacja w rozproszonym systemie komputerowym. W tym module koncentrujemy się na używaniu protokołu łańcucha bloków Ethereum. Aplikacje DApp platformy Ethereum nazywamy kontraktami inteligentnymi. Kontrakt inteligentny zawiera logikę, która jest wykonywana w ramach transakcji. Na platformie Ethereum logika jest programowana przy użyciu języka programowania o nazwie Solidity.

Kontrakty inteligentne są wdrażane w łańcuchu bloków i odwołują się do adresu. Aby użyć kontraktu inteligentnego, należy utworzyć wystąpienie. Wystąpienie kontraktu inteligentnego zawiera dane stanu i logikę programu. W naszym scenariuszu wystąpienie kontraktu inteligentnego zawiera takie dane jak odpowiedzialny uczestnik, lokalizacja oraz informacje na temat tego, czy temperatura produktu nie jest niezgodna z przepisami. Możemy wykonać funkcje, aby przenieść odpowiedzialność lub pobrać dane telemetryczne dotyczące temperatury dla tego wystąpienia.

Components of a smart contract include address, logic, and data.

Gdy odpowiedzialność za produkt zostaje przeniesiona na inną stronę, zostaje wykonana transakcja. Logika kontraktu inteligentnego aktualizuje dane stanu. W scenariuszu dotyczącym lodów system transportowy fabryki lodów tworzy wystąpienie kontraktu inteligentnego dla nowej przesyłki lodów. System transportowy fabryki wysyła transakcję, która wywołuje funkcję TransferResponsibility, aby przenieść odpowiedzialność za przesyłkę na firmę Contoso East Shipping. Sieć łańcucha bloków wysyła transakcję do wszystkich węzłów. W poszczególnych węzłach wykonywana jest logika kontraktu inteligentnego.

A smart contract transaction is sent to one node and copied to the other peer nodes.

A jeśli podczas transportu urządzenie chłodzące ulegnie awarii i temperatura lodów wzrośnie powyżej temperatury zamarzania? Czujnik temperatury IoT monitoruje temperaturę lodów i co jakiś czas wysyła transakcje. Jeśli temperatura przekracza mroźne, logika kontraktu inteligentnego oznacza przesyłkę jako niezgodną.

A smart contract transaction executes logic to set the shipment to out of compliance due to the temperature. The transaction is copied and executed on other peer nodes.

Ponieważ transakcja jest zawarta w łańcuchu bloków, istnieje niezmienny rekord, gdy przesyłka stała się niezgodna. Lodziarnia może odmówić przyjęcia dostawy i uniknąć problemów związanych z bezpieczeństwem żywności.

Podobnie jak dane w łańcuchu bloków kontrakt inteligentny jest niezmienny. Po wdrożeniu logika nie może zostać zmieniona. W związku z tym można mieć pewność, że logika kontraktu inteligentnego jest zawsze wykonywana w taki sam sposób na wszystkich węzłach. Wszelkie modyfikacje kodu wymagają wdrożenia nowego kontraktu inteligentnego pod nowym adresem.