Solana付款网关交换问题

问题描述 投票:0回答:0
我正在solana

上开发付款网关,并且需要使用node.js进行编程swap代币。目前,我正在使用jupiterapi.进行测试。 所有功能都可以生成交易签名。但是,在此之后,交换未执行-tokens保持不变。我看不到任何错误,但交易没有通过。 const { Connection, Keypair, PublicKey, clusterApiUrl, LAMPORTS_PER_SOL, VersionedTransaction, } = require("@solana/web3.js"); const { getAssociatedTokenAddressSync, TOKEN_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID, } = require("@solana/spl-token"); const fetch = require("node-fetch"); // Ensure you have node-fetch installed const connection = new Connection(clusterApiUrl("mainnet-beta"), "confirmed"); const swapTokens = async (req, res) => { try { // **STEP 1: Get Best Quote** const inputMint = "So11111111111111111111111111111111111111112"; // SOL const outputMint = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"; // USDC const userPublicKey = new PublicKey("YOUR_WALLET_PUBLIC_KEY"); // Replace with actual user public key const amount = 0.000010; // Amount in SOL const solAmount = Math.floor(amount * 1e9); // Convert SOL to lamports const quoteResponse = await ( await fetch( `https://api.jup.ag/swap/v1/quote?inputMint=${inputMint}&outputMint=${outputMint}&amount=${solAmount}&slippageBps=50&restrictIntermediateTokens=true&swapMode=ExactIn` ) ).json(); console.log("Quote Response:", JSON.stringify(quoteResponse, null, 2)); // **STEP 2: Execute Swap** const swapResponse = await ( await fetch("https://api.jup.ag/swap/v1/swap", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ quoteResponse, userPublicKey: userPublicKey.toBase58(), }), }) ).json(); console.log("Swap Response:", swapResponse); // **STEP 3: Sign and Send Transaction** const transactionBase64 = swapResponse.swapTransaction; const transaction = VersionedTransaction.deserialize(Buffer.from(transactionBase64, "base64")); console.log("Deserialized Transaction:", transaction); const mainWallet = Keypair.fromSecretKey(Uint8Array.from(YOUR_SECRET_KEY)); // Replace with your private key transaction.sign([mainWallet]); const transactionBinary = transaction.serialize(); console.log("Serialized Transaction:", transactionBinary); const signature = await connection.sendRawTransaction(transactionBinary, { maxRetries: 2, skipPreflight: true, }); console.log("Transaction Signature:", signature); const confirmation = await connection.confirmTransaction({ signature }, "finalized"); console.log("Transaction Confirmation:", confirmation); if (confirmation.value.err) { console.log(`Transaction failed: ${JSON.stringify(confirmation.value.err)}\nhttps://solscan.io/tx/${signature}/`); } else { console.log(`Transaction successful: https://solscan.io/tx/${signature}/`); } res.status(200).json({ message: "Swap executed successfully", signature }); } catch (error) { console.error("Swap Error:", error); res.status(500).json({ message: "Swap failed: " + error.message }); } };

pass quotesponse.引用而不是完整的引号,并启用前飞行以确保交易正确执行 const swapTokens = async (req, res) => { try { const inputMint = "So11111111111111111111111111111111111111112"; // SOL const outputMint = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"; // USDC const userPublicKey = new PublicKey("YOUR_WALLET_PUBLIC_KEY"); // Replace const amount = 0.000010; const solAmount = Math.floor(amount * 1e9); const quoteResponse = await ( await fetch( `https://api.jup.ag/swap/v1/quote?inputMint=${inputMint}&outputMint=${outputMint}&amount=${solAmount}&slippageBps=50` ) ).json(); console.log("Quote Response:", quoteResponse); // **Extract only `quoteResponse.quote`** const swapResponse = await ( await fetch("https://api.jup.ag/swap/v1/swap", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ quoteResponse: quoteResponse.quote, // ✅ Only pass `quote` userPublicKey: userPublicKey.toBase58(), }), }) ).json(); console.log("Swap Response:", swapResponse); // Deserialize transaction const transactionBase64 = swapResponse.swapTransaction; const transaction = VersionedTransaction.deserialize(Buffer.from(transactionBase64, "base64")); console.log("Deserialized Transaction:", transaction); // Sign with the main wallet const mainWallet = Keypair.fromSecretKey(Uint8Array.from(YOUR_SECRET_KEY)); // Replace transaction.sign([mainWallet]); // Convert to binary const transactionBinary = Buffer.from(transaction.serialize()); // Send transaction const signature = await connection.sendRawTransaction(transactionBinary, { maxRetries: 2, skipPreflight: false, // Ensure preflight checks }); console.log("Transaction Signature:", signature); // Confirm transaction const confirmation = await connection.confirmTransaction(signature, "confirmed"); if (confirmation.value.err) { console.log(`Transaction failed: https://solscan.io/tx/${signature}`); } else { console.log(`Transaction successful: https://solscan.io/tx/${signature}`); } res.status(200).json({ message: "Swap executed successfully", signature }); } catch (error) { console.error("Swap Error:", error); res.status(500).json({ message: "Swap failed: " + error.message }); } };


node.js payment swap solana
© www.soinside.com 2019 - 2025. All rights reserved.