区块链Oracle预言机实现教程【含代码】

区块链的封闭特性使得智能合约无法直接获取外部数据,预言机/Oracle作为桥梁,提供可信数据服务。本文介绍了预言机的作用、实现原理,并通过天气数据预言机WeatherOracle的实现过程,展示了如何创建和使用预言机。涉及智能合约、预言机服务、预言机智能合约实现、预言机服务和天气事件的利用服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

区块链本身是封闭的。区块链的确定性模型基于这样一个事实:在交易执行时区块链不能执行任何来自外部的逻辑,所有的外部数据只能通过交易进入到系统中。预言机/Oracle就是通过交易为智能合约提供可信数据的服务。Oracle虽然听起来神秘,但实现并不复杂,在这篇文章里,我们将介绍预言机的作用以及运作原理,并通过天气数据预言机WeatherOracle的完整实现过程,来帮助你快速掌握区块链预言机/Oracle的精髓。

区块链开发课程精选

1、为什么智能合约需要预言机/Oracle?

在智能合约中执行的逻辑不可以执行区块链之外的任何操作,例如它不可以访问互联网上的web服务。外部数据进入智能合约的唯一方法是将其置入一个交易中,通过向系统发送一个新的交易来触发区块链状态的更新。

试着考虑一下,如果智能合约在执行时可以访问外部的一个API来获取数据,会出现什么情况?

如果今天部署这个合约,那么API可能会返回如下的数据:

{ "foo": "bar" }

但是明天再部署时,API可能就会返回新的数据,例如:

{ "foo": "baz" }

那么可以想像,一个月以后如果有人进行以太坊区块链的同步,这个智能合约就会被执行,但是API的响应数据是和一个月之前不同的,这就会导致新同步的
区块链状态不同于之前已经存在的节点状态。

这就不再是完全自确定的区块链了。经历相同的同步过程,我的区块链和你的区块链却不一样!

让我们再换个说法:给定一组区块,一个节点必须能够从零开始重现区块链的最终状态,而无需互联网连接。

那么这一点对于智能合约的开发者意味着什么?Oralce(预言机),开发者必须构造一个预言机来和实现智能合约与外部世界的交互。

2、如何实现一个简单的预言机/Oracle?

现在让我们创建一个简单的预言机/Oracle,来将外部的天气数据传入智能合约:

oracle arch

在最底层的区块链平台,我们需要部署一个智能合约,这个合约有一个方法updateWeather()用来更新天气状态,只有在合约白名单里的地址才可以调用这个方法。updateWeather方法接受天气数据作为参数,同时触发一个以太坊合约事件并将天气数据作为事件的参数,这样JavaScript应用就可以订阅这个事件并获得异步通知了。

同时我们将创建两个nodejs进程,其中之一就是预言机/Oracle,它的实现逻辑就是周期性地轮询第三方天气API来获取天气数据,然后将天气数据提交给智能合约以便进行历史审计。

另一个nodejs进程则负责订阅智能合约的天气事件,然后在控制台输出事件参数。正如之前所述&

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值