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

Celo API 访问:链设置、方法与故障模式

摘要

Celo API 是一个 JSON-RPC 接口,允许你的应用程序读取链上状态、提交交易并订阅 Celo 主网上的事件。你通过 HTTPS 端点使用标准 EVM 方法(如 eth_blockNumber、eth_getBalance 和 eth_call)以及 Celo 特有的费用货币和移动友好型 Gas 抽象调用来连接它。本文介绍了你需要的链设置、如何发送第一个请求以及如何诊断开发者最常遇到的故障。它还解释了何时共享公共端点就足够,以及何时专用 Celo 节点更适合生产工作负载。

Celo API 是你的应用程序用来与 Celo 主网通信的 JSON-RPC 接口。如果你搜索了“celo api”,你可能需要以下三件事之一:将 Celo 添加到钱包的正确链设置、用于发送第一个请求的可用端点,或调试请求失败原因的方法。本页回答了所有这三个问题,然后帮助你决定共享端点是否足够,或者你的工作负载是否需要专用 Celo 节点。

Celo 是一个 EVM 兼容的 Layer 1,因此你的大部分以太坊工具无需修改即可使用。重要的区别在于链 ID、原生货币符号以及围绕费用货币和 Gas 抽象的 Celo 特有方法。把这些弄对,剩下的就是标准 JSON-RPC。

链设置一览

在编写任何代码之前,请确认网络参数。这些是你输入到钱包、Hardhat 配置或 viem 链定义中的值。

设置值
网络名称Celo Mainnet
链 ID42220
原生货币CELO(18 位小数)
RPC 传输HTTP
区块浏览器https://celoscan.io
公共端点https://celo.api.onfinality.io/public

如果你要将 Celo 添加到钱包,请完全按照所示使用网络名称和链 ID。链 ID 不匹配是钱包拒绝签名或 dApp 报告“错误网络”的最常见原因。

对于你可以在开发中使用的托管端点,OnFinality 公开了一个公共 Celo RPC URL。对于生产流量,请查看 RPC 定价 和 Celo 网络页面,以选择与你的请求量匹配的计划。

发送你的第一个 Celo API 请求

每个 Celo API 调用都是一个 POST 请求,其 JSON 正文包含 jsonrpc、method、params 和 id。从 eth_chainId 开始,确认你连接到了正确的网络,然后使用 eth_blockNumber 检查节点是否已同步。

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

响应以十六进制返回链 ID。对于 Celo 主网,该值为 0xa4ec,即十进制的 42220。如果你得到不同的值,说明你指向了错误的网络。

链 ID 检查通过后,查询余额并读取合约:

curl -X POST https://celo.api.onfinality.io/public \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "eth_getBalance",
    "params": ["0xYourAddressHere", "latest"],
    "id": 2
  }'

eth_call 的工作方式与在以太坊上相同。传入 to 地址、编码后的函数数据和区块标签。Celo 的 EVM 兼容性意味着 ethers 和 viem 等 ABI 编码库无需特殊处理即可工作。

从 JavaScript 连接

如果你更喜欢客户端库,viem 和 ethers 都通过自定义链定义支持 Celo。下面的示例使用 viem 并指向公共端点。

import { createPublicClient, http, defineChain } from "viem";

const celo = defineChain({
  id: 42220,
  name: "Celo Mainnet",
  nativeCurrency: { name: "CELO", symbol: "CELO", decimals: 18 },
  rpcUrls: {
    default: { http: ["https://celo.api.onfinality.io/public"] },
  },
  blockExplorers: {
    default: { name: "Celoscan", url: "https://celoscan.io" },
  },
});

const client = createPublicClient({ chain: celo, transport: http() });

const blockNumber = await client.getBlockNumber();
const balance = await client.getBalance({ address: "0xYourAddressHere" });
console.log({ blockNumber, balance });

对于基于钱包的应用,相同的值会放入 wallet_addEthereumChain。保持钱包配置和后端之间的链 ID 和 RPC URL 一致,这样用户就不会在会话中途看到网络切换提示。

何时公共端点足够,何时不够

