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

Jupiter API交易确认超时问题求助(Node.js+Solana)

排查与解决Solana交易确认超时问题

一、验证Jupiter API返回的交易有效性

  • 调用Jupiter API获取交易后,立即对比返回的recentBlockhash与connection.getLatestBlockhash()的结果,若差距超过2个区块,重新请求Jupiter生成交易——旧blockhash会导致交易被网络拒绝,是超时的常见诱因。
  • 检查交易签名完整性:确保机器人钱包私钥正确签名交易,避免因签名无效导致交易无法上链。

二、更换高性能Solana RPC节点

免费公共节点(如https://api.mainnet-beta.solana.com)拥堵严重,直接导致交易确认延迟。建议更换付费RPC节点(如QuickNode、Alchemy的Solana节点),并配置合理的连接参数:

const connection = new Connection('https://your-paid-rpc-url.com', {
  httpHeaders: { 'Authorization': 'Bearer your-api-key' },
  timeout: 30000 // 30秒HTTP超时
});

三、优化交易确认逻辑

针对confirmTransaction的优化

显式设置确认级别与超时时间,同时在超时后额外查询签名状态,避免误判:

const confirmOptions = {
  commitment: 'confirmed',
  timeout: 60000 // 延长至60秒确认超时
};
try {
  const result = await connection.confirmTransaction(signature, confirmOptions);
  if (result.value.err) throw new Error(`交易失败: ${JSON.stringify(result.value.err)}`);
} catch (err) {
  if (err.message.includes('timeout')) {
    // 超时后二次校验,排除节点同步延迟
    const status = await connection.getSignatureStatus(signature, { searchTransactionHistory: true });
    if (status.value?.confirmationStatus === 'confirmed' || status.value?.confirmationStatus === 'finalized') {
      return true;
    }
  }
  throw err;
}

针对getSignatureStatus的轮询优化

控制轮询间隔与次数,避免RPC限流,同时增加最终历史查询:

async function waitForConfirmation(connection, signature, maxAttempts = 30, interval = 2000) {
  let attempts = 0;
  while (attempts < maxAttempts) {
    const status = await connection.getSignatureStatus(signature, { searchTransactionHistory: true });
    if (status.value) {
      if (status.value.err) throw new Error(`交易失败: ${JSON.stringify(status.value.err)}`);
      if (['confirmed', 'finalized'].includes(status.value.confirmationStatus)) return true;
    }
    attempts++;
    await new Promise(resolve => setTimeout(resolve, interval));
  }
  // 超时后最后一次历史查询
  const finalCheck = await connection.getSignatureStatus(signature, { searchTransactionHistory: true });
  if (finalCheck.value?.confirmationStatus === 'confirmed' || finalCheck.value?.confirmationStatus === 'finalized') {
    return true;
  }
  throw new Error('交易确认超时');
}

四、添加重试与幂等机制

  • 超时后先确认交易状态:若交易实际已上链,直接返回成功;若未上链,重新请求Jupiter生成新交易(旧blockhash已过期)并提交。
  • 记录Telegram请求ID或交易签名,避免重复兑换,确保操作幂等性。

五、调整Jupiter API请求参数

  • 合理设置slippageBps:建议设置为50-100bps(0.5%-1%),滑点过低会导致交易因价格波动被网络丢弃。
  • 校验destinationWallet地址正确性,避免因地址错误导致交易失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 21:52:38