準備好將 DEX 聚合整合到您的 Solana DApp 中了嗎?本教學向您展示如何與 OKX DEX API 互動以在 Solana 區塊鏈上執行代幣交換。您的實作將使用 Web3.js 和 OKX DEX API 來建立強大的報價和掉期執行處理。預設情況下,此實作示範:
本教學重點介紹 dexUtils.js 的實現,這是一個實用程式文件,其中包含與 Solana 上的 OKX DEX API 互動所需的所有功能。該文件處理:
開始之前,您需要:
您有兩種開始選擇:
git clone https://github.com/Julian-dev28/okx-os-evm-swap-app.git cd okx-os-evm-swap-app git checkout solana-cross-chain-swap
npm install
REACT_APP_API_KEY=your_api_key REACT_APP_SECRET_KEY=your_secret_key REACT_APP_API_PASSPHRASE=your_passphrase REACT_APP_PROJECT_ID=your_project_id REACT_APP_USER_ADDRESS=your_wallet_address REACT_APP_PRIVATE_KEY=your_private_key
分岔 Replit 項目:
OKX Solana 兌換應用程式
在 Replit Secrets 標籤(位於「工具」面板中)中新增環境變數:
點選「執行」啟動您的開發環境
讓我們設定與 Solana 互動的配置:
import { Connection } from "@solana/web3.js"; import base58 from "bs58"; import cryptoJS from "crypto-js"; // Constants for tokens and chain export const NATIVE_SOL = "11111111111111111111111111111111"; export const WRAPPED_SOL = "So11111111111111111111111111111111111111112"; export const USDC_SOL = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"; export const SOLANA_CHAIN_ID = "501"; // Initialize Solana connection export const connection = new Connection("https://mainnet.helius-rpc.com/?api-key=<API_KEY>", { confirmTransactionInitialTimeout: 5000, wsEndpoint: "wss://mainnet.helius-rpc.com/?api-key=<API_KEY>", }); // Environment variables for API authentication const apiKey = process.env.REACT_APP_API_KEY; const secretKey = process.env.REACT_APP_SECRET_KEY; const apiPassphrase = process.env.REACT_APP_API_PASSPHRASE; const projectId = process.env.REACT_APP_PROJECT_ID; // Base URL for API requests const apiBaseUrl = "https://www.okx.com/api/v5/dex";
在執行交換之前,我們需要取得報價。以下是如何實現報價功能:
/** * Gets swap data and optimal route from the OKX DEX API * Note: Requires API credentials from OKX Developer Portal * * @param {Object} params * @param {string} params.chainId - "501" for Solana * @param {string} params.amount - Amount in lamports (1 SOL = 1e9 lamports) * @param {string} params.fromTokenAddress - Source token (e.g., NATIVE_SOL) * @param {string} params.toTokenAddress - Destination token (e.g., USDC_SOL) * @param {string} params.slippage - Slippage tolerance ("0.5" for 0.5%) * @param {string} params.userWalletAddress - Solana wallet address * @returns {Promise<Object>} Contains routerResult.toTokenAmount and transaction data */ export async function getSingleChainSwap(params) { if (!apiKey || !secretKey || !apiPassphrase || !projectId) { throw new Error("Missing API credentials"); } const timestamp = new Date().toISOString(); const requestPath = "/api/v5/dex/aggregator/swap"; const queryString = "?" + new URLSearchParams(params).toString(); const headers = getHeaders(timestamp, "GET", requestPath, queryString); console.log("Requesting swap quote with params:", params); const response = await fetch( `https://www.okx.com${requestPath}${queryString}`, { method: "GET", headers } ); const data = await response.json(); if (data.code !== "0") { throw new Error(`API Error: ${data.msg}`); } if (!data.data?.[0]?.routerResult?.toTokenAmount) { throw new Error("Invalid or missing output amount"); } return data.data[0]; }
這是在 Solana 上執行交換交易的實現:
/** * Executes a Solana transaction with retry logic and compute budget * @param {Object} txData - Transaction data from the API * @returns {Promise<Object>} Transaction result with explorer URL */ export async function executeTransaction(txData) { if (!userPrivateKey) { throw new Error("Private key not found"); } try { // Get recent blockhash for transaction validity const recentBlockHash = await connection.getLatestBlockhash(); const decodedTransaction = base58.decode(txData.data); // Create transaction object const tx = solanaWeb3.Transaction.from(decodedTransaction); tx.recentBlockhash = recentBlockHash.blockhash; // Create and add keypair for signing const feePayer = solanaWeb3.Keypair.fromSecretKey( base58.decode(userPrivateKey) ); tx.partialSign(feePayer); // Send transaction with retry options const txId = await connection.sendRawTransaction(tx.serialize(), { skipPreflight: false, maxRetries: 5 }); // Wait for confirmation const confirmation = await connection.confirmTransaction({ signature: txId, blockhash: recentBlockHash.blockhash, lastValidBlockHeight: recentBlockHash.lastValidBlockHeight }, 'confirmed'); return { success: true, transactionId: txId, explorerUrl: `https://solscan.io/tx/${txId}`, confirmation }; } catch (error) { console.error("Transaction failed:", error); throw error; } }
SolanaSwapTransaction 元件示範如何在 React 介面中實作 DEX API 呼叫:
git clone https://github.com/Julian-dev28/okx-os-evm-swap-app.git cd okx-os-evm-swap-app git checkout solana-cross-chain-swap
覺得這有幫助嗎?不要忘記查看上面連結的樣板程式碼和文件。加入 OKX OS 社群與其他開發者聯繫,並在 Twitter 上關注 Julian 以獲取更多 Solana 開發內容!
此內容僅供參考,可能涵蓋您所在地區不提供的產品。僅代表作者觀點,不代表OKX立場。它無意提供 (i) 投資建議或投資推薦; (ii) 購買、出售或持有數位資產的要約或招攬,或 (iii) 財務、會計、法律或稅務建議。包括穩定幣和 NFT 在內的數位資產持有量風險較高,且波動較大。您應該根據您的財務狀況仔細考慮交易或持有數位資產是否適合您。有關您具體情況的問題,請諮詢您的法律/稅務/投資專業人士。本文中出現的信息(包括市場數據和統計信息,如果有)僅供一般參考。儘管我們在準備這些數據和圖表時已採取了所有合理的謹慎措施,但對於此處表達的任何事實錯誤或遺漏,我們不承擔任何責任。 OKX Web3 錢包和 OKX NFT 市場均受 www.okx.com 上單獨的服務條款約束。
© 2024 OKX。本文可以全文複製或分發,也可以使用本文 100 字或更少的摘錄,前提是此類使用是非商業性的。 任何整篇文章的複製或散佈也必須在顯著位置註明:「本文版權所有© 2024 OKX,經許可使用。」允許的摘錄必須引用文章名稱並包含出處,例如「在短短30 分鐘內整合OKX DEX Widget,Julian Martinez,© 2024 OKX」。 不允許對本文進行衍生作品或其他用途。
© 2024 OKX。保留所有權利。
以上是OKX DEX API 指南:建立 Solana 代幣交換接口的詳細內容。更多資訊請關注PHP中文網其他相關文章!