Proof of Stake: Ouroboros – do czego to komu?

Wónsz zjadający ogon z wikipedi

W największym skrócie do tego, żeby nie używać tyle prundu co Irlandia do ustalenia jakie transakcje i w jakiej kolejności mają być zapisane w blockchainie.

Już dawno wymyślili PoS, to chyba wszystko już załatwione, co nie?Załatwione ALE nie do końca i właśnie te szczegóły robią dużą różnicę!

Pogadamy sobie o Ouroborosie, jego historia wygląda tak:

Ouroboros link​
Ouroboros Praos link
Ouroboros Genseis link
Ouroboros Chronos link

Każda z wersji dodawała kolejne elementy i poprawia ograniczenia poprzednich, ostatnia aktualizacja była z lipca 2019.


Od początku:

Najprostsze podejście do Proof of Stake zakłada bezpośrednie wykorzystanie stake`u (coinów), które masz na portfelu do ustalenia czy masz prawo do przygotowania (wykopania) kolejnego bloku.
Np. zawsze wybierany jest blok, którego autor ma najwięcej coinów.

Problem z tym jest taki, że losowość tego podejścia jest mała.
Tzn. im więcej coinów kontrolujesz tym więcej bloków będziesz mógł przygotować, co prowadzi do centralizacji.

W Proof of Work, który jest niezależny od ilości coinów, przynajmniej częściowa losowość jest zapewniona przez odpowiedni algorytm.
Użytkownik musi policzyć i poświęcić na te obliczenia dużo energii elektrycznej.
Przy czym nawet jeśli tej energii spala bardzo dużo, to i tak nie ma 100% gwarancji, że jego blok zostanie wybrany.

Taką opcję do PoS dodał Ouroboros Praos, gdzie zamiast patrzeć na to ile masz coinów na portfelu wykonujesz odpowiedni algorytm, ALE w przeciwieństwie do PoW obliczenia robisz tylko raz i prawie nie zużywasz do tego prądu.
Tego prądu potrzeba tak mało, że spokojnie można wykonywać te obliczenia na telefonie.

Algorytm nazywa to się verifiable random function VRF link . Tak jak nazwa wskazuje generuje liczbę losową, ale poza nią tworzy też dowód na to, że liczba rzeczywiście była wygenerowana losowo.

Gdy masz taką liczbę losową porównujesz ją z procentem coinów w sieci, które masz i jeśli ta wylosowana liczba jest mniejsza to możesz przygotować nowy blok, zgarnąć transaction fees i wysłać blok do sieci.

Jest to co chcieliśmy: PoS, gdzie nawet posiadanie dużej ilości stake`u, nie gwarantuje ciągłej kontroli nad tworzeniem nowych bloków.

No to załatwione?
Jeszcze nie!

Problemem, który występuje w PoS to tzw. Long range attack.
Przez to, że do tworzenia bloków nie potrzeba praktycznie w ogóle prądu, atakujący może np. obliczyć VRF dla bardzo starych bloków, zaczynając od bloku genesis.

I co wtedy?
Może być tak, że w niektórych przypadkach wyjdzie mu, że ma prawo do przygotowania bloku. VRF jest losowa i dla niektórych bloków więcej niż jeden komputer ma prawo do ich przygotowania.

Z takich pojedynczych bloków atakujący może stworzyć swoją własną wersję blockchaina.

Nie ma problemu, jeśli taki blockchain zobaczy komputer, działający w sieci od dłuższego czasu. Po prostu odrzuci blockchain atakującego, bo zauważy, że wspólna część aktualnej wersji blockchaina i tego co otrzymał jest np. sprzed roku.

Problem jest wtedy, gdy do sieci chce dołączyć nowy komputer, który nie wie, którą wersję wybrać. Jedyne na czym może się oprzeć to pierwszy blok, tzw. Genesis.

Taki przypadek ogarnia właśnie Ouroboros Genseis, gdzie autorzy wymyślili bardzo prostę regułę na wybieranie dobrego blockchaina.

W uproszczeniu: po prostu weź ten łańcuch, w którym jest zapisane więcej bloków/transakcji.

W podlinkowanej publikacji link jest dowód, pokazujący, że ta prosta reguła wystarczy, żeby umożliwić nowym komputerom dołączanie do sieci.

Ostatnim usprawnieniem Ouroborosa, tym z 2019 jest dodanie synchronizacji czasu przy pomocy blockchaina.

Co? Ale po co pisać całą publikację naukową o ustawianiu zegarka?
Ano bo się przydaje.

Tzn. wszystkie blockchainy, które działają teraz, dodają informacje o czasie do przygotowywanych bloków, żeby wiedzieć jak szybko powstają nowe bloki.
Ale skąd ten czas biorą?
W większości przypadków jest to czas “z komputera”.
Ale skąd ten czas się tam bierze i skąd wiadomo że jest dokładny?

Ano wiadomo, bo jest coś takiego jak NTP, z którego powinien korzystać komputer, który jest częścią sieci blockchain.

Np. w Ethereum nawet mała różnica w czasie powoduje błędy w połączeniu z siecią.

Ale taka zależność od zewnętrznego źródła czasu też nie jest dobra. Co się stanie, gdy ulegnie uszkodzeniu? Co się stanie, gdy ktoś je zaatakuje?

Dlatego powstał Ouroboros Chronos, żeby można było sieci blockchain zsynchronizować zegarki, bez używania NTP.

Wszystko co potrzebne do działania jest zapisane na blockchainie i działanie sieci nie zależy od jakiejś zewnętrznej usługi/protokołu.

Jak to działa w Ouroboros Chronos?

Raz na jakiś czas poza przygotowywaniem bloków komputery w sieci wysyłają informację o tym, jaki jest czas pokazywany przez zegarek na takim komputerze.

Dodatkowo razem z odczytanym czasem wysyłają też:
– kto jest nadawcą,
– wynik VRF obliczony przez nadawcę.

Taka paczka: czas + dodatkowe informacje nazywa się synchronization beacon.

Ta wartość VRF mówi, o tym czy wysyłający ma prawo do wysłania synchronization beacona.

W momencie, gdy jakiś komputer odbierze taką wiadomość, zapisuje sobie, kiedy ją dostał i jaka jest różnica między jego lokalnym zegarkiem a czasem w synchronization beaconie.

To nie wszystko, trzeba jeszcze jakoś ustalić, których beaconów użyć do synchronizacji a które zignorować.

Wyboru dokonuje komputer przygotowujący blok, który musi do niektórych bloków dodać dokładnie jeden z odebranych wcześniej beaconów.

Tylko beacony zapisane w blokach są później wykorzystywane do ustawiania zegarków.

Po dłuższym czasie komputery w sieci, ustawią swoje zegarki, tak żeby różnice czasu były minimalna.

I to koniec tej opowieści o tym do czego przydaje się Ouroboros.

Podsumowując – imvho 😉 Ouroboros jest najbardziej kompletnym algorytmem PoS jaki do tej pory widziałem.

Poza zapewnieniem bardzo zbliżonego działania do PoW, daje jeszcze większą niezawodności, przez synchronizację czasu na blockchainie.

Ogólnie polecam, Adam Smolarek 🙂