@@ -33,7 +33,6 @@ type subroundEndRound struct {
3333 sentSignatureTracker spos.SentSignaturesTracker
3434 worker spos.WorkerHandler
3535 signatureThrottler core.Throttler
36- blockCommitted bool
3736}
3837
3938// NewSubroundEndRound creates a subroundEndRound object
@@ -70,7 +69,6 @@ func NewSubroundEndRound(
7069 sentSignatureTracker : sentSignatureTracker ,
7170 worker : worker ,
7271 signatureThrottler : signatureThrottler ,
73- blockCommitted : false ,
7472 }
7573 srEndRound .Job = srEndRound .doEndRoundJob
7674 srEndRound .Check = srEndRound .doEndRoundConsensusCheck
@@ -116,7 +114,7 @@ func (sr *subroundEndRound) receivedProof(proof consensus.ProofHandler) {
116114 return
117115 }
118116
119- // no need to re-verify the proof if as it was already verified when it was added to the proofs pool
117+ // no need to re-verify the proof since it was already verified when it was added to the proofs pool
120118 log .Debug ("step 3: block header final info has been received" ,
121119 "PubKeysBitmap" , proof .GetPubKeysBitmap (),
122120 "AggregateSignature" , proof .GetAggregatedSignature (),
@@ -224,11 +222,7 @@ func (sr *subroundEndRound) doEndRoundJob(_ context.Context) bool {
224222 return sr .doEndRoundJobByNode ()
225223}
226224
227- func (sr * subroundEndRound ) commitBlock (proof data.HeaderProofHandler ) error {
228- if sr .blockCommitted {
229- return nil
230- }
231-
225+ func (sr * subroundEndRound ) commitBlock () error {
232226 startTime := time .Now ()
233227 err := sr .BlockProcessor ().CommitBlock (sr .GetHeader (), sr .GetBody ())
234228 elapsedTime := time .Since (startTime )
@@ -242,14 +236,6 @@ func (sr *subroundEndRound) commitBlock(proof data.HeaderProofHandler) error {
242236 return err
243237 }
244238
245- if proof != nil {
246- err = sr .EquivalentProofsPool ().AddProof (proof )
247- if err != nil {
248- log .Debug ("doEndRoundJobByNode.AddProof" , "error" , err )
249- return err
250- }
251- }
252-
253239 return nil
254240}
255241
@@ -262,11 +248,21 @@ func (sr *subroundEndRound) doEndRoundJobByNode() bool {
262248 defer sr .mutProcessingEndRound .Unlock ()
263249
264250 proof := sr .sendProof ()
265- err := sr .commitBlock (proof )
251+
252+ err := sr .commitBlock ()
266253 if err != nil {
267254 return false
268255 }
269256
257+ // if proof not nil, it was created and broadcasted so it has to be added to the pool
258+ if proof != nil {
259+ err = sr .EquivalentProofsPool ().AddProof (proof )
260+ if err != nil {
261+ log .Debug ("doEndRoundJobByNode.AddProof" , "error" , err )
262+ return false
263+ }
264+ }
265+
270266 sr .SetStatus (sr .Current (), spos .SsFinished )
271267
272268 sr .worker .DisplayStatistics ()
@@ -314,7 +310,7 @@ func (sr *subroundEndRound) sendProof() data.HeaderProofHandler {
314310 return nil
315311 }
316312
317- // broadcast header and final info section
313+ // broadcast header proof
318314 return sr .createAndBroadcastProof (sig , bitmap )
319315}
320316
@@ -341,6 +337,7 @@ func (sr *subroundEndRound) aggregateSigsAndHandleInvalidSigners(bitmap []byte)
341337 return nil , nil , err
342338 }
343339
340+ // the header (hash) verified here is with leader signature on it
344341 err = sr .SigningHandler ().Verify (sr .GetData (), bitmap , sr .GetHeader ().GetEpoch ())
345342 if err != nil {
346343 log .Debug ("doEndRoundJobByNode.Verify" , "error" , err .Error ())
@@ -470,15 +467,16 @@ func (sr *subroundEndRound) handleInvalidSignersOnAggSigFail() ([]byte, []byte,
470467 return nil , nil , err
471468 }
472469
473- invalidSigners , err : = sr .getFullMessagesForInvalidSigners (invalidPubKeys )
470+ _ , err = sr .getFullMessagesForInvalidSigners (invalidPubKeys )
474471 if err != nil {
475472 log .Debug ("doEndRoundJobByNode.getFullMessagesForInvalidSigners" , "error" , err .Error ())
476473 return nil , nil , err
477474 }
478475
479- if len (invalidSigners ) > 0 {
480- sr .createAndBroadcastInvalidSigners (invalidSigners )
481- }
476+ // TODO: handle invalid signers broadcast without flooding the network
477+ // if len(invalidSigners) > 0 {
478+ // sr.createAndBroadcastInvalidSigners(invalidSigners)
479+ // }
482480
483481 bitmap , sig , err := sr .computeAggSigOnValidNodes ()
484482 if err != nil {
@@ -544,7 +542,7 @@ func (sr *subroundEndRound) createAndBroadcastProof(signature []byte, bitmap []b
544542}
545543
546544func (sr * subroundEndRound ) createAndBroadcastInvalidSigners (invalidSigners []byte ) {
547- if ! sr .IsSelfLeader () {
545+ if ! sr .ShouldConsiderSelfKeyInConsensus () {
548546 return
549547 }
550548
@@ -580,115 +578,13 @@ func (sr *subroundEndRound) createAndBroadcastInvalidSigners(invalidSigners []by
580578 log .Debug ("step 3: invalid signers info has been sent" )
581579}
582580
583- func (sr * subroundEndRound ) isConsensusHeaderReceived () (bool , data.HeaderHandler ) {
584- if check .IfNil (sr .GetHeader ()) {
585- return false , nil
586- }
587-
588- consensusHeaderHash , err := core .CalculateHash (sr .Marshalizer (), sr .Hasher (), sr .GetHeader ())
589- if err != nil {
590- log .Debug ("isConsensusHeaderReceived: calculate consensus header hash" , "error" , err .Error ())
591- return false , nil
592- }
593-
594- receivedHeaders := sr .GetReceivedHeaders ()
595-
596- var receivedHeaderHash []byte
597- for index := range receivedHeaders {
598- // TODO[cleanup cns finality]: remove this
599- receivedHeader := receivedHeaders [index ].ShallowClone ()
600- if ! sr .EnableEpochsHandler ().IsFlagEnabledInEpoch (common .EquivalentMessagesFlag , receivedHeader .GetEpoch ()) {
601- err = receivedHeader .SetLeaderSignature (nil )
602- if err != nil {
603- log .Debug ("isConsensusHeaderReceived - SetLeaderSignature" , "error" , err .Error ())
604- return false , nil
605- }
606-
607- err = receivedHeader .SetPubKeysBitmap (nil )
608- if err != nil {
609- log .Debug ("isConsensusHeaderReceived - SetPubKeysBitmap" , "error" , err .Error ())
610- return false , nil
611- }
612-
613- err = receivedHeader .SetSignature (nil )
614- if err != nil {
615- log .Debug ("isConsensusHeaderReceived - SetSignature" , "error" , err .Error ())
616- return false , nil
617- }
618- }
619-
620- receivedHeaderHash , err = core .CalculateHash (sr .Marshalizer (), sr .Hasher (), receivedHeader )
621- if err != nil {
622- log .Debug ("isConsensusHeaderReceived: calculate received header hash" , "error" , err .Error ())
623- return false , nil
624- }
625-
626- if bytes .Equal (receivedHeaderHash , consensusHeaderHash ) {
627- return true , receivedHeaders [index ]
628- }
629- }
630-
631- return false , nil
632- }
633-
634- func (sr * subroundEndRound ) signBlockHeader (leader []byte ) ([]byte , error ) {
635- headerClone := sr .GetHeader ().ShallowClone ()
636- err := headerClone .SetLeaderSignature (nil )
637- if err != nil {
638- return nil , err
639- }
640-
641- marshalizedHdr , err := sr .Marshalizer ().Marshal (headerClone )
642- if err != nil {
643- return nil , err
644- }
645-
646- return sr .SigningHandler ().CreateSignatureForPublicKey (marshalizedHdr , leader )
647- }
648-
649581func (sr * subroundEndRound ) updateMetricsForLeader () {
650582 // TODO: decide if we keep these metrics the same way
651583 sr .appStatusHandler .Increment (common .MetricCountAcceptedBlocks )
652584 sr .appStatusHandler .SetStringValue (common .MetricConsensusRoundState ,
653585 fmt .Sprintf ("valid block produced in %f sec" , time .Since (sr .RoundHandler ().TimeStamp ()).Seconds ()))
654586}
655587
656- func (sr * subroundEndRound ) broadcastBlockDataLeader (sender []byte ) error {
657- // TODO[cleanup cns finality]: remove this method, block data was already broadcast during subroundBlock
658- if sr .EnableEpochsHandler ().IsFlagEnabledInEpoch (common .EquivalentMessagesFlag , sr .GetHeader ().GetEpoch ()) {
659- return nil
660- }
661-
662- miniBlocks , transactions , err := sr .BlockProcessor ().MarshalizedDataToBroadcast (sr .GetHeader (), sr .GetBody ())
663- if err != nil {
664- return err
665- }
666-
667- return sr .BroadcastMessenger ().BroadcastBlockDataLeader (sr .GetHeader (), miniBlocks , transactions , sender )
668- }
669-
670- func (sr * subroundEndRound ) setHeaderForValidator (header data.HeaderHandler ) error {
671- idx , pk , miniBlocks , transactions , err := sr .getIndexPkAndDataToBroadcast ()
672- if err != nil {
673- return err
674- }
675-
676- go sr .BroadcastMessenger ().PrepareBroadcastHeaderValidator (header , miniBlocks , transactions , idx , pk )
677-
678- return nil
679- }
680-
681- func (sr * subroundEndRound ) prepareBroadcastBlockDataForValidator () error {
682- idx , pk , miniBlocks , transactions , err := sr .getIndexPkAndDataToBroadcast ()
683- if err != nil {
684- return err
685- }
686-
687- go sr .BroadcastMessenger ().PrepareBroadcastBlockDataValidator (sr .GetHeader (), miniBlocks , transactions , idx , pk )
688-
689- return nil
690- }
691-
692588// doEndRoundConsensusCheck method checks if the consensus is achieved
693589func (sr * subroundEndRound ) doEndRoundConsensusCheck () bool {
694590 if sr .GetRoundCanceled () {
@@ -776,37 +672,6 @@ func (sr *subroundEndRound) isOutOfTime() bool {
776672 return false
777673}
778674
779- func (sr * subroundEndRound ) getIndexPk () (int , []byte , error ) {
780- minIdx := sr .getMinConsensusGroupIndexOfManagedKeys ()
781-
782- idx , err := sr .SelfConsensusGroupIndex ()
783- if err == nil {
784- if idx < minIdx {
785- minIdx = idx
786- }
787- }
788-
789- if minIdx == sr .ConsensusGroupSize () {
790- return - 1 , nil , err
791- }
792-
793- return minIdx , []byte (sr .ConsensusGroup ()[minIdx ]), nil
794- }
795-
796- func (sr * subroundEndRound ) getIndexPkAndDataToBroadcast () (int , []byte , map [uint32 ][]byte , map [string ][][]byte , error ) {
797- minIdx , pk , err := sr .getIndexPk ()
798- if err != nil {
799- return - 1 , nil , nil , nil , err
800- }
801-
802- miniBlocks , transactions , err := sr .BlockProcessor ().MarshalizedDataToBroadcast (sr .GetHeader (), sr .GetBody ())
803- if err != nil {
804- return - 1 , nil , nil , nil , err
805- }
806-
807- return minIdx , pk , miniBlocks , transactions , nil
808- }
809-
810675func (sr * subroundEndRound ) getMinConsensusGroupIndexOfManagedKeys () int {
811676 minIdx := sr .ConsensusGroupSize ()
812677
0 commit comments