@@ -273,7 +273,7 @@ func (m *cFSM) Start(c context.Context) error {
273
273
src := m .fsm .CurrentState ()
274
274
if err := m .fsm .Handle (evt ); err != nil {
275
275
if errors .Cause (err ) == fsm .ErrTransitionNotFound {
276
- if time . Since (evt .timestamp ()) <= m .ctx .cfg .UnmatchedEventTTL {
276
+ if m . ctx . clock . Now (). Sub (evt .timestamp ()) <= m .ctx .cfg .UnmatchedEventTTL {
277
277
m .produce (evt , m .ctx .cfg .UnmatchedEventInterval )
278
278
logger .Debug ().
279
279
Str ("src" , string (src )).
@@ -320,7 +320,7 @@ func (m *cFSM) produce(evt iConsensusEvt, delay time.Duration) {
320
320
go func () {
321
321
select {
322
322
case <- m .close :
323
- case <- time .After (delay ):
323
+ case <- m . ctx . clock .After (delay ):
324
324
m .evtq <- evt
325
325
}
326
326
m .wg .Done ()
@@ -457,9 +457,22 @@ func (m *cFSM) handleProposeBlockEvt(evt fsm.Event) (fsm.State, error) {
457
457
if ! ok {
458
458
return sInvalid , errors .Wrap (ErrEvtCast , "the event is not a proposeBlkEvt" )
459
459
}
460
- // If the block is self proposed, skip validation
461
- if proposeBlkEvt .proposer != m .ctx .addr .RawAddress {
462
- blkHash := proposeBlkEvt .block .HashBlock ()
460
+ proposer , err := m .ctx .calcProposer (proposeBlkEvt .block .Height (), m .ctx .epoch .delegates )
461
+ if err != nil {
462
+ return sInvalid , errors .Wrap (err , "error when calculating the proposer" )
463
+ }
464
+ blkHash := proposeBlkEvt .block .HashBlock ()
465
+ if proposeBlkEvt .proposer != proposer {
466
+ logger .Error ().
467
+ Str ("proposer" , proposeBlkEvt .proposer ).
468
+ Str ("actualProposer" , proposer ).
469
+ Uint64 ("block" , proposeBlkEvt .block .Height ()).
470
+ Str ("hash" , hex .EncodeToString (blkHash [:])).
471
+ Err (err ).
472
+ Msg ("error when validating the block proposer" )
473
+ validated = false
474
+ } else if proposeBlkEvt .proposer != m .ctx .addr .RawAddress {
475
+ // If the block is self proposed, skip validation
463
476
if err := m .ctx .chain .ValidateBlock (proposeBlkEvt .block ); err != nil {
464
477
logger .Error ().
465
478
Str ("proposer" , proposeBlkEvt .proposer ).
@@ -688,7 +701,7 @@ func (m *cFSM) produceStartRoundEvt() error {
688
701
)
689
702
// If we have the cached last block, we get the timestamp from it
690
703
if m .ctx .round .block != nil {
691
- duration = time . Since (m .ctx .round .block .Header .Timestamp ())
704
+ duration = m . ctx . clock . Now (). Sub (m .ctx .round .block .Header .Timestamp ())
692
705
} else if duration , err = m .ctx .calcDurationSinceLastBlock (); err != nil {
693
706
// Otherwise, we read it from blockchain
694
707
return errors .Wrap (err , "error when computing the duration since last block time" )
0 commit comments