共享公共端点适用于本地开发、原型和低流量读取路径。一旦你有真实用户,它就不太适合,因为你与其他所有人共享吞吐量,并且无法控制延迟峰值。

使用此表来决定你的工作负载实际需要什么。

工作负载共享公共端点专用 Celo 节点
本地开发和测试适合不必要
少量用户的原型通常可以可选
稳定流量的生产 dApp负载下有风险推荐
索引器或后端工作进程不适合推荐
许多并发用户的钱包不适合推荐
归档或历史查询通常不可用必需

如果你不确定自己属于哪种情况,请从 RPC 提供商选择指南 开始,然后在 定价页面 上比较计划。OnFinality 提供共享 RPC API 访问和 专用节点,适用于需要隔离容量的团队。

值得了解的 Celo 特有方法

由于 Celo 是为移动支付设计的,它添加了以太坊没有的方法。有两个值得尽早了解。

eth_gasPrice 返回 Gas 价格,但 Celo 还支持使用批准的 ERC-20 代币支付 Gas。如果你的应用允许用户使用稳定币支付费用,你将与费用货币合约交互,而不仅仅是原生 CELO 余额。在构建交易之前读取当前的费用货币,并检查账户是否有足够的该代币。

Celo 还支持与以太坊相同过滤形状的 eth_getLogs。如果你正在索引事件,请保持区块范围适中并进行分页。大型无界日志查询是任何提供商(不仅仅是 Celo)超时的常见原因。

常见 Celo API 错误的调试路径

大多数 Celo API 问题属于少数几类。按顺序处理它们。

症状可能原因该怎么办
eth_chainId 返回错误值端点指向另一个网络重新检查 URL 和链 ID 42220
-32601 method not found节点不支持该方法确认方法名称和节点类型
eth_getLogs 上的 -32000区块范围太大减小范围并分页
交易卡在待处理状态Gas 价格太低或 nonce 间隙重新检查 nonce 和费用设置
429 响应在共享端点上被限速迁移到专用计划
代币余额读取失败合约或小数位数错误验证代币地址和 ABI

每次调试会话都从确认链 ID 开始。如果正确,检查失败的调用是读取还是写入。读取通常因参数格式错误或查询过大而失败。写入通常因 nonce、Gas 或费用货币问题而失败。

有关适用于各网络的更广泛检查清单,请参阅 RPC 端点指南。

运行自己的节点与使用托管 Celo API

一些团队考虑运行自己的 Celo 节点。这是一个合理的选择,但运营成本很容易被低估。你需要配置硬件、在网络升级期间保持客户端更新、监控磁盘增长,并在节点落后时处理故障转移。

托管 Celo API 消除了这些维护工作。你获得一个端点,提供商处理升级、监控和可用性。权衡是你依赖提供商的基础设施,这就是故障转移规划很重要的原因。

对于生产应用,一个实用的折中方案是使用主托管端点,并保留第二个提供商或自托管节点作为备用。配置你的客户端在主端点反复返回错误时重试备用端点。这比自己运行两个节点更简单,并且覆盖了最常见的故障场景。

生产就绪检查清单

在发布之前,确认以下每一项。

  • 链 ID 硬编码为 42220 并在启动时验证。
  • RPC URL 来自环境配置,而不是源代码。
  • 你有备用端点和带退避的重试策略。
  • 日志查询是分页且有界的。
  • 你监控错误率和延迟,而不仅仅是正常运行时间。
  • 如果用户使用代币支付 Gas,费用货币逻辑已经过测试。
  • 你已经根据预期请求量审查了 RPC 定价。

一个检查链 ID 和区块高度的简单监控探针可以在用户之前发现大多数连接问题:

async function healthCheck(url) {
  const res = await fetch(url, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      jsonrpc: "2.0",
      method: "eth_blockNumber",
      params: [],
      id: 1,
    }),
  });
  const data = await res.json();
  return parseInt(data.result, 16);
}

定期运行此检查,并在区块高度停止推进时发出警报。高度停滞比 HTTP 请求失败是更清晰的信号。

