跳到主要内容

24-substrate入门之授权特定节点

授权特定节点

添加受信任节点中,您了解了如何使用一组已知的验证器节点构建一个简单的网络。 该教程说明了许可网络的简化版本。 在许可网络中,只有被授权的节点才被允许执行特定的网络活动。 例如,您可以授予某些节点验证区块的权限,而授予其他节点传播事务的权限。

具有被授予特定权限的节点的区块链不同于公共或无权限的区块链。 在无需许可的区块链中,任何人都可以通过在合适的硬件上运行节点软件来加入网络。 一般来说,无需许可的区块链提供了更大的网络去中心化。 但是,在某些用例中,创建许可区块链可能是合适的。 例如,许可区块链适用于以下类型的项目:

  • 对于私人或财团网络,例如私人企业或非营利组织。
  • 在高度监管的数据环境中,例如医疗保健、金融或企业对企业分类账。
  • 用于大规模测试公共区块链网络。

本教程说明了如何使用节点授权托盘使用 Substrate 构建许可网络。

##节点授权和所有权 节点授权托盘是一个预构建的 FRAME 托盘,使您能够管理网络的一组可配置节点。 每个节点都由一个 PeerId 标识。 每个 PeerId 由一个且唯一一个声明该节点的 AccountId 拥有。

您可以通过两种方式授权节点加入网络:

通过将 PeerId 添加到预定义节点列表中。 您必须获得网络中的治理或 sudo 托盘的批准才能执行此操作。

通过从特定节点请求配对的对等连接。 此节点可以是预定义节点 PeerId 或普通节点。

请注意,任何用户都可以声称自己是 PeerId 的所有者。 为了防止虚假声明,您应该在启动节点之前声明节点。 启动节点后,它的 PeerID 对网络可见,任何人随后都可以认领它。

在你开始之前

在开始之前,请验证以下内容:

  • 通过安装 RustRust 工具链,您已经为 Substrate 开发配置了环境。

  • 您已完成构建本地区块链并在本地安装了 Substrate 节点模板。

  • 您已完成添加受信任节点教程。

  • 您通常熟悉 Substrate 中的点对点网络。

教程目标

通过完成本教程,您将实现以下目标:

-签出并编译节点模板。

  • 将节点授权托盘添加到节点模板运行时。

  • 启动多个节点并授权新节点加入。

构建节点模板

如果您已经完成了之前的教程,您应该可以在本地使用 Substrate 节点模板存储库。

1.在您拥有 Substrate 节点模板存储库的计算机上打开终端 shell。

2.如有必要,通过运行以下命令切换到节点模板目录的根目录:

cd substrate-node-template

3.通过运行以下命令切换到具有最新标签的存储库版本:

git checkout latest

此命令签出处于分离状态的存储库。 如果要保存更改,可以从该状态创建一个分支。

4.通过运行以下命令编译节点模板:

cargo build --release

节点模板应该编译没有任何错误。 如果您在编译时遇到问题,可以尝试排查 Rust 问题中的排查提示。

###添加节点授权托盘

在您可以使用新托盘之前,您必须将一些关于它的信息添加到编译器用来构建运行时二进制文件的配置文件中。

对于 Rust 程序,您使用Cargo.toml文件来定义配置设置和依赖项,这些设置和依赖项决定了在生成的二进制文件中编译的内容。 因为 Substrate 运行时编译为包含标准库函数的原生 Rust 二进制文件和不包含标准库的 WebAssembly (Wasm) 二进制文件,所以 Cargo.toml 文件控制着两个重要信息:

  • 要作为运行时依赖项导入的托盘,包括要导入的托盘的位置和版本。

  • 编译原生 Rust 二进制文件时应启用的每个托盘中的功能。 通过从每个托盘启用标准(std)功能集,您可以编译运行时以包含在构建 WebAssembly 二进制文件时会丢失的函数、类型和原语。

有关在 Cargo.toml 文件中添加依赖项的一般信息,请参阅 Cargo 文档中的依赖项。 有关从依赖包启用和管理功能的信息,请参阅 Cargo 文档中的功能。

添加note-authorization依赖

要将note-authorization托盘 加到 Substrate 运行时:

1.打开终端shell并切换到节点模板的根目录。

2.在文本编辑器中打开 runtime/Cargo.toml 配置文件。

找到 [dependencies] 部分并添加pallet-node-authorization crate,使其可用于节点模板运行时。

[dependencies]
pallet-node-authorization = { default-features = false, git = "https://github.com/paritytech/substrate.git", tag = "devhub/latest", version = "4.0.0-dev" }

此行将pallet-node-authorization ``crate 作为依赖项导入,并为 crate 指定以下配置详细信息:

  • 编译运行时默认情况下不启用托盘功能。

  • 用于检索托盘节点授权箱的存储库位置。

  • 用于检索 crate 的提交标记。

  • crate 的版本标识符。

4.将pallet-node-authorization/std 功能添加到功能列表中以在编译运行时启用。

[features]
default = ['std']
std = [
...
"pallet-node-authorization/std", # add this line
...
]

本节指定要为此运行时编译的默认功能集是 std 功能集。 使用 std 功能集编译运行时时,将启用所有列为依赖项的托盘中的 std 功能。 有关如何使用标准库将运行时编译为原生 Rust 二进制文件以及使用 no_std 属性编译为WebAssembly二进制文件的更多详细信息,请参阅构建运行时。

如果您忘记更新 Cargo.toml 文件中的 features 部分,您可能会在编译运行时二进制文件时看到找不到函数错误。

5.通过运行以下命令检查新依赖项是否正确解析:

cargo check -p node-template-runtime