Od kilku lat znany jest koncept bitcoina – wirtualnej waluty opartej o blockchain oraz sieć rejestrów rozproszonych. Na jej podstawie powstało zarówno wiele nie wnoszących nic nowego kopii, jak i sporo projektów, które były innowacyjne pod różnymi względami. Jedną z cech innowacyjności jest sposób wydobywania (”kopania”, “miningu”), nowych jednostek monet. Poniżej przedstawiamy najbardziej popularne sposoby potwierdzania transakcji w blokach, pełniące często jednocześnie rolę „miningu”.

Potrzeba zabezpieczania transakcji jest związana z problemem podwójnego wydawania (double spend). W systemie zdecentralizowanym istnieje możliwość wydania tej samej sumy tokenów dwukrotnie przez jednego kupującego. Załóżmy osobę która posiada jeden token i kupuje za niego w dwóch sklepach dwie rzeczy warte jeden token za rzecz. Mamy w tym przypadku do czynienia z konfliktem w postaci dwóch lub więcej transakcji niezgodnych ze sobą. Potrzebny jest system, który zweryfikuje te transakcje i dopuści tylko jedną z nich (pierwszą lub tę z wyższymi opłatami) w jednym bloku. Metody osiągania konsensusu mają na celu ustalenie wśród wszystkich akceptujących, która transakcja zostanie zatwierdzona i dodana do bloku.

Proof of Work (PoW)

Proof of work (Dowód pracy) jest aktualnie najbardziej popularnym algorytmem zgodności używanym w takich kryptowalutach, jak: Bitcoin, Ethereum, Doge, Dash. W przypadku tego algorytmu wymagany jest komputer wykonujący dużą liczbę prostych obliczeń (rozwiązywanie funkcji haszującej), które polegają na odnajdywaniu właściwego ciągu cyfr i sprawdzaniu, czy jest on poprawny. W przypadku “miningu” zwycięzcą jest osoba lub grupa (pool), która znajdzie rozwiązanie najszybciej. Gdy to nastąpi, w zależności od tego o jakiej monecie mowa, zwycięzca dostaje premię w postaci nagrody za blok. Otrzymuje także wartość opłat uiszczonych przez wszystkie osoby, których transakcje biorą udział w sprawdzonym wcześniej bloku.

Zdecydowaną zaletą tego rozwiązania jest bezpieczeństwo sieci i zapobieganie podwójnemu wydawaniu środków (wspomniany wcześniej double spend). Osoba, która chciałaby zmienić wynik poprzedniego bloku, musiałaby wykonać pracę przeciwko całej sieci. Wymagałoby to dodatkowej mocy obliczeniowej i nie byłoby opłacalne ze względu na to, że zastosowanie mocy obliczeniowej w celu weryfikacji transakcji, przyniosłoby prawdopodobnie większe zyski niż próba zmiany poprzedniego bloku. Trzeba tu dodać, że metoda PoW oparta jest na prawdopodobieństwie. Załóżmy istnienie dwóch maszyn: X o jednostkowej mocy obliczeniowej i Y o tysiąckrotnie wyższej mocy obliczeniowej (1000X).
Nie mamy pewności, że maszynie Y zawsze uda się „odgadnąć” funkcję hashującą jako pierwszej.
Do największej wady metody PoW zalicza się zużycie energii, która jest wykorzystywana w procesorach wykonujących obliczenia.

Wykres obrazujący zużycie energii elektrycznej przez poszczególne kraje. Traktując kopanie Ethereum i Bitcoina jako zużycie energii przez jedno państwo, uzyskalibyśmy 71 pozycję na świecie, z zużyciem większym niż Islandia.
Wykres obrazujący zużycie energii elektrycznej przez poszczególne kraje. Traktując kopanie Ethereum i Bitcoina jako zużycie energii przez jedno państwo, uzyskalibyśmy 71 pozycję na świecie, z zużyciem większym niż Islandia.
Treść sponsorowana:

Kolejną wadą jest zapotrzebowanie na specjalne jednostki obliczeniowe, najczęściej układy ASIC lub GPU. Aktualnie na rynku brakuje kart graficznych (GPU) wysokiej klasy, gdyż zostały wykupione przez “górników” (wydobywających kryptowaluty), na czym korzystają firmy zajmujące się produkcją kart graficznych, przeżywające swój renesans.

Wykres spółki Nvidia (Interwał W1) - największego producenta dedykowanych kart graficznych na świecie.
Wykres spółki Nvidia (Interwał W1) – największego producenta dedykowanych kart graficznych na świecie.

