Czy dobrze rozumiemy skalowanie blockchain?
Skalowalność skalowalności nierówna. Bardzo często w rozmowach używamy tego pojęcia w odniesieniu do Bitcoina czy blockchain niekoniecznie poprawnie i do końca rozumiejąc subtelne różnice między nimi. W dużej mierze prowadzi to do nieporozumień i przyjmowania nieodpowiednich punktów odniesienia. W tym tekście przyjrzymy się zatem pojęciu skalowalności i odniesiemy je do poszczególnych obszarów tematycznych tak, aby umieszczone w odpowiednim kontekście dały pełny obraz różnic ze wskazaniem zarówno zalet, jak i wad. Mam nadzieję, że po przeczytaniu niniejszego artykułu zagadnienie skalowalności stanie się jasne i będziemy mogli z pełną świadomością stosować je w czasie dyskusji i przede wszystkim poprawnie rozumieć.
Nie każdy system skaluje się dobrze
Skalowalność jest jednym z najważniejszych problemów w blockchain i była przedmiotem zainteresowania zarówno praktyków branży, jak i badaczy akademickich od czasu narodzin Bitcoina.
Z pewnością słyszeliście termin „skalowalność” lub „skalowalny blockchain”. W większości przypadków „skalowalny” łańcuch bloków jest często uważany za kolejną nazwę własną blockchain, która może osiągnąć wysoki TPS (transakcja na sekundę). Czasami jest jeszcze gorzej, kiedy jego prawdziwe znaczenie jest przekręcane lub nawet nadużywane, aby wprowadzić w błąd rozmówcę i uzyskać niezasłużone korzyści.
Ten artykuł ma na celu przedstawienie pewnych pomysłów na to, co właściwie oznacza termin „skalowalność” w dziedzinie blockchain. Pomimo faktu, że termin jest dobrze zdefiniowany w wielu dziedzinach nauki, ma on w kontekście blockchain kilka różnych znaczeń.
W przypadku większości systemów komputerowych (np. baz danych lub wyszukiwarek) „skalowalność” odnosi się do zdolności systemu do radzenia sobie z rosnącą ilością pracy lub skalowaniem. System nie skaluje się dobrze, czyli innymi słowy, ma słabą skalowalność, jeśli zamiast po prostu przydzielać więcej zasobów (np. moc obliczeniowa, serwery lub przepustowość), wymaga dodatkowych wysiłków, które modyfikują system, aby poradzić sobie ze zwiększonym obciążeniem podczas pracy.
https://www.youtube.com/watch?v=fYknp5EDwOA
Jednak w dziedzinie blockchain słowo „skalowalność ma znacznie szerszy zakres znaczeń. Co ciekawe, nawet termin „blockchain” nie został dobrze zdefiniowany z naukowego punktu widzenia. Na przykład, w jednym z najważniejszych artykułów na temat skalowalności blockchain, jakakolwiek poprawa działania w perspektywie przepustowości, obsługi opóźnień, czasu ładowania początkowego lub kosztu transakcji nazywano „skalowaniem” a wynikowy system blockchain “skalowalnym”.
Obecnie istnieją różne systemy blockchain, które można uznać za „skalowalne”, ale ich przepustowości znacznie się różnią. Zwróć uwagę, że słowo „skalowalny” jest w blockchain terminem o zabarwieniu porównawczym. Gdy system blockchain jest nazywany skalowalnym, wskazuje to, że system osiąga wyższy TPS niż niektóre istniejące systemy poprzez modyfikację jego mechanizmu konsensusu i / lub dostosowanie niektórych parametrów systemowych.
W rzeczywistości możemy podzielić skalowalne blockchainy na cztery typy:
- Skalowanie Bitcoin: rozwiązania poprawiające przepustowość sieci Bitcoin poprzez zwiększenie rozmiaru bloku lub zmniejszenie interwału bloku bez zmiany algorytmu PoW konsensusu Bitcoin;
- Skalowanie PoW: rozwiązania, które nadal działają w ramach konsensusu Satoshiego, ale osiągają wyższą przepustowość niż PoW Bitcoin poprzez modyfikację algorytmu;
- Algorytmy Scaling Byzantine Fault Tolerance (BFT): rozwiązania oparte na algorytmach BFT, ale o zmniejszonej złożoności komunikatu niż PBFT;
- Łańcuchy blokowe „scale-out”: rozwiązania, które rozluźniają wymóg sprawdzania poprawności/ wydobycia węzłów w celu poznania całej historii transakcji, dzięki czemu przepustowość systemu może rosnąć wraz ze wzrostem rozmiaru sieci, a tym samym osiągnąć lepszą skalowalność niż powyższe trzy typy systemów.
Skalowanie Bitcoin
Wszyscy wiemy, że Bitcoin źle się skaluje. Dzieje się tak, ponieważ PoW Bitcoin na to nie pozwala. W Bitcoin PoW jest używany jako losowa metoda określania następnego prawidłowego bloku, tj. wszystkich węzłów działających w ramach PoW przez pewien czas, aby określić zwycięzcę. Co więcej, nowy blok musi być zsynchronizowany z całą siecią, aby każdy węzeł mógł (w przybliżeniu) konkurować w tym samym wyścigu o następny blok. Zasadniczo Bitcoin PoW ma strukturę kaskadową, jak pokazano na rysunku poniżej.
Źródło: tutaj
To, że synchronizacja trwa 1 minutę, gdy czas trwania POW wynosi 10 minut (jak w Bitcoin) jest jak najbardziej poprawne. Jednak Bitcoin nie byłby już sprawiedliwy i bezpieczny, jeśli czas synchronizacji byłby porównywalny z każdym cyklem PoW, co miałoby miejsce, gdyby rozmiar bloku wzrósł lub przedział czasowy bloku znacznie się zmniejszył, np. interwał blokowy został skrócony do 1 min. W takich przypadkach zobaczylibyśmy z pewnością wiele forków pojawiających się w sieci, co ostatecznie spowodowałoby bardzo długi czas potwierdzenia i obniżony poziom bezpieczeństwa.
Oznacza to pokrótce, że czas trwania każdej rundy algorytmu konsensusu powinien być znacznie większy niż okres synchronizacji. Ile czasu potrzeba na synchronizację zależy nie tylko od projektu algorytmu konsensusu, ale w dużej mierze od charakterystyki sieci bazowej, np. przepustowości, opóźnienia, topologii, poziomu decentralizacji. W artykule „O skalowaniu zdecentralizowanych łańcuchów blokowych” szacuje się, że w 2016 roku Bitcoin nie mógł osiągnąć więcej niż 27 TPS.
To ograniczenie może nie mieć zastosowania do altcoina używającego tego samego algorytmu PoW dla konsensusu lub nawet Bitcoina, ponieważ sieci różnią się wielkością lub poziomem decentralizacji. Jednak wspomniane powyżej ograniczenie nadal występuje. Stąd podejścia „naiwne”, które powiększają blok lub zmniejszają interwał blokowy, mogą jedynie „skalować” Bitcoin o mały margines.
Jakie podejście do skalowalności podejmują inne kryptowaluty niż Bitcoin możecie zobaczyć na poniższej grafice:
Źródło: tutaj
Skalowanie Proof of Work
Aby rozwiązać powyższy problem, proponuje się nowe schematy PoW tak, aby bezpieczeństwo systemu nie zależało od synchronizacji nowych bloków, co ilustruje poniższy rysunek. Innymi słowy, okres konsensusu nie musi być znacznie większy niż czas synchronizacji, ale może być porównywalny lub nawet równy. Na przykład w Bitcoin-NG konsensus jest używany tylko do określenia lidera zamiast całego zestawu transakcji. W ten sposób synchronizacja transakcji mogłaby być przeprowadzona równolegle i można by użyć większego rozmiaru bloku.
Źródło: tutaj
Skalowanie BFT
Algorytmy Byzantine Fault Tolerance (BFT) to rodzina algorytmów konsensusowych, które mogą tolerować wadliwe węzły zachowujące się arbitralnie, co może pozwolić uczciwym węzłom osiągnąć konsensus w niezaufanych sieciach.
Źródło: tutaj
PBFT to algorytm, który ma złożoność O (N²), jak pokazano na powyższym rysunku. Tutaj N jest całkowitą liczbą węzłów walidujących/ górniczych w sieci. Poniższy rysunek ilustruje pięć kroków w każdej rundzie konsensusu, a strzałka oznacza wiadomość wysyłaną z jednego węzła do drugiego. Można zauważyć, że aby osiągnąć konsensus w sprawie jednej wiadomości, wiadomość musi być najpierw transmitowana do wszystkich węzłów w sieci, a następnie ponownie transmitowana przez każdy węzeł do każdego innego węzła.
Jedną z głównych wad PBFT jest to, że słabo skaluje się w stosunku do rozmiaru sieci ze względu na złożoność komunikatu O(N²). Łatwo jest stwierdzić, że liczba komunikatów wysyłanych między węzłami dla każdej transakcji wzrośnie czterokrotnie wraz z większą liczbą węzłów sprawdzających poprawność sieci. Następnie, ponieważ przepustowość mogłaby rosnąć tylko proporcjonalnie do liczby węzłów, zmniejszy się wraz z rozwojem sieci i w zasadzie nie będzie mogła być używana w sieci z więcej niż, na przykład, z 50 węzłami.
Aby rozwiązać ten problem, zaproponowano kilka pomysłów na skalowanie klasycznych algorytmów BFT, takich jak PBFT. Pierwsza próba nazywana jest spekulacyjną BFT. Idea jest bardzo prosta: węzły najpierw spekulatywnie zakładają, że stan sieci jest dobry, a środowisko jest zaufane, i używają prostszych i wydajniejszych schematów, aby osiągnąć konsensus. Ponieważ kwestia skalowalności staje się coraz ważniejsza, pomysł spekulatywnego BFT został ponownie przeanalizowany i wykorzystany przez praktyków i badaczy blockchain jako element konstrukcyjny do budowy ich systemów blockchain, takich jak Byzcoin, Algorand i Thunderella.
Drugim pomysłem jest celowe usunięcie nadmiarowości w procesie BFT za pomocą teoretycznego narzędzia informacji, zwanego kodowaniem wymazywania, które może poprawić efektywność wykorzystania przepustowości. Na przykład Honeybadger-BFT należy do tej kategorii. Trzeci pomysł polega na wprowadzeniu losowości do komunikacji między węzłami, tak aby po otrzymaniu wiadomości zamiast potwierdzać opinię innych peerów, każdy węzeł po prostu nasłuchuje niektórych losowo wybranych węzłów i podejmuje odpowiednią decyzję. Teoretycznie, z dużym prawdopodobieństwem węzeł podejmie prawidłową decyzję, jeśli wielkość próbki zostanie wybrana prawidłowo, a proces próbkowania będzie naprawdę losowy. Algorytm konsensusu Avalanche wykorzystuje ten pomysł, aby uzyskać lepszą skalowalność.
Skalowalne blockchainy (scale-out)
Ta koncepcja jest bardziej podobna do oryginalnej „skalowalnej” definicji w systemach rozproszonych. W pewnym sensie zarówno skalowalny łańcuch bloków, jak i skalowalny system rozproszony cieszą się większą przepustowością w miarę rozwoju sieci. Podstawowa różnica między nimi polega na tym, że skalowalność zdefiniowana w systemach rozproszonych wymaga, aby wydajność systemu rosła liniowo do liczby serwerów (węzłów), co jest ogólnie nieosiągalne dla blockchain z powodu decentralizacji.
Dlatego badacze blockchain dążyli do niższego poziomu skalowalności, aby przepustowość sieci rosła podrzędnie wraz ze wzrostem rozmiaru sieci. Uzyskane schematy są obecnie nazywane blokami/ schematami „skalowalnymi”. Być może nie słyszeliście o określeniu scale-out, ale zdecydowanie powinniście słyszeć o shardingu, Lightning Network lub Ethereum Plasma. Wszystkie można uznać za rozwiązania problemu skalowalności blockchain określane mianem scale-out.
W blockchainach scale-out niektóre wiadomości nigdy nie dotrą do niektórych węzłów. Przez „węzły” rozumiemy tych, którzy uczestniczą zarówno w walidacji, jak i w konsensusie. W kontekście Bitcoin oznaczałoby to, że górnicy nie muszą znać i zatwierdzać wszystkich transakcji. Poważną konsekwencją tego ustawienia jest to, że zwiększa ryzyko podwójnego wydatkowania, ponieważ monety wydane w transakcji mogą być ponownie wydawane w węzłach, które nie znają transakcji. Aby uniknąć podwójnego wydatkowania, a w międzyczasie zachować odpowiednie ustawienie, możemy potrzebować niektórych węzłów w sieci, aby zweryfikować transakcje w imieniu innych, co w rzeczywistości przywraca systemowi pewien poziom centralizacji. W rezultacie zagrożone jest bezpieczeństwo lub decentralizacja. Ten problem jest często nazywany „blockchain scalability trillema”. Ze względu na to doszło do debaty na temat tego, czy w ogóle schematy scale-out powinny być realizowane. Trzeba wybierać 🙁
W schematach scale-out funkcjonują dwie popularne strategie do projektowania i implementowania skalowalnego blockchain: jeden polega na shardingu, a drugi na schematach off-chain.
Sharding polega na podzieleniu całej sieci na podsieci, a mianowicie „odłamki” (shards), w których węzły w każdej podsieci współdzielą księgę lokalną. W sytuacji idealnej, każdy węzeł musi tylko znać, sprawdzać i przechowywać wiadomości przesyłane w obrębie własnego fragmentu zamiast wszystkich wiadomości. Możemy myśleć o shardingu jako o rozbiciu oryginalnego łańcucha blokowego na mniejsze blockchainy, które są mniej bezpieczne, ponieważ jest mniej węzłów weryfikujących transakcje i uczestniczących w konsensusie.
Dlatego największymi wyzwaniami dla strategii shardingu są:
1) jak zabezpieczyć każdy fragment (shard)?
2) jak shardy mogą skutecznie i bezpiecznie współdziałać w celu obsługi transakcji między nimi?
Przykładowo, jeśli niektóre kryptowaluty zostaną przeniesione z shardu A do shardu B, odbiorca w shardzie B powinien zapytać węzły z shardu A o ważność walut, aby zapobiec oszustwom. Zaproponowano wiele rozwiązań tych dwóch problemów. Wśród nich należy wymienić: Omniledger, Chainspace, Rchain, Sharding Ethereum.
Schematy off-chain są w dużej mierze inspirowane przez Lightning Network, która wykorzystuje kilka sprytnych sztuczek, aby umożliwić działanie kanału off-chain między dwoma węzłami dla szybkich płatności bez konieczności rejestrowania każdej transakcji między nimi na Bitcoin. Jednakże taka wygoda wiąże się z kosztami. To znaczy, że obie strony muszą złożyć depozyty w łańcuchu z wyprzedzeniem, aby otworzyć między nimi kanał poza łańcuchem. Od tego czasu zaproponowano wiele systemów poza łańcuchem, które wykraczają poza Bitcoin i zastosowanie w niej szybkiej płatności. W szczególności strony mogą współdziałać za pośrednictwem innych rodzajów wiadomości, np. transakcji wielostronnych, warunkowych transakcji płatniczych i transakcji inteligentnych umów. Następnym wyzwaniem jest zaprojektowanie i wydajne wdrożenie takich mechanizmów off-chain z egzekwowaniem łańcuchowym dla różnych typów komunikatów w różnych blokach. Niektóre szeroko omawiane projekty poza łańcuchem obejmują: Plasma, Polkadot i Liquidity.
Sharding kontra Off-chain
Niełatwo jest odróżnić schematy shardingu od off-chain. Niektóre z nich mogą również mieć główny łańcuch lub wspólny konsensus między wszystkimi fragmentami, a niektóre schematy off-chain mogą również dzielić węzły na grupy.
W rzeczywistości termin „konsensus” składa się z dwóch właściwości: spójności (zgodności) i żywotności (dostępność). Pierwsze oznacza, że dwa uczciwe węzły nie powinny mieć różnicy zdań co do treści wiadomości. To ostatnie oznacza, że jeśli uczciwy węzeł zna wiadomość, wszystkie inne uczciwe węzły również o tym wiedzą. Zarówno w systemach shardingowych, jak i off-chainowych, żywotność jest zagrożona, ponieważ niektóre wiadomości nie będą znane wszystkim uczciwym węzłom. Różnica między nimi polega na tym, jak radzą sobie ze spójnością. W szczególności sharding gwarantuje spójność w przypadku fragmentu z pewną degradacją bezpieczeństwa. Z drugiej strony, podejścia poza łańcuchem nie gwarantują spójności. Zamiast tego spójność zależy od pewnego egzekwowania ekonomicznego, takiego jak depozyt na głównym łańcuchu i mechanizm kar, gdy ktoś źle zachowuje się w ramach off-chain.
Podsumowanie
Mamy nadzieję, że koncepcja skalowalności blockchaina jest teraz dla Was jaśniejsza. Najważniejszą konstatacją jest to, że tak zwany „skalowalny blockchain” nie mówi nic o jego skalowalności, chyba że jest porównywany z Bitcoinem, PoW Bitcoina, klasycznym BFT lub blockchainem, który nie nosi znamion scale-out.
Kryteria określania skalowalności
Bardzo trudno jest ocenić „skalowalność” systemu blockchain bez pewnego tła teoretycznego i doświadczenia w tej dziedzinie. Podsumowując, istnieją trzy kryteria można wykorzystać do oceny, czy dany system blockchain korzysta z trzech omówionych dotychczas typów skalowalności:
- Czy blockchain używa konsensusu typu Bitcoin PoW? Jeśli tak, czy istnieje ograniczenie, że węzły powinny zawsze synchronizować się z najnowszymi blokami, w przeciwnym razie ich moc wydobywcza zostałaby zmarnowana? Jeśli tak, to nie jest skalowalny PoW.
- Czy blockchain używa konsensusu typu BFT? Jeśli tak, czy istnieje jakaś inteligentna sztuczka, która jest używana do zmniejszenia złożoności wiadomości? Jeśli nie, to nie jest skalowalnym BFT.
- Czy każda wiadomość musi być znana każdemu węzłowi sprawdzania poprawności/ wydobycia? Węzeł oznacza tutaj węzły zaangażowane w konsensus, tj. węzły, które mogą generować bloki (górnicy w kontekście kryptowalut). Jeśli tak, to nie jest to blockchain scale-out.