web3获取以太坊合约事件

1.玄学

我在以太坊的合约是代币合约,其中包含有转币的方法transfer,用来把自己或其他人的代币转来转去,代币和扇贝一样也是要活动活动滴哈哈哈(獐子岛扇贝事件)。
我一开始使用用来监听合约中Transfer事件的代码如下:

 await this.contract.events.Transfer()
              .on('data', function (event) {
                _this.sendAlertIcon = 'success'
                _this.sendAlert = '发送成功'
                _this.sendAlertShow = true
                _this.initBalance()
              })
              .on('changed', function (event) {
                _this.sendAlertIcon = 'error'
                _this.sendAlert = '发送失败,交易被中断'
                _this.sendAlertShow = true
              // remove event from local database
              })
              .on('error', () => {
                _this.sendAlertIcon = 'error'
                _this.sendAlert = '发送失败,请重试'
                _this.sendAlertShow = true
              })

上面的代码中,data我的理解是整个代币发送成功之后触发的事件,里面的代码是对每个事件的反应,就好像发送成功了就要告诉他厉害呀牛逼呀欢呼呀成功啦哈哈哈,后面两个事件还没有仔细的看,粗略理解,changed事件是把代币从发送pending状态移除之后所触发的事件,removed为true,error是发生错误的时候所触发的事件,有不对的地方望大家指出来。
那么下面重点来了,我发现接不接受的到事件全凭MetaMask心情,哦对了,我这个地方web3连接的是MetaMask的网络哈哈。

2.偶然的发现

一个巧合我发现监听事件中有个参数好像有点用,我改改了,变成下面样子:

 await this.contract.events.Transfer({
              fromBlock: 0,
              toBlock: 'latest'
            })
              .on('data', function (event) {
                _this.sendAlertIcon = 'success'
                _this.sendAlert = '发送成功'
                _this.sendAlertShow = true
                _this.initBalance()
              })
              .on('changed', function (event) {
                _this.sendAlertIcon = 'error'
                _this.sendAlert = '发送失败,交易被中断'
                _this.sendAlertShow = true
              // remove event from local database
              })
              .on('error', () => {
                _this.sendAlertIcon = 'error'
                _this.sendAlert = '发送失败,请重试'
                _this.sendAlertShow = true
              })

没错就是加上了fromBlock和toBlock就可以解决了,监听妈妈再也不用担心我了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值