Następnym istotnym problemem tego systemu jest opóźnianie transakcji, gdyż transfery opatrzone niższą opłatą nie są traktowane priorytetowo – zostają umieszczone w kolejce lub, w najgorszym wypadku, nie są w ogóle przetwarzane przez sieć. Mamy tu do czynienia z kwestią rentowności górników, którzy nie chcą przetwarzać transakcji o niskiej stopie zwrotu. Ostatnią wadą tego systemu, o jakiej należałoby wspomnieć, jest zjawisko „tragedii wspólnego pastwiska”. Po pewnym czasie w systemie mogą zajść zmiany, które zaczną wykluczać górników (ekonomia, mniejsze nagrody za blok, brak rentowności), przez co rejestr stanie się mniej bezpieczny. Przy jednoczesnym wzroście zainteresowania użytkowników może dojść do sytuacji, w której otrzymamy podatną na ataki, mało wiarygodną sieć o długim czasie oczekiwania.

Proof of Capacity (PoC) oraz Proof of Space (PoS)

Polska nazwa: Dowód Miejsca. Jest to rozwiązanie bardzo podobne do PoW, również wykorzystujące zasoby hardwarowe, w tym przypadku przestrzeń dyskową. Altcoiny (kryptowaluty inne niż Bitcoin), które używają tego systemu to: burstpermacoinstorj. Z jednej strony algorytmy te mogłyby służyć do tworzenia backupów ważnych informacji, takich jak cyfrowe biblioteki, czy rejestry, natomiast z drugiej jest to sposób na zabezpieczenie sieci przed problemem podwójnego wydawania. W tym przypadku mamy pewien rodzaj pracy, związany z utrzymywaniem dysków i zasobów (obliczenia CPU do plotowania dysków), ale z drugiej strony praca ta nie jest „bezużyteczna” i nie jest wykonywana tylko po to, by wesprzeć sieć, ale może służyć także wyższym celom.  W metodzie PoC istnieje podobny mechanizm prawdopodobieństwa, co w PoW. W tym przypadku suma zplotowanych (przygotowanych do kopania) zasobów dyskowych stanowi jednostkę prawdopodobieństwa, stąd też osoba z przestrzenią dyskową nawet tak małą jak 1 terabajt ma probabilistyczne szanse na „wykopanie” bloku. W systemie tym bardzo istotne jest też, podobnie jak w PoW, łączenie się w grupy zwane „poolami”, by zwiększyć swoje prawdopodobieństwo oraz jednocześnie zmniejszyć wariancję szansy wykopania bloku i otrzymania nagrody. Zagrożeniem w tym systemie mogą być gracze o dużych zasobach dyskowych, czy też dostarczyciele usług w chmurze.

Proof of Stake (PoS)

Proof of Stake (Dowód Stawki) jest to jeden ze sposobów kopania/zabezpieczania sieci blockchain, który wymaga od użytkownika posiadania określonej liczby tokenów i stałego dostępu do sieci. Załóżmy prostą sieć o 100 tokenach, bez określonych minimalnych zasobów potrzebnych do wzięcia udziału w procesie kopania, czy innych ograniczeń (minimalny czas przetrzymywania monet). Posiadając 10 tokenów, otrzymujemy więc 10% szans na „wykopanie” kolejnego bloku, czy to generycznego, czy związanego z opłatami. Trzeba bowiem zaznaczyć, że większą część nagród może stanowić nagroda od samego systemu, w systemie gdzie w każdym bloku generowana jest pewna stawka przydzielana osobie, która wykopała dany blok. Im większa ilość posiadanych tokenów, tym większe są nasze szanse na sprawdzenie bloku. Często w systemach PoS wszystkie monety są już dostępne (premined, np. w przypadku NEM), a uczestnicy systemu rywalizują między sobą o opłaty transakcyjne. Systemy altcoin używające tej metody zatwierdzania transakcji to np. peercoin lub nxt. W systemie peercoin starsze i większe ilości tokenów mają większą moc nabywczą przy kopaniu. Prowadzi to do problemu monopolizacji sieci – użytkownicy, którzy mają duże zasoby bogacą się szybciej od tych z małymi zasobami i przewaga ta się powiększa. Istnieją więc sposoby, by zapobiegać takiemu procederowi przez wprowadzenie ograniczonego czasu „życia” zasobów. Po każdej udanej weryfikacji bloku użytkownik musi odczekać minimum 30 dni, zanim system poprosi jego zasoby o potwierdzenie kolejnego bloku. Ponadto, mniejsze zasoby otrzymują największy możliwy współczynnik wartości po 90 dniach, automatycznie stając w kolejce do zabezpieczenia kolejnego zbioru transferów. System ten jest bezpieczny, dopóki atakujący nie przejmie 51% zasobów tokenów. Problemem jest tu także możliwość głosowania na kilka alternatywnych rozwiązań przez użytkowników o  małych stawkach, przez co algorytm nie jest rozwiązywalny. Wprowadzono kilka testowych zabezpieczeń, takich jak odgórna kontrola czy połączenie z rozwiązaniem typu proof of burn, w którym środki przelewa się na określone konto związane z miningiem i przez czas weryfikacji użytkownik nie ma do nich dostępu. Można porównać to do posiadania na blockchain rachunku powierniczego (segregated account). W przypadku próby oszustwa użytkownik zostaje ukarany całkowitą utratą środków.

Proof of Importance (PoI)

