跳到主要内容

链上 API 命令列表

本文档描述了交易系统支持的所有链上 DEX REST API 命令及其请求/响应格式。

API 接口概览

  • Sync: 同步命令
  • Async: 异步命令
  • WebSocket: 订阅事件

区块操作

接口SyncAsyncWebSocket
Slot
SlotTimestamp

账号操作

接口SyncAsyncWebSocket
Balances
Balance
Accounts

行情操作

接口SyncAsyncWebSocket
JupQuote

交易操作

接口SyncAsyncWebSocket
JupSwap

API 接口详情

完整的请求体

请求参数

参数类型是否必须描述
account_idNumber账户 ID
cmd/subObject指令/事件
{
"account_id": 0,
"cmd": {
"Sync": {
"Dex": {
"Accounts": ["SOL", "USDC", "USDT"]
}
},
"Async": {
"Dex": {
"Balances": ["SOL", "USDC", "USDT"]
}
}
},
"sub": {
"SubscribeDex": {
"WebSocket": {
"Slot": True
}
}
}
}

区块操作

Slot (cmd)

获取最新区块高度

请求参数:

参数类型是否必须描述
SlotBoolTrue/False

请求示例:

{
"Sync": {
"Dex": {
"Slot": True
}
}
}

响应字段:

参数类型是否必须描述
OkNumber区块高度

响应示例:

{
"type": "Slot",
"data": {
"Ok": 123456789
}
}

错误示例:

{
"type": "Slot",
"data": {
"Err": {
"error": "Slot params is nil",
"location": ""
}
}
}

SlotTimestamp (cmd)

获取最新区块高度和时间戳

请求参数:

参数类型是否必须描述
SlotTimestampBoolTrue/False

请求示例:

{
"Sync": {
"Dex": {
"SlotTimestamp": True
}
}
}

响应字段:

参数类型是否必须描述
slotNumber区块高度
timestampString区块时间戳

响应示例:

{
"type": "SlotTimestamp",
"data": {
"Ok": {
"slot": 123456789,
"timestamp": "100"
}
}
}

错误示例:

{
"type": "SlotTimestamp",
"data": {
"Err": {
"error": "SlotTimestamp params is nil",
"location": ""
}
}
}

Slot (ws)

订阅最新区块高度事件

请求参数:

参数类型是否必须描述
SlotBoolTrue/False

请求示例:

{
"sub": {
"SubscribeDex": {
"WebSocket": {
"Slot": true
}
}
}
}

响应字段:

参数类型是否必须描述
dataNumber区块高度

响应示例:

{
"type": "Slot",
"data": 123456789
}

账号操作

Balances (cmd)

获取链上账户的代币余额

请求参数:

参数类型是否必须描述
Balances[]String 数组代币名称

请求示例:

{
"Sync": {
"Dex": {
"Balances": ["SOL", "USDC"]
}
}
}

响应字段:

参数类型是否必须描述
SOLFloatSOL 代币余额
USDCFloatUSDC 余额

响应示例:

{
"type": "Balances",
"data": {
"Ok": {
"SOL": 1.068527248,
"USDC": 8.09647
}
}
}

错误示例:

{
"type": "Balances",
"data": {
"Err": {
"error": "Balances params is nil",
"location": ""
}
}
}

Balance (ws)

订阅最新区块高度事件

请求参数:

参数类型是否必须描述
Balance[]String 数组代币名称

请求示例:

{
"sub": {
"SubscribeDex": {
"WebSocket": {
"Balance": ["SOL"]
}
}
}
}

响应字段:

参数类型是否必须描述
amountFloat代币余额
symbolString代币名称
slotNumber区块高度

响应示例:

{
"type": "Balance",
"data": {
"Ok": {
"amount": 0.1,
"symbol": "SOL",
"slot": 123456789
}
}
}

Accounts (cmd)

获取链上代币开户情况,否则无法交易代币

请求参数:

参数类型是否必须描述
Accounts[]String 数组代币名称

请求示例:

{
"Sync": {
"Dex": {
"Accounts": ["USDC", "USDT"]
}
}
}

响应字段:

参数类型是否必须描述
Ok[]String 数组开户代币的数组

响应示例:

{
"type": "Accounts",
"data": {
"Ok": ["USDC", "USDT"]
}
}

错误示例:

{
"type": "Accounts",
"data": {
"Err": {
"error": "Accounts params is nil",
"location": ""
}
}
}

行情操作

JupQuote (cmd)

进行代币链上询价

请求参数:

参数类型是否必须描述
quoteIdString询价 ID
inputTokenString卖出代币名称
outputTokenString买入代币名称
inAmountFloat卖出代币数量

请求示例:

{
"Sync": {
"Dex": {
"JupQuote": {
"quoteId": "1",
"inputToken": "USDC",
"outputToken": "SOL",
"inAmount": 10.1
}
}
}
}

响应字段:

参数类型是否必须描述
quoteIdString询价 ID
inputTokenString卖出代币名称
outputTokenString买入代币名称
inAmountFloat卖出代币数量
outAmountFloat可买入代币数量
slippageBpsNumber建议交易滑点
contextSlotNumber当前询价区块

响应示例:

{
"type": "JupQuote",
"data": {
"Ok": {
"quoteId": "1",
"inputToken": "USDC",
"outputToken": "SOL",
"inAmount": 1,
"outAmount": 0.005259052,
"slippageBps": 10,
"contextSlot": 314107835
}
}
}

错误示例:

{
"type": "JupQuote",
"data": {
"Err": {
"error": "JupQuote params is nil",
"location": "1"
}
}
}

交易操作

JupSwap (cmd)

进行代币链上询价

请求参数:

参数类型是否必须描述
quoteIdString询价 ID
maxSlippageBpsNumber交易最大滑点,比如:300 = 3%滑点
gasFeeNumber交易费

请求示例:

{
"Sync": {
"Dex": {
"JupSwap": {
"quoteId": "1",
"maxSlippageBps": 100,
"gasFee": 100000
}
}
}
}

响应字段:

参数类型是否必须描述
OkString交易 hash

响应示例:

{
"type": "JupSwap",
"data": {
"Ok": "tx_hash"
}
}

错误示例:

{
"type": "JupSwap",
"data": {
"Err": {
"error": "JupSwap params is nil",
"location": "1"
}
}
}

错误处理

所有 API 在发生错误时会返回以下格式:

错误响应示例:

{
"type": {
"data": {
"Err": {
"error": "错误描述",
"location": "错误位置"
}
}
}
}