Rumah >hujung hadapan web >tutorial js >Panduan API OKX DEX: Membina Antara Muka Pertukaran Token Solana

Panduan API OKX DEX: Membina Antara Muka Pertukaran Token Solana

DDD
DDDasal
2024-12-19 13:43:09215semak imbas

OKX DEX API Guide: Building a Solana Token Swap Interface

Bersedia untuk menyepadukan pengagregatan DEX ke dalam DApp Solana anda? Tutorial ini menunjukkan kepada anda cara berinteraksi dengan API OKX DEX untuk melakukan pertukaran token pada rantaian Solana. Pelaksanaan anda akan menggunakan Web3.js dan OKX DEX API untuk mencipta pengendalian yang mantap bagi petikan dan pelaksanaan swap. Secara lalai, pelaksanaan ini menunjukkan:

  • Pertukaran rantaian tunggal: SOL kepada USDC pada Solana
  • Keupayaan rantaian silang: SOL kepada MATIC (Polygon)

Gambaran Keseluruhan Fail Utiliti API DEX

Tutorial ini memfokuskan pada pelaksanaan dexUtils.js, fail utiliti yang mengandungi semua fungsi yang diperlukan untuk berinteraksi dengan API OKX DEX pada Solana. Fail ini mengendalikan:

  • Konfigurasi rangkaian dan token
  • Pembinaan tajuk
  • Pembinaan titik akhir API dan panggilan
  • Pendapatan petikan
  • Pertukaran rantaian tunggal
  • Petikan rentas rantai

Prasyarat

Sebelum bermula, anda perlu:

  • Node.js dipasang (v16 atau lebih baru)
  • Pengetahuan asas pembangunan Solana
  • Alamat dompet Solana dan kunci peribadi
  • Kelayakan API OKX (Kunci API, Kunci Rahsia dan Frasa Laluan) daripada Portal Pembangun OKX
  • ID Projek daripada Portal Pembangun OKX
  • Git dipasang pada mesin anda
  • Kelayakan API RPC (Kunci API, titik akhir Solana khusus) daripada pembekal nod seperti Quicknode

Persediaan

Anda mempunyai dua pilihan untuk bermula:

Pilihan 1: Pembangunan Tempatan

  1. Klon repositori dan tukar ke cawangan 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. Pasang kebergantungan:
npm install
  1. Sediakan pembolehubah persekitaran anda:
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

Pilihan 2: Menggunakan Replit

  1. Fork the Replit project:
    OKX Solana Swap App

  2. Tambahkan pembolehubah persekitaran anda dalam tab Rahsia Replit (terletak dalam panel Alat):

    • Klik pada "Rahsia"
    • Tambahkan setiap pembolehubah persekitaran yang disenaraikan di atas
  3. Klik "Jalankan" untuk memulakan persekitaran pembangunan anda

Konfigurasi Awal

Mari kita sediakan konfigurasi kita untuk berinteraksi dengan 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";

Mendapat Sebut Harga Swap

Sebelum melaksanakan pertukaran, kita perlu mendapatkan sebut harga. Berikut ialah cara untuk melaksanakan fungsi petikan:

/**
 * 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];
}

Melaksanakan Transaksi

Berikut ialah pelaksanaan untuk melaksanakan transaksi swap pada 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;
    }
}

Pelaksanaan Komponen Bertindak balas

Komponen SolanaSwapTransaction menunjukkan cara melaksanakan panggilan API DEX dalam antara muka React:

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

Sumber Tambahan

  • Dokumentasi API OKX DEX
  • Dokumentasi Solana
  • Repositori Kod Sumber

Temui ini membantu? Jangan lupa untuk menyemak kod boilerplate dan dokumentasi yang dipautkan di atas. Sertai Komuniti OS OKX untuk berhubung dengan pembangun lain, dan ikuti Julian di Twitter untuk lebih banyak kandungan pembangunan Solana!


Kandungan ini disediakan untuk tujuan maklumat sahaja dan mungkin meliputi produk yang tidak tersedia di rantau anda. Ia mewakili pandangan pengarang dan ia tidak mewakili pandangan OKX. Ia tidak bertujuan untuk memberikan (i) nasihat pelaburan atau cadangan pelaburan; (ii) tawaran atau permintaan untuk membeli, menjual atau memegang aset digital, atau (iii) nasihat kewangan, perakaunan, undang-undang atau cukai. Pegangan aset digital, termasuk stablecoin dan NFT, melibatkan tahap risiko yang tinggi dan boleh berubah-ubah dengan banyaknya. Anda harus mempertimbangkan dengan teliti sama ada berdagang atau memegang aset digital sesuai untuk anda berdasarkan keadaan kewangan anda. Sila rujuk profesional undang-undang/cukai/pelaburan anda untuk pertanyaan tentang keadaan khusus anda. Maklumat (termasuk data pasaran dan maklumat statistik, jika ada) yang dipaparkan dalam siaran ini adalah untuk tujuan maklumat am sahaja. Walaupun semua penjagaan yang munasabah telah diambil dalam menyediakan data dan graf ini, tiada tanggungjawab atau liabiliti diterima untuk sebarang kesilapan fakta atau peninggalan yang dinyatakan di sini. Kedua-dua OKX Web3 Wallet dan OKX NFT Marketplace tertakluk kepada syarat perkhidmatan yang berasingan di www.okx.com.

© 2024 OKX. Artikel ini boleh diterbitkan semula atau diedarkan secara keseluruhannya, atau petikan 100 patah perkataan atau kurang daripada artikel ini boleh digunakan, dengan syarat penggunaan tersebut bukan komersial. Sebarang pengeluaran semula atau pengedaran keseluruhan artikel juga mesti menyatakan dengan jelas: "Artikel ini adalah © 2024 OKX dan digunakan dengan kebenaran." Petikan yang dibenarkan mesti memetik nama artikel dan menyertakan atribusi, contohnya "Sepadukan Widget OKX DEX dalam Hanya 30 Minit, Julian Martinez, © 2024 OKX." Tiada karya terbitan atau penggunaan lain artikel ini dibenarkan.

© 2024 OKX. Hak cipta terpelihara.

Atas ialah kandungan terperinci Panduan API OKX DEX: Membina Antara Muka Pertukaran Token Solana. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn