使用 Solidity 和 Node.js 构建简单的区块链预言机
区块链上的预言机是允许区块链世界与来自网络其余部分的数据交互的框架,我们将其称为网络 2.0 世界。随着智能合约的应用不断扩大,处理独特用例所需的各种数据也将不断扩大。
事实上,web 2.0和web 3.0是两个截然不同的网络,目前最有用的数据都存在于web 2.0中。通过创建一组协议使智能合约能够访问这些数据,新一代的web、系统设计和区块链将出现。
目前的协议已经借鉴了预言机的概念,利用智能合约和链下api来构建混合系统,将web 2.0数据和其他区块链连接起来。最著名的预言机是Chainlink,它提供定价数据、与其他区块链的连接、对大多数api的访问以及各种其他数据馈送的服务。
其他主要的例子包括代币桥,它允许在链下服务的帮助下在链之间移动代币和数据。随着时间的推移,可能会出现更多独特的预言机。
事件驱动的预言机设计
在解决使用链下服务代表智能合约执行某些操作的问题时,最重要的是要记住,在智能合约和服务之间没有正式的消息传递过程。根据这个假设,我们知道智能合约不能“推送”,所以服务必须可听、可看。
只有两个链上项目,服务才有能力“监听”,就是状态变量和事件。观察状态变量很麻烦,因为它需要与合约进行多次交互。另一方面,事件不需要直接交互。
智能合约事件的触发方式如下:
emit newEvent(block.timestamp)
事件可以被看作是由开发人员定义的智能合约的操作日志。与其他类型的日志一样,其他服务也可以订阅此提要,以“监听”特定类型的事件,从它们的参数中收集数据,并对这些事件做任何它们想做的事情。这些日志对任何访问区块链的人都是可见的,并且可以通过像web3.js这样的库进行访问。
有了这种独特的通信系统,智能合约可以