Jest to pochodna systemu PoS z szeregiem ulepszeń, z których głównym jest dodanie współczynnika ważności do każdego zestawu tokenów. Ponadto, wprowadzono pewne obostrzenia związane z minimalną ilością tokenów wymaganych do otrzymania pierwszego współczynnika wartości oraz czasu po którym środki mogą zostać przeznaczone do miningu. W przypadku tego algorytmu posłużę się przykładem tokena NEM, jako flagowej implementacji tej technologii blockchain. W systemie NEM kopanie nazywane jest harvestingiem(żniwami), gdyż wszystkie monety są już dostępne na rynku, a potwierdzający transakcje harvester, dostaje nagrodę w postaci opłat transakcyjnych.

W systemie PoI, użytkownicy wykonujący transakcje, są nagradzani przez sieć większym współczynnikiem istotności.  Wynikiem matematycznym mnożenia współczynnika ważności, wielkości konta i dodatkowego faktora wynikającego z algorytmicznego przekształcenia ważności wykonanych transakcji (o czym będzie później) jest współczynnik zaufania. Mnożnik ten określa prawdopodobieństwo harvestingu kolejnego bloku transakcji przez danego użytkownika. W sieci NEM istnieje pojęcie vestingu, czyli nabierania ważności tokenów, co dalej będę nazywał tokenami „potwierdzonymi”. Minimalną stawką tokenów, potrzebną do kopania jest 10 000 XEM (waluty w systemie NEM) potwierdzonych. Tokeny nabierają ważności w ilości 10% od ilości niepotwierdzonej każdego dnia. Oznacza to, iż otrzymując 100 000 tokenów XEM, już następnego dnia ma się 10 000 tokenów potwierdzonych i gotowych do harvestingu. W przypadku posiadania kwoty niewiele wyższej od niepotwierdzonych 10 000 XEM, należy czekać nawet 30 dni. Jest to obostrzenie wynikające z zabezpieczenia sieci, przez co nowi użytkownicy będą musieli poczekać dłuższy czas, zanim będą w stanie zaszkodzić systemowi. Dostają przez to niższe współczynniki praktycznie wykluczające ich z przyszłych zapytań o zabezpieczenie/potwierdzanie transakcji. Kolejnym krokiem byłoby przelanie środków na inne konto i wykonanie kolejnego ataku, ale w tym przypadku pojawia się vesting oraz algorytm ważności śledzący tokeny (sieć posiada ogólnodostępny explorer).

Problem monopolu został rozwiązany przez współczynnik ważności. Konta wykonujące transakcje (minimalny próg to 1000 XEM) dostają nagrodę w postaci podwyższonego współczynnika ważności. Tak więc konto z 20 000 XEM może mieć w rezultacie wyższy współczynnik zaufania (a zarazem prawdopodobieństwo) od konta z 100 000 XEM, które nie wykonywało transakcji przez ostatnie 30 dni. Poniższy rysunek przedstawia poglądowy rozkład współczynnika ważności w zależności od czasu, jaki minął od ostatniej transakcji. Tak więc transakcja dokonana ubiegłego dnia jest o wiele ważniejsza od tej dokonanej 25 dni temu.

Wyobraźmy sobie użytkownika sieci, który chciałby wykorzystać ten system i tworzy łańcuch transakcji zapętlający się, tak, by sztucznie podwyższyć swój  współczynnik ważności. W tym momencie do gry wchodzi układ zabezpieczający (algorytmiczne przekształcenie ważności), oparty o algorytm NCDawareRank. Działa on podobnie jak algorytm PageRank (stworzony przez wyszukiwarkę Google), przeszukujący liczbę linków i załączników stron internetowych, który tworzy ranking najczęściej występujących witryn. W algorytmie tym łańcuchy linków (w naszym przykładzie transakcji) są odpowiednio procesowane i karane mniejszym współczynnikiem ważności, w przypadku naruszenia zasad. Przykładowo: konto wysyłające 5000 XEM, które nie dostaje w zamian nic, jest ważniejsze od tego, które wysyła 5000 XEM i dostaje w zamian 5000 XEM. Zastosowanie algorytmu NCDawareRank sprawia, że atakującemu mniej opłaca się grać nieczysto ze względu na straty, które poniesie na opłatach transakcyjnych.

 

Autorzy: Bartłomiej Sanak, Tomasz Kurowski (P2P.Systems)

Bibliografia:

http://kryptopolonia.info/matematyka-kryjaca-sie-za-bitcoin/
https://en.bitcoin.it/wiki/Proof_of_Stake
https://themerkle.com/what-is-proof-of-importance/
https://steemit.com/til/@ontofractal/til-about-nem-cryptotoken-consensus-algorithm-and-blockchain-features
https://blog.nem.io/what-are-poi-and-vesting/
https://blog.nem.io/how-do-i-get-importance-on-the-nem-blockchain/
http://www.coindesk.com/short-guide-blockchain-consensus-protocols/
NEM technical reference: https://nem.io/NEM_techRef.pdf
https://kryptopomocnik.pl/delegated-proof-of-stake-dpos/