摘要
Sonic 是一个兼容 EVM 的第 1 层区块链,专为高吞吐量的 DeFi 应用而设计。要与 Sonic 交互,开发者需要一个可靠的 RPC 节点来处理 JSON-RPC 请求、WebSocket 订阅和归档数据查询。
本页介绍如何配置您的钱包或 dApp 以使用 Sonic RPC 端点,RPC 提供商应具备哪些条件,以及如何排查常见连接问题。无论您是在 Sonic 上构建,还是只需要一个可靠的端点,我们都会介绍要点。
快速开始:Sonic RPC 端点
如果您只需要一个 Sonic RPC 端点来开始构建,以下是 OnFinality 提供的公共端点:
https://sonic.api.onfinality.io/public
您可以使用此端点发送 JSON-RPC 请求,但对于生产环境的应用,您需要更可靠且可扩展的解决方案。OnFinality 提供专用 Sonic 节点和托管 RPC 服务,具有更高的速率限制、归档数据和 WebSocket 支持。
链参数一览
在连接 Sonic 之前,您需要正确的网络参数。以下是摘要:
| 参数 | 值 |
|---|---|
| 网络名称 | Sonic 主网 |
| 链 ID | 146 |
| 原生货币 | S (Sonic) |
| 区块浏览器 | https://sonicscan.org |
| 公共 RPC URL | https://sonic.api.onfinality.io/public |
这些设置对于配置钱包、dApp 和开发工具至关重要。
如何将 Sonic 添加到您的钱包
要与基于 Sonic 的 dApp 交互,您需要将网络添加到您的钱包(例如 MetaMask)。以下是分步指南:
- 打开您的钱包并导航到网络设置。
- 点击“添加网络”或“自定义 RPC”。
- 输入以下详细信息:
- 网络名称:Sonic 主网
- 新的 RPC URL:
https://sonic.api.onfinality.io/public - 链 ID:
146 - 货币符号:
S - 区块浏览器 URL:
https://sonicscan.org
- 保存网络并切换到该网络。
添加后,您可以查看您的 Sonic 余额并与 Sonic dApp 交互。
发起您的第一个 JSON-RPC 调用
要验证您的连接,您可以使用 curl 发起一个简单的 JSON-RPC 调用。例如,获取当前区块号:
curl https://sonic.api.onfinality.io/public \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
您应该会收到类似以下的响应:
{"jsonrpc":"2.0","result":"0x...","id":1}
result 是十六进制区块号。这确认了您的 RPC 端点正常工作。
使用 ethers.js 或 viem 使用 Sonic RPC
对于 JavaScript 开发者,您可以使用 ethers.js 或 viem 等流行库集成 Sonic RPC。以下是使用 ethers.js 的示例:
import { ethers } from "ethers";
const provider = new ethers.JsonRpcProvider("https://sonic.api.onfinality.io/public");
async function getBlockNumber() {
const blockNumber = await provider.getBlockNumber();
console.log("当前区块号:", blockNumber);
}
getBlockNumber();
使用 viem:
import { createPublicClient, http } from "viem";
const client = createPublicClient({
chain: {
id: 146,
name: "Sonic Mainnet",
network: "sonic",
nativeCurrency: { name: "Sonic", symbol: "S", decimals: 18 },
rpcUrls: { default: { http: ["https://sonic.api.onfinality.io/public"] } },
},
transport: http(),
});
const blockNumber = await client.getBlockNumber();
console.log("当前区块号:", blockNumber);
用于实时数据的 WebSocket 订阅
如果您的 dApp 需要实时更新(例如新区块、待处理交易),您将需要一个 WebSocket 端点。OnFinality 为 Sonic RPC 节点提供 WebSocket 支持。WebSocket URL 通常遵循以下模式:
wss://sonic.api.onfinality.io/public/ws
注意:确切的 WebSocket URL 可能有所不同。请查看 Sonic 网络页面 获取最新支持的传输方式。
以下是使用 ethers.js 订阅新区块头的示例:
import { ethers } from "ethers";
const provider = new ethers.WebSocketProvider("wss://sonic.api.onfinality.io/public/ws");
provider.on("block", (blockNumber) => {
console.log("新区块:", blockNumber);
});
选择合适的 Sonic RPC 提供商
在为 Sonic 选择 RPC 提供商时,请考虑以下因素:
| 因素 | 检查内容 | 重要性 |
|---|---|---|
| 速率限制 | 每秒请求数、每日配额 | 公共端点通常有严格限制,可能会限制您的 dApp |
| 归档数据 | 支持 eth_getLogs 和历史状态 | 分析、索引和调试所需 |
| WebSocket 支持 | 是否提供 wss 端点 | 对实时功能至关重要 |
| 专用节点 | 提供私有、隔离节点的选项 | 提供一致的性能,无干扰邻居 |
| 正常运行时间和可靠性 | 历史正常运行时间、冗余 | 停机可能会中断您的应用 |
OnFinality 同时提供共享公共 RPC和专用 Sonic 节点。专用节点让您完全控制基础设施,具有明确的速率限制和归档数据访问权限。
公共与专用 Sonic RPC 节点
对于开发和测试,公共 RPC 端点通常就足够了。然而,对于生产工作负载,您应考虑使用专用节点。以下是比较:
| 方面 | 公共 RPC | 专用节点 |
|---|---|---|
| 成本 | 免费或低成本 | 订阅制 |
| 速率限制 | 有,通常严格 | 无(或非常高) |
| 性能 | 共享,可变 | 一致,隔离 |
| 归档数据 | 通常不可用 | 可按需提供 |
| WebSocket | 可能受限 | 完全支持 |
| 控制 | 无 | 完全访问节点配置 |
如果您的 dApp 处理大量请求或需要历史数据,专用节点是更好的选择。
排查常见 Sonic RPC 问题
即使使用可靠的提供商,您也可能会遇到问题。以下是常见问题及解决方法:
1. 连接超时
如果您遇到超时,请检查:
- 您的网络连接
- RPC 端点 URL(确保正确)
- 您是否使用了正确的传输方式(HTTP 与 WebSocket)
2. 速率限制错误
公共端点经常返回 429 Too Many Requests。为避免此问题:
- 在客户端实现缓存
- 对高流量应用使用专用节点
- 考虑使用多个端点并启用故障转移
3. 错误的链 ID
确保您的钱包或 dApp 配置了正确的链 ID(146)。使用错误的链 ID 可能导致交易失败。
4. 缺少归档数据
如果您需要历史数据,请确保您的提供商支持归档请求。公共端点通常只提供最近的状态。
监控您的 Sonic RPC 节点
一旦您的 RPC 连接正常,您应该监控其健康状况。您可以使用脚本设置简单的健康检查:
#!/bin/bash
# 检查 RPC 端点是否响应
response=$(curl -s -o /dev/null -w "%{http_code}" -X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \
https://sonic.api.onfinality.io/public)
if [ "$response" -eq 200 ]; then
echo "RPC 健康"
else
echo "RPC 宕机"
fi
您可以定期运行此脚本以确保您的端点正常运行。
关键要点
- Sonic 是一个兼容 EVM 的第 1 层区块链,链 ID 为
146。 - 公共 RPC 端点是
https://sonic.api.onfinality.io/public。 - 对于生产环境,考虑使用专用 Sonic 节点以避免速率限制并获取归档数据。
- 始终验证您的链设置并使用正确的传输方式(HTTP/WebSocket)。
- 监控您的 RPC 端点以确保高可用性。
常见问题解答
问:Sonic RPC URL 是什么?
答:公共 RPC URL 是 https://sonic.api.onfinality.io/public。对于生产环境,您可能需要专用端点。
问:Sonic 链 ID 是什么?
答:链 ID 是 146。
问:OnFinality 是否支持 Sonic WebSocket? 答:是的,OnFinality 为 Sonic RPC 节点提供 WebSocket 支持。请查看 Sonic 网络页面 了解详情。
问:我可以获取 Sonic 的归档数据吗? 答:可以,OnFinality 上的专用 Sonic 节点可以配置归档数据。请联系我们获取更多信息。
问:如何在公共和专用 RPC 之间选择? 答:公共 RPC 适合开发,但对于高流量的生产应用,专用节点提供更好的性能和可靠性。