交易
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,以 USDC 或股票计价的币也是(SOL 在同一笔交易里换成其计价资产)。卖出时为代币数量,或余额的 "100%" / "50%"。 |
settle | string | 以 USDC、股票或其他代币计价的币:"sol"(默认)在一笔交易里经计价资产自己的池用 SOL 买卖;"quote" 从钱包里的计价资产支付,并以计价资产收款。见以其他资产计价的币。 |
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 时每份副本都可能落地,钱包会按服务商数量各成交一次。 |
nonce | boolean | 用钱包的持久 nonce 竞速。默认 false。只有第一份副本能执行;其余副本在执行前就被丢弃,不花任何费用,连优先费也不用。用 POST /api/lightspeed/nonce 为钱包创建一次 nonce 账户(约 0.001 SOL 租金,仍归钱包所有;见 Nonce 账户)。没有创建时,第一笔 nonce: true 的交易会创建它,在此期间按常规方式竞速。见下文"只成交一次"。 |
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, "sentUs": 98 },
{ "provider": "shrine", "signature": "4Rc…", "accepted": true, "ms": 11.7, "sentUs": 124 }
],
"feeLamports": 1250000,
"quoteMint": "So11111111111111111111111111111111111111112",
"tipLamports": 1000000,
"slot": 447483508,
"guard": true,
"buildMs": 0.07,
"timingsUs": {
"toHandler": 35, "outerLayers": 14, "requestLog": 8, "gate": 13,
"plan": 0, "wallet": 21, "checks": 3, "blockhash": 0, "holdings": 1,
"build": 12, "guard": 1, "firstSign": 23, "firstSend": 98, "lastSend": 124
}
}
在 Lite 上,指定了其他服务商的请求仍然只经 shrine 发出,应答里会带一条 warning 说明这一点。
success 表示至少有一家服务商接受了交易。任何被接受的副本都可能是落地的那份,所以要确认的话,请监视 submissions 里的每个签名(或者干脆看钱包余额)。ms 从请求到达我们服务器起算,到该服务商确认为止。slot 是副本发出时我们的数据源见到的最新 slot;落地交易的 slot 减去它,就是你的落地所用 slot 数。
timingsUs 是我们这边的时间花在了哪里,单位微秒,从请求到达起算:到达处理程序、打开钱包、构建交易、签名第一份副本(firstSend 是它发出的时刻,lastSend 是最后一份副本)。每条 submission 上的 sentUs 是该副本发往服务商的时刻。
应答在第一家服务商接受时就发出:只要有一家拿到了交易,交易就已在路上,另一家较慢的确认不会拖住应答。此刻仍在途中的副本列在 pending 里,带 provider 和 signature(所有服务商都已应答时该字段不出现)。它的签名在发出前就已确定,所以请像监视 submissions 里的签名一样监视它:任何副本都可能是最终落地的那份。
只成交一次,绝不两次
每份副本承载同一笔交易、不同的小费,所以各有自己的签名,任何一份都可能是落地的那份。最先执行的那份成交;其余在转移资金之前在链上失败。失败的副本只花掉它的优先费,别无其他:小费在同一笔交易里,随交易一起失败。因此交易只发生一次,小费也只付一次,付给副本落地的那家服务商。
只有在你确实想按服务商各买一次时,才设置 guard: false。
一份回滚的副本的代价是它的基础费(0.000005 SOL)加上它的优先费,再无其他。leader 从未打包的副本不花钱。所以把预算放进只有胜出副本才付的 tip,把 priorityFee 保持适中:0.00002 SOL 时三份回滚副本共花 0.000075 SOL,0.001 时则花 0.003。
设置 nonce: true 时,各份副本共用钱包的持久 nonce 而不是最近的区块哈希,每份都以推进这个 nonce 开头。第一份执行的副本推进了 nonce;其余副本随后在执行前就过不了 nonce 检查,被丢弃,不花任何费用,所以多加服务商竞速也不多花钱。响应里的 nonce 说明发生了什么:used;preparing 表示 nonce 账户正在创建(这笔交易按常规方式竞速,之后的交易使用 nonce;事先用 POST /api/lightspeed/nonce 创建好,第一笔交易就能用上);busy 表示钱包上一笔 nonce 交易尚未结束(这笔按常规方式竞速,不会等待)。nonce 交易不会像区块哈希交易那样过期,所以发出 8 秒后仍没有副本落地时,会主动推进 nonce,让所有仍在外面的副本再也无法执行。
费用
没有: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 →