Skip to main content
Algorytmy

Proof of Stake – godny następca Proof of Work?

By 1 czerwca, 20211 kwietnia, 2022No Comments11 min read

Dlaczego Proof of Stake?

Proof of Stake, podobnie do Proof of Work  jest algorytmem konsensusu w sieciach Blockchain. Został on pierwszy raz przedstawiony w 2011 roku na forach Bitcointalk jako alternatywa do PoW i sposób na rozwiązanie problemów go trapiących.

Podstawowym założeniem PoW jest wykorzystanie mocy obliczeniowej węzłów sieci Blockchain, które wykonują kosztowne obliczeniowo operacje w celu weryfikacji transakcji i kopania nowych bloków sieci. To prowadzi do gwałtownie zwiększającego się kosztu energetycznego tych operacji, ponieważ węzły konkurują ze sobą, a jeżeli rozwiązanie jest znalezione zbyt szybko, system zwiększa poziom trudności kolejnych operacji weryfikujących. Rezultatem tego jest ogromny koszt energetyczny i powstanie całej gałęzi branży wytwarzającej sprzęt zoptymalizowany pod zadanie kopania nowych bloków w Blockchain.

Twórcy Proof of Stake uznali, że istniejący mechanizm nie jest wystarczająco dobry i czas zaproponować alternatywne rozwiązanie.

Jak działa Proof of Stake?

W algorytmie Proof of Stake walidator nowego bloku jest wybierany losowo spośród węzłów, które mają zgromadzoną i zablokowaną minimalną wymaganą ilość tokenów danej sieci. Liczba zgromadzonych tokenów ma wpływ na prawdopodobieństwo wyboru danego uczestnika, przez co bogatsi gracze mają większą szansę na walidowanie kolejnych bloków i transakcji. W celu uniknięcia sytuacji, kiedy najbogatsze węzły w sieci praktycznie monopolizują mechanizm konsensusu i zarabiania na przetwarzaniu transakcji, stosuje się dodatkowe kryteria – najpopularniejsze z nich to:

  • losowanie bazujące na stawce (randomized block selection)

W powyższym mechanizmie wybór następnego wykuwacza bloku (przyjęło się, że w PoS bloki się wykuwa (ang. forge), w przeciwieństwie do kopania (ang. mine) w PoW) następuje na podstawie kombinacji najniższej wartości hasha i najwyższej liczbie zablokowanych tokenów.

  • wiek monety (coin age)

Wiek monety bierze pod uwagę czas, przez który tokeny są zablokowane na potrzeby weryfikacji sieci. Dzięki temu eliminowane są sytuacje, kiedy duże liczby tokenów będą blokowane na chwilę w celu krótkotrwałego zwiększenia szans na zarobek, dlatego najczęściej muszą one być zablokowane co najmniej 30 dni zanim będą mogły być wykorzystane w losowaniu, co można przedstawić wzorem:

Szansa na wylosowanie = liczba tokenów x liczba dni od zablokowania tokenów

Patrząc na powyższą formułę można dostrzec, że mniejsza liczba tokenów przetrzymywana przez dłuższy okres czasu może być równie skuteczna, co krócej przechowywana większa ich liczba.

Po wygraniu losowania wiek monety jest resetowany i minimalny wymagany czas zablokowania musi upłynąć ponownie, zanim węzeł będzie mógł uczestniczyć w losowaniu.

Łatwo zauważyć, że założenia algorytmu wieku monety pozwalają na uniknięcie monopolu najbogatszych węzłów, ponieważ nawet jeżeli wygrają losowanie, to przez kolejny wymagany okres nie mogą wziąć ponownie udziału.

W Proof of Stake wybrany walidator bloku jest wynagradzany poprzez prowizję od zweryfikowanej transakcji, która służy jako zachęta i zapewnia chętnych do realizacji założeń zdecentralizowanej sieci.

Dobrym przykładem do zilustrowania algorytmu PoS jest Tendermint, na którym opiera się m.in. sieć Cosmos.Jest to popularny wariant PoS oparty o BFT (Byzantine Fault Tolerant), opierający się o łatwą do zrozumienia maszynę stanów i mechanizm głosowania.

Tendermint jest turowym mechanizmem głosowania na zmiany w sieci Blockchain, każda tura zawiera 4 fazy: propose, pre-vote, pre-commit i commit.

