npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@okx-dex/okx-dex-sdk

v1.0.17

Published

OKX DEX SDK

Downloads

4,129

Readme

OKX DEX SDK

npm version

A comprehensive TypeScript SDK for interacting with OKX DEX across multiple blockchain networks including EVM-compatible chains, Solana, Sui, TON, and TRON.

Features

Core Trading Functionality

  • Multi-chain token swaps - Execute swaps across 6+ blockchain networks
  • Real-time quotes - Get accurate pricing and route information
  • Token approvals - Automated ERC-20 token approval handling
  • Liquidity data - Access DEX liquidity sources and routing information

Advanced Features

  • Transaction broadcasting - Direct transaction submission through OKX infrastructure with MEV protection
  • Gas estimation - Accurate gas limit calculation using onchain data
  • Transaction simulation - Pre-execution validation and risk assessment
  • Order tracking - Real-time transaction status monitoring
  • Slippage protection - Configurable slippage tolerance

Developer Experience

  • Full TypeScript support - Complete type safety and IntelliSense
  • Built-in retry logic - Automatic retries with exponential backoff
  • Comprehensive error handling - Detailed error messages and status codes
  • Extensive examples - Ready-to-use code samples for all chains

Installation

npm install @okx-dex/okx-dex-sdk
# or
yarn add @okx-dex/okx-dex-sdk
# or
pnpm add @okx-dex/okx-dex-sdk

Supported Networks

| Network | Chain ID | Status | Features | |---------|----------|--------|----------| | Major EVM Chains | | | | | Ethereum | 1 | ✅ | Swap, Quote, Approve, Broadcast | | Base | 8453 | ✅ | Swap, Quote, Approve, Broadcast | | Polygon | 137 | ✅ | Swap, Quote, Approve, Broadcast | | Sonic | 146 | ✅ | Swap, Quote, Approve, Broadcast | | Avalanche | 43114 | ✅ | Swap, Quote, Approve, Broadcast | | BSC | 56 | ✅ | Swap, Quote, Approve, Broadcast | | Arbitrum | 42161 | ✅ | Swap, Quote, Approve, Broadcast | | Optimism | 10 | ✅ | Swap, Quote, Approve, Broadcast | | Layer 2 & Scaling | | | | | Polygon zkEVM | 1101 | ✅ | Swap, Quote, Approve, Broadcast | | zkSync Era | 324 | ✅ | Swap, Quote, Approve, Broadcast | | Linea | 59144 | ✅ | Swap, Quote, Approve, Broadcast | | Scroll | 534352 | ✅ | Swap, Quote, Approve, Broadcast | | Mantle | 5000 | ✅ | Swap, Quote, Approve, Broadcast | | Blast | 81457 | ✅ | Swap, Quote, Approve, Broadcast | | Other EVM Chains | | | | | Fantom | 250 | ✅ | Swap, Quote, Approve, Broadcast | | Gnosis | 100 | ✅ | Swap, Quote, Approve, Broadcast | | X Layer | 196 | ✅ | Swap, Quote, Approve, Broadcast | | Manta Pacific | 169 | ✅ | Swap, Quote, Approve, Broadcast | | Metis | 1088 | ✅ | Swap, Quote, Approve, Broadcast | | Cronos | 25 | ✅ | Swap, Quote, Approve, Broadcast | | Conflux | 1030 | ✅ | Swap, Quote, Approve, Broadcast | | Zeta Chain | 7000 | ✅ | Swap, Quote, Approve, Broadcast | | OKT Chain | 66 | ✅ | Swap, Quote, Approve, Broadcast | | Non-EVM Chains | | | | | Solana | 501 | ✅ | Swap, Quote, Broadcast | | Sui | 784 | ✅ | Swap, Quote, Broadcast | | TON | 607 | ✅ | Swap, Quote | | TRON | 195 | ✅ | Swap, Quote |

Configuration

Set up your environment variables in a .env file:

# OKX API Credentials (Required)
OKX_API_KEY=your_api_key
OKX_SECRET_KEY=your_secret_key
OKX_API_PASSPHRASE=your_passphrase
OKX_PROJECT_ID=your_project_id

