web3 React dapp进行事件订阅

好啊,上文web3 React Dapp书写订单 买入/取消操作
我们已经写好了 填充和取消订单
这就已经是非常大的突破了 但是 留下了一个问题 那就是 我们执行完之后 订单的数据没有直接更新 每次都需要我们手动刷新 才能看到结果
那么 今天我们就来看解决这个问题的事件订阅
我们下启动一下环境

ganache 环境 终端运行

ganache -d

在这里插入图片描述
登录一下 MetaMask
在这里插入图片描述
运行我们的 dapp 发布一下合约

truffle migrate --reset

在这里插入图片描述
然后 运行 转让 交易所 token与ETH的测试脚本 制造数据

truffle exec .\scripts\test.js

然后 运行专门用来创建订单的脚本

truffle exec .\scripts\createOrder.js

最后 我们启动前端 dapp系统
在这里插入图片描述
我们 全局数据初始化 是在 src下的 view 中的index 组件 那么 我们监听也就在这里去执行 毕竟他才是全局状态的一个管理入口

这里 我们看到 交易所的智能合约 我们写了三个事件 Order创建订单 Cancel取消订单 Fill填充订单
在这里插入图片描述
他们分别来记录我们的三种事件
那么 我们就可以在web端 监听这三个事件

这里 我们直接将 src目录下的 view 下的index.jsx 中的 useEffect 声明周期代码更改如下

