快速参考
  • /v0/transactions - 解析单个或多个交易签名
  • /v0/addresses/{address}/transactions - 获取某个地址的交易历史
  • 使用 type 参数按交易类型进行筛选(例如,NFT_SALESWAPTRANSFER
重要限制
  • 在我们开发 V2 版本时,增强型交易 API V1 将不会更新
  • 我们仅解析与 NFT、Jupiter 和 SPL 相关的交易
  • 不要依赖这些解析器处理 DeFi 或非 NFT、Jupiter 和 SPL 的交易

概述

增强型交易 API 将复杂的 Solana 交易转换为人类可读的数据。您无需处理原始指令数据和账户列表,而是可以获得以下结构化信息:
  • 交易中发生了什么(转账、兑换、NFT 活动)
  • 涉及的账户
  • 转移了多少 SOL 或代币
  • 时间戳和其他元数据

快速入门

解析单个交易

通过单次 API 调用解析一个或多个交易签名或原始交易数据:
const parseTransaction = async () => {
  const url = "https://api.helius.xyz/v0/transactions/?api-key=YOUR_API_KEY";

  const response = await fetch(url, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      transactions: ["5rfFLBUp5YPr6rC2g1KBBW8LGZBcZ8Lvs7gKAdgrBjmQvFf6EKkgc5cpAQUTwGxDJbNqtLYkjV5vS5zVK4tb6JtP"],
    }),
  });

  const data = await response.json();
  console.log("Parsed transaction:", data);
};

parseTransaction();

API 参考

查看解析交易的详细文档

获取某个地址的交易历史

检索任意 Solana 地址的交易历史:
const fetchWalletTransactions = async () => {
  const walletAddress = "M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K"; // Replace with target wallet
  const url = `https://api.helius.xyz/v0/addresses/${walletAddress}/transactions?api-key=YOUR_API_KEY`;
  
  const response = await fetch(url);
  const transactions = await response.json();
  console.log("Wallet transactions:", transactions);
};

fetchWalletTransactions();

API 参考

查看交易历史的详细文档
处理不完整的交易集有时,由于数据检索过程中发生内部超时,历史端点可能会返回不完整的交易集。为解决此问题:
  1. 首先,调用 getSignaturesForAddress 获取一批交易签名
  2. 接着,使用 /v0/transactions 端点与接收到的签名一起使用
  3. 如果响应中缺少任何交易,可以重试获取这些特定交易

常见用例

完整分页示例

对于高交易量的地址,实现分页以获取所有交易:
const fetchAllTransactions = async () => {
  const walletAddress = "2k5AXX4guW9XwRQ1AKCpAuUqgWDpQpwFfpVFh3hnm2Ha"; // Replace with target wallet
  const baseUrl = `https://api.helius.xyz/v0/addresses/${walletAddress}/transactions?api-key=YOUR_API_KEY`;
  let url = baseUrl;
  let lastSignature = null;
  let allTransactions = [];
  
  while (true) {
    if (lastSignature) {
      url = baseUrl + `&before=${lastSignature}`;
    }
    
    const response = await fetch(url);
    
    // Check response status
    if (!response.ok) {
      console.error(`API error: ${response.status}`);
      break;
    }
    
    const transactions = await response.json();
    
    if (transactions && transactions.length > 0) {
      console.log(`Fetched batch of ${transactions.length} transactions`);
      allTransactions = [...allTransactions, ...transactions];
      lastSignature = transactions[transactions.length - 1].signature;
    } else {
      console.log(`Finished! Total transactions: ${allTransactions.length}`);
      break;
    }
  }
  
  return allTransactions;
};

按类型筛选交易

仅获取特定类型的交易,例如 NFT 销售:
const fetchNftSales = async () => {
  const tokenAddress = "GjUG1BATg5V4bdAr1csKys1XK9fmrbntgb1iV7rAkn94"; // NFT mint address
  const url = `https://api.helius.xyz/v0/addresses/${tokenAddress}/transactions?api-key=YOUR_API_KEY&type=NFT_SALE`;
  
  const response = await fetch(url);
  const nftSales = await response.json();
  console.log("NFT sale transactions:", nftSales);
};

API 参考

查询参数

参数描述默认值示例
limit返回的交易数量10&limit=25
before获取此签名之前的交易-&before=sig123...
until获取此签名之前的交易-&until=sig456...
type按交易类型筛选-&type=NFT_SALE
commitment承诺级别finalized&commitment=confirmed

响应示例

增强的交易响应包括带有人类可读描述的结构化数据:
{
  "description": "Transfer 0.1 SOL to FXvStt8aeQHMGKDgqaQ2HXWfJsXnqiKSoBEpHJahkuD",
  "type": "TRANSFER",
  "source": "SYSTEM_PROGRAM",
  "fee": 5000,
  "feePayer": "M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K",
  "signature": "5rfFLBUp5YPr6rC2g1KBBW8LGZBcZ8Lvs7gKAdgrBjmQvFf6EKkgc5cpAQUTwGxDJbNqtLYkjV5vS5zVK4tb6JtP",
  "slot": 171341028,
  "timestamp": 1674080473,
  "nativeTransfers": [
    {
      "fromUserAccount": "M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K",
      "toUserAccount": "FXvStt8aeQHMGKDgqaQ2HXWfJsXnqiKSoBEpHJahkuD",
      "amount": 100000000
    }
  ],
  "events": {
    "sol": {
      "from": "M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K",
      "to": "FXvStt8aeQHMGKDgqaQ2HXWfJsXnqiKSoBEpHJahkuD",
      "amount": 0.1
    }
  }
}

最佳实践

错误处理

为生产应用程序实施适当的错误处理和重试机制

速率限制

使用分页和缓存策略以避免触发速率限制

错误处理

始终在代码中实施适当的错误处理:
const fetchTransactions = async () => {
  try {
    const response = await fetch(url);
    
    if (!response.ok) {
      throw new Error(`API error: ${response.status}`);
    }
    
    const data = await response.json();
    return data;
  } catch (error) {
    console.error("Failed to fetch transactions:", error);
    // Implement retry logic or user-friendly error messages
  }
};

速率限制注意事项

为了避免在使用 API 时触发速率限制:
  • 对大型数据集实施分页
  • 在适当情况下缓存响应
  • 为重试添加指数退避机制
  • 对于高流量应用程序,考虑升级您的 API 计划
对于高流量应用程序,建议使用 Redis 或类似技术实现缓存层,以减少冗余的 API 调用。

有问题吗?

有关增强交易的常见问题,包括使用、身份验证、速率限制和故障排除,请访问我们的综合增强交易常见问题解答