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

Method processProposalMsg

consensus/vbft/service.go:1087–1185  ·  view source on GitHub ↗
(msg *blockProposalMsg)

Source from the content-addressed store, hash-verified

1085}
1086
1087func (self *Server) processProposalMsg(msg *blockProposalMsg) {
1088 msgBlkNum := msg.GetBlockNum()
1089 blk, prevBlkHash := self.blockPool.getSealedBlock(msg.GetBlockNum() - 1)
1090 if blk == nil {
1091 log.Errorf("BlockProposal failed to GetPreBlock:%d", (msg.GetBlockNum() - 1))
1092 return
1093 }
1094
1095 msgPrevBlkHash := msg.Block.getPrevBlockHash()
1096 if prevBlkHash != msgPrevBlkHash {
1097 log.Errorf("BlockPrposalMessage check blocknum:%d,prevhash:%s,msg prevhash:%s", msg.GetBlockNum(), prevBlkHash.ToHexString(), msgPrevBlkHash.ToHexString())
1098 self.msgPool.DropMsg(msg)
1099 return
1100 }
1101 if self.LastConfigBlockNum != math.MaxUint32 && blk.Info.LastConfigBlockNum != self.LastConfigBlockNum {
1102 log.Errorf("BlockPrposalMessage check LastConfigBlockNum blocknum:%d,prvLastConfigBlockNum:%d,self LastConfigBlockNum:%d", msg.GetBlockNum(), blk.Info.LastConfigBlockNum, self.LastConfigBlockNum)
1103 return
1104 }
1105 merkleRoot, err := self.blockPool.getExecMerkleRoot(msgBlkNum - 1)
1106 if err != nil {
1107 log.Errorf("failed to GetExecMerkleRoot: %s,blkNum:%d", err, (msgBlkNum - 1))
1108 return
1109 }
1110 if msg.Block.getPrevBlockMerkleRoot() != merkleRoot {
1111 self.msgPool.DropMsg(msg)
1112 msgMerkleRoot := msg.Block.getPrevBlockMerkleRoot()
1113 log.Errorf("BlockPrposalMessage check MerkleRoot blocknum:%d,msg MerkleRoot:%s,self MerkleRoot:%s", msg.GetBlockNum(), msgMerkleRoot.ToHexString(), merkleRoot.ToHexString())
1114 return
1115 }
1116 cfg := vconfig.ChainConfig{}
1117 if blk.getNewChainConfig() != nil {
1118 cfg = *blk.getNewChainConfig()
1119 if cfg.Hash() != self.config.Hash() {
1120 log.Errorf("processProposalMsg chainconfig unqeual to blockinfo cfg,view:(%d,%d),N:(%d,%d),C:(%d,%d),BlockMsgDelay:(%d,%d),HashMsgDelay:(%d,%d),PeerHandshakeTimeout:(%d,%d),posTable:(%v,%v),MaxBlockChangeView:(%d,%d)", cfg.View, self.config.View, cfg.N, self.config.N, cfg.C,
1121 self.config.C, cfg.BlockMsgDelay, self.config.BlockMsgDelay, cfg.HashMsgDelay, self.config.HashMsgDelay, cfg.PeerHandshakeTimeout, self.config.PeerHandshakeTimeout, cfg.PosTable, self.config.PosTable, cfg.MaxBlockChangeView, self.config.MaxBlockChangeView)
1122 self.msgPool.DropMsg(msg)
1123 return
1124 }
1125 }
1126
1127 prevBlockTimestamp := blk.Block.Header.Timestamp
1128 currentBlockTimestamp := msg.Block.Block.Header.Timestamp
1129 if currentBlockTimestamp <= prevBlockTimestamp || currentBlockTimestamp > uint32(time.Now().Add(time.Minute*10).Unix()) {
1130 log.Errorf("BlockPrposalMessage check blocknum:%d,prevBlockTimestamp:%d,currentBlockTimestamp:%d", msg.GetBlockNum(), prevBlockTimestamp, currentBlockTimestamp)
1131 self.msgPool.DropMsg(msg)
1132 return
1133 }
1134
1135 // verify VRF
1136 proposerPk := self.peerPool.GetPeerPubKey(msg.Block.getProposer())
1137 if proposerPk == nil {
1138 log.Errorf("server %d failed to get proposer %d pk of block %d",
1139 self.Index, msg.Block.getProposer(), msgBlkNum)
1140 self.msgPool.DropMsg(msg)
1141 return
1142 }
1143 if err := verifyVrf(proposerPk, msgBlkNum, blk.getVrfValue(), msg.Block.getVrfValue(), msg.Block.getVrfProof()); err != nil {
1144 log.Errorf("server %d failed to verify vrf of block %d proposal from %d",

Callers 4

startNewRoundMethod · 0.95
onConsensusMsgMethod · 0.95
makeProposalMethod · 0.95
catchConsensusMethod · 0.95

Calls 15

HashMethod · 0.95
nonSystxsMethod · 0.95
processConsensusMsgMethod · 0.95
ErrorfFunction · 0.92
InfofFunction · 0.92
verifyVrfFunction · 0.85
getSealedBlockMethod · 0.80
getPrevBlockHashMethod · 0.80
DropMsgMethod · 0.80
getNewChainConfigMethod · 0.80
AddMethod · 0.80

Tested by

no test coverage detected