一文了解RPC:连接DAapp和区块链的桥梁

 2023-10-05 17:22:38发布 2023-10-05 17:22:59更新

RPC(Remote Procedure Call)远程过程调用协议,一种通过网络从远程计算机上请求服务,而不需要了解底层网络技术的协议。通俗的描述是:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序中的对象一样。

什么是RPC

RPC是Dapp、Wallet、CEX等区块链应用不可或缺的基础技术之一。在Web2中, RPC是一台计算机调用另一台计算机上的程序并执行的通信技术,通过RPC远程过程调用,调用方只要传递调用服务名和参数就可以与对方通信,是一个很宽泛的概念。

在区块链环境中,RPC则是可让客户端与区块链交互的协议。用户通过RPC接口可查询区块链相关信息(如块高、区块、节点连接等)和发送交易。

RPC的技术原理

首先需要了解RPC的三个主要角色:

服务提供者(RPC Server)

服务提供者 运行在服务端,提供服务接口定义和服务实现类。

在区块链中,服务提供者就像区块链网络中的节点,负责提供特定的功能,例如存储和验证交易。

服务消费者(RPC Client)

服务消费者运行在客户端,通过远程代理对象调用远程服务。

在区块链中,注册中心类似于一个节点管理系统,它记录哪些节点提供了哪些服务,以便其他节点能够找到并使用这些服务。

注册中心(Registry)

注册中心也是运行在服务端,负责把本地服务发布成远程的服务,它也要去管理,提供给服务消费者来使用。

在区块链中,服务消费者就像需要区块链上信息的应用程序或用户,它们通过RPC来请求特定的功能或数据,就像在团队中请求任务一样。

RPC调用图

RPC调用图

  1. 服务消费方(client)调用以本地调用方式调用服务;
  2. client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;
  3. client stub找到服务地址,并将消息发送到服务端;
  4. server stub收到消息后进行解码;
  5. server stub根据解码结果调用本地的服务;
  6. 本地服务执行并将结果返回给server stub;
  7. server stub将返回结果打包成消息并发送至消费方;
  8. client stub接收到消息,并进行解码;
  9. 服务消费方得到最终结果。

RPC的目标就是要2~8这些步骤都封装起来,让用户对这些细节透明。

假设你是一位项目经理,需要一个复杂的报告,但你不懂技术,所以你需要协助专业的数据分析师来完成任务。

在这个过程中你需要完成:

委托任务

你将任务的要求和细节写下来,然后通过一个信使传递给数据分析师。

在计算机中:你就像服务消费者(RPC Client),想要获取某项服务,但你自己无法执行,所以你委托给了专业人士。

注册任务

信使将任务详细信息传递给一个协调员,协调员记录下任务并通知相应的分析师。

在计算机中:信使就像注册中心(Registry),它记录谁能够提供什么服务,然后通知服务提供者。

提供服务

数据分析师接受任务并开始分析数据,这个分析过程就好比执行一个远程函数。

在计算机中:数据分析师就像服务提供者(RPC Server),能够执行特定的任务,比如执行数据分析。

执行任务

数据分析师根据你的要求进行数据分析,完成任务。

在计算机中:数据分析师执行任务,类似于远程执行函数。

登记结果

数据分析师将分析结果交给协调员,协调员记录下结果。

在计算机中:数据分析师将执行结果告知注册中心。

反馈结果

信使带着分析结果回到你这里,你得到了完成的报告。

在计算机中:信使将执行结果传递回给你,你得到了你所需的数据。

为什么需要RPC

区块链具有去中心化和分布式的属性,数据储存在各个节点中,想要运行节点参与网络出块等活动首先需要计算机符合一定的软、硬件要求。

在某些网络,运行节点还需要质押一定量的网络Token,比如ETH、ADA等网络。

当然并不是每一个节点都可以使用RPC协议,一般运行区块链客户端软件的计算机才能作为RPC节点,安装了适当软件的节点将能够响应RPC请求。

在常见的开发中,开发人员会使用RPC客户端-服务器模型进行开发,其中dApp是客户端,服务器是RPC节点。

作为区块链应用开发者,想要获取用户的信息,提交用户交易/活动到链上,都需要节点进行打包到链上。使用网络提供的公共RPC节点会面临拥堵,没有客户支持服务,缺乏活跃的开发人员基础设施,并且无法扩展以满足运行dApp的需求。

