Sui Weather Oracle yang baru memberikan data cuaca kepada pembangun untuk lebih dari 1.000 kota di seluruh dunia dan berfungsi sebagai generator keacakan yang unik, cocok untuk permainan dan aplikasi taruhan yang memerlukan hasil acak yang dapat dipercaya. Terdiri dari kontrak pintar berbasis Sui dan layanan backend yang mengambil data cuaca dari OpenWeather API, siapa pun dapat mengintegrasikan data cuaca ke dalam aplikasi mereka.

SUI Weather Oracle memberikan informasi seperti suhu, kelembapan, dan angin untuk kota mana pun yang didukungnya. Oracle dapat digunakan oleh kontrak atau aplikasi pintar lainnya yang memerlukan informasi cuaca yang andal dan terdesentralisasi untuk berbagai tujuan, seperti perjalanan, asuransi, pertanian, perjudian, atau permainan.

Sui Weather Oracle memungkinkan pelacakan cuaca dan aplikasi lain menggunakan data OpenWeather API.

Namun, penggunaan cuaca karena keacakannya menghadirkan kasus penggunaan yang menarik. Cuaca adalah salah satu fenomena alam yang paling tidak terduga dan kompleks. Peramal cuaca melakukan pekerjaan yang mengagumkan dalam memprediksi hujan atau langit cerah, tetapi hal-hal kecil, seperti suhu tertentu atau kecepatan angin, berada di luar jangkauan ilmu pengetahuan saat ini. 

Sebagai konsep dasar di banyak bidang sains, matematika, dan teknik, keacakan dapat digunakan untuk menghasilkan kunci kriptografi yang aman, menguji hipotesis, atau mensimulasikan sistem yang kompleks. Namun, menghasilkan keacakan yang sebenarnya tidaklah mudah, karena sebagian besar proses fisik atau komputasi bersifat deterministik atau bias dalam beberapa hal. Menggunakan data cuaca sebagai masukan oracle memberikan keluaran acak yang terdistribusi secara seragam dan tidak bergantung pada keluaran sebelumnya.

Data Oracle dalam aplikasi

Oracles di Sui dan blockchain lainnya berfungsi sebagai saluran ke data offchain, termasuk skor olahraga, harga saham, dan cuaca. Menampilkan data ini langsung di aplikasi, penggunaan yang paling jelas, memungkinkan pembuat membuat alat manajemen portofolio saham, pelacak cuaca, dan peringkat sepak bola real-time. Penggunaan data dengan cara ini bisa menjadi lebih kompleks, tentu saja, dengan aplikasi yang menggunakan skor olahraga untuk menginformasikan liga fantasi sebagai salah satu contohnya. 

Game mungkin didasarkan langsung pada data oracle. Misalnya, sebuah oracle dapat memberikan peluang dan hasil dari berbagai taruhan untuk kontes seperti pertandingan olahraga, pemilihan politik, atau undian lotere. Para pemain kemudian dapat memasang taruhan pada hasil berdasarkan peluang yang disediakan oleh oracle. 

Segalanya menjadi lebih menarik ketika pembuat menggunakan oracle yang menawarkan data tak terduga untuk menghasilkan keacakan. Misalnya, oracle dapat menggunakan kejadian di dunia nyata, seperti data cuaca, hasil olahraga, atau harga saham, untuk menciptakan hasil acak pada suatu pertandingan. Alternatifnya, oracle dapat menggunakan metode kriptografi, seperti fungsi hash atau tanda tangan digital, untuk menghasilkan angka acak yang aman dan dapat dibuktikan. Fakta bahwa data oracle berasal dari sumber yang dapat diverifikasi dan independen dari aplikasi membuat hasil keacakan dapat dipercaya.

Data cuaca dapat dijadikan sebagai benih keacakan untuk menentukan hasil tindakan karakter dalam sebuah game. (Sumber gambar: RPGMaker)

Keacakan berdasarkan data tak terduga dari oracle dapat dimasukkan ke dalam mekanisme permainan. Misalnya, dalam permainan roleplaying, oracle dapat menentukan berhasil tidaknya suatu tindakan karakter, seperti merapal mantra, meretas komputer, atau membujuk NPC. Oracle juga dapat mempengaruhi dunia game, seperti mengubah cuaca, memunculkan musuh, atau memicu peristiwa. Game dapat menggunakan data oracle untuk menciptakan keacakan yang adil dan konsisten yang tidak dipengaruhi oleh pengembang game atau pemainnya.

Oracle Cuaca Sui