Uczestnicy zwani są walidatorami, a każda tura przebiegu algorytmu przedstawia się następująco:

  1. Wybrany uczestnik sieci (proposer) proponuje nowy blok o zdefiniowanych parametrach wysokość H (ang. height) i runda R. Proposer jest wybierany kolejno na podstawie swojej stawki w sieci (liczby posiadanych tokenów).
  2. Jeżeli proposer zmieścił się w czasie przeznaczonym na tą fazę i blok ma poprawne parametry, to wchodzimy w fazę pre-vote.
  3. Pozostałe węzły sieci (walidatorzy) muszą podjąć decyzję o akceptacji zaproponowanego bloku. Jeżeli walidator nie jest zablokowany w poprzedniej rundzie algorytmu i uzna, że właściwości świeżo zaproponowanego bloku są poprawne, to wysyła do sieci akceptację bloku w fazie pre-vote. W przeciwnym wypadku odrzuca propozycję poprzez wysłanie wartości nil do sieci. Po tym sieć wchodzi w fazę pre-commit.
  4. Bloki rozsyłają swoje decyzje z fazy pre-vote po całej sieci tak, żeby każdy jej uczestnik poznał decyzje pozostałych.
  5. Jeżeli dany walidator przed upływem określonego limitu czasu (ang. timeout) uzna, że ponad ⅔ węzłów w sieci (min. ⅔ + 1) zaakceptowało zaproponowany blok, to wysyła on akceptację dla fazy pre-commit. W tym kroku każdy węzeł weryfikuje głosy reszty węzłów sieci. W przypadku niepowodzenia tej fazy, walidator odrzuca blok wysyłając wiadomość nil dla fazy pre-commit.
  6. Jeżeli do sieci wpłynie ⅔ + 1 wiadomości akceptujących fazę pre-commit, akceptuje ona dany blok i dopisuje do blockchaina. Sieć wkroczyła w fazę commit. W przeciwnym wypadku proposer proponuje nową wartość i cały proces rozpoczyna się od nowa.

Z powyższego opisu łatwo zauważyć, że Tendermint zapewnia poprawne działanie w przypadku gdy liczba złośliwych lub wadliwych uczestników sieci nie przekracza ⅓, dlatego uznajemy, że jest algorytmem BFT.

Diagram stanów w algorytmie Tendermint (źródło: tendermint.com)

Staking

Blokowanie funduszy w specjalnym portfelu na potrzeby weryfikacji transakcji i osiągania konsensusu, który jest podstawą sieci opartych na Proof of Stake – nazywane jest stakingiem. Blokując swoje środki w ten sposób jesteśmy w puli uczestników sieci, którzy mogą być wylosowani do zostania walidatorem kolejnego bloku i zarobić dzięki temu określoną liczbę coinów w postaci prowizji od transakcji.

Stakowanie zyskuje na popularności w otoczeniu niskich stóp procentowych i braku alternatyw pozwalających osiągnąć podobne zwroty z inwestycji. Blokadę środków można wycofać, jednakże zwykle wiąże się to z koniecznością odczekania pewnego czasu przed możliwością wypłaty środków.

Opóźnienie to zależy od konkretnej implementacji algorytmu konsensusu w danym blockchainie. Staking jest przeprowadzany przy pomocy tzw. smart contractów, ich działanie różni się pomiędzy różnymi sieciami np. odblokowanie tokenu EOS trwa 72 godziny, a na odblokowanie swoich DOT musisz poczekać 28 dni.

Przykładowe istniejące mechanizmy stakowania:

Ethereum 2.0

Staking coinów najpopularniejszego chaina opartego na PoS, czyli Ethereum 2.0 wymaga minimalnego wkładu 32 ETH (ok 56 900 usd na dzień 22.03.2021), co oznacza, że bariera wejścia jest bardzo wysoka.

Oczekiwany roczny zwrot ze stakowania: ~8% (źródło: stakingrewards.com)

Tezos

Minimalna liczba coinów XTZ do rozpoczęcia stakowania to 1, co przy wycenie na dzień 22.03.2021r. daje jedynie 4.28 usd.

Oczekiwany roczny zwrot ze stakowania: 6% (źródło: ledger.com)

Cosmos

Jeden z najpopularniejszych projektów opartych na IBC (Inter-Blockchain Communication) także umożliwia zablokowanie środków. Minimalna kwota do zablokowania to 0.05 ATOM (~ 1.04 usd)

Oczekiwany roczny zwrot ze stakowania: 8-10% (źródło: ledger.com)

Polkadot

Kolejny popularny projekt projekt oparty na IBC (Inter-Blockchain Communication). Minimalna kwota to 350 DOT, czyli ok 11000 usd.

Oczekiwany roczny zwrot ze stakowania: 13% (źródło: stakingrewards.com)

Przykładowe nagrody za stakowanie 10 najpopularniejszych coinów przedstawia tabela:

Najchętniej stakowane coiny (źródło: stakingrewards.com)

Opisany w tym paragrafie mechanizm świetnie ilustruje poniższy schemat:

Konsensus w algorytmie PoS (źródło: ledger.com)

Bezpieczeństwo

Wiele osób zadaje sobie pytanie, czy tokeny są bezpieczne w sieci korzystającej z PoS? Trzeba sobie jasno powiedzieć, że jest to mechanizm opracowany kilka lat później od PoW, przez co jest mniej “przetestowany w boju” przez oszustów.

