使用 TypeScript 脚本与 OKX DEX API 交互的完整指南

·

本文详细介绍了如何使用 TypeScript 脚本库与 OKX 去中心化交易所(DEX)API 进行交互,支持以太坊(EVM)、Solana、Ton 和 Tron 网络上的单链及跨链 DEX 操作。

环境准备

在开始之前,请确保您的系统满足以下要求:

项目设置与配置

克隆仓库

首先,将项目仓库克隆到本地:

git clone https://github.com/okx/dex-api-library.git
cd dex-api-library

安装依赖

使用 npm 安装项目所需的所有依赖包。

获取 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 中找到。

可用脚本命令

运行单个命令

您可以使用以下脚本命令,并以目标网络作为参数(如 evmsolanatontron):

# 获取兑换报价
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,跨网络保持功能一致性。

例如:

常用 EVM 代币(以太坊地址):

const ETH = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE' // 原生 ETH
const USDT = '0xdAC17F958D2ee523a2206206994597C13D831ec7' // USDT
const USDC = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' // USDC

Solana ('501')

const SOL = '11111111111111111111111111111111' // 原生 SOL
const WSOL = 'So11111111111111111111111111111111111111112' // 包装的 SOL
const USDC = 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v' // USDC

TON ('607')

const TON = 'EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9c' // 原生 TON
const USDC = 'EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs' // USDT

TRON ('195')

const TRX = 'T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb' // 原生 TRX
const USDT = 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t' // USDT

进阶功能与资源

此存储库中的示例是使用 OKX DEX API 文档构建的。每个 API 端点都在此存储库的相应脚本中实现,提供了可用功能的全面概述。

DEX 聚合器 API

跨链桥 API

想要进一步探索 DEX 聚合和跨链交换的完整功能?👉 查看实时交互工具

贡献指南

加入社区讨论

加入社区讨论,帮助其他开发人员解决集成问题,并分享您在使用 DEX API 库方面的经验。我们的社区是技术讨论、问题和实时支持的主要中心。

提交问题

提交拉取请求

  1. 分叉存储库
  2. 创建功能分支
  3. 进行更改
  4. 提交拉取请求

拉取请求指南

常见问题

如何开始使用 OKX DEX API?

首先确保您已安装 Node.js v20.17.0 或更高版本,然后克隆项目仓库并配置您的 API 凭证。设置环境变量后,您可以运行提供的脚本来测试 API 连接。

支持哪些区块链网络?

该库支持以太坊(EVM)、Solana、Ton 和 Tron 网络,包括单链和跨链 DEX 操作。您可以在脚本中使用相应的链 ID 来指定目标网络。

如何保护我的 API 凭证?

永远不要将包含敏感信息的 .env 文件提交到版本控制系统。使用环境变量来管理您的凭证,并确保您的私钥和 API 密码得到妥善保管。

如何处理跨链交易?

使用提供的跨链桥 API 来获取支持的链、代币和桥接协议信息。然后使用跨链报价功能来获取路由详情,最后执行跨链交换操作。

在哪里可以找到更多的技术支持?

您可以加入社区讨论来获取实时支持,或查看现有的问题和讨论。对于一般性问题,可以开启讨论问题,而复杂的技术问题则适合在社区中进行深入讨论。

如何贡献代码或提出改进建议?

欢迎通过提交拉取请求来贡献代码,或通过提交问题来提出功能建议。请确保遵循项目的贡献指南,并在进行重大更改前先进行讨论。