Nowa aplikacja Sui Weather Oracle udostępnia budowniczym dane pogodowe dla ponad 1000 miast na całym świecie i służy jako unikalny generator losowości, odpowiedni dla gier i aplikacji bukmacherskich wymagających wiarygodnego losowego wyniku. Składający się z inteligentnego kontraktu opartego na Sui i usługi zaplecza pobierającej dane pogodowe z API OpenWeather, każdy może zintegrować dane pogodowe ze swoją aplikacją.

SUI Weather Oracle dostarcza informacji, takich jak temperatura, wilgotność i wiatr dla każdego z obsługiwanych miast. Oracle może być używany przez inne inteligentne kontrakty lub aplikacje, które potrzebują niezawodnych i zdecentralizowanych informacji o pogodzie do różnych celów, takich jak podróże, ubezpieczenia, rolnictwo, hazard lub gry.

Sui Weather Oracle umożliwia śledzenie pogody i inne aplikacje korzystające z danych API OpenWeather.

Jednak wykorzystanie pogody ze względu na jej losowość stanowi intrygujący przypadek użycia. Pogoda jest jednym z najbardziej nieprzewidywalnych i złożonych zjawisk w przyrodzie. Prognozy pogody wykonują w większości godną podziwu robotę, przewidując deszcz lub słoneczne niebo, ale obecna nauka nie jest w stanie określić takich szczegółów, jak określone temperatury czy prędkość wiatru.

Jako podstawowe pojęcie w wielu dziedzinach nauki, matematyki i inżynierii, losowość może być wykorzystywana do generowania bezpiecznych kluczy kryptograficznych, testowania hipotez lub symulowania złożonych systemów. Jednak generowanie prawdziwej losowości nie jest łatwe, ponieważ większość procesów fizycznych lub obliczeniowych jest deterministyczna lub w jakiś sposób obciążona. Używanie danych pogodowych jako danych wejściowych Oracle zapewnia losowe wyniki, które są równomiernie rozłożone i niezależne od jakichkolwiek poprzednich wyników.

Dane Oracle w aplikacjach

Wyrocznie w Sui i innych łańcuchach bloków służą jako kanały przesyłania danych poza łańcuchem, w tym wyników sportowych, cen akcji i pogody. Wyświetlanie tych danych bezpośrednio w aplikacji, co jest najbardziej oczywistym zastosowaniem, pozwala konstruktorom tworzyć narzędzia do zarządzania portfelem akcji, narzędzia do śledzenia pogody i rankingi piłkarskie w czasie rzeczywistym. Wykorzystanie danych w ten sposób może oczywiście stać się bardziej złożone, czego przykładem mogą być aplikacje wykorzystujące wyniki sportowe do informowania lig fantasy.

Gry mogą bazować bezpośrednio na danych Oracle. Na przykład wyrocznia może podać szanse i wyniki różnych zakładów w konkursach, takich jak mecze sportowe, wybory polityczne lub losowania loterii. Gracze mogą następnie obstawiać wyniki na podstawie kursów podanych przez wyrocznię.

Sprawy stają się bardziej interesujące, gdy konstruktorzy używają wyroczni oferujących nieprzewidywalne dane w celu wygenerowania losowości. Na przykład wyrocznia może wykorzystywać zdarzenia ze świata rzeczywistego, takie jak dane pogodowe, wyniki sportowe lub ceny akcji, aby stworzyć losowe wyniki w grze. Alternatywnie wyrocznia może użyć metod kryptograficznych, takich jak funkcje skrótu lub podpisy cyfrowe, w celu wygenerowania liczb losowych, które są bezpieczne i możliwe do udowodnienia. Fakt, że dane Oracle pochodzą z weryfikowalnego źródła niezależnego od aplikacji, sprawia, że ​​wyniki losowości są godne zaufania.

Dane pogodowe mogą służyć jako ziarno losowości w celu określenia wyników działań postaci w grze. (Źródło obrazu: RPGMaker)

Losowość oparta na nieprzewidywalnych danych z wyroczni może zostać włączona do mechaniki gry. Na przykład w grze RPG wyrocznia może określić powodzenie lub niepowodzenie działania postaci, takiego jak rzucenie zaklęcia, zhakowanie komputera lub przekonanie NPC. Wyrocznia może również wpływać na świat gry, na przykład zmieniać pogodę, pojawiać się wrogów lub inicjować wydarzenia. Gra może wykorzystywać dane wyroczni do stworzenia uczciwej i spójnej losowości, na którą twórca gry ani gracz nie mają wpływu.

Wyrocznia Pogodowa Sui

Oracles umożliwi nową generację aplikacji na Sui, łącząc dane ze świata rzeczywistego z wysokowydajną platformą. Biorąc pod uwagę dostępność interfejsu API OpenWeather i użyteczność jego danych, wyrocznia pogodowa stanowi dobry dodatek do Sui.