Oracles akan mengaktifkan aplikasi generasi baru di Sui, menjembatani data dunia nyata ke platform berkinerja tinggi. Mengingat aksesibilitas OpenWeather API dan kegunaan datanya, ramalan cuaca bisa menjadi tambahan yang bagus untuk Sui. 

Kasus penggunaan

Sui Weather Oracle berguna untuk banyak aplikasi yang membutuhkan data cuaca, seperti:

  • Keacakan: Data cuaca dapat digunakan sebagai sumber keacakan untuk berbagai tujuan, seperti menghasilkan angka acak, memilih pemenang, atau membuat NFT unik. Misalnya, generator nomor acak. dapat menggunakan suhu, kelembapan, atau kecepatan angin di lokasi tertentu pada waktu tertentu sebagai benih.

  • Taruhan dan permainan: Aplikasi dapat menggunakan data Sui Weather Oracle untuk mengaktifkan taruhan prediksi cuaca, permainan bertema cuaca, atau hadiah berbasis cuaca. Misalnya, sebuah game dapat memungkinkan pengguna bertaruh pada cuaca suatu kota, atau aplikasi dapat menawarkan NFT kepada pengguna berdasarkan cuaca di lokasi yang berbeda.

  • Kasus penggunaan lainnya: Aplikasi untuk asuransi, perjalanan, pendidikan, atau penelitian dapat menggunakan data cuaca. Misalnya, aplikasi dapat memperhitungkan data cuaca untuk menghitung risiko bencana alam, merencanakan rencana perjalanan, mengajari siswa tentang pola cuaca, atau membantu menyiapkan eksperimen ilmiah.

Struktur

Sui Weather Oracle, yang memberikan informasi cuaca terkini untuk 1.000 kota di seluruh dunia, terdiri dari tiga komponen: layanan eksternal, layanan internal, dan kontrak pintar. Layanan eksternal, OpenWeather API, menyediakan data cuaca terkini dari berbagai sumber. Layanan internalnya adalah back-end ramalan cuaca, yang mengambil data cuaca dari OpenWeather API setiap 10 menit dan memperbarui kondisi cuaca untuk setiap kota. Kontrak pintarnya adalah kontrak Sui Weather Oracle, yang menyimpan data cuaca di blockchain Sui dan memungkinkan pengguna mengaksesnya dengan cara yang aman dan transparan. Pengguna juga dapat memanfaatkan data cuaca untuk berbagai aplikasi terdesentralisasi yang mengandalkan cuaca, seperti game.

Mendapatkan rabat penyimpanan

Sui Weather Oracle mengurangi biaya penyimpanan data real-time di jaringan melalui mekanisme rabat penyimpanan. Sui mendukung penyimpanan onchain dalam model infrastruktur dan tokenomiknya dengan menambahkan biaya penyimpanan ke biaya bahan bakarnya. Dana yang dihasilkan dari biaya penyimpanan membantu mengganti biaya operator jaringan untuk memelihara perangkat keras untuk menyimpan data dan memproses transaksi. Sebagai cara untuk menjaga kuantitas data onchain tetap terkendali, menghapus data onchain akan memberikan potongan dana penyimpanan. 

Sui Weather Oracle menyimpan dan memperbarui data cuaca di blockchain. Admin membayar biaya satu kali untuk membuat daftar awal objek CityWeatherOracle, dan menerima potongan harga untuk memperbarui data cuaca setiap kota. Rabatnya sebanding dengan jumlah data yang diperbarui dan frekuensi pembaruan. Dengan cara ini, admin dapat menyimpan dan memperbarui data cuaca di blockchain dengan biaya rendah.

Memanfaatkan Tampilan Objek Sui

Sui Weather Oracle menggunakan standar Sui Object Display untuk memperbarui ikon setiap kota secara dinamis berdasarkan kondisi cuaca saat ini, misalnya menampilkan awan hujan atau matahari. Standar Tampilan Objek Sui adalah mesin templat yang memungkinkan manajemen onchain tampilan offchain untuk semua jenis objek. Ini menggunakan string templat yang bisa diganti dengan data objek, seperti ID cuaca kota. Tampilan offchain ditangani oleh layanan back-end yang menyajikan ikon untuk setiap kota yang didukung ke penjelajah Sui. Ikon dipilih dari kumpulan ikon yang telah ditentukan sebelumnya yang mewakili berbagai kondisi cuaca, seperti cerah, berawan, hujan, dan bersalju.

Standar Tampilan Objek Sui dapat dimanfaatkan untuk menyajikan ikon yang mewakili kondisi cuaca berbeda. (Gambar oleh coolvector di Freepik) Kontrak pintar Sui Weather Oracle 

