web3 React dapp进行事件订阅

news/2024/7/15 17:03:48 标签: web3, react.js, 前端

好啊,上文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.niftyadmin.cn/n/5178086.html

相关文章

智慧化城市内涝的预警,万宾科技内涝积水监测仪

随着城市化进程的加速,伴随的是城市内涝问题日益凸显。频繁的暴雨和积水给市民的生活带来了诸多不便,也给城市的基础设施带来了巨大压力。如何解决这一问题,成为智慧城市建设的重要课题和政府管理的工作主题,只要内涝问题得到缓解…

RabbitMQ-基础篇-黑马程序员

代码: 链接: https://pan.baidu.com/s/1nQBIgB_SbzoKu_XMWZ3JoA?pwdaeoe 提取码:aeoe 微服务一旦拆分,必然涉及到服务之间的相互调用,目前我们服务之间调用采用的都是基于OpenFeign的调用。这种调用中,调…

【C语言】

C语言 1. C语言基础1.1 数据类型和占位符1.2 异或1.3 关键字1.4 const1.5 extern1.6 typedef1.7 static1.8 左值和右值1.9 位进行操作赋值 2. C指针3. 二维数组和指针4. 函数传递二维数组4.1 形参给出第二维的长度。4.2 形参声明为指向数组的指针。4.3 形参声明为指针的指针。 …

Crypto | Affine password 第二届“奇安信”杯网络安全技能竞赛

题目描述: 明文经过仿射函数y3x9加密之后变为JYYHWVPIDCOZ,请对其进行解密,flag的格式为flag{明文的大写形式}。 密文: JYYHWVPIDCOZ解题思路: 1、使用在线网站直接破解或手工计算破解,获得flag。&#xf…

1209.带分数

题目连接 思路 由1 - 9组成带分数&#xff0c;因为每个数只能出现一次&#xff0c;所以就枚举出1 - 9的全排列&#xff0c;然后把它分为三个部分&#xff0c;用双重循环考虑所有情况&#xff0c;最后算出结果即可。 代码 #include <bits/stdc.h> using namespace std;…

【数据结构】树与二叉树(十四):二叉树的基础操作:查找给定结点的父亲(算法Father )

文章目录 5.2.1 二叉树二叉树性质引理5.1&#xff1a;二叉树中层数为i的结点至多有 2 i 2^i 2i个&#xff0c;其中 i ≥ 0 i \geq 0 i≥0。引理5.2&#xff1a;高度为k的二叉树中至多有 2 k 1 − 1 2^{k1}-1 2k1−1个结点&#xff0c;其中 k ≥ 0 k \geq 0 k≥0。引理5.3&…

Linux环境实现mysql所在服务器定时同步数据文件到备份服务器(异地容灾备份场景)

目录 概述 1、建立ssh连接 1.1、操作mysql所在服务器 1.2、操作备份文件服务器 2、创建脚本实现备份以及传输 3、配置定时任务 概述 应对异地容灾备份场景&#xff0c;mysql所在服务器和本分服务器需要建立ssh连接&#xff0c;每天mysql服务器通过定时任务执行脚本&…

【unity】常用属性特征

编辑器功能 AddComponentMenu-添加组件菜单 将脚本添加到Unity编辑器的菜单中&#xff0c;方便开发者在编辑器中快速添加组件。 示例 using UnityEngine; [AddComponentMenu("添加组件/FollowTransform")] public class FollowTransform : MonoBehaviour { }效果 …