24-substrate入门之授权特定节点
授权特定节点
在添加受信任节点
中,您了解了如何使用一组已知的验证器节点构建一个简单的网络。 该教程说明了许可网络的简化版本。 在许可网络中,只有被授权的节点才被允许执行特定的网络活动。 例如,您可以授予某些节点验证区块的权限,而授予其他节点传播事务的权限。
具有被授予特定权限的节点的区块链不同于公共或无权限的区块链。 在无需许可的区块链中,任何人都可以通过在合适的硬件上运行节点软件来加入网络。 一般来说,无需许可的区块链提供了更大的网络去中心化。 但是,在某些用例中,创建许可区块链可能是合适的。 例如,许可区块链适用于以下类型的项目:
- 对于私人或财团网络,例如私人企业或非营利组织。
- 在高度监管的数据环境中,例如医疗保健、金融或企业对企业分类账。
- 用于大规模测试公共区块链网络。
本教程说明了如何使用节点授权托盘使用 Substrate 构建许可网络。
##节点授权和所有权
节点授权托盘是一个预构建的 FRAME
托盘,使您能够管理网络的一组可配置节点。 每个节点都由一个 PeerId
标识。 每个 PeerId
由一个且唯一一个声明该节点的 AccountId
拥有。
您可以通过两种方式授权节点加入网络:
通过将 PeerId
添加到预定义节点列表中。 您必须获得网络中的治理或 sudo 托盘的批准才能执行此操作。
通过从特定节点请求配对的对等连接。 此节点可以是预定义节点 PeerId
或普通节点。
请注意,任何用户都可以声称自己是 PeerId
的所有者。 为了防止虚假声明,您应该在启动节点之前声明节点。 启动节点后,它的 PeerID
对网络可见,任何人随后都可以认领它。
在你开始之前
在开始之前,请验证以下内容:
-
通过安装
Rust
和Rust
工具链,您已经为 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