You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:使用Jupiter API合并两笔Swap交易时遇「交易过大」错误

合并Jupiter API两笔Swap交易时触发「Transaction too large error」错误

操作流程:通过Jupiter API获取两笔Swap的报价,将报价转换为Swap指令后合并到同一交易中,代码示例如下:

// 合并两笔Swap指令到单交易
const combinedTx = new Transaction().add(...instruction1, ...instruction2);

const { blockhash: blockhash1 } = await connection.getLatestBlockhash();
combinedTx.recentBlockhash = blockhash1;
combinedTx.feePayer = wallet.publicKey;

// 签名并发送交易
const signaturetx = await sendAndConfirmTransaction(
  connection,
  combinedTx,
  [wallet],
  { commitment: "confirmed", preflightCommitment: "processed" }
);

解决办法

  • 拆分交易分开发送:Solana普通交易有严格的字节数上限(当前为1232字节),两笔Swap指令叠加大概率超出限制。直接分两次执行交易即可,先发送第一笔Swap并确认,再发送第二笔,无需强行打包到单交易中。
  • 改用版本化交易(Versioned Transactions):版本化交易支持更大的字节上限(最高10240字节),足够容纳多笔Swap指令。调整代码示例:
import { VersionedTransaction, TransactionMessage } from '@solana/web3.js';

// 合并两笔Swap的所有指令
const allInstructions = [...instruction1, ...instruction2];
// 编译为V0版本消息
const message = new TransactionMessage({
  payerKey: wallet.publicKey,
  recentBlockhash: blockhash1,
  instructions: allInstructions,
}).compileToV0Message();

// 创建版本化交易并签名
const combinedTx = new VersionedTransaction(message);
combinedTx.sign([wallet]);

// 发送并确认交易
const signature = await connection.sendTransaction(combinedTx, {
  commitment: "confirmed",
  preflightCommitment: "processed"
});
await connection.confirmTransaction(signature);
  • 优化Swap指令体积:调用Jupiter API获取报价时,选择路由更短的Swap路径以减少指令数量;同时检查是否存在重复的辅助指令(比如重复的SOL包装/解包操作),通过调整API参数(如wrapUnwrapSol)复用相关操作,降低总字节数。

内容的提问来源于stack exchange,提问作者ivan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 21:33:17