0.1.7 2022年7月10日
0.1.6 2022年7月9日
0.1.2 2022年6月26日
0.1.0 2022年5月28日

#26 in #genesis

Apache-2.0

2MB
46K SLoC

Aptos Genesis Tool

aptos-genesis-tool 为 Aptos 区块链的创世仪式提供工具。该工具的功能由系统中节点的组织方式决定。

  • 一个 aptos 根账户,该账户维护一组验证者所有者、验证者操作员和活动的验证者集。
  • 创世时发布的初始 Move 模块集。
  • 在区块链上有账户的验证者所有者(OW)。这些账户包含验证者配置并指定了一个验证者操作员。
  • 在区块链上有账户的验证者操作员(OP)。这些账户具有操作验证者配置的能力。

生成创世

启动计划功能和当前功能的组织过程包括

  • 初始化仪式
    • 协会建立用于数据上传的安全后端,例如 GitHub 的 shared storage。然后,协会为每个 OW 和 OP 分配凭据。
    • 协会生成其 aptos root key 并将公钥共享到 shared storage
    • 协会将初始 Move 模块集上传到 shared storage
    • 每个 OW 将生成一个私有的 owner key 并将公钥共享到 shared storage
    • 每个操作员(OP)将生成一个私有的操作员密钥并将公钥共享到共享存储
  • 验证器初始化
    • 每个观察员(OW)将选择一个操作员,并使用他们的所有者密钥对该交易进行签名,然后将它上传到共享存储
    • 对于每个由操作员支持的验证器,操作员将生成网络、执行和共识密钥,以及全节点和验证器端点的网络地址。操作员将生成一个包含这些数据的交易,并使用他们的操作员密钥对其进行签名,然后将其上传到共享存储
  • 创世
    • 每个操作员将下载累积数据以生成创世.blob文件。
    • 协会将下载累积数据以生成创世.blob和创世航点。
  • 启动
    • 协会发布与创世相关的数据,包括创世.blob和创世航点。
    • 每个操作员将下载协会提供的创世航点并将其插入他们的Aptos实例。
    • 每个操作员将验证创世.blob、航点和本地配置是否正确,并将他们的结果广播给其他操作员和协会。
    • 当达到一定数量的验证器具有正确状态时,协会将指示操作员开始他们的验证器。
    • 当达到一定数量的验证器上线时,区块链将开始处理交易。

注意事项

  • 这描述了一个尚未指定但基于Aptos Testnet当前状态的创建组织的流程。
  • 如上所述的实现尚未在Move中完全实现,因此此工具映射到当前状态。
  • 新的操作员(OP)/ 观察员(OW)加入现有区块链遵循相同的流程,并将账户的初始创建和配置设置委托给协会。

要求

每个个人实例(OW或OP)都应该能够访问一个安全的存储解决方案。那些利用Aptos Secure Storage的人可以直接使用此工具,而那些不这样做的人将需要提供自己的工具。

工具

aptos-genesis-tool提供了一些功能

  • 通过配置文件进行简化的配置管理,该文件可以存储经常重用的参数,包括验证器和共享存储。
  • 检索和提交OW、OP和验证器配置--这是从本地安全存储到远程安全存储--利用身份工具。
  • 将创世配置和安全存储转换为创世.blob/创世航点。

流程

端到端流程假定每个参与者都有自己的安全存储解决方案,例如Vault,以及存储在磁盘上的本地文件中的令牌,该文件可供管理工具访问。

此外,协会将提供一个进入共享存储的入口点,例如GitHub存储库(及其存储库所有者),并为每个参与者提供不同的命名空间。GitHub命名空间相当于存储库中的目录。

每个参与者必须为他们的账户获取一个允许访问repo范围的GitHub令牌。此令牌必须存储在磁盘上的本地文件中,该文件可供管理工具访问。

最后,每个参与者应在安全存储解决方案中初始化他们各自的关键:aptos_rootowneroperator。如何执行超出了本文件的范畴。

本节其余部分指定了每个角色的特定行为。

构建配置文件

虽然aptos-genesis-tool支持在每个命令上设置后端,但这样做既麻烦又容易出错。因此,所有参与者都应该首先构建一个用于创世和随后通过操作工具使用的配置文件。以下是yaml格式的示例配置文件。

# config.yaml

