Nowe szaty króla – kilka słów o Chainlink Functions

Przemek/ 12 października, 2023

Media społecznościowe, giełdy finansowe, serwisy pogodowe i sklepy internetowe to tylko kilka przykładów rozwiązań, które ludzie stworzyli w ciągu ostatnich dwóch dekad. W międzyczasie pojawiła się technologia blockchain, na której zaczęto budować zdecentralizowane koncepcje. Jednak wszystko trzeba było tworzyć od podstaw. Co by było, gdyby te dwa światy mogły współpracować ze sobą w sposób, który był do tej pory nieosiągalny? Okazuje się, że jest to możliwe, a rozwiązaniem, które może to ułatwić, jest tzw. Chainlink Functions.

Jak sobie życzysz mój Panie

Gdy mowa o dostarczaniu danych na blockchain, często pojawia się temat tzw. wyroczni. Jeśli nie jesteś jeszcze zaznajomiony z tym pojęciem, szczegółowe wyjaśnienie znajdziesz w tym wpisie. Drugą istotną kwestią, która często się pojawia, jest rola Chainlinka w tym kontekście. I w tym przypadku sytuacja nie jest inna. Ponieważ, na łamach tego bloga, już mieliśmy okazję omawiać tematy związane z Chainlinkiem, tym razem nie będę zagłębiać się w szczegóły tego projektu, a jedynie skupię na kolejnym rozwiązaniu, które wprowadzają jego twórcy. Poprzednie wpisy znajdziesz tutaj:

  1. Chainlink – wyrocznia, której możesz zaufać
  2. Chainlink CCIP – podróżując przez równoległe światy

Co to właściwie jest Chainlink Functions? W kilku słowach można opisać to jako mechanizm, który umożliwia wywołanie dowolnego zewnętrznego API z poziomu smart kontraktu. Dla osób mniej zaznajomionych z programowaniem, API (czyli Application Programming Interface) to rodzaj specyfikacji, która określa, w jaki sposób różne aplikacje mogą komunikować się ze sobą. Można to porównać do pilota do telewizora – jeśli naciśniesz przycisk z numerem 1, to włączysz pierwszy kanał, a jeśli korzystasz z przycisków głośności, zmienisz dzwięk. API działa na podobnej zasadzie, określając, jak aplikacje mogą współpracować.

Komunikacja za pomocą API jest standardową praktyką w świecie IT. Jednak w świecie blockchaina, który ma swoje własne zasady, ta kwestia nie była tak oczywista. Jednakże Chainlink wprowadził rozwiązanie, które umożliwia taką komunikację. To rozwiązanie jest stosunkowo nowe i zostało udostępnione około kwietnia/maja tego roku. Obecnie nadal jest w fazie beta, ale każdy może się zarejestrować i przetestować jego funkcjonalność. To niewątpliwie ogromna rewolucja w dziedzinie blockchaina.

Zaraz zaraz, przecież to nic nowego