# EVM Configuration (for Ethereum, Base, Polygon, etc.)
EVM_RPC_URL=https://mainnet.base.org
EVM_WALLET_ADDRESS=0x...
EVM_PRIVATE_KEY=0x...

# Solana Configuration
SOLANA_RPC_URL=https://api.mainnet-beta.solana.com
SOLANA_WALLET_ADDRESS=...
SOLANA_PRIVATE_KEY=...

# Sui Configuration
SUI_RPC_URL=https://sui-mainnet.blockvision.org
SUI_WALLET_ADDRESS=0x...
SUI_PRIVATE_KEY=...

Quick Start

Initialize the Client

import { OKXDexClient } from '@okx-dex/okx-dex-sdk';
import { createWallet } from '@okx-dex/okx-dex-sdk/core/solana-wallet';
import { createEVMWallet } from '@okx-dex/okx-dex-sdk/core/evm-wallet';
import { ethers } from 'ethers';
import 'dotenv/config';

// Create wallet instances
const provider = new ethers.JsonRpcProvider(process.env.EVM_RPC_URL!);
const evmWallet = createEVMWallet(process.env.EVM_PRIVATE_KEY!, provider);

// For Solana - create wallet instance (implementation may vary)
const connection = new Connection(process.env.SOLANA_RPC_URL!);
const solanaWallet = createWallet(process.env.SOLANA_PRIVATE_KEY!, connection);


