生成 PFN 身份
验证者和 VFN 的身份一旦初始化便长期保持不变。相比之下,PFN 的身份具有更短的生命周期,可以根据需要随时重新生成。因此,按照本指南生成身份的操作只应该用于 PFN,而不适合用于验证者或 VFN。
公共全节点(PFN)在启动时会自动采用一个随机产生的(临时的)网络标识。这对绝大多数 PFN 而言是合适的。但在某些情境下,你可能需要为您的 PFN 生成并设置一个固定的网络标识,特别是在以下这些情况中:
- 您希望将您的 PFN 作为种子进行广告宣传(即,供其他 Aptos PFN 连接)。
- 您希望将您的 PFN 添加到上游 PFN 或 VFN 的已知身份允许列表(allowlist)中。
- 您希望在重启和发布过程中固定您的 PFN 身份,以便遥测(telemetry)和其他监控(monitoring)工具能够随着时间追踪您的 PFN。
本指南将向您展示如何生成静态网络身份并以此身份启动您的 PFN。
在继续之前,请确保您已经知道如何启动您的本地 PFN。详见运行 PFN 的详细文档。
生成静态身份
要为您的 PFN 创建静态身份,您首先需要生成一对私钥和公钥。然后,您需要从公钥派生出 peer_id
,并在配置文件中使用 peer_id
(例如 fullnode.yaml
)来配置您的 PFN 的静态网络身份。
下面的步骤将指导您完成为您的 PFN 生成静态身份的过程。确切的步骤取决于您是使用 aptos-core
源代码运行还是使用 Docker 运行您的 PFN。
使用 aptos-core 源代码
如果您使用 aptos-core
源代码运行您的 PFN,请按照以下步骤操作:
- 生成私钥
首先,使用 Aptos CLI (aptos
) 生成一个十六进制编码的静态 x25519 私钥。这将是您网络身份的私钥。运行以下 aptos
CLI 命令:
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
文件:
cat ~/private-key.txt
C83110913CBE4583F820FABEB7514293624E46862FAE1FD339B923F0CACC647D%
cat ~/private-key.txt.pub
B881EA2C174D8211C123E5A91D86227DB116A44BB345A6E66874F83D8993F813%
- 检索对等(peer)身份
接下来,请使用 aptos CLI
通过公钥获取对应的对等(peer)身份。在命令中加入 --host
参数,指定您的主机信息,这样才能生成并输出您 PFN 的网络地址。请按照下面的格式执行命令(记得将 --host
后的内容替换成您真实的主机信息):
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"
}
}
}
在这个示例中,B881EA2C174D8211C123E5A91D86227DB116A44BB345A6E66874F83D8993F813
是 peer_id
。
- 以静态网络身份启动 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
如果您使用 Docker 运行您的 PFN,请按照以下步骤操作:
- 准备您的工具
首先,cd
进入您的本地 PFN 目录,并启动一个包含最新工具的 Docker 容器,例如:
cd ~/my-full-node
docker run -it aptoslabs/tools:devnet /bin/bash
- 生成私钥
接下来,按照在aptoslabs/tools
Docker 容器内的剩余步骤进行操作。
打开一个新的终端窗口并 cd
进入您启动 PFN 的 Docker 容器的目录。确保提供您希望私钥文件存储的完整路径,运行命令:
aptos key generate \
--key-type x25519 \
--output-file /path/to/private-key.txt
- 检索对等(peer)身份
接下来,请使用 aptos CLI
通过公钥获取对应的对等(peer)身份。在命令中加入 --host
参数,指定您的主机信息,这样才能生成并输出您 PFN 的网络地址。请按照下面的格式执行命令(记得将 --host
后的内容替换成您真实的主机信息):
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"
}
}
}
在这个示例中,B881EA2C174D8211C123E5A91D86227DB116A44BB345A6E66874F83D8993F813
是 peer_id
。
- 以静态网络身份启动 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 被赋予之前生成的静态网络身份。