# 本地主机 RPC 端点

## 在Backpack中使用 `localhost` RPC端点

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

### 背景

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

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

### 问题

从网络角度看，使用地址 `localhost` 和 `127.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**](https://ngrok.com/)（首选）
* [**localtunnel**](https://theboroer.github.io/localtunnel-www/)
* [**serveo**](https://serveo.net/)

……以及很多其他工具

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

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

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

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

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

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

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://support.backpack.exchange/support-docs/cn/qian-bao/ji-shu-wen-dang/ben-di-zhu-ji-rpc-duan-dian.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
