本文详细介绍了如何使用 TypeScript 脚本库与 OKX 去中心化交易所(DEX)API 进行交互,支持以太坊(EVM)、Solana、Ton 和 Tron 网络上的单链及跨链 DEX 操作。
环境准备
在开始之前,请确保您的系统满足以下要求:
- Node.js v20.17.0 或更高版本
- git
- 一个 Web3 钱包(用于生成 API 密钥)
项目设置与配置
克隆仓库
首先,将项目仓库克隆到本地:
git clone https://github.com/okx/dex-api-library.git
cd dex-api-library安装依赖
使用 npm 安装项目所需的所有依赖包。
获取 API 凭证
您需要从开发者门户获取以下信息:
- 项目 ID
- API 密钥
- 密钥密钥
- API 密码
配置环境变量
创建 .env 文件并填入您的凭证信息:
OKX_PROJECT_ID=您的项目ID
OKX_API_KEY=您的API密钥
OKX_SECRET_KEY=您的API密钥密钥
OKX_API_PASSPHRASE=您的API密码
WALLET_ADDRESS=您的钱包公钥
PRIVATE_KEY=您的钱包私钥
# 可选:设置脚本使用的网络
SOLANA_RPC_URL=您的Solana RPC URL
WS_ENDPONT=您的WebSocket端点重要提示:请妥善保管您的 .env 文件,切勿将其提交到版本控制系统。
认证机制
该项目使用共享的认证工具(shared.ts)来处理 OKX API 请求。该工具负责请求签名和头部生成:
// shared.ts 中的认证函数
import CryptoJS from 'crypto-js';
import dotenv from 'dotenv';
dotenv.config();
export function getHeaders(timestamp: string, method: string, requestPath: string, queryString = "") {
// 从环境变量获取认证信息
const apiKey = process.env.OKX_API_KEY;
const secretKey = process.env.OKX_SECRET_KEY;
const apiPassphrase = process.env.OKX_API_PASSPHRASE;
const projectId = process.env.OKX_PROJECT_ID;
if (!apiKey || !secretKey || !apiPassphrase || !projectId) {
throw new Error("缺少必要的环境变量");
}
const stringToSign = timestamp + method + requestPath + queryString;
return {
"Content-Type": "application/json",
"OK-ACCESS-KEY": apiKey,
"OK-ACCESS-SIGN": CryptoJS.enc.Base64.stringify(
CryptoJS.HmacSHA256(stringToSign, secretKey)
),
"OK-ACCESS-TIMESTAMP": timestamp,
"OK-ACCESS-PASSPHRASE": apiPassphrase,
"OK-ACCESS-PROJECT": projectId,
};
}使用示例
以下是如何在 Solana 报价请求中使用认证工具的示例:
// 获取 Solana 上 SOL 到 USDC 报价的示例
const params = {
chainId: '501', // Solana 链 ID
fromTokenAddress: 'So11111111111111111111111111111111111111112', // 包装的 SOL
toTokenAddress: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', // USDC
amount: '10000000000', // 以 lamports 为单位的数量
slippage: '0.1' // 0.1% 滑点容差
};
const timestamp = new Date().toISOString();
const requestPath = "/api/v5/dex/aggregator/quote";
const queryString = "?" + new URLSearchParams(params).toString();
// 使用共享工具函数生成请求头部
const headers = getHeaders(timestamp, "GET", requestPath, queryString);
// 使用生成的头部发出请求
const response = await fetch(`https://www.okx.com${requestPath}${queryString}`, {
method: "GET",
headers
});完整实现可在 solana-quote.ts 中找到。
可用脚本命令
运行单个命令
您可以使用以下脚本命令,并以目标网络作为参数(如 evm、solana、ton、tron):
# 获取兑换报价
npm run quote:
# 执行兑换操作
npm run swap:solana --
# 获取兑换数据
npm run swap-data:
# 获取链信息
npm run chain:
# 列出支持的代币
npm run tokens:
# 获取流动性信息
npm run liquidity:
# 列出桥接代币
npm run bridge-tokens:
# 获取桥接信息
npm run bridges:
# 获取跨链报价
npm run cross-chain-quote:
# 列出代币对
npm run token-pairs:运行所有命令
您还可以使用以下命令运行特定网络的所有脚本:
# 为 EVM、Solana、Ton 和 Tron 运行所有 'GET' 脚本
npm run get-all链 ID 与常用代币地址
要获取代币兑换报价,您需要提供链 ID 和代币地址。以下是 "quote" 脚本中的基本结构:
const params = {
chainId: '1', // 网络链 ID
fromTokenAddress: '', // 源代币地址
toTokenAddress: '', // 目标代币地址
amount: '1000000000', // 以代币最小单位计的数量(考虑小数位)
slippage: '0.1', // 0.1% 滑点容差
};原生代币地址
每个区块链都有特定的地址来表示其原生代币(ETH、SOL 等)。兑换原生代币时,请使用这些地址:
EVM 网络
lib/evm 目录中的所有脚本都接受任何有效的 EVM 链 ID,跨网络保持功能一致性。
例如:
- 以太坊 ('1')
- X Layer ('196')
- Polygon ('137')
- Base ('8453')
- Arbitrum ('42161')
常用 EVM 代币(以太坊地址):
const ETH = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE' // 原生 ETH
const USDT = '0xdAC17F958D2ee523a2206206994597C13D831ec7' // USDT
const USDC = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' // USDCSolana ('501')
const SOL = '11111111111111111111111111111111' // 原生 SOL
const WSOL = 'So11111111111111111111111111111111111111112' // 包装的 SOL
const USDC = 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v' // USDCTON ('607')
const TON = 'EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9c' // 原生 TON
const USDC = 'EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs' // USDTTRON ('195')
const TRX = 'T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb' // 原生 TRX
const USDT = 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t' // USDT进阶功能与资源
此存储库中的示例是使用 OKX DEX API 文档构建的。每个 API 端点都在此存储库的相应脚本中实现,提供了可用功能的全面概述。
DEX 聚合器 API
跨链桥 API
- 获取桥接支持的链 - 列出跨链桥接支持的所有链
- 获取跨链代币 - 查看可用于跨链转移的代币
- 获取支持的桥接代币 - 列出桥接支持的所有代币
- 获取桥接代币对 - 查看可用于桥接的代币对
- 获取支持的桥接协议 - 列出所有支持的桥接协议
- 获取路由信息 - 获取跨链路由详细信息
想要进一步探索 DEX 聚合和跨链交换的完整功能?👉 查看实时交互工具
贡献指南
加入社区讨论
加入社区讨论,帮助其他开发人员解决集成问题,并分享您在使用 DEX API 库方面的经验。我们的社区是技术讨论、问题和实时支持的主要中心。
提交问题
- 提交问题以建议功能或报告小错误
- 在提交新问题之前,请搜索现有问题以避免重复
- 请求功能时,请包含有关用例和潜在影响的详细信息
提交拉取请求
- 分叉存储库
- 创建功能分支
- 进行更改
- 提交拉取请求
拉取请求指南
- 首先在问题中讨论非平凡更改
- 为新功能包含测试
- 根据需要更新文档
- 在 PR 中添加描述更改的变更日志条目
- PR 应重点突出,最好解决单个问题
常见问题
如何开始使用 OKX DEX API?
首先确保您已安装 Node.js v20.17.0 或更高版本,然后克隆项目仓库并配置您的 API 凭证。设置环境变量后,您可以运行提供的脚本来测试 API 连接。
支持哪些区块链网络?
该库支持以太坊(EVM)、Solana、Ton 和 Tron 网络,包括单链和跨链 DEX 操作。您可以在脚本中使用相应的链 ID 来指定目标网络。
如何保护我的 API 凭证?
永远不要将包含敏感信息的 .env 文件提交到版本控制系统。使用环境变量来管理您的凭证,并确保您的私钥和 API 密码得到妥善保管。
如何处理跨链交易?
使用提供的跨链桥 API 来获取支持的链、代币和桥接协议信息。然后使用跨链报价功能来获取路由详情,最后执行跨链交换操作。
在哪里可以找到更多的技术支持?
您可以加入社区讨论来获取实时支持,或查看现有的问题和讨论。对于一般性问题,可以开启讨论问题,而复杂的技术问题则适合在社区中进行深入讨论。
如何贡献代码或提出改进建议?
欢迎通过提交拉取请求来贡献代码,或通过提交问题来提出功能建议。请确保遵循项目的贡献指南,并在进行重大更改前先进行讨论。