首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在mainnet上调试失败事务

在mainnet上调试失败事务
EN

Ethereum用户
提问于 2018-06-27 02:05:53
回答 2查看 272关注 0票数 4

我们在主网络上部署了一份智能合同,最近的一些交易已经开始失败。你知道我们怎么开始调试合同吗?

合同地址:0x81EAF1fF62B8cca5314287B14e75E04E21b8F2

最近三次0x7ea699902c6a4be61d0037baaabbb8be5269cb2956c2fe617e88b82304aba615 0x1e29f225021bc9f9c886bdcb1a5a69af98ae5b7821773c40f0ad23a82975c8e5 0xbe4853a7d079ef35e88bdb3c5e2f44ced4263d13ced64563143514400a342b1b失败的事务

EN

回答 2

Ethereum用户

发布于 2022-03-05 22:24:14

我知道这是个老帖子,但是对于任何发现这个的人来说,希望这能有所帮助。

我一直温柔地使用,因为我有困难阅读geth调试2工具上的扫描站点,目前正在调试一个问题自己。

https://dashboard.tenderly.co/

当我的交易说“失败”时,它给了我一些更清楚的细节,除非它已经立即恢复。

我绝不是专家,但是对于这个问题的前三个话题,他们基本上都是在合同被调用后恢复的。

在许多情况下,这通常意味着在传递契约和/或契约时输入参数不正确,该契约试图进行一些计算,但立即失败。

对于我自己来说,一个非常具体的例子是,当我向我的合同发送字节并对它们进行错误的解码时。

代码语言:javascript
复制
function encodeStuff(
        address myAddress,
        uint256 amount, 
        address someAddress,
        bytes calldata swapData
    ) external  {

        bytes memory data = abi.encode(myAddress, amount, someAddress, swapData);
  
    }

然后,在另一个函数中,在解码时,我尝试用所有内容解压缩swapData字节:

代码语言:javascript
复制
        (
         address myAddress,
         uint256 amount, 
         address someAddress,
         address someAddress1,
         address someAddress2,
         address someAddress3,
         address someAddress4,
         bytes memory extra_data1,
         address token_address,
         bytes memory extra_data2

        ) = abi.decode(swapdata, 
        ( 
            address
            uint256
            address
            address, 
            address, 
            address,
            address,
            bytes, 
            address, 
            bytes
        ));

因为我这样做了,当事务看到没有需要从bytes memory data解码的额外数据时,事务立即恢复。

我真的需要破译两次。

代码语言:javascript
复制
// First decode data to get swapData bytes
(address myAddress, uint256 amount, address someAddress, bytes memory swapData) = abi.decode(data, (address, uint256, address, bytes));

// Now decode swapData
(
         address someAddress1,
         address someAddress2,
         address someAddress3,
         address someAddress4,
         bytes memory extra_data1,
         address token_address,
         bytes memory extra_data2

        ) = abi.decode(swapdata, 
        (
            address, 
            address, 
            address,
            address,
            bytes, 
            address, 
            bytes
        ));

这个问题非常具体,但是错误会出现在扫描站点上,就像这个问题中的散列一样,“失败”而没有太多额外的数据。

如果我能深入了解更多不需要手臂或腿的调试方法,我会更新它。

票数 1
EN

Ethereum用户

发布于 2022-01-29 21:18:56

尝试在分叉的主板上使用seth debug <txhash>和dapptools!

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

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

复制
相关文章

相似问题

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