Solana Priority Fee 详解:什么时候付、付多少、为什么

Solana priority fee 到底做什么、怎么设对、为什么过度给 priority fee 是交易机器人最常见的烧钱方式。

BoltTx Team··12 min read
solanapriority-feecompute-units交易费交易机器人

如果你 2024 年以来发过任何 Solana 交易,你就用过 priority fee——哪怕你自己没意识到。它是 Solana 在拥堵时的定价机制。搞懂它怎么工作、什么时候该多付、什么时候多付是浪费——是发真量时杠杆最高的知识之一。

先把概念分清楚: priority fee 是 Solana 协议层的链上 gas fee,用来在拥堵时争夺打包顺序——给得越高,越容易进入打包队列前列。这跟 BoltTx 的 tip 不是一回事:BoltTx tip 是付给 BoltTx 的小费,用来换提交侧的优先级。两个一起调好,上链速度才最快。这一篇专门讲 priority fee。

这篇过一遍 priority fee 实际是什么、怎么定价、设它的常见模式、为什么"每笔交易都给最大 priority fee"是花真钱的坏策略。

Priority Fee 实际是什么

Solana 交易有两个成本组件:

Base fee。 每个签名固定 5000 lamports。美元上忽略不计。

Priority fee。 可选、按 CU(compute unit)收费、Solana 协议层的链上 gas fee,作用是给打包队列一个信号:"先打包我"。以 microlamports 每 CU 计价。

总 priority fee = compute_unit_price * compute_unit_limit。一笔交易 CU 价 100_000 microlamports/CU、CU 上限 200_000,总 priority fee 就是 200_000 * 100_000 / 1_000_000 / 1_000_000_000 = 0.00002 SOL

Validator 按 priority fee 排序打包队列。priority fee 越高,越可能在下一个 slot 上链。

Compute Unit 是什么

Compute unit (CU) 是 Solana 衡量计算工作的单位。每条指令消耗一些 CU;交易有 CU 总预算上限;超预算的交易会失败。

两个关键值:

把这两个值设对,是改善交易可靠性最常见的杠杆之一:

import { ComputeBudgetProgram, Transaction } from "@solana/web3.js";

const tx = new Transaction()
  .add(ComputeBudgetProgram.setComputeUnitLimit({ units: 250_000 }))
  .add(ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 100_000 }))
  .add(yourActualInstruction);

为什么"每次都给最大 priority fee"是坏策略

朴素本能是"给最大可能的 priority fee——我要交易上链"。

这是个坏策略,几个原因:

大部分钱是浪费的。 一旦你出价超过第二高的交易,多给的 priority fee 不会让你更快上链。多出来的钱白花了,对你没好处。

累加起来真不少。 每天 1000 笔交易、每笔都给最大 priority fee 的机器人,付的钱是它实际需要的 5-10 倍。一年下来是真金白银。

边际交易反而不盈利了。 交易预期利润本来就不高时,给最大 priority fee 会让这笔交易自己变成亏损。结果就是边际尝试在白白送钱。

网络平静时根本没必要。 非高峰期小 priority fee 也能快速上链。给最大就是浪费钱。

正确的策略是按利润动态调整 priority fee:根据交易的预期利润决定给多少。

正确设 Priority Fee

合理的 priority fee 公式大致是:

priority_fee = max(floor, expected_profit * fee_fraction)

其中:

对于预期利润很高的交易(大套利价差、热门 mint),可以激进给到预期利润的相当一部分。边际交易就刚好压过地板,接受有些尝试上不去。

需要的数据:

不同策略的模式

不同业务场景下 priority fee 策略不一样:

套利机器人。 价差宽的机会值得高 priority fee;边际机会就只清地板。接受有些边际尝试上不去。

Sniper 机器人。 热门发币时积极给 priority fee。机会窗口短、预期利润高。这种触发窗口里别想着省钱。

做市商。 给够 priority fee 让 cancel 和 replace 可预测地上链。给多了利润流走;给少了卡在过时报价上。

刷量机器人。 低 priority fee 策略。刷量本来就是靠多笔交易做出来,给最大 priority fee 直接毁掉经济模型。

