交易
POST https://sol.shrine.trade/api/lightspeed。Lightspeed 随 Lite 和 Developer 提供,交易从以下两种钱包之一发出:
- 控制台钱包。 在控制台上创建一个,或关联一个你在这里创建的,然后把它的
ls_密钥放在x-api-key里发送。它按你账户的套餐交易。 - 你自己的钱包。 把你套餐的密钥(
sk_…)放在x-api-key里,钱包的privateKey放在请求体里。
- JavaScript
- Python
- curl
const res = await fetch("https://sol.shrine.trade/api/lightspeed", {
method: "POST",
headers: { "content-type": "application/json", "x-api-key": "ls_…" }, // 控制台钱包的密钥
body: JSON.stringify({
action: "buy", // "buy" 或 "sell"
mint: "<token mint>",
amount: 0.5, // 买入时为 SOL;卖出时为代币数量或 "100%"
slippage: 25, // 百分比;狙击需要留足余量
priorityFee: 0.002, // SOL,总额
tip: 0.001, // SOL,每份服务商副本;只付一次,由落地的副本支付
providers: ["shrine", "temporal"], // Developer:参与竞速的通道(省略即为这两家,["all"] 为全部);Lite:只有 shrine
}),
});
const r = await res.json();
console.log(r.success, r.signature, r.submissions);
import os, requests
r = requests.post(
"https://sol.shrine.trade/api/lightspeed",
headers={"x-api-key": "ls_…"}, # 控制台钱包的密钥
json={
"action": "buy",
"mint": "<token mint>",
"amount": 0.5,
"slippage": 25,
"priorityFee": 0.002,
"tip": 0.001,
"providers": ["shrine", "temporal"], # Developer:参与竞速的通道(省略即为这两家,["all"] 为全部);Lite:只有 shrine
},
).json()
print(r["success"], r["signature"], r["submissions"])
curl -X POST https://sol.shrine.trade/api/lightspeed \
-H "content-type: application/json" -H "x-api-key: ls_…" \
-d '{ "action": "buy", "mint": "<token mint>", "amount": 0.5, "slippage": 25, "priorityFee": 0.002, "tip": 0.001, "providers": ["shrine", "temporal"] }'
请求
| 字段 | ||
|---|---|---|
apiKey | string | Lightspeed 钱包的 ls_ 密钥,放在这里或 x-api-key 请求头里。 |
privateKey | string | 替代钱包密钥:你自己钱包的私钥,base58,同时在 x-api-key 里带上你套餐的密钥。它只为这一笔交易签名,随后丢弃;不存储任何东西。 |
action | "buy" | "sell" | |
mint | string | 代币 mint,base58。 |
amount | number | string | 买入时为 SOL(计价币上为计价代币)。卖出时为代币数量,或余额的 "100%" / "50%"。 |
slippage | number | 百分比。默认 5。 |
priorityFee | number | 优先费总额,单位 SOL。默认 0.001。 |
tip | number | 每份服务商副本的小费,单位 SOL。默认 0.001,能到达除 Node1(0.002)以外的全部服务商。只有落地的副本付它。最低值高于它的服务商不参与竞速。 |
pool | string | 强制指定发射平台:pumpfun、pumpswap、bonk、raydium_cpmm、raydium_amm_v4、meteora_damm_v2、meteora_dbc。省略则由实时缓存自动路由。 |
poolAddress | string | 用于 AMM,当缓存里没有该 mint 的池子时。 |
guard | boolean | 只成交一次保护。默认 true。设为 false 时每份副本都可能落地,钱包会按服务商数量各成交一次。 |
providers | string[] | Developer:哪些落地服务商参与这笔交易的竞速,用小写名称。在 Lite 上交易只经 shrine 发出,此字段被忽略。省略:两家默认,shrine 和 temporal。["all"]:该地区的全部服务商。其他列表:精确为所列的那些,不额外添加。不在 GET /api/lightspeed/providers 上的名称会得到 400;所列服务商都不接受你的 tip 时同样得到 400。 |
在 x-api-key 里带上你套餐的密钥,在请求体里带上 privateKey,交易就用你的钱包签名。私钥只用于这一个请求,随后丢弃:不存储、不记录。控制台钱包能让私钥不上网;这个选项是给已经持有自己钱包、又想要同样竞速的机器人准备的。
headers: { "content-type": "application/json", "x-api-key": "sk_…" }, // 你套餐的密钥
body: JSON.stringify({ action: "buy", mint, amount: 0.5, slippage: 25, privateKey: "<base58>" }),
不在你账户上的 Lightspeed 钱包也一样:x-api-key 里放你套餐的密钥,钱包的 ls_ 密钥作为 apiKey 放在请求体里。
所属账户没有生效中套餐的钱包,或不带套餐密钥的请求,会得到 403:
{ "error": "plan_required", "plan": "lite", "message": "Lightspeed comes with Lite and Developer: …", "upgrade": "https://shrine.trade/api/pricing/" }
服务商:哪些路径参与竞速
在 Developer 上,借助多服务商竞速,一笔 Lightspeed 交易不是只走一条路径。它为每家服务商各签一次,所有副本在同一瞬间发出;最先到达 leader 的那份成交,其余在转移资金之前失败,只有胜出的副本付它的小费。详情见 SWQoS 页面。
不带 providers 时,交易在 Shrine(shrine,该地区的质押 RPC,从不收小费)和 Temporal(temporal)之间竞速。这一对能以一份小费把大多数交易落在下一个 slot(槽位)。只有在争抢拥挤的 slot 时才加更多服务商,不要提前加:每多一份回滚的副本都要花掉它的优先费。
按交易启用更多或不同的服务商:
// 该地区的全部
body: JSON.stringify({ action: "buy", mint, amount: 0.5, slippage: 25, tip: 0.001, providers: ["all"] })
// 精确指定这些,不额外添加
body: JSON.stringify({ action: "buy", mint, amount: 0.5, slippage: 25, tip: 0.001, providers: ["temporal", "jito", "astralane"] })
// 只走我们自己的路径,完全不付小费
body: JSON.stringify({ action: "buy", mint, amount: 0.5, slippage: 25, tip: 0, providers: ["shrine"] })
GET https://sol.shrine.trade/api/lightspeed/providers 列出该地区此刻拥有的服务商,各带最低小费以及是否为默认:
[
{ "name": "shrine", "minTipSol": 0, "default": true },
{ "name": "temporal", "minTipSol": 0.001, "default": true },
{ "name": "jito", "minTipSol": 0.000001, "default": false },
{ "name": "astralane","minTipSol": 0.00001, "default": false }
]
最低值高于你 tip 的服务商不会参与竞速。默认的 0.001 能到达除 Node1 以外的全部,tip: 0.002 能到达全部;tip: 0 只能到达 shrine。列表里没有任何服务商能参与时,会得到 400,并附上各家的最低小费。
响应
{
"success": true,
"signature": "3nQ…",
"submissions": [
{ "provider": "temporal", "signature": "3nQ…", "accepted": true, "ms": 9.1 },
{ "provider": "shrine", "signature": "4Rc…", "accepted": true, "ms": 11.7 }
],
"feeLamports": 1250000,
"quoteMint": "So11111111111111111111111111111111111111112",
"tipLamports": 1000000,
"slot": 447483508,
"guard": true,
"buildMs": 1.8
}
在 Lite 上,指定了其他服务商的请求仍然只经 shrine 发出,应答里会带一条 warning 说明这一点。
success 表示至少有一家服务商接受了交易。任何被接受的副本都可能是落地的那份,所以要确认的话,请监视 submissions 里的每个签名(或者干脆看钱包余额)。ms 从请求到达我们服务器起算,到该服务商确认为止。slot 是副本发出时我们的数据源见到的最新 slot;落地交易的 slot 减去它,就是你的落地所用 slot 数。
应答在第一家服务商接受时就发出:只要有一家拿到了交易,交易就已在路上,另一家较慢的确认不会拖住应答。此刻仍在途中的副本列在 pending 里,带 provider 和 signature(所有服务商都已应答时该字段不出现)。它的签名在发出前就已确定,所以请像监视 submissions 里的签名一样监视它:任何副本都可能是最终落地的那份。
只成交一次,绝不两次
每份副本承载同一笔交易、不同的小费,所以各有自己的签名,任何一份都可能是落地的那份。最先执行的那份成交;其余在转移资金之前在链上失败。失败的副本只花掉它的优先费,别无其他:小费在同一笔交易里,随交易一起失败。因此交易只发生一次,小费也只付一次,付给副本落地的那家服务商。
只有在你确实想按服务商各买一次时,才设置 guard: false。
一份回滚的副本的代价是它的基础费(0.000005 SOL)加上它的优先费,再无其他。leader 从未打包的副本不花钱。所以把预算放进只有胜出副本才付的 tip,把 priorityFee 保持适中:0.00002 SOL 时三份回滚副本共花 0.000075 SOL,0.001 时则花 0.003。
费用
没有:Lightspeed 随 Lite 和 Developer 提供,这两个套餐交易费率为 0%。小费由你自行设定,付给副本落地的那家服务商。在 Lite 上,竞速只有 Shrine 通道;在 Developer 上,providers 写上更多名称或 ["all"],就让所有通道一起竞速。见套餐与限额。
提速清单
- 保持钱包有余额,这样没有请求需要等待充值。
- 你的流一显示发射就立刻发送
mint;subscribe_stream的create事件带有它。pump.fun 的币仅凭 create 事件就能买入,API 无需为此读链。 - 把你的机器人运行在它旁边的地区;我们这边只增加约一毫秒。
- 发射拥挤时用
providers: ["all"]增加服务商并提高tip;否则保持默认。
LimitsLite Shrine lane, ~100 ms · 3 req/sDeveloper 8 lanes raced, ~50 ms · 10 req/sSee plans →