钱包工具
机器人在交易之外需要的那些小事。全部免费、无需密钥。写接口和交易一样返回未签名交易:用钱包签名后通过你自己的 RPC 发送。每一个也都可以作为多操作交易里的一个操作使用。
POST /api/transfer
把 SOL 或任意 SPL 代币发给另一个钱包。代币转账在收款方还没有代币账户时会创建一个,由发送方付费。
{ "publicKey": "<sender>", "to": "<recipient>", "amount": 0.1 }
{ "publicKey": "<sender>", "to": "<recipient>", "mint": "<mint>", "amount": "100%" }
| 字段 | 说明 |
|---|---|
mint | SOL 则省略。 |
amount | SOL 或代币的常规单位数量,或余额比例:"100%"、"25%"。 |
priorityFee、jitoTip | 可选,SOL。 |
{ "tx": "<base64>", "blockhash": "…", "mint": null, "amount": 0.1, "amountRaw": 100000000, "feeLamports": 0 }
POST /api/burn
永久销毁代币。全部销毁时会同时关闭代币账户,退回它的租金。
{ "publicKey": "<wallet>", "mint": "<mint>", "amount": "100%" }
POST /api/wrap-sol
把 SOL 放进钱包的 wrapped-SOL 账户,或者通过关闭该账户来解包;解包总是退回里面的每一 lamport。
{ "publicKey": "<wallet>", "action": "wrap", "amount": 0.5 }
{ "publicKey": "<wallet>", "action": "unwrap" }
GET /api/balances?publicKey=…
SOL 加上钱包在两个代币程序下的每个代币账户,按数量从大到小。被冻结的账户带 "frozen": true,这就是持有者眼里的貔貅币。
{
"publicKey": "…",
"sol": 1.2345,
"lamports": 1234500000,
"tokens": [
{ "mint": "…pump", "account": "…", "amount": 12345.6, "amountRaw": "12345600000", "decimals": 6, "tokenProgram": "spl-token" }
]
}
这个读取按持有者列举账户,属于索引型查询,有些公共 RPC 会拒绝;API 把它发到专用的 RPC(INDEXED_RPC_URL)。
GET /api/token-info?mint=…
链上读取小数位、供应量和代币程序;名称、符号、发射台、活跃池子和最新价格来自数据 API 自己的注册表。
{
"mint": "…pump",
"decimals": 6,
"tokenProgram": "spl-token",
"totalSupply": 1000000000,
"totalSupplyRaw": "1000000000000000",
"name": "…", "symbol": "…", "uri": "…",
"protocol": "PUMPFUN",
"pool": "<bonding curve or pool>",
"graduated": false,
"quote": "So11111111111111111111111111111111111111112",
"price": 3.2e-8,
"marketCap": 32.1,
"priceUSD": 0.0000031,
"marketCapUSD": 3100,
"priceTime": 1789126483,
"solPriceUSD": 98.9,
"holderReward": false,
"mayhemMode": false,
"cashbackCoin": false
}
对 pump.fun 币,曲线的标志实时读取:holderReward、mayhemMode、cashbackCoin,以及自定义交易对币自设的 creatorFeeBps。quote 是曲线的计价 mint。
price 以计价资产计(多数币是 SOL)。价格字段在 API 开始跟踪该币并观察到交易后才出现;还没人碰过的币只有链上的基本信息。
直接复制
const base = "https://sol.shrine.trade";
// 读
const bal = await (await fetch(`${base}/api/balances?publicKey=${wallet.publicKey}`)).json();
const info = await (await fetch(`${base}/api/token-info?mint=${mint}`)).json();
// 写:构建、签名、发送
const { tx } = await (await fetch(`${base}/api/transfer`, {
method: "POST", headers: { "content-type": "application/json" },
body: JSON.stringify({ publicKey: wallet.publicKey.toBase58(), to: friend, mint, amount: "100%" }),
})).json();
const t = VersionedTransaction.deserialize(Buffer.from(tx, "base64"));
t.sign([wallet]);
await conn.sendRawTransaction(t.serialize());