1

我的目的是复制Marbles 应用程序,一个 Hyperledger 演示。使用此处的说明,我能够在我的 Ubuntu VM 上设置区块链网络。但是,我还没有部署链代码。当我调用 API 读取链时,我得到了一个块;我认为这是创世区块。有一些日志列表也大致相同。

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

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

4

1 回答 1

2

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

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

如您所见,它没有“previousBlockHash”属性。您可以使用以下命令在 core.yaml 文件中自定义此块的内容ledger.blockchain.genesisBlock

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"  
于 2016-07-28T08:33:30.593 回答