摘要
Starknet 是基于以太坊的 ZK-rollup,使用 STARK 证明实现可扩展性。要与 Starknet 交互,您需要一个 RPC 端点。本指南涵盖公共和私有 Starknet RPC 端点、如何选择提供商以及针对开发者的常见故障排除技巧。
Starknet RPC 决策检查清单
在集成 Starknet RPC 提供商之前,请考虑以下标准:
| 标准 | 检查内容 | 重要性 |
|---|---|---|
| 网络支持 | 主网、Sepolia 测试网 | 确保提供商支持您开发和生产所需的网络。 |
| 速率限制 | 每秒请求数 (RPS) 和每日上限 | 高流量 dApp 需要更高的限制以避免限流。 |
| 可靠性 | 运行时间历史、冗余 | 停机可能中断您的应用;选择具有可靠性的提供商。 |
| 延迟 | 节点的地理分布 | 较低的延迟可改善用户体验,尤其对于时间敏感的操作。 |
| 归档数据 | 访问历史状态 | 用于分析、浏览器和某些 dApp 功能。 |
| 定价模式 | 免费层、按需付费或专用节点 | 根据您的使用模式和预算匹配定价。 |
| API 兼容性 | 支持的 JSON-RPC 方法 | 验证提供商是否支持您的应用所需的方法。 |
| 安全性 | HTTPS、WebSocket 支持、隐私功能 | 保护传输中的数据,并在需要时考虑注重隐私的中继。 |
什么是 Starknet RPC?
Starknet RPC(远程过程调用)是与 Starknet 网络通信的标准接口。它允许钱包、dApp 和后端服务提交交易、查询账户余额、读取合约状态以及与智能合约交互。RPC 协议遵循 JSON-RPC 2.0 规范,并具有 Starknet API 规范中定义的 Starknet 特定方法。
Starknet 使用独特的账户抽象模型,其中每个账户都是一个智能合约。这意味着 RPC 交互通常涉及通过 starknet_call 和 starknet_sendTransaction 方法部署和调用合约。
Starknet RPC 端点
Starknet 提供公共和私有 RPC 端点。公共端点是免费的,但通常有速率限制,可能不适合生产环境。私有端点提供更高的限制、专用资源和更好的可靠性。
公共端点
https://public.1rpc.io/starknet(1RPC)https://starknet-rpc.publicnode.com(Allnodes)https://starknet.drpc.org(dRPC)https://rpc.starknet.lava.build(Lava)https://starknet.api.onfinality.io/public(OnFinality)
私有端点(需要 API 密钥)
https://starknet-mainnet.g.alchemy.com/v2/<api-key>(Alchemy)https://starknet-mainnet.infura.io/v3/<api-key>(Infura)https://starknet.api.onfinality.io/v1/<api-key>(OnFinality)
测试网 (Sepolia)
https://starknet-sepolia-rpc.publicnode.com(Allnodes)https://rpc.starknet-testnet.lava.build(Lava)https://starknet-sepolia.api.onfinality.io/public(OnFinality)
如何使用 Starknet RPC
要连接到 Starknet,您需要一个 RPC URL 和一个 JSON-RPC 客户端。以下是使用 curl 查询最新区块编号的示例。
curl https://starknet.api.onfinality.io/public \
-X POST \
-H "Content-Type: application/json" \
--data '{
"jsonrpc": "2.0",
"method": "starknet_blockNumber",
"params": [],
"id": 1
}'
对于 JavaScript(使用 ethers 或 starknet.js):
import { Provider } from 'starknet';
const provider = new Provider({
rpc: { nodeUrl: 'https://starknet.api.onfinality.io/public' }
});
const blockNumber = await provider.getBlockNumber();
console.log(blockNumber);
选择 Starknet RPC 提供商
选择提供商时,请考虑以下因素:
- 网络支持:确保提供商支持 Starknet 主网和测试网 (Sepolia)。
- 速率限制:免费层通常允许每秒 10-100 个请求。对于高流量 dApp,请寻找付费计划或专用节点。
- 可靠性:检查运行时间历史以及提供商是否跨多个数据中心提供冗余。
- 延迟:具有全球节点分布的提供商可以提供更低的延迟。
- 归档数据:一些提供商提供对历史状态的访问,这对于分析和浏览器至关重要。
- 定价:比较免费层、按需付费和专用节点定价。OnFinality 为 Starknet RPC 提供透明的定价。
有关 RPC 提供商的详细比较,请参阅我们的 选择 RPC 提供商指南。
常见陷阱和故障排除
1. 速率限制
公共端点通常有严格的速率限制。如果您收到 HTTP 429 错误,请考虑升级到私有端点或使用专用节点。
2. 错误的网络 ID
Starknet 主网链 ID 是 0x534e5f4d41494e (SN_MAIN)。Sepolia 测试网链 ID 是 0x534e5f5345504f4c4941 (SN_SEPOLIA)。请仔细检查您的配置。
3. 不支持的方法
并非所有提供商都支持每个 JSON-RPC 方法。例如,starknet_getStateUpdate 在某些公共端点上可能不可用。请查看提供商的文档。
4. WebSocket 连接
对于实时更新,请使用 WebSocket 端点。示例:
wss://starknet.api.onfinality.io/public/ws
5. 交易失败
Starknet 交易可能因费用不足、nonce 无效或合约错误而失败。使用 starknet_getTransactionReceipt 进行调试。
Starknet RPC 与其他网络的比较
Starknet 的 RPC 在以下几个方面与以太坊不同:
- 账户抽象:每个账户都是一个合约;交易通过
starknet_addInvokeTransaction调用。 - 费用模型:Starknet 使用单独的费用代币 (STRK) 和独特的费用计算方式。
- 出块时间:每 20-60 秒产生一个区块,比以太坊更快。
关键要点
- Starknet RPC 对于与 Starknet 网络交互至关重要。
- 根据网络支持、速率限制、可靠性和定价选择提供商。
- 公共端点适用于开发;私有端点推荐用于生产环境。
- 在部署到主网之前,始终在测试网上进行测试。
- OnFinality 提供可扩展的 Starknet RPC 端点,定价透明。查看我们的 支持的网络 和 定价 了解更多详情。
常见问题
Starknet RPC URL 是什么?
公共 Starknet 主网 RPC URL 包括 https://starknet.api.onfinality.io/public、https://public.1rpc.io/starknet 和 https://starknet.drpc.org。私有端点需要 API 密钥。
如何获取 Starknet RPC 端点?
您可以免费使用公共端点,或注册 OnFinality 等提供商以获取具有更高速率限制和专用支持的私有端点。
Starknet RPC 与 MetaMask 兼容吗?
不兼容。MetaMask 仅支持 EVM 兼容链。Starknet 使用不同的虚拟机 (Cairo VM),因此您需要 Starknet 兼容的钱包,如 Argent X 或 Braavos。
Starknet 主网和 Sepolia 测试网有什么区别?
主网是生产网络,使用真实资产。Sepolia 是用于开发和测试的测试网。两者有独立的 RPC 端点。
如何在公共和私有 RPC 之间选择?
对于原型设计和低流量应用,使用公共端点。对于高流量的生产 dApp,选择私有端点或专用节点以确保可靠性和性能。