区块链教程Fabric1.0源代码配置交易系统通道创世区块

兄弟连区块链教程Fabric1.0源代码分析配置交易系统通道创世区块,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。

# Fabric 1.0源代码笔记 之 configtx(配置交易) #genesis(系统通道创世区块)

## 1、genesis概述

genesis,即创世区块,此处特指系统通道的创世区块。

相关代码在common/genesis/genesis.go,即Factory接口及实现。

## 2、Factory接口定义

```go

type Factory interface {

Block(channelID string) (*cb.Block, error)

}

//代码在common/genesis/genesis.go

```

## 3、Factory接口实现

```go

msgVersion = int32(1)

epoch = 0

type factory struct {

template configtx.Template

}

func NewFactoryImpl(template configtx.Template) Factory {

return &factory

}

func (f *factory) Block(channelID string) (*cb.Block, error) {

configEnv, err := f.template.Envelope(channelID)

configUpdate := &cb.ConfigUpdate{}

err = proto.Unmarshal(configEnv.ConfigUpdate, configUpdate)

payloadChannelHeader := utils.MakeChannelHeader(cb.HeaderType_CONFIG, msgVersion, channelID, epoch)

payloadSignatureHeader := utils.MakeSignatureHeader(nil, utils.CreateNonceOrPanic())

utils.SetTxID(payloadChannelHeader, payloadSignatureHeader)

payloadHeader := utils.MakePayloadHeader(payloadChannelHeader, payloadSignatureHeader)

payload := &cb.Payload})}

envelope := &cb.Envelope

block := cb.NewBlock(0, nil)

block.Data = &cb.BlockData}

block.Header.DataHash = block.Data.Hash()

block.Metadata.Metadata[cb.BlockMetadataIndex_LAST_CONFIG] = utils.MarshalOrPanic(&cb.Metadata{

Value: utils.MarshalOrPanic(&cb.LastConfig),

})

return block, nil

}

//代码在common/genesis/genesis.go

```

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181030A12WEX00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券