Solana 私有 RPC:同一个词卖的是三种东西

「私有」在 Solana 上指三件不同的事:独占节点、不被窥探的提交路径、不公开的地址。你需要哪一种,取决于你到底在防什么。

BoltTx Team··16 min read
solana私有rpc独占节点mev交易上链基础设施

搜"Solana 私有 RPC",你会看到三个毫不相干的产品,用的却是同一个词。团队买了其中一个,以为拿到的是另一个,然后在某次上新时发现:自己真正担心的那件事,从来就没被覆盖过。

下面讲清楚这三种分别是什么,以及怎么判断自己需要哪一种。

三种含义

一、私有 = 独占硬件

一个只有你在用的节点。没有别的客户和你抢容量,所以别人的流量高峰不会变成你的限流。

它解决什么: 吵闹的邻居。吞吐量是你自己的。

它不解决什么: 任何关于"谁能看到你交易"的问题。独占节点照样通过正常路径把交易转发给验证节点,你的交易在传输途中的可见程度,和共享端点没有区别。

谁需要: 持续高请求量,通常是读为主的场景 —— 索引器、数据分析、以及任何轮询频繁到会撞上共享档限流的业务。

二、私有 = 提交路径

你签好名的交易送达出块方,中途不经过会检查它的参与方。

它解决什么: 防止中间环节在交易落块前看到你的意图,进而抢跑或夹你。

它不解决什么: 容量问题。私密路径照样可能被限流,而且对读取吞吐毫无帮助。

谁需要: 任何交易意图一眼就能看出有利可图的人 —— 大到值得被夹的 swap、狙击、清算、套利。

三、私有 = "地址没公开"

一个主机名很难猜、或者 API key 直接放在 URL 里的端点。没有 key 就用不了。

它解决什么: 别人盗用你的配额。

它不解决什么: ★上面两条,一条都不解决。★ 地址难猜是访问控制,不是"流经它的内容是私密的"。

★这一种最常被误当成第二种。★ 端点难猜,和"谁在把你的交易送往验证节点的路上读了它",完全是两回事。

如果你已经确定需要的是提交路径,免费领个 BoltTx key 改一行就行。

你到底需要哪一种

从你担心什么出发,而不是从这个词出发:

你的顾虑 你需要的
流量高峰时被限流 独占容量
有人抢跑我的 swap 私密提交路径
别人盗用我的配额 访问控制(每家都有)
高负载时交易不上链 ★两者都不是 —— 这是路由和费用问题★

★最后一行值得停一下。★ "私有 RPC"经常被拿来当作上链问题的解药,而这通常是开错了药。如果你的交易不上链,原因一般是 blockhash 过期、priority fee 不够、没有重试循环、或者提交路径被降级。独占节点一个都改变不了。

独占节点为什么会被过度推销

这个说辞很符合直觉:自己的节点、不和人共享、性能更好。对读取负载来说,这个推理是成立的。

但对发送来说通常不成立,原因值得搞清楚。

你提交交易时,你的节点把它转发给接下来负责出块的验证节点。而对方收不收,取决于转发方背后有多少质押 —— 这就是 SWQoS。一个背后没有足够质押的独占节点,在拥堵时被降级的程度和共享节点是一样的。

★你为一个从来不是瓶颈的环节,买了独占容量。★

发送的瓶颈在你的节点之后,不在有多少人和你共用它。

怎么验证"私有"到底有没有起作用

三种含义各有各的验证方法。你买的是哪种,就跑哪种。

验证独占容量 —— 压它,看会不会 429:

// 并发发起远超日常峰值的读请求。
// 独占容量应该扛得住;共享档会开始拒绝。
const results = await Promise.allSettled(
  Array.from({ length: 200 }, () => connection.getSlot()),
);
const rejected = results.filter((r) => r.status === "rejected").length;
console.log(`被拒: ${rejected} / 200`);

验证提交私密性 —— 长期对比报价成交量和实际成交量:

log({
  pair,
  sizeIn,
  quotedOut,
  actualOut,
  slippageBps: Math.round(((quotedOut - actualOut) / quotedOut) * 10_000),
  route,
});

在你最有利可图的那批 swap 上持续出现负向差值,就是被夹的样子。单笔糟糕的成交是噪音;几百笔才能告诉你改路由之后分布有没有移动。

验证上链 —— 按网络状况分桶,因为路径的差别只在拥堵时显现:

const recent = await connection.getRecentPrioritizationFees();
const fees = recent.map((r) => r.prioritizationFee).sort((a, b) => a - b);
const medianFee = fees[Math.floor(fees.length / 2)] ?? 0;

metrics.record("submission", {
  landed: didItLand,
  bucket: medianFee > 50_000 ? "busy" : "calm",
});

如果 busy 桶的上链率也稳得住,说明你的路径没问题,私密性从来就不是你的瓶颈。

大多数生产环境最后都会走到的那个分工

迭代够多次之后,团队往往收敛到同一个形态:★读用一家,发用另一家。★

原因是这两种负载想要的东西正好相反。读要的是吞吐、宽松的限流、解析好的响应、以及足够深的历史。发要的是到出块方的短路径、转发方背后的质押、以及传输途中不被观察。

