MCPcopy Create free account
hub / github.com/DNAProject/DNA / commitBlock

Method commitBlock

consensus/vbft/service.go:1958–2016  ·  view source on GitHub ↗
(proposal *blockProposalMsg, forEmpty bool)

Source from the content-addressed store, hash-verified

1956}
1957
1958func (self *Server) commitBlock(proposal *blockProposalMsg, forEmpty bool) error {
1959 // for each round, we can only commit one block
1960 if proposal.Block.getProposer() == self.Index {
1961 return nil
1962 }
1963 blkNum := proposal.GetBlockNum()
1964 if self.blockPool.committedForBlock(blkNum) {
1965 return nil
1966 }
1967
1968 var blkHash common.Uint256
1969 if !forEmpty {
1970 blkHash = proposal.Block.Block.Hash()
1971 } else {
1972 if proposal.Block.EmptyBlock == nil {
1973 return fmt.Errorf("blk %d proposal from %d has no empty proposal", blkNum, proposal.Block.getProposer())
1974 }
1975 blkHash = proposal.Block.EmptyBlock.Hash()
1976 }
1977
1978 endorses := make([]*blockEndorseMsg, 0)
1979 for _, msg := range self.msgPool.GetEndorsementsMsgs(blkNum) {
1980 if e := msg.(*blockEndorseMsg); e != nil {
1981 if bytes.Compare(blkHash[:], e.EndorsedBlockHash[:]) == 0 && e.EndorseForEmpty == forEmpty {
1982 endorses = append(endorses, e)
1983 }
1984 }
1985 }
1986
1987 // build commit msg
1988 commitMsg, err := self.constructCommitMsg(proposal, endorses, forEmpty)
1989 if err != nil {
1990 return fmt.Errorf("failed to construct commit msg: %s", err)
1991 }
1992
1993 // set the block as committed-block
1994 if err := self.blockPool.setProposalCommitted(proposal, forEmpty); err != nil {
1995 return fmt.Errorf("failed to set proposal as committed: %s", err)
1996 }
1997
1998 self.processConsensusMsg(commitMsg)
1999 // if node is committer of current round
2000 if forEmpty || self.isCommitter(blkNum, self.Index) {
2001 h, _ := HashMsg(commitMsg)
2002 self.msgPool.AddMsg(commitMsg, h)
2003 log.Infof("committer %d, set block %d committed, from server %d",
2004 self.Index, blkNum, proposal.Block.getProposer())
2005 // broadcast my commitment
2006 self.broadcast(commitMsg)
2007 return nil
2008 }
2009
2010 // start commit timer
2011 // TODO: committing may have reached consensus before received endorsement, handle this
2012 if err := self.timer.StartCommitTimer(blkNum); err != nil {
2013 return fmt.Errorf("commitBlock startcommittimer err: %s", err)
2014 }
2015 return nil

Callers 3

actionLoopMethod · 0.95
makeCommitmentMethod · 0.95
catchConsensusMethod · 0.95

Calls 15

constructCommitMsgMethod · 0.95
processConsensusMsgMethod · 0.95
isCommitterMethod · 0.95
broadcastMethod · 0.95
InfofFunction · 0.92
HashMsgFunction · 0.85
getProposerMethod · 0.80
committedForBlockMethod · 0.80
ErrorfMethod · 0.80
GetEndorsementsMsgsMethod · 0.80
setProposalCommittedMethod · 0.80
AddMsgMethod · 0.80

Tested by

no test coverage detected