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

2023-11-15

上一篇,我写了用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()方法。我们的oracle将获取T

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

10分钟内用Ezo和Python构建以太坊Oracle 的相关文章

  • React Hooks —— useState异步更新队列、闭包、浅比较深入理解

    文章目录 useState 设计原理 实现原理 setXXX沿着作用域查找闭包的理解 与同步异步无关 更新多状态 方案一 类似于类组件中一样 让状态值是一个对象 包含需要的全部状态 每一次只修改其中的一个状态值 setXXX不支持类组件se
  • 前端导出excel文件

    文章目录 安装插件 下载成excel文件 主要代码分析 将文件转成文件流 用于下载 构建工作簿 用于下载 下载函数全部代码 js原生使用文件流进行下载 new Blob 封装的完整的Export2Excel js文件 参考 安装插件 imp
  • 隐式神经表示

    以图像为例 其最常见的表示方式为二维空间上的离散像素点 但是 在真实世界中 我们看到的世界可以认为是连续的 于是 可以考虑使用一个连续函数来表示图像的真实状态 然而我们无从得知这个连续函数的准确形式 因此有人提出用神经网络来逼近这个连续函数
  • 问题解决:/lib/libEGL.so.1:对‘wl_display_dispatch_queue_pending’未定义的引用

    在安装opencv2 4和编译程序的时候 经常出现的一个问题 弄了好久 最后无意间解决了 错误描述 lib libEGL so 1 对 wl display dispatch queue pending 未定义的引用 collect2 错误

随机推荐

  • FreeRTOS学习笔记(8)---- 软件定时器

    使用FreeRTOS软件定时器需要在文件FreeRTOSConfig h先做如下配置 1 configUSE TIMERS 使能软件定时器 2 configTIMER TASK PRIORITY 定时器任务优先级 3 configTIMER
  • PyCharm创建.py文件报错:Error parsing Velocity template: Encountered ““ as [line 5, column 1]

    使用的模板是 usr bin env python3 coding UTF 8 Date DATE TIME Author Name 解决方法 和后面的说明之间 要有空格 改为 usr bin env python3 coding UTF
  • sleep、interrupt等线程相关方法介绍

    1 sleep方法 package Thread public class Test01 Sleep public static void main String args public static native void sleep l
  • 安卓自动化测试框架

    安卓APP测试框架总结 基于Instrumentation的测试框架 比如Espresso Robotium Selendroid等 都不能支持跨APP使用 如自动化测试中有跨APP操作 我们可以结合UiAutomator实现 支持BDD
  • Java编程工具(12):idea中Compile、Make和Build的区别

    目录 1 build rebuild和recompile 2 Compile Make和Build的区别 1 build rebuild和recompile 标注 1 Build Project 编译项目 标注 2 Build Module
  • 读完这个我懂了JNDI

    JNDI 是什么 JNDI是 Java 命名与目录接口 Java Naming and Directory Interface 在J2EE规范中是重要的规范之一 不少专家认为 没有透彻理解JNDI的意义和作用 就没有真正掌握J2EE特别是E
  • 分区表正被其它程序独占访问_硬盘主引导记录MBR程序代码分析——小白到高手的进阶...

    MBR是什么 MBR 全称为Master Boot Record 即硬盘的主引导记录 为了便于理解 一般将MBR分为广义和狭义两种 广义的MBR包含整个扇区 引导程序 分区表及分隔标识 也就是上面所说的主引导记录 而狭义的MBR仅指引导程序
  • java安全沙箱机制介绍

    java安全沙箱机制介绍 组成Java沙箱的基本组件如下 类加载体系结构 class文件检验器 内置于Java虚拟机 及语言 的安全特性 安全管理器及Java API Java安全模型的前三个部分 类加载体系结构 class文件检验器 Ja
  • 综合指数:拉氏指数和派氏指数

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 拉式公式 报告期p1 基期q0之和 除以 基期p0 基期q0 p0 q0是假定的 可以这么理解 如果按照基期的价格 那么现在有多少销售额呢 派式公式
  • 08-3_Qt 5.9 C++开发指南_Graphics View绘图架构

    文章目录 1 场景 视图与图形项 1 1 场景 1 2 视图 1 3 图形项 2 Graphics View 的坐标系统 2 1 图形项坐标 2 2 视图坐标 2 3 场景坐标 2 4 坐标映射 3 Graphics View 相关的类 3
  • 常用的测试平台

    测试用例管理与bug管理平台 测试用例管理平台 jira 推荐方案 定制性很强 redmine 推荐方案 开源 活跃 定制性很强 Testlink 流行的测试用例管理平台 体验不是很好 其它 tapd 云效 禅道 gitlab 在线协作文档
  • 巧用符号链接移动文件夹位置

    有些时候我们可能因为系统或者某些软件的缓存占得比较多 想把他们从C盘移动到其他地方 但是软件本身并没有提供修改缓存文件夹的功能 这下应该怎么办呢 其实还真有一个好办法可以完美解决 这就是今天要为大家介绍的符号链接 符号链接这个名词经常使用L
  • Django中解决redis-py versions 3.2.0 or later. You have 2.10.6版本问题

    问题描述 在django项目中 添加异步任务 跑服务时遇到redis py版本问题 如下截图 提示版本较低 解决 从4 3 0到4 4 0的Kombu更新停止了对redis py v2 10 6的支持 因此迫使我们升级redis py版本
  • Python基础知识(注释、变量、常量)

    注释 是对代码进行解释和说明 注释是给人看的 机器是不运行的 Python中注释 单行注释 注释内容 多行注释 注释内容 或者 注释内容 变量 可以发生改变的一个量 变量是用来区分不同数据的 可以指向一个内存空间 帮我们存储一些数据 变量的
  • pip安装opencv-python不成功

    一个比较笨但还算有效的方法 如果你的python版本较低 如现在2023 07 04使用python3 6环境 使用pip默认安装会是最新的4 8 0 7版本 但事实上这个版本不支持py3 6环境 所以你需要去这里查支持py3 6的最近的一
  • Unity在development模式下的一个坑

    最近发现unity生成的包在Nexus上如果打开带Input控件的界面时 关闭屏幕再打开 则永远无法显示输入法界面了 一开始还以为是unity自己本身的bug 后来发现release版本并无这个问题 于是弄了个最简单的测试版本分别打了 两个
  • day01-编程题

    选择题 题目1 单选 下列属于是计算机硬件的是 D 选项 A QQ B 微信 C 飞秋 D CPU 题目2 单选 下列可以保证java程序跨平台运行的是 A 选项 A JVM java虚拟机 B Windows系统 C Linux系统 D
  • JAVA第三方技术---Elasticsearch---与JDK版本对应关系

    JAVA第三方技术 Elasticsearch 与JDK版本对应关系 目录 文章目录 1 对应关系表 2 Elastic support地址 3 JVM support地址 后记 内容 1 对应关系表 Elasticsearch and J
  • windows 下配置redis 让其他主机访问本机的redis数据

    在做一个分布式项目的时候 redis不使用 ip 127 0 0 1 启动的时候一直报错 即使使用本机的地址也会报错 然后自己去网上找了一些资料都没有解决 网上一些资料又说改配置文件 把 redis windows conf 里面的 pro
  • 10分钟内用Ezo和Python构建以太坊Oracle

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