Ludzie nie chcą stakingu
: środa, 4 maja 2022, 22:15
Są tacy, którzy sądzą, że na Bitcoinie nie da się zrobić stakingu. Że jest to trudne, niemożliwe, ewentualnie że coś pójdzie nie tak. Otóż nic bardziej mylnego. Staking jest możliwy na Bitcoinie od zawsze, wczoraj, dzisiaj, teraz, zaraz. Dodam więcej: jest możliwy na niemal każdej monecie, wystarczą proste warunki.
Po pierwsze: potrzebny jest multisig. Jeśli jakaś moneta tego nie ma, to należy sobie zadać pytanie, czy taka moneta jest dobrze zrobiona, no ale szyfry homomorficzne są w stanie rozwiązać ten problem w razie potrzeby. Mnożenie kluczy prywatnych przez publiczne zresztą też, ale wtedy jest trudniej i przekazanie kluczy jest niemożliwe bez ich ujawniania, więc transakcje przestają być "dowodem w sporze", zatem nie warto tego tak robić.
Po drugie: potrzebny jest locktime. Staking jest nagrodą za zamrożenie monet w czasie, więc potrzeba czegoś, co egzekwuje upływ czasu. Wystarczy locktime. Można też użyć innych sztuczek, takich jak OP_CHECKLOCKTIMEVERIFY, ale nie ma takiej konieczności. Da się prościej, locktime wystarczy. Jeśli jakaś moneta tego nie ma, to po raz kolejny należy przyjrzeć się jej konstrukcji i upewnić się, że służy do płatności, a nie do czegoś innego. Ale to też da się załatwić, potrzebny jest hashrate, czyli trzeba zablokować monety tak, aby wydobycie hashu poniżej ustalonego celu pozwoliło na przesunięcie monet. W przeciwieństwie do blokady czasowej, to jest trudniejsze i wymaga na przykład OP_CAT, ale przy dziwnych konsensusach może być łatwiejsze.
Jeśli te dwie rzeczy istnieją: multisig i locktime, to staking jest możliwy.
1. Mamy dwie osoby, z których obie zgadzają się na to, że chcą mieć działający staking i że chcą go mieć na takiej monecie, jak Bitcoin (ewentualnie dowolnej innej, która spełnia powyższe warunki, nieważne, załóżmy, że tacy ludzie istnieją).
2. Obie osoby mogą utworzyć transakcję, która wyśle monety na adres 2-of-2 multisig. Niczego jeszcze nie podpisują, zaczynają od utworzenia transakcji.
3. Osoba wynagradzająca za staking tworzy transakcje zamykające, rozpoczynając od takiej, która wypłaca wszystko drugiej stronie, a kończąc na aktualnym stanie kanału. Pierwsza taka transakcja ma locktime ustawiony na czas stakingu (na przykład rok), a każda kolejna transakcja zmniejsza ten czas, a także kwotę przesyłaną drugiej stronie. W ten sposób druga strona uzyskuje garść transakcji, z których jedna jest możliwa do rozgłoszenia teraz i zamyka kanał, zaś inne transakcje są coraz bardziej opłacalne, ale wymagają coraz dłuższego czasu oczekiwania na możliwość rozgłoszenia w sieci.
4. Jeśli transakcja otwierająca kanał zostanie podpisana, taki kontrakt (sic!) jest ważny i będzie egzekwowany przez konsensus on-chain (jeśli ktoś ma pretensje, że to jest zbyt podobne do Lightning Network, to niech zwróci uwagę na brak routingu, to jest zwykły kanał płatności, nie sądzę, aby społeczności takie, jak na BCH, były tym modelem oburzone).
Z takiego eksperymentu płyną bardzo ciekawe wnioski, mianowicie: ludzie nie chcą stakingu. Ten model jest przejrzysty, jasno pokazuje, że staking to system, w którym jedna strona zyskuje, a inna traci. W typowych altcoinach staking jest podatkiem nakładanym na społeczność i płaconym przez nieświadomych użytkowników, którzy nie widzą, że korzystają z takiej samej monety, jak gdyby byli zmuszeni do wiecznego przebywania w takim jednym, wielkim, wspólnym kanale, gdzie stakerzy zyskują, a reszta traci. Jeśli dołożymy trzeci warunek konieczny i pozwolimy na sygnatury Schnorra, to możemy zwiększyć liczbę osób z dwóch do nieskończoności (no dobra, w praktyce do około 2^256, a dokładniej do liczby możliwych kluczy, co wystarcza każdemu; uwzględniając kolizje do 2^128, w każdym razie "dużo", każdemu to wystarczy na dowolnej monecie).
Kolejne wnioski są jeszcze ciekawsze, bo istnieje także przejście w drugą stronę, co może służyć do obrony przed przymusowym modelem Proof of Stake, mianowicie: nie tylko nagłówki bloków można wykopywać. Transakcje też się da. Ale żeby Merged Mining działał, to wypadałoby kopać nagłówki bloków (które można dołączać do adresów jako commitmenty). Istnieje signet, gdzie też działa Proof of Work, chociaż sieć jest testowa, scentralizowana i każdy blok musi być podpisany. Stąd płynie kolejny wniosek: jeśli sygnatury będą latały na prawo i lewo, to w nich będzie można doczepić nagłówki bloków do hashowanych danych (wszak wartość R, czyli tak zwany "klucz publiczny sygnatury", to świetne miejsce na ukrycie commitmentu w sposób dynamiczny) i w ten sposób w tajnej sieci, po kryjomu, będzie można dalej egzekwować konsensus Proof of Work. Albo nawet jawnie, jeśli świat wokół nie będzie aż tak dystopijny, a jedynie będzie się skupiał na utrudnianiu ludziom życia.
Takie sztuczki dają do myślenia. Albo ludzie o tym nie wiedzą (całkiem możliwe, bo takie technikalia nie są oczywiste). Albo wiedzą i nie chcą na to pójść (wtedy pytanie brzmi: dlaczego nie? Moja odpowiedź jest oczywista: bo uważam Proof of Work za lepszy konsensus, ale to pytanie dotyczy głównie zwolenników stakingu). Albo chcą tego, ale robią to nieudolnie. Albo celowo gonią króliczka, ale nie chcą go złapać, aby zyskiwać na tym, że sam temat jest publicznie podnoszony. W każdym razie, technikalia mnie trochę uspokoiły. Da się. Jak się chce, to się zrobi, teraz, zaraz, wedle życzenia klienta. Skoro tego jeszcze nie ma (albo nie tyle "nie ma", co "nie jest popularne", bo wszak ten model istnieje od wersji 0.1.0 w Bitcoinie), to chyba nikomu to niepotrzebne, prawda?
Po pierwsze: potrzebny jest multisig. Jeśli jakaś moneta tego nie ma, to należy sobie zadać pytanie, czy taka moneta jest dobrze zrobiona, no ale szyfry homomorficzne są w stanie rozwiązać ten problem w razie potrzeby. Mnożenie kluczy prywatnych przez publiczne zresztą też, ale wtedy jest trudniej i przekazanie kluczy jest niemożliwe bez ich ujawniania, więc transakcje przestają być "dowodem w sporze", zatem nie warto tego tak robić.
Po drugie: potrzebny jest locktime. Staking jest nagrodą za zamrożenie monet w czasie, więc potrzeba czegoś, co egzekwuje upływ czasu. Wystarczy locktime. Można też użyć innych sztuczek, takich jak OP_CHECKLOCKTIMEVERIFY, ale nie ma takiej konieczności. Da się prościej, locktime wystarczy. Jeśli jakaś moneta tego nie ma, to po raz kolejny należy przyjrzeć się jej konstrukcji i upewnić się, że służy do płatności, a nie do czegoś innego. Ale to też da się załatwić, potrzebny jest hashrate, czyli trzeba zablokować monety tak, aby wydobycie hashu poniżej ustalonego celu pozwoliło na przesunięcie monet. W przeciwieństwie do blokady czasowej, to jest trudniejsze i wymaga na przykład OP_CAT, ale przy dziwnych konsensusach może być łatwiejsze.
Jeśli te dwie rzeczy istnieją: multisig i locktime, to staking jest możliwy.
1. Mamy dwie osoby, z których obie zgadzają się na to, że chcą mieć działający staking i że chcą go mieć na takiej monecie, jak Bitcoin (ewentualnie dowolnej innej, która spełnia powyższe warunki, nieważne, załóżmy, że tacy ludzie istnieją).
2. Obie osoby mogą utworzyć transakcję, która wyśle monety na adres 2-of-2 multisig. Niczego jeszcze nie podpisują, zaczynają od utworzenia transakcji.
3. Osoba wynagradzająca za staking tworzy transakcje zamykające, rozpoczynając od takiej, która wypłaca wszystko drugiej stronie, a kończąc na aktualnym stanie kanału. Pierwsza taka transakcja ma locktime ustawiony na czas stakingu (na przykład rok), a każda kolejna transakcja zmniejsza ten czas, a także kwotę przesyłaną drugiej stronie. W ten sposób druga strona uzyskuje garść transakcji, z których jedna jest możliwa do rozgłoszenia teraz i zamyka kanał, zaś inne transakcje są coraz bardziej opłacalne, ale wymagają coraz dłuższego czasu oczekiwania na możliwość rozgłoszenia w sieci.
4. Jeśli transakcja otwierająca kanał zostanie podpisana, taki kontrakt (sic!) jest ważny i będzie egzekwowany przez konsensus on-chain (jeśli ktoś ma pretensje, że to jest zbyt podobne do Lightning Network, to niech zwróci uwagę na brak routingu, to jest zwykły kanał płatności, nie sądzę, aby społeczności takie, jak na BCH, były tym modelem oburzone).
Z takiego eksperymentu płyną bardzo ciekawe wnioski, mianowicie: ludzie nie chcą stakingu. Ten model jest przejrzysty, jasno pokazuje, że staking to system, w którym jedna strona zyskuje, a inna traci. W typowych altcoinach staking jest podatkiem nakładanym na społeczność i płaconym przez nieświadomych użytkowników, którzy nie widzą, że korzystają z takiej samej monety, jak gdyby byli zmuszeni do wiecznego przebywania w takim jednym, wielkim, wspólnym kanale, gdzie stakerzy zyskują, a reszta traci. Jeśli dołożymy trzeci warunek konieczny i pozwolimy na sygnatury Schnorra, to możemy zwiększyć liczbę osób z dwóch do nieskończoności (no dobra, w praktyce do około 2^256, a dokładniej do liczby możliwych kluczy, co wystarcza każdemu; uwzględniając kolizje do 2^128, w każdym razie "dużo", każdemu to wystarczy na dowolnej monecie).
Kolejne wnioski są jeszcze ciekawsze, bo istnieje także przejście w drugą stronę, co może służyć do obrony przed przymusowym modelem Proof of Stake, mianowicie: nie tylko nagłówki bloków można wykopywać. Transakcje też się da. Ale żeby Merged Mining działał, to wypadałoby kopać nagłówki bloków (które można dołączać do adresów jako commitmenty). Istnieje signet, gdzie też działa Proof of Work, chociaż sieć jest testowa, scentralizowana i każdy blok musi być podpisany. Stąd płynie kolejny wniosek: jeśli sygnatury będą latały na prawo i lewo, to w nich będzie można doczepić nagłówki bloków do hashowanych danych (wszak wartość R, czyli tak zwany "klucz publiczny sygnatury", to świetne miejsce na ukrycie commitmentu w sposób dynamiczny) i w ten sposób w tajnej sieci, po kryjomu, będzie można dalej egzekwować konsensus Proof of Work. Albo nawet jawnie, jeśli świat wokół nie będzie aż tak dystopijny, a jedynie będzie się skupiał na utrudnianiu ludziom życia.
Takie sztuczki dają do myślenia. Albo ludzie o tym nie wiedzą (całkiem możliwe, bo takie technikalia nie są oczywiste). Albo wiedzą i nie chcą na to pójść (wtedy pytanie brzmi: dlaczego nie? Moja odpowiedź jest oczywista: bo uważam Proof of Work za lepszy konsensus, ale to pytanie dotyczy głównie zwolenników stakingu). Albo chcą tego, ale robią to nieudolnie. Albo celowo gonią króliczka, ale nie chcą go złapać, aby zyskiwać na tym, że sam temat jest publicznie podnoszony. W każdym razie, technikalia mnie trochę uspokoiły. Da się. Jak się chce, to się zrobi, teraz, zaraz, wedle życzenia klienta. Skoro tego jeszcze nie ma (albo nie tyle "nie ma", co "nie jest popularne", bo wszak ten model istnieje od wersji 0.1.0 w Bitcoinie), to chyba nikomu to niepotrzebne, prawda?