跳转到内容

生成 PFN 身份

公共全节点(PFN)在启动时会自动采用一个随机产生的(临时的)网络标识.这对绝大多数 PFN 而言是合适的.但在某些情境下,你可能需要为您的 PFN 生成并设置一个固定的网络标识,特别是在以下这些情况中:

  • 您希望将您的 PFN 作为种子进行广告宣传(即,供其他 Aptos PFN 连接).
  • 您希望将您的 PFN 添加到上游 PFN 或 VFN 的已知身份允许列表(allowlist)中.
  • 您希望在重启和发布过程中固定您的 PFN 身份,以便遥测(telemetry)和其他监控(monitoring)工具能够随着时间追踪您的 PFN.

本指南将向您展示如何生成静态网络身份并以此身份启动您的 PFN.

要为您的 PFN 创建静态身份,您首先需要生成一对私钥和公钥.然后,您需要从公钥派生出 peer_id,并在配置文件中使用 peer_id(例如 fullnode.yaml)来配置您的 PFN 的静态网络身份.

下面的步骤将指导您完成为您的 PFN 生成静态身份的过程.确切的步骤取决于您是使用 aptos-core 源代码运行还是使用 Docker 运行您的 PFN.

如果您使用 aptos-core 源代码运行您的 PFN,请按照以下步骤操作:

  1. 生成私钥

首先,使用 Aptos CLI (aptos) 生成一个十六进制编码的静态 x25519 私钥.这将是您网络身份的私钥.运行以下 aptos CLI 命令:

Terminal window
aptos key generate --key-type x25519 --output-file /path/to/private-key.txt

此命令将创建一个包含私钥的 private-key.txt 文件,以及一个包含公钥的相应 private-key.txt.pub 文件.下面展示了一个示例 private-key.txt 文件和 private-key.txt.pub 文件:

Terminal window
cat ~/private-key.txt
C83110913CBE4583F820FABEB7514293624E46862FAE1FD339B923F0CACC647D%
cat ~/private-key.txt.pub
B881EA2C174D8211C123E5A91D86227DB116A44BB345A6E66874F83D8993F813%
  1. 检索对等(peer)身份

接下来,请使用 aptos CLI 通过公钥获取对应的对等(peer)身份.在命令中加入 --host 参数,指定您的主机信息,这样才能生成并输出您 PFN 的网络地址.请按照下面的格式执行命令(记得将 --host 后的内容替换成您真实的主机信息):

Terminal window
aptos key extract-peer --host example.com:6180 \
--public-network-key-file private-key.txt.pub \
--output-file peer-info.yaml

此命令将把您的 PFN 的公共身份信息输出到 peer-info.yaml 文件中.例如:

{
"Result": {
"B881EA2C174D8211C123E5A91D86227DB116A44BB345A6E66874F83D8993F813": {
"addresses": [
"/dns/example.com/tcp/6180/noise-ik/0xB881EA2C174D8211C123E5A91D86227DB116A44BB345A6E66874F83D8993F813/handshake/0"
],
"keys": [
"0xB881EA2C174D8211C123E5A91D86227DB116A44BB345A6E66874F83D8993F813"
],
"role": "Upstream"
}
}
}

在这个示例中,B881EA2C174D8211C123E5A91D86227DB116A44BB345A6E66874F83D8993F813peer_id.

  1. 以静态网络身份启动 PFN

从公钥提取对等身份后,您可以使用配置文件中的 peer_id 字段中的公钥启动您的 PFN(例如 fullnode.yaml).例如:

full_node_networks:
- network_id: "public"
discovery_method: "onchain"
identity:
type: "from_config"
key: "<PRIVATE_KEY>"
peer_id: "<PEER_ID>"

在我们的例子中(来自上面的),配置文件(fullnode.yaml)现在应该包含以下信息:

full_node_networks:
- network_id: "public"
discovery_method: "onchain"
identity:
type: "from_config"
key: "C83110913CBE4583F820FABEB7514293624E46862FAE1FD339B923F0CACC647D"
peer_id: "B881EA2C174D8211C123E5A91D86227DB116A44BB345A6E66874F83D8993F813"

按照这个配置启动您的 PFN,可以确保您的 PFN 被赋予之前生成的静态网络身份.

如果您使用 Docker 运行您的 PFN,请按照以下步骤操作:

  1. 准备您的工具

首先,cd 进入您的本地 PFN 目录,并启动一个包含最新工具的 Docker 容器,例如:

Terminal window
cd ~/my-full-node
docker run -it aptoslabs/tools:devnet /bin/bash
  1. 生成私钥

接下来,按照在aptoslabs/tools Docker 容器内的剩余步骤进行操作.

打开一个新的终端窗口并 cd 进入您启动 PFN 的 Docker 容器的目录.确保提供您希望私钥文件存储的完整路径,运行命令:

Terminal window
aptos key generate \
--key-type x25519 \
--output-file /path/to/private-key.txt
  1. 检索对等(peer)身份

接下来,请使用 aptos CLI 通过公钥获取对应的对等(peer)身份.在命令中加入 --host 参数,指定您的主机信息,这样才能生成并输出您 PFN 的网络地址.请按照下面的格式执行命令(记得将 --host 后的内容替换成您真实的主机信息):

Terminal window
aptos key extract-peer --host example.com:6180 \
--public-network-key-file private-key.txt.pub \
--output-file peer-info.yaml

此命令将把您的 PFN 的公共身份信息输出到 peer-info.yaml 文件中.例如:

{
"Result": {
"B881EA2C174D8211C123E5A91D86227DB116A44BB345A6E66874F83D8993F813": {
"addresses": [
"/dns/example.com/tcp/6180/noise-ik/0xB881EA2C174D8211C123E5A91D86227DB116A44BB345A6E66874F83D8993F813/handshake/0"
],
"keys": [
"0xB881EA2C174D8211C123E5A91D86227DB116A44BB345A6E66874F83D8993F813"
],
"role": "Upstream"
}
}
}

在这个示例中,B881EA2C174D8211C123E5A91D86227DB116A44BB345A6E66874F83D8993F813peer_id.

  1. 以静态网络身份启动 PFN

从公钥提取对等身份后,您可以使用配置文件中的 peer_id 字段中的公钥启动您的 PFN(例如 fullnode.yaml).例如:

full_node_networks:
- network_id: "public"
discovery_method: "onchain"
identity:
type: "from_config"
key: "<PRIVATE_KEY>"
peer_id: "<PEER_ID>"

在我们(上面的)的例子中,配置文件(fullnode.yaml)现在应该包含以下信息:

full_node_networks:
- network_id: "public"
discovery_method: "onchain"
identity:
type: "from_config"
key: "C83110913CBE4583F820FABEB7514293624E46862FAE1FD339B923F0CACC647D"
peer_id: "B881EA2C174D8211C123E5A91D86227DB116A44BB345A6E66874F83D8993F813"

按照这个配置启动您的 PFN,可以确保您的 PFN 被赋予之前生成的静态网络身份.