DEX アグリゲーションを Solana DApp に統合する準備はできましたか?このチュートリアルでは、OKX DEX API を操作して Solana ブロックチェーン上でトークン スワップを実行する方法を説明します。実装では Web3.js と OKX DEX API を使用して、引用符とスワップ実行の堅牢な処理を作成します。デフォルトでは、この実装は以下を示します:
このチュートリアルは、Solana で OKX DEX API と対話するために必要なすべての関数を含むユーティリティ ファイルである dexUtils.js の実装に焦点を当てています。このファイルは以下を処理します:
始める前に以下が必要です:
開始するには 2 つのオプションがあります:
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 であり、許可を得て使用されています。」と目立つように明記する必要があります。 許可される抜粋では、記事名を引用し、帰属を含める必要があります。たとえば、「OKX DEX ウィジェットをわずか 30 分で統合、Julian Martinez、© 2024 OKX」などです。 この記事の二次的著作物やその他の使用は許可されません。
© 2024 OKX.無断転載を禁じます。
以上がOKX DEX API ガイド: Solana トークン スワップ インターフェイスの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。