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

使用Helius免费RPC查询Solana已确认交易提示“未找到”的问题

解决方案:Solana RPC查询交易返回“not found”但签名状态正常

1. 修正交易版本参数设置

Helius RPC对版本化交易的处理对MaxSupportedTransactionVersion参数敏感,若指定的版本与实际交易版本不匹配,会直接导致查询失败。

修改GetTransactionOpts,将版本参数设为nil,让RPC自动适配支持的交易版本:

out, err := solanaClient.GetTransaction(
    context.Background(),
    sig,
    &solanaRPC.GetTransactionOpts{
        MaxSupportedTransactionVersion: nil, // 移除指定版本,交由RPC自动处理
        Encoding:                       solana.EncodingBase64,
    },
)

如果确认目标交易是版本1的版本化交易,也可以明确指定版本号:

transactionVersion := uint64(1)
out, err := solanaClient.GetTransaction(
    context.Background(),
    sig,
    &solanaRPC.GetTransactionOpts{
        MaxSupportedTransactionVersion: &transactionVersion,
        Encoding:                       solana.EncodingBase64,
    },
)

2. 更换RPC端点测试

Helius免费节点存在数据同步延迟、部分交易未被索引的情况,换用其他公共RPC端点验证查询是否有效:

// 示例:切换到Solana官方主网公共端点
solanaClient, err := solana.NewClient("https://api.mainnet-beta.solana.com")
if err != nil {
    panic(err)
}

// 重新执行交易查询
out, err := solanaClient.GetTransaction(
    context.Background(),
    sig,
    &solanaRPC.GetTransactionOpts{
        MaxSupportedTransactionVersion: nil,
        Encoding:                       solana.EncodingBase64,
    },
)

3. 调整Commitment与Encoding参数

添加Commitment参数确保查询已最终确认的区块数据,同时尝试切换编码格式:

out, err := solanaClient.GetTransaction(
    context.Background(),
    sig,
    &solanaRPC.GetTransactionOpts{
        MaxSupportedTransactionVersion: nil,
        Encoding:                       solana.EncodingJsonParsed, // 改用JSON解析格式
        Commitment:                     solana.CommitmentFinalized, // 查询最终确认的区块
    },
)

4. 验证签名准确性

确保查询的交易签名无编码或复制错误,重新解析签名后再执行查询:

// 重新解析签名,避免原始sig存在格式问题
validSig := solana.MustSignatureFromBase58(sig.String())
out, err := solanaClient.GetTransaction(
    context.Background(),
    validSig,
    &solanaRPC.GetTransactionOpts{
        MaxSupportedTransactionVersion: nil,
        Encoding:                       solana.EncodingBase64,
    },
)

5. 检查Helius免费节点限制

Helius免费层对交易数据的保留时长、索引范围有明确限制,若目标交易是较旧的历史数据,免费节点可能无法提供查询。可尝试升级到Helius付费层,或更换支持全历史数据的RPC服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 15:08:16