关键要点

  • Celo 兼容 EVM,因此标准以太坊 JSON-RPC 方法在链 ID 42220 下可用。
  • 在调试任何其他内容之前,始终验证 eth_chainId。
  • 共享公共端点适合开发;生产工作负载受益于专用容量。
  • Celo 的费用货币模型增加了以太坊应用没有的代币 Gas 逻辑。
  • 对 eth_getLogs 进行分页,并监控区块高度,而不仅仅是 HTTP 状态。
  • 在发布前规划备用端点,而不是在事件发生后。

常见问题解答

什么是 Celo API?

它是 Celo 主网的 JSON-RPC 接口。你向端点发送 POST 请求,并使用标准 EVM 方法接收链数据或提交交易。

Celo 链 ID 是什么?

Celo 主网使用链 ID 42220,十六进制为 0xa4ec。

我可以将以太坊工具与 Celo 一起使用吗?

可以。由于 Celo 兼容 EVM,ethers、viem 和 Hardhat 等库可以通过设置链 ID 和 RPC URL 的自定义链定义来使用。

为什么我的 Celo 请求返回 429 错误?

429 表示你被限速,这在负载下的共享公共端点上很常见。迁移到专用计划或减少请求突发通常可以解决。

Celo 支持使用稳定币支付 Gas 吗?

Celo 支持使用批准的费货币支付 Gas。你的应用需要读取费货币合约,并在发送交易前确认账户持有足够的该代币。

我应该运行自己的 Celo 节点吗?

如果你需要完全控制或归档数据,并且能够承担维护工作,请运行自己的节点。否则,对于生产应用,托管 Celo API 加上备用端点通常更简单。

如果你想从公共端点迁移到托管基础设施,请从 Celo 网络页面 开始,比较 RPC 计划,如果你跨多个链运营,请查看 支持的 RPC 网络 的完整列表。

RPC 知识库

相关 RPC 内容

RPC 提供商选择Nodle Testing Parachain

在测试时,Solana RPC 提供商订阅计划中应该关注什么?

测试 Solana 应用需要一个 RPC 计划,该计划需平衡成本、速率限制以及对 devnet 或 mainnet 的访问。本文解释了在订阅计划中应评估哪些内容(例如请求配额、WebSocket 支持和存档数据),以及如何将计划与测试阶段(从快速原型到负载测试)相匹配。...

网络 RPCArbitrum

什么是 Arbitrum 节点,你应该如何运行或访问它们?

Arbitrum 节点是维护 Arbitrum 链(如 Arbitrum One 和 Arbitrum Sepolia)状态的软件客户端。你可以运行自己的全节点或归档节点来独立验证链,或者使用托管的 RPC 提供商来访问,而无需操作基础设施。本指南解释了节点类型、运营权衡,以及如何决定是自托管还是使...

网络 RPCBNB Chain

RPC BNB:如何连接 BNB Smart Chain 并选择正确的端点?

本页面解释了 BNB Smart Chain(BNB Chain)的 RPC 端点是什么,如何连接主网和测试网,以及如何在公共、共享和专用基础设施之间进行选择。它涵盖了链设置、一个可用的 JSON-RPC 示例、WebSocket 支持以及开发者最常遇到的故障模式。在将钱包、后端服务或索引器连接到 ...

网络 RPCArbitrum

Arbitrum RPC 列表:如何为你的应用选择合适的端点

本文介绍了不同类型的 Arbitrum RPC 端点——公共、托管和专用——以及如何为你的应用选择合适的端点。内容涵盖链设置、常见用例,以及如何根据可靠性、可扩展性和支持来评估提供商。...

网络 RPCBase

什么是 Base NFT API,以及如何在 Base 上查询 NFT 数据?

Base NFT API 是一组 RPC 方法和索引数据服务,用于在 Base 网络上读取 NFT 所有权、元数据和转账历史。标准的 JSON-RPC 调用如 eth_call、eth_getLogs 和 eth_getBalance 覆盖链上读取,而索引器风格的 API 则添加预聚合的所有权和集合...

网络 RPCSolana

Solana RPC Access: Authentication, Rate Limits & Common Errors

Solana RPC access uses JSON-RPC over HTTP and WebSocket. Public endpoints such as https://api.mainnet-beta.solana.com require no key but enforce chang...

永远不用担心基础设施

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

开始