okx-dex-swap by okx/onchainos-skills
npx skills add https://github.com/okx/onchainos-skills --skill okx-dex-swap5 个用于多链兑换聚合的命令 —— 报价、授权和执行。
每次运行任何 onchainos 命令前,请始终按顺序执行以下步骤。不要向用户回显常规命令输出;仅在安装、更新或处理失败时提供简短的状态更新。
解析最新稳定版本 : 从 GitHub API 获取最新的稳定发布标签:
curl -sSL "https://api.github.com/repos/okx/onchainos-skills/releases/latest"
将 tag_name 字段(例如 v1.0.5)提取到 LATEST_TAG 中。如果 API 调用失败且 onchainos 已本地安装,则跳过步骤 2-3 并继续运行命令(用户可能离线或被限速;过时的二进制文件总比阻塞好)。如果 onchainos 未安装,则停止并告知用户检查其网络连接或从 https://github.com/okx/onchainos-skills 手动安装。
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
onchainos,或者 ~/.onchainos/last_check 处的缓存(Windows 上为 $env:USERPROFILE\.onchainos\last_check)超过 12 小时: * 从最新的发布标签下载安装程序及其校验和文件:
* **macOS/Linux** : `curl -sSL "https://raw.githubusercontent.com/okx/onchainos-skills/${LATEST_TAG}/install.sh" -o /tmp/onchainos-install.sh` `curl -sSL "https://github.com/okx/onchainos-skills/releases/download/${LATEST_TAG}/installer-checksums.txt" -o /tmp/installer-checksums.txt`
* **Windows** : `Invoke-WebRequest -Uri "https://raw.githubusercontent.com/okx/onchainos-skills/${LATEST_TAG}/install.ps1" -OutFile "$env:TEMP\onchainos-install.ps1"` `Invoke-WebRequest -Uri "https://github.com/okx/onchainos-skills/releases/download/${LATEST_TAG}/installer-checksums.txt" -OutFile "$env:TEMP\installer-checksums.txt"`
* 根据 `installer-checksums.txt` 验证安装程序的 SHA256。如果不匹配,则**停止**并警告 —— 安装程序可能已被篡改。
* 执行:`sh /tmp/onchainos-install.sh`(或在 Windows 上执行 `& "$env:TEMP\onchainos-install.ps1"`)。安装程序在内部处理版本比较,仅在需要时下载二进制文件。
* 其他失败情况下,请指向 <https://github.com/okx/onchainos-skills>。
3. 验证二进制文件完整性(每个会话一次):运行 onchainos --version 获取已安装版本(例如 1.0.5 或 2.0.0-beta.0)。将已安装标签构造为 v<version>。下载已安装版本标签(不一定是 LATEST_TAG)的 checksums.txt:curl -sSL "https://github.com/okx/onchainos-skills/releases/download/v<version>/checksums.txt" -o /tmp/onchainos-checksums.txt 查找平台目标,并将已安装二进制文件的 SHA256 与校验和进行比较。如果不匹配,请重新安装(步骤 2)并重新验证。如果仍然不匹配,则停止并警告。
* 平台目标 —— macOS:`arm64`->`aarch64-apple-darwin`, `x86_64`->`x86_64-apple-darwin`;Linux:`x86_64`->`x86_64-unknown-linux-gnu`, `aarch64`->`aarch64-unknown-linux-gnu`, `i686`->`i686-unknown-linux-gnu`, `armv7l`->`armv7-unknown-linux-gnueabihf`;Windows:`AMD64`->`x86_64-pc-windows-msvc`, `x86`->`i686-pc-windows-msvc`, `ARM64`->`aarch64-pc-windows-msvc`
* 哈希命令 —— macOS/Linux:`shasum -a 256 ~/.local/bin/onchainos`;Windows:`(Get-FileHash "$env:USERPROFILE\.local\bin\onchainos.exe" -Algorithm SHA256).Hash.ToLower()`
4. 检查技能版本漂移(每个会话一次):如果 onchainos --version 比此技能的 metadata.version 新,则显示一次性通知,告知该技能可能已过时,并建议用户通过其平台的方法重新安装技能。不要阻塞。
命令失败时不要自动重新安装。 报告错误并建议运行 onchainos --version 或从 https://github.com/okx/onchainos-skills 手动重新安装。
速率限制错误。 如果命令触发速率限制,共享的 API 密钥可能被限制。建议在 OKX 开发者门户 创建个人密钥。如果用户创建了 .env 文件,提醒他们将其添加到 .gitignore。
okx-dex-tokenokx-dex-marketokx-wallet-portfolio# 1. 报价 — 在 XLayer 上卖出 100 USDC 换取 OKB
onchainos swap quote \
--from 0x74b7f16337b8972027f6196a17a631ac6de26d22 \
--to 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee \
--amount 100000000 \
--chain xlayer
# → 预期:X.XX OKB,Gas 费,价格影响
# 2. 授权 — ERC-20 代币在兑换前需要授权(原生 OKB 跳过此步)
onchainos swap approve \
--token 0x74b7f16337b8972027f6196a17a631ac6de26d22 \
--amount 100000000 \
--chain xlayer
# → 返回授权调用数据 → 通过钱包合约调用进行签名和广播
onchainos wallet contract-call --to 0x74b7f16337b8972027f6196a17a631ac6de26d22 --chain 196 --input-data <approve_calldata>
# 3. 兑换
onchainos swap swap \
--from 0x74b7f16337b8972027f6196a17a631ac6de26d22 \
--to 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee \
--amount 100000000 \
--chain xlayer \
--wallet <local_wallet_addr>
# → 返回兑换调用数据 → 通过钱包合约调用进行签名和广播
onchainos wallet contract-call --to <tx.to> --chain 196 --value <value_in_UI_units> --input-data <tx.data> \
--aa-dex-token-addr 0x74b7f16337b8972027f6196a17a631ac6de26d22 --aa-dex-token-amount <fromTokenAmount>
# 1. 报价
onchainos swap quote \
--from 11111111111111111111111111111111 \
--to DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263 \
--amount 1000000000 \
--chain solana
# 2. 兑换
onchainos swap swap \
--from 11111111111111111111111111111111 \
--to DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263 \
--amount 1000000000 \
--chain solana \
--wallet <local_wallet_addr>
# → 返回未签名交易 → 通过钱包合约调用进行签名和广播
onchainos wallet contract-call --to <contract> --chain 501 --unsigned-tx <unsigned_tx>
CLI 接受人类可读的链名称并自动解析它们。
| 链 | 名称 | chainIndex |
|---|---|---|
| XLayer | xlayer | 196 |
| Solana | solana | 501 |
| Ethereum | ethereum | 1 |
| Base | base | 8453 |
| BSC | bsc | 56 |
| Arbitrum | arbitrum | 42161 |
| 链 | 原生代币地址 |
|---|---|
| EVM (Ethereum, BSC, Polygon, Arbitrum, Base 等) | 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee |
| Solana | 11111111111111111111111111111111 |
| Sui | 0x2::sui::SUI |
| Tron | T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb |
| Ton | EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9c |
---|---|---
1 | onchainos swap chains | 获取 DEX 聚合器支持的链
2 | onchainos swap liquidity --chain <chain> | 获取链上可用的流动性来源
3 | onchainos swap approve --token ... --amount ... --chain ... | 获取 ERC-20 授权交易数据
4 | onchainos swap quote --from ... --to ... --amount ... --chain ... | 获取兑换报价(只读价格估算)。无 --slippage 参数 —— 滑点仅适用于 swap swap。
5 | onchainos swap swap --from ... --to ... --amount ... --chain ... --wallet ... [--slippage <pct>] [--gas-level <level>] | 获取兑换交易数据。--slippage 设置固定滑点(例如 30 表示 30%);省略则使用 autoSlippage。
| 相邻技能 | 本技能 (okx-dex-swap) | 相邻技能处理 | 如何决定 |
|---|---|---|---|
| okx-dex-market | 执行兑换(报价、授权、兑换) | 价格查询、图表、盈亏分析 | 如果用户想要 交易 → 这里;如果用户想要 查看价格 → market |
| okx-dex-token | 兑换执行 | 代币搜索、元数据、排名 | 如果用户想要 兑换 → 这里;如果用户想要 查找/查询 代币 → token |
| okx-agentic-wallet | 报价 + 调用数据生成 + 通过 wallet contract-call 进行签名和广播 | 钱包认证、余额、发送、历史记录 | 本技能编排完整的兑换流程;钱包提供签名 |
经验法则 : okx-dex-swap 编排完整的兑换流程 —— 报价、授权、兑换调用数据生成,以及通过
onchainos wallet contract-call进行签名/广播。它不查询价格或搜索代币。
本技能是大多数用户交易流程的执行端点。它几乎总是需要先获得其他技能的输入。
用户:"在 Solana 上将 1 SOL 兑换成 BONK"
1. okx-dex-token onchainos token search --query BONK --chains solana → 获取 BONK tokenContractAddress
↓ tokenContractAddress
2. okx-dex-swap onchainos swap quote \
--from 11111111111111111111111111111111 \
--to <BONK_address> --amount 1000000000 --chain solana → 获取报价
↓ 用户确认
3. okx-dex-swap onchainos swap swap \
--from 11111111111111111111111111111111 \
--to <BONK_address> --amount 1000000000 --chain solana \
--wallet <addr> → 获取兑换调用数据
4. onchainos wallet contract-call --to <contract> --chain 501 --unsigned-tx <unsigned_tx>
数据传递 :
tokenContractAddress → 步骤 2-3 的 --to11111111111111111111111111111111 → --from。请勿使用 wSOL 地址。1 SOL = 1000000000(9 位小数)→ --amount 参数用户:"在 XLayer 上将 100 USDC 兑换成 OKB"
1. okx-dex-token onchainos token search --query USDC --chains xlayer → 获取 USDC 地址
2. onchainos wallet status → 检查登录状态 + 获取钱包地址
3. okx-dex-swap onchainos swap quote --from <USDC> --to 0xeeee...eeee --amount 100000000 --chain xlayer
↓ 检查 isHoneyPot, taxRate, priceImpactPercent + MEV 评估
4. okx-dex-swap onchainos swap approve --token <USDC> --amount 100000000 --chain xlayer → 获取授权调用数据
5. onchainos wallet contract-call --to <token_contract_address> --chain 196 --input-data <approve_calldata> → 签名并广播授权
6. okx-dex-swap onchainos swap swap --from <USDC> --to 0xeeee...eeee --amount 100000000 --chain xlayer --wallet <local_wallet_addr>
7. onchainos wallet contract-call --to <contract> --chain 196 --value <value_in_UI_units> --input-data <swap_calldata> \
--aa-dex-token-addr <fromToken.tokenContractAddress> --aa-dex-token-amount <fromTokenAmount>
--value 的单位转换:swap swap 返回的 tx.value 是最小单位(wei),但 contract-call --value 期望的是UI 单位。转换:UI_value = tx.value / 10^nativeToken.decimal(例如,10000000000000000 wei ÷ 10^18 = 0.01 ETH)。如果 tx.value 是 "0" 或为空,则使用 "0"。
关键点 : EVM 代币(非原生)需要授权步骤。如果卖出的是原生代币,则跳过。
1. onchainos swap quote --from ... --to ... --amount ... --chain ... → 获取带路由信息的报价
2. 显示:预期输出、Gas、价格影响、路由、MEV 风险评估
3. 如果价格影响 > 5% → 警告。如果 isHoneyPot = true → 阻止(买入)/ 警告(卖出)。
4. 用户确认 → 继续授权(如果是 EVM)→ 兑换 → 钱包合约调用
流程:报价 → 授权(如果是非原生代币)→ 合约调用授权 → 兑换 → 合约调用兑换。
--chain映射:swap命令接受链名称(例如xlayer),但wallet contract-call需要realChainIndex(例如196)。请参阅上方“链名称支持”中的映射表。常见映射:xlayer→196,ethereum→1,bsc→56,base→8453,arbitrum→42161,solana→501。
1. onchainos swap quote ... → 获取价格、路由和授权者地址
2. onchainos swap approve ... → 获取授权调用数据(原生代币跳过)
3. onchainos wallet contract-call --to <token_contract_address> --chain <chainIndex> --input-data <approve_calldata>
4. onchainos swap swap ... → 获取兑换调用数据
5. onchainos wallet contract-call --to <contract> --chain <chainIndex> --value <value_in_UI_units> --input-data <swap_calldata> \
--aa-dex-token-addr <fromToken.tokenContractAddress> --aa-dex-token-amount <fromTokenAmount>
1. onchainos swap quote ... → 获取价格和路由
2. onchainos swap swap ... → 获取兑换调用数据
3. onchainos wallet contract-call --to <contract> --chain 501 --unsigned-tx <unsigned_tx>
这些规则是强制性的。请勿跳过或绕过。
isHoneyPot = true,则阻止交易。如果卖出蜜罐代币,则警告但允许(用户可能需要平仓)。 * > 10%: 强烈警告。建议减少数量或拆分成多笔小额交易。仅在用户明确确认后继续。
taxRate 非零,请在确认前显示税率(例如,“此代币有 5% 的卖出税”)。注意:taxRate 与滑点是分开的。onchainos swap quoteonchainos swap liquidityonchainos swap approve| 场景 | 状态 | 备注 |
|---|---|---|
| 手动单笔交易 | 支持(默认) | 用户发起并确认每笔兑换 |
| 代理自动策略 | 支持(静默模式) | 需要用户明确授权 |
--chain xlayer,Gas 费低,确认快)作为默认值,然后询问用户偏好哪条链okx-dex-token onchainos token search 来解析名称 → 地址--slippage;API 会自动计算最优滑点)。如果用户明确指定了固定滑点值,则传递 --slippage <value>,这将禁用 autoSlippage。重要提示:--slippage 仅是 onchainos swap swap 的参数,不是 onchainos swap quote 的参数。切勿将 --slippage 传递给 quote 命令 —— 这会失败。注意:taxRate 与滑点是分开的 —— taxRate 由代币合约扣除,不包含在滑点设置中。
使用这些参考预设,根据代币特性指导参数选择。代理根据上下文选择最合适的预设,无需询问用户。
---|---|---|---|---|---
1 | Meme/低市值 | Meme 币、新代币、低流动性 | autoSlippage(参考 5%-20%) | 推荐 fast | 默认 MEV 逻辑(见“### MEV 保护”)
2 | 主流代币 | BTC/ETH/SOL/主要代币,高流动性 | autoSlippage(参考 0.5%-1%) | average | 默认开启
3 | 稳定币 | USDC/USDT/DAI 交易对 | autoSlippage(参考 0.1%-0.3%) | average | 默认开启
4 | 大额交易 | priceImpact ≥ 10% 且 fromToken 价值 ≥ $1,000 且交易对流动性 ≥ $10,000 | autoSlippage | average | 默认开启
自定义预设 (#5+) : 如果用户想要自定义预设,请用 ≤5 个问题引导他们(例如,代币类型、风险承受能力、速度偏好)。代理用合理的默认值填充剩余参数。
预设检测 : 使用 marketCap、流动性、交易量、isStablecoin 和 priceImpact 来确定适用哪个预设。
重复失败 : 如果使用当前预设兑换反复失败,请在调整配置(例如增加滑点或切换 Gas 等级)前询问用户。
报价完成后,从本地代理钱包解析钱包地址:
onchainos wallet status 检查登录状态。onchainos wallet login(不带 email 参数)进行静默登录。如果静默登录失败(例如,未配置 AK),请要求用户提供 email 进行 OTP 登录(onchainos wallet login <email> → onchainos wallet verify <otp>)。登录成功后,继续执行用户原始命令 —— 不要要求用户重复命令。onchainos wallet add)。onchainos swap quote,显示估算结果
isHoneyPot 和 taxRate —— 向用户展示安全信息onchainos swap swap,返回用于签名的交易数据仅在用户明确授权自动化执行时启用(例如,“自动执行我的策略”、“价格达到 X 时自动兑换”)。三条强制性规则:
onchainos swap swap 成功返回后,使用 onchainos wallet contract-call 一步完成签名和广播。注意:wallet contract-call --chain 需要 realChainIndex(例如,XLayer 为 196,Ethereum 为 1,Solana 为 501),而不是 swap 命令中使用的链名称。
onchainos wallet contract-call --to <contract_address> --chain <chainIndex> --value <value_in_UI_units> --input-data <tx_calldata>onchainos wallet contract-call --to <contract_address> --chain 196 --value <value_in_UI_units> --input-data <tx_calldata> --aa-dex-token-addr <fromToken.tokenContractAddress> --aa-dex-token-amount <fromTokenAmount>onchainos wallet contract-call --to <contract_address> --chain 501 --unsigned-tx <unsigned_tx_data>contract-call 命令在内部处理 TEE 签名和广播 —— 无需单独的广播步骤。
--value 单位转换:swap swap 返回的 tx.value 是最小单位(wei/lamports),但 contract-call --value 期望 UI 单位。转换:value_in_UI_units = tx.value / 10^nativeToken.decimal(例如,ETH 为 18,SOL 为 9)。如果 tx.value 是 "0" 或为空,则使用 "0"。
对成功消息使用业务层面的语言:
请勿使用链/广播层面的措辞,例如“交易在链上确认”、“成功广播”、“链上成功”等。用户关心的是业务结果(授权/兑换完成),而不是底层的广播机制。
显示结果后,建议 2-3 个相关的后续操作:
| 刚刚完成 | 建议 |
|---|---|
swap quote(尚未确认) | 1. 在决定前查看价格图表 → okx-dex-market 2. 继续兑换 → 继续授权 + 兑换(本技能) |
| 兑换执行成功 | 1. 查看交易详情 → 提供浏览器链接(例如 https://<explorer>/tx/<txHash>) 2. 检查刚收到代币的价格 → okx-dex-market 3. 兑换其他代币 → 新的兑换流程(本技能) |
swap liquidity | 1. 获取兑换报价 → onchainos swap quote(本技能) |
以对话方式呈现,例如:“兑换完成!您想查看更新后的余额吗?” —— 切勿向用户暴露技能名称或端点路径。
有关所有 5 个命令的详细参数表、返回字段架构和使用示例,请查阅:
references/cli-reference.md — 完整的 CLI 命令参考,包含参数、返回字段和示例要搜索特定命令详情:grep -n "onchainos swap <command>" references/cli-reference.md
| 风险项 | 买入 | 卖出 | 备注 |
|---|---|---|---|
蜜罐 (isHoneyPot=true) | 阻止 | 警告(允许退出) | 允许卖出以应对止损场景 |
| 高税率 (>10%) | 警告 | 警告 | 显示确切税率 |
| 价格影响 >5% | 警告 | 警告 | 建议拆分交易 |
| 价格影响 >10% | 阻止 | 警告 | 强烈劝阻,允许卖出以退出 |
| 无可用报价 | 无法 | 无法 | 代币可能未上市或流动性为零 |
| 黑名单/标记地址 | 阻止 | 阻止 | 地址被安全服务标记 |
| 新代币 (<24h) | 警告 | 继续 | 买入侧需格外谨慎 |
| 流动性不足 | 无法 | 无法 | 流动性太低无法执行交易 |
| 不支持代币类型 | 无法 | 无法 | 通知用户,建议替代方案 |
图例 : 阻止 = 暂停,需要明确覆盖 · 警告 = 显示警告,请求确认 · 无法 = 操作不可能 · 继续 = 允许并附带信息
两个条件(OR —— 任一触发即启用):
toTokenAmount × toTokenPrice × slippage ≥ $50fromTokenAmount × fromTokenPrice ≥ 链阈值仅当两者都低于阈值时才禁用。如果 toTokenPrice 或 fromTokenPrice 不可用/为 0 → 默认启用。
| 链 | MEV 保护 | 阈值 | 路径 |
|---|---|---|---|
| Ethereum | 是 | $2,000 | wallet contract-call --mev-protection |
| Solana | 是 | $1,000 | /swap 带 tips 参数(SOL,0.0000000001–2)+ computeUnitPrice=0 → 响应返回 jitoCalldata → wallet contract-call --mev-protection --jito-unsigned-tx <jito_base58_tx> |
| BNB Chain | 是 | $200 | wallet contract-call --mev-protection |
| Base | 是 | $200 | wallet contract-call --mev-protection |
| 其他 | 否 | — | — |
MEV 保护由 onchainos wallet contract-call --mev-protection 直接处理。
当兑换交易失败时(广播错误、链上回滚或超时),在报告给用户之前生成诊断摘要:
Diagnostic Summary:
txHash: <hash or "simulation failed">
chain: <chain name (chainIndex)>
errorCode: <API or on-chain error code>
errorMessage: <human-readable error>
tokenPair: <fromToken symbol> → <toToken symbol>
amount: <amount in UI units>
slippage: <value used, or "auto">
mevProtection: <on|off>
walletAddress: <address>
timestamp: <ISO 8601>
cliVersion: <onchainos --version>
这有助于调试问题,而无需用户手动收集信息。
风险控制表涵盖的项目(蜜罐、价格影响、税收、新代币、流动性不足、无报价)此处不再重复。有关操作级别,请参阅风险控制。
exactIn11111111111111111111111111111111,不是 So11111111111111111111111111111111111111112⚠️ 服务在您所在的地区不可用。请切换到受支持的地区并重试。onchainos swap approve。原生代币不使用 ERC-20 授权;调用授权将在链上回滚并浪费 Gas。1.5 ETH, 3,200 USDC)--amount 参数始终使用最小单位(wei/lamports):1 USDC = "1000000"(6 位小数),1 ETH = "1000000000000000000"(18 位小数),1 SOL = "1000000000"(9 位小数)。在调用任何 swap 命令前进行转换。minReceiveAmount 以 UI 单位和 USD 显示exactOut 仅在 Ethereum(1)/Base(8453)/BSC(56)/Arbitrum(42161) 上支持isHoneyPot 和 taxRate —— 向用户展示安全信息ethereum → 1, solana → 501)--gas-level average。对于 Meme/时间敏感的交易使用 fast,对于成本敏感的非紧急交易使用 slow。Solana:如果 Jito 小费 > 0(MEV 保护),则设置 computeUnitPrice = 0(它们互斥)。5 commands for multi-chain swap aggregation — quote, approve, and execute.
Every time before running any onchainos command, always follow these steps in order. Do not echo routine command output to the user; only provide a brief status update when installing, updating, or handling a failure.
Resolve latest stable version : Fetch the latest stable release tag from the GitHub API:
curl -sSL "https://api.github.com/repos/okx/onchainos-skills/releases/latest"
Extract the tag_name field (e.g., v1.0.5) into LATEST_TAG. If the API call fails and onchainos is already installed locally, skip steps 2-3 and proceed to run the command (the user may be offline or rate-limited; a stale binary is better than blocking). If onchainos is not installed, stop and tell the user to check their network connection or install manually from https://github.com/okx/onchainos-skills.
Install or update : If onchainos is not found, or if the cache at ~/.onchainos/last_check ($env:USERPROFILE\.onchainos\last_check on Windows) is older than 12 hours:
curl -sSL "https://raw.githubusercontent.com/okx/onchainos-skills/${LATEST_TAG}/install.sh" -o /tmp/onchainos-install.sh curl -sSL "https://github.com/okx/onchainos-skills/releases/download/${LATEST_TAG}/installer-checksums.txt" -o /tmp/installer-checksums.txtInvoke-WebRequest -Uri "https://raw.githubusercontent.com/okx/onchainos-skills/${LATEST_TAG}/install.ps1" -OutFile "$env:TEMP\onchainos-install.ps1" okx-dex-tokenokx-dex-marketokx-wallet-portfolio# 1. Quote — sell 100 USDC for OKB on XLayer
onchainos swap quote \
--from 0x74b7f16337b8972027f6196a17a631ac6de26d22 \
--to 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee \
--amount 100000000 \
--chain xlayer
# → Expected: X.XX OKB, gas fee, price impact
# 2. Approve — ERC-20 tokens need approval before swap (skip for native OKB)
onchainos swap approve \
--token 0x74b7f16337b8972027f6196a17a631ac6de26d22 \
--amount 100000000 \
--chain xlayer
# → Returns approval calldata → sign & broadcast via wallet contract-call
onchainos wallet contract-call --to 0x74b7f16337b8972027f6196a17a631ac6de26d22 --chain 196 --input-data <approve_calldata>
# 3. Swap
onchainos swap swap \
--from 0x74b7f16337b8972027f6196a17a631ac6de26d22 \
--to 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee \
--amount 100000000 \
--chain xlayer \
--wallet <local_wallet_addr>
# → Returns swap calldata → sign & broadcast via wallet contract-call
onchainos wallet contract-call --to <tx.to> --chain 196 --value <value_in_UI_units> --input-data <tx.data> \
--aa-dex-token-addr 0x74b7f16337b8972027f6196a17a631ac6de26d22 --aa-dex-token-amount <fromTokenAmount>
# 1. Quote
onchainos swap quote \
--from 11111111111111111111111111111111 \
--to DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263 \
--amount 1000000000 \
--chain solana
# 2. Swap
onchainos swap swap \
--from 11111111111111111111111111111111 \
--to DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263 \
--amount 1000000000 \
--chain solana \
--wallet <local_wallet_addr>
# → Returns unsigned tx → sign & broadcast via wallet contract-call
onchainos wallet contract-call --to <contract> --chain 501 --unsigned-tx <unsigned_tx>
The CLI accepts human-readable chain names and resolves them automatically.
| Chain | Name | chainIndex |
|---|---|---|
| XLayer | xlayer | 196 |
| Solana | solana | 501 |
| Ethereum | ethereum | 1 |
| Base | base |
| Chain | Native Token Address |
|---|---|
| EVM (Ethereum, BSC, Polygon, Arbitrum, Base, etc.) | 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee |
| Solana | 11111111111111111111111111111111 |
| Sui | 0x2::sui::SUI |
| Tron | T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb |
| Ton | EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9c |
---|---|---
1 | onchainos swap chains | Get supported chains for DEX aggregator
2 | onchainos swap liquidity --chain <chain> | Get available liquidity sources on a chain
3 | onchainos swap approve --token ... --amount ... --chain ... | Get ERC-20 approval transaction data
4 | onchainos swap quote --from ... --to ... --amount ... --chain ... | Get swap quote (read-only price estimate). No--slippage param — slippage only applies to swap swap.
5 | onchainos swap swap --from ... --to ... --amount ... --chain ... --wallet ... [--slippage <pct>] [--gas-level <level>] | Get swap transaction data. --slippage sets fixed slippage (e.g. 30 for 30%); omit to use autoSlippage.
| Neighbor Skill | This Skill (okx-dex-swap) | Neighbor Handles | How to Decide |
|---|---|---|---|
| okx-dex-market | Executing swaps (quote, approve, swap) | Price queries, charts, PnL analysis | If user wants to trade → here; if user wants to check price → market |
| okx-dex-token | Swap execution | Token search, metadata, rankings | If user wants to swap → here; if user wants to find/lookup a token → token |
| okx-agentic-wallet | Quote + calldata generation + signing & broadcasting via wallet contract-call | Wallet auth, balance, send, history | This skill orchestrates the full swap flow; wallet provides signing |
Rule of thumb : okx-dex-swap orchestrates the full swap flow — quote, approve, swap calldata generation, and signing/broadcasting via
onchainos wallet contract-call. It does NOT query prices or search tokens.
This skill is the execution endpoint of most user trading flows. It almost always needs input from other skills first.
User: "Swap 1 SOL for BONK on Solana"
1. okx-dex-token onchainos token search --query BONK --chains solana → get BONK tokenContractAddress
↓ tokenContractAddress
2. okx-dex-swap onchainos swap quote \
--from 11111111111111111111111111111111 \
--to <BONK_address> --amount 1000000000 --chain solana → get quote
↓ user confirms
3. okx-dex-swap onchainos swap swap \
--from 11111111111111111111111111111111 \
--to <BONK_address> --amount 1000000000 --chain solana \
--wallet <addr> → get swap calldata
4. onchainos wallet contract-call --to <contract> --chain 501 --unsigned-tx <unsigned_tx>
Data handoff :
tokenContractAddress from step 1 → --to in steps 2-311111111111111111111111111111111 → --from. Do NOT use wSOL address.1 SOL = 1000000000 (9 decimals) → --amount paramUser: "Swap 100 USDC for OKB on XLayer"
1. okx-dex-token onchainos token search --query USDC --chains xlayer → get USDC address
2. onchainos wallet status → check login + get wallet address
3. okx-dex-swap onchainos swap quote --from <USDC> --to 0xeeee...eeee --amount 100000000 --chain xlayer
↓ check isHoneyPot, taxRate, priceImpactPercent + MEV assessment
4. okx-dex-swap onchainos swap approve --token <USDC> --amount 100000000 --chain xlayer → get approve calldata
5. onchainos wallet contract-call --to <token_contract_address> --chain 196 --input-data <approve_calldata> → sign & broadcast approval
6. okx-dex-swap onchainos swap swap --from <USDC> --to 0xeeee...eeee --amount 100000000 --chain xlayer --wallet <local_wallet_addr>
7. onchainos wallet contract-call --to <contract> --chain 196 --value <value_in_UI_units> --input-data <swap_calldata> \
--aa-dex-token-addr <fromToken.tokenContractAddress> --aa-dex-token-amount <fromTokenAmount>
Unit conversion for--value: swap swap returns tx.value in minimal units (wei), but contract-call --value expects UI units. Convert: UI_value = tx.value / 10^nativeToken.decimal (e.g., 10000000000000000 wei ÷ 10^18 = 0.01 ETH). If tx.value is "0" or empty, use "0".
Key : EVM tokens (not native) require an approve step. Skip if selling native tokens.
1. onchainos swap quote --from ... --to ... --amount ... --chain ... → get quote with route info
2. Display: expected output, gas, price impact, route, MEV risk assessment
3. If price impact > 5% → warn. If isHoneyPot = true → block (buy) / warn (sell).
4. User confirms → proceed to approve (if EVM) → swap → wallet contract-call
Flow: quote → approve (if non-native token) → contract-call approve → swap → contract-call swap.
--chainmapping:swapcommands accept chain names (e.g.,xlayer), butwallet contract-callrequiresrealChainIndex(e.g.,196). See the mapping table in "Chain Name Support" above. Common:xlayer→196,ethereum→1,bsc→, →, →, →.
1. onchainos swap quote ... → Get price, route, and spender address
2. onchainos swap approve ... → Get approval calldata (skip for native tokens)
3. onchainos wallet contract-call --to <token_contract_address> --chain <chainIndex> --input-data <approve_calldata>
4. onchainos swap swap ... → Get swap calldata
5. onchainos wallet contract-call --to <contract> --chain <chainIndex> --value <value_in_UI_units> --input-data <swap_calldata> \
--aa-dex-token-addr <fromToken.tokenContractAddress> --aa-dex-token-amount <fromTokenAmount>
1. onchainos swap quote ... → Get price and route
2. onchainos swap swap ... → Get swap calldata
3. onchainos wallet contract-call --to <contract> --chain 501 --unsigned-tx <unsigned_tx>
These rules are mandatory. Do NOT skip or bypass them.
User confirmation required before every transaction. Never execute an approval or swap without displaying the full details (token, amount, estimated output, gas, price impact) and receiving explicit user confirmation. Exception: silent/automated mode with explicit user authorization.
Unlimited approvals by default. In the merged approve+swap flow, use unlimited approval to reduce future approval steps. If the user explicitly requests scoped (exact-amount) approval, respect their preference.
Honeypot handling. If isHoneyPot = true for the buy token, BLOCK the trade. If selling a honeypot token, WARN but allow (user may need to exit a position).
Price impact gates:
5%: display a prominent warning and ask the user to confirm.
10%: strongly warn. Suggest reducing the amount or splitting into smaller trades. Proceed only if user explicitly confirms.
Tax token disclosure. If taxRate is non-zero, display the tax rate before confirmation (e.g., "This token has a 5% sell tax"). Note: taxRate is separate from slippage.
No silent retries on transaction failures. If a swap or approval call fails, report the error with diagnostic summary. Do not automatically retry.
onchainos swap quoteonchainos swap liquidityonchainos swap approve| Scenario | Status | Notes |
|---|---|---|
| Manual single trade | Supported (default) | User initiates and confirms each swap |
| Agent auto-strategy | Supported (silent mode) | Requires explicit user authorization |
--chain xlayer, low gas, fast confirmation) as the default, then ask which chain the user prefersokx-dex-token onchainos token search to resolve name → address--slippage; the API calculates optimal slippage automatically). If the user explicitly specifies a fixed slippage value, pass --slippage <value> which disables autoSlippage. IMPORTANT:--slippage is only a parameter of onchainos swap swap, NOT onchainos swap quote. Never pass --slippage to the quote command — it will fail. Note: is separate from slippage — taxRate is deducted by the token contract and is NOT included in the slippage setting.
Use these reference presets to guide parameter selection based on token characteristics. Agent selects the most appropriate preset based on context without asking the user.
---|---|---|---|---|---
1 | Meme/Low-cap | Meme coins, new tokens, low liquidity | autoSlippage (ref 5%-20%) | Recommend fast | Default MEV logic(in "### MEV Protection")
2 | Mainstream | BTC/ETH/SOL/major tokens, high liquidity | autoSlippage (ref 0.5%-1%) | average | Default on
3 | Stablecoin | USDC/USDT/DAI pairs | autoSlippage (ref 0.1%-0.3%) | average | Default on
4 | Large Trade | priceImpact ≥ 10% AND fromToken value ≥ $1,000 AND pair liquidity ≥ $10,000 | autoSlippage | average | Default on
Custom Preset (#5+) : If the user wants a custom preset, guide them with ≤5 questions (e.g., token type, risk tolerance, speed preference). Agent fills remaining parameters with sensible defaults.
Preset detection : Use marketCap, liquidity, volume, isStablecoin, and priceImpact to determine which preset applies.
Repeated failures : If a swap fails repeatedly with the current preset, ask the user before adjusting configuration (e.g., increasing slippage or switching gas level).
After quote completes, resolve the wallet address from the local Agentic Wallet:
onchainos wallet status to check login state.onchainos wallet login (without email parameter) for silent login. If silent login fails (e.g., no AK configured), ask the user to provide an email for OTP login (onchainos wallet login <email> → onchainos wallet verify <otp>). After login succeeds, continue with the user's original command — do not ask the user to repeat it.onchainos wallet add).onchainos swap quote, display estimated results
isHoneyPot and taxRate — surface safety info to usersonchainos swap swap, return tx data for signingEnabled only when the user has explicitly authorized automated execution (e.g., "execute my strategy automatically", "auto-swap when price hits X"). Three mandatory rules:
After onchainos swap swap returns successfully, use onchainos wallet contract-call to sign and broadcast in one step. Note: wallet contract-call --chain requires realChainIndex (e.g., 196 for XLayer, 1 for Ethereum, 501 for Solana), not the chain name used in swap commands.
onchainos wallet contract-call --to <contract_address> --chain <chainIndex> --value <value_in_UI_units> --input-data <tx_calldata>onchainos wallet contract-call --to <contract_address> --chain 196 --value <value_in_UI_units> --input-data <tx_calldata> --aa-dex-token-addr <fromToken.tokenContractAddress> --aa-dex-token-amount <fromTokenAmount>onchainos wallet contract-call --to <contract_address> --chain 501 --unsigned-tx <unsigned_tx_data>The contract-call command handles TEE signing and broadcasting internally — no separate broadcast step is needed.
--value unit conversion: swap swap returns tx.value in minimal units (wei/lamports), but contract-call --value expects UI units. Convert: value_in_UI_units = tx.value / 10^nativeToken.decimal (e.g., 18 for ETH, 9 for SOL). If tx.value is "0" or empty, use "0".
Use business-level language for success messages:
Do NOT use chain/broadcast-level wording such as "Transaction confirmed on-chain", "Successfully broadcast", "On-chain success", etc. The user cares about the business outcome (approve / swap done), not the underlying broadcast mechanics.
After displaying results, suggest 2-3 relevant follow-up actions:
| Just completed | Suggest |
|---|---|
swap quote (not yet confirmed) | 1. View price chart before deciding → okx-dex-market 2. Proceed with swap → continue approve + swap (this skill) |
| Swap executed successfully | 1. View transaction details → provide explorer link (e.g. https://<explorer>/tx/<txHash>) 2. Check price of the token just received → okx-dex-market 3. Swap another token → new swap flow (this skill) |
swap liquidity | 1. Get a swap quote → onchainos swap quote (this skill) |
Present conversationally, e.g.: "Swap complete! Would you like to check your updated balance?" — never expose skill names or endpoint paths to the user.
For detailed parameter tables, return field schemas, and usage examples for all 5 commands, consult:
references/cli-reference.md — Full CLI command reference with params, return fields, and examplesTo search for specific command details: grep -n "onchainos swap <command>" references/cli-reference.md
| Risk Item | Buy | Sell | Notes |
|---|---|---|---|
Honeypot (isHoneyPot=true) | BLOCK | WARN (allow exit) | Selling allowed for stop-loss scenarios |
| High tax rate (>10%) | WARN | WARN | Display exact tax rate |
| Price impact >5% | WARN | WARN | Suggest splitting trade |
| Price impact >10% | BLOCK | WARN | Strongly discourage, allow sell for exit |
| No quote available | CANNOT | CANNOT | Token may be unlisted or zero liquidity |
| Black/flagged address | BLOCK | BLOCK | Address flagged by security services |
Legend : BLOCK = halt, require explicit override · WARN = display warning, ask confirmation · CANNOT = operation impossible · PROCEED = allow with info
Two conditions (OR — either triggers enable):
toTokenAmount × toTokenPrice × slippage ≥ $50fromTokenAmount × fromTokenPrice ≥ chain thresholdDisable only when BOTH are below threshold. If toTokenPrice or fromTokenPrice unavailable/0 → enable by default.
| Chain | MEV Protection | Threshold | Path |
|---|---|---|---|
| Ethereum | Yes | $2,000 | wallet contract-call --mev-protection |
| Solana | Yes | $1,000 | /swap with tips param (SOL, 0.0000000001–2) + computeUnitPrice=0 → response returns jitoCalldata → wallet contract-call --mev-protection --jito-unsigned-tx <jito_base58_tx> |
MEV protection is handled directly by onchainos wallet contract-call --mev-protection.
When a swap transaction fails (broadcast error, on-chain revert, or timeout), generate a diagnostic summary before reporting to the user:
Diagnostic Summary:
txHash: <hash or "simulation failed">
chain: <chain name (chainIndex)>
errorCode: <API or on-chain error code>
errorMessage: <human-readable error>
tokenPair: <fromToken symbol> → <toToken symbol>
amount: <amount in UI units>
slippage: <value used, or "auto">
mevProtection: <on|off>
walletAddress: <address>
timestamp: <ISO 8601>
cliVersion: <onchainos --version>
This helps debug issues without requiring the user to gather info manually.
Items covered by the Risk Controls table (honeypot, price impact, tax, new tokens, insufficient liquidity, no quote) are not repeated here. Refer to Risk Controls for action levels.
exactIn11111111111111111111111111111111, NOT So11111111111111111111111111111111111111112⚠️ Service is not available in your region. Please switch to a supported region and try again.onchainos swap approve for native token addresses. Native tokens do not use ERC-20 approval; calling approve will revert on-chain and waste gas.1.5 ETH, 3,200 USDC)--amount parameter always uses minimal units (wei/lamports): 1 USDC = "1000000" (6 decimals), 1 ETH = "1000000000000000000" (18 decimals), 1 SOL = "1000000000" (9 decimals). Convert before calling any swap command.minReceiveAmount in both UI units and USDexactOut only on Ethereum(1)/Base(8453)/BSC(56)/Arbitrum(42161)isHoneyPot and taxRate — surface safety info to usersethereum → 1, solana → )Weekly Installs
3.1K
Repository
GitHub Stars
173
First Seen
Feb 28, 2026
Security Audits
Gen Agent Trust HubFailSocketPassSnykWarn
Installed on
codex3.0K
opencode3.0K
cursor3.0K
github-copilot3.0K
gemini-cli3.0K
amp3.0K
97,600 周安装
Invoke-WebRequest -Uri "https://github.com/okx/onchainos-skills/releases/download/${LATEST_TAG}/installer-checksums.txt" -OutFile "$env:TEMP\installer-checksums.txt"installer-checksums.txt. On mismatch, stop and warn — the installer may have been tampered with.sh /tmp/onchainos-install.sh (or & "$env:TEMP\onchainos-install.ps1" on Windows). The installer handles version comparison internally and only downloads the binary if needed.Verify binary integrity (once per session): Run onchainos --version to get the installed version (e.g., 1.0.5 or 2.0.0-beta.0). Construct the installed tag as v<version>. Download checksums.txt for the installed version's tag (not necessarily LATEST_TAG): curl -sSL "https://github.com/okx/onchainos-skills/releases/download/v<version>/checksums.txt" -o /tmp/onchainos-checksums.txt Look up the platform target and compare the installed binary's SHA256 against the checksum. On mismatch, reinstall (step 2) and re-verify. If still mismatched, stop and warn.
arm64->aarch64-apple-darwin, x86_64->x86_64-apple-darwin; Linux: x86_64->x86_64-unknown-linux-gnu, aarch64->aarch64-unknown-linux-gnu, i686->i686-unknown-linux-gnu, armv7l->armv7-unknown-linux-gnueabihf; Windows: AMD64->x86_64-pc-windows-msvc, x86->i686-pc-windows-msvc, ARM64->aarch64-pc-windows-msvcshasum -a 256 ~/.local/bin/onchainos; Windows: (Get-FileHash "$env:USERPROFILE\.local\bin\onchainos.exe" -Algorithm SHA256).Hash.ToLower()Check for skill version drift (once per session): If onchainos --version is newer than this skill's metadata.version, display a one-time notice that the skill may be outdated and suggest the user re-install skills via their platform's method. Do not block.
Do NOT auto-reinstall on command failures. Report errors and suggest onchainos --version or manual reinstall from https://github.com/okx/onchainos-skills.
Rate limit errors. If a command hits rate limits, the shared API key may be throttled. Suggest creating a personal key at the OKX Developer Portal. If the user creates a .env file, remind them to add .env to .gitignore.
8453 |
| BSC | bsc | 56 |
| Arbitrum | arbitrum | 42161 |
56base8453arbitrum42161solana501taxRate| New token (<24h) | WARN | PROCEED | Extra caution on buy side |
| Insufficient liquidity | CANNOT | CANNOT | Liquidity too low to execute trade |
| Token type not supported | CANNOT | CANNOT | Inform user, suggest alternative |
| BNB Chain |
| Yes |
| $200 |
wallet contract-call --mev-protection |
| Base | Yes | $200 | wallet contract-call --mev-protection |
| Others | No | — | — |
501--gas-level average. Use fast for meme/time-sensitive trades, slow for cost-sensitive non-urgent trades. Solana: if Jito tips > 0 (MEV protection), set computeUnitPrice = 0 (they are mutually exclusive).