使用Sui天气预言机获取全球实时天气数据

新的Sui天气预言机为全球1000多个城市的建设者提供天气数据,并作为一个独特的随机数生成器,适用于需要可信赖的随机结果的游戏和投注应用。它由基于Sui的智能合约和一个从OpenWeather API获取天气数据的后端服务组成,任何人都可以将天气数据集成到他们的应用中。

Sui天气预言机为其支持的任何城市提供温度、湿度和风力等信息。这个预言机可以被其他需要可靠和去中心化的天气信息的智能合约或应用程序使用,比如旅行、保险、农业、竞猜或游戏等各种用途。

Sui天气预言机可以实现使用OpenWeather API追踪天气和其他应用数据

天气是自然界中最不可预测和复杂的现象之一,利用天气的随机性可以提供一个有趣的用例。天气预报员在很大程度上做了一项令人钦佩的工作,预测雨水或晴天,诸如特定温度或风速之类的细枝末节超出了目前科学的范畴。

作为科学、数学和工程许多领域的基本概念,随机性可以用于生成安全的加密密钥、测试假设或模拟复杂系统。然而,生成真正的随机性并不容易,因为大多数物理或计算过程在某种程度上是确定性或有偏差的。使用天气数据作为预言机输入提供了均匀分布且独立于任何先前输出的随机输出。

应用中的预言机数据

Sui和其他区块链上的预言机充当通道,连接到链外数据,包括体育比分、股票价格和天气。直接在应用中显示这些数据是最明显的用途,使得开发者可以创建股票投资组合管理工具、天气追踪器和实时足球排名。当然,以这种方式使用数据可能变得更加复杂,比如应用程序使用体育比分来为幻想联赛提供信息就是一个例子。

游戏可以直接基于预言机数据构建。例如,预言机可以提供各种竞猜比赛的赔率和结果,比如体育比赛、彩票抽奖。

当开发者使用提供不可预测数据的预言机来生成随机性时,事情变得更加有趣。例如,一个预言机可以使用真实世界的事件,比如天气数据、体育赛果或股票价格,为游戏创建随机结果。另外,预言机可以使用密码学方法,比如哈希函数或数字签名,生成安全且可证明的随机数。预言机数据来自于一个可验证的独立于应用的来源,这使得随机结果具有可信度。

天气数据可以作为随机性的种子,来决定游戏中角色行动的结果(图片来源:RPGMaker)

基于预言机不可预测数据的随机性可以被融入游戏机制。例如,在角色扮演游戏中,预言机可以决定角色行动的成功或失败,比如施放法术、黑客入侵电脑或说服NPC。预言机也可以影响游戏世界,比如改变天气、生成敌人或触发事件。游戏可以使用预言机的数据来创建一个公平且一致的随机性,而不受游戏开发者或玩家的影响。

Sui天气预言机

预言机将使Sui平台上的新一代应用成为可能,将现实世界的数据连接到其高性能平台上。鉴于OpenWeather API的易用性和其数据的实用性,天气预言机是Sui的一个很好的补充。

使用案例

Sui天气预言机对许多需要天气数据的应用非常有用,例如:

  • 随机性:天气数据可以用作各种目的的随机源,比如生成随机数、选择获胜者或创建独特的NFT。例如,一个随机数生成器可以使用特定位置在特定时间的温度、湿度或风速作为种子。
  • 竞猜和游戏:应用可以使用Sui天气预言机的数据来实现天气预测、以天气为主题的游戏或基于天气的奖励。例如,一个游戏可以让用户竞猜一个城市的天气,或者一个应用可以根据不同地点的天气为用户提供NFT。
  • 其他用例:保险、旅行、教育或研究的应用可以使用天气数据。例如,应用可以将天气数据纳入计算自然灾害风险、规划旅行行程、教授学生天气模式或协助设置科学实验等方面。

预言机结构

Sui天气预言机为全球1000多个城市提供最新的天气信息,包括三个组件:一个外部服务、一个内部服务和一个智能合约。外部服务是OpenWeather API,提供来自各种来源的当前天气数据。内部服务是天气预言机的后端,每10分钟从OpenWeather API获取天气数据,并更新每个城市的天气状况。智能合约是Sui天气预言机合约,将天气数据存储在Sui区块链上,并允许用户以安全透明的方式访问。用户还可以利用天气数据开发各种依赖于天气的去中心化应用,比如游戏。

赚取存储返利

Sui天气预言机通过存储返利机制来减轻将其实时数据存储在网络上的成本。Sui支持在其基础设施和token经济模型中进行链上存储,通过在其Gas费中增加存储费用来实现。从存储费用中产生的资金有助于补偿网络运营商维护硬件以存储数据和处理交易的成本。为了控制链上数据的数量,删除链上数据将产生存储基金返利。

