@@ -48,7 +48,7 @@ const (
48
48
sEpochStart fsm.State = "S_EPOCH_START"
49
49
sDKGGeneration fsm.State = "S_DKG_GENERATION"
50
50
sRoundStart fsm.State = "S_ROUND_START"
51
- sInitPropose fsm.State = "S_INIT_PROPOSE "
51
+ sBlockPropose fsm.State = "S_BLOCK_PROPOSE "
52
52
sAcceptPropose fsm.State = "S_ACCEPT_PROPOSE"
53
53
sAcceptProposalEndorse fsm.State = "S_ACCEPT_PROPOSAL_ENDROSE"
54
54
sAcceptLockEndorse fsm.State = "S_ACCEPT_LOCK_ENDORSE"
@@ -58,7 +58,7 @@ const (
58
58
eRollDelegates fsm.EventType = "E_ROLL_DELEGATES"
59
59
eGenerateDKG fsm.EventType = "E_GENERATE_DKG"
60
60
eStartRound fsm.EventType = "E_START_ROUND"
61
- eInitBlock fsm.EventType = "E_INIT_BLOCK "
61
+ eInitBlockPropose fsm.EventType = "E_INIT_BLOCK_PROPOSE "
62
62
eProposeBlock fsm.EventType = "E_PROPOSE_BLOCK"
63
63
eProposeBlockTimeout fsm.EventType = "E_PROPOSE_BLOCK_TIMEOUT"
64
64
eEndorseProposal fsm.EventType = "E_ENDORSE_PROPOSAL"
85
85
sEpochStart ,
86
86
sDKGGeneration ,
87
87
sRoundStart ,
88
- sInitPropose ,
88
+ sBlockPropose ,
89
89
sAcceptPropose ,
90
90
sAcceptProposalEndorse ,
91
91
sAcceptLockEndorse ,
@@ -113,25 +113,25 @@ func newConsensusFSM(ctx *rollDPoSCtx) (*cFSM, error) {
113
113
AddStates (
114
114
sDKGGeneration ,
115
115
sRoundStart ,
116
- sInitPropose ,
116
+ sBlockPropose ,
117
117
sAcceptPropose ,
118
118
sAcceptProposalEndorse ,
119
119
sAcceptLockEndorse ,
120
120
sAcceptCommitEndorse ,
121
121
).
122
122
AddTransition (sEpochStart , eRollDelegates , cm .handleRollDelegatesEvt , []fsm.State {sEpochStart , sDKGGeneration }).
123
123
AddTransition (sDKGGeneration , eGenerateDKG , cm .handleGenerateDKGEvt , []fsm.State {sRoundStart }).
124
- AddTransition (sRoundStart , eStartRound , cm .handleStartRoundEvt , []fsm.State {sInitPropose }).
124
+ AddTransition (sRoundStart , eStartRound , cm .handleStartRoundEvt , []fsm.State {sBlockPropose }).
125
125
AddTransition (sRoundStart , eFinishEpoch , cm .handleFinishEpochEvt , []fsm.State {sEpochStart , sRoundStart }).
126
- AddTransition (sInitPropose , eInitBlock , cm .handleInitBlockEvt , []fsm.State {sAcceptPropose }).
127
- AddTransition (sInitPropose , eProposeBlockTimeout , cm .handleProposeBlockTimeout , []fsm.State {sAcceptProposalEndorse }).
126
+ AddTransition (sBlockPropose , eInitBlockPropose , cm .handleInitBlockProposeEvt , []fsm.State {sAcceptPropose }).
127
+ AddTransition (sBlockPropose , eProposeBlockTimeout , cm .handleProposeBlockTimeout , []fsm.State {sAcceptProposalEndorse }).
128
128
AddTransition (
129
129
sAcceptPropose ,
130
130
eProposeBlock ,
131
131
cm .handleProposeBlockEvt ,
132
132
[]fsm.State {
133
133
sAcceptPropose , // proposed block invalid
134
- sAcceptProposalEndorse , // proposed block valid
134
+ sAcceptProposalEndorse , // receive valid block, jump to next step
135
135
}).
136
136
AddTransition (
137
137
sAcceptPropose ,
@@ -368,14 +368,19 @@ func (m *cFSM) handleStartRoundEvt(_ fsm.Event) (fsm.State, error) {
368
368
m .ctx .round .proposer = proposer
369
369
m .ctx .round .timestamp = m .ctx .clock .Now ()
370
370
371
+ m .produce (m .newCEvt (eInitBlockPropose ), 0 )
371
372
// Setup timeout for waiting for proposed block
372
- m .produce (m .newCEvt (eInitBlock ), 0 )
373
- m .produce (m .newTimeoutEvt (eProposeBlockTimeout ), m .ctx .cfg .AcceptProposeTTL )
373
+ ttl := m .ctx .cfg .AcceptProposeTTL
374
+ m .produce (m .newTimeoutEvt (eProposeBlockTimeout ), ttl )
375
+ ttl += m .ctx .cfg .AcceptProposalEndorseTTL
376
+ m .produce (m .newTimeoutEvt (eEndorseProposalTimeout ), ttl )
377
+ ttl += m .ctx .cfg .AcceptCommitEndorseTTL
378
+ m .produce (m .newTimeoutEvt (eEndorseLockTimeout ), ttl )
374
379
375
- return sInitPropose , nil
380
+ return sBlockPropose , nil
376
381
}
377
382
378
- func (m * cFSM ) handleInitBlockEvt (evt fsm.Event ) (fsm.State , error ) {
383
+ func (m * cFSM ) handleInitBlockProposeEvt (evt fsm.Event ) (fsm.State , error ) {
379
384
log := logger .Info ().
380
385
Str ("proposer" , m .ctx .round .proposer ).
381
386
Uint64 ("height" , m .ctx .round .height ).
@@ -451,17 +456,10 @@ func (m *cFSM) validateProposeBlock(blk *blockchain.Block, expectedProposer stri
451
456
return true
452
457
}
453
458
454
- func (m * cFSM ) moveToAcceptProposalEndorse () (fsm.State , error ) {
455
- // Setup timeout for waiting for endorse
456
- m .produce (m .newTimeoutEvt (eEndorseProposalTimeout ), m .ctx .cfg .AcceptProposalEndorseTTL )
457
- return sAcceptProposalEndorse , nil
458
- }
459
-
460
459
func (m * cFSM ) handleProposeBlockEvt (evt fsm.Event ) (fsm.State , error ) {
461
460
if evt .Type () != eProposeBlock {
462
461
return sEpochStart , errors .Errorf ("invalid event type %s" , evt .Type ())
463
462
}
464
- m .ctx .round .block = nil
465
463
proposeBlkEvt , ok := evt .(* proposeBlkEvt )
466
464
if ! ok {
467
465
return sEpochStart , errors .Wrap (ErrEvtCast , "the event is not a proposeBlkEvt" )
@@ -476,7 +474,7 @@ func (m *cFSM) handleProposeBlockEvt(evt fsm.Event) (fsm.State, error) {
476
474
m .ctx .round .block = proposeBlkEvt .block
477
475
m .broadcastConsensusVote (m .ctx .round .block .HashBlock (), endorsement .PROPOSAL )
478
476
479
- return m . moveToAcceptProposalEndorse ()
477
+ return sAcceptProposalEndorse , nil
480
478
}
481
479
482
480
func (m * cFSM ) handleProposeBlockTimeout (evt fsm.Event ) (fsm.State , error ) {
@@ -489,7 +487,7 @@ func (m *cFSM) handleProposeBlockTimeout(evt fsm.Event) (fsm.State, error) {
489
487
Uint32 ("round" , m .ctx .round .number ).
490
488
Msg ("didn't receive the proposed block before timeout" )
491
489
492
- return m . moveToAcceptProposalEndorse ()
490
+ return sAcceptProposalEndorse , nil
493
491
}
494
492
495
493
func (m * cFSM ) isDelegateEndorsement (endorser string ) bool {
@@ -530,12 +528,6 @@ func (m *cFSM) validateEndorse(
530
528
return true
531
529
}
532
530
533
- func (m * cFSM ) moveToAcceptLockEndorse () (fsm.State , error ) {
534
- // Setup timeout for waiting for commit
535
- m .produce (m .newTimeoutEvt (eEndorseLockTimeout ), m .ctx .cfg .AcceptCommitEndorseTTL )
536
- return sAcceptLockEndorse , nil
537
- }
538
-
539
531
func (m * cFSM ) isProposedBlock (hash []byte ) bool {
540
532
if m .ctx .round .block == nil {
541
533
return false
@@ -629,7 +621,7 @@ func (m *cFSM) handleEndorseProposalEvt(evt fsm.Event) (fsm.State, error) {
629
621
m .ctx .round .proofOfLock = endorsementSet
630
622
m .broadcastConsensusVote (endorsementSet .BlockHash (), endorsement .LOCK )
631
623
632
- return m . moveToAcceptLockEndorse ()
624
+ return sAcceptLockEndorse , nil
633
625
}
634
626
635
627
func (m * cFSM ) handleEndorseProposalTimeout (evt fsm.Event ) (fsm.State , error ) {
@@ -640,7 +632,7 @@ func (m *cFSM) handleEndorseProposalTimeout(evt fsm.Event) (fsm.State, error) {
640
632
Uint64 ("height" , m .ctx .round .height ).
641
633
Msg ("didn't collect enough proposal endorses before timeout" )
642
634
643
- return m . moveToAcceptLockEndorse ()
635
+ return sAcceptLockEndorse , nil
644
636
}
645
637
646
638
func (m * cFSM ) handleEndorseLockEvt (evt fsm.Event ) (fsm.State , error ) {
0 commit comments