Новий Sui Weather Oracle надає розробникам дані про погоду для понад 1000 міст у всьому світі та служить унікальним генератором випадковості, який підходить для ігор і додатків для ставок, які вимагають надійного випадкового результату. Завдяки розумному контракту на основі Sui та серверній службі, яка отримує дані про погоду з OpenWeather API, кожен може інтегрувати дані про погоду у свій додаток.

SUI Weather Oracle надає таку інформацію, як температура, вологість і вітер, для будь-якого з підтримуваних міст. Оракул може використовуватися іншими смарт-контрактами або програмами, яким потрібна надійна та децентралізована інформація про погоду для різних цілей, таких як подорожі, страхування, сільське господарство, азартні ігри чи ігри.

Sui Weather Oracle дозволяє відстежувати погоду та інші програми, використовуючи дані OpenWeather API.

Однак використання погоди через її випадковість представляє інтригуючий варіант використання. Погода – одне з найбільш непередбачуваних і складних явищ природи. Синоптики роблять чудову роботу, здебільшого прогнозуючи дощ або сонячне небо, але деталі, такі як конкретні температури чи швидкість вітру, не під силу сучасній науці визначити.

Будучи фундаментальною концепцією в багатьох галузях науки, математики та техніки, випадковість може бути використана для створення безпечних криптографічних ключів, перевірки гіпотез або моделювання складних систем. Однак генерувати справжню випадковість нелегко, оскільки більшість фізичних або обчислювальних процесів певним чином детерміновані або упереджені. Використання даних про погоду як вхідних даних оракула забезпечує випадкові виходи, які рівномірно розподілені та не залежать від будь-яких попередніх виходів.

Дані Oracle у програмах

Оракули на Sui та інших блокчейнах служать каналами для даних поза мережею, включаючи спортивні результати, ціни на акції та погоду. Відображення цих даних безпосередньо в додатку, що є найбільш очевидним використанням, дозволяє розробникам створювати інструменти управління портфелем акцій, відстежувати погоду та футбольні рейтинги в реальному часі. Використання даних у такий спосіб може стати більш складним, звичайно, з додатками, які використовують спортивні результати для інформування фантастичних ліг як один із прикладів.

Ігри можуть базуватися безпосередньо на даних Oracle. Наприклад, оракул може надати шанси та результати різних ставок для змагань, таких як спортивні матчі, політичні вибори чи розіграші лотерей. Потім гравці можуть робити ставки на результати на основі коефіцієнтів, наданих оракулом.

Справи стають цікавішими, коли розробники використовують оракули, які пропонують непередбачувані дані для генерування випадковості. Наприклад, оракул може використовувати події реального світу, як-от дані про погоду, спортивні результати або ціни на акції, для створення випадкових результатів гри. Крім того, оракул може використовувати криптографічні методи, такі як хеш-функції або цифрові підписи, для створення випадкових чисел, які є безпечними та доступними для перевірки. Той факт, що дані Oracle надходять із перевіреного джерела, незалежного від програми, робить випадкові результати надійними.

Дані про погоду можна використовувати як початкове значення для визначення результатів дій персонажів у грі. (Джерело зображення: RPGMaker)

Випадковість на основі непередбачуваних даних від оракула може бути включена в ігрову механіку. Наприклад, у рольовій грі оракул може визначати успішність чи невдачу дії персонажа, як-от застосування заклинання, злом комп’ютера чи переконання NPC. Оракул також може впливати на ігровий світ, наприклад змінювати погоду, породжувати ворогів або запускати події. Гра може використовувати дані оракула для створення чесної та послідовної випадковості, на яку не впливають розробник гри чи гравець.

Оракул погоди Sui

Oracles увімкне нове покоління програм на Sui, перекидаючи дані реального світу на свою високопродуктивну платформу. Враховуючи доступність API OpenWeather і корисність його даних, оракул погоди є хорошим доповненням до Sui.

Випадки використання