Slashing

Jednym z mechanizmów zabezpieczających przed oszustwami jest tzw. slashing. Jeżeli sieć wykryje nieuczciwą transakcję zweryfikowaną przez dany węzeł, część z zablokowanych przez niego środków zostaje utracona (slash), a uczestnik przyłapany przez sieć na nieuczciwej aktywności zostaje pozbawiony możliwości uczestniczenia w wykuwaniu kolejnych bloków.

Atak 51%

W celu przejęcia kontroli nad siecią przez jednego wrogo nastawionego uczestnika (lub zorganizowaną grupę) musiałby on posiadać większość istniejących tokenów w danym blockchainie – ten typ ataku nazywa się atakiem 51% lub atakiem większości. W przypadku uzyskania takiej kontroli, atakujący przejmuje kontrolę nad siecią i może np. wpływać na algorytm konsensusu, wydawać coiny podwójnie (double spending), czy zmonopolizować tworzenie kolejnych bloków.

Chociaż w teorii wydaje się to łakomym kąskiem, koszt przeprowadzenia takiego ataku na rozwiniętej sieci blockchain jest ogromny, im sieć większa i popularniejsza, tym taki atak jest bardziej kosztowny.

W celu przeprowadzenia ataku 51% agresor musiałby kupować agresywnie tokeny z różnych giełd, co wywindowałoby ich cenę i naraziło go na znaczące koszty. Nawet jeżeli to się powiedzie, daną sieć można cofnąć do stanu sprzed ataku (ang. rollback), wtedy atakujący chcący zaatakować ponownie musiałby jeszcze raz ponieść wszystkie koszty.

Proof of Work vs Proof of Stake

Wielu twórców blockchaina wciąż zadaje sobie pytanie który z mechanizmów jest lepszy, odpowiedź jak zwykle w takich sytuacjach brzmi: to zależy 🙂

Energia

Mechanizm PoW wymaga ogromnych ilości energii do działania w dużej skali, jak przedstawione zostało tutaj – w tym momencie cały Bitcoin blockchain zużywa więcej energii niż Szwecja czy Ukraina!

Wynika to z tego, że PoW wymaga przez uczestników wykonywania kosztownych obliczeń kryptograficznych w celu tworzenia nowego bloku. Te obliczenia stają się coraz trudniejsze wraz z rozrostem sieci, analitycy szacują, że gdy cena Bitcoina przekroczy 1 mln USD, to cała sieć będzie zużywała więcej energii niż USA!

PoS nie wymaga tak wielkiej mocy obliczeniowych do działania. Uczestnicy nie muszą ze sobą konkurować szybkością wykonywania działań na specjalnie przystosowanym do tego, energożernym sprzęcie – są wybierani losowo przez Blockchain. Dzięki temu też nie mówimy w tym przypadku o kopaniu (ang. mine) nowych bloków, w przypadku PoS bloki są zwyczajowo wykuwane (ang. forge).

Jeżeli wybrany w losowaniu blok zachował się nieuczciwie np. zweryfikuję nieuczciwą transakcję, ponosi tego konsekwencję poprzez slashing.

Bezpieczeństwo

W przypadku opisanego wcześniej ataku 51% również bezpieczniejszy jest PoS. Załóżmy, że atakujący sieć opartą na PoW kupił ogromną ilość koparek (komputerów przystosowanych do miningu) i postanowił zaatakować sieć metodą 51%. Jeżeli mu się to uda, rollback sieci do stanu przed atakiem nie powstrzymuje agresora do przeprowadzenia kolejnego, takiego samego ataku, przecież posiada już sprzęt i umiejętności – nic nie stoi na przeszkodzie.

Jeżeli atakujący przeprowadzi atak na sieć opartą na PoS, musi najpierw kupić większość tokenów istniejących w sieci, a w przypadku obrony rollbackiem, musi ponieść ten wydatek jeszcze raz.

Proof of Stake jest bardziej narażony na tzw. nothing at stake attack. Możliwe jest wykonanie tzw. forka sieci – czyli kopii danego blockchaina z całą jego historią i wykuwanie bloków na kilku kopiach jednocześnie.

W przypadku PoW ten problem jest dużo mniej prawdopodobny, ponieważ moc obliczeniowa atakującego musiałaby zostać podzielona pomiędzy ilość instancji sieci, które chce atakować a to bardzo osłabiłoby jego zdolność do kopania nowych bloków.

Dla PoS to zabezpieczenie nie działa, jeżeli zakupiliśmy tokeny i uczestniczymy w walidowaniu sieci, będziemy mieli taka samą historię na każdej kolejnej jej kopii, co umożliwia atakującemu wielokrotne operacje oparte na tylko jednokrotnym stakingu w oryginalnej wersji Blockchaina.