Kontrak pintar Sui Weather Oracle menyediakan data cuaca real-time dan historis untuk 1,000 lokasi di seluruh dunia dan mendukung pencetakan NFT cuaca berdasarkan data cuaca suatu kota. Kontrak pintar juga menggunakan standar Sui Object Display, memungkinkan tampilan data cuaca dan NFT cuaca yang dinamis dan dapat disesuaikan di blockchain. Kontrak pintar memiliki empat fungsi utama:

tambahkan_kota

, hapus_kota, perbarui, dan buat. 

Itu

ramalan::cuaca

modul mendefinisikan hal berikut:

AdminCap

, sebuah struct yang mewakili kemampuan administrator dari pemilik oracle.

struct AdminCap memiliki kunci, simpan { id: UID }

CUACA

, sebuah struct yang menyiapkan Publisher.

struct WEATHER mengalami penurunan {}

Oracle Cuaca

, sebuah struct, mewakili oracle itu sendiri. Ini memiliki bidang id, alamat, nama, dan deskripsi yang masing-masing menyimpan pengidentifikasi Oracle, alamat pemilik, nama, dan deskripsi.

struct WeatherOracle memiliki kunci {     id: UID,     alamat: alamat,     nama: String,     deskripsi: String, }

KotaWeatherOracle

, sebuah struct yang mewakili data cuaca untuk kota tertentu. Ini memiliki bidang id, geoname_id, nama, negara, lintang, lintang_positif, bujur, bujur_positif, id_cuaca, suhu, tekanan, kelembaban, visibilitas, kecepatan_angin, derajat_angin, embusan angin, awan, dan dt yang menyimpan ID unik kota, ID geoname, nama , negara, lintang, bujur, ID cuaca, suhu, tekanan, kelembapan, jarak pandang, kecepatan angin, arah angin, hembusan angin, tingkat kekeruhan, dan stempel waktu.

struct CityWeatherOracle memiliki kunci, simpan {     id: UID,     geoname_id: u32,     nama: String,     negara: String,     garis lintang: u32,     garis lintang_positif: bool,     garis bujur: u32,     garis bujur_positif: bool,     id_cuaca: u16,    suhu: u32,     tekanan: u32 ,     kelembaban: u8,     visibilitas: u16,     kecepatan angin: u16,     dingin_angin: u16,     hembusan angin: Option<u16>,     awan: u8,     dt: u32 }

Sebuah

panas

fungsi yang menginisialisasi kontrak selama penerapan, membuat instance baru WeatherOracle dan membagikannya secara publik, serta membuat instance AdminCap baru dan mentransfernya ke pengirim.

fun init(otw: CUACA, ctx: &mut TxContext) {     package::claim_and_keep(otw, ctx);     biarkan cap = AdminCap { id: objek::baru(ctx) };     transfer::share_object(WeatherOracle {         id: object::new(ctx),         alamat: tx_context::sender(ctx),         nama: string::utf8(b"SuiMeteo"),         deskripsi: string::utf8(b"A ramalan cuaca untuk memposting pembaruan cuaca (suhu, tekanan, kelembaban, visibilitas, metrik angin, dan kondisi awan) untuk kota-kota besar di seluruh dunia. Saat ini data diambil dari https://openweathermap.org hal ini tidak menjamin keakuratan, kelengkapan, keandalan, kesesuaian, atau ketersediaannya. Gunakan dengan risiko dan kebijaksanaan Anda sendiri."),     });     transfer::public_transfer(cap, tx_context::sender(ctx)); }

Itu

tambahkan_kota

fungsi publik, yang memungkinkan pemilik AdminCap menambahkan kota baru ke layanan Oracle dengan memberikan geoname_ID, nama, negara, garis lintang, dan garis bujur. Fungsi ini membuat instance baru CityWeatherOracle dengan data cuaca default dan menambahkannya ke Oracle sebagai bidang dinamis, menggunakan geoname_ID sebagai kuncinya.

kesenangan publik add_city(     _: &AdminCap,      oracle: &mut WeatherOracle,      geoname_id: u32,     nama: String,     negara: String,     lintang: u32,     garis lintang_positif: bool,     garis bujur: u32,     garis bujur_positif: bool,     ctx: &mut TxContext ) {     dof:: add(&mut oracle.id, geoname_id,          CityWeatherOracle {             id: object::new(ctx),             geoname_id,             nama,              negara,              lintang,            garis lintang_positif,              garis bujur,             garis bujur_positif,             id_cuaca: 0,             suhu: 0,             tekanan: 0,             kelembaban: 0 ,              jarak pandang: 0,             kecepatan angin: 0,             tingkat_angin: 0,            hembusan angin: opsi:: tidak ada(),             awan: 0,             dt: 0         }     ); }