Програма Sui Weather Oracle корисна для багатьох програм, які потребують даних про погоду, наприклад:

  • Випадковість: дані про погоду можна використовувати як джерело випадковості для різних цілей, наприклад для створення випадкових чисел, вибору переможців або створення унікальних NFT. Наприклад, генератор випадкових чисел. може використовувати температуру, вологість або швидкість вітру в певному місці в певний час як насіння.

  • Ставки та ігри: програми можуть використовувати дані Sui Weather Oracle, щоб увімкнути ставки на прогноз погоди, ігри на тему погоди або винагороди на основі погоди. Наприклад, гра може дозволити користувачам робити ставки на погоду в місті, або додаток може пропонувати користувачам NFT на основі погоди в різних місцях.

  • Інші випадки використання: програми для страхування, подорожей, освіти чи досліджень можуть використовувати дані про погоду. Наприклад, програми можуть враховувати дані про погоду, щоб розрахувати ризик стихійних лих, спланувати маршрут подорожі, навчити студентів погодним умовам або допомогти в проведенні наукових експериментів.

Структура

Sui Weather Oracle, який надає актуальну інформацію про погоду для 1000 міст по всьому світу, складається з трьох компонентів: зовнішньої служби, внутрішньої служби та смарт-контракту. Зовнішня служба OpenWeather API надає поточні дані про погоду з різних джерел. Внутрішньою службою є серверний оракул погоди, який кожні 10 хвилин отримує дані про погоду з API OpenWeather і оновлює погодні умови для кожного міста. Смарт-контракт — це контракт Sui Weather Oracle, який зберігає дані про погоду в блокчейні Sui та надає користувачам доступ до них у безпечний і прозорий спосіб. Користувачі також можуть використовувати дані про погоду для різних децентралізованих додатків, які залежать від погоди, таких як ігри.

Отримання знижок на зберігання

Sui Weather Oracle зменшує витрати на зберігання своїх даних у реальному часі в мережі за допомогою механізму знижок на зберігання. Sui підтримує ончейн-сховище у своїй моделі інфраструктури та токеноміки, додаючи плату за зберігання до плати за газ. Фонд, створений із плати за зберігання, допомагає відшкодовувати операторам мереж витрати на підтримку апаратного забезпечення для зберігання даних і обробки транзакцій. Щоб контролювати кількість даних у ланцюжку, видалення даних у ланцюжку надає знижку на фонд зберігання.

Sui Weather Oracle зберігає та оновлює дані про погоду в блокчейні. Адміністратор сплачує одноразову комісію за створення початкового списку об’єктів CityWeatherOracle і отримує знижку за оновлення даних про погоду для кожного міста. Знижка пропорційна кількості оновлених даних і частоті оновлень. Таким чином, адміністратор може зберігати та оновлювати дані про погоду в блокчейні за низьку вартість.

Використання Sui Object Display

Оракул погоди Sui використовує стандарт Sui Object Display для динамічного оновлення піктограми для кожного міста на основі поточних погодних умов, наприклад, із зображенням дощових хмар або сонця. Стандарт відображення об’єктів Sui — це система шаблонів, яка дозволяє керувати відображенням будь-якого типу об’єкта в мережі. Він використовує рядок шаблону, який можна замінити даними об’єкта, наприклад ідентифікатором погоди міста. Офчейн-дисплей обробляється серверною службою, яка надає піктограму для кожного з підтримуваних міст досліднику Sui. Значок вибирається із попередньо визначеного набору значків, які представляють різні погодні умови, наприклад сонячно, хмарно, дощ або сніг.

Стандарт Sui Object Display можна використовувати для обслуговування значків, що представляють різні погодні умови. (Зображення від coolvector на Freepik) Смарт-контракт Sui Weather Oracle

