Loading...
Loading...
Compare original and translation side by side
https://web3.okx.com/api/v6/dex/aggregatorOK-ACCESS-KEYOK-ACCESS-SIGNOK-ACCESS-PASSPHRASEOK-ACCESS-TIMESTAMPhttps://web3.okx.com/api/v6/dex/aggregatorOK-ACCESS-KEYOK-ACCESS-SIGNOK-ACCESS-PASSPHRASEOK-ACCESS-TIMESTAMPOKX_API_KEYOKX_SECRET_KEYOKX_PASSPHRASEimport crypto from 'crypto';
const BASE = 'https://web3.okx.com';
// Signature rule (all aggregator endpoints are GET):
// GET → body = "", requestPath includes query string (e.g., "/api/v6/dex/aggregator/quote?chainIndex=1&...")
// POST → body = JSON string of request body, requestPath is path only (not used in this skill)
async function okxFetch(method: 'GET' | 'POST', path: string, body?: object) {
const timestamp = new Date().toISOString();
const bodyStr = body ? JSON.stringify(body) : '';
const sign = crypto
.createHmac('sha256', process.env.OKX_SECRET_KEY!)
.update(timestamp + method + path + bodyStr)
.digest('base64');
const headers: Record<string, string> = {
'OK-ACCESS-KEY': process.env.OKX_API_KEY!,
'OK-ACCESS-SIGN': sign,
'OK-ACCESS-PASSPHRASE': process.env.OKX_PASSPHRASE!,
'OK-ACCESS-TIMESTAMP': timestamp,
'Content-Type': 'application/json',
};
const res = await fetch(`${BASE}${path}`, {
method,
headers,
...(body && { body: bodyStr }),
});
if (res.status === 429) throw { code: 'RATE_LIMITED', msg: 'Rate limited — retry with backoff', retryable: true };
if (res.status >= 500) throw { code: `HTTP_${res.status}`, msg: 'Server error', retryable: true };
const json = await res.json();
if (json.code !== '0') throw { code: json.code, msg: json.msg || 'API error', retryable: false };
return json.data;
}{ "code": "0", "data": [...], "msg": "" }code"0"OKX_API_KEYOKX_SECRET_KEYOKX_PASSPHRASEimport crypto from 'crypto';
const BASE = 'https://web3.okx.com';
// 签名规则(所有聚合器接口均为GET):
// GET → body = "", requestPath包含查询字符串(例如:"/api/v6/dex/aggregator/quote?chainIndex=1&...")
// POST → body = 请求体的JSON字符串,requestPath仅为路径(本技能中未使用)
async function okxFetch(method: 'GET' | 'POST', path: string, body?: object) {
const timestamp = new Date().toISOString();
const bodyStr = body ? JSON.stringify(body) : '';
const sign = crypto
.createHmac('sha256', process.env.OKX_SECRET_KEY!)
.update(timestamp + method + path + bodyStr)
.digest('base64');
const headers: Record<string, string> = {
'OK-ACCESS-KEY': process.env.OKX_API_KEY!,
'OK-ACCESS-SIGN': sign,
'OK-ACCESS-PASSPHRASE': process.env.OKX_PASSPHRASE!,
'OK-ACCESS-TIMESTAMP': timestamp,
'Content-Type': 'application/json',
};
const res = await fetch(`${BASE}${path}`, {
method,
headers,
...(body && { body: bodyStr }),
});
if (res.status === 429) throw { code: 'RATE_LIMITED', msg: '请求频率超限——请延迟后重试', retryable: true };
if (res.status >= 500) throw { code: `HTTP_${res.status}`, msg: '服务器错误', retryable: true };
const json = await res.json();
if (json.code !== '0') throw { code: json.code, msg: json.msg || 'API错误', retryable: false };
return json.data;
}{ "code": "0", "data": [...], "msg": "" }code"0"// 1. Quote — sell 100 USDC for ETH
const params = new URLSearchParams({
chainIndex: '1', fromTokenAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC
toTokenAddress: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', // native ETH
amount: '100000000', swapMode: 'exactIn', // 100 USDC (6 decimals)
});
const quote = await okxFetch('GET', `/api/v6/dex/aggregator/quote?${params}`);
console.log(`Expected: ${quote[0].toTokenAmount} ETH (minimal units)`);
// 2. Approve — ERC-20 tokens need approval before swap (skip for native ETH)
const approveParams = new URLSearchParams({
chainIndex: '1', tokenContractAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
approveAmount: '100000000',
});
const approve = await okxFetch('GET', `/api/v6/dex/aggregator/approve-transaction?${approveParams}`);
// → build tx: { to: tokenContractAddress, data: approve[0].data }, sign & send
// approve[0].dexContractAddress is the spender (already encoded in calldata), NOT the tx target
// 3. Swap
const swapParams = new URLSearchParams({
chainIndex: '1', fromTokenAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
toTokenAddress: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
amount: '100000000', slippagePercent: '1',
userWalletAddress: '0xYourWallet', swapMode: 'exactIn',
});
const swap = await okxFetch('GET', `/api/v6/dex/aggregator/swap?${swapParams}`);
// → sign & send swap[0].tx { from, to, data, value, gas }// 1. 报价——出售100 USDC兑换ETH
const params = new URLSearchParams({
chainIndex: '1', fromTokenAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC
toTokenAddress: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', // 原生ETH
amount: '100000000', swapMode: 'exactIn', // 100 USDC(6位小数)
});
const quote = await okxFetch('GET', `/api/v6/dex/aggregator/quote?${params}`);
console.log(`预计到账:${quote[0].toTokenAmount} ETH(最小单位)`);
// 2. 授权——ERC-20代币在兑换前需要授权(原生ETH可跳过此步骤)
const approveParams = new URLSearchParams({
chainIndex: '1', tokenContractAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
approveAmount: '100000000',
});
const approve = await okxFetch('GET', `/api/v6/dex/aggregator/approve-transaction?${approveParams}`);
// → 构建交易:{ to: tokenContractAddress, data: approve[0].data },签名并发送
// approve[0].dexContractAddress是授权对象(已编码在调用数据中),**并非**交易目标地址
// 3. 兑换
const swapParams = new URLSearchParams({
chainIndex: '1', fromTokenAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
toTokenAddress: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
amount: '100000000', slippagePercent: '1',
userWalletAddress: '0xYourWallet', swapMode: 'exactIn',
});
const swap = await okxFetch('GET', `/api/v6/dex/aggregator/swap?${swapParams}`);
// → 签名并发送swap[0].tx { from, to, data, value, gas }const params = new URLSearchParams({
chainIndex: '501', fromTokenAddress: '11111111111111111111111111111111', // native SOL
toTokenAddress: 'DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263', // BONK
amount: '1000000000', slippagePercent: '1', userWalletAddress: 'YourSolanaWallet',
});
const result = await okxFetch('GET', `/api/v6/dex/aggregator/swap-instruction?${params}`);
// → result[0].instructionLists: assemble into VersionedTransaction, sign & sendconst params = new URLSearchParams({
chainIndex: '501', fromTokenAddress: '11111111111111111111111111111111', // 原生SOL
toTokenAddress: 'DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263', // BONK
amount: '1000000000', slippagePercent: '1', userWalletAddress: 'YourSolanaWallet',
});
const result = await okxFetch('GET', `/api/v6/dex/aggregator/swap-instruction?${params}`);
// → result[0].instructionLists:组装为VersionedTransaction,签名并发送| Chain | chainIndex | Chain | chainIndex |
|---|---|---|---|
| Ethereum | | Arbitrum | |
| BSC | | Base | |
| Polygon | | Solana | |
| 链名称 | chainIndex | 链名称 | chainIndex |
|---|---|---|---|
| Ethereum | | Arbitrum | |
| BSC | | Base | |
| Polygon | | Solana | |
CRITICAL: Each chain has a specific native token address for use in OKX DEX API. Using the wrong address (e.g., wSOL SPL token address instead of the Solana system program address) will cause swap transactions to fail. Reference: DEX Aggregation FAQ
| Chain | Native Token Address |
|---|---|
| EVM (Ethereum, BSC, Polygon, Arbitrum, Base, etc.) | |
| Solana | |
| Sui | |
| Tron | |
| Ton | |
WARNING — Solana native SOL: The correct address is(Solana system program). Do NOT use11111111111111111111111111111111(wSOL SPL token) — it is a different token and will cause swap failures (So11111111111111111111111111111111111111112).custom program error: 0xb
重要提示:每条链在OKX DEX API中都有特定的原生代币地址。使用错误地址(例如,使用wSOL SPL代币地址而非Solana系统程序地址)会导致兑换交易失败。参考:DEX聚合常见问题
| 链名称 | 原生代币地址 |
|---|---|
| EVM链(Ethereum、BSC、Polygon、Arbitrum、Base等) | |
| Solana | |
| Sui | |
| Tron | |
| Ton | |
警告——Solana原生SOL:正确地址为(Solana系统程序)。切勿使用11111111111111111111111111111111(wSOL SPL代币)——这是不同的代币,会导致兑换失败(错误码:So11111111111111111111111111111111111111112)。custom program error: 0xb
| # | Method | Path | Docs |
|---|---|---|---|
| 1 | GET | | dex-get-aggregator-supported-chains |
| 2 | GET | | dex-get-liquidity |
| 3 | GET | | dex-approve-transaction |
| 4 | GET | | dex-get-quote |
| 5 | GET | | dex-solana-swap-instruction |
| 6 | GET | | dex-swap |
| 序号 | 请求方法 | 路径 | 文档 |
|---|---|---|---|
| 1 | GET | | dex-get-aggregator-supported-chains |
| 2 | GET | | dex-get-liquidity |
| 3 | GET | | dex-approve-transaction |
| 4 | GET | | dex-get-quote |
| 5 | GET | | dex-solana-swap-instruction |
| 6 | GET | | dex-swap |
User: "Swap 1 SOL for BONK on Solana"
1. okx-dex-token /market/token/search?search=BONK&chains=501 → get BONK tokenContractAddress
↓ tokenContractAddress
2. okx-wallet-portfolio /balance/all-token-balances-by-address → verify SOL balance >= 1
↓ sufficient balance confirmed
3. okx-dex-swap /aggregator/quote → get quote (show expected output, gas, price impact)
↓ user confirms
4. okx-dex-swap /aggregator/swap-instruction → get serialized instruction (Solana)
5. User signs & sends tx (or use `okx-onchain-gateway` to broadcast via OKX nodes)tokenContractAddresstoTokenAddress"11111111111111111111111111111111"fromTokenAddressSo111111111111111111111111111111111111111121 SOL"1000000000"amountbalance10^decimal用户:“在Solana链上用1 SOL兑换BONK”
1. okx-dex-token /market/token/search?search=BONK&chains=501 → 获取BONK的tokenContractAddress
↓ tokenContractAddress
2. okx-wallet-portfolio /balance/all-token-balances-by-address → 验证SOL余额≥1
↓ 确认余额充足
3. okx-dex-swap /aggregator/quote → 获取报价(显示预计到账金额、gas费用、价格影响)
↓ 用户确认
4. okx-dex-swap /aggregator/swap-instruction → 获取序列化指令(Solana链)
5. 用户签名并发送交易(或使用`okx-onchain-gateway`通过OKX节点广播)tokenContractAddresstoTokenAddress"11111111111111111111111111111111"fromTokenAddressSo111111111111111111111111111111111111111121 SOL"1000000000"amountbalance10^小数位数User: "Swap 100 USDC for ETH on Ethereum"
1. okx-dex-token /market/token/search?search=USDC&chains=1 → get USDC address
2. okx-wallet-portfolio /balance/token-balances-by-address → verify USDC balance >= 100
3. okx-dex-swap /aggregator/quote → get quote
↓ check isHoneyPot, taxRate, priceImpactPercent
4. okx-dex-swap /aggregator/approve-transaction → get ERC-20 approval calldata
5. User signs & sends approval tx
6. okx-dex-swap /aggregator/swap → get swap calldata
7. User signs & sends swap tx (or use `okx-onchain-gateway` to broadcast via OKX nodes)用户:“在Ethereum链上用100 USDC兑换ETH”
1. okx-dex-token /market/token/search?search=USDC&chains=1 → 获取USDC地址
2. okx-wallet-portfolio /balance/token-balances-by-address → 验证USDC余额≥100
3. okx-dex-swap /aggregator/quote → 获取报价
↓ 检查isHoneyPot、taxRate、priceImpactPercent
4. okx-dex-swap /aggregator/approve-transaction → 获取ERC-20授权调用数据
5. 用户签名并发送授权交易
6. okx-dex-swap /aggregator/swap → 获取兑换调用数据
7. 用户签名并发送兑换交易(或使用`okx-onchain-gateway`通过OKX节点广播)1. okx-dex-swap /aggregator/quote → get quote with route info
2. Display to user: expected output, gas, price impact, route
3. If price impact > 5% → warn user
4. If isHoneyPot = true → block trade, warn user
5. User confirms → proceed to approve (if EVM) → swap1. okx-dex-swap /aggregator/quote → 获取包含路径信息的报价
2. 向用户展示:预计到账金额、gas费用、价格影响、兑换路径
3. 如果价格影响>5% → 向用户发出警告
4. 如果isHoneyPot = true → 阻止交易并警告用户
5. 用户确认 → 继续执行授权(EVM链)→ 兑换1. GET /aggregator/quote -> Get price and route
2. GET /aggregator/approve-transaction -> Get approval calldata (if needed)
3. User signs & sends approval tx
4. GET /aggregator/swap -> Get swap calldata
5. User signs & sends swap tx1. GET /aggregator/quote → 获取价格和路径
2. GET /aggregator/approve-transaction → 获取授权调用数据(如需要)
3. 用户签名并发送授权交易
4. GET /aggregator/swap → 获取兑换调用数据
5. 用户签名并发送兑换交易1. GET /aggregator/quote -> Get price and route
2. GET /aggregator/swap-instruction -> Get serialized instruction
3. User signs & sends tx1. GET /aggregator/quote → 获取价格和路径
2. GET /aggregator/swap-instruction → 获取序列化指令
3. 用户签名并发送交易GET /aggregator/quoteGET /aggregator/get-liquidityGET /aggregator/approve-transactionGET /aggregator/quoteGET /aggregator/get-liquidityGET /aggregator/approve-transactionchainIndexokx-dex-token/market/token/searchchainIndexokx-dex-token/market/token/search/quoteisHoneyPottaxRate/swap/swap-instruction/quoteisHoneyPottaxRate/swap/swap-instruction| Just completed | Suggest |
|---|---|
| 1. Check wallet balance first → |
| Swap executed successfully | 1. Verify updated balance → |
| 1. Get a swap quote → |
| 刚完成的操作 | 建议操作 |
|---|---|
| 1. 先检查钱包余额 → |
| 兑换执行成功 | 1. 验证更新后的余额 → |
| 1. 获取兑换报价 → |
| Param | Type | Required | Description |
|---|---|---|---|
| String | No | Filter to a specific chain (e.g., |
| Field | Type | Description |
|---|---|---|
| String | Chain unique identifier (e.g., "1") |
| String | Chain name (e.g., "Ethereum") |
| String | OKX DEX token approve contract address |
| 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| String | 否 | 过滤特定链(例如: |
| 字段 | 类型 | 描述 |
|---|---|---|
| String | 链唯一标识符(例如:"1") |
| String | 链名称(例如:"Ethereum") |
| String | OKX DEX代币授权合约地址 |
| Param | Type | Required | Description |
|---|---|---|---|
| String | Yes | Chain ID |
| Field | Type | Description |
|---|---|---|
| String | Liquidity pool ID |
| String | Pool name (e.g., "Uniswap V3") |
| String | Pool logo URL |
| 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| String | 是 | 链ID |
| 字段 | 类型 | 描述 |
|---|---|---|
| String | 流动性池ID |
| String | 池名称(例如:"Uniswap V3") |
| String | 池Logo URL |
| Param | Type | Required | Description |
|---|---|---|---|
| String | Yes | Chain ID |
| String | Yes | Token to approve |
| String | Yes | Amount in minimal units |
| Field | Type | Description |
|---|---|---|
| String | Approval calldata ( |
| String | DEX router address (the spender, already encoded in calldata). NOT the tx |
| String | Gas limit. May underestimate — use simulation or ×1.5 |
| String | Gas price in wei |
| 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| String | 是 | 链ID |
| String | 是 | 要授权的代币 |
| String | 是 | 最小单位的金额 |
| 字段 | 类型 | 描述 |
|---|---|---|
| String | 授权调用数据( |
| String | DEX路由地址(授权对象,已编码在调用数据中)。并非交易的 |
| String | Gas上限。可能低估 —— 建议使用模拟值或乘以1.5 |
| String | Gas价格(wei单位) |
| Param | Type | Required | Description |
|---|---|---|---|
| String | Yes | Chain ID |
| String | Yes | Amount in minimal units (sell amount if exactIn, buy amount if exactOut) |
| String | Yes | |
| String | Yes | Token to sell |
| String | Yes | Token to buy |
dexIdsdirectRoutepriceImpactProtectionPercentfeePercenttoTokenAmountfromTokenAmountestimateGasFeetradeFeepriceImpactPercentrouterdexRouterListfromTokentoTokenisHoneyPottaxRatedecimaltokenUnitPrice| 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| String | 是 | 链ID |
| String | 是 | 最小单位的金额(exactIn模式下为出售金额,exactOut模式下为购买金额) |
| String | 是 | |
| String | 是 | 要出售的代币 |
| String | 是 | 要购买的代币 |
dexIdsdirectRoutepriceImpactProtectionPercentfeePercenttoTokenAmountfromTokenAmountestimateGasFeetradeFeepriceImpactPercentrouterdexRouterListfromTokentoTokenisHoneyPottaxRatedecimaltokenUnitPrice| Param | Type | Required | Description |
|---|---|---|---|
| String | Yes | Must be |
| String | Yes | Amount in minimal units |
| String | Yes | Token to sell |
| String | Yes | Token to buy |
| String | Yes | User's wallet |
| String | Yes | 0 to <100 |
autoSlippagecomputeUnitPricecomputeUnitLimitdexIdsswapReceiverAddressfeePercentpriceImpactProtectionPercentinstructionLists[]dataaccountsprogramIdaddressLookupTableAccountrouterResulttxminReceiveAmountslippagePercentwsolRentFee| 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| String | 是 | 必须为 |
| String | 是 | 最小单位的金额 |
| String | 是 | 要出售的代币 |
| String | 是 | 要购买的代币 |
| String | 是 | 用户钱包地址 |
| String | 是 | 0到<100 |
autoSlippagecomputeUnitPricecomputeUnitLimitdexIdsswapReceiverAddressfeePercentpriceImpactProtectionPercentinstructionLists[]dataaccountsprogramIdaddressLookupTableAccountrouterResult/quotetxminReceiveAmountslippagePercentwsolRentFeeNote: This endpoint works for all chains including Solana.is a Solana-specific alternative that returns deserialized instructions instead of a serialized transaction./swap-instruction
| Param | Type | Required | Description |
|---|---|---|---|
| String | No | Chain ID. Technically optional but strongly recommended — always pass it. |
| String | Yes | Amount in minimal units |
| String | Yes | |
| String | Yes | Token to sell |
| String | Yes | Token to buy |
| String | Yes | 0-100 (EVM), 0-<100 (Solana) |
| String | Yes | User's wallet |
gasLevelaveragefastslowcomputeUnitPricecomputeUnitLimittips0computeUnitPricedexIdsautoSlippagemaxAutoSlippagePercentswapReceiverAddressfeePercentpriceImpactProtectionPercentapproveTransactionapproveAmountapproveTransactionrouterResulttxfromtodatagasgasPricemaxPriorityFeePerGasvalueminReceiveAmountmaxSpendAmountslippagePercentsignatureData注意:本接口适用于所有链包括Solana链。是Solana链专用的替代接口,返回反序列化的指令而非序列化交易。/swap-instruction
| 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| String | 否 | 链ID。技术上可选但强烈建议传入。 |
| String | 是 | 最小单位的金额 |
| String | 是 | |
| String | 是 | 要出售的代币 |
| String | 是 | 要购买的代币 |
| String | 是 | 0-100(EVM链),0-<100(Solana链) |
| String | 是 | 用户钱包地址 |
gasLevelaveragefastslowcomputeUnitPricecomputeUnitLimittipscomputeUnitPrice0dexIdsautoSlippagemaxAutoSlippagePercentswapReceiverAddressfeePercentpriceImpactProtectionPercentapproveTransactionapproveAmountapproveTransactionrouterResult/quotetxfromtodatagasgasPricemaxPriorityFeePerGasvalueminReceiveAmountmaxSpendAmountslippagePercentsignatureData1. GET /api/v6/dex/aggregator/quote?chainIndex=1&fromTokenAddress=0xa0b8...&toTokenAddress=0xeeee...&amount=100000000&swapMode=exactIn
-> Display:
Expected output: 0.031 ETH
Gas fee: ~$2.50
Price impact: 0.05%
Route: USDC -> WETH -> ETH (Uniswap V3)
2. User confirms
3. GET /api/v6/dex/aggregator/approve-transaction?chainIndex=1&tokenContractAddress=0xa0b8...&approveAmount=100000000
-> Returns approval calldata and spender address
-> Build tx: { to: "0xa0b8..." (token contract), data: response.data } — sign & send
4. GET /api/v6/dex/aggregator/swap?chainIndex=1&...&slippagePercent=1&userWalletAddress=0x...
-> Returns tx: { from, to, data, gas, gasPrice, value, minReceiveAmount }
-> User signs and broadcastsGET /api/v6/dex/aggregator/get-liquidity?chainIndex=1
-> Display: Uniswap V2, Uniswap V3, SushiSwap, Curve, Balancer, ... (80+ sources)1. GET /api/v6/dex/aggregator/quote?chainIndex=1&fromTokenAddress=0xa0b8...&toTokenAddress=0xeeee...&amount=100000000&swapMode=exactIn
-> 展示:
预计到账:0.031 ETH
Gas费用:约2.50美元
价格影响:0.05%
兑换路径:USDC -> WETH -> ETH(Uniswap V3)
2. 用户确认
3. GET /api/v6/dex/aggregator/approve-transaction?chainIndex=1&tokenContractAddress=0xa0b8...&approveAmount=100000000
-> 返回授权调用数据和授权对象地址
-> 构建交易:{ to: "0xa0b8..."(代币合约), data: response.data } —— 签名并发送
4. GET /api/v6/dex/aggregator/swap?chainIndex=1&...&slippagePercent=1&userWalletAddress=0x...
-> 返回交易数据:{ from, to, data, gas, gasPrice, value, minReceiveAmount }
-> 用户签名并广播GET /api/v6/dex/aggregator/get-liquidity?chainIndex=1
-> 展示:Uniswap V2、Uniswap V3、SushiSwap、Curve、Balancer、...(80+个来源)isHoneyPot = truetaxRateokx-wallet-portfolioexactIn/swap-instruction/swap11111111111111111111111111111111So11111111111111111111111111111111111111112custom program error: 0xb50011isHoneyPot = truetaxRateokx-wallet-portfolioexactIn/swap-instruction/swap11111111111111111111111111111111So11111111111111111111111111111111111111112custom program error: 0xb500111.5 ETH3,200 USDC1 USDC"1000000"1 ETH"1000000000000000000"minReceiveAmount1.5 ETH3,200 USDC1 USDC"1000000"1 ETH"1000000000000000000"minReceiveAmountexactOut184535642161/swap-instructionisHoneyPottaxRateokx-dex-tokenokx-dex-marketokx-wallet-portfoliookx-onchain-gatewayexactOut184535642161/swap-instructionisHoneyPottaxRateokx-dex-tokenokx-dex-marketokx-wallet-portfoliookx-onchain-gateway