Logo
新用户订阅 RPC,首月享 6.5 折优惠查看优惠
RPC Assistant

什么是 Solana 浏览器 API,如何使用它?

摘要

Solana 浏览器 API 允许你以编程方式查询链上数据,如交易、账户和区块,为自定义浏览器和分析仪表板提供支持。本文解释了核心 RPC 方法、如何选择公共端点与托管端点,以及如何构建简单的浏览器查询工作流。

快速决策指南:公共端点与托管 RPC

在编写任何代码之前,请决定要查询哪个 Solana RPC 端点。公共 api.mainnet-beta.solana.com 端点有速率限制且没有 SLA,因此适合偶尔手动检查,但不适合生产环境的浏览器功能。如果您正在构建仪表板、索引器或任何发出大量请求的工具,则需要一个托管 RPC 提供商,提供更高的吞吐量、WebSocket 支持和专用容量。

对于生产工作负载,OnFinality 在 https://solana.api.onfinality.io/public 提供托管 Solana RPC 端点,并在 wss://solana.api.onfinality.io/public-ws 提供 WebSocket 支持。您还可以配置专用节点以获得专属容量。查看 RPC 定价 页面了解计划详情,以及支持的网络页面获取完整列表。

如果您只是手动探索链,Solana 浏览器 是无需编写代码即可检查交易和账户的最简单方式。但如果您想构建自己的浏览器或将链上数据集成到您的应用中,则需要 RPC API。

什么是 Solana 浏览器 API?

Solana 浏览器 API 是一组 JSON-RPC 方法,允许您以编程方式检索链上数据。无需点击网页浏览器,您可以使用 HTTP 或 WebSocket 请求查询相同的数据——交易、账户、区块、代币余额。这是自定义浏览器、分析仪表板、投资组合跟踪器和后端服务的基础。

Solana RPC API 提供了读取网络状态、发送交易、模拟执行以及订阅实时更新的方法。用于浏览器类功能的最常见方法有:

  • getBlock – 按槽号检索区块,包括交易和奖励。
  • getTransaction – 按签名获取交易,支持解析或原始 JSON。
  • getAccountInfo – 获取账户的数据、lamports 和所有者。
  • getBalance – 获取地址的 SOL 余额。
  • getTokenAccountsByOwner – 列出由地址拥有的代币账户。
  • getSignaturesForAddress – 获取地址的近期交易签名。
  • getLatestBlockhash – 获取当前区块哈希以构建交易。

这些方法直接映射到区块浏览器中看到的内容。例如,当您在 Solscan 上打开一笔交易时,浏览器在后台调用 getTransaction。

构建浏览器的关键 RPC 方法

让我们通过具体示例来看最常用的方法。您可以使用 curl 或任何 HTTP 客户端测试这些方法。

获取账户信息

要获取账户(例如钱包或程序)的数据,请使用 getAccountInfo。响应包括账户的 lamport 余额、所有者程序和原始数据。

curl https://solana.api.onfinality.io/public \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getAccountInfo",
    "params": [
      "GgPpTKg78vmzgvPpNsKKBf5WJyNTfXCyhLNQ4TfFhNiT",
      {"encoding": "jsonParsed"}
    ]
  }'

获取地址的近期交易

要列出地址的近期交易签名,请使用 getSignaturesForAddress。这是浏览器交易历史页面使用的。

curl https://solana.api.onfinality.io/public \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getSignaturesForAddress",
    "params": [
      "GgPpTKg78vmzgvPpNsKKBf5WJyNTfXCyhLNQ4TfFhNiT",
      {"limit": 5}
    ]
  }'

获取交易详情

获得签名后,使用 getTransaction 获取完整交易详情。使用 "encoding": "jsonParsed" 获取可读的指令数据。

curl https://solana.api.onfinality.io/public \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getTransaction",
    "params": [
      "5Uu3mQyUH...",
      {"encoding": "jsonParsed"}
    ]
  }'

获取代币余额

对于代币持有量,使用 getTokenAccountsByOwner。这将返回地址拥有的所有代币账户,包括铸币厂和余额。

curl https://solana.api.onfinality.io/public \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getTokenAccountsByOwner",
    "params": [
      "GgPpTKg78vmzgvPpNsKKBf5WJyNTfXCyhLNQ4TfFhNiT",
      {"programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},
      {"encoding": "jsonParsed"}
    ]
  }'

使用 WebSocket 进行实时更新

如果您想要实时更新——例如,监控新交易或账户变化——请使用 WebSocket 端点。Solana 的 accountSubscribe 方法允许您监听账户的变化。

const ws = new WebSocket("wss://solana.api.onfinality.io/public-ws");

ws.onopen = () => {
  ws.send(JSON.stringify({
    jsonrpc: "2.0",
    id: 1,
    method: "accountSubscribe",
    params: [
      "GgPpTKg78vmzgvPpNsKKBf5WJyNTfXCyhLNQ4TfFhNiT",
      {"encoding": "base64", "commitment": "finalized"}
    ]
  }));
};

ws.onmessage = (event) => {
  console.log(JSON.parse(event.data));
};

WebSocket 连接非常适合实时仪表板,但它们需要支持持久连接的提供商。公共端点通常限制 WebSocket 使用,因此建议在生产环境中使用托管提供商。

比较浏览器数据源

构建浏览器时,您有几种获取链上数据的选项。下表比较了主要方法。

数据源最适合限制
公共 RPC 端点手动检查、原型开发速率限制、无 SLA、无 WebSocket 保证
托管 RPC 提供商生产应用、中等流量需要 API 密钥或订阅
专用节点高吞吐量、自定义需求成本更高、运维开销
网页浏览器 UI人工浏览不可编程

