garlonicon pisze: wtorek, 24 listopada 2020, 14:19
Czy możesz więcej opowiedzieć na czym polegają sidechainy?
Jeśli znasz angielski, to na stronie projektu Truthcoin masz mnóstwo długaśnych artykułów, które to dokładnie opisują, wraz ze wszelkimi technikaliami i uzasadnieniem, dlaczego to działa tak, a nie inaczej. No ale dobra, jakiś krótki opis mogę skrobnąć. Generalnie chodzi o to, że masz limit 1 MB na Bitcoinie. Żeby go deczko zwiększyć, powstał Segwit, który po prostu spowodował tyle, że sygnatury trafiły do osobnego bloku, natomiast w głównym łańcuchu masz nadal bloki 1 MB, tylko transakcje ważą deczko mniej, bo zamiast "normalnych" inputów i outputów, masz jedynie ANYONE_CAN_SPENT, czyli coś, co w starszej wersji "każdy może wydać". Dlatego tak ważne jest to, żeby górnicy wspierali Segwit swoją mocą obliczeniową i odrzucali próby wydawania środków bez sygnatur. Klient bez Segwita widzi transakcje Segwitowe jako coś, co każdy może wydać, dlatego Segwit jest bezpieczny tak długo, jak długo większość górników wspiera ten soft-fork.
Szybko okazało się jednak, że Segwit to za mało. W przypadku Bitcoina nie można po prostu zwiększyć rozmiaru bloku do 2 MB albo i nawet 1 GB choćby dlatego, że narusza to zgodność wsteczną i mnóstwo starych węzłów to odrzuci. Część ludzi uparła się, że to jest bezpieczne i powstał Bitcoin Cash jako łańcuch, który rozwiązuje problem poprzez zwiększenie rozmiaru bloku, zaś stare węzły zostały z BTC i dalej dziabią stary łańcuch. Z tego powodu wszelkie rozwiązania, które wchodzą na BTC opierają się na zachowaniu istniejących reguł. Dlatego kolejnym pomysłem było właśnie LN: jedna transakcja wrzuca środki z Bitcoina do LN, a druga je wypłaca z LN z powrotem do Bitcoina. To rozwiązanie okazało się całkiem niezłe, ale nadal dalekie od ideału. Problemy z LN są choćby takie, że można otworzyć kanał, wykonać parę transakcji off-chain, poczekać, aż druga strona będzie offline i wtedy wypuścić transakcję zamykającą kanał ze starym stanem kont, czyli po prostu użyć poprawnej transakcji, która nie jest "tą ostatnią, na którą obie strony się zgodziły".
Innym problemem Lightning Network jest routing. W Bitcoinie jak masz 1 BTC, to możesz to w całości przesłać komukolwiek, odliczając opłaty od transakcji. W LN już tak nie jest, bo bezpośrednio możesz przesyłać środki tylko wtedy, gdy masz otwarty kanał pomiędzy dwiema stronami. Otwarcie kanału jest potrzebne głównie dlatego, aby chronić przed double spendingiem, czyli przed sytuacją, w której ludzie wesoło i radośnie wymienialiby się transakcjami poza łańcuchem, a później okazałoby się, że część z tych transakcji nigdy nie zostanie potwierdzona, bo jakiś input został już wydany w innej transakcji off-chain. Dlatego też transfer środków jest możliwy tylko wtedy, gdy masz ciąg kanałów od jednej osoby do drugiej i gdy każdy uczestnik kanału pośredniego jest w stanie mieć zablokowaną w kanale po swojej stronie co najmniej taką kwotę, jaką chcesz przesłać dalej.
Skalowalność BTC w chwili obecnej sprowadza się zatem do tego, aby trzymać mniej danych na łańcuchu. Pomysł z użyciem sidechainów polega na tym, że wewnątrz coinbase na Bitcoinie doszłaby dodatkowa 256-bitowa liczba, która określałaby hash bloku sidechainowego. Dzięki temu część transakcji mogłaby być trzymana poza głównym łańcuchem i dałoby się w ten sposób uzyskać dodatkowy łańcuch, w którym żadne nowe środki nie byłyby tworzone z powietrza tak, jak to się dzieje w altcoinach, tylko miałyby pokrycie 1:1 w BTC. Podobnie jak w LN, co najmniej dwie transakcje musiałyby wylądować na głównym łańcuchu. Jedna, która przeniesie środki do sidechaina, a druga, która je stamtąd wyciągnie.
Problemem sidechainów jest choćby to, że jeśli mamy pierwszą osobę, dajmy na to Alicję, która wkłada środki do sidechaina, a później te monety sobie tam krążą, to na samym końcu musi być taka możliwość, aby Zenek, jako dwudziesty któryś z kolei posiadacz tychże monet, był w stanie je wypłacić bez udziału Alicji. Obecny pomysł z sidechainami opiera się na tym, aby adresy sidechainowe były podobnie ustawione do adresów Segwitowych, czyli by każdy mógł wydać środki z sidechaina. W ten sposób Zenek mógłby skonstruować transakcję, która byłaby poprawna na głównym łańcuchu. Natomiast aby wszystko działało uczciwie, to (podobnie, jak przy Segwicie) musi istnieć poparcie górników ze strony BTC i górników sidechainowych.
Chodzi o to, aby górnicy kopiący BTC nie musieli jednocześnie wiedzieć o sidechainie więcej niż potrzebują. Są tacy, którzy nie chcą przetwarzać większych bloków, więc nie będą chcieli mieć pełnego wglądu do sidechaina, który pewnie swoje będzie ważył. Dlatego też to jest nadal w fazie eksperymentu i dlatego to nie zostało aktywowane: bo istnieje teoretyczna możliwość, że jak sidechain będzie kiepski, to górnicy BTC będą mogli go zniszczyć, zwyczajnie zabierając wszystkie środki z sidechaina normalną transakcją. W przypadku Segwita wszystko działa na adresach ANYONE_CAN_SPEND, ale dodatkowy blok z sygnaturami gwarantuje, że nie każdy może to wydać i górnicy Segwitowi są w stanie to sprawdzić. W przypadku sidechainów też będzie potrzebny taki "dowód" w tej czy innej postaci, że Zenek serio może wydać te monety, ale żeby nie trzeba było mieć całego sidechaina, aby o tym wiedzieć.
Czy jest to np. inny klient Bitcoina
W pewnym sensie tak, ale nadal jest z nim zgodny. Klient sidechainowy patrzy na dwa łańcuchy naraz: na sidechain i na mainchain, czyli Bitcoina.
który działa na łańcuchu z innym genesis
Działa na dwóch łańcuchach, jeden to Bitcoin, drugi to sidechain. Tak, sidechain może mieć inny blok Genesis, to już zależy od twórców konkretnego sidechaina.
podobnie jak Bitcoin może działać na testnecie?
Może, testnet to nic innego, jak inny łańcuch, który w sporej części jest zgodny z mainnetem, nie ma żadnych przeszkód, aby postawić sidechainy również na testnecie.
Czy multisigi działają o ten sam algorytm podpisywania ECDSA co pojedyncze sygnatury, tylko zwielokrotnia się liczby s i r służące jako podpis ?
Jak sama nazwa wskazuje, "multisig", czyli "wiele sygnatur". Po prostu żeby wydać pojedynczy output, potrzeba po prostu więcej niż jednego klucza, więc w typowym przypadku więcej niż jedna osoba musi to podpisać, czyli dołączyć swoją sygnaturę. Tak, całość działa na tej samej krzywej eliptycznej, możesz odpalić regtest (nie mylić z testnetem) i pobawić się multisigiem, żeby zobaczyć, jak to działa.
a co z jakąś światową walutą o tysiąc razy większej przepustowości?
Wiesz, myślę, że gigabajtowe bloki by to mogły załatwić nawet dzisiaj. Skoro jednak łamie to zgodność wsteczną, to cała sztuka skalowania polega właśnie na tym, aby to w jakiś sposób skompresować na łańcuchu, lub też przeprowadzać w jakiś sposób poza łańcuchem. Jak wspominał kiedyś Satoshi, trzeba pozwolić użytkownikom być po prostu użytkownikami. Nie ma sensu zmuszać każdego do trzymania wszystkich danych, LN rozwiązuje ten problem w ten sposób, że historia transakcji jest trzymana tylko pomiędzy zainteresowanymi stronami, a sidechainy rozwiązują to tak, że masz osobny łańcuch transakcji, który jest wydziabywany przez górników sidechainowych. Takich sidechainów może być wiele, tak czy siak wtedy dochodzi kwestia wymiany danych między dwoma sidechainami, to też może być kosztowne i wymagać na przykład jednej transakcji on-chain na Bitcoinie, gdzie z jednego sidechaina coś będzie przesunięte do innego. Ewentualnie można też zrobić tak, że zamiast je wpinać wszystkie do Bitcoina, to można do sidechaina dokładać kolejne sidechainy.
Tak czy siak, pomysł z sidechainami nadal nie jest w pełni gotowy, jakieś różne projekty istnieją, owszem, część organizuje Blockstream, część ludzie sami stawiają. Możesz poczytać o Liquid Network, o RSK, możesz poprzeglądać sobie transakcje coinbase i zobaczyć, co tam się nowego pojawia i co poszczególne bajty oznaczają.
Zastanawiam się, czy dałoby radę wymyślić walutę z rozproszonymi blokami, takie bloki powtarzałyby się w sieci, aby nie było możliwości że w ogóle informacje znikną, jednak nie tak że wszyscy mają wszystkie bloki.
Wymyślić? Bez problemu, ludzie mają od groma pomysłów, sam mam ich więcej niż jestem w stanie zamienić w kod. Gorzej z realizacją, bo ktoś to musi zrobić, to musi być bezpieczne, odporne na ataki, no i ostatecznie ci, którzy są górnikami lub też dużymi kopalniami, to muszą to wszystko zaakceptować. A dopóki nie uzyskasz akceptacji górników, to pomysł nie wchodzi i jako programista możesz jedynie eksperymentować na tym, co jesteś w stanie samodzielnie wykopywać. Niestety, duży hashrate i wysokie difficulty z jednej strony dają ogromne bezpieczeństwo i niemal całkowitą nieodwracalność transakcji, a z drugiej strony sprawiają, że jak chcesz coś wprowadzić, to górnicy muszą się na to zgodzić. A co do "znikania" bloków, to jak transakcja z sidechaina leci na mainchain i jest ostatnia, to wszyscy nie muszą wiedzieć, jakie były te transakcje, tylko muszą jedynie uzyskać gwarancję, że rzeczywiście były i że to była ostatnia transakcja. Potem można zgodnie z whitepaperem zostawić jedynie hash transakcji i to zwijać tak długo, aż zostanie jedynie nagłówek bloku, zaś każdy z zainteresowanych może lokalnie sobie trzymać kopię transakcji po to, aby móc udowodnić w razie potrzeby, że monety są jego.