而大部分项目无法负担节点运营维护费用,因为每一个节点背后都需要花费大量时间成本、人力成本、物质资源建立节点。所出现了专门建立RPC节点,并提供RPC服务的服务商。

RPC的用途

RPC的重要功能是在终端应用和区块链间建立连接,所以RPC的主要用途就是在开发过程中,采用合适的RPC服务提供商让用户在使用时能够执行链上交易与查询。

对于普通Web3用户而言,最直接的一点用途就是,在网路拥堵时,切换成延迟较低的RPC入口,从而减少自己的延迟、加快交易速度。

理论上,RPC可以应用于各种需要进行区块链交易/信息查询的项目。

私有RPC

绝大多数区块链都会提供免费的公共的RPC供应用测试使用,但其速率受限,于是出现了私有RPC。私有RPC端点是具有唯一URL的RPC端点,只有所有者才能使用该URL将交易发送到公共内存池,从而为个人提供与节点提供商的直接连接。其在实际使用中有以下好处:

  • 在独家、先到先得的NFT铸造期间更快发送交易;
  • 发送交易以利用时间敏感的套利机会;
  • 快速进行空投领取。

RPC操作示例

对于开发过程中的RPC使用,需要开发者根据文档进行使用,本文主要以钱包中RPC切换为例。

以MetaMask为例:点击进入设置页面后选择网络,点击想要更改RPC的网络名称,在最右侧PRC URL处进行修改,然后点击保存即可更换RPC。

MetaMask的RPC更改页面

MetaMask的RPC更改页面

在具体使用时需要注意比较延迟程度,如果更成延迟较高的RPC,交易速度可能减慢。

RPC服务商

由于节点设置和运营的复杂性,出现了专门运营节点为项目提供RPC/API等服务的服务商。项目可以可以通过互联网将请求发送到服务商,该服务商会运行完全同步、24/7 可用的最新节点,而不是将请求发送到本地节点。

很多服务商不仅提供RPC服务,还提供多种相关服务,比如API、SDK等。作为开发者和个人用户,在筛选时除了交易速率,价格,客户服务等因素外,也要关注其提供的工具体系。

上文提到的私人RPC也由RPC服务商提供,大多数RPC服务商为多链业务,且大都提供免费的试用版和公开版本。

以下是一些市面上常见的RPC服务商。

Flashbots

Flashbots是一家专注于矿工可提取价值 (MEV) 的研发公司,旨在减轻 MEV 对智能合约区块链带来的负面外部性和存在风险。其RPC服务Flashbots Protect由RPC和API组成,开发者可以利用API轻松将其嵌入应用程序。

普通用户则可以将其RPC添加到钱包后,让自己的交易发送到Flashbots,这个过程是将交易直接发送到矿工,而非公共池,避免了MEV中的“三明治攻击”。Flashbots目前是行业MEV研究的领导者。

Infura

Infura是一种IaaS(基础设施即服务)产品,旨在为开发者和用户降低访问以太坊数据的门槛。Infura充当的是以太坊全节点的角色,通过提供API接口,无需运行本地以太坊节点,可以快速将Dapp连接到以太坊平台,实现交互。

客户包括Metamask、Uniswap、Compound等。

Alchemy

Alchemy提供了用于构建多链Web3 DApps的SDK和API,以及通过社区/大学类似的倡议教育用户使用这些工具的技能。Alchemy在链上支持这超过1,000亿美元的交易价值,拥有超过1,000万终端用户,并且获得了超过15亿美元的版税。

客户包括Opensea、GMX、AAVE等。

Ankr

Ankr提供了多种节点服务,包括公共节点和私有节点,支持30+区块链。同时,Ankr还提供了基于RPC和WebSocket协议的API接口,以及多种开发工具和SDK,如Web3.js、Truffle等,使开发者可以轻松地构建和部署区块链应用。

客户包括Binance、Sushiswap、Meta Apes等。

Quicknode

QuickNode通过直接提供专用节点为用户提供API服务,并支持多个区域、多个测试网和归档节点等特性,以此为开发者提供更好的区块链访问性能和更强的稳定性。拥有直观的仪表板、分析套件、远程过程调用编写器,支持20+链。

客户包括Nansen、Algofi、Dapprader等。

BlockPI

BlockPI是一种分布式网络结构的RPC,一个分布式多链加速层,它可参与去中心化的 Web3 环境。

2023年初,其成功升级了公共RPC为大家提供更稳定、更快速的免费RPC服务。理论上,其架构从根本上解决RPC请求拥塞问题,且具有无限扩展性。

推荐阅读