如何按字符串参数过滤,web3 2.0.0-alpha.1 Solidity 事件?
How to filter by string parameter , web3 2.0.0-alpha.1 Solidity events?
我正在尝试过滤一些事件,我注意到自从我将 web3 更新到版本 2.0.0-alpha 1 之后,事件捕获有点不同。
我有一个与此事件相关的智能合约:
event catchMeIfYouCan (address indexed a, string indexed b, uint indexed c);
而且我想按其参数进行过滤,目前一切顺利。
但是当我尝试按 b(索引的字符串)进行过滤时,这是行不通的。
我正在使用 ExpressJS 和上面提到的 Web3 版本在 NodeJS 中执行此操作。
如果我这样做 :
const event = smartContract.events.catchMeIfYouCan({ filter : {
a : accountAddress ,
b : web3.utils.toHex(stringValue) ,
c : web3.utils.toWei("" + numberValue) }
}, (error, event) => {
// do some things
});
我得到:
Node error: {"code":-32602,"message":"invalid argument 1: hex has invalid length 96 after decoding"}
否则,如果我让 b 参数在 NodeJS 事件中捕获为:
b : stringValue,
它不再捕获事件,与 c 相同(例如:不再 web3.utils.toWei()
)。
所以,我的问题是:您知道如何在 Web3 2.0.0-Alpha 1 版本中通过字符串参数过滤事件吗?
感谢您的帮助,祝您有愉快的一天!
谢谢你的问题,我测试了它,我相信它是 filter
的错误
但我尝试使用 topics
并且有效
contract.events.CatchMeIfYouCan({
topics: [, web3.utils.sha3(stringValue)], // first element is empty, because its place for `address` index
fromBlock: 2000000
}, (error, event) => {
console.log(event)
})
因此,我在 web3.js
存储库
中创建了一个 issue
我正在尝试过滤一些事件,我注意到自从我将 web3 更新到版本 2.0.0-alpha 1 之后,事件捕获有点不同。
我有一个与此事件相关的智能合约:
event catchMeIfYouCan (address indexed a, string indexed b, uint indexed c);
而且我想按其参数进行过滤,目前一切顺利。 但是当我尝试按 b(索引的字符串)进行过滤时,这是行不通的。 我正在使用 ExpressJS 和上面提到的 Web3 版本在 NodeJS 中执行此操作。
如果我这样做 :
const event = smartContract.events.catchMeIfYouCan({ filter : {
a : accountAddress ,
b : web3.utils.toHex(stringValue) ,
c : web3.utils.toWei("" + numberValue) }
}, (error, event) => {
// do some things
});
我得到:
Node error: {"code":-32602,"message":"invalid argument 1: hex has invalid length 96 after decoding"}
否则,如果我让 b 参数在 NodeJS 事件中捕获为:
b : stringValue,
它不再捕获事件,与 c 相同(例如:不再 web3.utils.toWei()
)。
所以,我的问题是:您知道如何在 Web3 2.0.0-Alpha 1 版本中通过字符串参数过滤事件吗?
感谢您的帮助,祝您有愉快的一天!
谢谢你的问题,我测试了它,我相信它是 filter
但我尝试使用 topics
并且有效
contract.events.CatchMeIfYouCan({
topics: [, web3.utils.sha3(stringValue)], // first element is empty, because its place for `address` index
fromBlock: 2000000
}, (error, event) => {
console.log(event)
})
因此,我在 web3.js
存储库