返回

利用 Fabric 获取网络创世区块深入区块链构建

后端

在本文中,我们将详细探讨如何利用 Fabric 获取网络创世区块,并深入探究 Fabric 的区块链构建。

首先,让我们从获取通道最新配置区块开始。您可以使用以下命令来获取通道的最新配置区块:

peer channel fetch config config_block.pb -o orderer.example.com:7050 -c mychannel

在执行该命令后,您将在当前目录中找到名为 config_block.pb 的文件。该文件包含通道的最新配置区块。接下来,我们需要将 config_block.pb 转换成可读的 json 格式。我们可以使用以下命令来完成此操作:

configtxlator proto_decode --type common.Block config_block.pb config.json

执行此命令后,您将在当前目录中找到名为 config.json 的文件。该文件包含通道最新配置区块的可读 json 格式。

config.json 的结构如下:

{
  "BlockData": {
    "Data": [],
    "PreviousHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
  },
  "Envelope": {
    "Payload": {
      "ChannelHeader": {
        "ChannelId": "mychannel",
        "Epoch": 0,
        "Type": 2,
        "Version": 1
      },
      "SignatureHeader": {
        "Creator": {
          "Mspid": "Org1MSP",
          "IdBytes": "AQECA0xA0FEHpwylFAVv/QFwhGq+3mVGJq2SEzC+Dz54="
        },
        "Nonce": "F+5CMWDFzZkg9qyxn5A==",
        "Signature": "MEUCIQCiUIlW61/C877j5ie6I22ZiE2YAQD35sC9k8AZ1F+2AIgBsXhwUgs1wrX2GgoP5Cq6nxJOpbDf/PnzuPTLWexPA="
      },
      "ConfigUpdate": {
        "ChannelId": "mychannel",
        "IsolatedData": [],
        "ReadSet": {
          "Blocks": [
            {
              "BlockNum": 0,
              "DataHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
            }
          ],
          "ConfigGroups": {}
        },
        "WriteSet": {
          "Blocks": [
            {
              "BlockNum": 1,
              "DataHash": "0x4e6a2184e1f7744347b63e733f017322d3396f3d897524c30143c22f90c82700"
            }
          ],
          "ConfigGroups": {
            "Application": {
              "Groups": {
                "Org1MSP": {
                  "Groups": {},
                  "Policies": {
                    "Readers": {
                      "Type": "Signature",
                      "Rule": "OR('Org1MSP.member')"
                    },
                    "Writers": {
                      "Type": "Signature",
                      "Rule": "OR('Org1MSP.member')"
                    }
                  },
                  "Values": {}
                }
              },
              "Policies": {
                "Readers": {
                  "Type": "ImplicitMetaPolicy",
                  "Rule": "ANY Readers"
                },
                "Writers": {
                  "Type": "ImplicitMetaPolicy",
                  "Rule": "ANY Writers"
                }
              },
              "Values": {}
            },
            "Consortiums": {
              "Groups": {},
              "Policies": {},
              "Values": {}
            },
            "Orderer": {
              "Groups": {
                "OrdererOrg": {
                  "Groups": {},
                  "Policies": {
                    "BlockValidation": {
                      "Type": "Signature",
                      "Rule": "OR('OrdererOrg.member')"
                    },
                    "Readers": {
                      "Type": "Signature",
                      "Rule": "OR('OrdererOrg.member')"
                    },
                    "Writers": {
                      "Type": "Signature",
                      "Rule": "OR('OrdererOrg.member')"
                    }
                  },
                  "Values": {}
                }
              },
              "Policies": {
                "BlockValidation": {
                  "Type": "ImplicitMetaPolicy",
                  "Rule": "ANY BlockValidation"
                },
                "Readers": {
                  "Type": "ImplicitMetaPolicy",
                  "Rule": "ANY Readers"
                },
                "Writers": {
                  "Type": "ImplicitMetaPolicy",
                  "Rule": "ANY Writers"
                }
              },
              "Values": {}
            }
          }
        }
      }
    },
    "Signature": "MEUCIQCd1cdX04/Jmp9uCx/yCbtk94AjYSBhnrOnCHlgyuBlAIgHuk4jsW4c/3GiW74u4ZobvCCFfg0byPIdd+bePf5hg="
  },
  "Header": {
    "Number": 1,
    "PreviousHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "DataHash": "0x4e6a2184e1f7744347b63e733f017322d3396f3d897524c30143c22f90c82700"
  }
}

在 config.json 文件中,您可以找到有关通道的各种信息,例如通道 ID、通道当前的配置、通道中的组织等。

如果您需要了解有关 Fabric 获取网络创世区块的更多信息,可以参阅以下资源:

掌握这些知识,您将能够更深入地了解 Fabric 的区块链构建,并能够开发出更加强大的 Fabric 应用。