首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法使用Etherscan解码输入

无法使用Etherscan解码输入
EN

Ethereum用户
提问于 2022-03-10 00:31:29
回答 1查看 660关注 0票数 2

我正在查看一个事务的输入,它调用了一个智能契约,但我无法理解它。这个具体的样本是在FTM上的,但是我假设对ETH的行为没有什么不同?

考虑一下这个事务:https://ftmscan.com/tx/0x6f9df515d75e9f0444ec2388d4c880b668d71c37ddd673a82941cdae39cac0a9

输入是0x42d8669300000000000000000000000088367cd6c890fc38ee3ec5a7b9baf71ef8ab6972,这意味着方法签名是0x42d86693

现在,查看已发布的用于此事务交互的Smart契约的ABI on ftmscan,我可以看到它的源代码被标记为已验证,它提供了ABI,复制如下

代码语言:javascript
运行
复制
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum Tangle.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct Tangle.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"indexed":false,"internalType":"address","name":"_init","type":"address"},{"indexed":false,"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"DiamondCut","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum Tangle.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct Tangle.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"internalType":"address","name":"_init","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"diamondCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_functionSelector","type":"bytes4"}],"name":"facetAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"facetAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_facet","type":"address"}],"name":"facetFunctionSelectors","outputs":[{"internalType":"bytes4[]","name":"","type":"bytes4[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"facets","outputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct Tangle.Facet[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

奇怪地(?)ABI中没有一个函数与输入字段(0x42d86693).

中的签名匹配。

事实上,如果我使用https://lab.miguelmota.com/ethereum-input-data-decoder/example/来用ABI解码输入,它就无法被解码。根据https://4byte.directory的说法,这种方法是withdrawRewards(address),似乎很有意义,但是合同中没有这样的功能?

我还使用web3.eth.getCode获得了字节码的副本,并使用https://ethervm.io/对其进行了解压缩,看起来在ftmscan上发布的ABI确实与字节码相匹配。

有人能帮我们弄清楚这里发生了什么吗?带签名的0x42d86693函数是如何在似乎没有该签名功能的合同上调用的?

谢谢!

EN

回答 1

Ethereum用户

回答已采纳

发布于 2022-03-10 05:53:25

在您的契约中,没有任何withdrawRewards(地址)函数,但是您调用的是不存在的函数,那么回退函数将是executed.In,该契约回退函数将调用其他契约,因此您无法解码输入,因为输入解码器无法知道其他契约的ABI。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/123489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档