Sui天气预言机将天气数据存储并更新到区块链上。管理员支付一次性费用以创建初始的CityWeatherOracle对象列表,并在更新每个城市的天气数据时获得返利。返利与更新的数据量和频率成比例。通过这种方式,管理员可以以较低的成本在区块链上存储和更新天气数据。

利用Sui对象显示

Sui天气预言机使用Sui对象显示标准来根据当前天气条件动态更新每个城市的图标,例如显示雨云或太阳。Sui对象显示标准是一个模板引擎,允许对任何类型的对象进行链上管理和链下显示。它使用一个模板字符串,可以用对象的数据进行替换,比如城市的天气ID。链下显示由后端服务处理,向Sui资源浏览器提供每个受支持城市的图标。图标来自一个预定义的图标集,代表不同的天气条件,比如晴天、多云、雨天和雪天。

Sui对象显示标准可用于显示代表不同天气条件的图标(图片由Freepik上的coolvector提供)

Sui Weather Oracle智能合约

Sui天气预言机智能合约为全球1000多个地点提供实时和历史天气数据,并支持基于城市天气数据铸造天气NFT。该智能合约还使用了Sui对象显示标准,使得在区块链上动态且可定制地显示天气数据和天气NFT成为可能。该智能合约有四个主要功能:add_cityremove_cityupdatemint

oracle::weather模块定义了以下内容:

AdminCap结构体代表预言机所有者的管理员权限。

struct AdminCap has key, store { id: UID }

WEATHER结构体代表设置一个发布者。

struct WEATHER has drop {}

WeatherOracle结构体代表预言机本身,它有idaddressnamedescription字段,分别代表存储预言机的标识符、所有者地址、名称和描述。

struct WeatherOracle has key {id: UID,address: address,name: String,description: String,
}

CityWeatherOracle结构体代表特定城市的天气数据。它有id(城市的唯一ID)、geoname_id(地理位置名称ID)、name(名称)、 country(国家)、latitude(纬度)、positive_latitude(正纬度)、longitude(经度)、positive_longitude(正经度)、weather_id(天气ID)、temp(温度)、pressure(压力)、humidity(湿度)、visibility(能见度)、wind_speed(风速)、wind_deg(风向)、wind_gust(阵风)、clouds(云量)和dt(时间戳)等字段。

struct CityWeatherOracle has key, 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,pressure: u32,humidity: u8,visibility: u16,wind_speed: u16,wind_deg: u16,wind_gust: Option<u16>,clouds: u8,dt: u32
}

一个init函数,在部署期间初始化合约,创建WeatherOracle的新实例并公开共享它,同时创建AdminCap的新实例并将其转移到发送者。

fun init(otw: WEATHER, 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"),description: string::utf8(b"A weather oracle for posting weather updates (temperature, pressure, humidity, visibility, wind metrics and cloud state) for major cities around the world. Currently the data is fetched from https://openweathermap.org. SuiMeteo provides the best available information, but it does not guarantee its accuracy, completeness, reliability, suitability, or availability. Use it at your own risk and discretion."),});transfer::public_transfer(cap, tx_context::sender(ctx));
}

add_city公共函数,允许AdminCap的所有者通过提供geoname_id(地理位置名称ID)、name(名称)、country(国家)、latitude(纬度)和longitude(经度)向预言机服务添加新的城市。该函数创建一个带有默认天气数据的CityWeatherOracle新实例,并将其作为动态字段添加到预言机中,使用geoname_id作为key。

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: &mut 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,temp: 0,pressure: 0,humidity: 0,visibility: 0,wind_speed: 0,wind_deg: 0,wind_gust: option::none(),clouds: 0,dt: 0});
}

remove_city公共函数,允许AdminCap的所有者通过提供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: _, pressure: _, humidity: _, visibility: _, wind_speed: _, wind_deg: _, wind_gust: _, clouds: _, dt: _ } = dof::remove(&mut oracle.id, geoname_id);object::delete(id);
}

update公共函数,允许预言机所有者通过提供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,wind_gust: 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 = temp;city_weather_oracle_mut.pressure = pressure;city_weather_oracle_mut.humidity = humidity;city_weather_oracle_mut.visibility = visibility;city_weather_oracle_mut.wind_speed = wind_speed;city_weather_oracle_mut.wind_deg = wind_deg;city_weather_oracle_mut.wind_gust = wind_gust;city_weather_oracle_mut.clouds = clouds;city_weather_oracle_mut.dt = dt;
}

集成Sui天气预言机

在Move项目中使用Sui天气预言机需要将其作为依赖项添加到项目的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" }[addresses]
...
oracle = "0x8378b3bd39931aa74a6aa3a820304c1109d327426e4275183ed0b797eb6660a8"

