菜单

Gas 价格系统

相关源文件

本文档描述了 Fuel Core 中的燃料价格系统,该系统根据网络状况和数据可用性 (DA) 层成本动态确定交易费用。该系统自动调整燃料价格,以平衡网络利用率,维持合理的交易成本,并确保有足够的收入来支付 DA 记录费用。

概述

Fuel Core 采用动态燃料价格机制,该机制适应网络状况和 DA 层成本。燃料价格由两个主要组成部分构成:

  1. 执行燃料价格:涵盖在 L2 上执行交易的计算成本
  2. DA 燃料价格:涵盖将数据记录到数据可用性层的成本

这些组成部分根据不同的指标独立调整,然后组合形成用户支付的总燃料价格。

燃料价格组成部分概述

来源:crates/fuel-gas-price-algorithm/src/v1.rs36-70 crates/fuel-gas-price-algorithm/src/v1.rs130-179

架构

燃料价格服务持续监控区块链,并在生成新区块和报告 DA 成本时更新燃料价格。该系统设计为模块化,为不同的职责提供独立的服务。

燃料价格服务架构

来源:crates/services/gas_price_service/src/v1/service.rs110-136 crates/services/gas_price_service/src/v1/da_source_service/service.rs46-59 crates/services/gas_price_service/src/common/l2_block_source.rs30-45

燃料价格组成部分

1. 执行燃料价格

执行燃料价格根据区块的填充度进行调整,遵循简单的反馈机制:

  • 如果区块的填充度高于可配置阈值,则燃料价格上涨
  • 如果区块的填充度低于阈值,则燃料价格下跌
  • 价格随每个区块按可配置的百分比变化
  • 存在一个最低执行燃料价格,以防止其跌得过低

此机制有助于在网络利用率和交易成本之间保持平衡。

执行燃料价格调整逻辑

来源:crates/fuel-gas-price-algorithm/src/v1.rs468-490 crates/fuel-gas-price-algorithm/src/v1.rs589-593

2. DA 燃料价格

DA 燃料价格更为复杂,因为它需要考虑将数据记录到 DA 层的实际成本。它使用类似 PID 的控制器机制:

  • P (比例):根据 DA 费用与成本的当前盈亏进行调整
  • D (微分):根据前一个区块的盈亏变化进行调整
  • 系统还跟踪 L2 活动以防止负反馈循环
    • 正常模式:DA 燃料价格自由调整
    • 上限模式:DA 燃料价格不能上涨(只能下跌)
    • 持续下跌模式:DA 燃料价格持续下跌

DA 燃料价格调整逻辑

来源:crates/fuel-gas-price-algorithm/src/v1.rs497-528 crates/fuel-gas-price-algorithm/src/v1.rs530-543 crates/fuel-gas-price-algorithm/src/v1.rs556-578

活动跟踪

该系统包含一个复杂的 L2 活动跟踪器,可根据网络活动帮助调整 DA 燃料价格的变化。这可以防止在活动量低期间价格失控上涨。

L2ActivityTracker 实现

来源:crates/fuel-gas-price-algorithm/src/v1.rs289-301 crates/fuel-gas-price-algorithm/src/v1.rs279-287 crates/fuel-gas-price-algorithm/src/v1.rs218-226

服务初始化和区块处理

燃料价格服务通过配置参数初始化,然后处理新区块和 DA 成本信息,以持续更新燃料价格。

燃料价格服务处理流程

来源:crates/services/gas_price_service/src/v1/service.rs415-441 crates/services/gas_price_service/src/v1/service.rs172-196 crates/fuel-gas-price-algorithm/src/v1.rs375-420

配置参数

燃料价格机制可通过以下关键参数进行高度配置:

V1AlgorithmConfig 参数

