Web 3.0 – nowy Internet (część 2)
Witam Cię w kolejnym wpisie poświęconym tematyce Web 3.0. Miała być to druga i zarazem ostatnia część, ale w trakcie okazało się, że moje palce wyprodukowały za dużo słów :). Z tego powodu niektóre tematy zostaną przeniesione na kolejny wpis i obiecuję, że tym razem to już będzie ostatni.
We wcześniejszym poście poruszyłem takie zagadnienia jak m.in. tokeny ERC-20 i ERC-721 oraz DAO. Jeśli jeszcze nie znasz tego tekstu, zapraszam do przeczytania części 1.
W tym wpisie znajdziesz tematy takie jak DeFi, autentykacja w świecie Web 3.0 oraz zdecentralizowane przechowywanie danych. Natomiast sprawy dotyczące potencjalnych korzyści materialnych oraz materiałów, które mogą Ci pomóc zostać Web 3.0 developerem, są dopiero w przygotowaniu. Zatem nie przedłużając, przejdźmy do pierwszego tematu dzisiejszego odcinka, którym są…
Zdecentralizowane Finanse
Myślę, że nie będzie błędem, jeśli założę, że na co dzień masz styczność z tradycyjnym systemem finansowym. Może nie inwestujesz na giełdzie, ale na pewno korzystasz z usług bankowych oraz od czasu do czasu kupujesz różnego rodzaju ubezpieczenia. Wszystkie te usługi dostarczane są przez scentralizowane instytucje i wiążą się z tym zarówno plusy, jak i minusy. Jedną z największych zalet jest chociażby fakt, że odzyskanie dostępu do konta np. z powodu zapomnianego hasła, jest dosyć łatwe. Jednak największą wadą takich usług jest ich centralizacja. Oznacza to de facto, że pieniądze, które leżą w banku, nie do końca należą do nas. Może właśnie myślisz, że gadam totalne głupoty, bo przecież widzisz w aplikacji swoje środki i możesz z nimi zrobić, cokolwiek Ci się podoba. Ale czy na pewno tak jest?
Możliwe, że nigdy nie spotkała Cię taka sytuacja, ale ja miałem już nieraz okazję przekonać się, że to bank decyduje, czy mogę wydać swoje pieniądze. Ostatni raz zdarzyło się to kilka tygodni temu, kiedy chciałem wynająć mieszkanie przez Airbnb. W momencie płatności kartą wszystkie moje konta w tym banku (nie powiem w jakim, ale jego nazwa zaczyna się od małego “m”) zostały zablokowane. Musiałem czekać w kolejce na infolinii i łaskawie prosić o odblokowanie dostępu. W międzyczasie kazano mi odpowiedzieć na pytania z ankiety, od których zależała decyzja, co wydarzy się dalej (na szczęście wpasowałem się w klucz). O sytuacjach podobnych do mojej słyszałem już dziesiątki razy, a jeśli dalej twierdzisz, że bank nie ma prawa do Twoich pieniędzy, to sprawdź, co takiego wydarzyło się niedawno w Kanadzie, lub przeczytaj, jakie przepisy obowiązują obecnie w Polsce.
Problemy, które mogą nas spotkać podczas korzystania z usług scentralizowanych instytucji finansowych, nie dotyczą jedynie tych przechowujących nasze pieniądze. Co jakiś czas można usłyszeć o sytuacji, gdy ubezpieczyciel nie chce wypłacić należnego odszkodowania lub o zdefraudowanych środkach, które przechowywane były na giełdach. Niestety tego problemu nie da się rozwiązać żadnego rodzaju regulacjami, ponieważ nigdy do końca nie wiadomo, jak dany system działa od kuchni. Zawsze też istnieje jakaś ”osoba”, która ma nad nim pełną kontrolę. Na szczęście Web 3.0 przyniosło nam nowe narzędzia, mogące całkowicie odwrócić tę sytuację.
DeFi, czy Zdecentralizowane Finanse (ang. Decentralized Finance), to blockchainowa propozycja rozwiązania przedstawionych problemów. Pełne zrozumienie tematu wymaga szczegółowego zagłębienia się w poszczególne mechanizmy, dlatego w niedalekiej przyszłości przygotuję cykl kilku wpisów o DeFi. Wyjaśnię w nich temat ze szczegółami, teraz natomiast jedynie “liznę” to zagadnienie.
Świat scentralizowanych finansów to szerokie spektrum różnych usług i serwisów. Nie inaczej jest w tych zdecentralizowanych.
Całe DeFi możemy oprzeć na kilku filarach:
- stablecoinach
- rynku pożyczek
- zdecentralizowanych giełdach
- ubezpieczeniach
- rynku derywatów
Jeżeli powiem, że każde z wymienionych rozwiązań opiera się na smart kontraktach, to prawdopodobnie nie będzie to wielkim zaskoczeniem. Oczywiście w niektórych przypadkach, np. do stablecoinów, wystarczy tylko jeden kontrakt i cały mechanizm może być gotowy do użytku. Jednak pozostałe rozwiązania zazwyczaj wymagają zaawansowanego systemu połączeń różnych smart kontraktów.
Tak jak wspomniałem, nie będę teraz wyjaśniał mechanizmów stojących za DeFi, ale warto chociaż powiedzieć kilka słów o samych stablecoinach, ponieważ tego pojęcia nie znajdziemy na tradycyjnym rynku. Co do reszty tematów, to na tę chwilę wystarczy przyjąć, że każde z rozwiązań, które występuje w scentralizowanych finansach, możemy przenieść na blockchain i sprawić, aby było przejrzyste, uczciwe i nie podlegało manipulacjom oraz oszustwom. Mówiąc “możemy” mam na myśli, że da się tak zrobić, a nie, że wszystkie obecne protokoły takie są :).
Stablecoin to, najprościej mówiąc, kryptowaluta, której cena odzwierciedla wartość jakiegoś dobra z realnego świata. Może być związany np. z różnego rodzaju walutami, jak chociażby z dolarem i euro, ale nic nie stoi na przeszkodzie, aby oprzeć stablecoina o złoto. Tak naprawdę moglibyśmy stworzyć nawet token, który byłby powiązany z ceną gumy “Turbo”. Najważniejsze jest jednak to, jak połączyć ze sobą wycenę wirtualnego tokena z realnym przedmiotem. Można np. przechowywać fizyczną gotówkę jako zabezpieczenie stablecoina, a cała jej kwota powinna odzwierciedlać liczbę tokenów na rynku. Innym sposobem jest wykorzystanie różnego rodzaju algorytmów, których zadaniem będzie utrzymanie odpowiedniej ceny. Chociaż w ostatnim czasie przypadek kilku stablecoinów pokazał, że ten drugi sposób może być bardzo problematyczny, osobiście nie skreślałbym jeszcze takiej możliwości.
W tym miejscu może pojawić się pytanie, czy stablecoiny są nam potrzebne?. Odpowiedź jest dość trywialna. Większość ludzi przyzwyczajona jest do opierania wszystkiego o cenę podawaną w złotówkach, dolarach, euro, itp. Te waluty nie doświadczają ogromnych wahań na co dzień, więc dzięki nim łatwiej można budować różnego rodzaju biznesy (chociaż ich wartość w długim terminie to już całkiem osobny temat). Gdy chcemy stworzyć nowy system finansowy, który jest w całości oparty o blockchain, to żeby zachęcić ludzi do korzystania z niego, potrzebujemy mechanizmów, które znają z codziennego życia. Dopóki świat opiera się na walutach fiducjarnych, a to prawdopodobnie prędko się nie zmieni, to również Web 3.0 musi z nich korzystać. Możliwe, że w przyszłości świat będzie oparty o inne aktywa, jednak do tego czasu jesteśmy zdani na obecne podejście.
Przywracamy prywatność
Chyba każdy przyzwyczaił się do tego, że jego adres e-mail nie służy już jedynie do odczytywania i wysyłania wiadomości, ale jest pewnym centrum dostępu do wszelkiego rodzaju usług w Internecie. Z jednej strony jest to bardzo wygodne, ale z drugiej likwiduje w dużym stopniu prywatność. Po pierwsze, w wielu przypadkach adres e-mail zawiera imię i nazwisko, a to sprawia, że łatwo połączyć z nim konkretną osobę. Po drugie, wszystkie dane z nim związane przechowywane są przez scentralizowane firmy. Jeśli z jakichś przyczyn taka organizacja stwierdzi, że nie chce więcej świadczyć nam usług, to stracimy dostęp do wszystkiego. Wiem, że wykorzystywanie jednego adresu e-mail przy każdej usłudze nie jest najbezpieczniejszą sprawą na świecie, ale nie opisuję tutaj idealnego świata, tylko mówię, jak wygląda rzeczywistość. Dodatkowo przyzwyczailiśmy się do logowania na różne portale z wykorzystaniem konta Google, FB, czy innych dostawców. Na szczęście blockchain i w tym wypadku przychodzi nam z odsieczą.
W świecie Web 3.0 nie potrzebujemy podawania nigdzie adresu e-mail ani hasła, ponieważ cała autentykacja może odbywać się przy użyciu pary klucz publiczny – klucz prywatny. Ten pierwszy to adres, który służy do otrzymywania wiadomości lub różnego rodzaju transakcji, drugi natomiast służy do ich podpisywania. Możemy tę parę przyrównać do adresu e-mail i hasła, ale występują tutaj całkowicie inne cechy. Po pierwsze klucz publiczny nie zawiera żadnej informacji na nasz temat. Oznacza to, że możemy go podać do ogólnodostępnej wiadomości i każda osoba na świecie będzie mogła wykorzystać go np. do przesłania nam środków. Istotne jest w tym to, że nasz darczyńca wcale nie musi wiedzieć, kto tak naprawdę stoi za adresem i vice versa. Ważne, że tylko my posiadamy wiedzę o kluczu prywatnym i jeśli nie zostanie on przez nas ujawniony, to nikt nie będzie w stanie uzyskać dostępu do konta i zrobić czegoś w naszym imieniu. Oczywiście, by nikt nie wykradł klucza, musimy odpowiednio go przechowywać. Przy czym taki klucz możemy po prostu zapamiętać i nigdzie go nie zapisywać. W takim wypadku, dopóki nie powstaną metody hakowania mózgu, będzie on bezpieczny. Z tego też powodu nie istnieje możliwość, aby ktokolwiek zablokował nam dostęp do konta.
Klucze na Ethereum
Utworzenie pary klucz prywatny/klucz publiczny na przykładzie Ethereum wygląda następująco: na początku tworzony jest szereg znaków (32 bajty), który będzie reprezentował klucz prywatny. Aby nikt nie był w stanie w łatwy sposób zgadnąć takiego ciągu, można do tego wykorzystać np. funkcję haszującą, w którą wrzucimy losowe słowa. Taka fraza nosi nazwę “seed phrase”. Jeśli zapomnielibyśmy klucza prywatnego, to z jej pomocą zawsze będziemy mogli go odtworzyć. Wystarczy, że zapamiętasz kilkanaście słów, a cały dostęp do portfela będzie w Twojej głowie. Następnie przy pomocy ECDSA (Elliptic Curve Digital Signature Algorithm) z klucza prywatnego tworzony jest klucz publiczny (64 bajty). Najważniejsze jest to, że operacja jest jednostronna, dlatego nie ma możliwości odtworzenia klucza prywatnego, posiadając jedynie ten publiczny.
Wcześniej powiedziałem, że klucz publiczny wykorzystywany jest jako taki punkt, na który można wysyłać środki lub wiadomości. W przypadku Ethereum nie do końca byłaby to prawda. Aby uzyskać ostateczny wynik, który będzie nas reprezentował, należy jeszcze poddać klucz publiczny haszowaniu, a następnie wziąć ostatnie 20 bajtów z otrzymanego wyniku i voilà, właśnie otrzymujesz swój adres na sieci Ethereum.
Cały ten proces może wydawać się nieco skomplikowany, ale na szczęście nie musimy robić tego ręcznie. Istnieje wiele aplikacji, które zrobią to za nas, a przykładową może być Metamask. Jest to jeden z bardziej znanych portfeli blockchainowych, który pozwala na łączenie się do różnych blockchainów opartych o EVM (Ethereum Virtual Machine). Wyjaśnienie, jak działają portfele, mogłoby wymagać osobnego wpisu, dlatego w tej chwili przyjmijmy, że są to aplikacje, które pozwalają w łatwy sposób korzystać z Web 3.0. Co ważne, klucze, których używamy w takich portfelach, przechowywane są u nas lokalnie na urządzeniu. Sam Metamask występuje zarówno jako aplikacja desktopowa, jak i webowa oraz mobilna.
Dzięki takiemu podejściu, dowolna aplikacja Web 3.0 może w łatwy sposób autentykować użytkownika. Wystarczy zintegrować swoją stronę np. z Metamaskiem, a następnie każda osoba będzie mogła korzystać ze wszystkich udostępnionych funkcjonalności, bez potrzeby podawania nam swoich danych.
Może się tutaj nasunąć pytanie, co się stanie w przypadku, gdy Metamask całkowicie usunie swoją aplikację? Na szczęście w zasadzie nic strasznego. To Ty jesteś właścicielem swojego klucza prywatnego, więc możesz zacząć korzystać z innego portfela, dostarczając mu odpowiednie dane. Natomiast z perspektywy aplikacji, która była zintegrowana z Metamaskiem, twórcy musieliby jedynie zaimplementować połączenie z nowym portfelem. Zatem problemy byłyby jedynie chwilowe i nie miałyby większego wpływu na działanie całego systemu. Tak naprawdę większość poważnych aplikacji już obecnie pozwala łączyć się ze sobą za pomocą różnych portfeli, a nawet jeśli ktoś stworzyłby integrację tylko z jednym, który akurat został wyłączony, to użytkownicy zawsze mogą komunikować się ze smart kontraktami bezpośrednio na blockchainie. Mimo że nie wyobrażam sobie swoich rodziców, którzy wysyłają komunikaty przez terminal do węzła Ethereum, to warto jednak wspomnieć o istnieniu takiej możliwości.
Zdecentralizowane pliki
Kiedy rozmawia się o blockchainie, to często można zapomnieć, że ta technologia niekoniecznie nadaje się do każdego rodzaju aktywności. Jego cechy takie jak transparentność i otwartość nie podlegają dyskusji, ale już umieszczanie na nim dużych ilości danych może być błędnym posunięciem. Z technicznego punktu widzenia nic nie stoi na przeszkodzie, żeby zapisywać wszystko na blockchainie, jednak największym problemem jest fakt, że składowanie tam danych jest po prostu bardzo drogie. Nie ma tutaj różnicy, czy mówimy o Ethereum, Polygonie, czy też Solanie. W każdym z tych przypadków zapis dużych ilości danych będzie albo drogi, albo super drogi. Nie oznacza to jednak, że powinniśmy w takim razie opierać się jedynie na tradycyjnym podejściu do przechowywania plików i korzystać wyłącznie z dostawców typu Amazon. Jeżeli chcielibyśmy stworzyć zdecentralizowaną aplikację opartą o blockchain, ale wszystkie pliki z nią związane byłyby przechowywane na scentralizowanych dyskach, to de facto wciąż jesteśmy zależni od konkretnej organizacji. Co więcej, w razie awarii dostawcy, funkcjonalność naszej aplikacji może stać się niedostępna.
Żeby lepiej zrozumieć ten problem, przyjrzyjmy się projektom opartym o NFT, a dla ułatwienia skupię się na tych tworzących różnego rodzaju grafiki. Taki token zazwyczaj ma zapisane w sobie najważniejsze informacje, czyli np. identyfikator, obecnego właściciela oraz adres, pod którym znajdują się dodatkowe dane, takie jak chociażby obrazek. Te zaś przechowywane są poza blockchainem. Po stworzeniu tokena nie jesteśmy w stanie zmienić w nim niczego. Jeśli takie pliki zostały zapisane na scentralizowanym serwerze, który ulegnie awarii, to możemy bezpowrotnie utracić do nich dostęp, a tym samym NFT przestanie reprezentować konkretny obrazek. Ale występuje tutaj jeden dużo większy problem, ponieważ sam plik można przywrócić pod pierwotnym adresem. W każdym momencie osoba mająca dostęp do serwera może podmienić plik, czyli zmienić to, co reprezentuje dany token NFT. Chyba nikt z nas nie chciałby być właścicielem prawa do danego przedmiotu, w momencie, gdy wiadomo, że to aktywo może zostać zamienione na coś zupełnie innego. Na szczęście istnieje na to rozwiązanie.
IPFS, czyli InterPlanetary File System, to protokół pozwalający na przechowywanie plików w zdecentralizowany sposób. W skrócie polega on na tym, że istnieje sieć komputerów, w których zapisywane są dokumenty. Każdy z nas, w dowolnej chwili, może do niej dołączyć jako jeden z węzłów. Istnieją też gotowe rozwiązania np. Pinata, które ułatwiają cały proces. Gdy wrzucimy nasz plik do takiej sieci, może on zostać ”przypięty” przez różne węzły i od tego momentu w razie awarii jednego z nich, nasze dokumenty wciąż będą dostępne. Co jest jednak ważne to fakt, że sam IPFS nie daje żadnej gwarancji przechowywania. Może się okazać, że wyłącznie my udostępniamy swoje pliki. Oczywiście sami możemy stworzyć sieć komputerów i podłączyć się każdym z nim do IPFS-a, ale jeśli wszystkie one ulegną awarii, to może się okazać, że nasz plik nie znajdował się nigdzie indziej i dostęp do niego będzie utracony. Tutaj z pomocą przychodzi Filecoin, czyli blockchain, którego celem jest zapewnienie dostępności danych. W skrócie polega to na tym, że użytkownik opłaca węzły, które zobowiążą się przechowywać jego pliki i w momencie wywiązania się z obietnicy dostaną nagrodę.
Kolejną istotną cechą IPFS jest sposób, w jaki identyfikuje on pliki. W standardowym podejściu każdy serwer, na którym umieszczamy pliki ma swój adres i nawet jeśli dokumenty zostaną podmienione, to ten adres pozostanie bez zmian. W IPFS sytuacja wygląda całkowicie odmiennie. Każdy z plików przepuszczany jest przez funkcję haszującą, dzięki czemu dostajemy jego unikatowy identyfikator. W momencie gdy w dokumencie zmieniłaby się najmniejsza rzecz, otrzymany hasz byłby całkowicie inny. Oznacza to, że nie ma możliwości, aby konkretny plik podmienić na inny. Na dodatek jeśli wszystkie węzły, które przechowywały nasz dokument, padną, a my posiadamy dokładną kopię danego pliku, to możemy go ponownie wgrać do sieci, a on wciąż będzie posiadał ten sam identyfikator i będzie można z niego dalej korzystać.
Jak ze wszystkim, tak również w przypadku IPFS występują pewne niedogodności. Ponieważ korzystamy tutaj z rozproszonej sieci, to największą jej wadą w porównaniu do tradycyjnych rozwiązań, będzie jej prędkość. Kolejnym dużym minusem może być fakt, że wszystkie pliki są publicznie dostępne i raczej nie należałoby w nich przechowywać wrażliwych danych zapisanych czystym tekstem. Dlatego nie twierdzę, że jest to rozwiązanie, które powinno być stosowane w każdym momencie, ale są sytuacje, w których takie podejście będzie rozsądniejszym wyborem.
Na IPFS, oprócz przechowywania pojedynczych plików, można by oprzeć cały frontend aplikacji webowych. Pozwoli to ponownie uniezależnić się od widzimisię konkretnego dostawcy. Z takiego podejścia korzysta np. protokół DeFi o nazwie Compound. Jeśli chciałbyś postawić aplikację w oparciu o IPFS, to warto sprawdzić serwis fleek. Pomoże Ci on we wgraniu plików. Z jego pomocą możesz w łatwy sposób zintegrować się z Filecoinem.
Myślę, że w tym miejscu zakończę obecny post, bo i tak wyszedł dłuższy, niż się spodziewałem. Jednak nie jest to koniec tematu i już wkrótce zapraszam Cię do zapoznania się z kolejnym wpisem, w którym sprawdzimy, czy na Web 3.0 da się cokolwiek zarobić :).
Super artykul, czekamy na wiecej!
Dzięki, już za niedługo kolejne wpisy 🙂