DCA / 定时买入。 不急。低 priority fee + 接受偶尔重试。

手动用户交易。 用钱包默认值;一次性 swap 一般行。

常见错误

系统性烧钱的几种:

用静态固定值。 "我永远给 100k microlamports/CU"——这就是把钱留在桌上。网络条件在变,你的 priority fee 也该跟着变。

忽略 CU 上限。 CU 价格设对了但 CU 上限设错,意味着你为容不下你交易的预算付 priority fee。

"以防万一"把 CU 上限调超大。 一笔实际只用 150k CU 的交易给 500k CU 预算,意味着你为浪费掉的 350k CU 付了 priority fee。先 profile 实际用量,再按测量值的 1.2-1.5 倍设预算。

memecoin 机器人非高峰期还在给最大值。 没什么活动的时候,每次探测都给最大 priority fee 就是烧钱。

网络忙的时候反而不给。 有些机器人操作者忘了设 priority fee,结果交易上不去、blockhash 过期、静默失败。

怎么测你在花什么

值得给你机器人跑一遍的诊断:

  1. 把上周付的总 priority fee 加起来
  2. 把上链交易产生的总毛利加起来
  3. 算比例
  4. 如果 priority fee 占毛利 >15-20%,你在过度给
  5. 如果 priority fee 占毛利 <2%,你可能给少了(或者你想上链的交易其实没上)

合理比例看策略不同。套利机器人通常付毛利的 5-10% 当 priority fee。Sniper 机器人热门窗口期能付到 15-25%。刷量机器人应该 <2%。

这周可以做什么

如果你对机器人经济模型不满意:

  1. 审一下 priority fee 策略。 是不是用静态值?换成按利润动态调整。
  2. Profile 实际 CU 用量。 用模拟测真实消耗,按 1.2-1.5 倍设预算。
  3. 从 RPC 拿 priority fee 遥测。 最近地板值。大多数生产 RPC 都暴露这个。
  4. 给交易标预期利润。 交易逻辑应该已经知道,把它传给执行层。
  5. 算 priority fee 占毛利的比例。 这一个指标就告诉你是给多了还是给少了。
  6. 别追求完美。 70% 完成度的动态调整,胜过还在设计阶段的 100% 完美方案。

BoltTx 提供什么

BoltTx 为"priority fee 优化"重要的交易发送负载提供:

上面说的 priority fee 始终是 Solana 协议层的链上 gas fee。BoltTx 这边收的是另一种叫 tip 的小费——你给得越多,你的交易在 BoltTx 的提交优先级越高、上链速度越快,而且只有交易真正上链时才扣。建议把 priority fee 设得明显高于当前网络平均水平,再配合 BoltTx tip,两个一起调好,上链速度才最快

import { Connection } from "@solana/web3.js";

const connection = new Connection(
  "https://bolttx.io/?api-key=YOUR_API_KEY",
  "processed"
);

免费档注册。用真实量配显式 priority fee 策略跑一周,对比每个 priority fee 等级下的上链率,和你当前配置比一比。

常见问题

Solana DEX swap 的典型 priority fee 是多少? 看网络状况。拥堵期间 100k-500k microlamports/CU 很常见。平静期低得多。永远查最近的地板值。

不设 priority fee 会怎样? 默认是 0。没拥堵的时候交易能上链,拥堵时大概率上不去。生产代码永远要显式设置。

模拟和真实提交需要给一样的 priority fee 吗? 模拟可以不给(它只是模拟)。真提交时根据预期利润设。

Jito tip 跟 priority fee 是一回事吗? 不是。Priority fee 是 Solana 协议层的链上 gas fee。Jito tip 是走 Jito 拍卖的、用来换 MEV 保护或 bundle 打包的费用。两套不同机制;有时候两个一起用。

所有 RPC 都能拿到 priority fee 数据吗? 大多数通过 getRecentPrioritizationFees 暴露。质量参差。生产级 RPC 应该可靠地暴露最近的地板值。

延伸阅读

返回博客列表