没有链码的创世块?

Genesis block without chaincode?

我的目的是复制 Marbles application, a Hyperledger demo. Using instructions from here,我能够在我的 Ubuntu VM 上设置区块链网络。但是,我没有部署链码。当我调用 API 读取链时,我得到了一个块;我认为这是创世块。还有一些日志列表也差不多。

我的问题如下。如果我对 运行 区块链的意图是启动分布式应用程序(例如 Marbles),那么在没有部署链代码的情况下,为什么要开采创世块?在没有部署链码的情况下,区块链网络无法处理任何交易,因此,区块中不可能(应该)存在任何交易。

那么,为什么在没有部署链代码的情况下开采创世块?

你是对的,创世块是由验证节点自动创建为账本中的第一个块。 它不包含任何交易,并且具有独特的格式。一个例子是:

{"nonHashData":{"localLedgerCommitTimestamp":{"seconds":1469225503,"nanos":346624842}}}

如您所见,其中没有“previousBlockHash”属性。您可以使用 ledger.blockchain.genesisBlock:

在 core.yaml 文件中自定义此块的内容
ledger:

  blockchain:

    # Define the genesis block
    genesisBlock:

      # Deploy chaincodes into the genesis block
      chaincode:
          path: github.com/hyperledger/fabric/core/example/chaincode/chaincode_example01
          type: GOLANG
          constructor:
            func: init
            args:
              - alice
              - "4"
              - bob
              - "10"