用一个端点同时优化这两件事,意味着两边都要妥协。而这两个集成点本来就是独立的,拆开在架构上不花任何代价 —— 换其中一个不用动另一个。

买之前该问什么

"私有"是哪个意思? 一句话答不上来的服务商,答案多半是第三种。

从提交到收录之间,有哪些方能看到我的交易? 你要的是具体名单,不是安慰。

订单流卖不卖、共享不共享? 一个词就能答。

这会影响上链率,还是只影响限流? 很多"私有 RPC"产品本质是容量产品。这没问题,只要你知道。

拥堵时会怎样? 在一个安静的下午,所有产品表现都一样。

上链应该是什么水平

我们投递节点上的真实交易:中位确认 336 毫秒 —— 不到一个 slot。

如果一个独占节点没能把你的数字往这个水平推,那说明容量本来就不是拖住你的东西。

BoltTx 在这里的位置

我们是第二种,而且只是第二种。

BoltTx 把交易提交路由到我们自建的四区域投递节点,带 SWQoS 路由,不暴露公共 mempool —— 所以交易在落块之前,传输途中是观察不到的。我们不卖独占读取容量,也不做索引、解析历史、NFT 元数据。读的那一半,你配一家适合自己负载的服务商就行。

你在本地签名。我们不托管资金、不代签、不修改交易内容。tip 带在交易里,从你自己的钱包链上支付 —— 交易 revert 的话 tip 跟着一起 revert,这是 Solana 原子交易的机制决定的。只有到达链上的交易才计费。

免费领 API key,没有月费:

// 选离你机器人最近的区域
const connection = new Connection("https://la.bolttx.io/?api-key=YOUR_KEY");

然后把上面那几个测试跑一遍。★不管你真正需要的是哪一种"私有",跑完你就知道自己有没有拿到。★

常见问题

Solana 的私有 RPC 是什么? 这个词涵盖三种不同的东西:没人和你共享的独占节点、中间环节无法观察你交易的提交路径、以及地址不公开的端点。它们解决不同的问题,买了其中一个不等于拿到另外两个。

我需要 Solana 独占节点吗? 只有在共享档撞限流的时候才需要,而那通常意味着读流量很重。对发送交易来说,独占节点不改变验证节点如何对待你的流量,所以很少能改善上链。

私有 RPC 能防夹子攻击吗? 只有当"私有"指的是提交路径时才能。独占节点或者不公开的地址,对"谁在你交易送往出块方的路上观察它"毫无作用。假设它有保护作用之前,先问清楚是哪一种含义。

私有 RPC 比公共的快吗? 读取通常更快,因为你不用排在别的客户后面。发送的决定因素在你的节点之后 —— 质押权重和路由 —— 而这不是独占容量能解决的。

私有 RPC 和 private mempool 有什么区别? Solana 没有公共 mempool,所以"private mempool"是从别的链搬过来的说法,对不上。这里对应的真实顾虑是:你的提交路径会不会在交易落块前把它暴露给中间环节。

私有 RPC 能解决我交易不上链的问题吗? 通常不能。上链失败一般是 blockhash 过期、priority fee 不够应对当前拥堵、没有重试循环、或者提交路径被降级。只有最后一条和你的端点有关,而且它关乎的是质押权重,不是独占性。

能不能读用一家、发用另一家? 可以,而且很多生产环境就是这么配的。两种负载想要的东西不同,而集成点互相独立 —— 换其中一个不用动另一个。

怎么知道我现在的 RPC 有没有泄露我的交易? 你没法直接检查,所以要测结果:在相同交易对上,长期记录报价成交量和实际成交量。在最有利可图的那批 swap 上持续出现负向差值,就是有人在根据你的意图行动的迹象。

URL 里带个 API key,算不算私有? 在访问控制的意义上算 —— 别人不能花你的配额。但它完全不涉及"谁能观察流经它的交易",而后者才是大多数人真正想问的那个含义。

私有 RPC 对 getAccountInfo 这类读取有帮助吗? 独占容量有帮助,因为你拿到的吞吐不和别人共享。提交私密性没有,因为它只涉及发送出去的交易。产品要对上负载类型。

我的 RPC 服务商能在交易落块前看到它吗? 能 —— 你从谁那里提交,谁就经手了那份已签名字节,所以这个问题值得对任何一家服务商问一遍。真正要紧的是:这条路径上有几方,以及他们在合同上和技术上能拿看到的东西做什么

钱包应用需要私有 RPC 吗? 很少需要。钱包是读为主的,而且它们的交易通常没有携带足够被抢跑的可见价值。独占读取容量比提交私密性更重要。

Solana 独占节点大概多少钱? 比共享档贵得多,而且各家定价差异很大。付钱之前,先确认你的约束到底是限流还是上链 —— 这是两个不同的问题。

能测出我的 RPC 有没有泄露交易吗? 没法直接测,但可以测结果。长期记录报价成交量和实际成交量的差。在有利可图的那批 swap 上持续出现负向差值,就是它的特征。

私有 RPC 能改善 getProgramAccounts 的性能吗? 独占容量能,因为重查询不用和其他客户竞争。提交私密性不能,因为它只涉及发送、不涉及读取。

延伸阅读

返回博客列表