什么是 RPC
注意:本文档是英文原版的自动翻译。
什么是 RPC
**RPC(Remote Procedure Call,远程过程调用)**是一种通信协议,它允许一个应用向运行在另一台计算机上的程序请求服务,而无需了解那台计算机网络的细节。在区块链语境中,RPC 是钱包、去中心化应用、区块浏览器以及其他软件与区块链节点通信的方式——发送交易、查询余额、读取智能合约状态以及检索区块数据。
简而言之: RPC 是应用与区块链节点对话所通过的标准接口——它是将 dApp、钱包和工具连接到区块链网络本身的通信层。
RPC 在区块链中如何运作
每个区块链节点都暴露一个 RPC 端点(endpoint)——一个接受结构化请求并返回结构化响应的 URL。当应用需要与区块链交互时,它会向这个端点发送一个 RPC 请求。
请求-响应模式
这种交互遵循标准的客户端-服务器模式:
- 请求。 应用(客户端)向节点的 RPC 端点发送一个请求。该请求指明要调用哪个方法,并提供任何必要的参数。例如:"获取地址 0x742d...bD38 的余额"或"将这笔已签名的交易发送到网络"。
- 处理。 节点接收请求,执行所请求的操作——从其本地的区块链副本中读取数据,或向网络广播一笔交易——并准备一个响应。
- 响应。 节点以结构化格式(通常是 JSON)将结果返回给应用。
JSON-RPC
大多数区块链网络使用 JSON-RPC——一种轻量级协议,其中请求和响应被格式化为 JSON 对象。一个典型的 JSON-RPC 请求包含一个方法名(例如 eth_getBalance、eth_sendRawTransaction 或 eth_call)和一个参数数组。响应则包含结果或一条错误消息。
这种标准化格式意味着,任何理解 JSON-RPC 的应用都可以与任何实现了相同方法的节点交互,无论双方使用何种编程语言或框架。
常见的 RPC 操作
区块链 RPC 端点通常支持以下操作:
- 读取状态 —— 查询账户余额、代币持有量、智能合约存储以及当前区块号。
- 发送交易 —— 向网络广播已签名的交易,以便将其纳入某个区块。
- 调用智能合约 —— 执行只读的智能合约函数而不创建交易(无 gas 成本)。
- 订阅事件 —— 监听特定的链上事件,如代币转移、合约部署或新区块。
- 检索历史 —— 获取过去的交易、日志和区块数据。
RPC 提供商
运行一个完整的区块链节点需要可观的存储、带宽和维护。许多开发者和应用使用 RPC 提供商(RPC providers)——运营节点基础设施并暴露 RPC 端点供公共或付费使用的第三方服务。这些提供商提供可靠、高可用的区块链数据访问,而无需每个应用各自运行一个节点。
热门的 RPC 提供商每天在多个区块链网络上处理数十亿次请求,充当着 dApp 生态系统的支柱。
为什么它对加密货币人工智能项目很重要
RPC 是每个基于区块链的人工智能项目所依赖的通信层,即便它对最终用户而言并不总是可见的。
与智能合约交互。 部署智能合约的人工智能项目需要 RPC 来读取合约状态、触发函数以及提交交易。无论项目是在分发计算任务、记录推理结果还是管理质押,每一次链上交互都要通过一个 RPC 端点。
数据摄取。 分析链上活动——交易模式、钱包行为、协议指标——的人工智能系统依赖 RPC 调用来摄取区块链数据。RPC 访问的速度和可靠性直接影响人工智能分析的质量和时效性。
基础设施依赖。 对于运营去中心化节点网络的人工智能项目而言,RPC 层是外部用户访问该服务的方式。一个去中心化计算市场会暴露 RPC 端点用于任务提交;一个人工智能推理网络则使用 RPC 来交付结果。这些端点的可靠性决定了用户体验。
它在 DecAIHub 项目卡片中出现的位置
RPC 并未作为一个独立字段列在项目卡片中,但它支撑着项目架构的若干方面:
- Main chain —— 每条主链都有自己的 RPC 规范。链的选择决定了哪些 RPC 方法可用,以及应用如何与网络交互。
- Type —— 以服务形式提供 RPC 基础设施的项目(节点提供商、API 网关)可能会根据其基础设施角色进行分类。
- dApp 与智能合约交互 —— 任何带有链上智能合约的项目,都依赖 RPC 来进行与这些合约的所有外部交互。
仅凭 RPC 无法证明什么
- 去中心化 —— 使用中心化的 RPC 提供商意味着应用依赖于一个单点故障。如果提供商宕机或审查请求,应用就会失去对区块链的访问。通过一个中心化的 RPC 网关运行,并不会使应用去中心化。
- 安全性 —— RPC 端点可以是公开的或私有的、有速率限制的或开放的。一个公共的 RPC 端点本身并不提供安全保证。发送敏感交易的应用应当确保它们使用的是受信任、经过身份验证的端点。
- 链上执行 —— 发送一个 RPC 请求并不意味着操作发生在链上。只读调用(
eth_call)在节点上本地执行,而不创建交易。只有通过 RPC 提交的已签名交易才真正修改区块链状态。 - 性能 —— RPC 的响应时间取决于节点的硬件、网络状况以及提供商的基础设施。一个缓慢的 RPC 连接并不表明区块链很慢;它可能表明节点过载或在地理上距离遥远。
请勿混淆
- API —— RPC 是 API 的一种,但并非所有 API 都是 RPC。REST API、GraphQL 端点和 WebSocket 接口都是替代的通信模式。在区块链中,"RPC"特指节点暴露的 JSON-RPC 接口。
- 节点 —— 节点是实际运行区块链软件的计算机。RPC 是外部应用与该节点通信所通过的接口。节点做实际工作;RPC 是那扇门。
- SDK / 库 —— 诸如 Web3.js、Ethers.js 或 Web3.py 之类的库,通过将原始的 JSON-RPC 调用封装在对开发者友好的函数中,简化了 RPC 交互。库是一个便利层;RPC 是底层协议。
- 预言机(Oracle) —— 预言机将链下数据带到区块链上。RPC 是应用读取和写入链上数据的方式。它们扮演不同的角色:预言机将外部数据桥接进来,而 RPC 提供对已经在链上的数据的访问。
常见问题
我需要运行自己的节点才能使用 RPC 吗?
不需要。大多数开发者和应用使用以服务形式运营节点基础设施的第三方 RPC 提供商。这些提供商提供可通过标准 HTTP 或 WebSocket 连接访问的 RPC 端点。运行自己的节点能让你拥有完全的控制权并消除对第三方的依赖,但它需要可观的资源。对于大多数用例而言,一个信誉良好的 RPC 提供商就足够了。
如果 RPC 提供商宕机了会怎样?
如果你的应用所使用的 RPC 提供商宕机,应用就会失去与区块链的连接。在连接恢复或应用切换到替代端点之前,它无法读取状态、提交交易或接收事件通知。出于这个原因,生产应用通常会配置来自不同提供商的多个备用 RPC 端点。
RPC 与区块链访问是一回事吗?
RPC 是最常见的区块链访问方法,但并非唯一方法。一些应用使用替代协议,如基于 GraphQL 的索引器或直接的点对点连接。然而,JSON-RPC 仍然是通用区块链交互的标准接口,几乎每一个钱包、dApp 和区块链工具都在幕后使用它。
外部参考资料
- Ethereum.org — JSON-RPC API —— 以太坊关于 JSON-RPC 规范及可用方法的官方文档。
No comments to display
No comments to display