區塊鏈教程Fabric1.0源代碼分析configtx#genesis
阿新 • • 發佈:2018-10-30
相關 payload onf ror ann clas make prot nes 區塊鏈教程Fabric1.0源代碼分析configtx#genesis,2018年下半年,區塊鏈行業正逐漸褪去發展之初的浮躁、回歸理性,表面上看相關人才需求與身價似乎正在回落。但事實上,正是初期泡沫的漸退,讓人們更多的關註點放在了區塊鏈真正的技術之上。
Fabric 1.0源代碼筆記 之 configtx(配置交易) #genesis(系統通道創世區塊)
1、genesis概述
genesis,即創世區塊,此處特指系統通道的創世區塊。
相關代碼在common/genesis/genesis.go,即Factory接口及實現。
2、Factory接口定義
type Factory interface { ????Block(channelID string) (*cb.Block, error) } //代碼在common/genesis/genesis.go
3、Factory接口實現
msgVersion = int32(1) epoch = 0 type factory struct { ????template configtx.Template } func NewFactoryImpl(template configtx.Template) Factory { ????return &factory{template: template} } 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{Header: payloadHeader, Data: utils.MarshalOrPanic(&cb.ConfigEnvelope{Config: &cb.Config{ChannelGroup: configUpdate.WriteSet}})} ????envelope := &cb.Envelope{Payload: utils.MarshalOrPanic(payload), Signature: nil} ????block := cb.NewBlock(0, nil) ????block.Data = &cb.BlockData{Data: [][]byte{utils.MarshalOrPanic(envelope)}} ????block.Header.DataHash = block.Data.Hash() ????block.Metadata.Metadata[cb.BlockMetadataIndex_LAST_CONFIG] = utils.MarshalOrPanic(&cb.Metadata{ ????????Value: utils.MarshalOrPanic(&cb.LastConfig{Index: 0}), ????}) ????return block, nil } //代碼在common/genesis/genesis.go
區塊鏈教程Fabric1.0源代碼分析configtx#genesis