0.2.7 2022 年 8 月 16 日
0.2.6 2022 年 8 月 13 日
0.2.2 2022 年 7 月 22 日
0.1.7 2022 年 7 月 9 日
0.1.0 2022 年 5 月 26 日

#25 in #aptos

28 次每月下载
用于 71 个包 (52 个直接)

Apache-2.0

1MB
24K SLoC

Aptos 配置

配置描述了节点(验证器或全节点)的运行细节,并为客户端提供了如何连接到区块链和建立信任的信息。

验证器执行 BFT 协议并托管区块链的真相来源。

全节点作为客户端提交读取请求(即有关区块链状态的查询)的主要入口点,为区块链提供复制服务。反过来,验证器专注于优化交易吞吐量。

客户端是任何感兴趣了解区块链状态或执行事务的服务。

有关验证器和全节点之间差异的更详细总结,请参阅这篇 博客文章

组织

配置被拆分为多个实用工具

  • src/config 托管核心配置文件结构
  • src/generator.rs 帮助构建验证器或全节点集的配置集
  • src/keys.rs 用于测试目的,将密钥包装在配置文件中
  • config-builder 通过命令行工具扩展了 src/generator.rs,并提供了生成创世文件的支持。

config-builder 分离成独立库是为了满足其生成创世文件的需求。创世文件需要虚拟机(VM)作为依赖,而许多服务在加载或使用配置时不需要虚拟机作为依赖。

构建测试网络(TestNet)

config-builder 为验证器或全节点构建整个配置,包括创世块。它接受一个输入参数索引,用于指定要返回的特定节点配置。这可以用来创建一个与所有验证器兼容的配置,从而创建一个 Aptos 测试网络。同样,该工具也可以用来向现有网络添加全节点。最后,它还支持生成一个可以进行铸造交易/创建账户的 mint/faucet 客户端。

生成新的测试网络

生成完整测试网络配置的要求只有:(i)每个验证器的 IP 地址和端口号;(ii)验证器网络的预商定共享密钥;(iii)网络中验证器的固定顺序。全节点配置可以是新生成的,也可以添加到现有配置中。

验证器 I 的配置可以通过以下方式生成

config-builder validator \
    -a $PUBLIC_MULTIADDR_FOR_VALIDATOR_I \
    -b $PUBLIC_MULTIADDR_FOR_VALIDATOR_0 \
    -d /opt/aptos/data \
    -i $I \
    -l $ANY_MULTIADDR_FOR_VALIDATOR_I \
    -n $TOTAL_NUMBER_OF_VALIDATORS \
    -o /opt/aptos/etc \
    -s $SHARED_SECRET

例如,这是 4 个验证器中的第 2 个验证器(偏移 1)

config-builder validator \
    -a "/ip4/1.1.1.2/tcp/7000" \
    -b "/ip4/1.1.1.1/tcp/7000" \
    -d /opt/aptos/data \
    -i 1 \
    -l "/ip4/0.0.0.0/tcp/7000" \
    -n 4 \
    -o /opt/aptos/etc \
    -s 0123456789abcdef101112131415161718191a1b1c1d1e1f2021222324252627

创建铸币服务密钥

config-builder faucet \
    -o /opt/aptos/etc \
    -s 0123456789abcdef101112131415161718191a1b1c1d1e1f2021222324252627

实例化全节点配置与实例化验证器配置类似。虽然有三种可能的途径:(i)创建新的节点配置;(ii)将另一个网络扩展到现有的全节点;(iii)将全节点网络扩展到验证器。所有三种情况下的输入都是相似的,只是命令(创建与扩展)不同。在扩展验证器时,config-builder 假设有 n + 1 个全节点,并将 n + 1 个身份分配给验证器。这个 n + 1 个 peer id 也用于定义状态同步和内存池的上游 peer。注意:目前,该工具不支持创建全节点网络树。

