概览
## 加工成本(气体单位)
每笔Elrond交易都有一笔处理费用,表示为一笔用气单位 。在播出时,必须为每笔交易提供一个气限 ( gasLimit
),作为处理成本的上限。
约束
对于任何交易,gasLimit
必须大于或等于erd_min_gas_limit
但小于或等于erd_max_gas_per_transaction
,这两个是网络的参数:
networkConfig.erd_min_gas_limit <= tx.gasLimit <= networkConfig.erd_max_gas_per_transaction
成本构成
实际用气量 -也称为用气量 -是从提供的用气量限制中消耗的量-网络为了处理交易实际需要的用气量单位的量。未消耗的量称为剩余气体。
在处理时,网络将用过的气体分解成两种成分:
- 值移动和数据处理所使用的气体
- 合约执行使用的气体(用于执行系统或用户自定义的智能合约)
注
简单的价值转移(EGLD 转账)只需要 gas 使用的价值移动和数据处理组件(即没有执行 gas),而智能合约调用需要 gas 消耗的两个组件。这也包括 ESDT 和 NFT 的转移,因为它们实际上是对系统智能合约的调用。
价值移动和数据处理成本成分很容易计算,使用以下公式:
tx.gasLimit =
networkConfig.erd_min_gas_limit +
networkConfig.erd_gas_per_data_byte * lengthOf(tx.data)
对于系统智能合约调用来说,合约执行成本成分很容易计算(基于特定于每个合约的公式),但是对于用户定义的智能合约来说,很难先验地确定。这就是使用模拟和估计的地方。
*## 加工费(EGLD)
以 EGLD 计量的加工费是根据实际天然气成本(分解为其组成部分)和每单位天然气价格计算的,每单位天然气价格在组成部分之间有所不同。
用于值移动和数据处理的每气体单位的气体价格必须由交易指定,并且必须等于或大于称为erd_min_gas_price
的网络参数。
当用于价值移动和数据处理组件的气体单位价格等于交易中提供的气体价格时,用于合约执行组件的气体单位价格是相对于另一个称为erd_gas_price_modifier
的网络参数计算的:
value_movement_and_data_handling_price_per_unit = tx.GasPrice
contract_execution_price_per_unit = tx.GasPrice * networkConfig.erd_gas_price_modifier
注
一般来说,合约执行的天然气单位价格低于价值移动和数据处理的天然气单位价格,这是由于合约(erd_gas_price_modifier
)的天然气价格修正值。
加工费的公式是这样的:
processing_fee = value_movement_and_data_handling_cost * value_movement_and_data_handling_price_per_unit +
contract_execution_cost * contract_execution_price_per_unit
在处理交易之后,网络将把称为气体退款的值发送回交易的发送者,该值是关于未消耗的气体(的成分)计算的,如果适用的话(如果支付的费用高于必要费用)。*