获取 Solana 兑换交易指令#
获取在 Solana 兑换或者询价自定义组装使用的交易指令数据。
请求地址#
GET https://web3.okx.com/api/v5/dex/aggregator/swap-instruction
请求参数#
参数 | 类型 | 必传 | 描述 |
---|---|---|---|
chainIndex | String | 是 | 链的唯一标识。 如 501 : Solana,更多可查看这里。 |
chainId | String | 是 | 链的唯一标识。即将废弃 |
amount | String | 是 | 币种询价数量 (数量需包含精度,如兑换 1.00 USDT 需输入 1000000,兑换 1.00 DAI 需输入 1000000000000000000),币种精度可通过币种列表取得。 |
fromTokenAddress | String | 是 | 询价币种合约地址 (如:0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee ) |
toTokenAddress | String | 是 | 目标币种合约地址 (如:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 ) |
slippage | String | 是 | 滑点限制。 注意: 在 Solana 网络上,滑点最小值为 0 ,最大值需小于 1 。(如: 0.005 代表这笔交易的最大滑点为0.5% ,1 代表这笔交易的最大滑点为 100% ) |
autoSlippage | Boolean | 否 | 默认为 false。当设置为 true 时,原 slippage 参数(如果有传入)将会被 autoSlippage 覆盖,将基于当前市场数据计算并设定自動滑点。 |
maxAutoSlippage | String | 否 | 当 autoSlippage 设置为 true 时,此值为 API 所返回的 autoSlippage 的最大上限,建议采用此值以控制风险。 |
userWalletAddress | String | 是 | 用户钱包地址 (如:0x3f6a3f57569358a512ccc0e513f171516b0fd42a ) |
swapReceiverAddress | String | 否 | 购买的资产的收件人地址 如果未设置,则用户钱包地址收到购买的资产 (如:0x3f6a3f57569358a512ccc0e513f171516b0fd42a ) |
feePercent | String | 否 | 发送到分佣地址的询价或者目标币种数量百分比,最小百分比:0 ,最大百分比:10 。最多支持小数点后 2 位,系统将自动忽略超出的部分。(例如:实际传入 1.326%,但分拥计算时仅会取 1.32% 的分拥比例) |
fromTokenReferrerWalletAddress | String | 否 | 收取 fromToken 分佣费用的钱包地址。 使用 API 时,需要结合 feePercent 设置佣金比例,且单笔交易只能选择 fromToken 分佣或 toToken 分佣。 注意: 对于 Solana:分佣地址需提前存入一些 SOL 进行激活。 |
toTokenReferrerWalletAddress | String | 否 | 收取 toToken 分佣费用的钱包地址。 使用 API 时,需要结合 feePercent 设置佣金比例,且单笔交易只能选择 fromToken 分佣或 toToken 分佣。 注意: 对于 Solana:分佣地址需提前存入一些 SOL 进行激活。 |
positiveSlippagePercent | String | 否 | 收取的正滑点比例。设置此参数后,可将用户在交易中获得超过报价金额的额外部分按比例作为收入收取。目前该参数仅支持 Solana 链,其他链的正滑点将全部返还给用户。 正滑点收取比例默认设置为 0。 最小百分比 :0,最大百分比 :10 最多支持小数点后 1 位。 |
positiveSlippageFeeAddress | string | 否 | 收取正滑点分佣费用的钱包地址。 使用时需要结合 positiveSlippagePercent 设置比例。若填入,所有正滑点收益将转至該地址,若未填入则使用收取分佣费用的钱包地址。 |
dexIds | String | 否 | 限定询价的流动性池 dexId , 多个组合按 , 分隔 (如 1,50,180 ,更多可查看流动性列表) |
directRoute | Boolean | 否 | 默认设置为 false。启用后,将限制路由仅使用单一流动性池。当前,该功能仅适用于 Solana 兑换。 |
priceImpactProtectionPercentage | String | 否 | (可选,默认值为 90%) 允许的价格影响百分比 (介于 0 和 1.0 之间)。 当用户设置了 priceImpactProtectionPercentage 后,如果估算的价格影响超过了指定的百分比,将会返回一个错误。例如,如果 PriceImpactProtectionPercentage = .25 (25%),任何价格影响高于 25% 的报价都将返回错误。 这是一个可选开启的功能,默认值为 0.9。当百分比被设置为 1.0 (100%) 时,此功能将被禁用,也就是说,每一笔交易都会被允许通过。 注意:当我们无法计算价格影响时,我们会返回 null,并且价格影响保护也会被禁用。 |
computeUnitPrice | String | 否 | 用于 Solana 网络上的交易,类似于 Ethereum 上的 gasPrice,这个价格决定了交易的优先级,价格越高意味着交易越有可能更快地被网络处理。 |
computeUnitLimit | String | 否 | 用于 Solana 网络上的交易,可类比为 Ethereum 上的的 gasLimit,这个限制可以确保交易不会占用过多的计算资源。 |
响应参数#
参数 | 类型 | 描述 |
---|---|---|
addressLookupTableAccount | Array | 地址查找表账户。是 Solana 区块链中的一种数据结构,用于优化交易中地址的管理和引用。它允许开发者将一组相关的地址存储在一个表中,并通过索引值(而非完整的 32 字节地址)在交易中引用这些地址,从而显著提升交易的效率和可扩展性。 |
instructionLists | Array | 交易指令详细信息 |
data | String | 指令数据 |
accounts | Array | 指令账户信息 |
isSigner | Boolean | 账户是否是签名者 |
isWritable | Boolean | 账户是否可写 |
pubkey | Boolean | 账户公钥地址 |
programId | String | 指令执行程序id |
routerResult | Object | 询价路径数据对象 |
chainIndex | String | 否 |
chainId | String | 否 |
fromTokenAmount | String | 询价币种的兑换数量 (如:500000000000000000000000 ) |
toTokenAmount | String | 目标币种的兑换数量 (如:168611907733361 ) |
tradeFee | String | 询价路径预估消耗的网络费用 (USD 计价) |
estimateGasFee | String | 预估消耗的 gas,各个链的最小单位返回,例如 wei |
dexRouterList | Array | 询价路径数据集合 |
router | String | 币种兑换的一条路径 |
routerPercent | String | 当前兑换路径处理的资产占所有资产的百分比 (如:5 ) |
subRouterList | Array | 询价路径数据子集合 |
dexProtocol | Array | 兑换路径中执行的 DEX 协议 |
dexName | String | DEX 协议名称 (如:Verse ) |
percent | String | 一条路径中单一 DEX 协议的兑换资产占所有 DEX 协议百分比 (如:100 ) |
fromToken | Object | 询价币种信息 |
tokenContractAddress | String | 币种合约地址 (如:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 ) |
tokenSymbol | String | 币种简称 (如:USDC ) |
tokenUnitPrice | String | 该接口返回的币种单价是基于链上的实时美元价格。注:此价格仅为推荐价格,在一些特殊情况中,币种单价可能为 null |
decimal | String | 币种精度定义了单个的该币种可以被分成多少份的最小单位。例如,如果一个币种的精度是 8,则表示单个的这种代币可以被分成 100,000,000 份的最小单位。注意:该参数仅供参考,币种精度会随着合约拥有者的设置改变等原因发生变化。 |
isHoneyPot | Boolean | 代币是否为貔貅币。 是:true 否:false |
taxRate | String | 代币卖出税率,适用于可设定税费机制的代币(如SafeMoon、SPL2022代币)。普通代币无税费时返回 0 。取值为 最小:0 最大:1 ,0.01表示1%。 |
toToken | Object | 目标币种信息 |
tokenContractAddress | String | 币种合约地址 (如:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 ) |
tokenSymbol | String | 币种简称 (如:USDC ) |
tokenUnitPrice | String | 该接口返回的币种单价是一个结合了链上、交易所以及其他第三方来源数据的综合美元价格。注:此价格仅为推荐价格,在一些特殊情况中,币种单价可能为 null |
decimal | String | 币种精度定义了单个的该币种可以被分成多少份的最小单位。例如,如果一个币种的精度是 8,则表示单个的这种代币可以被分成 100,000,000 份的最小单位。注意:该参数仅供参考,币种精度会随着合约拥有者的设置改变等原因发生变化。 |
isHoneyPot | Boolean | 代币是否为貔貅币。 是:true 否:false |
taxRate | String | 代币买入税率,适用于可设定税费机制的代币(如SafeMoon、SPL2022代币)。普通代币无税费时返回 0 。取值为 最小:0 最大:1 ,0.01表示1%。 |
quoteCompareList | Array | 询价路径对比列表 |
dexName | String | 询价路径 DEX 名称 |
dexLogo | String | DEX 协议名称 |
tradeFee | String | 询价路径预估消耗的网络费用 (USD 计价) |
amountOut | String | 询价路径的接收数量 |
priceImpactPercentage | String | Percentage = (接收价值 – 支付价值) / 支付价值。因为当前兑换数量影响了流动性池深度,导致产生了价值差额。若接收价值大于支付价值,Percentage 有可能是正数。 |
tx | Object | 发交易信息 |
from | String | 用户钱包地址 (如:0x3f6a3f57569358a512ccc0e513f171516b0fd42a) |
to | String | 欧易 DEX router 合约地址 (如:0x3b3ae790Df4F312e745D270119c6052904FB6790 ) |
minReceiveAmount | String | 目标币种的最小兑换数量 (兑换价格达到滑点限制的极限值时,目标币种的兑换数量,如:900645839798 ) |
slippage | String | 当前交易的滑点值 |
请求示例#
shell
curl --location --request GET 'https://web3.okx.com/api/v5/dex/aggregator/swap-instruction?chainIndex=501&amount=350000000&fromTokenAddress=11111111111111111111111111111111&toTokenAddress=Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB&slippage=0.4&userWalletAddress=FvUDkjR1STZ3c6g3DjXwLsiQ477t2HGH4LQ81xMKWJZk \
--header 'OK-ACCESS-KEY: 37c541a1-****-****-****-10fe7a038418' \
--header 'OK-ACCESS-SIGN: leaV********3uw=' \
--header 'OK-ACCESS-PASSPHRASE: 1****6' \
--header 'OK-ACCESS-TIMESTAMP: 2023-10-18T12:21:41.274Z'
响应示例#
200
{
"code": "0",
"data": {
"addressLookupTableAccount": [
"AUEghuJaUr4qshAQoSDvV8kfv7xz2kQGeR13G3FihMum",
"94jzMYK5NBoExhtdwzfVNVim6Y8b95JJ9xavKHGSns8R"
],
"instructionLists": [
{
"data": "AkCKAwA=",
"accounts": [],
"programId": "ComputeBudget111111111111111111111111111111"
},
{
"data": "A/EHCAAAAAAA",
"accounts": [],
"programId": "ComputeBudget111111111111111111111111111111"
},
{
"data": "AwAAAPwNLKvNGLxaIoVvQDDuyL46JSWpUG7CLB02dQ/9KzWaDQAAAAAAAAAxNzQ5MjU5NDU1OTU28B0fAAAAAAClAAAAAAAAAAbd9uHXZaGT2cvhRs7reawctIXtX1s3kTqM9YV+/wCp",
"accounts": [
{
"isSigner": true,
"isWritable": false,
"pubkey": "HxuPhmAYQwM4CvdJREL8ad3DgDWGVq4xBfy1vgGev5X7"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "DyWu8Q3aKuuDnzmgSBPGdczPsf5UixkJcGNr3zeyBqvW"
}
],
"programId": "11111111111111111111111111111111"
},
{
"data": "AQ==",
"accounts": [
{
"isSigner": false,
"isWritable": true,
"pubkey": "DyWu8Q3aKuuDnzmgSBPGdczPsf5UixkJcGNr3zeyBqvW"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "So11111111111111111111111111111111111111112"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "HxuPhmAYQwM4CvdJREL8ad3DgDWGVq4xBfy1vgGev5X7"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "SysvarRent111111111111111111111111111111111"
}
],
"programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
},
{
"data": "AgAAAOAPlwAAAAAA",
"accounts": [
{
"isSigner": true,
"isWritable": true,
"pubkey": "HxuPhmAYQwM4CvdJREL8ad3DgDWGVq4xBfy1vgGev5X7"
},
{
"isSigner": false,
"isWritable": true,
"pubkey": "DyWu8Q3aKuuDnzmgSBPGdczPsf5UixkJcGNr3zeyBqvW"
}
],
"programId": "11111111111111111111111111111111"
},
{
"data": "EQ==",
"accounts": [
{
"isSigner": false,
"isWritable": true,
"pubkey": "DyWu8Q3aKuuDnzmgSBPGdczPsf5UixkJcGNr3zeyBqvW"
}
],
"programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
},
{
"data": "AQ==",
"accounts": [
{
"isSigner": true,
"isWritable": true,
"pubkey": "HxuPhmAYQwM4CvdJREL8ad3DgDWGVq4xBfy1vgGev5X7"
},
{
"isSigner": false,
"isWritable": true,
"pubkey": "52WMDiGUj8UEzSzWjguGGnaWmnjeQobuB4qYdyKdmx4W"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "HxuPhmAYQwM4CvdJREL8ad3DgDWGVq4xBfy1vgGev5X7"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "11111111111111111111111111111111"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
}
],
"programId": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"
},
{
"data": "Rcj+9yg0dsrgD5cAAAAAACkhFgAAAAAA5wUVAAAAAAABAAAA4A+XAAAAAAABAAAAAQAAAAEAAAAiAQAAAGSAlpiAAAAAAAAhkAEAAAAAAA==",
"accounts": [
{
"isSigner": true,
"isWritable": true,
"pubkey": "HxuPhmAYQwM4CvdJREL8ad3DgDWGVq4xBfy1vgGev5X7"
},
{
"isSigner": false,
"isWritable": true,
"pubkey": "DyWu8Q3aKuuDnzmgSBPGdczPsf5UixkJcGNr3zeyBqvW"
},
{
"isSigner": false,
"isWritable": true,
"pubkey": "52WMDiGUj8UEzSzWjguGGnaWmnjeQobuB4qYdyKdmx4W"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "So11111111111111111111111111111111111111112"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"
},
{
"isSigner": false,
"isWritable": true,
"pubkey": "HxuPhmAYQwM4CvdJREL8ad3DgDWGVq4xBfy1vgGev5X7"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "6m2CDdhRgxpH4WjvdzxAYbGxwdGUz5MziiL5jek2kBma"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "6m2CDdhRgxpH4WjvdzxAYbGxwdGUz5MziiL5jek2kBma"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "6m2CDdhRgxpH4WjvdzxAYbGxwdGUz5MziiL5jek2kBma"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "11111111111111111111111111111111"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA"
},
{
"isSigner": true,
"isWritable": true,
"pubkey": "HxuPhmAYQwM4CvdJREL8ad3DgDWGVq4xBfy1vgGev5X7"
},
{
"isSigner": false,
"isWritable": true,
"pubkey": "DyWu8Q3aKuuDnzmgSBPGdczPsf5UixkJcGNr3zeyBqvW"
},
{
"isSigner": false,
"isWritable": true,
"pubkey": "52WMDiGUj8UEzSzWjguGGnaWmnjeQobuB4qYdyKdmx4W"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "ZiVoyhTDNKdceMF4Vt7X4VgSN9r8imBuJZRkUa9rWB7"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "ADyA8hdefvWN2dbGGWFotbzWxrAvLW83WG6QCVXvJKqw"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "So11111111111111111111111111111111111111112"
},
{
"isSigner": false,
"isWritable": true,
"pubkey": "AAbcQKNDfbMxd7VRjK2x3UX3wQ4omoeNjAybrV89Ayx6"
},
{
"isSigner": false,
"isWritable": true,
"pubkey": "9UgcBXUvLBuJkEHXhewVVCvrMtttUXQvbjm18z8ZT9Nf"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "62qc2CNXwrYqQScmEdiZFFAnJR262PxWEuNQtxfafNgV"
},
{
"isSigner": false,
"isWritable": true,
"pubkey": "94qWNrtmfn42h3ZjUZwWvK1MEo9uVmmrBPd2hpNjYDjb"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "11111111111111111111111111111111"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "GS4CU59F31iL7aR2Q8zVS8DRrcRnXX1yjQ66TqNVQnaR"
},
{
"isSigner": false,
"isWritable": true,
"pubkey": "Ei6iux5MMYG8JxCTr58goADqFTtMroL9TXJityF3fAQc"
},
{
"isSigner": false,
"isWritable": false,
"pubkey": "8N3GDaZ2iwN65oxVatKTLPNooAVUJTbfiVJ1ahyqwjSk"
}
],
"programId": "6m2CDdhRgxpH4WjvdzxAYbGxwdGUz5MziiL5jek2kBma"
},
{
"data": "CQ==",
"accounts": [
{
"isSigner": false,
"isWritable": true,
"pubkey": "DyWu8Q3aKuuDnzmgSBPGdczPsf5UixkJcGNr3zeyBqvW"
},
{
"isSigner": false,
"isWritable": true,
"pubkey": "HxuPhmAYQwM4CvdJREL8ad3DgDWGVq4xBfy1vgGev5X7"
},
{
"isSigner": true,
"isWritable": true,
"pubkey": "HxuPhmAYQwM4CvdJREL8ad3DgDWGVq4xBfy1vgGev5X7"
}
],
"programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
}
],
"routerResult": {
"chainId": "501",
"chainIndex": "501",
"dexRouterList": [
{
"router": "11111111111111111111111111111111--es9vmfrzacermjfrf4h2fyd4kconky11mcce8benwnyb",
"routerPercent": "100",
"subRouterList": [
{
"dexProtocol": [
{
"dexName": "PumpSwap",
"percent": "100"
}
],
"fromToken": {
"decimal": "9",
"isHoneyPot": false,
"taxRate": "0",
"tokenContractAddress": "So11111111111111111111111111111111111111112",
"tokenSymbol": "wSOL",
"tokenUnitPrice": "148.133239619335163594"
},
"toToken": {
"decimal": "6",
"isHoneyPot": false,
"taxRate": "0",
"tokenContractAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
"tokenSymbol": "USDT",
"tokenUnitPrice": "1.000673318734823276"
}
}
]
}
],
"estimateGasFee": "212000",
"fromToken": {
"decimal": "9",
"isHoneyPot": false,
"taxRate": "0",
"tokenContractAddress": "11111111111111111111111111111111",
"tokenSymbol": "SOL",
"tokenUnitPrice": "148.133239619335163594"
},
"fromTokenAmount": "10000000",
"priceImpactPercentage": "-1.04",
"quoteCompareList": [
{
"amountOut": "1.450281",
"dexLogo": "https://static.okx.com/cdn/web3/dex/logo/Pumpfun.png",
"dexName": "PumpSwap",
"tradeFee": "0.0000001571238"
}
],
"swapMode": "exactIn",
"toToken": {
"decimal": "6",
"isHoneyPot": false,
"taxRate": "0",
"tokenContractAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
"tokenSymbol": "USDT",
"tokenUnitPrice": "1.000673318734823276"
},
"toTokenAmount": "1450281",
"tradeFee": "0.00074115"
},
"tx": {
"from": "HxuPhmAYQwM4CvdJREL8ad3DgDWGVq4xBfy1vgGev5X7",
"minReceiveAmount": "1377767",
"slippage": "0.05",
"to": "6m2CDdhRgxpH4WjvdzxAYbGxwdGUz5MziiL5jek2kBma"
}
},
"msg": ""
}