用于兑换和合约的 TRON 能量:USDT 转账之外的操作消耗多少

SunSwap 兑换、approve、其他代币和合约调用的能量消耗与 USDT 转账不同。本文说明消耗由什么决定、如何测量,以及何时租用比燃烧更合适。

Overtron Editorial

简而言之:TRON 上进行兑换(swap)或任何其他智能合约调用,同样需要能量,就像转 USDT 一样,但通常消耗更多,而且无法提前给出确切数字:消耗取决于合约、兑换路径以及网络上的数据状态。普通的 TRX 和 TRC-10 转账完全不需要能量,只需要 bandwidth。因此正确的顺序是:先弄清楚你要做的操作,用模拟测出它的消耗,然后再决定是租用能量还是让 TRX 被燃烧。

翠绿色能量核心通过发光线缆连接到兑换、代币和智能合约模块:TRON 不同操作的能量消耗各不相同
用于兑换和合约的 TRON 能量:同一种资源,不同操作消耗不同

在关于单次转账所需能量的文章中,我们只分析了一种场景:把 USDT 转到已经持有该代币的地址。但实际上人们在 TRON 上做的事情要多得多:在 SunSwap 上兑换代币、添加流动性、用 approve 授权额度、转移其他 TRC-20 代币、调用第三方合约。下面我们看看这些操作在资源消耗上有何不同,以及如何避免意外账单。

TRON 上哪些操作消耗能量,哪些不消耗

能量用于支付 TRON 虚拟机的计算。不运行合约就不需要它。按操作类型划分如下:

  • TRX 转账:只消耗 bandwidth,不消耗能量。
  • TRC-10 代币转账:同样只消耗 bandwidth。
  • TRC-20 代币转账(包括 USDT):bandwidth 加能量,因为它调用的是代币合约的 transfer 函数。
  • Approve,即允许合约花费你的代币:这是一笔单独的交易,同样是合约调用,也消耗能量。
  • 在去中心化交易所兑换:调用路由合约,内部会执行一整条调用链,因此比简单转账消耗更多能量。
  • 部署自己的合约:消耗相当数量的能量,取决于代码大小。

已验证的参考点:向已持有 USDT 的地址转 USDT,大约需要 64,500 至 65,000 能量;向空地址转账则大约是两倍(约 131,000)。没有能量时,网络为这样的转账燃烧约 6.5 TRX,向空地址转账约 13 TRX。评估其他操作时,用这些数字做对照比用第三方表格更可靠。

用于兑换的 TRON 能量:为什么兑换比转账更贵

DEX 兑换不是一次转账,而是在一笔交易内完成的一组动作。路由合约读取资金池状态,按资金池公式计算汇率,收取你的输入代币,发送输出代币,更新资金池储备并写入事件。每一步都消耗能量,其中一些步骤本身就类似一次代币转账。因此应当预期兑换明显比普通 USDT 转账更贵。具体贵多少,取决于具体的资金池和路径。

兑换时影响消耗的因素:

  • 路径长度。直接交易对只经过一个资金池,经由中间代币的兑换要经过两个或更多,能量消耗更高。
  • 资金池类型和协议版本:不同实现运行不同的逻辑。
  • 数据状态。写入从未使用过的存储槽比更新已有存储槽更贵。如果你从未持有过输出代币,首次接收更贵,与向空地址转账能量翻倍是同一个原理。
  • 单独的 approve。如果你以前没有允许该合约动用这个代币,就需要多一笔交易,同样消耗能量。

实际结论:计算兑换成本时要算整体,即 approve 加兑换本身,而不是只算后一部分。

SunSwap 手续费与其他费用:不要混淆

人们说“SunSwap 手续费”时,通常混在一起的是三种不同的付款。第一,协议手续费:资金池从兑换金额中扣除,归流动性提供者所有,其大小由资金池决定,与能量无关。第二,滑点:由于交易规模和资金池深度造成的预期汇率与实际汇率之间的差距。第三,TRON 网络费用,也就是我们讨论的能量和 bandwidth。

在测算套利或定期兑换的经济性时,要把这三项分开:协议手续费和滑点取决于交易金额,而能量成本取决于调用复杂度和执行时的能量价格。租用能量只会降低最后一项,其他两项不受影响。

USDT 之外的代币:如何估算其他 TRC-20 的能量

任何 TRC-20 转账都是对 transfer 函数的调用,但各合约的实现不同。有的代币只是移动余额,有的还会收取转账费、维护黑名单或更新辅助记录。transfer 中的逻辑越多,消耗越高。因此不能把 USDT 的数字自动套用到其他代币上,尤其是带有自身税收机制的代币。

可靠的做法是:在真实地址上用真实金额做一次试验模拟,并记录结果。如果你经常转同一种代币,一次测量就能为未来一周的能量储备规划提供基准。

