DEX 집계를 Solana DApp에 통합할 준비가 되셨나요? 이 튜토리얼에서는 OKX DEX API와 상호작용하여 솔라나 블록체인에서 토큰 스왑을 수행하는 방법을 보여줍니다. 구현에서는 Web3.js 및 OKX DEX API를 사용하여 견적 및 스왑 실행을 강력하게 처리합니다. 기본적으로 이 구현은 다음을 보여줍니다.
이 튜토리얼은 Solana에서 OKX DEX API와 상호작용하는 데 필요한 모든 기능이 포함된 유틸리티 파일인 dexUtils.js를 구현하는 데 중점을 둡니다. 이 파일은 다음을 처리합니다.
시작하기 전에 다음이 필요합니다.
시작하는 데는 두 가지 옵션이 있습니다.
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 솔라나 스왑 앱
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 Wallet과 OKX NFT Marketplace에는 모두 www.okx.com의 별도 서비스 약관이 적용됩니다.
© 2024 OKX. 이 기사는 전체를 복제하거나 배포할 수 있으며, 비상업적인 용도로 사용하는 경우 이 기사의 100단어 이하의 발췌문을 사용할 수 있습니다. 전체 기사를 복제하거나 배포하려면 "이 기사는 © 2024 OKX이며 허가를 받아 사용됩니다."라는 문구도 눈에 띄게 명시해야 합니다. 허용되는 발췌문에는 기사 이름을 인용하고 속성을 포함해야 합니다(예: "단 30분 만에 OKX DEX 위젯 통합, Julian Martinez, © 2024 OKX"). 이 기사의 파생물이나 다른 용도는 허용되지 않습니다.
© 2024 OKX. 모든 권리 보유.
위 내용은 OKX DEX API 가이드: 솔라나 토큰 스왑 인터페이스 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!