Skalowalność Blockchaina: Zrozumieć Ethereum 2.0
Dzisiejszy wpis nie może zacząć się inaczej niż od Screenshota z mojego Twittera.
Vitalik Buterin, czyli 25 latek, który w 2013 roku opublikował Ethereum whitepaper… W czasach największego boomu, cena 1 ETH wynosiła 1328 $, aktualnie jest równa 188 $. Projekt został opisany przeze mnie w dwóch wpisach, do których Was odsyłam:
- Opis kryptowalut: ETH, LTC, LSK, XMR. Czym jest ICO, Token oraz Smart kontrakt?
- Czym jest konsensus? PoW, PoS — w jaki sposób dodawane są informacje do Blockchaina?
Dzisiejsza publikacja ma na celu przybliżenie Ethereum 2.0 czyli “ulepszonej” wersji Ethereum, która powstała w związku z problemami ze skalowalnością sieci. W rezultacie stworzono rozwiązanie umożliwiające przejście z systemu Proof of Work (PoW) na Proof of Stake (PoS), a także wykorzystanie fragmentaryzacji blockchaina tzw. “Sharding”, przy okazji wykonując operacje na nowej maszynie wirtualnej (eWASM).
Skalowalność jest tematem nieodłącznie związanym z blockchainem, ze względu na coraz większą liczbę uczestników sieci oraz wykonywanych transakcji, przy jednoczesnym ograniczeniu rozmiaru bloku oraz określonym odstępie między kolejnymi blokami. Zarówno zaletą, jak i wadą Ethereum jest fakt, iż wszystkie węzły sieci muszą przetworzyć każdą transakcję, która ma być do niej dołączona. Z jednej strony oznacza to zwiększenie bezpieczeństwa, z drugiej zaś sprawia, iż cała sieć jest tak szybka, jak najwolniejszy komputer. W rezultacie tworzy się duży dysonans w liczbie transakcji potwierdzanych przez tradycyjne metody płatności takie jak Visa i Mastercard (tysiące transakcji), Ethereum (7-15 transakcji na sekundę) oraz Bitcoin (3-7 transakcji na sekundę).
Skalowalność jest problemem zawartym w “Scalability Trilemma”, który głosi, iż zdecentralizowana baza danych (blockchain) może posiadać 2/3 wymienionych cech:
- Bezpieczeństwo: odporność na ataki np. przejęcie 51% sieci oraz fault tolerant, czyli trwałość systemu pomimo awarii lub odłączenia jego elementów;
- Decentralizacja: brak jednostki centralnie zarządzającej, konsensus jako sposób na zachowanie porządku w sieci;
- Skalowalność: zwiększenie lub zachowanie wydajności wraz ze wzrastającą liczbą uczestników i/lub transakcji;
Wymienione w trylemacie cechy utrudniają znalezienie jednorakiego rozwiązania, które usprawniłoby funkcjonowanie sieci. Prowadzone dyskusje oraz poszukiwanie doprowadziły do utworzenia wielu pomysłów:
…z których najbardziej znanymi są:
- Zwiększenie wielkości bloku (w rezultacie wymagana większa moc komputera do potwierdzania transakcji — ryzyko centralizacji sieci przez superkomputery);
- Odseparowanie części informacji z bloku, które opisałam w zeszłym roku ”To rozwiązanie, które pozwala na zawarcie większej liczby transakcji w bloku, bez konieczności zwiększania jego rozmiaru. Stanie się tak poprzez wyeliminowanie niektórych informacji np. podpis oraz klucz publiczny”;
- Przechowywanie transakcji poza głównym blockchainem:
- Raiden (Ethereum), Lightning Network (Bitcoin) — rozwiązanie polega na tworzeniu małych kanałów komunikacji między dwoma kontrahentami, wykonującymi więcej niż jedną transakcję. W momencie zamknięcia kanału, ostateczny status zostaje zapisany na głównym blockchanie;
- Plasma (Ethereum) — rozwiązanie stworzone dla dApps (zdecentralizowane aplikacje), umożliwiające wykonywanie operacji w mniejszych blockchainach (z odrębnym konsensusem), połączonych z głównym za pomocą smart kontraktów;
Niestety tego typu usprawnienia mogę w rezultacie doprowadzić do osłabienia bezpieczeństwa sieci, która staje się podatna na ataki. - Last but not least: Sharding — rozwiązanie, które zostanie zaimplementowane w Ethereum 2.0 ! Uważam, że jest to bardzo interesujące, ze względu na to, iż temat skalowalności ciągnie się minimum 2 lata i twórcy Ethereum w końcu zdecydowali się na implementację jednego z nich.
Ethereum 2.0 jest nowym Blockchainem, nie hard forkiem istniejącego łańcucha (Czym jest fork?) oraz rozwiązuje wcześniej opisany “Scalability Trilemma”, gwarantując bezpieczeństwo, skalowalność oraz decentralizację.
Jest to mechanizm umożliwiający grupowanie węzłów, które w rezultacie tworzą kawałki blockchaina. W ten sposób odchodzimy od obowiązku przetwarzania każdej transakcji przez całą sieć. Węzły notarialne są wybierane w sposób losowy. Dodatkowo po potwierdzeniu transakcji, zostaje ona przekazana do głównego łańcucha oraz dodana dopiero w momencie weryfikacji przez węzły walidacyjne głównego łańcucha.
Z racji tego iż jest to nieco skomplikowane i niełatwe do opisania, wrzucam Wam fajną wizualizację:
Sharding polega na rozdrobnieniu historii (zestawienie wszystkich transakcji, które miały miejsce od genesis bloku) oraz aktualnego stanu ( saldo + nonce + smart kontrakt + baza danych) blockchaina Ethereum, na małe odłamki (ang. shards), według określonego schematu np. wszystkie adresy rozpoczynające się od 0x00 znajdą się w jednym odłamku, 0x01 w drugim etc.
Pozwala to na stworzenie sieci, w której węzły przetwarzają małą grupę transakcji, poprzez nominowanie grupy walidatorów. W celu uzyskania miana walidatora, należy przejść ze starego systemu (Proof of Work) na nowy (Proof of Stake), poprzez przekazanie określonej liczby kryptowaluty ETH oraz zapisania potwierdzenia w postaci “receipt” na Beacon Chain (główny łańcuch).
Potwierdzenie każdego bloku poprzedza losowy wybór grupy walidatorów, odpowiedzialnych za weryfikację transakcji. Z określonej grupy jeden walidator jest nominowany w celu wstępnej oceny bloku, następnie reszta rozpoczyna głosowanie poprzez poświadczenie wyniku (Attesters).
Po potwierdzeniu bloku przez wszystkich walidatorów, rozpoczyna się kolejne losowanie oraz weryfikacja następnych transakcji. Proces powtarza się co 6 sekund. Określona grupa węzłów poświadczających tworzy “Cross-Link”, komunikując się z Beacon Chain.
W ten sposób rezultat potwierdzonych transakcji zostaje ostatecznie umieszczony na Beacon Chain, za pomocą Cross-link. Jest to rozwiązanie umożliwiające komunikację między poszczególnymi odłamami blockchaina. Beacon Chain przechowuje również informacje na temat walidatorów, którzy dołączają do sieci poprzez jednostronną transakcję (palenie tokenów ETH oraz przejście z PoW na PoS).
Uczestników sieci możemy podzielić na kilka rodzajów węzłów, w zależości od przechowywanych informacji. Najbardziej skrajnymi są węzły “Super-full”, przechowujące historię beacon chain oraz poszczególnych porcji blockchaina — Shards) oraz węzły typu “light” weryfikujące poprawność nagłówka bloków. Ponadto wyróżniamy węzły “Top-level” oraz “Single-shard”.
Według harmonogramu (roadmap) aktualnie znajdujemy się w Fazie 0, po której pozytywnym zakończeniu, powstaną dwa aktywne łańcuchy Ethereum — Ethereum 1.0 (aktualny PoW) oraz Ethereum 2.0 (Casper PoS), dzięki czemu użytkownicy będą mogli przetransportować środki ze starego blockchaina na nowy.
Jak zawsze: Zrobiłam dla Was krótkie podsumowanie tematu oraz odsyłam do bardziej rozszerzonej dokumentacji na githubie:) https://github.com/ethereum/wiki/wiki/Sharding-FAQ
oraz prezentacji Vitalika:
W międzyczasie znalazłam tyle materiałów, że nie jestem pewna jak im podołam. Mam nadzieję, że rezultatem będą kolejne wpisy!
Miłego doszkalania!;)