运行全节点(官方教程)

开发网运行全节点教程(非测试网)

您可以运行 FullNodes 来验证状态并同步到 Aptos 区块链。 FullNodes 可以由任何人运行。 FullNodes 通过相互查询或直接查询验证者来复制区块链的完整状态。

本教程详细介绍了如何配置公共 FullNode 以连接到 Aptos 开发网。 Aptos Labs 提供的 FullNode 具有速率限制,可能会阻碍在测试网上的开发。 运行全节点将直接为您提供数据以避免此类速率限制。

注意:您的公共 FullNode 将通过 REST 端点连接到 devnet,可在您的计算机上的 localhost:8080 来访问该端点。

前提条件

在开始学习本教程之前,我们建议您熟悉以下内容:

硬件要求

为了运行生产级的全节点,我们建议使用以下硬件:

  • CPU: Intel Xeon Skylake 或更新,4 核

  • 内存:8GiB RAM

如果运行全节点用于开发或测试目的:

  • CPU: 2 核

  • 内存:4GiB RAM

存储要求

注意:Aptos 存储的数据量取决于区块链的账本历史(长度)和链上状态(例如账户)的数量。 这可能受到许多因素的影响,包括:区块链的年龄、平均交易率和账本修剪器的配置。

鉴于 DevNet 目前每周都会重置(请参阅 Discord 上的 #devnet-release 频道),我们估计 Aptos 需要的存储空间不会超过几 GB。

开始

您可以通过两种方式配置公共 FullNode:使用 Aptos-core 源码或 Docker。

使用 Aptos-core 源码

  1. 从 GitHub 下载并克隆 Aptos-core 项目,并通过运行以下命令准备您的开发环境:

    git clone https://github.com/aptos-labs/aptos-core.git
    cd aptos-core
    ./scripts/dev_setup.sh
    source ~/.cargo/env
  2. 检出 devnet 分支:git checkout origin/devnet

  3. 准备你的配置文件:

    • config/src/config/test_data/public_full_node.yaml拷贝到你的工作目录。

    • 下载 devnet 的 genesiswaypoint 文件。

    • 在你当前的工作目录中更新 public_full_node.yaml 文件:

      • 指定你想存储 devet 的数据目录到 base:data_dir;例如: ./data

      • 拷贝和粘贴 waypoint 文件内容到 waypoint 区域。

      • 通读配置并进行任何其他所需的更改。 您可以通过检查以下文件作为示例来查看 public_full_node.yaml 文件应该具有哪些配置: docker/compose/public_full_node/public_full_node.yaml

  4. 运行 aptos-node:cargo run -p aptos-node --release -- -f ./public_full_node.yaml

您现在已成功配置并开始运行连接到 Aptos devnet 的全节点。

注意:这将在 target/release/aptos-node 下构建一个发布二进制文件。发布二进制文件往往比调试二进制文件快得多,但缺少对开发有用的调试信息。 只需省略 --release 标志即可构建调试二进制文件。

使用 Docker

您还可以使用 Docker 来配置和运行您的全节点。

  1. 安装 Docker 和 Docker-Compose。

  2. 为您的公共全节点创建一个目录。

  3. 将公共全节点的 docker composeaptos-core 配置文件下载到此目录中。

  4. 将 devnet 的 genesiswaypoint 文件下载到该目录中。

  5. 运行 docker-compose: docker-compose up.

验证您的全节点的正确性

验证初始化同步

在您的 FullNode 的初始同步期间,可能需要传输大量数据。 可以通过查询指标端口来监控进度,以查看您的节点当前同步到的版本。 运行以下命令:

curl 127.0.0.1:9101/metrics 2> /dev/null | grep "aptos_state_sync_version{.*\"synced\"}" | awk '{print $2}'

该命令将输出节点的当前同步版本。 例如:

71000

将此命令返回的同步版本(例如 71000)与 Aptos 状态页面上显示的当前版本(最新)进行比较。 如果您的节点正在赶上当前版本,则它正在正确同步。 注意:节点和状态页面之间存在一些版本差异是可以的,因为状态页面不会自动刷新。

(可选)验证出站网络连接​

出站网络连接数应大于0。运行以下命令:

curl 127.0.0.1:9101/metrics 2> /dev/null | grep "aptos_connections{direction=\"outbound\""

该命令将输出节点的出站网络连接数。 例如:

aptos_connections{direction="outbound",network_id="Public",peer_id="aabd651f",role_type="full_node"} 3

如果返回的出站连接数(例如 3)不超过 0,则意味着您的节点无法连接到 Aptos 区块链。 如果您遇到这种情况,请按照以下步骤操作,看看它们是否能解决问题:

  1. 按照以下步骤将您的节点更新到最新版本:更新步骤.

  2. 删除您可能已添加到配置文件(例如,public_full_node.yaml)中的任何种子节点。 种子可能会阻止您连接到网络。种子对等点在添加上游种子对等点部分中讨论。

(可选)检查 Docker 分类帐大小

可以通过进入 Docker 容器并检查大小来监控 DevNet 的区块链账本的体积。 这将允许您查看区块链分类帐当前消耗了多少存储空间。 运行这些命令来检查:

# 获得容器id:
id=$(docker container ls | grep public_full_node_fullnode_1 | grep -oE "^[0-9a-zA-Z]+")
# 进入容器:
docker exec -it $id /bin/bash
# 查看卷(ledger)大小:
du -cs -BM /opt/aptos/data

添加上游种子节点

注意:您可能会在节点的错误消息中看到 NoAvailablePeers 。 这在节点首次启动时是正常的。 等待节点运行几分钟,看看它是否连接到对等点。 如果没有,请按照以下步骤操作:

Devnet 验证器全节点最多只能接受约 5000 个连接。 如果我们的网络容量很大,您的全节点可能无法连接。 您可能会在节点的错误消息中不断看到 NoAvailablePeers 。 如果发生这种情况,您可以在 FullNode 配置文件中设置种子以添加要连接的新对等点。 我们准备了一些 FullNode 地址供您使用,如下所示。

此外,请随意使用社区提供的那些(任何已经运行全节点的人都可以提供他们的地址供您连接)。 将这些添加到您的 discovery_method 下的配置文件中:

...
full_node_networks:
    - discovery_method: "onchain"
      # The network must have a listen address to specify protocols. This runs it locally to
      # prevent remote, incoming connections.
      listen_address: ...
      seeds:
        bb14af025d226288a3488b4433cf5cb54d6a710365a2d95ac6ffbd9b9198a86a:
            addresses:
            - "/dns4/pfn0.node.devnet.aptoslabs.com/tcp/6182/ln-noise-ik/bb14af025d226288a3488b4433cf5cb54d6a710365a2d95ac6ffbd9b9198a86a/ln-handshake/0"
            role: "Upstream"
        7fe8523388084607cdf78ff40e3e717652173b436ae1809df4a5fcfc67f8fc61:
            addresses:
            - "/dns4/pfn1.node.devnet.aptoslabs.com/tcp/6182/ln-noise-ik/7fe8523388084607cdf78ff40e3e717652173b436ae1809df4a5fcfc67f8fc61/ln-handshake/0"
            role: "Upstream"
        f6b135a59591677afc98168791551a0a476222516fdc55869d2b649c614d965b:
            addresses:
            - "/dns4/pfn2.node.devnet.aptoslabs.com/tcp/6182/ln-noise-ik/f6b135a59591677afc98168791551a0a476222516fdc55869d2b649c614d965b/ln-handshake/0"
            role: "Upstream"
...

高级指南

如果您想深入了解节点配置的更多自定义,本高级指南将向您展示:

  • 为您的新全节点创建静态网络身份

  • 检索其他节点许可列表的公共网络身份

  • 启动带有或不带有静态网络标识的节点

为全节点创建静态身份

全节点将自动以随机生成的网络身份(PeerId 和公钥对)启动。 这对于常规的全节点非常有用,但如果您需要另一个节点将您列入白名单或提供特定权限,或者如果您希望始终以相同的身份运行您的全节点,则可以创建静态网络身份。

  1. 使用 aptos-labs/aptos-core 项目构建 aptos-operational-tool ,我们可以使用 cargo 构建来运行这些工具。 例如:

    $ git clone https://github.com/aptos-labs/aptos-core.git
    $ cd aptos-core
    $ ./scripts/dev_setup.sh
    $ source ~/.cargo/env
    $ cargo run -p aptos-operational-tool -- <command> <args>

    或者,您可以使用我们的 docker 镜像。 使用最新的工具版本启动一个 docker 容器,例如:

    $ docker run -i aptoslab/tools:devnet sh -x
    $ aptos-operational-tool <command> <arg>
  2. 运行密钥生成器,输出十六进制编码的静态 x25519 PrivateKey。 这将是您网络身份的私钥。

     $ cargo run -p aptos-operational-tool -- generate-key --encoding hex --key-type x25519 --key-file /path/to/private-key.txt

    或者在 aptoslab/tools docker 容器内执行:

    $ aptos-operational-tool generate-key --encoding hex --key-type x25519 --key-file /path/to/private-key.txt

    key 文件示例:

    $ cat /path/to/private-key.txt
    B8BD811A91D8E6E0C6DAC991009F189337378760B55F3AD05580235325615C74

检索公共网络身份

  1. 在前一个密钥文件上运行 peer 生成器

     $ cargo run -p aptos-operational-tool -- extract-peer-from-file --encoding hex --key-file /path/to/private-key.txt --output-file /path/to/peer-info.yaml

    或者在 aptoslab/tools docker 容器内执行:

    $ aptos-operational-tool extract-peer-from-file --encoding hex --key-file /path/to/private-key.txt --output-file /path/to/peer-info.yaml

    yaml 输出示例:

     ---
     ca3579457555c80fc7bb39964eb298c414fd60f81a2f8eedb0244ec07a26e575:
       addresses: []
       keys:
         - ca3579457555c80fc7bb39964eb298c414fd60f81a2f8eedb0244ec07a26e575
       role: Downstream

    在这个示例中, ca3579457555c80fc7bb39964eb298c414fd60f81a2f8eedb0244ec07a26e575 是 peer id, 也是从您在上一步生成的私钥派生的公钥。

  2. 这将创建一个 yaml 文件,其中包含您的公共身份,以提供给上游完整节点。 如果您想通过特定的上游完整节点连接您的完整节点,并且该完整节点仅允许已知身份连接到它们,这将非常有用。

使用静态网络身份启动节点

一旦我们有了静态身份,我们可以用它启动一个节点。

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

示例:

full_node_networks:
- network_id: "public"
  discovery_method: "onchain"
  identity:
    type: "from_config"
    key: "B8BD811A91D8E6E0C6DAC991009F189337378760B55F3AD05580235325615C74"
    peer_id: "ca3579457555c80fc7bb39964eb298c414fd60f81a2f8eedb0244ec07a26e575"

允许其他全节点连接

使用静态身份启动全节点后,您可以打开节点以允许其他人通过您的节点连接到 devnet。 确保在防火墙上打开端口 6180(或 6182,取决于您的节点正在侦听的端口,可以在 fullnode config yaml 文件中配置),并共享您的节点信息以供其他人用作 seeds

<Peer_ID>:
  addresses:
  # with DNS
  - "/dns4/<DNS_Name>/tcp/<Port_Number>/ln-noise-ik/<Public_Key>/ln-handshake/0"
  role: Upstream
<Peer_ID>:
  addresses:
  # with IP
  - "/ip4/<IP_Address>/tcp/<Port_Number>/ln-noise-ik/<Public_Key>/ln-handshake/0"
  role: Upstream

确保您在地址中输入的端口号与您在全节点配置中的端口号(6180 或 6182)相匹配。 例子:

bb14af025d226288a3488b4433cf5cb54d6a710365a2d95ac6ffbd9b9198a86a:
  addresses:
  - "/dns4/pfn0.node.devnet.aptoslabs.com/tcp/6182/ln-noise-ik/bb14af025d226288a3488b4433cf5cb54d6a710365a2d95ac6ffbd9b9198a86a/ln-handshake/0"
  role: "Upstream"
bb14af025d226288a3488b4433cf5cb54d6a710365a2d95ac6ffbd9b9198a86a:
  addresses:
  - "/ip4/100.20.221.187/tcp/6182/ln-noise-ik/bb14af025d226288a3488b4433cf5cb54d6a710365a2d95ac6ffbd9b9198a86a/ln-handshake/0"
  role: "Upstream"

更新全节点新版本

✨ DEVNET 新地址格式 ✨

Aptos 地址现在是 32 字节而不是 16 字节。 如果您之前添加了种子对等点,请确保将它们更新为新的 32 字节格式。 对于使用静态身份的人,您可以按照相同的说明重新生成您的身份,为上面的 FullNode 创建一个静态身份。

当 devnet 被擦除并使用更新版本发布时,您还需要更新 fullnode,以确保它可以与新网络保持同步。 一般步骤如下:

  1. 关闭您的全节点

  2. 删除数据文件(目录路径是您在 public_full_node.yaml 文件中指定的), 默认是 /opt/aptos/data

  3. 删除 genesis.blobwaypoint.txt 文件(取决于您怎么配置,你也可能没有这个文件)

  4. 获取最新的 genesiswaypoint 文件

  5. 使用新的 waypoint 更新 public_full_node.yaml (如果你直接将 waypoint 配置在这里)

  6. 重启全节点

  7. 请参阅上面的 验证初始同步 部分以检查节点是否再次进行状态同步。

Last updated