简体   繁体   English

如何使用 web3.js 解码事件中的索引字符串参数?

[英]How to decode the indexed string param in an event using web3.js?

This is the event -这是活动——

    event BridgeAdded(
        string indexed tokenTicker,
        string tokenName,
        string imageUrl
    );

I use web3.eth.abi.decodeParameter("string", topics[1]) to decode the indexed string param but get this error -我使用web3.eth.abi.decodeParameter("string", topics[1])来解码索引字符串参数但得到这个错误 -

Error: overflow [ See: https://links.ethers.org/v5-errors-NUMERIC_FAULT-overflow ] (fault="overflow", operation="toNumber", value="105640063387051144792550451261497903460441457163918809975891088748950929433065", code=NUMERIC_FAULT, version=bignumber/5.6.2)
    at Logger.makeError (/home/rajat/bridge-server/node_modules/@ethersproject/logger/lib/index.js:233:21)
    at Logger.throwError (/home/rajat/bridge-server/node_modules/@ethersproject/logger/lib/index.js:242:20)
    at throwFault (/home/rajat/bridge-server/node_modules/@ethersproject/bignumber/lib/bignumber.js:303:19)
    at BigNumber.toNumber (/home/rajat/bridge-server/node_modules/@ethersproject/bignumber/lib/bignumber.js:151:13)
    at /home/rajat/bridge-server/node_modules/@ethersproject/abi/lib/coders/array.js:92:60
    at Array.forEach (<anonymous>)
    at unpack (/home/rajat/bridge-server/node_modules/@ethersproject/abi/lib/coders/array.js:88:12)
    at TupleCoder.decode (/home/rajat/bridge-server/node_modules/@ethersproject/abi/lib/coders/tuple.js:74:60)
    at AbiCoder.decode (/home/rajat/bridge-server/node_modules/@ethersproject/abi/lib/abi-coder.js:98:22)
    at ABICoder.decodeParametersWith (/home/rajat/bridge-server/node_modules/web3-eth-abi/lib/index.js:310:30)
    at ABICoder.decodeParameters (/home/rajat/bridge-server/node_modules/web3-eth-abi/lib/index.js:291:17)
    at ABICoder.decodeParameter (/home/rajat/bridge-server/node_modules/web3-eth-abi/lib/index.js:280:17)
    at populateDb (/home/rajat/bridge-server/eventListener/main.js:140:36)
    at onEvent (/home/rajat/bridge-server/eventListener/main.js:117:19)
    at handleLogs (/home/rajat/bridge-server/eventListener/main.js:90:32)
    at startListening (/home/rajat/bridge-server/eventListener/main.js:64:27) {
  reason: 'overflow',
  code: 'NUMERIC_FAULT',
  fault: 'overflow',
  operation: 'toNumber',
  value: '105640063387051144792550451261497903460441457163918809975891088748950929433065'
}

Please help me resolve this error.请帮我解决这个错误。

You should use decodeLog instead, and you would also need The ABI byte code in the data field of logs (if you can get the topics array you should get data from logs as well):您应该改用decodeLog ,并且您还需要logs data字段中的 ABI 字节码(如果您可以获取topics数组,您也应该从logs中获取data ):

let result = web3.eth.abi.decodeLog([{
    type: 'string',
    name: 'tokenTicker',
    indexed: true
    }],
    data,
    topics[1]);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM