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

什么是 JSON RPC Solana,如何使用它?

摘要

Solana 的 JSON-RPC API 是应用程序与网络交互的标准方式——查询账户、提交交易以及订阅实时更新。本文解释了核心方法、如何连接到端点,以及在 Solana 上构建时需避免的常见陷阱。

快速回答:什么是 Solana JSON-RPC?

Solana JSON-RPC 是一个 HTTP 和 WebSocket API,允许您的应用程序在 Solana 区块链上读写数据。它遵循 JSON-RPC 2.0 规范,即您发送一个包含 method 和 params 的 JSON 对象,节点返回 JSON 结果或错误。

大多数开发者将其用于三件事:

  • 查询状态 – 账户余额、代币持有量、交易详情和区块数据。
  • 发送交易 – 序列化并提交已签名的指令。
  • 订阅更新 – 账户变更、日志和插槽更新的实时通知。

如果您正在构建钱包、浏览器、交易机器人或任何需要实时 Solana 数据的 dApp,JSON-RPC 将是您使用的接口。

决策指南:公共端点与专用节点

在编写第一个请求之前,请决定哪种端点类型适合您的工作负载。该选择会影响可靠性、速率限制以及您需要管理的基础设施量。

工作负载公共端点专用节点
原型开发、黑客松✅ 良好过度
中等流量的生产 dApp⚠️ 可能但风险✅ 推荐
高频交易、索引器❌ 不适合✅ 必需
大量 getProgramAccounts 调用❌ 经常被限流✅ 更好的隔离
大规模 WebSocket 订阅⚠️ 连接有限✅ 专用连接

公共端点免费且便于测试。OnFinality 提供公共 Solana 端点 https://solana.api.onfinality.io/public 和 WebSocket wss://solana.api.onfinality.io/public-ws。然而,公共端点是共享的,因此它们可能会限制或阻止大量使用。

专用节点为您提供私有 RPC 端点,具有自己的速率限制和资源。当您需要一致的性能、存档数据或自定义配置时,它们是正确的选择。OnFinality 提供专用 Solana 节点,您可以在几分钟内启动。有关详细信息,请参阅 RPC 定价 和 支持的网络。

如果您不确定,请从公共端点开始进行开发,然后在主网启动之前迁移到专用节点。

您将实际使用的 Solana JSON-RPC 方法

Solana 的 RPC 有数十种方法,但您可能只会使用一小部分。以下是最常见的方法,按用途分组。

账户和状态查询

  • getBalance – 返回公钥的 SOL 余额。
  • getAccountInfo – 返回账户的数据、lamports、所有者以及可执行标志。
  • getTokenAccountsByOwner – 列出钱包拥有的代币账户。
  • getProgramAccounts – 获取程序拥有的所有账户(常用于索引)。

交易和区块数据

  • getTransaction – 通过签名检索交易,可选解析 JSON。
  • getBlock – 返回区块的交易和元数据。
  • getLatestBlockhash – 获取当前区块哈希,您需要它来签署交易。
  • sendTransaction – 向集群提交已签名的交易。

网络和集群信息

  • getVersion – 返回节点的软件版本。
  • getSlot – 获取当前插槽号。
  • getEpochInfo – 返回 epoch 和插槽详细信息。

WebSocket 订阅

  • accountSubscribe – 当账户数据更改时通知。
  • logsSubscribe – 流式传输程序或交易的日志。
  • slotSubscribe – 在新插槽时通知。

连接到 Solana RPC 端点

您可以使用任何 HTTP 客户端调用 Solana JSON-RPC。以下是一个基本的 curl 示例,用于获取最新的区块哈希:

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

响应:

{
  "jsonrpc": "2.0",
  "result": {
    "context": {
      "slot": 123456789
    },
    "value": {
      "blockhash": "5xYk...",
      "lastValidBlockHeight": 123456789
    }
  },
  "id": 1
}

对于 JavaScript,您可以使用官方的 @solana/web3.js 库,它封装了 RPC 调用。以下是如何连接并获取余额:

import { Connection, PublicKey } from '@solana/web3.js';

const connection = new Connection('https://solana.api.onfinality.io/public');
const publicKey = new PublicKey('YourPublicKeyHere');
const balance = await connection.getBalance(publicKey);
console.log('Balance in lamports:', balance);

对于 WebSocket 订阅,您可以使用 Connection 对象的订阅方法:

const subscriptionId = connection.onAccountChange(publicKey, (accountInfo) => {
  console.log('Account updated:', accountInfo);
});

常见的 JSON-RPC 错误及修复方法

Solana RPC 错误可能令人费解。以下是最常见的错误及其含义。

错误原因修复
-32002: Transaction simulation failed交易如果执行将会失败检查日志,使用 preflightCommitment 模拟
-32003: Transaction precompile verification failure无效的程序或指令验证程序 ID 和指令数据
-32004: Transaction signature verification failure签名无效确保您使用正确的密钥对签名
-32005: Blockhash not found区块哈希过期或无效获取新的区块哈希并重试
-32007: Transaction expired交易未及时确认增加 maxRetries 或使用更新的区块哈希
-32602: Invalid params参数格式错误检查方法预期的参数类型

调试技巧

  • 始终先模拟:在发送之前使用 simulateTransaction 捕获错误,而无需花费费用。
  • 检查承诺级别:对于关键操作使用 confirmed 或 finalized。
  • 使用浏览器:将交易签名粘贴到 Solana Explorer 以查看详细日志。
  • 启用日志:对于程序错误,订阅日志或使用 encoding: "jsonParsed" 的 getTransaction。

