【非常重要】solidity之Indexed属性【web3或ethers类事件过滤时,solidity事件定义必须添加的属性】

web3调用常用错误类型:cannot filter non-indexed parameters; must be null【原因就是字段amount没有定义为indexed】

 

参考indexed部分介绍:https://www.jianshu.com/p/131c07c6f72f

官方文档介绍: https://solidity-cn.readthedocs.io/zh/develop/contracts.html?highlight=indexed

solidity语言中定义事件【可以在事件参数上增加indexed属性,最多可以对三个参数增加这样的属性。加上这个属性,可以允许你在web3.js或ethes.js中通过对加了这个属性的参数进行值过滤】

event Transfer(address indexed _from, address indexed _to, uint indexed amount);

indexed属性在solidity事件中非常重要【过滤当前事件名中,设置了为indexed索引参数值,作为条件判断筛选】:

过滤某个地址为发送者的事件

【非常重要】这里的事件名Transfer有三个参数,如果设置为null,代表所有【必须在solidity中定义为indexed的属性才支持】
let filter = this.contract_instance.filters.Transfer(this.active_wallet.address, null,null);
            this.contract_instance.on(filter, (from, to, value, event) => {
                console.log("监听发送以太坊事件:");
                console.log(`from:${from}+to:${to}+value:${value}`);
            });

 过滤某个地址为接收者的事件

【非常重要】这里的事件名Transfer有三个参数,如果设置为null,代表所有【必须在solidity中定义为indexed的属性才支持】
let filter = this.contract_instance.filters.Transfer(null, this.active_wallet.address,null);
            this.contract_instance.on(filter, (from, to, value, event) => {
                console.log("监听发送以太坊事件:");
                console.log(`from:${from}+to:${to}+value:${value}`);
            });

  过滤指定数量的事件【由于事件默认的参数是hex十六进制,所以筛选的时候也必须是十六进制】

【非常重要】这里的事件名Transfer有三个参数,如果设置为null,代表所有【必须在solidity中定义为indexed的属性才支持】
// 过滤value为100的事件
let filter = this.contract_instance.filters.Transfer(null,null,"0x100");
// 过滤value为数组中值的事件
let filter = this.contract_instance.filters.Transfer(null,null,["0x99","0x100","0x101"]);

            this.contract_instance.on(filter, (from, to, value, event) => {
                console.log("监听发送以太坊事件:");
                console.log(`from:${from}+to:${to}+value:${value}`);
            });

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值