useEffect(() =>{async function start(){const WebData = await initialization()window.WebData = WebData;dispatch(loadBalanceData(WebData))dispatch(loadCancelorderData(WebData))dispatch(loadAllrderData(WebData))dispatch(loadFillorderData(WebData))//监听创建订单完成WebData.Exchange.events.Order({},(error,event)=> {console.log("创建了订单")console.log("错误信息",error)console.log("事件参数",event)dispatch(loadBalanceData(WebData))dispatch(loadCancelorderData(WebData))dispatch(loadAllrderData(WebData))dispatch(loadFillorderData(WebData))})//监听取消订单完成WebData.Exchange.events.Cancel({},(error,event)=> {console.log("取消了订单")console.log("错误信息",error)console.log("事件参数",event)dispatch(loadBalanceData(WebData))dispatch(loadCancelorderData(WebData))dispatch(loadAllrderData(WebData))dispatch(loadFillorderData(WebData))})//监听填充订单完成WebData.Exchange.events.Fill({},(error,event)=> {console.log("填充了订单")console.log("错误信息",error)console.log("事件参数",event)dispatch(loadBalanceData(WebData))dispatch(loadCancelorderData(WebData))dispatch(loadAllrderData(WebData))dispatch(loadFillorderData(WebData))})}start();
},[dispatch])

这里 我们通过全局对象 WebData 拿到我们交易所的智能合约对象 Exchange 并分别监听了 我们刚才说的三个事件
事件触发会带来两个参数 error 错误信息 event 调用事件时 传递的参数
然后 我们这里 简单输出了事件做了什么 和 调用了所有异步加载数据的函数 重新更新一下数据
然后 我们运行项目 尝试 取消一个订单
在这里插入图片描述
这里 我们就可以看到 我们订单 从 5条 变成了 4条 无需我们自己刷新 数据就更新了 控制台也输出了 我们的事件类型 和 信息
在这里插入图片描述
然后 我们尝试买入一个订单
在这里插入图片描述
也是一样 我们整体更新的事件触发了
页面也将相关信息输出了出来

然后 我们重写执行脚本

truffle exec .\scripts\createOrder.js

你会惊奇的发现 我们dapp的监听事件触发了 就是 不一定是当前界面触发的 其他地方创建了订单 或者取消 填充订单 我们订阅了他 事件就会触发 有点实时通讯的味道了哈
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/171921.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是 IT 资产管理(ITAM),以及它如何简化业务

IT 资产管理对任何企业来说都是一项艰巨的任务,但使用适当的工具可以简化这项任务,例如,IT 资产管理软件可以为简化软件和硬件的管理提供巨大的优势。 什么是 IT 资产管理 IT 资产管理(ITAM)是一组业务实践&#xff…

大数据-之LibrA数据库系统告警处理(ALM-12045 网络读包丢包率超过阈值)

告警解释 系统每30秒周期性检测网络读包丢包率,并把实际丢包率和阈值(系统默认阈值0.5%)进行比较,当检测到网络读包丢包率连续多次(默认值为5)超过阈值时产生该告警。 用户可通过“系统设置 > 阈值配置…

idea生成代码(一):实现java语言的增删改查功能(基于EasyCode插件)支持自定义模板【非常简单】

idea生成代码(一):实现java语言的增删改查功能(基于EasyCode插件)支持自定义模板【非常简单】 idea生成代码(二):实现java语言的增删改查功能(基于mybatis-plus代码生成器…

记录:unity脚本的编写6.0

目录 unity UI系统添加ui编写脚本 unity UI系统 在日常的游戏或者别的什么活动中,ui总是必不可少的一项,在java中也有关于GUI的内容,unity也不例外,这次就使用脚本控制在unity添加的各种ui组件,使他们可以完成一些我们…

【第2章 Node.js基础】2.4 Node.js 全局对象(一)

什么是Node.js 全局对象 对于浏览器引擎来说,JavaScript 脚本中的 window 是全局对象,而Node.js程序中的全局对象是 global,所有全局变量(除global本身外)都是global 对象的属性。全局变量和全局对象是所有模块都可以调用的。Node.is 的全局…

java 旋转方阵

public static void main(String[] args) {Scanner scanner new Scanner(System.in);// N阶方阵int n scanner.nextInt();// 构建方阵List<List<Integer>> matrix new ArrayList<>();for (int i 0; i < n; i) {List<Integer> row new ArrayLis…

书单 | 11月程序员新书播报

11月最新上架计算机书籍 1、人工智能&#xff08;第3版&#xff09; 美国经典人工智能教材第3版&#xff0c;人工智能的百科全书&#xff0c;新增深度学习及人工智能编程等内容&#xff0c;理论阐释结合动手实践&#xff0c;附赠PPT课件、配套视频及代码文件。 1.人工智能经典…

Vue中组件与插件:究竟有何不同?详细解析带你get到核心差异!

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 ⭐ 专栏简介 &#x1f4d8; 文章引言 一、组…

MySQL表的增删改查(进阶)

目录 数据库约束 约束的定义 约束类型 null约束 unique:唯一约束 default:默认值约束 primary key:主键约束(重要) foreign key:外键约束(描述两个表之间的关联) 表的设计 一般思路 三大范式 一对一 一对多 ​编辑 多对多 ​编辑 新增 查询 聚合查询 聚合函…

运动耳机哪个牌子好性价比高?运动耳机品牌排行榜前十名

​其实&#xff0c;选择运动耳机并不只是看外观&#xff0c;性能也同样重要。在选择时&#xff0c;我们需要考虑几个关键因素&#xff0c;例如稳固性、舒适度和音质等。这些都是运动耳机必备的要求&#xff0c;因为它们能帮助我们在运动时更加专注于锻炼&#xff0c;而不会被耳…

每天一点python——day67

#每天一点Python——67 #字符串判断方法&#xff1a;如图&#xff1a; #①判断指定字符串是否为合法标识符 shello,computer print(s.isidentifier()) #输出为False&#xff0c;不是合法标识符&#xff0c;这是因为标识符是由字母&#xff0c;数字&#xff0c;下划线组成&#…

识别代理IP:保障网络安全的重要一环

在互联网的世界中&#xff0c;代理服务器被广泛用于隐藏用户真实IP地址&#xff0c;带来了一些挑战&#xff0c;特别是在网络安全和欺诈检测方面。本文将探讨如何识别代理IP&#xff0c;以确保网络的安全性和可靠性。 1. 代理IP的背景与用途 代理服务器是位于用户和目标服务器…