UNPKG

@okx-dex/okx-dex-sdk

Version:
282 lines (237 loc) 6.84 kB
# OKX DEX SDK [![npm version](https://img.shields.io/npm/v/@okx-dex/okx-dex-sdk.svg)](https://www.npmjs.com/package/@okx-dex/okx-dex-sdk) 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 ```bash 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: ```bash # 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 <details> <summary><b>EVM</b></summary> #### Initialize EVM Client ```typescript 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 ```typescript const TOKENS = { USDC: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', WETH: '0x4200000000000000000000000000000000000006' }; ``` #### Get Quote (USDC → WETH) ```typescript 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 ```typescript const approval = await client.dex.executeApproval({ chainId: '8453', tokenContractAddress: TOKENS.USDC, approveAmount: '1000000' }); ``` #### Execute Swap ```typescript const swapData = await client.dex.getSwapData({ chainId: '8453', fromTokenAddress: TOKENS.USDC, toTokenAddress: TOKENS.WETH, amount: '1000000', slippage: '0.5', userWalletAddress: process.env.EVM_WALLET_ADDRESS! }); ``` </details> <details> <summary><b>Solana</b></summary> #### Initialize Solana Client ```typescript 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 ```typescript const TOKENS = { SOL: 'So11111111111111111111111111111111111111112', USDC: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', USDT: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB' }; ``` #### Get Quote (SOL → USDC) ```typescript 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 ```typescript const swapData = await client.dex.getSwapData({ chainId: '501', fromTokenAddress: TOKENS.SOL, toTokenAddress: TOKENS.USDC, amount: '1000000000', autoSlippage: true, maxAutoSlippage: '1', userWalletAddress: process.env.SOLANA_WALLET_ADDRESS! }); ``` </details> <details> <summary><b>Sui</b></summary> #### Initialize Sui Client ```typescript 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 ```typescript const TOKENS = { SUI: '0x2::sui::SUI', USDC: '0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC' }; ``` #### Get Quote (SUI → USDC) ```typescript 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 ```typescript const swapData = await client.dex.getSwapData({ chainId: '784', fromTokenAddress: TOKENS.SUI, toTokenAddress: TOKENS.USDC, amount: '1000000000', autoSlippage: true, maxAutoSlippage: '1', userWalletAddress: process.env.SUI_WALLET_ADDRESS!, slippage: '0.1' }); ``` </details> ## Common Operations ### Check Liquidity ```typescript const liquidity = await client.dex.getLiquidity(chainId); ``` ### Get Dex Router Address ```typescript const chainInfo = await client.dex.getChainData(chainId); ``` ## Error Handling The SDK includes comprehensive error handling: ```typescript 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: ```bash # 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](LICENSE.md). 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](DISCLAIMER.md).