1、读取配置文件,pgen, err := encoder.NewBootstrapper(config)
2、通过channelID生成block,genesisBlock := pgen.GenesisBlockForChannel(channelID)
2.1、 生成channelHeader protoutil.MakeChannelHeader(cb.HeaderType_CONFIG, msgVersion, channelID, epoch),主要是通过时间戳+channelID,其他值都是固定值
2.2、生成一次性签名 protoutil.MakeSignatureHeader(nil, protoutil.CreateNonceOrPanic())
2.3、生成交易ID protoutil.SetTxID(payloadChannelHeader, payloadSignatureHeader)
2.4、生成Header protoutil.MakePayloadHeader(payloadChannelHeader, payloadSignatureHeader)
2.5、生成payload payload := &cb.Payload{Header: payloadHeader, Data: protoutil.MarshalOrPanic(&cb.ConfigEnvelope{Config: &cb.Config{ChannelGroup: f.channelGroup}})}
ChannelGroup = 组织等信息
2.6、填充并返回block (这里是没有previousHash)
block.Data = payload
block.Header.DataHash = sha256.Sum256(block.Data)
block.Metadata.Metadata
3、输出文件,err = writeFile(outputBlock, protoutil.MarshalOrPanic(genesisBlock), 0640)
注意:
viper版本过高会导致娶不到yaml中的值