>웹 프론트엔드 >JS 튜토리얼 >OKX DEX API 가이드: 솔라나 토큰 스왑 인터페이스 구축

OKX DEX API 가이드: 솔라나 토큰 스왑 인터페이스 구축

DDD
DDD원래의
2024-12-19 13:43:09255검색

OKX DEX API Guide: Building a Solana Token Swap Interface

DEX 집계를 Solana DApp에 통합할 준비가 되셨나요? 이 튜토리얼에서는 OKX DEX API와 상호작용하여 솔라나 블록체인에서 토큰 스왑을 수행하는 방법을 보여줍니다. 구현에서는 Web3.js 및 OKX DEX API를 사용하여 견적 및 스왑 실행을 강력하게 처리합니다. 기본적으로 이 구현은 다음을 보여줍니다.

  • 단일 체인 스왑: Solana에서 SOL을 USDC로
  • 크로스체인 기능: SOL에서 MATIC(Polygon)으로

DEX API 유틸리티 파일 개요

이 튜토리얼은 Solana에서 OKX DEX API와 상호작용하는 데 필요한 모든 기능이 포함된 유틸리티 파일인 dexUtils.js를 구현하는 데 중점을 둡니다. 이 파일은 다음을 처리합니다.

  • 네트워크 및 토큰 구성
  • 헤더 구성
  • API 엔드포인트 및 호출 구성
  • 견적 검색
  • 단일 체인 스왑
  • 크로스체인 인용문

전제 조건

시작하기 전에 다음이 필요합니다.

  • Node.js 설치(v16 이상)
  • 솔라나 개발 기본지식
  • 솔라나 지갑주소와 개인키
  • OKX 개발자 포털의 OKX API 자격 증명(API 키, 비밀 키 및 암호)
  • OKX 개발자 포털의 프로젝트 ID
  • 컴퓨터에 설치된 Git
  • Quicknode와 같은 노드 공급자의 RPC API 자격 증명(API 키, 전용 Solana 엔드포인트)

설정

시작하는 데는 두 가지 옵션이 있습니다.

옵션 1: 지역 개발

  1. 저장소를 복제하고 Solana 브랜치로 전환하세요:
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
  1. 종속성 설치:
npm install
  1. 환경 변수를 설정합니다.
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

옵션 2: Replit 사용

  1. Replit 프로젝트 포크:
    OKX 솔라나 스왑 앱

  2. Replit Secrets 탭(도구 패널에 있음)에서 환경 변수를 추가하세요.

    • '비밀'을 클릭하세요
    • 위에 나열된 각 환경 변수를 추가하세요
  3. 개발 환경을 시작하려면 "실행"을 클릭하세요

초기 구성

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;
    }
}

React 구성요소 구현

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 DEX API 문서
  • 솔라나 문서
  • 소스 코드 저장소

이 정보가 도움이 되었나요? 위에 링크된 상용구 코드와 문서를 확인하는 것을 잊지 마세요. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.