Przypadków użycia

Sui Weather Oracle jest przydatny w wielu zastosowaniach wymagających danych pogodowych, takich jak:

  • Losowość: dane pogodowe mogą być wykorzystywane jako źródło losowości do różnych celów, takich jak generowanie liczb losowych, wybieranie zwycięzców lub tworzenie unikalnych NFT. Na przykład generator liczb losowych. może wykorzystać jako materiał siewny temperaturę, wilgotność lub prędkość wiatru w określonym miejscu w określonym czasie.

  • Zakłady i gry: aplikacje mogą wykorzystywać dane Sui Weather Oracle do obstawiania zakładów z prognozą pogody, gier z motywem pogody lub nagród zależnych od pogody. Na przykład gra może umożliwiać użytkownikom obstawianie pogody w danym mieście lub aplikacja może oferować użytkownikom wyniki NFT oparte na pogodzie w różnych lokalizacjach.

  • Inne przypadki użycia: aplikacje ubezpieczeniowe, podróżnicze, edukacyjne lub badawcze mogą wykorzystywać dane pogodowe. Aplikacje mogą na przykład uwzględniać dane pogodowe w celu obliczenia ryzyka klęsk żywiołowych, planowania trasy podróży, uczenia uczniów o wzorcach pogodowych lub pomocy w przygotowywaniu eksperymentów naukowych.

Struktura

Sui Weather Oracle, dostarczająca aktualne informacje o pogodzie dla 1000 miast na całym świecie, składa się z trzech komponentów: usługi zewnętrznej, usługi wewnętrznej i inteligentnego kontraktu. Zewnętrzna usługa OpenWeather API udostępnia aktualne dane pogodowe z różnych źródeł. Wewnętrzną usługą jest zaplecze Weather Oracle, które co 10 minut pobiera dane pogodowe z API OpenWeather i aktualizuje warunki pogodowe dla każdego miasta. Inteligentny kontrakt to kontrakt Sui Weather Oracle, który przechowuje dane pogodowe w łańcuchu bloków Sui i umożliwia użytkownikom dostęp do nich w bezpieczny i przejrzysty sposób. Użytkownicy mogą również wykorzystywać dane pogodowe do różnych zdecentralizowanych aplikacji zależnych od pogody, takich jak gry.

Otrzymywanie rabatów za przechowywanie

Sui Weather Oracle zmniejsza koszty przechowywania danych w czasie rzeczywistym w sieci dzięki mechanizmowi rabatu za przechowywanie. Sui wspiera magazynowanie onchain w swojej infrastrukturze i modelu tokenomicznym, dodając opłatę za magazynowanie do opłat za gaz. Fundusz utworzony z opłat za przechowywanie pomaga operatorom sieci zwracać koszty utrzymania sprzętu do przechowywania danych i przetwarzania transakcji. Aby zachować kontrolę nad ilością danych onchain, usunięcie danych onchain skutkuje rabatem na fundusz przechowywania.

Sui Weather Oracle przechowuje i aktualizuje dane pogodowe na blockchainie. Administrator uiszcza jednorazową opłatę za utworzenie wstępnej listy obiektów CityWeatherOracle oraz otrzymuje rabat za aktualizację danych pogodowych dla każdego miasta. Rabat jest proporcjonalny do ilości aktualizowanych danych i częstotliwości aktualizacji. W ten sposób administrator może niskim kosztem przechowywać i aktualizować dane pogodowe na blockchainie.

Wykorzystanie wyświetlania obiektów Sui

Sui Weather Oracle wykorzystuje standard Sui Object Display do dynamicznej aktualizacji ikon dla każdego miasta w oparciu o aktualne warunki pogodowe, pokazując na przykład chmury deszczowe lub słońce. Standard Sui Object Display to silnik szablonów, który umożliwia zarządzanie onchain wyświetlaczem offchain dla dowolnego typu obiektu. Wykorzystuje ciąg szablonowy, który można zastąpić danymi obiektu, takimi jak identyfikator pogody dla miasta. Wyświetlanie poza łańcuchem jest obsługiwane przez usługę zaplecza, która udostępnia eksploratorowi Sui ikonę każdego z obsługiwanych miast. Ikona jest wybierana spośród predefiniowanego zestawu ikon, które reprezentują różne warunki pogodowe, takie jak słonecznie, pochmurno, deszczowo i śnieżnie.

Standard Sui Object Display można wykorzystać do wyświetlania ikon przedstawiających różne warunki pogodowe. (Zdjęcie: coolvector na Freepik) Sui Weather Inteligentny kontrakt Oracle

