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

使用DESTROY_ACCOUNT_IF_ZERO(32)标志时TON转账异常排查

关于TON已销毁钱包复用问题的解答

是预期设计还是Bug?

这不是Bug,完全是TON区块链账户模型与标准钱包合约初始化逻辑的预期行为,核心逻辑如下:

  • 当向未上链的地址(钱包B)转账时,若金额足够支付合约部署费,TON会自动部署标准钱包合约,并将转账发起方(钱包A)设为该钱包的唯一所有者。
  • 你通过CARRY_ALL_REMAINING_BALANCE+DESTROY_ACCOUNT_IF_ZERO将B的余额转空后,账户的合约代码和数据会被销毁,但地址本身永久有效。当再次从A向B转账时,系统会重新部署标准钱包合约,且依然将A设为所有者。

你遇到的自动转回现象,本质是钱包B的所有者为A,而你在步骤2的操作中,要么通过脚本给合约植入了“所有者转账触发余额归集”的逻辑,要么使用的钱包合约版本自带这类机制——当所有者向钱包转入资金时,合约自动执行余额转回所有者的操作。而钱包C不是所有者,转账只会触发普通余额增加,不会触发归集。

规避方案与复用方法

要复用该地址并避免自动转回,需打破“A作为B所有者”的关联,具体操作:

  • 用非所有者地址触发重新初始化:
    不要从A向B转账,改用钱包C(或其他非A地址)向B转一笔足够覆盖合约部署费的金额。此时B会重新部署标准钱包合约,所有者设为C,后续A向B转账时就不会触发自动转回。
  • 自定义部署钱包合约:
    手动向B地址部署自定义钱包合约,初始化时指定新的所有者(非A),或移除自动归集逻辑。部署需构造包含合约代码和初始化参数的交易,确保逻辑符合需求。
  • 重置地址状态后重新部署:
    若必须用A向B转账,先通过链上工具清除B地址的残留状态(若存在),再发起转账时指定部署无自动归集逻辑的标准钱包合约,避免继承之前的所有者关联。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 14:15:32