UNPKG

@okx-dex/okx-dex-sdk

Version:
90 lines (89 loc) 3.52 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); // scripts/evm-simulation.ts const index_1 = require("../../index"); const web3_js_1 = require("@solana/web3.js"); const dotenv_1 = __importDefault(require("dotenv")); const wallet_1 = require("../../core/wallet"); dotenv_1.default.config(); async function main() { try { const connection = new web3_js_1.Connection(process.env.SOLANA_RPC_URL); const wallet = (0, wallet_1.createWallet)(process.env.SOLANA_PRIVATE_KEY, connection); const walletAddress = wallet.publicKey.toString(); 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 } }); // First get the swap data const swapData = await client.dex.getSwapData({ chainId: '501', fromTokenAddress: 'So11111111111111111111111111111111111111112', toTokenAddress: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', amount: '10000000', // 0.01 SOL in lamports slippage: '0.05', userWalletAddress: walletAddress, fromTokenReferrerWalletAddress: walletAddress, feePercent: '0.0001' }); console.log('Got swap data:', JSON.stringify(swapData, null, 2)); // Use the swap data to simulate the transaction const tx = swapData.data[0].tx; const routerResult = swapData.data[0].routerResult; if (!tx || !routerResult) { throw new Error('No transaction data received from swap'); } const params = { fromAddress: tx.from, toAddress: tx.to, chainIndex: '501', // Solana chain ID, txAmount: routerResult.fromTokenAmount, extJson: { inputData: tx.data }, gasPrice: tx.gasPrice, includeDebug: true }; console.log('Simulating transaction...'); // Add a 1 second delay const result = await client.dex.simulateTransaction(params); console.log('\nTransaction Summary:'); console.log(`Success: ${result.success}`); console.log(`Gas Used: ${result.gasUsed}`); if (result.error) { console.log(`\n❌ Transaction would fail! Reason: ${result.error}`); } else { console.log('\n✅ Transaction would succeed!'); } if (result.assetChanges.length > 0) { console.log('\nAsset Changes:'); result.assetChanges.forEach(asset => { console.log(`${asset.direction}: ${asset.amount} ${asset.symbol} (${asset.type})`); }); } if (result.risks.length > 0) { console.log('\n⚠️ Risks Detected:'); result.risks.forEach(risk => { console.log(`- ${risk.addressType}: ${risk.address}`); }); } if (result.logs) { console.log('\nDebug Trace:'); console.log(JSON.stringify(result.logs, null, 2)); } } catch (error) { console.error('Script failed:', error); process.exit(1); } } main();