参数类型描述算法用途
new_exec_gas_priceu64起始执行燃料价格new_scaled_exec_price 的初始值
min_exec_gas_priceu64最低执行燃料价格min_scaled_exec_gas_price() 中的下限
exec_gas_price_change_percentu16每个区块的执行价格变化用于 exec_change() 计算
l2_block_fullness_threshold_percentu8区块填充阈值used * 100 / capacity 进行比较
gas_price_factorNonZeroU64所有价格的缩放因子缩放价格的乘数
min_da_gas_priceu64最低 DA 燃料价格DA 价格的下限
max_da_gas_priceu64最高 DA 燃料价格DA 价格的上限
max_da_gas_price_change_percentu16每个区块的最大 DA 价格变化用于 max_change() 计算
da_p_componenti64P 分量除数用于 p() 计算中的除数
da_d_componenti64D 分量除数用于 d() 计算中的除数
normal_range_sizeu16正常活动范围大小L2ActivityTracker 配置
capped_range_sizeu16上限活动范围大小L2ActivityTracker 配置
decrease_range_sizeu16减少活动范围大小L2ActivityTracker 配置
block_activity_thresholdu8区块活动阈值活动更新的阈值
da_poll_intervalOption<Duration>DA 轮询间隔DaSourceService 轮询频率
starting_recorded_heightOption<BlockHeight>初始记录高度DA 跟踪的起点
record_metricsbool启用指标记录控制指标收集

来源:crates/services/gas_price_service/src/v1/metadata.rs77-98 crates/services/gas_price_service/src/v1/metadata.rs100-139

DA 区块成本集成

燃料价格机制与 DA 区块提交器集成,以获取已记录区块的 DA 成本信息。此信息对于准确计算 DA 燃料价格至关重要。

DA 区块成本集成架构

来源:crates/services/gas_price_service/src/v1/da_source_service/service.rs106-127 crates/services/gas_price_service/src/v1/da_source_service/block_committer_costs.rs84-109 crates/services/gas_price_service/src/v1/da_source_service/block_committer_costs.rs128-147

实现细节

算法版本管理

该系统通过 UpdaterMetadata 枚举支持多种版本的燃料价格算法:

  1. V0 算法 (AlgorithmV0):使用简单基于阈值调整的传统单组件算法
  2. V1 算法 (AlgorithmV1):当前具有执行和 DA 燃料价格分离的双组件算法

GasPriceServiceV1 可以使用 convert_to_v1_metadata() 函数从任一版本初始化,该函数将 V0 元数据迁移到 V1 格式,同时保留执行燃料价格并使用默认值初始化 DA 组件。

来源:crates/services/gas_price_service/src/v1/service.rs457-474 crates/services/gas_price_service/src/v1/metadata.rs40-61 crates/services/gas_price_service/src/v1/metadata.rs158-183

燃料价格更新

燃料价格会响应两个主要事件进行更新:

  1. 新 L2 区块:根据区块使用情况更新执行燃料价格
  2. 新 DA 成本:根据报告的成本更新 DA 燃料价格

每次更新都遵循精确的算法,确保渐进、受控的变化,以防止价格波动。

来源:crates/services/gas_price_service/src/v1/service.rs414-440 crates/fuel-gas-price-algorithm/src/v1.rs355-420 crates/fuel-gas-price-algorithm/src/v1.rs492-528

边缘情况和安全特性

燃料价格机制包含多项安全特性:

  1. 活动跟踪:防止在活动量低期间价格失控上涨
  2. 最小/最大限值:确保燃料价格保持在合理范围内
  3. 最大变化百分比:限制价格变化的速率
  4. 错误处理:优雅地处理 DA 成本检索中的错误

来源:crates/fuel-gas-price-algorithm/src/v1.rs218-226 crates/fuel-gas-price-algorithm/src/v1.rs545-548 crates/services/gas_price_service/src/v1/service.rs427-438

指标与监控

系统可以选择记录有关燃料价格计算的指标,包括:

  • 实际燃料价格
  • 执行燃料价格
  • DA 燃料价格
  • 总奖励
  • 总成本
  • 预测利润
  • 未记录字节
  • 每字节最新成本
  • 记录高度

这些指标提供了燃料价格机制行为的可见性,可用于监控和调优。

来源:crates/services/gas_price_service/src/v1/service.rs324-367

结论

Fuel Core 燃料价格机制是一个复杂的系统,它平衡多种因素来确定合适的交易费用。通过分别跟踪执行和 DA 成本,它确保用户支付的费用准确反映其使用的资源,同时保持网络稳定性和效率。