智能合约、fee limit,以及能量不足时会发生什么

每次调用合约时,钱包都会要求设置 fee limit,即能量不足时你愿意燃烧的 TRX 上限。它是上限,不是付款。如果实际消耗在可用能量范围内,则完全不会燃烧 TRX。如果能量不足且上限过低,交易会以 OUT_OF_ENERGY 错误失败。一个令人不快的细节:失败之前已经完成的计算已经付费,这部分资源不会退还。关于失败交易后哪些会退回,我们在 REVERT 一文中写过。

如何解读这类错误:OUT_OF_ENERGY 错误相关文章以及TRON 交易失败与 REVERT。对于消耗较高的合约,请留有余量地设置 fee limit,但要记住它只是上限。

还有一个特点:合约所有者可能会承担用户的一部分能量。这样你的消耗就低于调用的完整消耗。你可以在 Tronscan 的交易详情中看到资源消耗的相关行。

如何提前了解你的操作的能量消耗

不要猜,也不要照搬文章里的数字(包括本文):数字要从网络中获取。有三种可行方法。

  • 调用模拟。TRON 节点的 triggerconstantcontract 方法会在不写入区块链的情况下执行调用,并返回消耗的能量。在签名前展示预估的服务正是这样做的。
  • 节点估算。部分节点支持 estimateenergy 方法,返回调用消耗的估算值。是否可用取决于节点配置。
  • 历史交易。在 Tronscan 上打开你自己或他人同类型的成功操作,查看详情中的能量消耗。如果你要重复这类操作,这是最直观的方法。

如何在浏览器中读懂这些行,我们在 Tronscan 指南中有介绍;最终费用如何构成,请见关于能量、bandwidth 和 SUN 的文章。

请记住:估算不是保证。在模拟与执行之间,资金池和存储状态可能发生变化,实际消耗会略有出入。因此最好多留一点能量余量,而不是刚好够用。

什么时候为兑换和合约租用能量

能量是通用的:委托到某个地址后,它能覆盖该地址发起的任何合约调用,而不只是 USDT。你按需要的时长租用一次,这个时间窗口内的兑换、approve 和代币转账都会使用它,直到用完。超出的部分由网络按执行时的价格燃烧 TRX,这个价格由网络参数决定,而不是由我们决定。

当操作比较规律、且你已经测过消耗时,租用才有意义:这样更容易算出一个周期需要多少能量。偶尔的一次兑换在没有能量时也可以选择燃烧,尤其是在交易金额较大、网络费用相对很小时。比较租用与燃烧时,请使用操作当天基于网络实时参数的计算,因为文章里的价格会过时。时长和数量要按整条操作链来选,例如连续执行的 approve 和兑换。

如果你需要为这类操作准备能量,可以为指定地址和时长购买 TRON 能量,服务的实时状态见状态页面。基础概念见博客。

兑换或合约调用前的简短清单

  • 确定操作包含什么:是否需要 approve,路径中有几次调用。
  • 做一次模拟,记下 approve 和兑换本身的能量消耗。
  • 检查地址上的能量是否足够,以及还剩多少余量。
  • 设置有余量的 fee limit,记住它是上限而不是付款。
  • 操作完成后,把 Tronscan 上的实际消耗与估算对比,并调整计划。

想弄清楚你的兑换流程需要多少能量?请在 Telegram 联系我们:@overtronbot。

延伸阅读

FAQ

在 SunSwap 上兑换需要 TRON 能量吗?

需要。兑换是一次智能合约调用,而 TRON 上任何合约调用都会消耗能量和 bandwidth。能量不足时,网络会通过燃烧 TRX 来补足。

兑换比转 USDT 消耗多少能量?

通常明显更多,因为一笔交易内会执行一整条调用链。确切数字取决于资金池和路径,需要通过模拟来测量。

转普通 TRX 需要能量吗?

不需要。TRX 和 TRC-10 代币转账只使用 bandwidth,运行合约才需要能量。

approve 会消耗能量吗?

会。approve 是调用代币合约的单独交易,因此像其他调用一样消耗能量。

SunSwap 手续费与 TRON 网络费用有什么区别?

协议手续费由资金池从兑换金额中扣除,归流动性提供者。网络费用是能量和 bandwidth。两者是不同的付款,租用能量只影响后者。

如何提前了解能量消耗?

通过 triggerconstantcontract 模拟调用,使用节点的 estimateenergy 估算,或查看 Tronscan 上同类型的历史成功交易。

合约调用时能量不足会怎样?

如果 fee limit 允许,不足部分会燃烧 TRX 来补。如果上限太低,交易会以 OUT_OF_ENERGY 失败,已完成的计算已经付费且不退还。

一次租用能量能同时覆盖 approve 和兑换吗?

可以。能量委托到地址后,可覆盖该地址发起的任何合约调用,直到用完。请按整条操作链选择时长和数量。