config-builder full-node (create | extend) \
    -a $PUBLIC_MULTIADDR_FOR_FULL_NODE_I \
    -b $PUBLIC_MULTIADDR_FOR_FULL_NODE_0 \
    -d /opt/aptos/data \
    -l $ANY_MULTIADDR_FOR_FULL_NODE_I \
    -n $TOTAL_NUMBER_OF_VALIDATORS \
    -o /opt/aptos/etc \
    -s $VALIDATOR_SHARED_SECRET \
    [ -i $I -f $TOTAL_NUMBER_OF_FULL_NODES -c $FULL_NODE_SHARED_SECRET | -p ]

以下是一个将上述验证器配置扩展为全节点配置的示例。

config-builder full-node extend \
    -a "/ip4/1.1.1.2/tcp/7100" \
    -b "/ip4/1.1.1.2/tcp/7100" \
    -d /opt/aptos/data \
    -l "/ip4/0.0.0.0/tcp/7100" \
    -n 4 \
    -o /opt/aptos/etc \
    -s 0123456789abcdef101112131415161718191a1b1c1d1e1f2021222324252627 \
    -i 0 \
    -f 4 \
    -c 28292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344454547

以下是一个创建一个将连接到上述配置的验证器/全节点混合的新全节点的示例。

config-builder full-node create \
    -a "/ip4/1.1.1.3/tcp/7100" \
    -b "/ip4/1.1.1.2/tcp/7100" \
    -d /opt/aptos/fn/data \
    -l "/ip4/0.0.0.0/tcp/7100" \
    -n 4 \
    -o /opt/aptos/fn/etc \
    -s 0123456789abcdef101112131415161718191a1b1c1d1e1f2021222324252627 \
    -i 1 \
    -f 4 \
    -c 28292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344454547

同样,可以通过以下方式添加公共网络

config-builder full-node create \
    -a "/ip4/1.1.1.2/tcp/7100" \
    -b "/ip4/1.1.1.2/tcp/7100" \
    -d /opt/aptos/fn/data \
    -l "/ip4/0.0.0.0/tcp/7100" \
    -n 4 \
    -o /opt/aptos/etc \
    -s 0123456789abcdef101112131415161718191a1b1c1d1e1f2021222324252627 \
    -p

内部结构

配置中包含几个配置。

节点配置

节点配置包含几个模块

  • AdmissionControlConfig - 节点托管其入学控制
  • BaseConfig - 指定节点的角色和基本目录
  • ConsensusConfig - 包括安全规则可信计算基础在内的共识行为
  • DebugInterface - 识别系统内部的一个特殊 gRPC 服务
  • ExecutionConfig - gRPC 服务端点和定义 Move 标准库和初始验证器集的创世文件路径
  • MempoolConfig - 配置未提交事务存储的参数
  • MetricsConfig - 指标本地存储
  • NetworkConfig - 指定具有密钥的 peer、连接上游 peer 的种子地址、本地 peer 的网络密钥以及其他网络配置参数的 AptosNet 配置文件
  • NodeConfig - 托管节点的所有配置文件
  • SafetyRulesConfig - 指定安全规则的持久化策略
  • StateSyncConfig - 指定状态同步参数以及提供数据的对等节点集
  • StorageConfig - 指定AptosDB存储位置及其gRPC服务端点

外部组件配置

除了每个节点之外,还可以配置外部组件

  • KeyManagerConfig - 包含启动和运行密钥管理器的配置详情:负责为节点轮换加密密钥的组件服务

共享配置

  • LoggerConfig - 为每个组件配置日志服务
  • SecureBackendConfig - 配置每个组件使用的安全存储后端
  • TestConfig - 在测试期间使用,用于保存账户密钥和配置的临时路径,测试完成后将自动清理

测试

配置测试具有多个目的

  • 识别默认值何时发生变化
  • 确保解析/存储的一致性
  • 验证默认文件名假设是否得到保留

配置中的默认值(特别是路径和地址)具有代码库外部的依赖。这些测试提醒我们,破坏这些测试可能会产生影响,可能会影响生产部署。

当前的测试配置位于 src/config/test_data

待办事项

  • 添加关闭可选服务的功能(例如,调试接口、AC gRPC)
  • 生成公网的实现已损坏
  • 默认使用SafetyRule,并从配置生成器中移除

依赖项

~85MB
~1.5M SLoC