Inteligentny kontrakt Sui Weather Oracle zapewnia dane pogodowe w czasie rzeczywistym i historyczne dla 1000 lokalizacji na całym świecie oraz obsługuje NFT dotyczące pogody w oparciu o dane pogodowe miasta. Inteligentna umowa wykorzystuje również standard Sui Object Display, umożliwiając dynamiczne i konfigurowalne wyświetlanie danych pogodowych i pogodowych NFT na blockchainie. Inteligentny kontrakt ma cztery główne funkcje:

dodaj_miasto

, usuń_miasto, zaktualizuj i mint.

The

wyrocznia::pogoda

moduł definiuje co następuje:

AdminCap

, struktura reprezentująca uprawnienia administratora właściciela Oracle.

struktura AdminCap ma klucz, przechowuj { id: UID }

POGODA

, struktura, która konfiguruje wydawcę.

struktura WEATHER spadła {}

PogodaOracle

, struktura, reprezentuje samą wyrocznię. Posiada pola id, adres, nazwa i opis, które przechowują odpowiednio identyfikator wyroczni, adres właściciela, nazwę i opis.

struktura WeatherOracle ma klucz {     id: UID,     adres: adres,     nazwa: String,     opis: String, }

MiastoPogodaOracle

, struktura reprezentująca dane pogodowe dla określonego miasta. Zawiera pola id, geoname_id, nazwa, kraj, szerokość geograficzna, dodatnia_latitude, długość geograficzna, dodatnia_długość, pogoda_id, temp, ciśnienie, wilgotność, widoczność, prędkość wiatru, stopień wiatru, podmuch wiatru, chmury i dt, które przechowują unikalny identyfikator miasta, identyfikator nazwy geograficznej, nazwę , kraj, szerokość i długość geograficzna, identyfikator pogody, temperatura, ciśnienie, wilgotność, widoczność, prędkość wiatru, kierunek wiatru, podmuch wiatru, zachmurzenie i sygnatura czasowa.

struktura CityWeatherOracle ma klucz, przechowuj {     id: UID,     geoname_id: u32,     name: String,     kraj: String,     latitude: u32,     positive_latitude: bool,     longitude: u32,     positive_longitude: bool,     weather_id: u16 ,     temperatura: u32,     ciśnienie: u32 ,     wilgotność: u8,     widoczność: u16,     prędkość_wiatru: u16,     stopień_wiatru: u16,     podmuch_wiatru: Option<u16>,     chmury: u8,     dt: u32 }

Jakiś

ciepło

funkcja inicjująca kontrakt podczas wdrożenia, tworząca nową instancję WeatherOracle i udostępniająca ją publicznie oraz tworząca nową instancję AdminCap i przekazująca ją nadawcy.

