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 规范,即您发送一个包含 methodparams 的 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 捕获错误,而无需花费费用。
  • 检查承诺级别:对于关键操作使用 confirmedfinalized
  • 使用浏览器:将交易签名粘贴到 Solana Explorer 以查看详细日志。
  • 启用日志:对于程序错误,订阅日志或使用 encoding: "jsonParsed"getTransaction

Solana RPC 生产就绪检查清单

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

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

关键要点

  • Solana JSON-RPC 是在 Solana 上读写数据的标准 API。
  • 公共端点适合开发,但生产应用应使用专用节点。
  • 学习核心方法:getBalancegetAccountInfosendTransactiongetLatestBlockhash
  • 使用 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 内容

网络 RPCpeaq

什么是 peaq 主网 RPC 端点?

peaq 主网是一个基于 Substrate 构建、接入 Polkadot 生态的 EVM 兼容 Layer-1 区块链。其 RPC 允许钱包和应用读取链上数据、提交交易,并使用链 ID 3338 和原生 PEAQ 代币订阅事件。 本文介绍 peaq 主网链设置、JSON-RPC 示例、端点选择以及...

RPC 提供商选择Optimism

如何找到最可靠的Optimism RPC提供商

正在寻找最可靠的Optimism RPC提供商?可靠性不仅仅是标称的正常运行时间百分比。本指南涵盖关键指标,如延迟分布、同步健康度、归档和追踪API支持以及故障切换能力。使用决策清单客观比较提供商,避免导致生产中断的常见陷阱。...

测试网 RPCTON

如何连接到 TON 测试网?

TON 测试网是一个公共沙盒,用于构建和测试智能合约、钱包和 dApp,而不会冒主网资产的风险。本指南涵盖了关键端点、水龙头以及让测试网环境运行起来的实用步骤,还有如何为你的开发工作流选择可靠的 RPC 提供商。...

RPC 提供商选择Solana

什么让 Solana RPC 变快,以及如何为你的应用选择最快的端点?

Solana RPC 的速度不仅仅取决于原始吞吐量:地理距离、网络路径、硬件调优以及你调用的方法都会影响延迟。本文解释了决定 RPC 性能的关键因素,并提供了评估提供商的实用清单,以便你选择满足应用需求且不会过度付费的端点。...

网络 RPCxx network

什么是 xx network,开发者如何与之交互?

xx network 是一个抗量子、注重隐私的区块链,具有去中心化的混合网络(mixnet)。它基于 Substrate 链,并为开发者提供 RPC 端点。本文解释了该网络的架构、如何通过 RPC 连接,以及在选择基础设施以在 xx 上构建时需要考虑的事项。...

网络 RPCTON

什么是TON RPC节点,如何使用?

# 什么是TON RPC节点,如何使用? 开放网络(TON)是一个为高速、可扩展交易而设计的Layer-1区块链。要与TON区块链交互——无论是构建钱包、dApp还是分析工具——你都需要一个TON RPC节点。TON RPC节点充当网关,允许你的应用程序查询区块链数据并提交交易。本指南将解释什么是T...

永远不用担心基础设施

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

开始