Wyrocznie
Strona ostatnio zaktualizowana: 26 lutego 2026
Wyrocznie są aplikacjami, które tworzą kanały danych, które sprawiają, że źródła danych poza łańcuchem są dostępne w blockchainie dla inteligentnych kontraktów. Jest to niezbędne, ponieważ inteligentne kontrakty oparte na Ethereum domyślnie nie mogą uzyskiwać dostępu do informacji przechowywanych poza siecią blockchainu.
Nadanie inteligentnym kontraktom możliwości wykonywania ich przy użyciu danych spoza łańcucha zwiększa użyteczność i wartość zdecentralizowanych aplikacji. Dla przykładu, rynki prognostyczne w łańcuchu polegają na wyroczniach w celu dostarczenia informacji o wynikach, które wykorzystują do walidacji przewidywań użytkowników. Załóżmy, że Alice obstawi 20 ETH na to, kto zostanie następnym prezydentem USA. W tym przypadku zdecentralizowana aplikacja rynku przewidywań potrzebuje wyroczni, aby potwierdzić wyniki elekcji i określić, czy Alice może otrzymać wypłatę.
Wymagania wstępne
Ta strona zakłada, że czytelnik jest zaznajomiony z podstawami Ethereum, w tym z węzłami, mechanizmami konsensusu i EVM. Powinieneś również dobrze rozumieć inteligentne kontrakty i anatomię inteligentnych kontraktów, a w szczególności .
Czym jest blockchainowa wyrocznia?
Wyrocznie to aplikacje, które pozyskują, weryfikują i przesyłają informacje zewnętrzne (tj. informacje przechowywane poza łańcuchem) do inteligentnych kontraktów działających na blockchainie. Poza „wyciąganiem” danych spoza łańcucha i przesyłaniem ich do Ethereum wyrocznie mogą również „wypychać” informacje z blockchainu do zewnętrznych systemów, aby np. odblokować inteligentny zamek po przesłaniu przez użytkownika opłaty za pośrednictwem transakcji Ethereum.
Bez wyroczni inteligentne kontrakty byłyby ograniczone całkowicie do danych znajdujących się w łańcuchu.
Wyrocznie różnią się w zależności od źródła danych (jedno lub wiele źródeł), modeli zaufania (scentralizowane lub zdecentralizowane) oraz architektury systemu (natychmiastowy odczyt, publikacja-subskrypcja czy żądanie-odpowiedź). Możemy również wyróżnić wyrocznie na podstawie tego, czy pozyskują zewnętrzne dane do użytku przez kontrakty w łańcuchu (wyrocznie wprowadzające), wysyłają informacje z blockchainu do aplikacji poza łańcuchem (wyrocznie wyprowadzające) lub wykonują zadania obliczeniowe poza łańcuchem (wyrocznie obliczeniowe).
Dlaczego inteligentne kontrakty potrzebują wyroczni?
Wiele deweloperów widzi inteligentne kontrakty jako kod działający pod określonych adresem w blockchainie. Jednak bardziej ogólne spojrzenie na inteligentne kontrakty jest takie, że są to samowykonujące się programy zdolne do egzekwowania umów między stronami po spełnieniu określonych warunków – stąd termin „inteligentne kontrakty”.
Jednak używanie inteligentnych kontraktów do egzekwowania umów między ludźmi nie jest takie proste, biorą pod uwagę, że Ethereum jest deterministyczne. System deterministyczny (opens in a new tab) to taki, który zawsze daje te same wyniki przy danym stanie początkowym i określonych danych wejściowych, co oznacza, że nie ma losowości ani wariacji w procesie obliczania wyników z podanych danych wejściowych.
Aby osiągnąć deterministyczne wykonanie, blockchainy ograniczają węzły do osiągania konsensusu w prostych kwestiach binarnych (prawda/fałsz), używając wyłącznie danych przechowywanych na samym blockchainie. Oto kilka przykładów takich pytań:
- „Czy właściciel konta (zidentyfikowany przez klucz publiczny) podpisał tę transakcję przy użyciu sparowanego klucza prywatnego?”
- „Czy to konto ma wystarczającą ilość środków, aby pokryć transakcję?”
- „Czy ta transakcja jest ważna w kontekście tego inteligentnego kontraktu?” itp.
Gdyby blockchainy otrzymywały informacje z zewnętrznych źródeł (tj. ze świata rzeczywistego), osiągnięcie determinizmu byłoby niemożliwe, co uniemożliwiłoby węzłom uzgodnienie ważności zmian w stanie blockchaina. Weźmy dla przykładu inteligentny kontrakt, który wykonuje transakcje na podstawie aktualnego kursu wymiany ETH-USD uzyskanego z tradycyjnego cenowego API. Wartość ta prawdopodobnie będzie się często zmieniać (nie wspominając już o tym, że API stać się przestarzałe bądź zhakowane), co oznacza, że węzły wykonujące ten sam kod kontraktu otrzymają różne wyniki.
Dla publicznego blockchainu, jakim jest Ethereum, z tysiącami węzłów na całym świecie przetwarzającymi transakcje, determinizm jest kluczowy. Bez centralnej władzy służącej jako źródło prawdy, węzły potrzebują mechanizmów umożliwiających osiągniecie tego samego stanu po uwzględnieniu tych samych transakcji. W przypadku, w którym węzeł A wykona kod inteligentnego kontraktu i otrzyma „3” jako wynik, podczas gdy węzeł B otrzyma „7” po przetworzeniu tej samej transakcji, spowodowałoby załamanie konsensusu i wyeliminowanie wartości Ethereum jako zdecentralizowanej platformy obliczeniowej.
Ten scenariusz podkreśla również problem z projektowaniem blockchainów do wyciągania informacji z zewnętrznych źródeł. Wyrocznie rozwiązują jednak ten problem, pobierając informacje ze źródeł spoza łańcucha i przechowując je w blockchainie do wykorzystania przez inteligentne kontrakty. Ponieważ informacje przechowywane w łańcuchu są niezmienne i publicznie dostępne, węzły Ethereum mogą bezpiecznie używać danych spoza łańcucha zaimportowanych przez wyrocznie do obliczania zmian stanu bez załamania konsensusu.
Aby to zrobić, wyrocznie jest zwykle skonstruowana z inteligentnego kontraktu działającego na łańcuchu oraz jakiegoś komponentu spoza łańcucha. Kontrakt w łańcuchu otrzymuje żądania danych od innych inteligentnych kontraktów, które przekazuje do komponentu poza łańcuchem (nazywanego węzłem wyroczni). Ten węzeł wyroczni może wysyłać zapytania do źródeł danych — na przykład, przy użyciu interfejsów programowania aplikacji (API) — oraz wysyłać transakcje, aby przechować żądane dane w magazynie inteligentnego kontraktu.
Zasadniczo blockchainowa wyrocznia wypełnia lukę informacyjną między blockchainem, a zewnętrznym środowiskiem, tworząc „hybrydowe inteligentne kontrakty”. To takie kontrakty, które funkcjonują na podstawie kombinacji kodu kontraktu znajdującego się w łańcuchu oraz infrastruktury poza łańcuchem. Zdecentralizowane rynki przewidywań są doskonałym przykładem hybrydowych inteligentnych kontraktów. Innymi przykładami mogą być inteligentne kontrakty ubezpieczeń upraw, które wypłacają, kiedy zestaw wyroczni określi, że wystąpiły określone zjawiska pogodowe.
Jaki jest problem wyroczni?
Wyrocznie rozwiązują ważny problem, ale wprowadzają również pewne komplikacje, np.:
-
W jaki sposób możemy zweryfikować, że wprowadzane informacje zostały pobrane z poprawnego źródła lub nie zostały sfałszowane?
-
W jaki sposób możemy zapewnić, że te dane będą zawsze dostępne i regularnie aktualizowane?
Tak zwany „problem wyroczni” demonstruje problemy związane z używaniem blockchainowych wyroczni do wysyłania danych do inteligentnych danych. Dane od wyroczni muszą być poprawne, aby inteligentny kontrakt mógł zostać poprawnie wykonany. Ponadto, konieczność „ufania” operatorom wyroczni na dostarczenie dokładnych danych mija się z „bezzaufaniowym” aspektem inteligentnych kontraktów.
Różne wyrocznie oferują różne rozwiązania problemu wyroczni, które omówimy później. Wyrocznie są zazwyczaj oceniane pod kątem tego, jak dobrze radzą sobie z następującymi wyzwaniami:
-
Poprawność: Wyrocznia nie powinna powodować, że inteligentne kontrakty będą wyzwalać zmiany stanu na podstawie nieprawidłowych danych pozyskanych poza łańcuchem. Wyrocznia musi gwarantować autentyczność i integralność danych. Autentyczność oznacza, że dane zostały pobrane z właściwego źródła, podczas gdy integralność oznacza, że dane pozostały nienaruszone (tj. nie zostały zmienione) przed wysłaniem ich do łańcucha.
-
Dostępność: Wyrocznia nie powinna opóźniać ani uniemożliwiać inteligentnym kontraktom wykonywania działań i wyzwalania zmian stanu. Oznacza to, że dane z wyroczni muszą być dostępne na żądanie bez przerw.
-
Zgodność zachęt: Wyrocznia powinna zachęcać dostawców danych spoza łańcucha do przesyłania prawidłowych informacji do inteligentnych kontraktów. Zgodność zachęt obejmuje przypisywalność i rozliczalność. Przypisywalność pozwala na powiązanie zewnętrznej informacji z jej dostawcą, podczas gdy rozliczalność wiąże dostawców danych z informacjami, które przekazują, aby mogli być nagradzani bądź karani na podstawie jakości przekazywanych danych.
Jak działa usługa blockchainowych wyroczni?
Użytkownicy
Użytkownicy to podmioty (tj. inteligentne kontrakty), które potrzebują zewnętrznych informacji spoza blockchainu, aby wykonać określone akcje. Podstawowy proces usługi wyroczni zaczyna się, kiedy użytkownik wysyła żądanie danych do kontraktu wyroczni. Żądania danych zazwyczaj odpowiadają na część lub wszystkie następujące pytania:
-
Z jakich źródeł mogą korzystać węzły poza łańcuchem w celu uzyskania żądanych informacji?
-
W jaki sposób reporterzy przetwarzają informacje ze źródeł danych i wyodrębniają przydatne punkty danych?
-
Ile węzłów wyroczni może uczestniczyć w wyszukiwaniu danych?
-
W jaki sposób zarządzać rozbieżnościami w raportach wyroczni?
-
Jaka metoda powinna zostać zaimplementowana do filtrowania zgłoszeń oraz agregowania raportów w pojedynczą wartość?
Kontrakt wyroczni
Kontrakt wyroczni jest komponentem w łańcuchu usługi wyroczni. Nasłuchuje żądań danych od innych kontraktów, przekazuje zapytania o dane do węzłów wyroczni oraz przesyła zwrócone dane do kontraktów klienckich. Kontakt ten może również wykonywać pewne obliczenia na zwróconych punktach danych, aby stworzyć zagregowaną wartość, którą wyśle żądającemu kontraktowi.
Kontrakt wyroczni udostępnia pewne funkcje, które kontrakty klienckie wywołują podczas żądania danych. Po otrzymaniu nowego zapytania inteligentny kontrakt wyemituje zdarzenie dziennika ze szczegółami żądania danych. Powiadamia to węzły spoza łańcucha subskrybujące dziennik (zazwyczaj za pomocą polecenia JSON-RPC eth_subscribe), które następnie pobierają dane zdefiniowane w zdarzeniu dziennika.
Poniżej znajduje się przykładowy kontrakt wyroczni (opens in a new tab) autorstwa Pedro Costy. Jest to prosta usługa wyroczni, która może wysyłać zapytania do API poza łańcuchem na żądanie innych inteligentnych kontraktów oraz przechowywać żądane informacje w blockchainie:
1pragma solidity >=0.4.21 <0.6.0;23contract Oracle {4 Request[] requests; //lista żądań skierowanych do kontraktu5 uint currentId = 0; //rosnący identyfikator żądania6 uint minQuorum = 2; //minimalna liczba odpowiedzi do otrzymania przed ogłoszeniem ostatecznego wyniku7 uint totalOracleCount = 3; //Liczba wyroczni zakodowana na stałe89 // definiuje ogólne żądanie API10 struct Request {11 uint id; //id żądania12 string urlToQuery; //adres URL API13 string attributeToFetch; //atrybut json (klucz) do pobrania w odpowiedzi14 string agreedValue; //wartość z klucza15 mapping(uint => string) answers; //odpowiedzi dostarczone przez wyrocznie16 mapping(address => uint) quorum; //wyrocznie, które odpytają o odpowiedź (1=wyrocznia nie głosowała, 2=wyrocznia głosowała)17 }1819 //zdarzenie, które uruchamia wyrocznię poza blockchainem20 event NewRequest (21 uint id,22 string urlToQuery,23 string attributeToFetch24 );2526 //uruchamiane, gdy istnieje konsensus co do ostatecznego wyniku27 event UpdatedRequest (28 uint id,29 string urlToQuery,30 string attributeToFetch,31 string agreedValue32 );3334 function createRequest (35 string memory _urlToQuery,36 string memory _attributeToFetch37 )38 public39 {40 uint length = requests.push(Request(currentId, _urlToQuery, _attributeToFetch, ""));41 Request storage r = requests[length-1];4243 //Adresy wyroczni zakodowane na stałe44 r.quorum[address(0x6c2339b46F41a06f09CA0051ddAD54D1e582bA77)] = 1;45 r.quorum[address(0xb5346CF224c02186606e5f89EACC21eC25398077)] = 1;46 r.quorum[address(0xa2997F1CA363D11a0a35bB1Ac0Ff7849bc13e914)] = 1;4748 // uruchom zdarzenie, które zostanie wykryte przez wyrocznię poza blockchainem49 emit NewRequest (50 currentId,51 _urlToQuery,52 _attributeToFetch53 );5455 // zwiększ id żądania56 currentId++;57 }5859 //wywoływane przez wyrocznię w celu zarejestrowania jej odpowiedzi60 function updateRequest (61 uint _id,62 string memory _valueRetrieved63 ) public {6465 Request storage currRequest = requests[_id];6667 //sprawdź, czy wyrocznia znajduje się na liście zaufanych wyroczni68 //i czy wyrocznia jeszcze nie głosowała69 if(currRequest.quorum[address(msg.sender)] == 1){7071 //oznaczenie, że ten adres głosował72 currRequest.quorum[msg.sender] = 2;7374 //iteruj przez „tablicę” odpowiedzi, aż pozycja będzie wolna i zapisz pobraną wartość75 uint tmpI = 0;76 bool found = false;77 while(!found) {78 //znajdź pierwszy pusty slot79 if(bytes(currRequest.answers[tmpI]).length == 0){80 found = true;81 currRequest.answers[tmpI] = _valueRetrieved;82 }83 tmpI++;84 }8586 uint currentQuorum = 0;8788 //iteruj przez listę wyroczni i sprawdź, czy wystarczająca liczba wyroczni (minimalne kworum)89 //głosowała na tę samą odpowiedź co obecna90 for(uint i = 0; i < totalOracleCount; i++){91 bytes memory a = bytes(currRequest.answers[i]);92 bytes memory b = bytes(_valueRetrieved);9394 if(keccak256(a) == keccak256(b)){95 currentQuorum++;96 if(currentQuorum >= minQuorum){97 currRequest.agreedValue = _valueRetrieved;98 emit UpdatedRequest (99 currRequest.id,100 currRequest.urlToQuery,101 currRequest.attributeToFetch,102 currRequest.agreedValue103 );104 }105 }106 }107 }108 }109}Pokaż wszystkoWęzły wyroczni
Węzeł wyroczni jest komponentem poza łańcuchem usługi wyroczni. Wyodrębnia informacje z zewnętrznych źródeł, takich jak API hostowane na serwerach stron trzecich i umieszcza je w łańcuchu do wykorzystania przez inteligentne kontrakty. Węzły wyroczni nasłuchują zdarzeń z kontraktu wyroczni znajdującego się w łańcuchu i wykonują zadanie opisane w dzienniku.
Częstym zadaniem dla węzłów wyroczni jest wysyłanie żądania HTTP GET (opens in a new tab) do usługi API, parsowanie odpowiedzi w celu wyodrębnienia odpowiednich danych, formatowanie ich do postaci czytelnej dla blockchaina i wysyłanie ich do łańcucha poprzez włączenie ich do transakcji do kontraktu wyroczni. Węzeł wyroczni może również być zobowiązany do poświadczania ważności oraz integralności przesłanych informacji przy użyciu „dowodów autentyczności”, które omówimy później.
Wyrocznie obliczeniowe również polegają na węzłach poza łańcuchem w celu wykonania zadań obliczeniowych, które nie warto byłoby wykonywać w łańcuchu ze względu na koszty gazu i ograniczenia rozmiaru bloku. Dla przykładu węzeł wyroczni może mieć za zadanie wygenerować weryfikowalnie losową liczbę (np. dla gier opartych na blockchainie).
Wzorce projektowe wyroczni
Wyrocznie występują w różnych typach, w tym immediate-read, publish-subscribe i request-response, przy czym te dwa ostatnie są najpopularniejsze wśród inteligentnych kontraktów Ethereum. Dlatego też krótko opiszemy modele publikacja-subskrypcja i żądanie-odpowiedź.
Wyrocznie typu publikuj-subskrybuj
Ten rodzaj wyroczni udostępnia „kanał danych”, który inne kontrakty mogą regularnie odczytywać po informacje. W tym przypadku oczekuje się, że dane będą się często zmieniać, więc kontrakty klienckie muszą nasłuchiwać aktualizacji danych w pamięci wyroczni. Przykładem może być wyrocznia, która dostarcza użytkownikom najnowszych informacji o cenie ETH-USD.
Wyrocznie typu żądanie-odpowiedź
Konfiguracja żądanie-odpowiedź pozwala kontraktom klienckim na żądanie dowolnych danych innych niż te dostarczane przez wyrocznie publikacja-subskrypcja. Wyrocznie żądanie-odpowiedź są idealne, gdy zbiór danych jest zbyt duży, aby mógł być przechowywany w magazynie inteligentnego kontraktu i/lub użytkownicy będą potrzebować małej części danych w dowolnym momencie.
Chociaż są one bardziej skomplikowane niż modele publikacja-subskrypcja, to wyrocznie żądanie-odpowiedź są tak naprawdę tym, co opisywaliśmy w poprzedniej sekcji. Wyrocznia będzie miała komponent w łańcuchu, który otrzymuje żądanie danych i przekazuje je do węzła poza łańcuchem do jego przetworzenia.
Użytkownicy inicjujący zapytania o dane muszą pokryć koszty otrzymania informacji od źródła poza łańcuchem. Kontrakt klienta musi również zapewnić środki na pokrycie kosztów gazu poniesionych przez kontrakt wyroczni podczas zwracania odpowiedzi poprzez funkcję zwrotną określoną w żądaniu.
Wyrocznie scentralizowane a zdecentralizowane
Wyrocznie scentralizowane
Scentralizowana wyrocznia jest kontrolowana przez pojedynczy podmiot, który jest odpowiedzialny za agregowane informacji spoza łańcucha oraz aktualizowanie danych kontraktu wyroczni zgodnie z żądaniem. Scentralizowane wyrocznie są wydajne, ponieważ polegają na pojedynczym źródle prawdy. Mogą funkcjonować lepiej w przypadkach, gdy zastrzeżone zbiory danych zostają opublikowane bezpośrednio przez właściciela z powszechnie akceptowanym podpisem. Mają one jednak też swoje wady:
Niskie gwarancje poprawności
Ze scentralizowanymi wyroczniami nie ma sposobu na potwierdzenie czy dostarczane informację są poprawne czy nie. Nawet „renomowani” dostawcy mogą stać się nieuczciwi bądź zostać zhakowani. Jeśli wyrocznia zostanie skorumpowana, to inteligentne kontrakty będą wykonywane na podstawie złych danych.
Niska dostępność
Scentralizowane wyrocznie nie gwarantują, że dane spoza łańcucha zawsze będą dostępne dla innych inteligentnych kontraktów. Jeśli dostawca zdecyduje się na wyłączenie usługi lub haker przejmie władzę nad komponentem wyroczni poza łańcuchem, to inteligentny kontrakt będzie narażony na atak blokady usług (DoS).
Słaba zgodność zachęt
Scentralizowane wyrocznie często mają słabo zaprojektowane lub nieistniejące zachęty dla dostawców danych do przesyłania poprawnych/niezmienionych informacji. Płacenie wyroczni za poprawność nie gwarantuje uczciwości. Problem ten nasila się ze wzrostem wartości kontrolowanej przez inteligentne kontrakty.
Wyrocznie zdecentralizowane
Zdecentralizowane wyrocznie zostały zaprojektowane tak, aby przezwyciężać ograniczenia scentralizowanych wyroczni poprzez wyeliminowanie pojedynczych punktów awarii. Usługa zdecentralizowanej wyroczni obejmuje wielu uczestników w sieci peer-to-peer, którzy tworzą konsensus w sprawie danych spoza łańcucha przed wysłaniem ich do inteligentnego kontraktu.
Zdecentralizowana wyrocznia powinna (najlepiej) być pozbawiona uprawnień i zaufania oraz być wolna od administracji centralnej strony; w rzeczywistości decentralizacja wśród wyroczni jest w spektrum. Istnieją częściowo zdecentralizowane sieci wyroczni, w których każdy może uczestniczyć, ale z „właścicielem”, który zatwierdza i usuwa węzły na podstawie historycznej wydajności. Istnieją również w pełni zdecentralizowane sieci wyroczni, lecz te zazwyczaj działają jako osobne blockchainy i mają zdefiniowane mechanizmy konsensusu do koordynacji węzłów i karania niewłaściwego zachowania.
Używanie zdecentralizowanych wyroczni daje następujące korzyści:
Wysokie gwarancje poprawności
Zdecentralizowane wyrocznie próbują osiągnąć poprawność danych przy użyciu różnych podejść. W tym także używanie dowodów poświadczających autentyczność i integralność zwróconych informacji oraz wymaganie wielu podmiotów na wspólne uzgodnienie ważności danych spoza łańcucha.
Dowody autentyczności
Dowody autentyczności to kryptograficzne mechanizmy, które pozwalają na niezależną weryfikację informacji pozyskanych z zewnętrznych źródeł. Te dowody mogą zweryfikować źródło informacji oraz wykryć ewentualne zmiany danych po pozyskaniu.
Przykłady dowodów autentyczności:
Dowody Transport Layer Security (TLS): Węzły wyroczni często pobierają dane z zewnętrznych źródeł za pomocą bezpiecznego połączenia HTTP opartego na protokole Transport Layer Security (TLS). Niektóre zdecentralizowane wyrocznie używają dowodów autentyczności do zweryfikowania sesji TLS (np. potwierdzenia wymiany informacji pomiędzy węzłem a konkretnym serwerem) i potwierdzenia, że treści sesji nie zostały zmienione.
Poświadczenia Trusted Execution Environment (TEE): Zaufane środowisko wykonawcze (opens in a new tab) (TEE) to odizolowane środowisko obliczeniowe (sandbox), które jest odizolowane od procesów operacyjnych swojego systemu-hosta. TEE zapewniają, że jakikolwiek kod aplikacji lub dane przechowywane/wykorzystywane w środowisku obliczeniowym zachowują integralność, poufność oraz niezmienność. Użytkownicy mogą również wygenerować poświadczenie, aby udowodnić, że instancja aplikacji działa w zaufanym środowisku wykonawczym.
Niektóre klasy zdecentralizowanych wyroczni wymagają od operatorów węzłów wyroczni dostarczenia poświadczeń TEE. To potwierdza użytkownikowi, że operator węzła ma uruchomioną instancję klienta wyroczni w zaufanym środowisku wykonawczym. TEE zapobiegają zewnętrznym procesom na zmianę lub odczyt kodu i danych aplikacji, więc poświadczenia te potwierdzają, że węzeł wyroczni zachował informacje w stanie nienaruszonym oraz poufnym.
Walidacja informacji oparta na konsensusie
Scentralizowane wyrocznie polegają na pojedynczym źródle prawdy podczas dostarczania danych do inteligentnych kontraktów, co daje możliwość publikowania niedokładnych informacji. Zdecentralizowane wyrocznie rozwiązują ten problem przez poleganie na wielu węzłach wyroczni do wyszukania informacji poza łańcuchem. Porównując dane z wielu źródeł, zdecentralizowane wyrocznie zmniejszają ryzyko podania nieprawidłowych informacji do kontraktów w łańcuchu.
Zdecentralizowane wyrocznie muszą jednak radzić sobie z rozbieżnością informacji pozyskiwanych od wielu źródeł poza łańcuchem. Aby zminimalizować różnice w informacjach oraz zapewnić, że dane przekazywane do kontraktu wyroczni odzwierciedlają wspólną opinię węzłów wyroczni, zdecentralizowane wyrocznie korzystają z następujących mechanizmów:
Głosowanie/stakowanie na dokładność danych
Niektóre sieci zdecentralizowanych wyroczni wymagają od uczestników głosowania lub stakowania na dokładność odpowiedzi na zapytanie o dane (np. „Kto wygrał wybory w USA w 2020 r.?”) przy użyciu natywnego tokena sieci. Protokół agregacji następnie agreguje głosy oraz stawki i bierze odpowiedź popieraną przez większość za prawidłową.
Węzły, których odpowiedzi odbiegają od odpowiedzi większości, zostają ukarane poprzez dystrybucję ich tokenów innym, którzy podali bardziej poprawne wartości. Zmuszanie węzłów do podawania obligacji przed dostarczeniem danych, zachęca do uczciwych odpowiedzi, ponieważ zakłada się, że są one ekonomicznie racjonalnymi podmiotami, którzy chcą maksymalizować swoje zyski.
Stakowanie/głosowanie chroni również zdecentralizowane wyrocznie przed , w których złośliwi aktorzy tworzą wiele tożsamości, aby manipulować systemem konsensusu. Staking nie zapobiegnie jednak „pasożytowaniu” (kopiowaniu przez węzły wyroczni informacji od innych) oraz „leniwej walidacji” (podążaniu węzłów wyroczni za większością bez samodzielnego weryfikowania informacji).
Mechanizmy punktu Schellinga
Punkt Schellinga (opens in a new tab) to koncepcja z teorii gier, która zakłada, że wiele podmiotów w przypadku braku komunikacji zawsze wybierze domyślne wspólne rozwiązanie problemu. Mechanizmy punktu Schellinga są często wykorzystywane w sieciach zdecentralizowanych wyroczni, co pozwala węzłom osiągnięcie konsensusu w sprawie odpowiedzi na żądania danych.
Wczesnym pomysłem na to był SchellingCoin (opens in a new tab), proponowany kanał danych, w którym uczestnicy przesyłają odpowiedzi na pytania „skalarne” (pytania, na które odpowiedzi są opisywane przez wielkość, np. „jaka jest cena ETH?”) wraz z depozytem. Użytkownicy, którzy podadzą wartości mieszczące się między 25. a 75. percentylem (opens in a new tab), są nagradzani, podczas gdy ci, których wartości znacznie odbiegają od mediany, są karani.
Chociaż SchellingCoin dziś nie istnieje, wiele zdecentralizowanych wyroczni — w szczególności Wyrocznie Protokołu Maker (opens in a new tab) — używa mechanizmu punktu Schellinga do poprawy dokładności danych z wyroczni. Każda wyrocznia Maker składa się z: poza łańcuchowej sieci P2P węzłów („przekaźników” i „kanałów”), które przesyłają ceny rynkowe aktywów zabezpieczających oraz kontraktu „Medianizera” w łańcuchu, który oblicza medianę wszystkich dostarczonych wartości. Po upływie określonego czasu opóźnienia wartość tej mediany staje się nową ceną referencyjną dla powiązanego aktywa.
Inne przykłady wyroczni, które wykorzystują mechanizmy punktu Schellinga, to Chainlink Offchain Reporting (opens in a new tab) i Witnet (opens in a new tab). W obu systemach odpowiedzi od węzłów wyroczni w sieci peer-to-peer są agregowane w pojedynczą zagregowaną wartość, taką jak średnia lub mediana. Węzły zostają nagradzane lub karane w zależności od stopnia, w jakim ich odpowiedzi są zgodne lub odbiegają od zagregowanej wartości.
Mechanizmy punktu Schellinga są atrakcyjne, ponieważ minimalizują ślad w łańcuchu (musi zostać wysłana tylko jedna transakcja) jednocześnie gwarantując decentralizację. To ostatnie jest możliwe, ponieważ węzły muszą podpisać listę przesłanych odpowiedzi, zanim zostanie przekazana algorytmowi, który tworzy wartość średniej/mediany.
Dostępność
Usługi zdecentralizowanych wyroczni zapewniają wysoką dostępność danych spoza łańcucha inteligentnym kontraktom. Jest to osiągane poprzez decentralizację zarówno źródła informacji spoza łańcucha, jak i węzłów odpowiedzialnych za przenoszenie informacji w łańcuchu.
Zapewnia to tolerancję na błędy, ponieważ kontrakt wyroczni może polegać na wielu węzłach (które również polegają na wielu źródłach danych) w celu wykonania zapytań od innych kontraktów. Decentralizacja na poziomie źródła i operatora węzła jest kluczowa — sieć węzłów wyroczni obsługująca informacje pobrane z tego samego źródła napotka ten sam problem co scentralizowana wyrocznia.
Możliwe jest również, aby wyrocznie oparte na stakowaniu odcinały operatorów węzłów, którzy nie reagują szybko na żądania danych. To znacznie zachęca węzły wyroczni do zainwestowania w odporną na awarię infrastrukturę oraz dostarczania danych na czas.
Dobra zgodność zachęt
Zdecentralizowane wyrocznie implementują różne projekty zachęt, aby zapobiec bizantyjskiemu (opens in a new tab) zachowaniu wśród węzłów wyroczni. W szczególności osiągają one przypisywalność i rozliczalność:
-
Od węzłów zdecentralizowanych wyroczni wymaga się często podpisania danych, których dostarczają w odpowiedzi na żądania danych. Informacje te pomagają ocenić historyczną wydajność węzła wyroczni, dzięki czemu użytkownicy mogą odfiltrować niewiarygodne węzły wyroczni podczas wysyłania żądań danych. Przykładem jest Algorytmiczny System Reputacji (opens in a new tab) Witnet.
-
Zdecentralizowane wyrocznie, jak już wyjaśniliśmy wcześniej, mogą wymagać od węzłów postawienia stawki na ich pewność co do prawdziwości danych przesłanych przez nich. Jeśli dane się sprawdzą, ta stawka może zostać zwrócona wraz z nagrodami za uczciwą usługę. Może ona również zostać odcięta w przypadku, w którym informacje są nieprawidłowe, co zapewnia pewną miarę rozliczalności.
Zastosowania wyroczni w inteligentnych kontraktach
Powszechnie przypadki użycia wyroczni w Ethereum:
Pobieranie danych finansowych
Aplikacje zdecentralizowanych finansów (DeFi) pozwalają na udzielanie pożyczek, pożyczanie i handel aktywami w modelu peer-to-peer. Często wymaga to zdobycia różnych informacji finansowych, w tym danych o kursie wymiany (do obliczania wartości fiducjarnej kryptowalut lub porównywania cen tokenów) oraz danych o rynkach kapitałowych (do obliczania wartości tokenizowanych aktywów, takich jak złoto lub dolar amerykański).
Na przykład protokół pożyczkowy DeFi musi sprawdzać bieżące ceny rynkowe aktywów (np. ETH) wpłaconych jako zabezpieczenie. Pozwala to kontraktowi na określenie wartości aktywów zabezpieczających oraz określić ile może pożyczyć z systemu.
Popularne „wyrocznie cenowe” (jak są często nazywane) w DeFi to między innymi Chainlink Price Feeds, Open Price Feed (opens in a new tab) od Compound Protocol, Time-Weighted Average Prices (TWAPs) (opens in a new tab) od Uniswap oraz Maker Oracles (opens in a new tab).
Twórcy powinni zrozumieć zastrzeżenia, z jakimi związane są te wyrocznie cen przed zintegrowaniem ich do swojego projektu. Ten artykuł (opens in a new tab) zawiera szczegółową analizę tego, co należy wziąć pod uwagę, planując użycie którejkolwiek z wymienionych wyroczni cenowych.
Poniżej znajduje się przykład tego, w jaki sposób pozyskać najnowszą cenę ETH w inteligentnym kontrakcie przy użyciu kanału danych cen Chainlink:
1pragma solidity ^0.6.7;23import "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol";45contract PriceConsumerV3 {67 AggregatorV3Interface internal priceFeed;89 /**10 * Network: Kovan11 * Aggregator: ETH/USD12 * Address: 0x9326BFA02ADD2366b30bacB125260Af64103133113 */14 constructor() public {15 priceFeed = AggregatorV3Interface(0x9326BFA02ADD2366b30bacB125260Af641031331);16 }1718 /**19 * Returns the latest price20 */21 function getLatestPrice() public view returns (int) {22 (23 uint80 roundID,24 int price,25 uint startedAt,26 uint timeStamp,27 uint80 answeredInRound28 ) = priceFeed.latestRoundData();29 return price;30 }31}Pokaż wszystkoGenerowanie weryfikowalnej losowości
Niektóre blockchainowe aplikacje, takie jak gry lub programy loteryjne oparte na blockchainie, wymagają wysokiej nieprzewidywalności i losowości, aby efektywnie działać. Jednakże deterministyczne wykonanie blockchainów eliminuje losowość.
Pierwotne podejście polegało na użyciu pseudolosowych funkcji kryptograficznych, takich jak blockhash, ale mogły być one manipulowane przez górników (opens in a new tab) rozwiązujących algorytm dowodu pracy. Ponadto przejście Ethereum na dowód stawki oznacza, że deweloperzy nie mogą już polegać na blockhash w kwestii losowości w łańcuchu. Mechanizm RANDAO (opens in a new tab) Łańcucha Beacon zapewnia zamiast tego alternatywne źródło losowości.
Możliwe jest wygenerowanie losowej wartości poza łańcuchem i wysłanie jej w łańcuchu, ale to nakłada na użytkowników wysokie wymagania dotyczące zaufania. Muszą uwierzyć, że wartość została naprawdę wygenerowana przez nieprzewidywalny mechanizm i nie została zmieniona podczas jej przesyłania.
Wyrocznie zaprojektowane do obliczeń poza łańcuchem rozwiązują ten problem, poprzez bezpieczne generowanie losowych wyników poza łańcuchem, które następnie zostają udostępnione w łańcuchu wraz z kryptograficznymi dowodami poświadczającymi nieprzewidywalność procesu. Przykładem jest Chainlink VRF (opens in a new tab) (Verifiable Random Function), który jest weryfikowalnie uczciwym i odpornym na manipulacje generatorem liczb losowych (RNG), przydatnym do budowania niezawodnych inteligentnych kontraktów dla aplikacji, które opierają się na nieprzewidywalnych wynikach.
Uzyskiwanie wyników dla zdarzeń
Z wyroczniami, tworzenie inteligentnych kontraktów odpowiadających na zdarzenia w prawdziwym świecie jest łatwe. Usługi wyroczni umożliwiają to, pozwalając kontraktom na łączenie się z zewnętrznymi API poprzez komponenty poza łańcuchem oraz wykorzystanie informacji z tych źródeł danych. Dla przykładu wspomniana wcześniej zdecentralizowana aplikacja do przewidywań może zażądać od wyroczni zwrócenia wyników wyborów z zaufanego źródła poza łańcuchem (np. z Associated Press).
Używanie wyroczni do pozyskania danych opartych na wynikach w prawdziwym świecie umożliwia inne nowatorskie przypadki użycia, na przykład na zdecentralizowany produkt ubezpieczeniowy, który potrzebuje dokładnych danych o pogodzie, katastrofach itp., aby poprawnie działać.
Automatyzacja inteligentnych kontraktów
Inteligentne kontrakty nie uruchamiają się automatycznie; raczej konto zewnętrzne (EOA) lub inne konto kontraktu musi wywołać odpowiednią funkcję, aby wykonać kod kontraktu. W większości przypadków większość funkcji kontraktu jest publiczna i może zostać wywołana przez EOA lub inne kontrakty.
Istnieją jednak również funkcje prywatne w ramach kontraktu, które są niedostępne dla innych, ale które mają kluczowe znaczenie dla ogólnej funkcjonalności dapki. Przykłady obejmują funkcję mintERC721Token(), która okresowo mintuje nowe NFT dla użytkowników, funkcję przyznawania wypłat na rynku predykcyjnym lub funkcję odblokowywania stakowanych tokenów w DEX.
Deweloperzy będą musieli wywoływać takie funkcje w określonych odstępach czasowych, aby aplikacja działała płynnie. Może prowadzić to jednak do utraty sporej liczby godzin na żmudne dla deweloperów zadania, dlatego automatyzacja wykonywania inteligentnych kontraktów jest atrakcyjna.
Niektóre sieci zdecentralizowanych wyroczni oferują usługi automatyzacji, które pozwalają węzłom wyroczni poza łańcuchem na wywoływanie funkcji inteligentnych kontraktów według parametrów określonych przez użytkownika. Zazwyczaj wymaga to „zarejestrowania” docelowego kontraktu w usłudze wyroczni, zapewnienia środków do opłacenia operatora wyroczni oraz określenia warunków lub czasu, w którym ma zostać wywołany kontrakt.
Keeper Network (opens in a new tab) od Chainlink zapewnia inteligentnym kontraktom opcje zlecenia na zewnątrz regularnych zadań konserwacyjnych w sposób zminimalizowany pod względem zaufania i zdecentralizowany. Przeczytaj oficjalną dokumentację Keeper (opens in a new tab), aby uzyskać informacje na temat tego, jak uczynić swój kontrakt kompatybilnym z Keeper i jak korzystać z usługi Upkeep.
Jak używać wyroczni blockchain
Istnieje wiele aplikacji wyroczni, które możesz zintegrować do swojej zdecentralizowanej aplikacji na Ethereum:
Chainlink (opens in a new tab) – Zdecentralizowane sieci wyroczni Chainlink zapewniają odporne na manipulacje dane wejściowe, wyjściowe i obliczenia w celu obsługi zaawansowanych inteligentnych kontraktów na dowolnym blockchainie.
RedStone Oracles (opens in a new tab) – RedStone to zdecentralizowana, modułowa wyrocznia, która dostarcza zoptymalizowane pod kątem gazu kanały danych. Specjalizuje się w udostępnianiu kanałów danych cen nowych aktywów, takich jak tokeny płynnego stakingu (LST), tokeny płynnego restakingu (LRT) czy pochodne stakowania Bitcoina._
Chronicle (opens in a new tab) – Chronicle przezwycięża obecne ograniczenia transferu danych w łańcuchu poprzez rozwijanie prawdziwie skalowalnych, opłacalnych, zdecentralizowanych i weryfikowalnych wyroczni.
Witnet (opens in a new tab) – Witnet to niewymagająca uprawnień, zdecentralizowana i odporna na cenzurę wyrocznia, która pomaga inteligentnym kontraktom reagować na zdarzenia ze świata rzeczywistego z silnymi gwarancjami kryptoekonomicznymi.
UMA Oracle (opens in a new tab) – Optymistyczna wyrocznia UMA pozwala inteligentnym kontraktom szybko otrzymywać wszelkiego rodzaju dane dla różnych zastosowań, w tym ubezpieczeń, instrumentów pochodnych i rynków predykcyjnych.
Tellor (opens in a new tab) – Tellor to przejrzysty i niewymagający uprawnień protokół wyroczni dla Twojego inteligentnego kontraktu, aby łatwo uzyskać dowolne dane, gdy tylko ich potrzebuje.
Band Protocol (opens in a new tab) – Band Protocol to międzyłańcuchowa platforma wyroczni danych, która agreguje i łączy dane ze świata rzeczywistego oraz interfejsy API z inteligentnymi kontraktami.
Pyth Network (opens in a new tab) – Sieć Pyth to sieć wyroczni finansowych pierwszej strony, zaprojektowana do publikowania ciągłych danych ze świata rzeczywistego w łańcuchu, w środowisku odpornym na manipulacje, zdecentralizowanym i samowystarczalnym.
API3 DAO (opens in a new tab) – API3 DAO dostarcza rozwiązania wyroczni pierwszej strony, które zapewniają większą przejrzystość źródła, bezpieczeństwo i skalowalność w zdecentralizowanym rozwiązaniu dla inteligentnych kontraktów
Supra (opens in a new tab) – Pionowo zintegrowany zestaw narzędzi rozwiązań międzyłańcuchowych, które łączą wszystkie blockchainy, publiczne (L1 i L2) lub prywatne (dla przedsiębiorstw), dostarczając zdecentralizowane kanały cenowe wyroczni, które mogą być używane do zastosowań w łańcuchu i poza nim.
Gas Network (opens in a new tab) – Rozproszona platforma wyroczni dostarczająca dane o cenach gazu w czasie rzeczywistym w całym blockchainie. Dostarczając dane od wiodących dostawców danych o cenach gazu do łańcucha, Gas Network pomaga w zapewnieniu interoperacyjności. Gas Network obsługuje dane dla ponad 35 łańcuchów, w tym Ethereum Mainnet i wiele wiodących L2.
Dalsza lektura
Artykuły
- Czym jest wyrocznia blockchain? (opens in a new tab) – Chainlink
- Czym jest wyrocznia blockchain? (opens in a new tab) – Patrick Collins
- Zdecentralizowane wyrocznie: kompleksowy przegląd (opens in a new tab) – Julien Thevenard
- Implementacja wyroczni blockchain na Ethereum (opens in a new tab) – Pedro Costa
- Dlaczego inteligentne kontrakty nie mogą wykonywać wywołań API? (opens in a new tab) – StackExchange
- Więc chcesz użyć wyroczni cenowej (opens in a new tab) – samczsun
Filmy
- Wyrocznie i rozszerzenie użyteczności blockchain (opens in a new tab) – Real Vision Finance
Samouczki
- Jak pobrać aktualną cenę Ethereum w Solidity (opens in a new tab) – Chainlink
- Korzystanie z danych wyroczni (opens in a new tab) – Chronicle
Przykładowe projekty