创建这个依赖项使得开发者可以在Move代码中导入oracle::weather模块,并利用天气预言机及其函数。Sui天气预言机为全球不同城市提供实时天气数据,如温度、湿度和风速。city_weather_oracle_temp函数通过给定geoname_ID,检索该城市以开尔文为单位乘以1,000的温度。

例如,以下代码获取法国巴黎(2988507)当前的温度:

use oracle::weather::{WeatherOracle};fun get_temp(weather_oracle: &WeatherOracle): u32 {let geoname_id = 2988507; // Paris, Franceoracle::weather::city_weather_oracle_temp(weather_oracle, geoname_id)
}

将数据桥接到Sui

过去几十年中大数据的崛起创造了庞大的数据库,代表了各种真实世界的现象和活动,从海洋洋流到曼哈顿的交通流。对这些数据的负责使用会产生对人们生活有积极影响的应用程序,无论是帮助预测森林火灾危险还是以公平方式提供热门音乐会门票。

在Sui上预言机的传播将增加应用程序与人们日常生活的相关性,使得该网络成为现代数字基础设施中不可或缺的一部分。


关于 Sui Network

Sui是基于第一原理重新设计和构建而成的L1公有链,旨在为创作者和开发者提供能够承载Web3中下一个十亿用户的开发平台。Sui上的应用基于Move智能合约语言,并具有水平可扩展性,让开发者能够快速且低成本支持广泛的应用开发。获取更多信息:https://linktr.ee/sui_apac

官网|Twitter|Discord|英文电报群|中文电报群

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/178419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloudAlibaba之Nacos——详细讲解

目录 一、SpringCloudAlibaba简介 1. spring cloud alibaba 特点 2.springcloud 组件 二、环境搭建 1.构建项目并引入依赖 三、Nacos 1.什么是Nacos 2.安装Nacos 3.启动安装服务 4.访问nacos的web服务管理界面 四、开发服务注册到nacos 1.创建项目并引入依赖 2.配置注册地…

【Linux】了解进程的基础知识

进程 1. 进程的概念1.1 进程的理解1.2 Linux下的进程1.3 查看进程属性1.4 getpid和getppid 2. 创建进程3. 进程状态4. 进程优先级5. 进程切换6. 环境变量7. 本地变量与内建命令 1. 进程的概念 一个已经加载到内存中的程序&#xff0c;叫做进程&#xff08;也叫任务&#xff09…

Python+Selenium WebUI自动化框架 -- 基础操作封装

前言&#xff1a; 封装Selenium基本操作&#xff0c;让所有页面操作一键调用&#xff0c;让UI自动化框架脱离高成本、低效率时代&#xff0c;将用例的重用性贯彻到极致&#xff0c;让烦人的PO模型变得无所谓&#xff0c;让一个测试小白都能编写并实现自动化。 知识储备前提&a…

中小型公司如何搭建运维平台,rancher、kubersphere、rainbond

很多开发人员应该是了解过运维发布相关的平台或实际操作过应用发布&#xff0c;但又通常不是十分熟悉。在一个初创公司&#xff0c;或者没有成熟的运维发布平台的公司&#xff0c;如果让你来搭建一套发布平台&#xff0c;你应该如何去抉择呢&#xff1f; 这里我简单介绍几种。…

【Linux】:信号在内核里的处理

