fbpx

52. Czym jest Tendermint i jak działa?

Bez zbędnego przedłużania, dzisiejszą lekcję zaczniemy od razu od naszego tematu głównego.

Tendermint to oprogramowanie, które służy do spójnego i bezpiecznego replikowania aplikacji na wielu maszynach. Działa on tak długo, jak długo mniej więcej 1/3 maszyn, na których działa to oprogramowanie ulegnie awarii. Spójność to proces, w którym każda maszyna bez awarii widzi ten sam dziennik transakcji i oblicza ten sam stan.

Bezpieczeństwo i spójność to wręcz podstawowy problem w systemach rozproszonych. Mimo tego odgrywa on kluczową rolę w odporności na awarie.

Połączyłeś już sobie kropki, prawda? Zdolność do tolerowania awarii maszyn, w tym nawet tych złośliwych, nazywana jest bizantyjską tolerancją błędów (BFT). Sama nazwa wywodzi się ze sposobu, w jaki transakcje są łączone w bloki. O Bizantyjskiej Tolerancji Błędów (BFT) pisaliśmy tutaj.

Sam Tendermint składa się z dwóch komponentów – silnika konsensusu blockchain i ogólnego interfejsu aplikacji.

Silnik konsensusu nazywany jest Tendermint Core. Zapewnia nas, że te same transakcje są rejestrowane na każdej maszynie i to w tej samej kolejności.

Interfejs aplikacji, czyli Application BlockChain Interface (ABCI) odpowiada za dostarczanie transakcji do aplikacji w celu ich przetworzenia. Deweloperzy używają więc Tendermint do replikacji stanu BFT w aplikacjach napisanych w dowolnym języku oprogramowania i środowisku programistycznym.

Tendermint jest łatwy w użyciu, bardzo prosty do zrozumienia, wydajny, a przede wszystkim użyteczny dla wielu aplikacji rozproszonych.

Rozwiązanie ma dwa sposoby programowania. Pierwszy z nich to rozproszone magazyny wartości kluczowych: Zookeeper, etcd i consul. Używają one innego konsensusu niż Bizantyjska Tolerancja Błędów (BFT).

Drugi sposób to po prostu blockchain. Do tej grupy zaliczymy kryptowaluty (Bitcoin, Ethereum), czy alternatywne projekty ksiąg rozproszonych ja na przykład Hyperledger’s Burrow.

Innym przykładem aplikacji zbudowanej na Tendermint jest sieć Cosmos.

Architektura Tendermint

Wspomnieliśmy wcześniej, że Tendermint składa się z dwóch kluczowych elementów: Tendermint Core i Application Blockchain Interface (ABCI). Przyjrzyjmy się teraz tym komponentom.

Tendermint Core

To podstawowy element całej architektury protokołu. Służy jako mechanizm konsensusu. Nadzoruje rejestrowanie transakcji na różnych maszynach jednocześnie. To właśnie dzięki Tendermint Core możemy zapisywać transakcje na blockchainie, zapewniając jego niezmienność.

Mechanizm konsensusu Tendermint Core to Proof-of-Stake (PoS). Losowo wybrani walidatorzy weryfikują transakcje w całym ekosystemie PoS. Bloki są dodawane tylko wtedy, gdy zostanie osiągnięty konsensus. Jednakże walidatorom poświęcimy osobny akapit tej lekcji.

Application Blockchain Interface (ABCI)

ABCI to taki most pomiędzy Tendermint a deweloperami, którzy korzystają z jego funkcjonalności. Application Blockchain Interface służy jako tłumacz dla Tendermint Core. W efekcie deweloperzy mogą budować aplikacje na protokole w dowolnym języku oprogramowania.

Co ciekawe, deweloperzy mogą budować projekty w sieci Cosmos, używając do tego Tendermint Core jako pomostu pomiędzy Tendermint Core a zestawem do tworzenia oprogramowania (SDK) Cosmos.

Tendermint-walidatorzy

Działanie Tendermint jest proste i łatwe do zrozumienia. Jest on asynchronicznym protokołem konsensusu Bizantyjskiej Tolerancji Błędów.

Uczestnicy protokołu są nazywani walidatorami. Na zmianę proponują bloki transakcji i głosują nad nimi. Bloki są oczywiście przekazywane w łańcuchu, z jednym blokiem na każdej wysokości. Jeśli blok nie zostanie dodany do łańcucha, wówczas przechodzi do następnej „rundy” i nowi walidatorzy otrzymują propozycję tego bloku dla tej wysokości. Aby blok został dodany do łańcucha, Tendermint wymaga dwóch etapów głosowania: pre-vote oraz pre-commit. Blok jest dodawany, kiedy więcej niż 2/3 walidatorów zagłosuje na blok w tej samej rundzie.

