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

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

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

 

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

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

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

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

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}`);
            });

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

你可能感兴趣的:(solidity)