[英]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相同(例如:no 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
庫中創建了一個問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.