高级数据流
按池子的流回答的是"这个代币发生了什么"。这一条回答的是"这笔交易里发生了什么",覆盖我们索引的每个发射台上的每一笔交易。服务端推送 stream。免费、无需密钥、一条连接。
用于跟单、貔貅过滤,以及任何需要整个市场而不是单个池子的场景。如果你只关心几个代币,subscribe_trades 对你我都更省。
| 通道 | Socket.IO 事件 |
| 认证 | 无,不需要 API 密钥 |
| 推送 | stream |
| 费用 | 免费 |
| 过滤 | 可选的 protocols 和 actions 列表 |
示例
- JavaScript
- Python
import { io } from "socket.io-client";
const socket = io("https://sol.shrine.trade");
// 全部,或者按协议 / 动作缩小范围。
socket.emit("subscribe_stream", {
protocols: ["PUMPFUN", "PUMPSWAP", "STONKFUN"],
actions: ["buy", "sell", "create"],
});
socket.on("stream", (e) => {
if (e.action === "create" && (e.mintAuthority || e.freezeAuthority)) return; // 不是干净的发射
if (e.action === "buy") console.log(e.mint, e.tradersInvolved, e.quoteAmount, e.price);
});
// 之后要停止(免费):socket.emit("unsubscribe_stream");
import socketio
sio = socketio.Client()
sio.connect("https://sol.shrine.trade")
sio.emit("subscribe_stream", {"actions": ["create", "migrate"]})
@sio.on("stream")
def on_stream(e):
print(e["action"], e["protocol"], e.get("mint"), e.get("tradersInvolved"))
sio.wait()
动作
action | 何时 | 协议 |
|---|---|---|
buy / sell | 任何交换。每笔交易每个池子一个事件;一笔交易里的多次交换会被聚合,并带逐笔的 breakdown。 | 所有发射台 |
create | 发射台铸币。 | PUMPFUN、PUMPFUN_MAYHEM、BONK、METEORA_DBC |
createPool | 在已有代币上开的 AMM 池子。 | PUMPSWAP、RAYDIUM、RAYDIUM_CLMM、METEORA、METEORA_DLMM、ORCA |
migrate | 曲线毕业进入它的 AMM。 | PUMPFUN→PumpSwap、BONK→Raydium、METEORA_DBC→DAMM v2 |
curveComplete | DBC 曲线打满,迁移之前。 | METEORA_DBC |
add / remove | 添加或撤出流动性。 | PumpSwap、Raydium CPMM 和 AMM v4、DAMM v2、DLMM、Orca |
claimCreatorFees | 创作者领取费用。 | PUMPFUN、PUMPSWAP |
载荷
每个事件都带 signature、block、timestamp、action、protocol 和付费方 txSigner。txSigner 不总是交易者:机器人会经由中继。跟单请用 tradersInvolved。
成交
{
"signature": "…", "block": 445627693, "timestamp": 1788976012,
"action": "buy", "protocol": "PUMPFUN", "txSigner": "…",
"pool": "…", "mint": "…", "quoteMint": "So111…",
"tokenAmount": 31952.74, "quoteAmount": 0.0161, "price": 0.000000504,
"marketCapQuote": 504.1, "tokensInPool": 1041000000, "quoteInPool": 30.5,
"tradersInvolved": ["…"],
"breakdown": [
{ "trader": "…", "action": "buy", "tokenAmount": 31952.74, "quoteAmount": 0.0161, "price": 0.000000504 }
]
}
price 和池子储备是发射台报告的交易后状态。marketCapQuote 是价格乘以供应量,以计价资产计。数量为 UI 单位。
创建
{
"action": "create", "protocol": "PUMPFUN",
"mint": "…", "pool": "…", "quoteMint": "So111…", "creator": "…",
"name": "…", "symbol": "…", "uri": "…", "decimals": 6, "supply": 1000000000,
"tokensInPool": 1073000000, "quoteInPool": 30,
"initialBuy": { "quoteAmount": 0.5, "tokenAmount": 17000000 },
"mintAuthority": null, "freezeAuthority": null, "tokenExtensions": []
}
诚实的发射里 mintAuthority 和 freezeAuthority 都应为 null;有值意味着可以增发或冻结钱包。tokenExtensions 按名称列出 Token-2022 扩展;在可信发射台之外,transferFeeConfig 和 permanentDelegate 值得多看一眼。initialBuy 是创作者在发射交易里自己的买入,没有则为 null。权限和扩展从创建时的 mint 账户读取;如果 mint 早于这条流存在,可能缺失。
迁移与池子
迁移带 fromPool、toPool 和 toProtocol。池子创建带 pool、creator,以及已知时的 mint 和 quoteMint。流动性事件带 pool、owner 和两侧的原始数量(amountARaw、amountBRaw);侧与 mint 的对应遵循发射台自己的顺序。
试一试
说明
- 每个客户端请只开一条连接。过滤按 socket 进行,所以开一条连接、订阅一次即可。
- 一笔交易的事件按固定顺序推送:先成交,然后创建和池子创建,再迁移和流动性,最后费用领取。
- 这条流的每个事件也按小时归档,供回测使用:见历史回放。