跳转到主要内容
getRecentPrioritizationFees RPC 方法提供了对 Solana 网络最近区块中支付的优先费的深入了解。通过研究这些费用,开发人员可以更明智地决定在交易中附加额外费用(优先费),以增加他们的交易在高网络活动期间被及时处理的可能性。 节点通常会缓存多达最近 150 个区块的优先费用数据。

常见用例

  • 动态费用估算: 通过观察最近成功的费用,确定交易的竞争性优先费用。
  • 拥堵分析: 通过查看支付的优先费用水平,了解当前网络拥堵状态。
  • 钱包集成: 允许钱包根据最近的网络状况向用户建议适当的优先费用。
  • 套利机器人: 对于像套利这样的时间敏感操作,设置最佳优先费用对于及时执行至关重要。

请求参数

  1. lockedWritableAccounts (array of string, 可选):
    • 一个 base-58 编码的公钥数组,表示交易打算写锁定的账户。
    • 最多可提供 128 个地址。
    • 如果提供,则该方法返回锁定了所有指定账户为可写的交易支付的优先费。
    • 如果省略或传递空数组,则该方法返回最近区块中观察到的更一般的优先费视图,而不针对任何特定账户集。

响应结构

JSON-RPC 响应的 result 字段是一个优先费对象的数组。每个对象详细说明了特定最近插槽的费用,具有以下结构:
  • slot (u64): 处理贡献此费用数据的交易的插槽号。
  • prioritizationFee (u64): 此插槽中至少有一个交易支付的最低优先费(每计算单位的微Lamport),并且符合 lockedWritableAccounts 过滤器(如果有)。数值 0 通常意味着在该插槽中没有交易(符合标准)支付除基本费外的额外优先费,或节点未观察到任何给定账户的费用。

示例

1. 获取最近的全局优先费用

此示例获取最近优先费用的一般列表,而不指定任何锁定账户。
# Replace <api-key> with your Helius API key
curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
  '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getRecentPrioritizationFees",
    "params": [[]] # Empty array for global fees
  }'

2. 获取特定可写账户的最近优先费用

此示例获取与需要写锁定两个特定账户的交易相关的优先费用。
# Replace <api-key> with your Helius API key
# Replace with actual public keys you are interested in
curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
  '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getRecentPrioritizationFees",
    "params": [[
      "Vote111111111111111111111111111111111111111", 
      "Stake11111111111111111111111111111111111111"
    ]]
  }'

开发者提示

  • 费用单位: 优先费用以每计算单位 (CU) 0.000001 Lamports(微 Lamports)表示。
  • 缓存窗口: RPC 节点通常将这些费用缓存约 150 个区块。这意味着您看到的是相对较短的历史窗口(大约 1-2 分钟)。
  • 零费用: 一个 prioritizationFee0 并不一定意味着没有支付费用,而是表示在给定的槽和帐户中,采样的交易不包括优先费用,或者低于节点认为重要的阈值。
  • 策略使用: 不要仅仅选择最近的最高费用。分析费用分布(例如,非零费用的中位数,第 75 百分位),以做出具有成本效益的选择。如果区块已满高优先级交易,超额支付并不能保证更快包括。
  • 计算单位: 您的交易的总优先费用将是 prioritizationFee_per_CU * your_transaction_compute_units。您还需要为您的交易设置计算单位限制 (ComputeBudgetProgram.setComputeUnitLimit) 和价格 (ComputeBudgetProgram.setComputeUnitPrice)。
有效使用 getRecentPrioritizationFees 可以显著提高动态网络条件下的交易确认可靠性。