Oracles – czyli wyrocznia prawdę Ci powie

Przemek/ 21 lipca, 2022

Smart kontrakty mogą zrewolucjonizować wiele branż. Aplikacje oparte o tę technologię nie wymagają zaufania trzeciej stronie, ponieważ wszystko może być zweryfikowane przez dowolnego użytkownika. Jednak pomimo ich wielu zalet, pojawia się dosyć istotny problem. Smart kontrakt przyjmie do siebie wszystko, nawet jeśli dane będą nieprawdziwe. Jak w takim razie zaufać aplikacji? Na szczęście istnieją rozwiązania, które pozwalają poradzić sobie z tym zagrożeniem, a są nimi tzw. blockchain oracles (wyrocznie). Dzisiaj dowiesz się, czym one są, na jakiej zasadzie działają oraz w jakich sytuacjach należy ich używać.

Nieoczekiwany wynik

Rysunek 1. Doświadczenie
(źródło: https://www.dreamstime.com/impressed-blogger-having-unexpected-results-experiment-amazing-handsome-impressed-dirty-fair-haired-young-blogger-image111932531)

Żeby dobrze zrozumieć, do czego mogą doprowadzić fałszywe informacje zapisane w smart kontrakcie, prześledźmy hipotetyczną sytuację.

Piotrek jest rolnikiem i szuka najlepszego sposobu zabezpieczenia zbiorów, w przypadku nieszczęśliwych zdarzeń. Dowiedział się, że powstała firma, która oferuje ubezpieczenia oparte o blockchain. Ponieważ wcześniej interesował się tą technologią, wie o tym, że aplikacje stworzone przy pomocy smart kontraktów są bezpieczne i dają gwarancję wykonania umowy. Udał się do agencji i razem z ubezpieczycielem uzgodnili, że jeśli 20 dni z rzędu temperatura powietrza będzie przekraczała 35 stopni i w tym czasie nie spadnie deszcz, to Piotrek dostanie odszkodowanie. Wszystko zostało umieszczone w smart kontrakcie. Piotrek ma również doświadczenie programistyczne, więc zweryfikował stworzony kod i nic nie wzbudziło jego zastrzeżeń. Wygląda na to, że w razie wystąpienia wspomnianych warunków, będzie mógł automatycznie wypłacić należne środki z blockchaina.

Przyszło lato. Temperatury były nieznośne i już w lipcu okazało się, że codziennie przekraczały 35 stopni i nie było mowy o kropli deszczu. Po upływie 20 takich dni, Piotrek stwierdził, że czas uzyskać odszkodowanie. Włącza komputer, otwiera aplikację, próbuje wypłacić środki i… okazuje się, że według aplikacji warunki pogodowe nie były odpowiednie do otrzymania pieniędzy. Zdenerwowany Piotr wsiada w samochód i jedzie prosto do ubezpieczalni.

Na miejscu zostaje przyjęty przez pracownika firmy. Piotrek opowiada o całym zajściu i błędzie, jaki musiał powstać podczas zawierania umowy. Pracownik, po sprawdzeniu wszystkiego w systemie, mówi spokojnym głosem: “Panie Piotrze, w aplikacji nie ma żadnego błędu. Jak Pan widzi, zgodnie z umową, gdyby warunki zostały spełnione, to otrzymałby Pan należne pieniądze. Ale niestety nie zaistniała do tego przesłanka. Zgodnie z naszymi danymi temperatura wynosiła powyżej 35 stopni jedynie 19 dni z rzędu. Niestety nie mogę Panu pomóc. Jeżeli warunek zostanie spełniony, to otrzyma Pan należne pieniądze”.

Po kilku dniach sytuacja wciąż nie dawała Piotrkowi spokoju. “Przecież wszystko sprawdziłem kilka razy. Nie ma mowy, żeby był błąd po stronie umowy. Tylko dlaczego, skoro ewidentnie temperatura przekraczała 35 stopni, ich system twierdzi, że było inaczej? Chwileczkę! Skąd ich system czerpał te dane…?”.

Piotrek udał się ponownie do ubezpieczalni, gdzie zadał to samo pytanie. “Panie Piotrze, system działa poprawnie, a dane o temperaturze pozyskujemy od naszych najlepszych i zaufanych ekspertów, którzy wprowadzają je do systemu”. I wszystko stało się jasne.

Kto kontroluje dane, ten kontroluje aplikację

Rysunek 2. Marionetka
(źródło: https://www.indiatoday.in/technology/talking-points/story/social-media-controls-our-lives-and-a-new-documentary-explains-just-how-1720828-2020-09-11)

Mam nadzieję, że powyższy przykład uświadomił Ci, gdzie leży problem. Sama technologia blockchain zadziałała zgodnie z założeniami. Skoro na podstawie wprowadzonych danych warunek nie został spełniony, to nie było mowy o wypłacie środków. Smart kontrakt się sprawdził. Jednak przez to, że to ubezpieczyciel kontrolował pogodowe dane, to on tak naprawdę decydował, czy warunek zostanie spełniony, czy też nie.

Należy tutaj jasno zaznaczyć, że smart kontrakt sam z siebie nie ma możliwości zweryfikowania, czy wprowadzane informacje ze świata zewnętrznego są prawdziwe. Jego zadaniem jest prezentowanie wyników, zgodnie z danymi, które do niego trafiły. Dlatego jeżeli jakieś rozwiązanie opiera się o blockchain, ale dane, na których wykonywane są operacje zależą od twórców aplikacji, wtedy taka aplikacja zbytnio nie różni się od tradycyjnych scentralizowanych programów. Wiadomo jedynie, co tak naprawdę dzieje się w samym kodzie i jest kilka innych bonusów związanych z blockchainiem, ale nie daje Ci to 100% gwarancji otrzymania oczekiwanych rezultatów. Na szczęście jest na to sposób.

Wyrocznia prawdę Ci powie

Rysunek 3. Wyrocznia Matrix
(źródło: https://www.looper.com/681917/the-oracle-theory-that-would-change-everything-in-the-matrix-resurrections/)

W blockchainie “oracle” lub po polsku “wyrocznia” to, najprościej mówiąc, most łączący zdecentralizowany świat z tym realnym. Rozwiązania takie pozwalają dostarczać zewnętrzne dane do blockchaina, ponieważ on sam nie jest w stanie ich pobrać. Należy pamiętać, że oracle nie jest sama w sobie źródłem danych, a jedynie ich dostarczycielem.

Wyrocznie możemy podzielić na trzy kategorie: hardwarowe, softwarowe oraz ludzkie. Pierwsze z nich to po prostu fizyczne urządzenia, które odczytują dane. Mógłby to być np. mierzący temperaturę w danym miejscu na świecie termometr, który byłby w stanie następnie dostarczyć zebrane informacje do blockchaina.

Wyrocznie typu software, to oprogramowanie, które zbiera dane z Internetu. W wypadku pogody, można by gromadzić dane o temperaturze z różnych stron, a następnie wgrywać je na blockchain. 

Typ ludzki to po prostu wyrocznia, którą jest dosłownie człowiek. W przypadku temperatury, osoba taka mogłaby stwierdzić, czy jest ciepło, czy zimno. Oczywiście byłaby to dosyć subiektywna ocena, ale gdyby równocześnie setka ludzi dostarczała taką informację, to byłoby to lepsze rozwiązanie. Tutaj dochodzimy do podziału na wyrocznie scentralizowane i zdecentralizowane.

Wyrocznie typu hardware, software i ludzkie można także podzielić na wspomniane kategorie. Jeżeli dane zbierane byłyby tylko przez jeden termometr należący do jednej firmy, wtedy takie rozwiązanie byłoby ewidentnie scentralizowane. Gdyby jednak w tym samym miejscu umieścić tysiące urządzeń od różnych dostawców, wtedy taka wyrocznie mogłaby być nazwana zdecentralizowaną i dostarczałaby obiektywnych wyników. To samo dotyczy oprogramowania oraz ludzi.

Kiedy jeszcze raz przyjrzymy się problemowi, z którym spotkał się Piotrek, możemy stwierdzić, że również w tamtym rozwiązaniu użyto wyroczni. Czy byli to ludzie decydujący o temperaturze, czy jakiś sprzęt lub oprogramowanie, nie ma to znaczenia. Problemem było to, że wszystko było scentralizowane i dane zależały od powiązanej ze sobą grupy osób.

Oczywiście nie zawsze jest to problemem. Możemy sobie wyobrazić, że istnieje tylko jedna instytucja, która posiada dostęp do danych. Ale w znakomitej większości przypadków, które dotyczą nas na co dzień, źródła informacji mogą być różne. Dlatego zawsze, kiedy to tylko możliwe, powinniśmy tworzyć i korzystać z rozwiązań wykorzystujących zdecentralizowane wyrocznie.

Centralizacja niesie za sobą jeszcze jeden problem. Nawet jeśli dostawca danych zachowuje się uczciwie, to w razie zhakowania systemu atakujący może podmienić informacje, przez co smart kontrakt ponownie zacznie działać inaczej, niż byśmy oczekiwali. Będzie oczywiście robił wszystko zgodnie z kodem, który został w nim zawarty, ale znowu dane namieszają w wynikach. W zdecentralizowanych rozwiązaniach taka sytuacja jest o wiele mniej prawdopodobna.

Należy zatem pamiętać, że to na styku świata blockchainowego i zewnętrznego, istnieje potencjalny problem, który możemy określić jako konflikt zaufania pomiędzy wyrocznią a smart kontraktem. Dlatego warto korzystać ze sprawdzonych rozwiązań. Obecnie najpopularniejszym z nich jest Chainlink.

Nie chcę za bardzo zagłębiać się teraz w techniczne szczegóły tego rozwiązania, ale jeżeli interesują Cię detale, to zajrzyj na oficjalną stronę w języku angielskim lub obejrzyj tę animację. W tym miejscu wspomnę jedynie, że Chainlink oparty jest o zdecentralizowaną sieć, która potrafi agregować i dostarczać rzetelne dane.

Chainlink posiada kilka funkcjonalności, które przydadzą się do tworzenia aplikacji opartych o blockchain. Oprócz oczywistej z nich, czyli dostarczania różnych danych ze świata zewnętrznego, pozwala on również tworzyć mechanizmy, które są w stanie automatycznie wywoływać metody smart kontraktów (Chainlink Keepers). Sieć ta pozwala też m.in. na wykonanie dowolnego zapytania do zewnętrznego API (Application Programming Interface) oraz na wygenerowanie losowej liczby i dostarczeniem jej na blockchain. Ten ostatni mechanizm przyda nam się już niedługo, kiedy będziemy ulepszać loterię, stworzoną w poprzednim wpisie. Teraz jedynie wytłumaczę, dlaczego go potrzebujemy.

Odgadnę liczbę, zanim ją wylosujesz

Rysunek 4. Jasnowidz
(źródło: https://the-goldenrule.name/category/clairvoyant/)

W poprzednim wpisie stworzyliśmy prostą loterię opartą o smart kontrakt. Aby wylosować wygranego, trzeba wygenerować losową liczbę na blockchainie. Ta liczba decydowała o tym, kto dostanie nagrodę. Na pierwszy rzut oka, wybrana metoda nie stanowiła problemu. Jednak prawda jest taka, że każdy mógłby odgadnąć liczbę jeszcze przed losowaniem.Nie chodzi mi tutaj o to, że ktoś byłby w stanie podać ją z głowy. Istnieje możliwość napisania w miarę prostego oprogramowania, które zrobiłoby to za nas. W takim wypadku dowolna osoba wiedziałaby, jakie podjąć działania, żeby wygrać konkurs.

Opisany wyżej problem wynika z dwóch rzeczy. Po pierwsze cały kod smart kontraktu jest publiczny, dlatego każdy może poznać algorytm, jaki został wykorzystany do generowania liczby. Po drugie nie da się ukryć żadnych danych na blockchainie, a my korzystaliśmy jedynie z tych dostępnych w kontrakcie. W takim wypadku, posiadając równocześnie algorytm i dane, nic nie stoi na przeszkodzie, aby poznać liczbę jeszcze przed rozpoczęciem losowania.

Rozwiązaniem tego problemu jest wyniesienie losowości poza blockchain. Ujmując to krótko: liczba musi zostać wygenerowana poza smart kontraktem, a następnie dostarczona do niego. W ten sposób oszust pozna jedynie algorytm, ale nie będzie znał wszystkich wymaganych danych. Sprawi to, że manipulacja loterią stanie się niemożliwa.

Wbrew pozorom jest to problem, o którym od czasu do czasu zapominają twórcy kontraktów. Teraz zdarza się to dużo rzadziej, ale w przeszłości można było spotkać wiele rozwiązań, które zostały skompromitowane, ponieważ deweloperzy zapomnieli o wspomnianym problemie.

Zanim przystąpimy do ulepszania loterii, warto zatrzymać się jeszcze na chwilę i poznać nieco więcej technicznych detali na temat samego Chainlinka. I to właśnie będzie tematyka kolejnego artykułu 🙂

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