跟单
跟踪一个或多个钱包,它们买什么你就买什么,它们卖的时候你也卖。Advanced Data Stream(高级数据流)展示一个钱包在我们索引的每个发射平台上的每一笔交易,Lightspeed 一次请求就能镜像它。
你需要什么
- Node.js 22 或更新版本,
npm install socket.io-client。 - 一个已充值的 Lightspeed 账户。
- 要跟踪的钱包。数据流本身就是找钱包的地方:观察几次发射,记下谁早期买入并盈利卖出。
脚本
import { io } from "socket.io-client";
// ─── 改这些 ───────────────────────────────────────────
const LS_KEY = "ls_…";
const FOLLOW = ["WALLET_1", "WALLET_2"]; // 要跟单的钱包
const COPY_RATIO = 0.1; // 跟它们仓位的 10% ……
const MIN_SOL = 0.01; // ……但至少这么多
const MAX_SOL = 0.5; // ……最多这么多
const SLIPPAGE = 10;
const TIP = 0.0007;
const MAX_OPEN = 8;
const DRY_RUN = true;
// ──────────────────────────────────────────────────────
const API = "https://sol.shrine.trade";
const follow = new Set(FOLLOW);
const open = new Map(); // mint -> { from }
async function lightspeed(body) {
if (DRY_RUN) { console.log(" dry-run", body); return { success: true }; }
const r = await (await fetch(`${API}/api/lightspeed`, {
method: "POST", headers: { "content-type": "application/json", "x-api-key": LS_KEY }, body: JSON.stringify(body),
})).json();
if (!r.success) throw new Error(`${r.error}: ${r.message}`);
return r;
}
const socket = io(API, { transports: ["websocket"] });
socket.on("connect", () => {
// 只要交易,覆盖所有发射平台;下面的筛选挑出钱包。
socket.emit("subscribe_stream", { actions: ["buy", "sell"] });
console.log("following", FOLLOW.join(", "));
});
socket.on("stream", async (e) => {
// 每笔交易一个 stream 事件;`breakdown` 列出每个交易者的那一段。
// 被跟踪钱包的那一段就是我们要跟的,不管它走的是哪个路由。
const leg = (e.breakdown || []).find((b) => follow.has(b.trader));
if (!leg) return;
if (leg.action === "buy") {
if (open.has(e.mint) || open.size >= MAX_OPEN) return;
const sol = Math.min(MAX_SOL, Math.max(MIN_SOL, leg.quoteAmount * COPY_RATIO));
console.log(`${leg.trader.slice(0, 6)} bought ${e.mint.slice(0, 6)} for ${leg.quoteAmount} SOL -> copying ${sol}`);
try {
await lightspeed({ action: "buy", mint: e.mint, amount: sol, slippage: SLIPPAGE, tip: TIP });
open.set(e.mint, { from: leg.trader });
} catch (err) {
console.error(` buy failed: ${err.message}`);
}
} else if (leg.action === "sell" && open.has(e.mint)) {
console.log(`${leg.trader.slice(0, 6)} sold ${e.mint.slice(0, 6)}`);
open.delete(e.mint);
try {
await lightspeed({ action: "sell", mint: e.mint, amount: "100%", slippage: SLIPPAGE, tip: TIP });
} catch (err) {
console.error(` sell failed: ${err.message}`);
}
}
});
每个部分做什么
- 按 breakdown 匹配,而不是按
txSigner:大多数交易经过路由,所以签名者是路由的付款方,而你跟踪的钱包是 breakdown 里的交易者。在那里匹配,就能跟上通过任何机器人发出的交易。 - 仓位大小按比例并设下限和上限:巨鲸的 20 SOL 变成 0.5,0.05 SOL 的试探变成 0.01。如果你更喜欢固定数量,改规则即可。
- **部分卖出。**脚本在看到第一次卖出时就平掉整个仓位。要镜像部分退出,把
leg.tokenAmount和该钱包交易前的余额比较,然后卖出同样的比例。 - **非 SOL 报价的代币。**以 USDC 或股票计价的代币在 Lightspeed 上用 SOL 买入;
amount仍然是 SOL。响应里的quoteMint说明它以什么结算。
紧跟在它们后面
你的跟单会比被跟的交易晚一两个 slot(槽位)落地,排在所有跟同一个钱包的人后面。两件事能缩短这段距离:在离你最近的区域运行,以及在重要的跟单上提高 tip。专门针对发射的话,狙击指南展示了 Ultra Fast Stream(超快流)的数据流,它也带有钱包筛选(wallets=):同样的跟单,提前一个区块,在交易执行之前。
找到值得跟的钱包
数据流里有你需要的一切。维护一张交易者 → 在一分钟内新发射上的买入以及它们的卖出的映射;一天之后,按已实现利润排名。既早又会卖的钱包才值得跟;只买不卖的钱包是在囤包袱。