zabawa init(otw: WEATHER, ctx: &mut TxContext) {     package::claim_and_keep(otw, ctx); niech cap = AdminCap { id: obiekt::new(ctx) }; transfer::share_object(WeatherOracle {         id: object::new(ctx),         adres: tx_context::sender(ctx),         nazwa: string::utf8(b"SuiMeteo"),        opis: string::utf8(b"A wyrocznia pogodowa do publikowania aktualizacji pogody (temperatura, ciśnienie, wilgotność, widoczność, dane dotyczące wiatru i stan zachmurzenia) dla głównych miast na całym świecie. Obecnie dane są pobierane z https://openweathermap.org. SuiMeteo zapewnia najlepsze dostępne informacje, ale nie gwarantuje jego dokładności, kompletności, niezawodności, przydatności ani dostępności. Korzystasz z niego na własne ryzyko i według własnego uznania.”),     }); transfer::public_transfer(cap, tx_context::sender(ctx)); }

The

dodaj_miasto

funkcja publiczna, która pozwala właścicielowi AdminCap dodać nowe miasto do usługi Oracle poprzez podanie jego geoname_ID, nazwy, kraju, szerokości i długości geograficznej. Funkcja tworzy nową instancję CityWeatherOracle z domyślnymi danymi pogodowymi i dodaje ją do Oracle jako pole dynamiczne, używając klucza geoname_ID.

zabawa publiczna add_city(     _: &AdminCap,      oracle: &mut WeatherOracle,      geoname_id: u32,     name: String,     kraj: String,     latitude: u32,     positive_latitude: bool,     longitude: u32,     positive_longitude bool,    ctx: &mut TxContext ) {     dof:: Dodaj (& mut oracle.id, geoname_id, CityweatherOacle {id: object :: new (ctx), geoname_id, nazwa, kraj, szerokość geograficzna, pozytywność, długość geograficzna, pozytywna_longitude, pogoda: 0, temp: 0, ,             widoczność: 0,             prędkość_wiatru: 0,            wind_deg: 0,             wiatr_podmuch: opcja::none(),             chmury: 0,             dt: 0         }     ); }

The

usuń_miasto

funkcja publiczna, która pozwala właścicielowi AdminCap usunąć istniejące miasto z usługi Oracle poprzez podanie jego geoname_ID. Funkcja usuwa odpowiednią instancję CityWeatherOracle z pól dynamicznych Oracle i usuwa obiekt.

zabawa publiczna usuń_city(_: &AdminCap, oracle: &mut WeatherOracle, geoname_id: u32) {     let CityWeatherOracle { id, geoname_id: _, nazwa: _, kraj: _, szerokość geograficzna: _, dodatnia_szerokość: _, długość geograficzna: _, dodatnia_długość: _ , id_pogody: _, temp: _, ciśnienie: _, wilgotność: _, widoczność: _, prędkość_wiatru: _, stopień_wiatru: _, poryw_wiatru: _, chmury: _, dt: _ } = dof::remove(&mut oracle. id, geoname_id); obiekt::usuń(id); }

The

aktualizacja

funkcja publiczna, która pozwala właścicielowi Oracle aktualizować dane pogodowe dla istniejącego miasta poprzez podanie jego geoname_ID i nowych danych pogodowych. Funkcja mutuje odpowiednią instancję CityWeatherOracle nowymi danymi pogodowymi.

publiczna aktualizacja zabawy (     _: &AdminCap,     oracle: &mut WeatherOracle,     geoname_id: u32,     weather_id: u16,     temperatura: u32,     ciśnienie: u32,     wilgotność: u8,     widoczność: u16,     prędkość_wiatru: u16,    wind_deg: u16,     wind_gust: Option<u16 >,     chmury: u8,     dt: u32 ) {     let city_weather_oracle_mut = dof::borrow_mut<u32, CityWeatherOracle>(&mut oracle.id, geoname_id); city_weather_oracle_mut.weather_id = pogoda_id; city_weather_oracle_mut.temp = temp; city_weather_oracle_mut.ciśnienie = ciśnienie; city_weather_oracle_mut.humidity = wilgotność; city_weather_oracle_mut.visibility = widoczność; city_weather_oracle_mut.wind_speed = prędkość_wiatru; city_weather_oracle_mut.wind_deg = stopień_wiatru; city_weather_oracle_mut.wind_gust = podmuch_wiatru; city_weather_oracle_mut.clouds = chmury; city_weather_oracle_mut.dt = dt; }

Integracja Wyroczni Pogodowej Sui

Używanie Sui Weather Oracle w projekcie Move wymaga dodania go jako zależności w projekcie

Przenieś.toml

plik:

[pakiet] nazwa = "..."wersja = "..." [zależności] Sui = { git = "<https://github.com/MystenLabs/sui.git>", subdir = "crate/sui- framework/packages/sui-framework", rev = "..." } oracle = { git = "<https://github.com/MystenLabs/apps>", subdir = "weather-oracle", rev = "db04fbd17d6ba91ade45c32f609b949fb47d209b " } [adresy] ... oracle = "0x8378b3bd39931aa74a6aa3a820304c1109d327426e4275183ed0b797eb6660a8"

Utworzenie tej zależności umożliwia konstruktorom importowanie pliku

wyrocznia::pogoda

moduł do kodu Move i korzystaj z Weather Oracle i jej funkcji. Sui Weather Oracle dostarcza w czasie rzeczywistym dane pogodowe, takie jak temperatura, wilgotność i prędkość wiatru, dla różnych miast na całym świecie. Funkcja city_weather_oracle_temp pobiera temperaturę miasta w stopniach Kelvina pomnożoną przez 1000, biorąc pod uwagę jego geoname_ID.

Na przykład następujący kod pobiera aktualną temperaturę w Paryżu we Francji (2988507):

użyj Oracle::weather::{WeatherOracle}; zabawa get_temp(weather_oracle: &WeatherOracle): u32 {     let geoname_id = 2988507; // Paryż, Francja     oracle::weather::city_weather_oracle_temp(weather_oracle, geoname_id) }

Łączenie danych z Sui

Rozwój dużych zbiorów danych w ciągu ostatnich kilku dziesięcioleci spowodował powstanie ogromnych repozytoriów reprezentujących wszelkiego rodzaju zjawiska i działania ze świata rzeczywistego, od prądów oceanicznych po przepływ ruchu na Manhattanie. Odpowiedzialne wykorzystanie tych danych skutkuje powstaniem aplikacji, które mają pozytywny wpływ na życie ludzi, niezależnie od tego, czy pomagają przewidywać zagrożenie pożarami lasów, czy udostępniają popularne bilety na koncerty w sprawiedliwej dystrybucji.

Rozprzestrzenianie się wyroczni na Sui zwiększy znaczenie aplikacji w codziennym życiu ludzi, czyniąc sieć niezbędną częścią nowoczesnej infrastruktury cyfrowej.