github.com/kaituanwang/hyperledger@v2.0.1+incompatible/orderer/consensus/etcdraft/blockcreator.go (about) 1 /* 2 Copyright IBM Corp. 2017 All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package etcdraft 8 9 import ( 10 "github.com/golang/protobuf/proto" 11 cb "github.com/hyperledger/fabric-protos-go/common" 12 "github.com/hyperledger/fabric/common/flogging" 13 "github.com/hyperledger/fabric/protoutil" 14 ) 15 16 // blockCreator holds number and hash of latest block 17 // so that next block will be created based on it. 18 type blockCreator struct { 19 hash []byte 20 number uint64 21 22 logger *flogging.FabricLogger 23 } 24 25 func (bc *blockCreator) createNextBlock(envs []*cb.Envelope) *cb.Block { 26 data := &cb.BlockData{ 27 Data: make([][]byte, len(envs)), 28 } 29 30 var err error 31 for i, env := range envs { 32 data.Data[i], err = proto.Marshal(env) 33 if err != nil { 34 bc.logger.Panicf("Could not marshal envelope: %s", err) 35 } 36 } 37 38 bc.number++ 39 40 block := protoutil.NewBlock(bc.number, bc.hash) 41 block.Header.DataHash = protoutil.BlockDataHash(data) 42 block.Data = data 43 44 bc.hash = protoutil.BlockHeaderHash(block.Header) 45 return block 46 }