本地主机 RPC 端点

在Backpack中使用 localhost RPC端点

这是对为何在 Backpack(以及其他一些钱包)中使用http://localhost:XXXXhttp://127.0.0.1:XXXX 作为自定义 RPC 端点无法生效的非技术性解释。

背景

当工程师希望在一个隔离的环境中测试或开发链上数据或程序时,通常会选择在localhost运行一个 RPC。

这种方式在只涉及本地系统和应用时是有效的,但一旦有外围系统和应用程序也需要连接或向这localhost运行时发送请求,问题就会出现。

问题

从网络角度看,使用地址 localhost127.0.0.1就像是在指代你自己(即使用 me 或者 I这个词)。

Backpack 和其他一些主流钱包一样,会从远程服务器和 API 获取你地址/钱包的资产持有情况,这些服务器和 API 并不运行在客户端上。当你登录 Backpack 时,移动端或网页版应用会向远程服务器发送请求,以获取你的钱包信息:余额、交易历史、NFT 持仓等。

当你在 Backpack 钱包应用中设置自定义 RPC 端点时,该端点将取代默认配置在多个位置的 RPC 设置:

  1. 交易序列化和发送

  2. 健康检查

  3. 区块链/网络元数据检索

  4. 指示 Backpack API 直接从链上读取数据,而不是使用其他更快的数据源

前三项可能会受到不同程度的影响,但第 4 项尤为关键。由于 Backpack API 是一个远程服务器,当它被指示去访问http://localhost:XXXX 这样的 RPC 端点时,它会理解为:

“我正在运行一个区块链 RPC 节点,应该向它发送请求。”

显然这是错误的,因为对服务器而言,localhost 并不是用户笔记本电脑上运行的 RPC 节点,而这个节点可能运行在世界的另一端。因此,自定义 RPC 应始终设置为一个可以被公共访问的端点,而非指向任何本地或内部系统网络或保留名称的地址。

那我要如何使用运行在 localhost 上的测试 RPC?

解决方案

关键点是:自定义 RPC 的端点必须可以被公共访问

有很多工具和应用可以帮助你将本地运行的应用通过隧道方式暴露到公网,例如:

……以及很多其他工具

这些应用允许你选择本地内部网络上的端口,并通过本地隧道将其暴露到公网,生成一个临时的公共域名,外部网络可以访问。

ngrok 为例,创建并验证账户之后,你只需运行以下命令,即可为你的 RPC 端点建立本地隧道,然后将该域名作为自定义 RPC 设置在钱包中:

$ ngrok http 8080 # 替换为你需要的端口号

为什么某些 dApp 即使没有隧道也能正常工作?

在某些情况下,即使没有localhost隧道,将自定义 RPC 端点设置为 localhost 也可能仍然有效。

这完全取决于你所连接的 dApp 的实现方式。如果某个 dApp 的网站被设计为直接从客户端代码运行链上查询,那它大概率仍能正常工作,因为向 RPC 发出的网络请求是从你浏览器中运行的代码中发出的,因此和你localhost的 RPC 处在相同的网络空间内。

这也是唯一一种不需要设置本地隧道的例外情况。

Last updated