chain_id: "MAINNET"
json_server: "http://127.0.0.1:8080"
shared_backend:
    type: "github"
    repository_owner: "REPOSITORY_OWNER"
    repository: "REPOSITORY"
    namespace: "REPOSITOR_FOLDER"
    token:
        from_config: "test"
validator_backend:
    type: "vault"
    server: "127.0.0.1:8200"
    namespace: "VIRTUAL_NAMESPACE"
    token:
        from_config: "test"

字段概述

  • chain_id 指定了一个独特的链,并被写入创世纪文件,在网络连接时进行检查,并且是每个交易的一部分。它由协会提供。
  • json_server 指定了一个 Aptos JSON 服务器。这可以是连接到您的网络的任何服务器,包括您自己的或由协会运行的服务器。它不在创世纪中使用,因此在初始配置期间可以使用一个虚拟值。
  • shared_backend 是指向协会的 shared storage 的指针。
  • validator_backend 是指向本地验证器节点安全存储的指针。

协会

  • 协会将发布一个包含参与者独特名称和角色的布局到 shared storage
cargo run -p aptos-genesis-tool -- \
    set-layout \
    --config config_file.yaml \
    --path $PATH_TO_LAYOUT
  • 协会将发布初始的 Move 模块集到 shared storage
cargo run -p aptos-genesis-tool -- \
    set-move-modules \
    --config config_file.yaml \
    --dir $MOVE_MODULES_DIR

这应该是一个只包含 Move 字节码文件(.mv 扩展名)的目录。

  • 协会将发布 aptos root 的公钥到 shared storage
cargo run -p aptos-genesis-tool -- \
    aptos-root-key \
    --config config_file.yaml
  • 当 OW 和 OP 完成此过程中的各自部分后,协会将构建一个创世纪里程碑
cargo run -p aptos-genesis-tool -- \
    create-waypoint \
    --config config_file.yaml

布局是以下格式的 toml 配置文件

[operator] = ["alice", "bob"]
[owner] = ["carol", "dave"]
aptos_root = "erin"

其中每个字段都映射到本文件中描述的某个角色。

验证器所有者

  • 每个验证器所有者成员将他们的密钥上传到 GitHub
cargo run -p aptos-genesis-tool -- \
    owner-key \
    --config config_file.yaml
  • 每个 OW 将选择负责操作验证器节点的 OP。这个选择通过指定 OP 的名称(在共享 GitHub 中注册)来完成
cargo run -p aptos-genesis-tool --
    set-operator \
    --config config_file.yaml \
    --operator-name $OPERATOR_NAME

验证器运营商

  • 每个验证器运营商成员将他们的密钥上传到 GitHub
cargo run -p aptos-genesis-tool --
    operator-key \
    --config config_file.yaml
  • 对于运营商管理的每个验证器,运营商将上传一个签名的验证器配置文件。所有者对应于 OW 的名称(在共享 GitHub 中注册)。GitHub 中的命名空间与运营商命名空间相对应
cargo run -p aptos-genesis-tool --
    validator-config \
    --config config_file.yaml \
    --owner-name $OWNER_NAME \
    --validator-address "/dns/$VALIDATOR_DNS/tcp/$VALIDATOR_PORT" \
    --fullnode-address "/dns/$VFN_DNS/tcp/$VFN_PORT" \
  • 在收到协会的信号后,OP 现在可以构建创世纪
cargo run -p aptos-genesis-tool -- \
    genesis \
    --config config_file.yaml \
    --path $PATH_TO_GENESIS \
  • 同样,协会应发布一个创世纪里程碑,OP 应将其插入他们的存储(使用管理工具)
cargo run -p aptos-genesis-tool -- \
    insert-waypoint \
    --config config_file.yaml \
    --waypoint $WAYPOINT
  • 执行验证以确保本地存储映射到创世纪,创世纪映射到里程碑
cargo run -p aptos-genesis-tool -- \
    verify \
    --config config_file.yaml \
    --genesis_path $PATH_TO_GENESIS

重要注意事项

  • Vault 中的一个命名空间表示为秘密的子目录和一个前缀,后跟 __ 用于传输,例如,namespace__
  • GitHub 中的一个命名空间表示为一个子目录
  • GitHub 仓库和仓库所有者转换为以下 URL: https://github.org/REPOSITORY_OWNER/REPOSITORY

依赖关系

~113MB
~2M SLoC