Itu

hapus_kota

fungsi publik, yang memungkinkan pemilik AdminCap menghapus kota yang ada dari layanan Oracle dengan memberikan geoname_ID-nya. Fungsi ini menghapus instance CityWeatherOracle yang sesuai dari bidang dinamis Oracle dan menghapus objeknya.

kesenangan publik delete_city(_: &AdminCap, oracle: &mut WeatherOracle, geoname_id: u32) {     biarkan CityWeatherOracle { id, geoname_id: _, nama: _, negara: _, garis lintang: _, garis lintang_positif: _, garis bujur: _, garis bujur_positif: _ , ID_cuaca: _, suhu: _, tekanan: _, kelembaban: _, jarak pandang: _, kecepatan_angin: _, derajat_angin: _, hembusan angin: _, awan: _, dt: _ } = dof::remove(&mut Oracle. id, nama_geo_id);     objek::hapus(id); }

Itu

memperbarui

fungsi publik, yang memungkinkan pemilik oracle memperbarui data cuaca untuk kota yang ada dengan memberikan geoname_ID dan data cuaca baru. Fungsi ini mengubah instance CityWeatherOracle yang sesuai dengan data cuaca baru.

pembaruan kesenangan publik (     _: &AdminCap,     oracle: &mut WeatherOracle,     geoname_id: u32,     weather_id: u16,     suhu: u32,     tekanan: u32,     kelembaban: u8,     visibilitas: u16,     kecepatan angin: u16,     wind_deg: u16,     wind_gust: Opsi<u16 >,     awan: u8,     dt: u32 ) {     biarkan city_weather_oracle_mut = dof::borrow_mut<u32, CityWeatherOracle>(&mut oracle.id, geoname_id);     city_weather_oracle_mut.weather_id = id_cuaca;     city_weather_Oracle_mut.temp = suhu;     city_weather_Oracle_mut.pressure = tekanan;     city_weather_Oracle_mut.humidity = kelembapan;     city_weather_Oracle_mut.visibility = visibilitas;     city_weather_Oracle_mut.wind_speed = kecepatan_angin;     city_weather_Oracle_mut.wind_deg = angin_deg;     city_weather_Oracle_mut.wind_gust = angin_gust;     city_weather_Oracle_mut.clouds = awan;     kota_weather_Oracle_mut.dt = dt; }

Mengintegrasikan Oracle Cuaca Sui

Menggunakan Sui Weather Oracle dalam proyek Pindah memerlukan penambahannya sebagai ketergantungan dalam proyek

Pindah.toml

mengajukan:

[paket] nama = "..."version = "..." [dependensi] 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 " } [alamat] ... Oracle = "0x8378b3bd39931aa74a6aa3a820304c1109d327426e4275183ed0b797eb6660a8"

Membuat ketergantungan ini memungkinkan pembangun mengimpor

ramalan::cuaca

modul ke dalam kode Pindahkan dan manfaatkan Weather Oracle dan fungsinya. Sui Weather Oracle menyediakan data cuaca real-time, seperti suhu, kelembapan, dan kecepatan angin, untuk berbagai kota di seluruh dunia. Fungsi city_weather_oracle_temp mengambil suhu kota dalam Kelvin dikalikan 1.000, berdasarkan geoname_ID-nya.

Misalnya, kode berikut mengambil suhu saat ini di Paris, Prancis (2988507):

gunakan Oracle::weather::{WeatherOracle}; get_temp(weather_Oracle: &WeatherOracle): u32 {     biarkan geoname_id = 2988507; // Paris, Prancis     oracle::weather::city_weather_oracle_temp(weather_oracle, geoname_id) }

Menjembatani data ke Sui

Maraknya big data selama beberapa dekade terakhir telah menciptakan repositori luas yang mewakili segala macam fenomena dan aktivitas dunia nyata, mulai dari arus laut hingga arus lalu lintas di Manhattan. Penggunaan data ini secara bertanggung jawab akan menghasilkan aplikasi yang memberikan dampak positif terhadap kehidupan masyarakat, baik itu membantu memprediksi bahaya kebakaran hutan atau membuat tiket konser populer tersedia dalam distribusi yang adil. 

Penyebaran oracle di Sui akan meningkatkan relevansi aplikasi dengan kehidupan sehari-hari masyarakat, menjadikan jaringan sebagai bagian tak terpisahkan dari infrastruktur digital modern.