Смарт-контракт Sui Weather Oracle надає дані про погоду в режимі реального часу та історичні дані для 1000 місць у всьому світі та підтримує карбування погодних NFT на основі даних про погоду міста. Смарт-контракт також використовує стандарт Sui Object Display, що забезпечує динамічне та настроюване відображення даних про погоду та NFT про погоду в блокчейні. Розумний контракт виконує чотири основні функції:

add_city

, remove_city, update і mint.

The

oracle::погода

модуль визначає наступне:

AdminCap

, структура, яка представляє можливості адміністратора власника Oracle.

struct AdminCap має ключ, store { id: UID }

ПОГОДА

, структура, яка встановлює Publisher.

struct WEATHER знизився {}

WeatherOracle

, структура, представляє сам оракул. Він має поля id, address, name і description, які зберігають ідентифікатор оракула, адресу власника, ім'я та опис відповідно.

struct WeatherOracle має ключ {     id: UID,     address: address,     name: String,     description: String, }

CityWeatherOracle

, структура, яка представляє дані про погоду для певного міста. У ньому є поля id, geoname_id, name, country, latitude, positive_latitude, longitude, positive_longitude, weather_id, temp, pressure, humidity, visibility, wind_speed, wind_deg, wind_gust, clouds і dt, які зберігають унікальний ідентифікатор міста, ідентифікатор geoname, назву , країна, широта, довгота, ідентифікатор погоди, температура, тиск, вологість, видимість, швидкість вітру, напрямок вітру, порив вітру, хмарність і позначка часу відповідно.

struct CityWeatherOracle має ключ, store {     id: UID,     geoname_id: u32,     name: String,     country: String,     latitude: u32,     positive_latitude: bool,     longitude: u32,     positive_longitude: bool,     weather_id: u16,     temp: u32 ,     тиск: u32 ,     вологість: u8,     видимість: u16,     швидкість_вітру: u16,     градус_вітру: u16,     порив_вітру: Option<u16>,     хмарність: u8,     dt: u32 }

Ан

тепло

функція, яка ініціалізує контракт під час розгортання, створює новий екземпляр WeatherOracle і публікує його, а також створює новий екземпляр AdminCap і передає його відправнику.

fun init(otw: ПОГОДА, ctx: &mut TxContext) {     package::claim_and_keep(otw, ctx); let cap = AdminCap { id: object::new(ctx) }; transfer::share_object(WeatherOracle {         id: object::new(ctx),         address: tx_context::sender(ctx),         name: string::utf8(b"SuiMeteo"),         опис: string::utf8(b"A оракул погоди для публікації оновлених даних про погоду (температура, тиск, вологість, видимість, показники вітру та хмарності) на даний момент отримані з https://openweathermap.org, але це не гарантує його точність, повноту, надійність, придатність або доступність. Використовуйте його на свій власний ризик і на свій розсуд."),     }); transfer::public_transfer(cap, tx_context::sender(ctx)); }

The

add_city

публічна функція, яка дозволяє власнику AdminCap додавати нове місто до служби Oracle, надаючи його geoname_ID, назву, країну, широту та довготу. Функція створює новий екземпляр CityWeatherOracle із даними погоди за замовчуванням і додає його до оракула як динамічне поле, використовуючи geoname_ID як ключ.

public fun add_city(     _: &AdminCap,      oracle: &mut WeatherOracle,     geoname_id: u32,     name: String,     country: String,     latitude: u32,     positive_latitude: bool,     longitude: u32,     positive_longitude: bool,     ctx: &m ut TxContext ) {     dof:: add(&mut oracle.id, geoname_id,         CityWeatherOracle {           id: object::new(ctx),           geoname_id,           name,            country,            latitude,            positive_latitude,            longitude,            positive_longitude,             weather_id: 0,             температура: 0,             тиск: 0,             вологість: 0 ,             visibility: 0,             wind_speed: 0,             wind_deg: 0,             wind_gust: option::none(),             clouds: 0,             dt: 0          }     ); }

The

remove_city

