本篇通过例子,来介绍一下预言机的基本原理
作者:团长
(Part1:https://bihu.com/article/1630155434)
下面我们通过一个例子,来介绍一下预言机的基本原理。我们在以太坊链上建立一个用户合约,它需要获取到某个城市的气温数据。当然,智能合约自己是无法获取到这个发生于链下真实世界中的数据信息的,需要借助预言机来实现。智能合约将需要获取天气温度的的城市写入到EventLog中,链下我们会启动一个进程,监听并订阅这个事件日志,获取到智能合约的请求之后,将指定城市的温度,通过提交transaction的方式,调用合约中的回填方法,提交到智能合约中。
声明:以下代码仅供演示预言机原理,没有做参数检测和错误处理,请不要在生产环境中使用。
消费者合约:
contract WeatherOracle {
// 用户存储预言机提交的天气数值
uint256 public temperature;
// 定义事件
event RequestTemperature (bytes city);
// 发出获取请求,即发出一个事件日志
function requestTemperature (string memory _city) public {
emit RequestTemperature(bytes(_city));
} // 预言机回调方法,预言机获取到数据后通过这个方法将数据提交到链上 function updateWeather (uint256 _temperature) public { temperature = _temperature; } }
上面的代码非常简单,定义了一个变量用来存储结果,一个方法用于发出请求,一个方法用于接收结果。
链下,我们启动一个进程,以订阅topic的方式获取日志信息,之后通过构建一个transaction,提交一个结果到合约中。

用一个图来展示这个过程:

Chainlink是一个去中心化的预言机项目,它的作用就是以最安全的方式向区块链提供现实世界中产生的数据。Chainlink在基本的预言机原理的实现方式之上,围绕LINK token通过经济激励建立了一个良性循环的生态系统。Chainlink预言机需要通过LINK token的转账来实现触发。
LINK是以太坊网络上的ERC677合约,关于各类ERC token的区别,请参考这篇文章。
在《精通以太坊(Matering Ethereum)》一书中,提出了三种预言机的设计模式,分别是
·立即读取(immediate-read)
·发布/订阅(publish–subscribe)
·请求/响应(request–response)
而基于LINK ERC677 token完成的预言机功能,就属于其中的请求/响应模式。这是一种较为复杂的模式,上图中展示的是一个不含有聚合过程的简单请求/相应流程。

(待续)
(文中代码仅用于说明文章内容,请勿直接用于生产环境)

QQ群: 6135525
微博: https://weibo.com/chainlinkofficial
币乎: https://bihu.com/people/1869894547
合作联系: [email protected]
GitHub: https://github.com/smartcontractkit/chainlink
Gitter: https://gitter.im/smartcontractkit-chainlink/Lobby
Twitter: https://twitter.com/chainlinkofficial
Telegram: https://t.me/chainlinkofficial
