Każdy kto śledzi Cosmos wie, że wiele dobrego wydarzyło się ostatnio w kwestii rozwoju. Na czele zdecydowanie znajduje się start projektu Neutron, pierwszego łańcucha, który korzysta z funkcji “Replicated Security”. Jednym z kluczowych elementów w całej układance Cosmos, który umożliwia także działanie wspomnianego replikowanego bezpieczeństwa, jest IBC.
Czym jest IBC?
Istnieje mnóstwo różnych łańcuchów bloków, ale stanowią one odizolowane od siebie ekosystemy. Inter-Blockchain Communication Protocol, w skrócie IBC, jest protokołem, który pozwala na bezpieczną komunikację pomiędzy dwoma różnymi blockchainami. Dokładniej mówiąc jest to protokół do obsługi uwierzytelniania i transportu danych między dwoma łańcuchami bloków.
Mimo że jest głównie kojarzony z ekosystemem Cosmos i łańcuchami, które w nim działają, IBC nie ogranicza się tylko do tej sieci lub konkretnego typu konsensusu, a może być wdrożony do różnych blockchainów, które spełniają podstawowe wymagania.
IBC rozwiązuje problem bezpiecznej komunikacji międzyłańcuchowej, który najbardziej był zauważalny w mostach działających na Ethereum. Most to połączenie, które tworzy się pomiędzy dwoma odrębnymi sieciami, aby (najczęściej) móc przesyłać środki z jednego łańcucha na drugi.
Występują różne rodzaje mostów. Są te bardziej scentralizowane oraz te próbujące decentralizować procesy, a ich działanie opiera się o smart kontrakty, do których należy wpłacić tokeny, by następnie otrzymać równowartość w innej sieci. Niestety te połączenia między łańcuchami mają bardzo wątpliwe rozwiązania bezpieczeństwa, takie jak potencjalne błędy w kontraktach lub oparcie się o multisig (wymaganie kilku podpisów do wysyłania transakcji), co kończy się tym, że największe exploity i ataki w kryptowalutach dotyczą właśnie kradzieży środków z mostów.
Zapraszam na rekt.news/leaderboard, po dokładniejsze opisy kradzieży.
IBC rozwiązuje wiele problemów mostów oraz znacznie szerszej komunikacji między łańcuchami, która nie polega tylko na przesłaniu tokenów z łańcucha A do B. Dzięki IBC można tworzyć wielołańcuchowe konta (Interchain Accounts), czy właśnie rozwiązania takie jak replikowane bezpieczeństwo, w którym jeden łańcuch zapewnia konsensus innemu.
IBC, nie tylko pozwala więc przesyłać tokeny, ale jest protokołem przesyłania wiadomości, który może obsługiwać dowolną formę danych i który zaimplementować może niemal każdy blockchain.
Jak działa IBC?
źródło grafiki
W IBC wyróżniamy dwie warstwy, transportową oraz aplikacji, a komunikacja za pomocą tego protokołu opiera się o pakiety danych, przekaźniki, lekkich klientów, połączenia oraz kanały. Choć brzmi to wszystko nieco skomplikowanie, zaraz postaram się każdy z tych terminów nieco wyjaśnić.
Lekki klient IBC oraz Przekaźniki
Łańcuchy połączone przez IBC posiadają lekkiego klienta drugiej sieci, który łączy się z pełnymi węzłami i weryfikuje nagłówki bloków. Dzięki temu łańcuch A jest w stanie zweryfikować stan łańcucha B. Innymi słowy, sprawdza u źródła to, czy dane transakcje zostały wykonane i są poprawne. Lekki klient nie bierze udziału w konsensusie i nie przechowuje całej historii blockchain, ale jest w stanie zweryfikować poprawność danego łańcucha.
Kiedy łańcuch A chce przesłać wiadomość do B, wysyła nagłówek bloku, w którym ta wiadomość istnieje, wraz z dowodem potwierdzenia tej wiadomości. Korzystając z nagłówka bloku i dowodu, B weryfikuje, czy A rzeczywiście wykonał to co przesyła.
Tym “co przesyła”, czyli wiadomością są pakiety danych, które mogą zawierać np. chęć transferu tokenów z A do B.
Łańcuchy A i B nie wysyłają jednak tych wiadomości bezpośrednio do siebie. Aby się komunikować, łańcuch bloków zatwierdza daną wiadomość dodając ją do swojego stanu, rejestrując tym samym zamiar wysłania określonych danych do innego łańcucha na własnym.
Tutaj do gry wkraczają specjalne węzły off-chain nazwane Przekaźnikami, które monitorują sieć w poszukiwaniu pakietów i przesyłają dane wraz z dowodem z A do B.
Przekaźniki (ang. Relayers) mogą być uruchamiane przez każdego i nie wymagają pozwoleń. Działają poza łańcuchem z możliwością odczytywania stanu i przesyłania transakcji przy użyciu protokołu IBC. Są fizycznym połączeniem pomiędzy łańcuchami A i B.
Co ważne, użytkownicy sieci korzystających z IBC nie muszą ufać Przekaźnikom, a dowodom dostarczonym przez lekkiego klienta. Więcej o tym co to dokładnie oznacza w sekcji bezpieczeństwo. Nawet jeśli jakiś przekaźnik działa nieuczciwie, a jest to rola otwarta dla wszystkich, to przesyłane przez niego pakiety danych nie byłyby zaakceptowane na łańcuchu docelowym - w naszym przykładzie B - ponieważ nie posiadają odpowiedniego dowodu z łańcucha A.
W momencie gdy wszystkie przekaźniki działają źle, sieć nie cierpi z powodów bezpieczeństwa, a jedynie pod kątem żywotności, ponieważ żadne dane nie są w takim wypadku akceptowane, a więc nie ma komunikacji, czyli przesyłania tokenów, zarządzania kontami, itp.
Przepływ wiadomości. Grafika: medium.com/the-interchain-foundation
Połączenia i Kanały
Połączenia, jak sama nazwa wskazuje, zapewniają… połączenie pomiędzy łańcuchami poprzez “uścisk dłoni” (podobny do three-way handshake z TCP IBC stosuje cztery uściski).
Na “uściski” składa się z seria transakcji przesyłanych do każdego łańcucha bloków. Mają one na celu ustalenie tożsamości łańcucha, z którym się komunikują oraz uniemożliwienie złośliwemu podmiotowi podszywania się pod łańcuch.
Grafika: medium.com/the-interchain-foundation
Raz ustanowione połączenia są odpowiedzialne za międzyłańcuchową weryfikację stanu IBC. Połączenie jest powiązane z lekkim klientem drugiego łańcucha bloków i jest odpowiedzialne za sprawdzenie, czy klienci w każdym łańcuchu są właściwymi klientami (czy mają ten sam blok, ten sam stan, innymi słowy, czy są takie jak powinny być) i gwarantuje, że pakiety danych zostały zatwierdzone i wykonane na wysyłającym łańcuchu (np. blokada tokenów na A, żeby przesłać je na B).
Z kolei Kanały stanowią połączenie pomiędzy aplikacjami na dwóch łańcuchach. Wysyłane są nimi pakiety, które dzięki nim mają zapewnione to, że zostaną wykonane tylko raz, dostarczane w kolejności, w jakiej zostały wysłane oraz dostarczane tylko do odpowiadającego modułu posiadającego kanał na łańcuchu docelowym.
Każdy kanał jest otwierany podobnie jak połączenie, za pomocą “uścisku dłoni” oraz powiązany z jednym połączeniem. Połączenie może mieć dowolną liczbę kanałów.
Kanały nie określają ładunku danych, jaki ma być wysłany. To moduły, które wysyłają i odbierają pakiety IBC, decydują, jak skonstruować dane pakietu i jak ma wyglądać ich działanie. Wykorzystują własną logikę aplikacji do określenia, jakie transakcje mają zastosować na podstawie danych zawartych w pakiecie. (np. zablokowano 100 ATOM na A, wybij 100 ATOM na B).
Warstwa Aplikacji
Warstwa transportowa nie określa jakie dane powinny znajdować się w pakietach ani jak powinny być interpretowane. To zadanie spoczywa na drugiej warstwie, z którą w interakcje wchodzą użytkownicy.
Warstwa Aplikacji to standardy określające procedury obsługi i interpretacji danych z pakietów. Jednym z takich standardów jest ICS-20, który określa strukturę danych, logikę obsługi i inne szczegóły dla przesyłania tokenów zamiennych przez kanały IBC.
Inne standardy to ICS-721, który określa transfery NFT, czy ICS-27, który odpowiada za konta Interchain.
Podsumowanie - Komunikacja IBC w skrócie
Sumując wszystkie te informacje jak działa komunikacja IBC?
Łańcuch A tworzy połączenie z B, a następnie otwiera kanały, którymi przekazywane będą pakiety danych.
Następnie łańcuch, który chce wysłać dane, robi to wysyłając odpowiednią transakcję na własnym łańcuchu poprzez kanały.
Kanały są monitorowane przez węzły działające off-chain nazwane Przekaźnikami, które wyłapują te informacje i fizycznie przesyłają je do docelowego łańcucha wraz z dowodem. Poprawność tych wiadomości jest weryfikowana z pomocą lekkiego klienta, który śledzi stan łańcucha, z którym się komunikuje.
Ostatnim krokiem jest wykonanie danego polecenia na łańcuchu B zgodnie z określoną logiką. Może to być np. przesłanie tokenów zgodnie ze standardem ICS-20, zarządzanie kontem na B za pomocą konta na A, zapewnienie informacji o walidatorach Cosmos w replikowanym bezpieczeństwie, itp.
Bezpieczeństwo w IBC
Protokół IBC może być stosowany przez dowolne łańcuchy spełniające podstawowe wymagania. Nie ma tu jednak żadnych z góry narzuconych zezwoleń, czy weryfikacji tego kto może stosować IBC co może stawiać znaki zapytania w kwestiach bezpieczeństwa.
Jeśli chodzi o bezpieczeństwo w IBC opiera się ono, o krótkie stwierdzenie:
“Ufaj łańcuchowi, nie mostom”
Co to stwierdzenie oznacza? Ze względu na stosowanie lekkiego klienta połączenia IBC są tak bezpieczne jak konsensusy sieci, które się ze sobą łączą. To oznacza, że jeśli Cosmos Hub łączy się z Osmosis, to ich połączenie jest tak bezpieczne jak konsensusy, które stosują.
Jeśli Cosmos Hub ufa, że Osmosis jest “wystarczająco” bezpieczne, to nie ma żadnych innych założeń dotyczących bezpieczeństwa w tej komunikacji. Jeśli jednak konsensus jakiejś sieci byłby znacznie słabszy i przez to narażony na ataki lub manipulacje, to również i komunikacja IBC traci na bezpieczeństwie.
Jak to mogłoby wyglądać w praktyce? Jeśli da się w jakiś sposób wpłynąć na konsensus i np. wysłać transakcję blokady 10000 ATOM na Cosmos Hub, wybicia ich na jakimś innym łańcuchu, powiedzmy “B”, a następnie odblokowania ich na Cosmos Hub (bez wpływu na B), to takie konto zyskałoby 10000 ATOM na B, które zapewne zostałoby użyte do sprzedaży oraz miałoby 10000 ATOM na Cosmos Hub, więc wydawałoby podwójnie.
Najważniejszy jest tu więc konsensus, a powyższy przykład w Cosmos Hub jest raczej mało prawdopodobny. Można więc z dużą pewnością założyć, że nikt nie da rady manipulować tą siecią, atakować jej, wydawać podwójnie, itd., a więc otwarcie połączenia IBC z Hubem jest bezpieczne.
Jak to się ma np. do mostów na Ethereum? W przypadku komunikacji IBC między Ethereum a Cosmos połączenie byłoby tak bezpieczne jak konsensus Ethereum (i Cosmos), a więc dość bezpieczne. Z kolei mosty często padają ofiarą źle zaprogramowanych smart kontraktów, czy wycieku kluczy kontrolujących multisig… Nie zależą więc od ogólnego konsensusu danej sieci, a od poszczególnych smart kontraktów, a nawet po prostu od kilku osób.
Możliwości wykorzystania IBC
IBC można wykorzystywać do komunikacji pomiędzy dwiema sieciami, które mogą stosować różne konsensusy. Najpopularniejszym wykorzystanie jest oczywiście transfer tokenów.
Transfer tokenów zamiennych za pomocą standardu ICS-20 odbywa się poprzez zablokowanie tokenów w łańcuchu źródłowym i przesłanie dowodu wraz z metadanymi tokena do łańcucha docelowego, na którym dowód jest weryfikowany przez lekkiego klienta.
Jeśli weryfikacja jest pomyślna, wybijana jest reprezentacja tokenów na łańcuchu docelowym i wysyłane jest potwierdzenie do łańcucha źródłowego.
Oczywiście istnieje także możliwość przesyłania NFT dzięki standardowi ICS-721. Pozwala to tworzyć wielołańcuchowe rynki NFT, wielołańcuchowe metawersa, wielołańcuchowe... itd.
Kolejne wykorzystanie IBC to Międzyłańcuchowe Konta (Interchain Accounts (ICA)).
Dzięki ICS-27 łańcuchy mogą tworzyć konta na innych łańcuchach obsługujących ten standard i kontrolować je za pośrednictwem transakcji IBC, zamiast podpisywania kluczem prywatnym.
Konta międzyłańcuchowe zachowują wszystkie możliwości zwykłego konta, co oznacza, że mogą wysyłać zwykłe transakcje, głosować w zarządzaniu, czy stakować, ale są zarządzane przez użytkowników z innego łańcucha za pośrednictwem IBC.
Możliwości ICA są ogromne. Można kontrolować wiele kont na wielu łańcuchach z jednego miejsca, co oznacza łatwe dostarczanie płynności, staking, międzyłańcuchowe portfele ze znacznie lepszym UX, Multichain DAO i wiele więcej.
Praktycznym przykładem wykorzystania tej funkcji wraz z zastosowaniem interfejsu ADR-8 może być wykonanie operacji takiej jak przeniesienie tokenów z łańcucha A do B. Po pomyślnym potwierdzeniu zamiana tokenów w miejscu docelowym i odesłanie ich z powrotem do łańcucha A. Wszystko w jednej operacji z perspektywy użytkownika…
grafika: https://medium.com/the-interchain-foundation/actor-callbacks-unlock-interchain-composable-apps-5c8c5e9324bd
Ostatnim przykładowym wykorzystaniem IBC może być wspominane już kilkukrotnie Replikowane Bezpieczeństwo.
Cosmos Hub zyskał ostatnio supermoc. Jest nią zabezpieczanie innych łańcuchów. Replikowane Bezpieczeństwo pozwala wykorzystać walidatorów Cosmos Hub, najbezpieczniejszego łańcucha sieci Cosmos, do zapewniania bezpieczeństwa wielu innym łańcuchom. Walidatorzy Cosmos Hub uruchamiają węzły łańcucha konsumenckiego (tego, który zabezpieczają) i wykorzystują swój stake w ATOM, aby zapewniać bezpieczeństwo i konsensus nowej sieci. Jeśli próbują oszukać, grozi im slashing, a więc utrata tokenów ATOM.
Dzięki temu łańcuchy korzystające z tej funkcji zyskują poziom bezpieczeństwa Cosmos Hub w zamian oferując różnego rodzaju nagrody, co z kolei przysłuży się stakującym ATOM.
Oczywiście wszystko to jest możliwe dzięki IBC, poprzez które łańcuch zabezpieczający (w domyśle Cosmos Hub) oraz zabezpieczamy komunikują się. Dokładniej mówiąc jest to możliwe dzięki protokołowi działającemu na poziomie IBC nazywanemu CCV, czyli Cross-Chain Validation.
Za pomocą IBC dostawca bezpieczeństwa (np. Cosmos Hub) przesyła konsumentowi (np. projekt Neutron) aktualizacje zestawu walidatorów, a konsument informuje dostawcę o potencjalnych nieprawidłowościach (slashing) oraz wysyła nagrody.
Podsumowanie
IBC jest protokołem, który pozwala na bezpieczną komunikację pomiędzy niezależnymi łańcuchami bloków. Dzięki IBC można wysyłać dowolne dane, a jego głównym zastosowaniem nadal jest przesyłanie tokenów z jednego łańcucha na drugi w ekosystemie Cosmos, ale nie tylko… Już dziś IBC wdrażane jest też w innych sieciach, np. w Polkadot, gdzie Composable Finance łączy swoje parachainy w sieciach Kusama i Polkadot właśnie za pomocą IBC.
Dzięki IBC można rozwiązać wiele problemów mostów, czyli największych ofiar kradzieży i najbardziej kuszących celów ataku. Choć bardzo bezpieczny, Inter-Blockchain Communication nie jest odporny na wszystko i w przypadku słabości konsensusu traci swoje właściwości, ale sieć ze słabym konsensusem nie powinna w ogóle istnieć i w takim wypadku zagrożone będzie nie tylko IBC, ale wszyscy użytkownicy.
Poza przesyłem tokenów, dzięki IBC rozwijane są rozwiązania, które znacznie poprawiają wrażenia użytkowników korzystających z wielołańcuchowej sieci Cosmos, takie jak ICA, czy pozwalające na szybkie i bezpieczne zabezpieczenie nowej sieci replikowane bezpieczeństwo.
IBC jest jedną z najważniejszych technologii ekosystemu Cosmos, a jego potencjał nadal w dużej części jest niewykorzystywany. Może stanowić główny protokół komunikacji na całym rynku, choć nie jest jedynym rozwiązaniem, które chciałoby to osiągnąć…