对于大多数生产浏览器功能,托管 RPC 提供商在可靠性和成本之间提供了最佳平衡。如果您需要完全控制节点配置或有非常高的查询量,专用节点可能值得考虑。

常见陷阱及如何避免

构建浏览器 API 集成可能会遇到一些常见问题。以下是一些注意事项:

速率限制

公共端点会积极限制请求。如果您发送太多请求,您将收到 429 Too Many Requests 错误。使用具有更高限制的托管提供商,并在客户端实现退避。

承诺级别

Solana 交易分阶段处理:processed、confirmed 和 finalized。如果您在交易最终确定之前查询,可能会得到 null 或不完整的数据。始终在请求中指定承诺级别,对于浏览器显示,使用 finalized 以避免显示未确认的数据。

大响应

getTransaction 使用 jsonParsed 可能返回较大的负载,尤其是对于复杂交易。考虑使用 base64 编码原始数据并在客户端解析以减少带宽。

WebSocket 重连

WebSocket 连接可能会断开。实现具有指数退避的重连逻辑,以维持可靠的实时数据流。

生产就绪检查清单

在启动浏览器或分析工具之前,请检查以下清单:

  • 使用具有专用端点的托管 RPC 提供商进行生产。
  • 在所有查询中设置适当的承诺级别(confirmed 或 finalized)。
  • 在客户端实现速率限制和重试逻辑。
  • 使用 WebSocket 订阅进行实时更新,并处理重连。
  • 缓存频繁访问的数据(例如账户信息、区块数据)以减少 RPC 负载。
  • 监控 RPC 使用情况,并设置错误或延迟警报。

关键要点

  • Solana 浏览器 API 是链上数据的编程接口,使用 JSON-RPC 方法,如 getTransaction 和 getAccountInfo。
  • 公共端点适合测试,但不适合生产;使用像 OnFinality 这样的托管 RPC 提供商以获得可靠访问。
  • WebSocket 订阅支持实时更新,但需要支持持久连接的提供商。
  • 始终指定承诺级别并处理速率限制,以构建健壮的浏览器。

常见问题解答

区块浏览器和浏览器 API 有什么区别?

区块浏览器是一个以人类可读格式显示链上数据的 Web 应用程序。浏览器 API 是底层 RPC 接口,允许您以编程方式查询相同的数据。您可以在 API 之上构建自己的浏览器 UI。

我可以将公共 Solana RPC 端点用于生产吗?

公共端点有速率限制且没有 SLA,因此不建议用于生产。请使用托管 RPC 提供商或专用节点以获得可靠访问。

如何获取地址的交易历史?

使用 getSignaturesForAddress 方法获取近期交易签名,然后使用 getTransaction 获取每个签名的详细信息。请注意,此方法仅返回近期历史(最多约 10 分钟或几千笔交易),因此要获取完整历史,您需要索引器或归档节点。

Solana RPC 中的承诺级别是什么?

承诺级别决定了 RPC 返回交易或账户状态前需要确认的程度。processed 表示交易已收到,confirmed 表示交易已包含在区块中,finalized 表示区块已被集群确认。对于浏览器显示,使用 finalized 以避免显示未确认的数据。

OnFinality 是否支持 Solana 的 WebSocket?

是的,OnFinality 在 wss://solana.api.onfinality.io/public-ws 提供 Solana 的 WebSocket 端点。查看 Solana 网络页面 了解详情。

RPC 知识库

相关 RPC 内容

网络 RPCAvalanche

Crust Network 质押:GPoS 如何运作以及质押 CRU 前需要检查什么

Crust Network 是一个基于 Substrate 的 layer-1 区块链,提供去中心化的 IPFS 存储。其 GPoS(担保权益证明)共识将质押权力与存储资源挂钩,因此验证人和担保人质押 CRU 来保护网络安全并获得奖励。本文解释了质押如何运作、在选择验证人或提供商之前需要评估什么,以...

网络 RPCFantom

Fantom API: Methods, Endpoints, and How to Start Building

The Fantom API provides JSON-RPC methods for interacting with the Fantom Opera blockchain, covering balances, transactions, event logs, gas estimation...

RPC 提供商选择Solana

QuickNode WebSocket Solana:开发者应该比较什么

QuickNode WebSocket Solana 是团队在将实时 Solana 订阅(账户变更、日志、slot 和签名)接入交易机器人、索引器或仪表板时常见的搜索。真正的决策不仅仅在于教程中出现的是哪个提供商名称,而在于你选择的 WebSocket 端点能否维持长连接、在重连后存活,并与你的 H...

网络 RPCSolana

什么是 Solana 的 RPC?如何选择合适的端点?

Solana RPC 端点让您的 dApp 读取链上状态、提交交易并订阅实时更新。本指南解释 Solana RPC 如何工作、如何连接公共和专用端点,以及在生产环境选择基础设施时应评估哪些因素。...

网络 RPCGnosis

什么是 Gnosis Chain RPC,如何选择合适的端点?

Gnosis Chain RPC 端点允许开发者通过 JSON-RPC 调用与 Gnosis Chain 网络交互。本文介绍了链设置、如何评估提供商以及在生产 dApp 中选择基础设施时应避免的常见陷阱。...

网络 RPCSolana

solana.io:开发者连接 Solana 真正需要什么

solana.io 并不是你需要的 Solana RPC 端点或开发者门户。Solana 网络通过 JSON-RPC 端点访问,实际问题是你的应用应该指向哪个端点。本文解释了域名混淆,展示了真实的 Solana mainnet RPC 和 WebSocket URL,并帮助你决定是使用公共端点还是专...

永远不用担心基础设施

OnFinality 消除了 DevOps 的繁重工作,让您能够更聪明、更快地构建。

开始