质押TRX以获取能量和OUT_OF_ENERGY

正如能源使用模型中所解释的那样,开发人员可以通过质押TRX来获得动态分配的能量(质押数额/网络质押总数*总可用,总可用目前为900亿),或直接燃烧TRX以获得固定能量(目前1能量= 280 sun)。

在正常情况下,这两种策略都应该为智能合约的部署/执行提供足够的能量。但是,由于设置了 fee_limit ,如果开发人员质押过多的TRX能量,该帐户的能量计算将与质押模型绑定。该帐户可以使用的最大能量限制为 fee_limit(最高10000 TRX)/总网络质押TRX * 900亿。如果命中上限,则会抛出 OUT_OF_ENERGY 错误,而不会烧毁TRX。如果冷冻的能量不是太多,则可以将两种策略结合起来以考虑总的使用能量。

具体的公式是:

const R = Dynamic Energy Limit
const F = Daily account energy from staking TRX
const E = Remaining daily account energy from staking 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

开发人员还可以使用用户友好的能量计算器
来计算帐户可用于部署/执行智能合约的能源数量,以及他们将花费多少。

作为一般建议,开发人员不鼓励质押过多的TRX(这对其他开发者来说是不公平的)。否则,它们将被限制在较低的能量上限,而不是直接燃烧TRX。如果帐户处于这种情况并且需要部署大型合同,请尝试解锁某些TRX或将TRX转移到新帐户。