публічна функція, яка дозволяє власнику AdminCap видалити існуюче місто зі служби Oracle, надавши його geoname_ID. Функція видаляє відповідний екземпляр CityWeatherOracle з динамічних полів оракула та видаляє об’єкт.

public fun remove_city(_: &AdminCap, oracle: &mut WeatherOracle, geoname_id: u32) {     let CityWeatherOracle { id, geoname_id: _, name: _, country: _, latitude: _, positive_latitude: _, longitude: _, positive_longitude: _ , weather_id: _, temp: _, тиск: _, вологість: _, видимість: _, wind_speed: _, wind_deg: _, wind_gust: _, хмари: _, dt: _ } = dof::remove(&mut oracle. id, geoname_id); object::delete(id); }

The

оновлення

публічна функція, яка дозволяє власнику оракула оновлювати дані про погоду для існуючого міста, надаючи його geoname_ID і нові дані про погоду. Функція змінює відповідний екземпляр CityWeatherOracle з новими даними про погоду.

public fun update(     _: &AdminCap,     oracle: &mut WeatherOracle,     geoname_id: u32,     weather_id: u16,     temp: u32,     pressure: u32,     humidity: u8,     visibility: u16,     wind_speed: u16,     wind_deg: u16 ,     порив_вітру: Option<u16 >,     clouds: u8,     dt: u32 ) {     let city_weather_oracle_mut = dof::borrow_mut<u32, CityWeatherOracle>(&mut oracle.id, geoname_id); city_weather_oracle_mut.weather_id = weather_id; city_weather_oracle_mut.temp = температура; city_weather_oracle_mut.pressure = тиск; city_weather_oracle_mut.humidity = вологість; city_weather_oracle_mut.visibility = видимість; city_weather_oracle_mut.wind_speed = швидкість_вітру; city_weather_oracle_mut.wind_deg = wind_deg; city_weather_oracle_mut.wind_gust = порив_вітру; city_weather_oracle_mut.clouds = хмари; city_weather_oracle_mut.dt = dt; }

Інтеграція Sui Weather Oracle

Використання Sui Weather Oracle у проекті Move вимагає додавання його як залежності в проекті

Move.toml

файл:

[package] name = "..."version = "..." [dependencies] Sui = { git = "<https://github.com/MystenLabs/sui.git>", subdir = "crates/sui- framework/packages/sui-framework", rev = "..." } oracle = { git = "<https://github.com/MystenLabs/apps>", subdir = "weather-oracle", rev = "db04fbd17d6ba91ade45c32f609b949fb47d209b " } [адреси] ... oracle = "0x8378b3bd39931aa74a6aa3a820304c1109d327426e4275183ed0b797eb6660a8"

Створення цієї залежності дозволяє розробникам імпортувати

oracle::погода

модуль у код Move і використовувати Weather Oracle та його функції. Sui Weather Oracle надає дані про погоду в реальному часі, такі як температура, вологість і швидкість вітру, для різних міст світу. Функція city_weather_oracle_temp отримує температуру міста в Кельвінах, помножену на 1000, враховуючи його geoname_ID.

Наприклад, наступний код отримує поточну температуру в Парижі, Франція (2988507):

використовувати oracle::weather::{WeatherOracle}; fun get_temp(weather_oracle: &WeatherOracle): u32 {     let geoname_id = 2988507; // Париж, Франція     oracle::weather::city_weather_oracle_temp(weather_oracle, geoname_id) }

Передача даних до Sui

Зростання обсягу великих даних за останні кілька десятиліть створило величезні сховища, що представляють усілякі явища та дії реального світу, від океанських течій до транспортних потоків на Мангеттені. Відповідальне використання цих даних призводить до створення додатків, які позитивно впливають на життя людей, чи то допомагають передбачити небезпеку лісових пожеж, чи роблять квитки на популярні концерти доступними за справедливим розподілом.

Поширення оракулів на Sui збільшить актуальність програм для повсякденного життя людей, зробивши мережу невід’ємною частиною сучасної цифрової інфраструктури.