跳到主要内容
Lite属于 Lite 套餐,Developer 套餐也包含。 查看套餐 · 获取密钥

交易

POST https://sol.shrine.trade/api/lightspeed。Lightspeed 随 Lite 和 Developer 提供,交易从以下两种钱包之一发出:

  • 控制台钱包。 在控制台上创建一个,或关联一个你在这里创建的,然后把它的 ls_ 密钥放在 x-api-key 里发送。它按你账户的套餐交易。
  • 你自己的钱包。 把你套餐的密钥(sk_…)放在 x-api-key 里,钱包的 privateKey 放在请求体里。
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);

请求​

字段
apiKeystringLightspeed 钱包的 ls_ 密钥,放在这里或 x-api-key 请求头里。
privateKeystring替代钱包密钥:你自己钱包的私钥,base58,同时在 x-api-key 里带上你套餐的密钥。它只为这一笔交易签名,随后丢弃;不存储任何东西。
action"buy" | "sell"
mintstring代币 mint,base58。
amountnumber | string买入时为 SOL(计价币上为计价代币)。卖出时为代币数量,或余额的 "100%" / "50%"。
slippagenumber百分比。默认 5。
priorityFeenumber优先费总额,单位 SOL。默认 0.001。
tipnumber每份服务商副本的小费,单位 SOL。默认 0.001,能到达除 Node1(0.002)以外的全部服务商。只有落地的副本付它。最低值高于它的服务商不参与竞速。
poolstring强制指定发射平台:pumpfun、pumpswap、bonk、raydium_cpmm、raydium_amm_v4、meteora_damm_v2、meteora_dbc。省略则由实时缓存自动路由。
poolAddressstring用于 AMM,当缓存里没有该 mint 的池子时。
guardboolean只成交一次保护。默认 true。设为 false 时每份副本都可能落地,钱包会按服务商数量各成交一次。
providersstring[]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 →