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

Method processMsgEvent

consensus/vbft/service.go:1193–1377  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

1191}
1192
1193func (self *Server) processMsgEvent() error {
1194 select {
1195 case msg := <-self.msgC:
1196
1197 log.Debugf("server %d process msg, block %d, type %d, current blk %d",
1198 self.Index, msg.GetBlockNum(), msg.Type(), self.GetCurrentBlockNo())
1199
1200 switch msg.Type() {
1201 case BlockProposalMessage:
1202 pMsg := msg.(*blockProposalMsg)
1203
1204 if err := self.validateTxsInProposal(pMsg); err != nil {
1205 // TODO: report faulty proposal
1206 return fmt.Errorf("failed to validate tx in proposal: %s", err)
1207 }
1208
1209 msgBlkNum := pMsg.GetBlockNum()
1210 if msgBlkNum == self.GetCurrentBlockNo() {
1211 // add proposal to block-pool
1212 if err := self.blockPool.newBlockProposal(pMsg); err != nil {
1213 if err == errDupProposal {
1214 // TODO: faulty proposer detected
1215 }
1216 log.Errorf("failed to add block proposal (%d): %s", msgBlkNum, err)
1217 return nil
1218 }
1219
1220 if self.isProposer(msgBlkNum, pMsg.Block.getProposer()) {
1221 // check if agreed on prev-blockhash
1222 if err := self.verifyPrevBlockHash(msgBlkNum, pMsg); err != nil {
1223 // continue
1224 log.Errorf("failed verify prevBlockHash from proposer %d, blk %d",
1225 pMsg.Block.getProposer(), msgBlkNum)
1226 return nil
1227 }
1228
1229 // stop proposal timer
1230 self.timer.CancelProposalTimer(msgBlkNum)
1231 if self.isEndorser(msgBlkNum, self.Index) {
1232 if err := self.endorseBlock(pMsg, false); err != nil {
1233 log.Errorf("failed to endorse block proposal (%d): %s", msgBlkNum, err)
1234 }
1235 }
1236 } else {
1237 if self.isProposer(msgBlkNum, self.Index) {
1238 for _, msg := range self.msgPool.GetProposalMsgs(msgBlkNum) {
1239 p := msg.(*blockProposalMsg)
1240 if p != nil && p.Block.getProposer() == self.Index {
1241 log.Infof("server %d rebroadcast proposal to %d, blk %d",
1242 self.Index, pMsg.Block.getProposer(), msgBlkNum)
1243 self.broadcast(msg)
1244 break
1245 }
1246 }
1247 }
1248 // makeProposalTimeout handles non-leader proposals
1249 }
1250 } else {

Callers 1

initializeMethod · 0.95

Calls 15

GetCurrentBlockNoMethod · 0.95
validateTxsInProposalMethod · 0.95
isProposerMethod · 0.95
verifyPrevBlockHashMethod · 0.95
isEndorserMethod · 0.95
endorseBlockMethod · 0.95
broadcastMethod · 0.95
findBlockProposalMethod · 0.95
isCommitterMethod · 0.95
makeCommitmentMethod · 0.95
makeSealedMethod · 0.95
DebugfFunction · 0.92

Tested by

no test coverage detected