UNPKG

@okx-dex/okx-dex-sdk

Version:
108 lines (107 loc) 4.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); // src/examples/solana-swap.ts const index_1 = require("../../index"); const web3_js_1 = require("@solana/web3.js"); const wallet_1 = require("../../core/wallet"); require("dotenv/config"); // Validate environment variables const requiredEnvVars = [ 'OKX_API_KEY', 'OKX_SECRET_KEY', 'OKX_API_PASSPHRASE', 'OKX_PROJECT_ID', 'SOLANA_WALLET_ADDRESS', 'SOLANA_PRIVATE_KEY', 'SOLANA_RPC_URL' ]; for (const envVar of requiredEnvVars) { if (!process.env[envVar]) { throw new Error(`Missing required environment variable: ${envVar}`); } } async function main() { try { const args = process.argv.slice(2); if (args.length !== 3) { console.log('Usage: ts-node src/examples/solana-swap.ts <amount> <fromTokenAddress> <toTokenAddress>'); console.log('\nExamples:'); console.log(' # Swap 0.1 SOL to USDC'); console.log(' ts-node src/examples/solana-swap.ts 0.1 11111111111111111111111111111111 EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'); process.exit(1); } const [amount, fromTokenAddress, toTokenAddress] = args; const connection = new web3_js_1.Connection(process.env.SOLANA_RPC_URL); const wallet = (0, wallet_1.createWallet)(process.env.SOLANA_PRIVATE_KEY, connection); // Initialize client const client = new index_1.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: { wallet: wallet, computeUnits: 300000, maxRetries: 3 } }); // Get quote to fetch token information console.log("Getting token information..."); const quote = await client.dex.getQuote({ chainId: '501', fromTokenAddress, toTokenAddress, amount: '100000000', slippage: '0.005', }); const tokenInfo = { fromToken: { symbol: quote.data[0].fromToken.tokenSymbol, decimals: parseInt(quote.data[0].fromToken.decimal), price: quote.data[0].fromToken.tokenUnitPrice }, toToken: { symbol: quote.data[0].toToken.tokenSymbol, decimals: parseInt(quote.data[0].toToken.decimal), price: quote.data[0].toToken.tokenUnitPrice } }; // Convert amount to base units const rawAmount = (parseFloat(amount) * Math.pow(10, tokenInfo.fromToken.decimals)).toString(); console.log("\nSwap Details:"); console.log("--------------------"); console.log(`From: ${tokenInfo.fromToken.symbol}`); console.log(`To: ${tokenInfo.toToken.symbol}`); console.log(`Amount: ${amount} ${tokenInfo.fromToken.symbol}`); console.log(`Amount in base units: ${rawAmount}`); console.log(`Approximate USD value: $${(parseFloat(amount) * parseFloat(tokenInfo.fromToken.price)).toFixed(2)}`); // Execute the swap console.log("\nExecuting swap..."); const result = await client.dex.executeSwap({ chainId: '501', fromTokenAddress, toTokenAddress, amount: rawAmount, slippage: '0.005', userWalletAddress: wallet.publicKey.toString(), }); console.log("\nSwap completed successfully!"); console.log("Transaction ID:", result.transactionId); console.log("Explorer URL:", result.explorerUrl); if (result.details) { console.log("\nDetails:"); console.log(`Input: ${result.details.fromToken.amount} ${result.details.fromToken.symbol}`); console.log(`Output: ${result.details.toToken.amount} ${result.details.toToken.symbol}`); if (result.details.priceImpact) { console.log(`Price Impact: ${result.details.priceImpact}%`); } } } catch (error) { console.error("\nError:", error instanceof Error ? error.message : "Unknown error"); process.exit(1); } } if (require.main === module) { main(); }