老胡茶室
老胡茶室
Beta

排错:调用 parseLog 报 data out-of-bounds 错误

胡键

症状

调用 parseLog 解析日志,结果得到:

UnhandledPromiseRejectionWarning: Error: data out-of-bounds (length=0, offset=32, code=BUFFER_OVERRUN, version=abi/5.6.0)
...

原因

这种情况一般是使用的 abi 字符串与 contract 的实际 abi 不匹配:缺少了 indexed 关键字。如下例:

  • 实际的 abi 为 event Transfer(address indexed from, address indexed to, uint256 indexed value)
  • 但使用的却是:event Transfer(address from, address to, uint256 value)

通过查看 log 的 topics 也能发现,topics 的内容实际是:event + indexed 参数,其长度可以反映出有多少个 indexed 参数。

解决

很简单,补上缺失的 indexed 关键字即可。

参考