Solana RPC 生产就绪检查清单

当您迁移到生产环境时,请验证以下几点以避免停机。

  • 使用专用端点 – 公共端点对于生产环境不可靠。
  • 设置故障转移 – 有一个备用端点以防主端点失败。
  • 监控速率限制 – 跟踪您的使用情况并为峰值做好计划。
  • 处理 WebSocket 重连 – 实现自动重连逻辑。
  • 使用带重试的 getLatestBlockhash – 区块哈希很快过期。
  • 选择正确的承诺级别 – 对于大多数应用,confirmed 是一个好的默认值。
  • 需要存档数据? – 如果您需要历史状态,请确保您的提供商支持存档节点。

关键要点

  • Solana JSON-RPC 是在 Solana 上读写数据的标准 API。
  • 公共端点适合开发,但生产应用应使用专用节点。
  • 学习核心方法:getBalance、getAccountInfo、sendTransaction 和 getLatestBlockhash。
  • 使用 WebSocket 订阅获取实时更新。
  • 通过模拟交易和检查承诺级别来调试常见错误。

常见问题解答

Solana 上的 JSON-RPC 和 gRPC 有什么区别?

JSON-RPC 是标准的 HTTP/WebSocket API,而 gRPC 是一种用于流式数据的更新、更高效的协议。大多数应用程序使用 JSON-RPC;gRPC 用于高吞吐量索引器。

如何获取 Solana RPC 端点?

您可以使用公共端点,如 https://solana.api.onfinality.io/public,或通过 OnFinality 等提供商创建专用节点。有关选项,请参阅 Solana 网络页面。

使用的最佳承诺级别是什么?

对于大多数用例,confirmed 是速度和可靠性之间的良好平衡。仅在需要绝对确定性时使用 finalized。

我可以将 WebSocket 与 Solana RPC 一起使用吗?

是的,Solana 支持 WebSocket 订阅以获取实时更新。使用 wss:// 端点和诸如 accountSubscribe 之类的方法。

如何处理公共端点上的速率限制?

公共端点有限制。对于生产环境,请使用专用节点或提供更高限制的提供商。OnFinality 的 RPC 定价 页面有详细信息。

什么是区块哈希,为什么它会过期?

区块哈希是防止重放攻击的近期哈希。它在几个插槽后过期,因此您必须在每笔交易之前获取新的哈希。

如何调试失败的交易?

使用 simulateTransaction 在不发送的情况下查看错误。还可以通过浏览器或使用 encoding: "jsonParsed" 的 getTransaction 检查交易日志。

什么是 getProgramAccounts,为什么它很慢?

getProgramAccounts 返回程序拥有的所有账户。它可能很慢且资源密集,因此请谨慎使用,并考虑索引替代方案。

如何在共享节点和专用节点之间选择?

共享节点更便宜但有速率限制。专用节点提供更好的性能和隔离。评估您的流量和可靠性需求。

我在哪里可以找到 Solana RPC 文档?

官方 Solana 文档是一个好的开始。有关提供商特定的详细信息,请查看 OnFinality 的 Solana 网络页面。

RPC 知识库

相关 RPC 内容

RPC 提供商选择Solana

哪些 Solana RPC 提供商以其针对 DeFi 的增强 API 而闻名?

Solana 上的 DeFi 应用需要的不仅仅是基本的 JSON-RPC:它们依赖于增强的 API,如优先费用估算、代币账户索引和实时 WebSocket 流。本文介绍了在为 DeFi 工作负载选择 Solana RPC 提供商时应注意什么,以及如何评估 OnFinality 的托管 RPC 和专用...

RPC 提供商选择Efinity

无限Solana RPC节点:它意味着什么,何时需要?

无限Solana RPC节点移除了按请求的速率限制,让您的应用可以扩展而不会遇到请求上限。本文解释了无限访问的实际含义、如何评估提供商,以及何时专用节点是生产工作负载的正确选择。...

RPC 提供商选择Solana

你能推荐一个针对特定工作负载提供增强 API 的 Solana RPC 提供商吗?

可以。OnFinality 提供支持 HTTP 和 WebSocket 的 Solana RPC 端点,并为需要更可预测容量的团队提供专用节点选项。Solana 上的增强 API 访问通常不仅仅意味着基本的 JSON-RPC 端点:它包括 WebSocket 订阅、支持归档的历史查询,以及在不与整个...

RPC 提供商选择

Which RPC providers offer enhanced APIs specifically tailored for NFT data?

Several RPC providers now offer enhanced APIs that simplify NFT data access—including metadata, ownership, transfers, and spam filtering—without requi...

网络 RPCSolana

什么是 Solana 免费 API,如何使用它?

Solana 免费 API 让开发者无需支付节点基础设施费用即可读写 Solana 区块链。公共端点非常适合原型开发,但通常有速率限制和可靠性问题,可能影响生产应用。本指南介绍免费 Solana API 包含的内容、如何开始使用,以及何时迁移到托管或专用 RPC 提供商。...

RPC 提供商选择Polygon

专用Polygon节点:生产环境dApp的基础设施考量

了解何时需要为生产环境dApp使用专用Polygon节点,它与共享端点的对比,以及评估提供商时应考虑哪些标准。本文涵盖架构权衡、成本因素和运营考量。...

永远不用担心基础设施

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

开始