Rysunek 2. Sekundeczka
(źródło: https://makeameme.org/meme/wait-a-sec-7765bb05f9)

Osobom, które są bardziej zaznajomione z rozwiązaniami związanymi z blockchainem, a w szczególności tymi oferowanymi przez Chainlinka, może zapalić się tutaj czerwona lampka. Czy nie istniała już w przeszłości możliwość wywoływania API z wnętrza kontraktów? Cóż muszę przyznać, że tu mnie macie. Faktycznie, Chainlink od dłuższego czasu dysponuje produktem o nazwie Any API, który, jak sama nazwa wskazuje, pozwala na odwoływanie się do dowolnych zewnętrznych interfejsów. W takim razie, gdzie tkwi ta rewolucja? Żeby to zrozumieć, trzeba najpierw przyjrzeć się mechanizmom stojącym za Any API:

Rysunek 3. Any API z jednym węzłem
(źródło: https://www.youtube.com/watch?v=kFmOef5jL7w)

Idea jest dość prosta. Kontrakt musi odwołać się do węzła w sieci Chainlink, który następnie pozyska dane z zewnętrznego źródła i zwróci je. Na pierwszy rzut oka wydaje się to łatwe do zrealizowania. Niestety, istnieje tu jedna bardzo istotna wada, a mianowicie centralizacja takiego podejścia.

Chociaż sama sieć Chainlinka jest zdecentralizowana, to w przypadku powyższego przykładu nie możemy skorzystać z tej własności. Nasz kontrakt jest zależny od jednego węzła i jednego źródła danych, co otwiera drzwi do potencjalnego dostarczania fałszywych danych – nikt nie jest w stanie tego zweryfikować. Nawet jeśli węzeł będzie dążył do uczciwości, istnieje ryzyko, że coś pójdzie nie tak i przestanie dostarczać informacje. W takiej sytuacji byłoby trudno zbudować rzetelne rozwiązanie oparte na blockchainie. Możemy oczywiście spróbować nieco zmienić podejście i uzyskać coś w stylu:

Rysunek 4. Any API z wieloma węzłami
(źródło: https://www.youtube.com/watch?v=kFmOef5jL7w)

W tym przypadku możemy stwierdzić, że rozwiązaliśmy problem centralizacji. Niemniej jednak, to podejście wymaga ogromnego nakładu pracy. Po pierwsze, musimy sami zdefiniować, do których węzłów Chainlinka będziemy kierować zapytania i precyzyjnie określić, z których źródeł danych mają korzystać. Następnie sami musimy agregować otrzymane informacje, a ponieważ wszystko odbywa się w obrębie blockchaina (tzw. on-chain), to koszty związane z opłatami transakcyjnymi za wykonanie tych operacji mogą być bardzo wysokie. Co więcej, nadal korzystamy tylko z ograniczonej liczby węzłów, co oznacza, że chociaż osiągnęliśmy większą decentralizację niż w pierwszym przypadku, to wciąż nie rozwiązuje to w pełni problemu, a jedynie minimalnie go ogranicza. Dodatkowo, dodając kolejne węzły do odpytywania, zwiększamy zarówno ilość pracy potrzebnej do agregacji danych, jak i koszty z tym związane.

Dlatego to rozwiązanie, chociaż lepsze niż pierwsze podejście, wciąż pozostaje dalekie od doskonałości. To właśnie tu wkracza na scenę Chainlink Functions.

Rysunek 5. Chainlink Functions
(źródło: https://www.youtube.com/watch?v=kFmOef5jL7w)

Na pierwszy rzut oka, powyższy schemat może wydawać się podobny do poprzedniego, ale istnieje w nim ogromna różnica. Podczas korzystania z Chainlink Functions, nie komunikujemy się z pojedynczymi węzłami, ale z całą siecią wyroczni (DON, Decentralized Oracle Networks). Oznacza to, że nie musimy już sami określać adresów odbiorców. Co więcej, jeśli jakiś węzeł przestanie działać, nie wpłynie to na nasze zapytanie, ponieważ bazujemy na całej sieci.

Jednak to nie jedyna różnica w porównaniu do Any API. Ogromnym benefitem jest również kwestia agregacji danych. Dzięki Functions możemy wykorzystać sieć Chainlinka nie tylko do pobierania danych z różnych źródeł, ale także do ich łączenia i dostarczania nam ostatecznego wyniku. Co więcej, możemy mieć pewność, że dostarczone dane są rzetelne, ponieważ do weryfikacji używane są sprawdzone mechanizmy Chainlinka. Oczywiście, jeśli źródła danych dostarczą nieprawdziwe informacje, to Chainlink nie będzie w stanie tego wykryć, ale nie jest to problem związany z samym rozwiązaniem. Dzięki takiej metodzie cała operacja staje się znacznie tańsza i prostsza, ponieważ jest wykonywana poza blockchainem (off-chain). Za każde zapytanie musimy jednak zapłacić w tokenie LINK, co jest standardową praktyką w przypadku Chainlinka i działa to tak samo jak w innych rozwiązaniach tego dostawcy.

Może pojawić się pytanie, jak Chainlink po otrzymaniu odpowiedzi ze źródeł danych wie, co i w jaki sposób ma być agregowane. Odpowiedź jest prosta: podczas wysyłania zapytania definiujemy również, co ma być zrobione z otrzymanymi informacjami. Z technicznego punktu widzenia nasze zapytanie zawiera kod, który ma zostać uruchomiony w sieci Chainlinka. Na razie ten kod może być napisany jedynie w języku JavaScript, ale planowane jest wsparcie dla innych języków w przyszłości.

I tutaj przechodzimy moim zdaniem do crème de la crème. Kod, który wysyłamy, może być dowolny, co oznacza, że oprócz prostych zapytań o dane i ich agregacji, możemy wykorzystać sieć Chainlinka do wykonywania dowolnych operacji. Oznacza to, że po raz pierwszy w historii jesteśmy w stanie w dość prosty sposób połączyć tradycyjne aplikacje z aplikacjami blockchainowymi, wykorzystując bezpieczną i zdecentralizowaną wyrocznię. To naprawdę przełomowe. Oczywiście Functions jest w fazie beta i ma swoje ograniczenia, ale sukcesy Chainlinka w przeszłości sugerują, że i to rozwiązanie może osiągnąć ogromny sukces.

Cała gama nowych możliwości

Zastanówmy się przez chwilę, co tak realnie daje nam Chainlink Functions. Skoro od tej pory można w łatwy sposób zintegrować się ze standardowymi rozwiązaniami, oznacza to, że możemy nasze aplikacje łączyć z całym Web 2.0. Czy jest to Twitter, obecnie zwany X’em, Facebook, Youtube, LinkedIn, Wikipedia czy inne bardziej lub mniej znane rozwiązania, możemy je od teraz wykorzystać w naszych produktach.

Kolejną rzeczą, którą jesteśmy w stanie zrobić, to ulepszyć obecne rozwiązania i sprawić, że będą bardziej rzetelne i bezpieczne. Przykładem mogą być chociażby aplikacje bukmacherskie. W tej chwili, nawet jeśli tego typu rozwiązania są oparte o blockchain, to z dużym prawdopodobieństwem sposoby otrzymywania wyników są mocno scentralizowane, co sprawia, że nie rozwiązuje to wciąż problemu braku zaufania. Z pomocą Chainlink Functions można by pozbyć się tej wady.

Innym zastosowaniem może być połączenie całego rynku IoT z blockchainem. Nie ma tutaj znaczenia, czy będzie to dostęp do Tesli, nawigowanie inteligentnym domem czy sterowanie inteligentną toaletą. Chociaż to ostatnie wydaje się zbędne, to pokazuje to, że jedynym ograniczeniem będzie wyobraźnia ludzka.

Również świat aktywów finansowych może bardzo skorzystać na rozwiązaniach opartych o Chainlink Functions. Możliwość rzetelnego pozyskiwania danych może w ciekawy sposób spiąć świat tradycyjnych finansów z tymi zdecentralizowanymi, np. poprzez tworzenie syntetycznych aktywów, odzwierciedlających realne wyceny. Ale również możliwe będzie stworzenie prawdziwego ETF (Exchange Traded Fund), opartego o blockchainowe mechanizmy.

Na dodatek, to wszystko będzie można ładnie spiąć z mocno rozwijającą się gałęzią sztucznej inteligencji. Jak widzisz, możliwości jest wiele, a świat czeka na kolejne ciekawe rozwiązania. Jeżeli brakuje Ci pomysłów, to inspiracje możesz znaleźć również pod tym adresem.

Tym razem nie zamieszczam w wpisie przykładu użycia, ale wszystkich zainteresowanych odsyłam w to miejsce. gdzie w bardzo dobry sposób pokazane jest, co trzeba zrobić i w jaki sposób, aby wszystko sprawnie zadziałało.

Podsumowując, Chainlink Functions to kolejne rewolucyjne rozwiązanie, które może przenieść blockchainowe aplikacje na dużo wyższy poziom. I choć wciąż jest w fazie beta testów, przez co posiada ograniczenia, to już dziś warto się z nim zapoznać :).

Share this Post
Subscribe
Powiadom o
guest
0 komentarzy
Inline Feedbacks
View all comments