跳到主要内容
Ultra Fast Stream执行前路线。若需要带费用、价格和储备的已执行交易,请使用 高级数据流。

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 用来行动,已执行流用来记账。

领先多少​

同一笔 pump.fun 交易在每条数据流上的到达时间,从美国读取:纽约地区的 Ultra Fast Stream 最先,纽约高级数据流晚 6 ms,pumpapi.io 晚 16 ms,PumpPortal 晚 115 ms

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 提供的从发射到买入落地的最短路径。跟单模式也一样:在这里跟踪一个钱包,在那里镜像它的买入。