信号的发送和保存 一.内核中的信号处理二.信号集操作函数1.一些信号函数2.sigprocmask3.sigpending4.写代码 三.信号在什么时候处理的四.再谈地址空间 一.内核中的信号处理 1.实际执行信号的处理动作称为信号递达(Delivery )2.信号从产生到递达之间的状态,称为信号未决(Pending…

vue找依赖包的网址

https://www.npmjs.com/ 浅收藏一下

心大数据结构题型

选择题 2021 数据处理的单位&#xff1a;数据元素 矩阵压缩存储 2022 ①单链表头插法选择 ②矩阵压缩存储&#xff0c;行优先 ③删除链表节点的时间复杂度 ④稀疏矩阵存储 ⑤平衡二叉树时间复杂度 ⑥栈和队列的出队&#xff0c;问栈的大小至少多少 ⑦拓扑排序 ⑧参考书 360…

30.0/集合/ArrayList/LinkedList

目录 30.1什么是集合? 30.1.2为什么使用集合 30.1.3自己创建一个集合类 30.1.3 集合框架有哪些? 30.1.2使用ArrayList集合 30.2增加元素 30.3查询的方法 30.4删除 30.5 修改 30.6泛型 30.1什么是集合? 我们之前讲过数组&#xff0c;数组中它也可以存放多个元素。集合…

Cenos7系统通过链接一键安装LAMP项目环境(linux,apache,mysql,php)

前言&#xff1a;嫌装环境麻烦&#xff0c;以下介绍自动安装环境的方法 一.环境配置 根据自己需要选择 操作系统&#xff1a;CenOS 7.x以上Web服务器&#xff1a;Apache 2.4数据库&#xff1a;MySQL 5.7开发框架&#xff1a;ThinkPHP 5.0&#xff08;PHP5.0以上&#xff09;…

【Web】NewStarCtf Week2 个人复现

目录 ①游戏高手 ②include 0。0 ③ez_sql ④Unserialize&#xff1f; ⑤Upload again! ⑥ R!!C!!E!! ①游戏高手 经典前端js小游戏 检索与分数相关的变量 控制台直接修改分数拿到flag ②include 0。0 禁了base64和rot13 尝试过包含/var/log/apache/access.log,ph…

Git 入门指南

什么是 Git&#xff1f; Git 的目前最流行的分布式版本控制软件&#xff0c;可以帮助我们高效敏捷的处理任何项目。 版本管理 要理解 Git 我们首先要理解版本管理。 版本管理就是开发过程中用于管理对文件、目录或者工程等内容的修改历史&#xff0c;可以让我们方便的查看历史…

java学习part20内部类

116-面向对象(高级)-类的成员之五&#xff1a;内部类_哔哩哔哩_bilibili 1.内部类

在Anaconda中用命令行安装环境以及安装包

一、下载Anaconda 下载地址 二、创建环境 1. 打开Anaconda命令行 2.创建环境 conda create -n 环境名称 python3.10(需要的python版本号) 3.激活环境 activate 环境名4.下载安装包 pip install 模块名 -i https://pypi.tuna.tsinghua.edu.cn/simple5.下载torch 官网&…

Python语言学习笔记之三(字符编码)

本课程对于有其它语言基础的开发人员可以参考和学习&#xff0c;同时也是记录下来&#xff0c;为个人学习使用&#xff0c;文档中有此不当之处&#xff0c;请谅解。 什么是字符编码 计算机从本质上来说只认识二进制中的0和1&#xff0c;字符编码(Character Encoding) 是一种将…

【JavaScript框架】Vue与React中的组件框架概念

组件框架是用于构建应用程序的工具&#xff0c;以便将UI和逻辑划分为单独的可重用组件。目前的组件框架包括React、Vue、Angular、Ember、Svelte等。 Vue和React使用了常见的框架概念&#xff0c;如处理状态、道具、引用、生命周期挂钩、事件等。这两个框架在当今的web开发中被…

项目中高并发如何处理

在项目中处理高并发主要需要考虑以下几个方面的策略&#xff1a; 优化数据库设计&#xff1a;使用合适的数据结构、索引和查询优化技术可以显著提高数据库的响应性能&#xff1b;分库分表使用缓存&#xff1a;缓存是一种非常有效的处理高并发的方法。通过将常用的数据或结果保…

Spring源码解读之创建bean

本文章我们会解读一下Spring如何根据beanDefinition创建bean的&#xff1b; 代码入口&#xff1a; AnnotationConfigApplicationContext applicationContext new AnnotationConfigApplicationContext(AppConfig.class);applicationContext.refresh(); 当spring执行refresh(…

Jmeter+influxdb+grafana监控平台在windows环境的搭建

原理&#xff1a;Jmeter采集的数据存储在infuxdb数据库中&#xff0c;grafana将数据库中的数据在界面上进行展示 一、grafana下载安装 Download Grafana | Grafana Labs 直接选择zip包下载&#xff0c;下载后解压即可&#xff0c;我之前下载过比较老的版本&#xff0c;这里就…

在 The Sandbox 设置总部,SCB 10X 和 T-POP 为 4EVE 元宇宙音乐会揭幕

协作学习为全球粉丝提供了无限的可能性&#xff0c;让他们通过革命性的元宇宙体验沉浸在泰国流行文化中。 作为 SCBX 集团背后的创新力量&#xff0c;SCB 10X 很高兴宣布与 T-POP Incorporation 展开开创性合作&#xff0c;T-POP Incorporation 是泰国流行文化在全球舞台上的领…

鸿蒙开发已成新趋势

随着华为鸿蒙操作系统的快速崭露头角&#xff0c;鸿蒙开发已然成为当前技术领域的热门新趋势。本文将深入探讨鸿蒙开发的重要性和独特优势&#xff0c;并详细介绍一些关键的鸿蒙开发技术和工具&#xff0c;以及它们对开发者个人和整个行业带来的深远影响。 首先&#xff0c;鸿蒙…