ホームページ > ウェブフロントエンド > jsチュートリアル > OKX DEX API ガイド: Solana トークン スワップ インターフェイスの構築

OKX DEX API ガイド: Solana トークン スワップ インターフェイスの構築

DDD
リリース: 2024-12-19 13:43:09
オリジナル
236 人が閲覧しました

OKX DEX API Guide: Building a Solana Token Swap Interface

DEX アグリゲーションを Solana DApp に統合する準備はできましたか?このチュートリアルでは、OKX DEX API を操作して Solana ブロックチェーン上でトークン スワップを実行する方法を説明します。実装では Web3.js と OKX DEX API を使用して、引用符とスワップ実行の堅牢な処理を作成します。デフォルトでは、この実装は以下を示します:

  • シングルチェーンスワップ: Solana 上の SOL から USDC へ
  • クロスチェーン機能: SOL から MATIC (ポリゴン)

DEX API ユーティリティ ファイルの概要

このチュートリアルは、Solana で OKX DEX API と対話するために必要なすべての関数を含むユーティリティ ファイルである dexUtils.js の実装に焦点を当てています。このファイルは以下を処理します:

  • ネットワークとトークンの構成
  • ヘッダーの構築
  • API エンドポイントと呼び出しの構築
  • 見積もりの​​取得
  • シングルチェーンスワップ
  • クロスチェーンの引用

前提条件

始める前に以下が必要です:

  • Node.js がインストールされている (v16 以降)
  • Solana 開発の基礎知識
  • Solana ウォレットのアドレスと秘密鍵
  • OKX 開発者ポータルからの OKX API 認証情報 (API キー、秘密キー、およびパスフレーズ)
  • OKX 開発者ポータルからのプロジェクト ID
  • マシンにインストールされている Git
  • Quicknode などのノードプロバイダーからの RPC API 資格情報 (API キー、専用 Solana エンドポイント)

設定

開始するには 2 つのオプションがあります:

オプション 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: リプリットの使用

  1. Replit プロジェクトをフォークします:
    OKX Solana スワップ アプリ

  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 ドキュメント
  • Solana ドキュメント
  • ソースコードリポジトリ

これは役に立ちましたか?上記のリンクにある定型コードとドキュメントを必ずチェックしてください。 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 サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート