Ultra Fast Stream
这条链上的其他每一条数据流,包括我们自己的,都要等区块执行:节点运行交易、写下结果,数据流再把它传出去。Ultra Fast Stream(超快流)不等。它在 shreds(分片)到达的那一刻直接从中读出交易,在区块运行之前就把每一笔 pump.fun 和 PumpSwap 交易发给你。
什么是 shreds
Solana 的区块不是作为一个整体传播的。leader 把它切成叫 shreds 的小数据包,一边构建区块一边发出,所以网络的其他部分在区块还在生成时就开始接收它。凑齐足够多的 shreds,你就拿到了区块里的交易,顺序正是 leader 排定的,而此时还没有任何节点执行过它们。这条流监听的正是这个。这是除 leader 之外任何人能看到一笔交易的最早时点。
为什么它携带的比高级数据流少
高级数据流描述的是一笔交易做了什么:成交的价格、收到的代币、付出的费用、留下的储备。shred 到达时这些都还不存在,因为什么都还没执行。Ultra Fast Stream 只能告诉你一笔交易请求了什么:谁发的、哪个币、买还是卖、提交的金额。它发得更早,所以知道得更少。这就是交换条件,也正是全部意义所在:发射和意图是机器人据以行动的东西,结果是它用来记账的东西。
wss://sol.shrine.trade/api/ultrafast/stream?key=…
你能更早拿到什么
- 一次发射,连同它的 mint。 pump.fun 的
create在指令本身里就写明了 mint、联合曲线、创建者和元数据 URI。区块还不存在时你就握有 mint,一笔 Lightspeed 买入可以在同一瞬间发出。 - 每一笔买卖,按提交原样。 交易者、mint、请求的代币数和出价的 SOL。在 PumpSwap 上,还有池子和计价 mint。
- 包括回滚。 一笔将要失败的交易仍然是 leader 即将运行的交易;它在这条流上,而永远不会出现在已执行的流上。
它不能携带什么
任何只在执行之后才存在的东西:实际支付的 SOL、实际收到的代币、交易后的储备、费用、日志、余额或是否成功。高级数据流几毫秒后会带来这一切。两条都用:Ultra Fast Stream 用来行动,已执行流用来记账。
领先多少
2026-10-08 在美国的一台机器上,通过公开的 socket,针对同一批交易实测:纽约地区的 Ultra Fast Stream 在 98% 的 pump.fun 交易上最先拿到:比同地区我们自己的高级数据流早 6 ms,比从法兰克福服务所有客户的 pumpapi.io 早 16 ms,比 PumpPortal 的新代币流早约 115 ms。相对最好的已执行流,领先不大;相对其他所有流,领先很大;它买到的是事件的完整先后顺序,而不是固定的抢跑时间。
密钥
Ultra Fast Stream 需要密钥。加入 Telegram 群申请;它和解锁 OHLCV 事件的是同一把密钥。通过 ?key= 或 x-api-key 请求头传入。
数据流
wss://sol.shrine.trade/api/ultrafast/stream?key=…[&mints=…][&wallets=…][&creates=1][&all=1]
一条普通的 WebSocket,JSON 文本帧。在查询字符串里说明你要什么,或之后用消息更改;每次更改都由 subscribed 确认。
const ws = new WebSocket("wss://sol.shrine.trade/api/ultrafast/stream?key=…&creates=1");
ws.onmessage = (m) => {
const e = JSON.parse(m.data);
if (e.type === "create") {
console.log("launch", e.symbol, e.mint); // 区块还不存在时就拿到 mint
ws.send(JSON.stringify({ subscribe: [e.mint] })); // 并跟踪它的交易
}
if (e.type === "trade") console.log(e.side, e.mint, e.solAmount, "SOL", e.trader);
};
订阅
| 查询参数 | 消息 | |
|---|---|---|
mints=…,… | {"subscribe": [...]},{"unsubscribe": [...]} | 这些 mint 的交易(最多 500 个)。 |
wallets=…,… | {"subscribeWallets": [...]},{"unsubscribeWallets": [...]} | 这些钱包在 pump.fun 和 PumpSwap 上的所有动作。 |
creates=1 | {"creates": true} | 每一次发射。默认关闭。 |
all=1 | {"all": true} | 整条带子。 |
{"ping": true} | 回复 {"type": "pong"}。 |
connected 只来一次,带有数据流见到的最新 slot(槽位)以及当前生效的订阅。
事件
每个事件都带有 signature、slot、recv(从数据流取出时的挂钟时间,毫秒)、mint、trader 和 "preExecution": true。
create
{
"type": "create", "protocol": "PUMPFUN", "preExecution": true,
"signature": "3nQ…", "slot": 447483508, "recv": 1791325200123,
"mint": "…pump", "trader": "…",
"name": "…", "symbol": "…", "uri": "https://…",
"bondingCurve": "…", "creator": "…"
}
createV2: true 标记通过较新的 create 指令发起的发射。通常紧随其后、在同一笔交易里的开发者买入,会作为带 "createBuy": true 的 trade 到达。
trade
{
"type": "trade", "protocol": "PUMPFUN", "preExecution": true,
"signature": "5aP…", "slot": 447483509, "recv": 1791325200231,
"mint": "…pump", "trader": "…",
"side": "buy", "tokenAmount": 1250000000000, "solAmount": 0.5, "solLamports": 500000000,
"createBuy": false
}
金额是指令请求的数值,因为什么都还没执行:买入时,tokenAmount 是请求的代币数,solAmount 是交易者最多愿付的 SOL;卖出时,tokenAmount 是卖出的数量,solAmount 是最少接受的 SOL。PumpSwap 的交易则改为携带 pool、quoteMint、tokenAmount 和 quoteLamports(买入时为最大投入,卖出时为最小产出)。
连接消息
{"type": "lagged", "dropped": n} 表示你的客户端读得太慢,跳过了 n 个事件。{"type": "error", "message": …} 用于回应错误的消息。数据流会自行重连。
与 Lightspeed 搭配
这条流上的一个 create,加上一个带其 mint 的 Lightspeed 请求,是本 API 提供的从发射到买入落地的最短路径。跟单模式也一样:在这里跟踪一个钱包,在那里镜像它的买入。