Ludzie nie chcą stakingu

Wygadany
Awatar użytkownika
Posty: 593
Rejestracja: 8 lutego 2020
Reputacja: 1114
Reputacja postu: 
6
Napiwki za post: 0 BTC
Lokalizacja: 7-bit secp256k1

Ludzie nie chcą stakingu

Postautor: garlonicon » ś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?

Bardzo Zły Moderator
Awatar użytkownika
Posty: 14380
Rejestracja: 16 kwietnia 2012
Reputacja: 2659
Reputacja postu: 
0
Napiwki za post: 0 BTC
Lokalizacja: Polska/Wwa/GW

Ludzie nie chcą stakingu

Postautor: rav3n_pl » czwartek, 5 maja 2022, 15:24

Totalnie mylisz kolejność działania.
NAJPIERW trzeba zbudować cały skrypt wydania (z multisigiem, blokadą czasową itd) i DOPIERO z tego powstaje ADRES na który trzeba wysłać środki.

Powstaje proste pytanie: jaki jest ZYSK tego, co DAJE środki na nagrodę w tym "stakingu"?
Bo przypomnę, że stejkowanie to trzymanie monet żeby dostać więcej monet, a PoS w różnych wariantach tą nagrodę bierze z coinbase (nowe monety) czego w BTC nie zrobisz - bo mamy PoW.
Piffko: PLC/BTC 1Rav3nkMayCijuhzcYemMiPYsvcaiwHni
BIP39 Mnemonic z talii kart
Bitcoin Core 0.26.1
Linki do YT, TT, LI i reszty

Wygadany
Awatar użytkownika
Posty: 593
Rejestracja: 8 lutego 2020
Reputacja: 1114
Reputacja postu: 
0
Napiwki za post: 0 BTC
Lokalizacja: 7-bit secp256k1

Ludzie nie chcą stakingu

Postautor: garlonicon » czwartek, 5 maja 2022, 18:03

NAJPIERW trzeba zbudować cały skrypt wydania (z multisigiem, blokadą czasową itd) i DOPIERO z tego powstaje ADRES na który trzeba wysłać środki.
Wystarczy multisig. Jeśli chodzi o locktime, to dotyczy całej transakcji, nie trzeba używać OP_CHECKLOCKTIMEVERIFY na pojedynczych adresach, skoro można zablokować całą transakcję. Sam locktime jest podpisywany zawsze i wszędzie, nawet jak ktoś używa SIGHASH_NONE | SIGHASH_ANYONECANPAY. Jeśli locktime jest ustawiony na parę lat naprzód, to można nawet puścić komuś 1 BTC w ten sposób, bo i tak szybciej uda się zgarnąć takie monety z powrotem, zanim druga strona zdąży w ogóle rozgłosić transakcję.
Powstaje proste pytanie: jaki jest ZYSK tego, co DAJE środki na nagrodę w tym "stakingu"?
Druga strona, to oczywiste. Po jednej stronie są ludzie korzystający ze stakingu, po drugiej stronie jest cała reszta. Nawet na monetach, na których staking jest częścią konsensusu, to działa w identyczny sposób, tylko nie jest widoczne na pierwszy rzut oka.
PoS w różnych wariantach tą nagrodę bierze z coinbase (nowe monety) czego w BTC nie zrobisz - bo mamy PoW.
Zrobisz, gdyż transakcja coinbase również jest blokowana, domyślnie na 100 bloków. Wystarczy zwiększyć ten czas i masz staking na monetach Proof of Work. Coinbase jest taką samą transakcją, jak każda inna, to też może być multisig, zaś kolejna transakcja też może zawierać locktime. Jak się chce, to się da. Skoro się nie robi, to najwyraźniej się nie chce (albo nie rozumie).
Totalnie mylisz kolejność działania.
Myślę, że przydadzą się przykłady działające w sieci testowej, jeśli sama koncepcja nadal pozostanie niezrozumiana, to chyba coś takiego napiszę, ze szczegółami technicznymi, przykładowymi transakcjami oraz objaśnieniem krok po kroku. No ale też warto wiedzieć, co jest niezrozumiałe, żeby prościej to wyjaśnić i opisać te fragmenty dokładniej niż pozostałe.

Edit: Zresztą, co mi tam, mogę ten kawałek nawet pokazać w praktyce:

createrawtransaction "[{\"txid\":\"912c90b4c99e96af57588ae2a8dc69123944b31965a659c526d249ee69ad1d78\",\"vout\":0}]" "[{\"mhwCoKNwGkLrbZqLHkMfA9kvWJhfMNVWP2\":0.00072887}]" 1700000000 true
0200000001781dad69ee49d226c559a66519b344391269dca8e28a5857af969ec9b4902c910000000000fdffffff01b71c0100000000001976a9141a8657a9dcfa149130a16ff69127b638dd4ea13588ac00f15365
signrawtransactionwithwallet "0200000001781dad69ee49d226c559a66519b344391269dca8e28a5857af969ec9b4902c910000000000fdffffff01b71c0100000000001976a9141a8657a9dcfa149130a16ff69127b638dd4ea13588ac00f15365" "[{\"txid\":\"912c90b4c99e96af57588ae2a8dc69123944b31965a659c526d249ee69ad1d78\",\"vout\":0,\"scriptPubKey\":\"00141bdc50d353fdd11270c8fdd251e1c7f768eec2c6\",\"amount\":0.00073000}]" "NONE|ANYONECANPAY"
02000000000101781dad69ee49d226c559a66519b344391269dca8e28a5857af969ec9b4902c910000000000fdffffff01b71c0100000000001976a9141a8657a9dcfa149130a16ff69127b638dd4ea13588ac02473044022035a9f1a80a6000134ab716f140208e7cc722e042601d351e050673e2afe1e9d3022030a0d0198d9b86f4afae5d666bc7e03de64c3cae2161756a69cb97c64b73c230822103e02197b3175cb09c24aa3e61db0eeb8650a786e8cbc050df785d82cf68d88d1400f15365

Jak widać, wszystko działa, to są monety, które możesz dołączyć do dowolnej transakcji, byleby locktime wynosił tyle, ile wstawiłem. Co prawda adres jest typu Segwit, ale zrobienie tego samego z adresem legacy wymaga identycznych kroków. A potem wystarczy tylko zmieniać numer locktime z tych 1700000000 na inne i problem rozwiązany. Zamiast pojedynczego klucza dojdzie oczywiście multisig, a zamiast SIGHASH_NONE | SIGHASH_ANYONECANPAY dojdzie oczywiście jakiś SIGHASH_ALL albo coś równie typowego.

A jeśli zechcę zmienić locktime, to zmieni się tylko i wyłącznie sygnatura (oraz locktime oczywiście), sam adres pozostanie identyczny, więc nie jest prawdą, że muszę z góry znać adres i z góry wiedzieć o wszystkich możliwych wartościach locktime, których zechcę użyć.

Edit: Hahaha, BlockCypher po raz kolejny pozwala na rozgłaszanie transakcji, które nie przejdą przez inne węzły, oni serio chyba sprawdzają jedynie podstawy, a potem przyjmują wszystko, jak leci: https://live.blockcypher.com/btc-testne ... 4206847a1/

Wróć do „Bitcoin”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 35 gości