hyperledger Fabric - channel.tx 和 genesis.block 非常不清楚
Posted
技术标签:
【中文标题】hyperledger Fabric - channel.tx 和 genesis.block 非常不清楚【英文标题】:hyperledger Fabric - channel.tx and genesis.block very unclear 【发布时间】:2020-04-05 14:19:57 【问题描述】:下周我将使用 Hyperledger Fabric 开始一个新的区块链项目。我对 configtx 二进制文件有疑问。
我们使用这个二进制文件来创建一个 channel.tx 和一个 genesis.block。我已经阅读了文档,观看了教程并查看了互联网,但我仍然不明白为什么需要 genesis.block 和 channel.tx 以及为什么要这样创建它。例如:genesis.block不应该在包含通道配置的区块链中吗?
【问题讨论】:
【参考方案1】:一个简化的答案:
创世区块被称为第一个区块。
通道中的第一个(创世)区块是channel.tx(通道配置交易)。它只包含频道名称以及允许使用该频道的联盟。
orderer 创世块是在 orderer 启动时配置它的东西。它包含每个组织的 MSP ID,这些 MSP ID 是联盟的一部分,以及每个 MSP ID 的受信任证书。
订购者需要有关组织的信息,因为订购者批准创建新渠道。频道创建请求必须来自受信任的实体(组织的一部分),否则将不会创建频道。
由于你不能在没有 orderer 批准的情况下在 channel 中修改(执行交易),所以只让 orderer 拥有网络信息是有意义的。这样一来,您就不会冒着在渠道/订购者之间出现不一致信息的风险,以防万一发生任何变化。
所有 Fabric 块都使用 protobuf 进行编码/序列化,因为内部通信依赖于 gRPC。因此,块是 binary 格式。
【讨论】:
【参考方案2】:这样想,如果你想改变区块链系统的配置,你会怎么做?关闭所有主机,编辑它们的配置并一一重启?那将是荒谬的,因为我们说区块链是去中心化的,没有人可以控制所有的主机。动态更改配置的唯一方法是在线达成共识。那么如何在线达成共识,显然,答案是使用交易(tx)。对于frabric中区块链的初始化,我们可以使用相同的方式,即channel.tx和genesis.block,通过重用编辑配置的逻辑来消除初始化成本。同时,tx 应该放在一个块中,这就是 genesis.block 存在的原因。
【讨论】:
感谢您的回复。我理解与配置相关的共识概念。但我不明白的是 channel.tx 包括什么?它是用来做什么的?对于通道配置?那么网络配置呢?任何地方都没有文件..希望你能帮助我! hyperledger-fabric.readthedocs.io/en/latest/build_network.html 你可以在这个网站上找到一些信息。我建议您阅读 fabric 给出的示例中的 byfn.sh。而channel.tx中包含的内容是由configtx.yaml生成的,这是一种易于阅读和理解的文件。以上是关于hyperledger Fabric - channel.tx 和 genesis.block 非常不清楚的主要内容,如果未能解决你的问题,请参考以下文章