Jak odczytywać w kontrakcie dane spoza blockchain? Wprowadzenie do wyroczni.
Zewnętrzne dane do smart contractu (spoza blockchain) mogą być dostarczone tylko, jako parametry (argumenty) jego wywołania. Wyrocznie to oprogramowanie działające poza blockchain, które nasłuchuje na "zapytania" przez smart contracty do danych z zewnątrz, a następnie dostarcza te dane do smart contractu.
Jak odczytywać w kontrakcie dane spoza blockchain i jak działają wyrocznie (Oracle)?
Smart contracty blockchain ograniczone są do odczytu danych wyłącznie z blockchain, czyli tych zapisanych w bloku. Jak dostarczyć do kontraktu dane spoza blockchain?
Wyrocznie (Oracle), to powszechnie znany termin określający mechanizm odczytu przez kontrakt danych spoza blockchain. Jak to działa? Ten mechanizm, a raczej wzorzec projektowy, NIE MA możliwości przekroczenia ograniczeń blockchaina. Oznacza to, że wyrocznie nie potrafią odczytywać bezpośrednio plików, baz danych, czy zewnętrznych serwisów (API). Wzorzec wyroczni umożliwia jednak “dostarczenie” danych z zewnątrz do blockchaina. W jaki sposób?
Zewnętrzne dane do smart contractu (spoza blockchain) mogą być dostarczone tylko, jako parametry (argumenty) jego wywołania. Wyrocznie to oprogramowanie działające poza blockchain, które nasłuchuje na “zapytania” przez smart contracty do danych z zewnątrz, a następnie dostarcza te dane do smart contractu, poprzez wywołanie odpowiedniej funkcji kontraktu, która zapisze te dane do blockchaina. Smart contract ma na przykład możliwość zaprogramowanego zapytania off-chain (wyroczni) o dane z pewnego API (np. ceny BTC/PLN). Oprogramowanie wyroczni realizuje zapytanie poza blockchain, a następnie zwraca rezultat do kontraktu, wywołując z rezultatem odpowiednią jego funkcję. W ten sposób kontrakt “otrzyma” dane z zewnątrz, realizacja będzie automatyczna, jednak sam mechanizm nie różni się od manualnego wywołania funkcji kontraktu, która zapisuje dane do blockchaina, przez co kontrakt może je na własne potrzeby odczytać.
Wokół tematu wyroczni wyrosło wiele mitów, jednak sam techniczny aspekt dostarczania danych do blockchain jest prosty i nie przekracza bazowych barier technologicznych (np. Ethereum). Warto to wiedzieć projektując rozwiązania web3, ponieważ ma to swoje ograniczenia. Skoro wiadomo, jak dostarczyć dane do blockchain, to warto zapytać, w jaki sposób dostarczyć dane “poprawne”, prawdziwe, i w sposób zdecentralizowany, zgodne z założeniami realizacji rozwiązań web3? To szeroki, trudny, ale interesujący temat. Omówię go w kolejnych wpisach.
Jak uzyskać decentralizację wykorzystując wyrocznie (Oracles) w blockchain?
Jak uzyskać decentralizację wykorzystując wyrocznie (Oracles) w blockchain i dlaczego to trudniejsze, niż większość branży myśli?
Wyrocznie (Oracles) umożliwiają odczyt danych spoza blockchaina w kontraktach (smart contractach). To ważna funkcjonalność praktycznie, ponieważ budowanie aplikacji web3, wykorzystującej kontrakty BEZ danych spoza blockchaina (np. cen par walutowych), poważnie ogranicza możliwości realizacji złożonej logiki biznesowej w kontraktach.
Branża ma niestety mylne wyobrażenie co do działania wyroczni. Zakłada się, że mechanizm ten jest “zdecentralizowany”, natomiast praktycznie bardzo często jest wręcz przeciwnie.
W podstawowym modelu wykorzystania wyroczni, kontrakt ma możliwość zapytania o dane z zewnątrz, a wyrocznia realizuje to zapytanie (np. odczyt z bazy danych) i zwraca wynik do kontraktu. To jednak całkowicie scentralizowany model. Dlaczego? Ponieważ wynik dostarczony do kontraktu pochodzi wyłącznie od jednej wyroczni. Wykorzystując technologie do tworzenia wyroczni, możemy dosłownie uruchomić własną wyrocznię, która na potrzeby naszego rozwiązania blockchain będzie odpowiedzialna za dostarczanie danych spoza blockchain. Ten model jest tani i jest podstawowym sposobem realizacji zapytania do wyroczni z wykorzystaniem Chainlink – największego projektu blockchain dostarczającego technologię wyroczni dla kontraktów.
W jaki sposób stworzyć więc zdecentralizowaną wyrocznię? Model jest następujący: kontrakt powinien zapytać kilka wyroczni o realizacje tego samego zapytania, uzyskać wyniki od każdej z nich, a następnie samodzielnie określić poprawną odpowiedź na podstawie wielu wyników (odpowiedzi wielu wyroczni). To trudne i ma bardzo dużo wyzwań. Przede wszystkim sposób określenia docelowej wartości na podstawie wielu odpowiedzi nie jest oczywisty – pytając np. o cenę USD/BTC trzech wyroczni, możemy w kontrakcie policzyć średnią z uzyskanych wyników. Jednak nie zawsze jest to tak proste.
Wykorzystanie kilku wyroczni to odpowiednio większy koszt. Każde zapytanie kosztuje, więc decydując się na formę “decentralizacji” na tym poziomie, musimy liczyć z większym kosztem obsługi kontraktów. Twórcy kontraktów, często więc tego nie robią, polegając na jednej wyroczni. Tworząc przemyślane rozwiązanie web3, jest to niestety nie do przyjęcia.
Czy wyrocznie muszą zwracać poprawne dane? Nawet jeśli wykorzystam ich kilka i uzyskam decentralizację poprzez poleganie na wielu wyroczniach, to skąd mieć pewność, że zwracane przez nie dane są poprawne? Odpowiedź nie jest prosta. Opiszę ten temat w kolejnym wpisie.
Optymalna strategia bezpiecznego wykorzystania wyroczni w web3
Czy dane dostarczane do smart contractów przez wyrocznie muszą być poprawne? Nie 😉 Jakie są zagrożenia i jaką przyjąć strategię projektując rozwiązanie web3?
Wyrocznie dostarczają dane spoza blockchain do kontraktów (smart contract). To ważna funkcjonalność, ponieważ bez niej kontrakty są ograniczone tylko do danych z blockchain. Wyrocznie umożliwiają więc implementację złożonej logiki biznesowej w rozwiązaniach web3.
W poprzednich artykułach omówiłem podstawowe działanie wyroczni. Zdecentralizowany model wyroczni polega na zapytaniu o dane z zewnątrz kilku niezależnych wyroczni, a następnie na podstawie ich odpowiedzi (kilku) określenie jednej właściwej. Pytając np. o cenę USD/BTC trzech wyroczni, ostateczna wartość to może być średnia z uzyskanych 3 odpowiedzi.
Czy jednak wyrocznie muszą zwrócić poprawny wynik? Jeżeli od tego zależy poprawne działanie kontraktu, to jest to jeden z najważniejszych czynników determinujących sens użycia wyroczni. Niestety z technicznego punktu widzenia, wyrocznie nie muszą zwracać poprawnych odpowiedzi. Poprawność danych zwracanych przez wyrocznie bazuje na kryptoekonomii – najbardziej popularnym modelu zapewnienia “poprawności” wykorzystywanym w świecie blockchain.
Oto podstawa kryptoekonomii blockchain: wyrocznie zwracają poprawne dane, ponieważ im się to opłaca, a niepoprawna odpowiedź może być bardzo kosztowna. Model biznesowy wyroczni polega na realizowaniu zapytań off-chain (poza blockchainem) i zwracania ich kontraktowi w zamian za opłatę, którą ponosi kontrakt, pytając wyrocznie o dane z zewnątrz. Realizacja “złej” usługi przez wyrocznię spowoduje utratę reputacji, a w skrajnych przypadkach może wręcz skończyć się utratą depozytu zabezpieczającego (np. takiego, który wyrocznia musi zdeponować na początku, aby w ogóle zacząć świadczyć usługi w sieci (analogicznie do stakingu).
Warto jednak wiedzieć, że wyrocznia ma możliwość zwrócić złą odpowiedź. W zależności od poziomu zabezpieczeń danej technologii dla wyroczni (np. Chainlink) – taka wyrocznia może ponieść większą lub mniejszą karę, ale technicznie bardzo trudno jest powstrzymać wyrocznię przed “kłamstwem”. Model jest tym bezpieczniejszy, czym poważniejszą ekonomicznie karę (stratę) poniesie wyrocznia, gdy skłamie. Dlatego silny token, o który oparty jest ekosystem wyroczni, powinien być “wartościowy”.
Korzystanie z wielu wyroczni i poleganie na tych z dobrą reputacją – to optymalna strategia korzystania z wyroczni. To jednak droga strategia, czy są jakieś alternatywy? Niekoniecznie, ale dla kontraktów dostępnych jest wiele darmowych źródeł danych, które wykorzystują powyższą strategię. Mowa o tzw. data feeds. Opiszę je w kolejnym artykule.