Bez zbędnego przedłużania, rozpoczniemy dzisiejszą lekcję od naszego głównego tematu.
Tendermint to oprogramowanie służące do spójnego i bezpiecznego replikowania aplikacji na wielu maszynach. Działa ono tak długo, jak długo mniej więcej 1/3 maszyn, na których jest uruchomione, nie ulegnie awarii. Pojęcie spójności odnosi się do procesu, w którym każda niezawodna maszyna widzi ten sam dziennik transakcji i oblicza ten sam stan.
Bezpieczeństwo i spójność stanowią kluczowy problem w systemach rozproszonych, pełniąc istotną rolę w odporności na awarie.
Czy już połączyłeś kropki? Zdolność do tolerowania awarii maszyn, nawet tych złośliwych, jest nazywana bizantyjską tolerancją błędów (BFT). Nazwa ta wywodzi się ze sposobu, w jaki transakcje są łączone w bloki. O bizantyjskiej tolerancji błędów (BFT) pisaliśmy tutaj.
Tendermint składa się z dwóch głównych komponentów: silnika konsensusu blockchain, znanego jako Tendermint Core, który zapewnia, że te same transakcje są rejestrowane na każdej maszynie w tej samej kolejności, oraz ogólnego interfejsu aplikacji, czyli Application BlockChain Interface (ABCI), odpowiedzialnego za dostarczanie transakcji do aplikacji w celu ich przetworzenia. Deweloperzy korzystają z Tendermint do replikacji stanu BFT w aplikacjach napisanych w dowolnym języku programowania i środowisku programistycznym.
Tendermint jest łatwy w użyciu, bardzo prosty do zrozumienia, wydajny i przede wszystkim użyteczny dla wielu aplikacji rozproszonych.
To oprogramowanie ma dwa sposoby programowania. Pierwszym z nich są rozproszone magazyny wartości kluczowych, takie jak Zookeeper, etcd i Consul. Wykorzystują one inny konsensus niż bizantyjska tolerancja błędów (BFT).
Drugim sposobem jest po prostu blockchain, obejmujący kryptowaluty takie jak Bitcoin, Ethereum, czy alternatywne projekty ksiąg rozproszonych, jak na przykład Hyperledger’s Burrow.
Przykładem aplikacji zbudowanej na Tendermint jest sieć Cosmos.
Architektura Tendermint
Wcześniej wspomnieliśmy, że Tendermint składa się z dwóch kluczowych elementów: Tendermint Core i Application Blockchain Interface (ABCI). Teraz przyjrzyjmy się dokładniej tym komponentom.
Tendermint Core
Tendermint Core stanowi podstawowy element całej architektury protokołu. Pełni funkcję mechanizmu konsensusu, nadzorując jednoczesne rejestrowanie transakcji na różnych maszynach. To dzięki Tendermint Core możliwe jest zapisywanie transakcji na blockchainie, zapewniając niezmienność.
Mechanizm konsensusu w Tendermint Core oparty jest na Proof-of-Stake (PoS). Losowo wybrani walidatorzy weryfikują transakcje w całym ekosystemie PoS, a bloki są dodawane tylko wtedy, gdy osiągnięty zostanie konsensus. Zagłębimy się bardziej w rolę walidatorów w osobnym akapicie tej lekcji.
Application Blockchain Interface (ABCI)
ABCI pełni rolę mostu pomiędzy Tendermint a deweloperami, którzy korzystają z jego funkcjonalności. Jest rodzajem tłumacza dla Tendermint Core, umożliwiając deweloperom budowanie aplikacji na protokole w dowolnym języku programowania.
Co ciekawe, deweloperzy mogą tworzyć projekty w sieci Cosmos, wykorzystując Tendermint Core jako połączenie między samym protokołem a zestawem do tworzenia oprogramowania (SDK) Cosmos.
Tendermint-walidatorzy
Działanie Tendermint jest zasadniczo proste i łatwe do zrozumienia. Protokół ten działa asynchronicznie i opiera się na mechanizmie Bizantyjskiej Tolerancji Błędów.
Uczestnicy protokołu są nazywani walidatorami. Na zmianę proponują bloki transakcji i głosują nad nimi. Bloki przekazywane są w łańcuchu, gdzie każdy blok odpowiada jednej wysokości. Jeśli blok nie zostanie dodany do łańcucha, przechodzi do następnej “rundy”, a nowi walidatorzy otrzymują propozycję tego bloku dla danej wysokości. Dodanie bloku do łańcucha wymaga dwóch etapów głosowania: pre-vote oraz pre-commit. Blok jest zatwierdzany, gdy więcej niż 2/3 walidatorów odda głos na blok w tej samej rundzie.
W bardziej zaawansowanym aspekcie działania protokołu, osoby zatwierdzające (walidatorzy) mogą nie oddać swojego głosu, być offline lub napotkać opóźnienia w sieci. W takiej sytuacji Tendermint pozwala na pominięcie danego walidatora.
Walidatorzy czekają krótko na otrzymanie pełnego bloku od wnioskodawcy przed oddaniem głosu na jego przejście “do kolejnej rundy”. Ten limit czasu sprawia, że Tendermint jest protokołem słabo synchronicznym. Jednak reszta protokołu działa asynchronicznie. Walidatorzy podejmują decyzję o postępie dopiero, gdy dany blok uzyska 2/3 głosów.
Tendermint posiada również mechanizm upraszczający, używając tego samego procesu do zatwierdzenia bloku i jego przejścia do kolejnej rundy. Przy założeniu, że mniej niż 1/3 walidatorów jest zdecentralizowana (bizantyjska), protokół zapewnia bezpieczeństwo, uniemożliwiając naruszenia bloków. Aby blok mógł być dodany do łańcucha, wprowadza kilka zasad blokowania, które regulują przepływ. Po zadeklarowaniu bloku przez walidatora, jest on blokowany na danej wysokości, a następnie odbywa się głosowanie nad tym blokiem.
Skalowalność i elastyczność Tendermint
Zalety protokołu Tendermint są liczne, a jedną z nich jest wysoka skalowalność. Protokół ten może elastycznie dostosowywać się do liczby obsługiwanych transakcji.
Jak już dowiedziałeś się na naszym uniwersytecie, wiele blockchainów i protokołów boryka się z problemem skalowalności, co prowadzi do zatorów, gdy przepustowość sieci nie nadąża za ilością działań. W rezultacie sieć staje się zatłoczona, prędkość transakcji maleje, a koszty rosną.
Tendermint osiąga swoją skalowalność dzięki zastosowaniu shardingu. Transakcje w protokole są uruchamiane na shardach, czyli mniejszych bazach danych.
Kolejną zaletą jest elastyczność. Tendermint wykazuje większą elastyczność w porównaniu do przeciętnego blockchaina, co wynika z jego modułowej struktury. Dzięki temu łatwo można oddzielić mechanizm konsensusu od interfejsu aplikacji. Deweloperzy nie muszą uruchamiać ekosystemu od podstaw – mogą bezpośrednio współdziałać z interfejsem aplikacji i ABCI.
Architektura modułowa
Wspomnieliśmy już, że Tendermint posiada unikalne cechy, prawda? Dodajmy do tego jeszcze jedną zaletę – modułową architekturę. W odróżnieniu od standardowych blockchainów, które posiadają monolityczną strukturę, Tendermint został zaprojektowany jako system z modułowymi elementami.
Monolityczna struktura oznacza, że poszczególne elementy są jednocześnie niezależne i silnie ze sobą powiązane. Natomiast modułowa architektura Tendermint ułatwia aktualizację jednego aspektu systemu bez zakłócania pracy całego. Ponadto pozwala programistom na tworzenie niestandardowych programów, nie wymagając jednoczesnego uruchamiania całej sieci.
Tendermint Core, który omówiliśmy wcześniej, jest właśnie modułowym systemem z warstwą aplikacji. Na tej warstwie deweloperzy mogą konstruować i integrować swoje aplikacje niezależnie od warstw sieci i konsensusu. Taka elastyczność umożliwia deweloperom implementację kodu bez konieczności przejmowania się pobocznymi elementami.
Pozytywne aspekty modułowej architektury Tendermint obejmują:
- Uproszczenie procesu tworzenia aplikacji.
- Możliwość budowania aplikacji przy użyciu różnych języków programowania.
- Bezproblemowe wdrażanie różnorodnych zdecentralizowanych aplikacji.
Podsumowanie
Tendermint to fascynujący i innowacyjny protokół, który pełni rolę silnika dla łańcuchów blockchain. Śmiało można stwierdzić, że umożliwia deweloperom realizację wielu interesujących zadań. Jednym z najważniejszych aspektów jest możliwość budowania aplikacji przy użyciu dowolnego języka programowania.
Podstawowe elementy Tendermint, czyli Tendermint Core i ABCI stanowią fundamenty tego protokołu. Cały ekosystem wyróżnia się wysoką skalowalnością, integralnością i modułowością.