// Multi-chain client initialization
const client = new OKXDexClient({
    apiKey: process.env.OKX_API_KEY!,
    secretKey: process.env.OKX_SECRET_KEY!,
    apiPassphrase: process.env.OKX_API_PASSPHRASE!,
    projectId: process.env.OKX_PROJECT_ID!,
    
    // EVM configuration (Ethereum, Base, Polygon, etc.)
    evm: {
        wallet: evmWallet
    },
    
    // Solana configuration
    solana: {
        wallet: solanaWallet
    }
    sui: {
        privateKey: process.env.SUI_PRIVATE_KEY!,
        walletAddress: process.env.SUI_WALLET_ADDRESS!,
        connection: {
            rpcUrl: suiRpcUrl
        }
        
});

Basic Usage Examples

Token Addresses (Base Chain)

const BASE_TOKENS = {
    ETH: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE', // Native ETH
    USDC: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
    WETH: '0x4200000000000000000000000000000000000006'
};

Get Quote

const quote = await client.dex.getQuote({
    chainId: '8453',  // Base Chain
    fromTokenAddress: BASE_TOKENS.ETH,
    toTokenAddress: BASE_TOKENS.USDC,
    amount: '1000000000000000000',  // 1 ETH in wei
    slippage: '0.005'     // 0.5%
});

console.log(`Quote: ${quote.data[0].fromToken.tokenSymbol} → ${quote.data[0].toToken.tokenSymbol}`);
console.log(`Rate: ${quote.data[0].toTokenAmount} USDC for 1 ETH`);
console.log(`Price Impact: ${quote.data[0].priceImpactPercentage}%`);

Token Approval (ERC-20 tokens only)

// Not needed for native ETH, only for ERC-20 tokens
const approval = await client.dex.executeApproval({
    chainId: '8453',
    tokenContractAddress: BASE_TOKENS.USDC,
    approveAmount: '1000000' // 1 USDC (6 decimals)
});
console.log(`Approval tx: ${approval.transactionHash}`);

Execute Swap

const swap = await client.dex.executeSwap({
    chainId: '8453',        // Base Chain
    fromTokenAddress: BASE_TOKENS.ETH,
    toTokenAddress: BASE_TOKENS.USDC,
    amount: '100000000000000000', // 0.1 ETH in wei
    slippage: '0.005',        // 0.5%
    userWalletAddress: evmWallet.address
});

console.log(`Swap completed: ${swap.transactionId}`);
console.log(`Explorer: ${swap.explorerUrl}`);

Token Addresses

const SOLANA_TOKENS = {
    SOL: 'So11111111111111111111111111111111111111112', // Native SOL
    USDC: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
    USDT: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB'
};

Get Quote

const quote = await client.dex.getQuote({
    chainId: '501',         // Solana mainnet
    fromTokenAddress: SOLANA_TOKENS.SOL,
    toTokenAddress: SOLANA_TOKENS.USDC,
    amount: '1000000000',   // 1 SOL (9 decimals)
    slippage: '0.005'         // 0.5%
});

console.log(`Quote: 1 SOL → ${quote.data[0].toTokenAmount} USDC`);
console.log(`Price Impact: ${quote.data[0].priceImpactPercentage}%`);

Execute Swap

const swap = await client.dex.executeSwap({
    chainId: '501',
    fromTokenAddress: SOLANA_TOKENS.SOL,
    toTokenAddress: SOLANA_TOKENS.USDC,
    amount: '500000000',    // 0.5 SOL
    slippage: '0.005',
    userWalletAddress: solanaWallet.address
});

console.log(`Swap completed: ${swap.transactionId}`);
console.log(`Explorer: ${swap.explorerUrl}`);

Token Addresses

const SUI_TOKENS = {
    SUI: '0x2::sui::SUI', // Native SUI
    USDC: '0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC'
};

Get Quote

const quote = await client.dex.getQuote({
    chainId: '784',         // Sui mainnet
    fromTokenAddress: SUI_TOKENS.SUI,
    toTokenAddress: SUI_TOKENS.USDC,
    amount: '1000000000',   // 1 SUI (9 decimals)
    slippage: '0.005'         // 0.5%
});

Execute Swap

const swap = await client.dex.executeSwap({
    chainId: '784',
    fromTokenAddress: SUI_TOKENS.SUI,
    toTokenAddress: SUI_TOKENS.USDC,
    amount: '500000000',    // 0.5 SUI
    slippage: '0.005',
    userWalletAddress: suiWallet.address
});

console.log(`Swap completed: ${swap.transactionId}`);
console.log(`Explorer: ${swap.explorerUrl}`);

Advanced Features

Onchain Gateway APIs

The SDK provides access to advanced trading infrastructure for developers with API access:

Transaction Broadcasting with MEV Protection

// Requires API registration and whitelist approval
const broadcastResult = await client.dex.broadcastTransaction({
    signedTx: signedTransaction.rawTransaction,
    chainIndex: '8453',     // Base Chain
    address: walletAddress,
    enableMevProtection: true  // MEV protection
});

console.log(`Order ID: ${broadcastResult.data[0].orderId}`);
console.log(`Transaction Hash: ${broadcastResult.data[0].txHash}`);

Gas Limit Estimation

const gasLimit = await client.dex.getGasLimit({
    chainId: '8453',
    fromAddress: walletAddress,
    toAddress: contractAddress,
    txAmount: '0',
    inputData: transactionData
});

Transaction Simulation

// Requires API registration and whitelist approval
const simulation = await client.dex.simulateTransaction({
    chainId: '8453',
    fromAddress: walletAddress,
    toAddress: contractAddress,
    txAmount: transactionValue,
    inputData: transactionData
});

console.log(`Gas used: ${simulation.gasUsed}`);
console.log(`Success: ${simulation.success}`);

Order Tracking

const orders = await client.dex.getTransactionOrders({
    orderId: 'your_order_id',
    chainIndex: '8453',
    address: walletAddress
});

console.log(`Status: ${orders.data[0].orders[0].txStatus}`);
console.log(`Transaction Hash: ${orders.data[0].orders[0].txHash}`);

Note: Transaction broadcasting and simulation features require API registration and whitelist approval for access. These methods provide enhanced reliability and monitoring capabilities for high-volume trading operations. Please reach out to [email protected] to request access.

Other Common Operations

Get Available Tokens

// Get all supported tokens for a chain
const tokens = await client.dex.getTokens('8453'); // Base Chain
console.log(`Supported tokens: ${tokens.data.length}`);

Check Liquidity Sources

// Get available DEX liquidity sources
const liquidity = await client.dex.getLiquidity('8453');
console.log('Available DEXs:', liquidity.data.map(dex => dex.name));

Get Chain Information

// Get chain configuration and router addresses
const chainInfo = await client.dex.getChainData('8453');
console.log(`Router address: ${chainInfo.data[0].dexTokenApproveAddress}`);

Raw Swap Data (for custom implementations)

// Get raw swap transaction data without execution
const swapData = await client.dex.getSwapData({
    chainId: '8453',
    fromTokenAddress: BASE_TOKENS.ETH,
    toTokenAddress: BASE_TOKENS.USDC,
    amount: '1000000000000000000',
    slippage: '0.005',
    userWalletAddress: walletAddress
});

// Use swapData.data[0].tx for custom transaction handling

Error Handling

The SDK includes comprehensive error handling with detailed error codes:

try {
    const swap = await client.dex.executeSwap({
        chainId: '8453',
        fromTokenAddress: BASE_TOKENS.ETH,
        toTokenAddress: BASE_TOKENS.USDC,
        amount: '1000000000000000000',
        slippage: '0.005',
        userWalletAddress: walletAddress
    });
} catch (error: any) {
    // Handle specific error cases
    if (error?.status === 429) {
        console.log('Rate limited, please try again later');
    } else if (error.message?.includes('Insufficient liquidity')) {
        console.log('Not enough liquidity for this trade');
    } else if (error.message?.includes('Insufficient balance')) {
        console.log('Wallet balance too low');
    } else if (error.message?.includes('Slippage too high')) {
        console.log('Price impact exceeds slippage tolerance');
    } else {
        console.error('Swap failed:', error.message);
        
        // Log additional error details for debugging
        if (error.details) {
            console.error('Error details:', error.details);
        }
    }
}

Common Error Scenarios

| Error Type | Description | Solution | |------------|-------------|----------| | Insufficient liquidity | Not enough liquidity for the requested trade size | Reduce trade amount or try different route | | Insufficient balance | Wallet doesn't have enough tokens | Check wallet balance and fund if needed | | Slippage too high | Price moved beyond acceptable range | Increase slippage tolerance or reduce trade size | | Rate limited (429) | Too many API requests | Implement exponential backoff retry logic | | Invalid token address | Token not supported on this chain | Verify token address for the specific chain | | Network error | RPC or network connectivity issues | Check network connection and RPC endpoint |

Examples and Testing

Running Examples

The SDK includes comprehensive examples for all supported chains:

# EVM examples (Base, Ethereum, Polygon, etc.)
npm run example:evm-quote          # Get price quotes
npm run example:evm-swap           # Execute swaps
npm run example:evm-approve        # Token approvals
npm run example:evm-broadcast      # Enterprise broadcasting

# Solana examples
npm run example:solana-quote       # Get SOL quotes
npm run example:solana-swap        # Execute SOL swaps

# Sui examples  
npm run example:sui-quote          # Get SUI quotes
npm run example:sui-swap           # Execute SUI swaps
npm run example:sui-broadcast      # Sui broadcasting

# TON and TRON examples
npm run example:ton-quote          # TON quotes
npm run example:tron-quote         # TRON quotes

Testing

# Run all tests
npm test

# Run chain-specific tests
npm test -- --testPathPattern=evm
npm test -- --testPathPattern=solana
npm test -- --testPathPattern=sui

# Run with coverage
npm run test:coverage

Advanced API Features

Developers with access to the Onchain Gateway API get additional capabilities:

  • MEV Protection - Front-running and sandwich attack protection
  • Priority Transaction Broadcasting - Faster transaction confirmation through OKX infrastructure
  • Advanced Analytics - Detailed transaction monitoring and reporting
  • Enhanced Reliability - Direct access to OKX's trading infrastructure

Access Requirements: These features require API registration and whitelist approval. Contact [email protected] to request access to the Onchain Gateway API.

License

This SDK is released under the MIT License.

By using this SDK, you agree to the fact that: OKX and its affiliates shall not be liable for any direct, indirect, incidental, special, consequential or exemplary damages as outlined in the Legal Disclaimer.