跳转到内容

Gas 和存储费用 – Aptos 交易成本详解

在Aptos区块链上执行任何交易都需要处理费用。截至目前,此费用包含两个组成部分:

  1. 执行和IO成本
  • 这涵盖了您对临时计算资源的使用,例如处理您的交易并在主网的分布式网络中传播验证记录。
  • 以Gas单位衡量,其价格可能根据网络负载波动。这使得在网络不太繁忙时执行和IO成本较低。
  • 这部分gas在交易执行时永久燃烧。
  1. 存储费用
  • 这涵盖了在分布式区块链存储中持久存储验证记录的成本。
  • 以固定的APT价格衡量,因此即使gas单位价格随网络临时负载波动,永久存储成本也保持稳定。
  • 当分配的存储槽被删除时,存储费用可以退款。目前,网络配置为退还在状态存储槽生命周期内支付的全部存储费用。
  • 为了保持系统实现简单,这部分gas被燃烧并在退款时重新铸造。

交易可以从简单且便宜到复杂,取决于它们要做什么。在Aptos区块链中,gas单位代表临时资源消耗的基本单位,例如进行计算或访问存储。后者不应与此类操作的长期存储方面混淆,因为那由存储费用单独涵盖。

参见基础Gas工作原理了解gas费类型和可用优化的详细描述。

从Aptos Framework版本1.7开始,费用收费和退款的明细作为由结构体0x1::transaction_fee::FeeStatement表示的模块事件发出。

#[event]
/// 交易费用收费和退款的明细。
/// 结构是:
///
/// - 净收费或退款(不在声明中)
/// - 总收费:total_charge_gas_units,与链上`TransactionInfo`中的`gas_used`匹配。
/// 这是以下子项目的总和。请注意,当在内部和外部gas单位之间以及在原生代币和gas
/// 单位之间转换时可能存在精度损失,因此数字可能不完全相加。-- 这个数字是最终
/// 收费,而明细仅供参考。
/// - 执行的gas收费(CPU时间):`execution_gas_units`
/// - IO的gas收费(存储随机访问):`io_gas_units`
/// - 存储费用收费(存储空间):`storage_fee_octas`,要包含在
/// `total_charge_gas_unit`中,此数字根据用户在交易上指定的`gas_unit_price`转换为gas单位。
/// - 存储删除退款:`storage_fee_refund_octas`,这不包含在`gas_used`或
/// `total_charge_gas_units`中,净收费/退款通过
/// `total_charge_gas_units` * `gas_unit_price` - `storage_fee_refund_octas`计算。
///
/// 这意味着作为模块事件发出。
struct FeeStatement has drop, store {
/// 总gas收费。
total_charge_gas_units: u64,
/// 执行gas收费。
execution_gas_units: u64,
/// IO gas收费。
io_gas_units: u64,
/// 存储费用收费。
storage_fee_octas: u64,
/// 存储费用退款。
storage_fee_refund_octas: u64,
}

在Aptos网络中,Aptos治理设置绝对最低gas单位价格。但是,市场决定具有特定gas单位价格的交易处理速度有多快。例如,参见以太坊Gas跟踪器,它显示以太坊gas价格的市场价格变动。

通过指定高于当前市场价格的gas单位价格,您可以通过支付更大的处理费用来增加您在区块链上的交易优先级。作为共识的一部分,当领导者从其内存池中选择交易作为下一个区块的一部分提议时,它将优先选择具有更高gas单位价格的交易。请注意,更高的gas费只会优先考虑下一个区块的交易选择。

在提交交易时,您需要指定:

  • 最大gas量:您愿意为此交易支付的最大gas单位数。
  • Gas单位价格:您愿意为每个gas单位支付的价格(以Octas为单位)。

您为交易支付的总费用将是:

总费用 = (使用的gas单位 × gas单位价格) + 存储费用 - 存储退款
  1. 设置合理的gas限制:设置太低可能导致交易失败,设置太高会锁定不必要的资金。
  2. 监控网络状况:在网络繁忙期间,您可能需要支付更高的gas价格以加快处理。
  3. 使用gas估算:使用SDK提供的gas估算功能来预测交易成本。