2016-07-28 51 views
1

我的意图是复制一个Hyperledger演示Marbles application。使用here的说明,我可以在我的Ubuntu VM上设置区块链网络。但是,我没有部署链码。当我调用API读取链时,我得到了一个块;我认为这是起始块。还有一些关于同样的日志列表。创世纪块没有chaincode?

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

那么,为什么在没有链码的情况下开采块会被开采呢?

回答

2

您是对的,创世区块是由验证对象自动创建为分类帐中的第一个区块。 它不包含任何包含的交易和具有独特的格式。一个例子是:

{"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" 
+0

谢谢。你认为哪些场景会受益于一个环境,即创世区块应该至少有一个交易(即为创世区块种下种子)? – cogitoergosum

+0

第一笔交易只能是“部署”(答案以示例更新)。如果我们想在第一次启动时部署某些内容,或者稍后手动进行部署,则我们可以选择。 –

+0

非常感谢您的解释! – cogitoergosum

相关问题