1.0.13 • Published 8 months ago

@okx-dex/okx-dex-sdk v1.0.13

Weekly downloads
-
License
MIT
Repository
github
Last release
8 months ago

OKX DEX SDK

npm version

A TypeScript SDK for interacting with OKX DEX across multiple chains (EVM, Solana, Sui).

Features

  • Execute token swaps on Solana
  • Get real-time quotes and liquidity info
  • Built-in retry mechanism and error handling
  • Full TypeScript support
  • Solana transaction handling and signing

Installation

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

Configuration

First, set up your environment variables in a .env file:

# OKX API Credentials
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
EVM_RPC_URL=your_evm_rpc_url
EVM_WALLET_ADDRESS=your_evm_wallet_address
EVM_PRIVATE_KEY=your_evm_private_key

# Solana Configuration
SOLANA_RPC_URL=your_solana_rpc_url
SOLANA_WALLET_ADDRESS=your_solana_wallet_address
SOLANA_PRIVATE_KEY=your_solana_private_key

# Sui Configuration
SUI_RPC_URL=your_sui_rpc_url
SUI_WALLET_ADDRESS=your_sui_wallet_address
SUI_PRIVATE_KEY=your_sui_private_key

Usage

Chain-Specific Examples

Initialize EVM Client

import { OKXDexClient } from '@okx-dex/okx-dex-sdk';
import 'dotenv/config';

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: {
        connection: {
            rpcUrl: process.env.EVM_RPC_URL!,
        },
        walletAddress: process.env.EVM_WALLET_ADDRESS!,
        privateKey: process.env.EVM_PRIVATE_KEY!,
    }
});

Common Base Chain Token Addresses

const TOKENS = {
    USDC: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
    WETH: '0x4200000000000000000000000000000000000006'
};

Get Quote (USDC → WETH)

const quote = await client.dex.getQuote({
    chainId: '8453',  // Base Chain
    fromTokenAddress: TOKENS.USDC,
    toTokenAddress: TOKENS.WETH,
    amount: '1000000',  // 1 USDC
    slippage: '0.5'     // 0.5%
});

Token Approval

const approval = await client.dex.executeApproval({
    chainId: '8453',
    tokenContractAddress: TOKENS.USDC,
    approveAmount: '1000000'
});

Execute Swap

const evmSwap = await client.dex.executeSwap({
    chainId: '8453',
    fromTokenAddress,
    toTokenAddress,
    amount: rawAmount,
    slippage: '0.5',
    userWalletAddress: process.env.EVM_WALLET_ADDRESS
});

Initialize Solana Client

import { OKXDexClient } from '@okx-dex/okx-dex-sdk';
import 'dotenv/config';

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!,
    solana: {
        connection: {
            rpcUrl: process.env.SOLANA_RPC_URL!,
            confirmTransactionInitialTimeout: 60000
        },
        walletAddress: process.env.SOLANA_WALLET_ADDRESS!,
        privateKey: process.env.SOLANA_PRIVATE_KEY!,
    }
});

Common Solana Token Addresses

const TOKENS = {
    SOL: 'So11111111111111111111111111111111111111112',
    USDC: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
    USDT: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB'
};

Get Quote (SOL → USDC)

const quote = await client.dex.getQuote({
    chainId: '501',
    fromTokenAddress: TOKENS.SOL,
    toTokenAddress: TOKENS.USDC,
    amount: '1000000000',  // 1 SOL (in lamports)
    slippage: '0.5'        // 0.5%
});

Execute Swap

const solanaSwap = await client.dex.executeSwap({
    chainId: '501',
    fromTokenAddress,
    toTokenAddress,
    amount: rawAmount,
    slippage: '0.5',
    userWalletAddress: process.env.SOLANA_WALLET_ADDRESS
});

Initialize Sui Client

import { OKXDexClient } from '@okx-dex/okx-dex-sdk';
import 'dotenv/config';

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!,
    sui: {
        connection: {
            rpcUrl: process.env.SUI_RPC_URL!,
        },
        walletAddress: process.env.SUI_WALLET_ADDRESS!,
        privateKey: process.env.SUI_PRIVATE_KEY!,
    }
});

Common Sui Token Addresses

const TOKENS = {
    SUI: '0x2::sui::SUI',
    USDC: '0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC'
};

Get Quote (SUI → USDC)

const quote = await client.dex.getQuote({
    chainId: '784',
    fromTokenAddress: TOKENS.SUI,
    toTokenAddress: TOKENS.USDC,
    amount: '1000000000',  // Amount in base units
    slippage: '0.1'        // 0.1%
});

Execute Swap

const suiSwap = await client.dex.executeSwap({
    chainId: '784',
    fromTokenAddress,
    toTokenAddress,
    amount: rawAmount,
    slippage: '0.5',
    userWalletAddress: process.env.SUI_WALLET_ADDRESS
});

Common Operations

Check Liquidity

const liquidity = await client.dex.getLiquidity(chainId);

Get Dex Router Address

const chainInfo = await client.dex.getChainData(chainId);

Error Handling

The SDK includes comprehensive error handling:

try {
    const quote = await client.dex.getQuote({...});
} catch (error: any) {
    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 {
        console.error('Error:', error.message);
    }
}

Testing

Run tests for specific chains:

# Run all tests
pnpm test

# Run chain-specific tests
pnpm test __tests__/evm-examples.test.ts
pnpm test __tests__/solana-examples.test.ts
pnpm test __tests__/sui-examples.test.ts

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.

1.0.13

8 months ago

1.0.12

8 months ago

1.0.11

10 months ago

1.0.10

10 months ago

1.0.9

10 months ago

1.0.8

10 months ago

1.0.7

11 months ago

1.0.6

11 months ago

1.0.5

11 months ago

1.0.4

11 months ago

1.0.3

11 months ago

1.0.2

11 months ago

1.0.1

11 months ago