Hyperledger FabriC语言 channel.tx 和 genesis.block 非常不清楚



下周我将开始使用Hyperledger Fabric进行一个新的区块链项目。我有一个关于configtx二进制文件的问题。

我们使用此二进制文件来创建 channel.tx 和 genesis.block。我已经阅读了文档,观看了教程并在互联网上查看了内容,但我仍然不明白为什么需要genesis.block和channel.tx以及为什么像这样创建它。例如:genesis.block不应该在区块链中,包括通道配置吗?

简化的答案:

创世区块称为第一个区块。

通道中的第一个(创世(块是channel.tx(通道配置事务(。它只包含通道的名称以及允许使用该通道的联盟

排序器创世块是在启动时配置排序器。它包含每个组织的 MSP ID(MSP ID 是联盟的一部分(以及每个 MSP ID 的受信任证书。

排序者需要有关组织的信息,因为排序者批准创建新渠道。通道创建请求必须来自受信任的实体(组织的一部分(,否则将不会创建通道。

由于您无法在没有排序者批准的情况下在通道中修改(执行事务(,因此仅让排序者拥有网络信息是有意义的。这样,您就不会冒着渠道/订购者之间信息不一致的风险,以防发生任何变化。

所有结构块都使用 protobuf 进行编码/序列化,因为内部通信依赖于 gRPC。因此,块采用二进制格式。

这样想,如果要更改区块链系统的配置,您会怎么做? 关闭所有主机,编辑其配置并逐个重新启动它们?那将是可笑的,因为我们说区块链是去中心化的,没有人可以控制所有的主机。动态更改配置的唯一方法是在线达成共识。那么如何在网上达成共识,显然,答案是使用交易(tx(。至于 frabric 中区块链的初始化,我们可以使用相同的方式,即 channel.tx 和 genesis.block,通过重用编辑配置的逻辑来消除初始化的成本。同时,tx应该放在一个块中,所以这就是genesis.block存在的原因。

最新更新