Offtop – Plasma sidechains – część druga

plasma2

Zgodnie z obietnicą, druga część na temat technologii Plasma. Odmian Plasmy jest dużo, ale ja chciałbym się skupić na najprostszym rozwiązaniu zwanym Plasma MVP (Minimal Viable Plasma). Od razu ostrzegam, że artykuł nie będzie należał do najprostszych. Celem zrozumienia artykułu przydatna jest znajomość pojęć: hash, merle root i merkle proof.

Zanim zacznę to tutaj możecie znaleźć część pierwszą (http://lightningnetwork.pl/2019/03/17/offtop-plasma-sidechain-czesc-pierwsza/) a tutaj ogólny opis tego w jaki sposób Plasma ma szanse stać się drugą warstwą sieci będąc swojego rodzaju pośrednikiem między głównym blockchainem, a kanałami LN: http://lightningnetwork.pl/2019/02/27/ln-vs-plasma-sidechains/

Plasma MVP to taka minimalna implementacja, której można użyć jedynie do transferu środków. Jako że MVP jest w miarę łatwe do ogarnięcia, udało mi się zrozumieć jego podstawy, które chciałbym zaprezentować poniżej. Ponieważ Plasma jest rozwijana dla sieci Ethereum, będę używał ETH w przykładach. Chciałbym jednak podkreślić, że nie jest powiedziane, że Plasma nie zawita do innych walut jak np. Bitcoin. Postaram się opisać to od ogółu do szczegółu. Zacznę od przykładu.

Od ogółu…

Wyobraźmy sobie, że mamy niewielkie miasteczko, które chciałoby na codzień używać jakiejś kryptowaluty. Powiedzmy, że padło na ETH, jednak transakcje w głównej sieci Ethereum są dość drogie. Może by tak stworzyć własny blockchain? Tu z kolei problemem jest odpowiednia moc. Małe/słabe blockchainy są podatne na ataki. Poza tym mieszkańcy chcieliby płacić przy użyciu ETH a nie innej waluty (jeszcze bardziej podatnej na wahania wartości). Najbardziej ogarnięty mieszkaniec postanawia założyć sidechain w technologii Plasma!

W sieci Ethereum tworzy specjalny smart contract do którego wpłaca pewną sumę pieniędzy na początek jako zabezpieczenie swojej uczciwości. Jeśli będzie próbował oszukać któregokolwiek z mieszkańców miasteczka, straci te środki. Nazwijmy go właścicielem sidechaina.

Właściciel zaprasza do swojego sidechaina kolejnych użytkowników. Użytkownik, który chce z łańcucha głównego przejść do sidechaina plasmy, deponuje(zamraża) pewne środki na łańcuchu głównym. W zamian tworzone są środki na sidechainie Plasma w ilości takie, jaka została zamrożona na łańcuchu głównym. Będzie mógł następnie przekazywać te środki wszystkim innym użytkownikom sidechaina Plasma. Wszystkie transakcje na sidechainie Plasma nie są widziane w łańcuchu głównym, jednak łańcuch główny posłuży do ich zabezpieczenia.

Załóżmy, że dana osoba wpłaciła do sidechaina 10 ETH, wykonała parę transakcji i na łańcuchu Plasma zostało jej 5 ETH. Może następnie wypłacić te 5Eth z powrotem na łańcuch główny. Wykonuje więc na łańcuchu głównym odpowiednią transakcję wypłacającą te środki. Jest to podobne do wypłacania środków z kanału płatności. Podobnie jak po zamknięciu kanału płatności, tak i po wypłaceniu środków z sidechaina, minerzy łańcucha głównego nie wiedzą, czy kwota, która stara się wypłacić użytkownik jest prawidłowa. Może na skutej transakcji zawartych w sidechainie plasmy posiada tylko 3 ETH a nie 5? Minerzy, który wykopują bloki łańcucha głównego nie obserwują wszystkich sidechainów. Nie są więc w stanie zweryfikować czy kwota, którą stara się wypłacić użytkownik jest prawidłowa. Zatwierdzają więc taką transakcję “w ciemno”, ale pod warunkiem że właściciel będzie mógł “odebrać” swoje pieniądze dopiero za jakiś czas (np. za tydzień). Do tego czasu każdy z innych użytkowników obserwujących tego sidechaina może zweryfikować, czy wypłacana kwota jest tą właściwą. Jeśli nie, każdy z nich może przedstawić dowód, że doszło do próby oszustwa i oszust traci wszystkie środki.

Przyznacie że “z wierzchu” jest to bardzo podobne w działaniu do LN, z tym że zamiast pojedynczego kanału i dwóch uczestników mamy sidechaina w potencjalnie setki, tysiące czy nawet miliony uczestników. Sam dowód na próbę oszustwa wygląda jednak inaczej niż w przypadku LN i jest bardziej skomplikowany.

.. do szczegółu

Więc jak dokładnie to się dzieje? Przede wszystkim w sidechainie tworzone są bloki. Właściciel sidechaina co jakiś czas grupuje transakcje w ramach swojego sidechaina. Nie wykonuje jednak żadnej pracy celem ich wykopania. Z całego bloku wylicza hash (tak jak np. w Bitcoinie). Z każdej transakcji liczony jest hash, a następnie hashe układane są w tzw. merklee tree. Ostateczny hash trafia do łańcucha gównego jako transakcja. Krótko mówiąc – nasza transakcja w sidechainie Plasma jest potwierdzona wtedy, kiedy przyczyniła się do stworzenia hasha, który ostatecznie wylądował w łańcuchu głównym. Dzięki tzw. merkle proof możemy wówczas udowodnić każdemu, ze nasza transakcja przyczyniła się do utworzenia hasha. A skoro hash ten został umieszczony w łańcuchu głównym, oznacza to, ze nasza transakcja została zatwierdzona.

Każdy użytkownik naszego sidechaina ma dostęp do wszystkich transakcji zawartych na tym sidechainie jak i do łańcucha głównego. Każdy użytkownik sidechaina widzi więc które transakcje zostały zatwierdzone. Jeśli natomiast ktoś nie używa tego sidechaina i obserwuje jedynie łańcuch główny (np. minerzy Ethereum), to nie widzą transakcji w łańcuchu Plasma. Widzą jedynie hash z każdego bloku z łańcucha plasma. Jest jednak możliwe, żeby podesłać im daną transakcję, która wydarzyła się w sidechainie i jest też możliwe by udowodnić im, że ta właśnie transakcja została “zawarta” w danym hashu i tym samym została wykopana. Takiego samego dowdu używają z resztą lekkie portfele bitcoina (tzw. SPV).

Można więc powiedzieć, że minerzy łańcucha głównego mogą tutaj działać jak sąd. Sąd nie widzi wszystkich umów zawieranych między uczestnikami, ale w spornych sytuacjach jest możliwe udowodnienie sądowi, że dana umowa została zawarta.

Krótko mówiąc, dzięki temu że hash każdego z bloku sidechaina zawarty jest w łańcuchu głównym, możliwe jest rozwiązywanie przyszłych sporów między użytkownikami sidechaina Plasmy i zapobieganie tym samym oszustwom.

Gdy użytkownik opuszcza sidechaina

Prędzej czy później użytkownik chciałby przestać korzystać z sidechaina i wypłaca kasę na łańcuch główny. W danym sidechainie mógł wykonać tysiące transakcji, ale gdy chce opuścić sidechain, wysyła do łańcucha głównego jedynie ostatnie transakcje (których outputy nie zostały już wydane). Może wysłać dowód, że np. po ostatniej transakcji w sidechainie zostało mu 5 ETH i właśnie tyle chciałby wypłacić. Dowód taki trafia do łańcucha głównego i czeka tydzień na zakwestionowanie. Jeśli jest to ostatnia transakcja, nikt nie protestuje i po tygodniu użytkownik ma już z powrotem swoja kasę na łańcuchu głównym.

Przy próbie oszustwa użytkownik może starać się wyprowadzić kasę  w taki sposób, że wrzuca na główny blockchain starą transakcję (po której miał dużo środków) i może starać się ukryć fakt, że środki te zostały później przez niego wydane na łańcuchu Plasma w jakiejś kolejnej transakcji. Wrzuca więc na główny blockchain dowód, że transakcja, wedle której należy mu się 8 ETH została zawarta i pokazuje, że przyczyniła się do utworzenia hasha znajdującego się np. w bloku numer 123 na łańcuchu głównym. Publikuje więc transakcje, która nie jest ostatnią, tzn. jej output został wydany później. Każdy z użytkowników sidechaina Plasma zauważy taka próbę oszustwa i może wówczas wrzucić do łańcucha głównego transakcję, która właśnie wydała środki z tamtego outputa. Udowadnia górnikom z łańcucha głównego, że np. w bloku numer 125 miała miejsce transakcja, która wydała outputa z tamtej transakcji z bloku 123. A więc oszust wbrew zasadom nie umieścił ostatniej transakcji jako podstawy do wypłaty środków z sidechaina Plasma. Taki dowód sprawia, że pomimo, iż oszustowi należałoby się np. 5ETH, to one również przepadają na rzecz osoby, która udowodniła oszustwo.

Jest tu również jedna dość spora zaleta nad LN. W LN wykryć (jak i udowodnić) oszustwo może tylko druga strona kanału. W sidechainie Plasmy wszystkie transakcje plasmy są współdzielone, więc oszustwo może udowodnić każdy.

Gdy właściciel sidechaina oszukuje

Podobnie sytuacja ma się z właścicielem sidechaina. Jeśli np. wykopie nieprawidłowy blok i hash takiego bloku umieści w łańcuchu głównym, to każdy z użytkowników sidechaina może to udowodnić i tym samym przejąć depozyt jaki właściciel sidechaina wpłacił na samym początku. Dzięki temu właściciel sidechaina ma motywację, żeby nie oszukiwać.

To co może budzić pewne obawy, to fakt, że takim właścicielem jest jeden podmiot. Wygląda to dość niekorzystnie, ponieważ właściciel sidechaina może nagle “zaniemóc” i przestać generować bloki lub celowo nie umieszczać pewnych transakcji w bloku. Nie ma możliwości, by ukarać go za nieumieszczenie transakcji w bloku. Oczywiście można też “obrazić” się na właściciela sidechaina i wszyscy użytkownicy mogą samodzielnie takiego sidechaina opuścić. Uważam jednak, że lepiej byłoby gdyby zamiast jednego właściciela takiego sidechaina było kilku, konkurujących miedzy sobą i wydaje mi się, że jest to do zrobienia.

To tyle o najprostszej możliwej implementacji technologii Plasma. Pytanie, czy da się to rozwinąć do poziomu w którym sidechain Plasma będzie mógł zostać użyty jako baza dla kanałów płatności. Myślę, że dopiero wówczas Plasma mogłaby stać się naprawdę użyteczna. Sama Plasma MVP, choć ciekawa, ustępuję moim zdaniem LN.

Zapraszam do dyskusji, najlepiej pod tym artykułem, by inni w przyszłości mogli łatwo poczytać komentarze jeśli trafią tu z różnych miejsc. Napisanie komentarza nie wymaga podawania swoich danych ani rejestracji.


Jeśli uznałeś/uznałaś powyższy artykuł za wartościowy, zachęcam do wpłacenia jakiejkolwiek kwoty tutaj:


Będzie to dla mnie wskaźnik tego, ile osób faktycznie aktywnie korzystających już z LN czyta te artykuły i dla ilu osób są one na tyle wartościowe, że chce im się opłacić invoice.


Chcesz wiedzieć więcej o Lightning Network? Zapraszam na grupę Lightning Network Polska na facebooku.

2 Comments
  1. nonsrvm
    • Cezary Dziemian

Leave a Reply to Cezary Dziemian Cancel reply

Your email address will not be published.