冻结能量和OUT_OF_ENERGY
正如能源使用模型中所解释的那样,开发人员可以通过冻结TRX获得能量来获得动态分配的能量(冻结/网络总数*总可用,目前为1000亿),或直接燃烧TRX以获得固定能量(目前1能量= 10 SUN)。
在正常情况下,这两种策略都应该为智能合约的部署/执行提供足够的能量。但是,由于设置了 fee_limit 的方式,如果开发人员冻结过多的TRX能量,该帐户的能量计算将与冻结模型绑定。该帐户可以使用的最大能量限制为 fee_limit(最高1000 TRX)/总网络冻结TRX * 1000亿。如果命中上限,则会抛出 OUT_OF_ENERGY 错误,而不会烧毁TRX。如果冷冻的能量不是太多,则可以将两种策略结合起来以考虑总的使用能量。
具体的公式是:
const R = Dynamic Energy Limit
const F = Daily account energy from freezing TRX
const E = Remaining daily account energy from freezing TRX
const L = Fee limit in TRX set in deploy/trigger call
const T = Remaining usable TRX in account
const C = Energy per TRX if purchased directly
// Calculate M, defined as maximum energy limit for deployment/trigger of smart contract
if F > L*R
let M = min(E+T*C, L*R)
else
let M = E+T*C开发人员还可以使用用户友好的[能量计算器](https://tronstation.io/energycalc)来计算帐户可用于部署/执行智能合约的能源数量,以及他们将花费多少。
作为一般建议,开发人员不鼓励冻结过多的TRX(这对其他开发者来说是不公平的)。否则,它们将被限制在较低的能量上限,而不是直接燃烧TRX。如果帐户处于这种情况并且需要部署大型合同,请尝试解冻某些TRX或将TRX转移到新帐户而不冻结能源。
Updated 9 months ago