10分钟内用Ezo和Python构建以太坊Oracle

上一篇,我写了用Web3.js构建以太坊Oracle。这个练习给了我一些新的Web3.js 1.0版本知识。许多新的好东西可供选择而且使用它实现一个简单的oracle非常容易。但是,显然必须有更好的方法。

Instant Oracles,只需添加处理程序!

Ezo(发音为eh-zoh)是用于构建和运行以太坊的离线事件响应器的工具。受到ServerLessGordon等AWS工具集以及Django,Rails和Truffle等开发工具的启发,Ezo开始将大多数oracle开发减少到几个命令并自定义生成的Python事件处理程序。当然,这不是空话,我在晚餐前几分钟,即可让我们在沙拉三明治到达之前建立一个简单的时间戳oracle。

为什么一个时间戳oracle?

在以太坊虚拟机(EVM)上,时间以(大约)15秒块为单位进行测量。你和我都没有看到时间的概念。在EVM上,你只能真正知道块计数(自链生效以来生成的块数),并且可能会在一秒,十秒或更长时间内发生变化。然而,以太坊合约的现实可以与外界牢固地联系在一起。它可能具有法律约束力的协议,必须在外部世界的时钟上执行。如果合约需要知道什么时候它是脱链的,以便完成它的工作,它必须问别人。我们简单的oracle将简单地抓住系统的纪元时间并将其发送回调用合约上的方法。

它是如何工作的?

在它最基本的形式中,Ezo使用简单模型与所有合约进行交互:

单个合约事件响应者的顺序很简单:

  • 1.oracle开始倾听事件。
  • 2.账户实体在合约上执行请求方法。
  • 3.该合约发出命名事件。
  • 4.监听每个新区块的oracle接收事件。
    1. oracle执行特定事件所需的处理。
  • 6.然后oracle打包处理结果并将响应发送给调用合约。

Ezo可以同时执行多个合约的复杂操作。但是,就我们的时间戳响应者而言,我们只需要一份简单的合约。幸运的是,Ezo带有Timestamp Oracle合约。

pragma solidity ^0.4.21;

// Timestamp Oracle
// Generated by ezo
//
// use at your own risk
//

contract TimestampRequestOracle {

    address public owner;
    uint public _timestamp;

    event TimeRequest(address sender);
    event RequestFilled(address sender,uint timestamp);


    function constructor() public {
        _timestamp = 0;
        owner = msg.sender;
    }

    function sendTimestampRequest() public {
        emit TimeRequest(msg.sender);
    }

    function setTimestamp(uint timestamp) public {
        _timestamp = timestamp;
        emit RequestFilled(msg.sender, _timestamp);
    }

    function getTimestamp() public returns (uint) {
        return _timestamp;
    }

}

实体(合约/所有者帐户)运行不带参数的sendTimestampRequest()方法。我们的orac

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值