You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tact智能合约测试:交易状态断言与实际结果不一致求助

Tact合约测试交易状态校验问题的分析与解决

可能的矛盾原因

  • 框架字段定义差异:Tact测试框架里的success字段,可能仅代表交易被链上成功打包确认,而非合约业务逻辑执行失败。你看到的退出码是合约层面的执行结果,和交易本身的链上状态是两个不同维度的指标。
  • 内部交易混淆:如果交易包含内部消息调用,result.transactions里的顶层交易可能标记为success: true,但实际失败的是内部子交易。你当前断言的是顶层交易,自然会和预期不符。
  • 日志与断言的统计维度不同:printTransactionFees输出的是合约执行的退出码,但断言的success对应交易的链上处理状态,两者统计的不是同一个状态,所以出现矛盾。

准确校验交易状态的方案

  • 直接断言退出码:跳过success字段,直接校验交易的exitCode是否符合预期的失败值,示例代码:
    expect(result.transactions).toHaveTransaction({
        from: hashedTimeLockTON.address,
        to: receiver,
        exitCode: 1 // 替换为你实际预期的失败退出码
    });
    
  • 精准筛选目标交易:如果失败的是内部子交易,先从交易列表里定位到对应交易再断言,示例:
    const failedTx = result.transactions.find(tx => 
        tx.from === hashedTimeLockTON.address && 
        tx.to === receiver &&
        tx.exitCode !== 0 // 0一般代表合约执行成功
    );
    expect(failedTx).not.toBeUndefined();
    
  • 明确框架字段含义:查Tact测试框架的官方文档,确认toHaveTransaction中success字段的具体定义,避免因概念误解导致断言错误。

内容的提问来源于stack exchange,提问作者Nerses Asaturyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 07:52:36