Teraz musisz się skupić, albowiem przechodzimy do bardziej zaawansowanego działania protokołu. Osoby zatwierdzające, czyli walidatorzy, mogą nie oddać swojego głosu. Mogą być aktualnie offline lub sieć jest po prostu wolna. W tej sytuacji Tendermint pozwala ustalić sieci, że walidator może zostać pominięty.

Walidatorzy czekają stosunkowo krótko na otrzymanie kompletnego bloku od wnioskodawcy, zanim zagłosują na jego przejście „do kolejnej rundy”. Ten limit czasu sprawia, że Tendermint jest protokołem słabo synchronicznym. Ale tylko w tej sytuacji-reszta protokołu jest asynchroniczna. Walidatorzy robią postępy dopiero wtedy, kiedy dany blok dostanie 2/3 głosów.

Tendermint ma jednak mechanizm upraszczający. O czym mowa? Używa on tego samego mechanizmu do zatwierdzenia bloku, co do jego przejścia do następnej rundy.

W tej sytuacji zakładamy, że mniej niż 1/3 walidatorów jest bizantyjska. Oznacza to, że Tendermint gwarantuje nam bezpieczeństwo – bloki nie zostaną naruszone, czyli do łańcucha nigdy nie zostaną dodane dwa bloki na tej samej wysokości. Aby takie działanie miało miejsce, protokół wprowadza kilka zasad blokowania, które modulują przepływ. Gdy walidator zadeklaruje blok, jest on zablokowany na tej wysokości, co deklaracja. Następnie mamy głosowanie nad danym blokiem.

Skalowalność i elastyczność Tendermint

Zalet tego protokołu jest wiele. Dodamy teraz kolejną, czyli wysoką skalowalność. Może on rozszerzać się lub skalować w zależności od tego, ile transakcji obsługuje.

Z naszego uniwersytetu zdążyłeś już dowiedzieć się, że wiele blockchainów i protokołów ma problem ze skalowalnością. Zator występuje, kiedy przepustowość sieci nie nadąża z ilością działań. W rezultacie sieć robi się coraz bardziej zatłoczona, prędkość transakcji maleje, a koszty rosną.

Swoją skalowalność Tendermint uzyskuje dzięki shardingowi. Transakcje w protokole są uruchamiane na shardach lub mniejszych bazach danych.

Porozmawiajmy teraz o elastyczności. Tendermint ma większą elastyczność niż przeciętny blockchain. Wszystko ze względu na swoją modułową budowę. Dzięki temu możemy łatwo oddzielić mechanizm konsensusu od interfejsu aplikacji. Deweloperzy nie muszą bootstrapować ekosystemu – wchodzą w interakcję z interfejsem aplikacji i ABCI.

Architektura modułowa

Wspominaliśmy już, że Tendermint jest wyjątkowy, prawda? Dodamy do tego jeszcze jedną zaletę – modułową architekturę. Standardowo blockchainy mają monolityczną strukturę. Oznacza to, że elementy tej struktury są zarówno niezależne, jak i ze sobą powiązane.

Architektura modułowa ułatwia aktualizację jednego aspektu systemu bez zakłócania pracy całego. Pozwala też programistom na tworzenie niestandardowych programów bez konieczności uruchamiania całej sieci.

Tendermint Core, o którym pisaliśmy kilka akapitów wyżej, został zaprojektowany jako właśnie modułowy system, z warstwą aplikacji. To na tej warstwie deweloperzy konstruują i integrują swoje aplikacje. Niezależnie od warstw sieci i konsensusu. Taka funkcjonalność pozwala deweloperom na implementację kodu bez obaw o poboczne elementy.

Pozytywne elementy architektury Tendermint to:

  • Uproszczenie procesu tworzenia aplikacji.
  • Możliwość budowania apek przy użyciu różnych języków.
  • Bezproblemowy onbording różnych, zdecentralizowanych aplikacji.

Podsumowanie

Tendermint jest pasjonującym protokołem. Jednocześnie – innowacyjnym. Śmiało możemy powiedzieć, że to silnik dla łańcuchów blockchain, który umożliwia deweloperom wiele ciekawych rzeczy. Jedną z najważniejszych jest budowanie aplikacji przy użyciu dowolnego języka programowania.

Tendermint Core i ABCI to podstawowe elementy Tendermint. Sam ekosystem jest wysoko skalowalny, integralny i modularny.

Zapisz się do newslettera!

Otrzymuj co tydzień najnowsze informacje o kryptowalutach na swój e-mail.