IPFS – zdecentralizowany sposób na przechowywanie plików
Blockchain, pomimo wielu zalet, ma jedną wielką wadę, a mianowicie – przechowywanie na nim dużych danych nie jest najlepszym pomysłem. Chociaż technicznie nic nie stoi na przeszkodzie, aby coś takiego zrobić, to ich zapis wiąże się z bardzo dużymi kosztami. Dlatego dzisiaj przedstawię sposób na przechowywanie plików, który podobnie jak blockchain, jest zdecentralizowany oraz odporny na cenzurę. Porozmawiajmy zatem o IPFS’ie.
Nie można choć raz zrobić czegoś po staremu?
Na początku warto zastanowić się, dlaczego po raz kolejny musisz uczyć się nowego rozwiązania, skoro istnieje masa innych, które pozwalają na przechowywanie plików. Jeżeli nie powinniśmy robić tego bezpośrednio na blockchainie, to czy nie mógłbyś użyć np. klasycznych rozwiązań chmurowych? Teoretycznie tak. Co więcej, istnieje wiele rozwiązań, które stosuje właśnie takie podejście. Ale niesie to za sobą ogromną konsekwencje, o których powinieneś pamiętać.
Wyobraź sobie, że jesteś właścicielem drogocennego dzieła sztuki. Nie posiadasz odpowiednich zabezpieczeń w domu, dlatego umieszczasz je w sejfie firmy zajmującej się przechowywaniem drogocennych przedmiotów. W zamian otrzymujesz certyfikat, uprawniający Cię do odbioru swojego aktywa. Na pierwszy rzut oka wszystko wydaje się być okej. Firma ma długoletnią historię, najlepsze zabezpieczenia na świecie, inne znane przedmioty też się tam znajdują. Ale pewnego dnia okazuje się, że w budynek uderza bomba i wszystko to, co w nim było, ulega zniszczeniu. Właśnie zostałeś z bezwartościowym certyfikatem, bo przedmiotu już nie ma.
Oczywiście to samo stałoby się, gdybyś trzymał go w domu, w który uderzyłaby taka bomba. Dlatego rozważmy kolejną sytuację. Budynek stoi cały, przychodzisz po odbiór swojego dzieła, pokazujesz certyfikat i dostajesz… zupełnie coś innego. Próbujesz się wykłócać, ale nic to nie daje, ponieważ właściciele magazynu twierdzą, że to jest obraz, który odpowiada Twojemu certyfikatowi.
Przejdźmy dalej. Kilka dni temu pokłóciłeś się strasznie z właścicielami magazynu, dlatego postanowiłeś zabrać od nich swój drogocenny przedmiot. Zjawiasz się na miejscu, a tam okazuje się, że pracownicy mają zakaz wydawania Tobie czegokolwiek, ponieważ jesteś podejrzany o malwersacje finansowe. Jak to możliwe? Okazuje się, że właściciele są dobrymi kumplami ministra finansów i nie lubią, kiedy ktoś wchodzi z nimi w spory.
Możesz traktować te sytuacje jako całkowicie wyimaginowane, ale myślę, że w miarę dobrze obrazują one niektóre problemy scentralizowanych placówek. Nie inaczej jest w przypadku serwisów oferujących przechowywanie danych. Przeanalizujmy to na przykładzie NFT, który reprezentowałby prawo do cyfrowej grafiki.
Wgranie obrazka na blockchain jest drogie, dlatego plik przechowywany jest na dowolnym scentralizowanym serwerze. Pozostałe dane dotyczące tokena zapisane są w smart kontrakcie. Jest tam również informacja o adresie, pod którym znajduje się grafika. Żeby takie NFT miało sens, to nie może istnieć możliwość aktualizowania wewnętrznych informacji poza obecnym właścicielem tokena. Dzięki temu użytkownik, który nabędzie token, ma pewność, że jego NFT zawsze będzie reprezentowało to samo. Ale czy na pewno?
Wszystko jest dobrze do momentu, kiedy coś nie stanie się z serwerem przechowującym plik. Jeżeli padnie, to wtedy token staje bezwartościowy, ponieważ przestanie istnieć coś, co reprezentował. Identycznie jak w przypadku spalenia magazynu. Chociaż sytuacja z tokenem jest nieco lepsza, ponieważ możemy posiadać gdzieś dokładną kopię pliku i wgrać go ponownie na inny serwer. Problem w tym, że nowe źródło będzie miało inny adres. Ale technicznie istnieje możliwość, aby stary adres wskazywał na nowe miejsce, więc da się to potencjalnie rozwiązać, chociaż może to być bardzo problematyczne.
Dużo gorszą sytuacją byłaby ta, w której właściciele serwisu blokują dostęp do zasobu. W takim wypadku tracimy jakąkolwiek możliwość naprawienia NFT, ponieważ po pierwsze nie jesteśmy w stanie zmienić adresu w tokenie, a po drugie nie możemy go wykorzystać na innym serwerze.
Nawet jeśli dostawca usług zachowuje się fair, to właściciel tokena wciąż nie może mieć pewności, że to na co wskazuje NFT nigdy się nie zmieni. Sam twórca tokena może podmienić pliki i pomimo tego samego adresu, pod nim dostaniemy coś innego.
Możesz stwierdzić, że są to czysto hipotetyczne sytuacje, ponieważ takie serwisy jak Amazon, Google, itp. nigdy by czegoś takiego nie zrobiły, a twórcom NFT zależy, aby ludzie korzystali z ich rozwiązań, więc nie będą kombinować przy plikach. Jeśli tak, to warto przypomnieć sobie sytuację, w której giganci technologiczni z dnia na dzień zablokowali dostęp do swoich usług serwisowi Parler. Oczywiście nie są to częste sytuacje, ale po co ryzykować, skoro istnieje proste inne rozwiązanie.
Decentralizacja na ratunek
IPFS, czyli InterPlanetary File System, to protokół, który umożliwia przechowywania plików w zdecentralizowany sposób. Podobnie jak blockchain, IPFS składa się z węzłów, na które możemy wgrywać i odczytywać dane. Co więcej, również i Ty jesteś w stanie przyłączyć się do sieci jako jeden z nich. W uproszczeniu rozwiązanie to można porównać do torrentów, w których różni użytkownicy posiadają różne pliki i każdy ma do nich dostęp. Jednak mechanizm, który stoi za IPFS’em, jest zupełnie inny.
W przypadku scentralizowanych serwerów, to adres wskazuje na konkretny plik. Jeżeli dwa dokumenty są identyczne, jednak znajdują się w innej lokalizacji, to musimy znać dokładne miejsce przechowywania danych, aby z nich skorzystać. IPFS nie bazuje na adresie, a na zawartości pliku. Oznacza to, że aby go pobrać wystarczy znać jedynie jego identyfikator. Wartość tego atrybutu jest zawsze taka sama dla dwóch identycznych plików, na którymkolwiek węźle by się znajdowały. Dzieje się tak, ponieważ identyfikator tworzony jest z wykorzystaniem funkcji haszującej, do której przekazywana jest zawartość dokumentu Pewnie już wiesz, że funkcja haszująca zwraca zawsze ten sam wynik, dla tych samych danych wejściowych. Jeśli pierwszy raz o tym słyszysz, to zajrzyj do jednego z poprzednich wpisów,, gdzie temat ten był dogłębnie opisany.
Z takiego podejścia wynika jeszcze jedna ogromna zaleta. Ponieważ rezultat funkcji haszującej ulega całkowitej zmianie, nawet w przypadku najdrobniejszej modyfikacji danych wejściowych, nie ma możliwości podmieniania pliku dla konkretnego identyfikatora.
Czy takie podejście rozwiązuje wszystkie problemy “scentralizowanego” NFT? Przeanalizujmy je po kolei raz jeszcze, tyle że zamieńmy standardowy serwer danych na IPFS.
Pierwszy przypadek to ten, kiedy serwer zostanie zniszczony. W przypadku IPFS taka sytuacja nie jest aż tak problematyczna, chociaż szczerze trzeba przyznać, że idealnie nie jest. Jeżeli plik został rozpropagowany pomiędzy niezależne węzły, to w zasadzie problemu nie ma. Jeśli jeden węzeł padnie, nic to nie zmienia. Wciąż można pobrać plik z sieci. Co więcej, nawet jeśli 99,99% sieci przestanie działać i zostanie tylko jeden węzeł przechowujący dokumenty, to wciąż każdy będzie miał dostęp do danych.
Gorzej w przypadku, gdy tylko nasz węzeł przechowywał plik. Sam IPFS nie gwarantuje, że dokumenty będą rozpropagowane pomiędzy różnych uczestników sieci. Jeżeli chcielibyśmy mieć pewność, że plik znajdzie się na wielu węzłach, to dodatkowo warto byłoby skorzystać z projektu Filecoin. Jest to blockchain, który gwarantuje dostępność dokumentów w sieci opartej o IPFS.
Jednak nawet bez tego rozwiązania nasza sytuacja nie byłaby taka zła. Wystarczy, że posiadalibyśmy kopię pliku. Wtedy moglibyśmy ponownie utworzyć węzeł lub skorzystać z już istniejącego i wgrać na nowo plik. Otrzymalibyśmy ostatecznie ten sam identyfikator pliku, czyli referencja w tokenie NFT byłaby wciąż aktualna. Z tego powodu, posiadacz tokena nie musi się bać również o to, że plik, na który NFT wskazuje, ulegnie modyfikacji.
Ponieważ IPFS opiera się o zdecentralizowaną sieć, nie ma też możliwości, aby ktokolwiek zablokował nam dostęp do pliku. Jeżeli dokument znajduje się w węzłach, to zawsze możemy się do niego dostać.
Oczywiście nie ma rozwiązań idealnych i IPFS też do nich nie należy. Jedną z rzeczy, która może zostać uznana za wadę, jest fakt, że wszystko to, co znajduje się w takiej sieci jest publiczne i każdy może do tego uzyskać dostęp. Nie ma możliwości, aby ograniczyć grono odbiorców tylko do specyficznej grupy użytkowników. Z tego względu IPFS niekoniecznie jest najlepszym rozwiązaniem do przechowywania wrażliwych danych. Chociaż i z tym można sobie poradzić, poprzez zakodowanie zawartości pliku, przed jego wgraniem do sieci, ale sprawia to, że rozwiązanie wymaga nieco więcej przemyślanej implementacji.
Jeszcze jedną zaletą, o której warto wspomnieć, jest możliwość pobierania plików z wielu źródeł w tym samym momencie. W przypadku scentralizowanych rozwiązań, dokument wczytywany jest tylko z jednego serwera równocześnie, natomiast IPFS umożliwia pobieranie z wielu węzłów jednocześnie. Jednak trzeba przyznać, że samo znalezienie pliku w sieci może zająć zdecydowanie więcej czasu, ponieważ musi zostać odnalezione fizyczne miejsce przechowywania dokumentu.
Zostać węzłem czy użyć gotowych rozwiązań?
Jeżeli chciałbyś zacząć umieszczać pliki w sieci opartej o IPFS, to masz dwa wyjścia. Pierwsze z nich, to zainstalowanie oprogramowania i zostanie jednym z węzłów. Możesz to zrobić np. z użyciem aplikacji desktopowej. Jeżeli korzystasz z przeglądarki Brave Browser, którą osobiście polecam, to posiada ona wbudowany węzeł, z którego również możesz skorzystać.
Drugim sposobem jest użycie usług dostarczanych przez różnego rodzaju dostawców, takich jak Pinata Cloud oraz Web3 Storage. Istnieje też wiele innych usługodawców tego typu, ale polecam założyć Ci konto na Pinacie, ponieważ wykorzystamy ją, kiedy będzie tworzyć swoje NFT. Pamiętaj jednak, że minusem tego rozwiązania jest fakt, że w momencie upadku danego serwisu, Twój plik może zniknąć z sieci IPFS. Jednak wiesz już, co wtedy należy zrobić.
Jeżeli chciałbyś jedynie odczytywać pliki z IPFS’a, to masz na to również dwa sposoby. Pierwszy z nich to skorzystanie z IPFS Gateway i użycie protokołu http lub https. W tym wypadku możesz to zrobić z użyciem dowolnej przeglądarki. Przykładowy link wygląda następująco:
https://ipfs.io/ipfs/QmRRPWG96cmgTn2qSzjwr2qvfNEuhunv6FNeMFGa9bx6mQ
Drugą opcją jest wykorzystanie IPFS url, ale będzie to wymagało od Ciebie posiadania dostępu do lokalnego węzła. Jeżeli używasz Brave’a to nie musisz się o to martwić. Wtedy wystarczy, że wkleisz w pasek przeglądarki taki adres:
ipfs://QmRRPWG96cmgTn2qSzjwr2qvfNEuhunv6FNeMFGa9bx6mQ
Na co dzień do przeglądania plików możesz korzystać z IPFS Gateway, ponieważ jest to wygodniejszy sposób, jednak w tokenach NFT powinieneś umieszczać IPFS url.
Wiedza jest fajna, ale sama teoria bez praktyki jest bezużyteczna. Dlatego kolejnym razem spróbujemy wykorzystać zebraną do tej pory wiedzę i stworzymy własne NFT, wykorzystująć do tego IPFS. Do zobaczenia wkrótce :).