下面我们通过一个例子,来讲解一下应验机的基本原理。我们在以太坊链上创建一个用户合约,它必须提供到某个城市的气温数据。当然,智能合约自己是无法提供到这个发生于链下真实世界中的数据信息的,必须利用应验机来构建。智能合约将必须提供天气温度的的城市载入到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,递交一个结果到合约中。用一个图来展出这个过程:ChainlinkChainlink是一个去中心化的应验机项目,它的起到就是以最安全性的方式向区块链获取现实世界中产生的数据。
Chainlink在基本的应验机原理的构建方式之上,环绕LINK token通过经济鼓舞创建了一个良性循环的生态系统。Chainlink应验机必须通过LINK token的账户来构建启动时。
LINK是以太坊网络上的ERC677合约,关于各类ERC token的区别,请求参照这篇文章。在《通晓以太坊(Matering Ethereum)》一书中,明确提出了三种应验机的设计模式,分别是· 立刻加载(immediate-read)· 公布/订阅者(publish–subscribe)· 催促/号召(request–response)而基于LINK ERC677 token已完成的应验机功能,就归属于其中的催促/号召模式。
这是一种更为简单的模式,上图中展出的是一个不所含单体过程的非常简单催促/适当流程。
本文来源:博业体育-www.y-best.cn