簡體   English   中英

如何按字符串參數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相同(例如: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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM