mirror of https://github.com/certusone/dc4bc.git
feat: updated flow
This commit is contained in:
parent
33ecea0a9a
commit
19640adcf0
|
@ -380,6 +380,8 @@ func (f *FSM) do(trEvent *trEvent, args ...interface{}) (resp *Response, err err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resp.State = f.State()
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -114,12 +114,14 @@ func Init(machines ...MachineProvider) *FSMPool {
|
||||||
p.states[state] = initMachineName
|
p.states[state] = initMachineName
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
if name, exists := p.states[state]; exists && name != machineName {
|
if name, exists := p.states[state]; exists && name != machineName {
|
||||||
panic(fmt.Sprintf("duplicate state for machines \"%s\"", state))
|
panic(fmt.Sprintf("duplicate state for machines \"%s\"", state))
|
||||||
|
}
|
||||||
|
|
||||||
|
p.states[state] = machineName
|
||||||
}
|
}
|
||||||
|
|
||||||
p.states[state] = machineName
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,13 +3,14 @@ package dkg_proposal_fsm
|
||||||
import (
|
import (
|
||||||
"github.com/depools/dc4bc/fsm/fsm"
|
"github.com/depools/dc4bc/fsm/fsm"
|
||||||
"github.com/depools/dc4bc/fsm/state_machines/internal"
|
"github.com/depools/dc4bc/fsm/state_machines/internal"
|
||||||
|
spf "github.com/depools/dc4bc/fsm/state_machines/signature_proposal_fsm"
|
||||||
"sync"
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
FsmName = "dkg_proposal_fsm"
|
FsmName = "dkg_proposal_fsm"
|
||||||
|
|
||||||
StateDkgInitial = StateDkgCommitsAwaitConfirmations
|
StateDkgInitial = spf.StateSignatureProposalCollected
|
||||||
|
|
||||||
// Sending dkg commits
|
// Sending dkg commits
|
||||||
StateDkgCommitsAwaitConfirmations = fsm.State("state_dkg_commits_await_confirmations")
|
StateDkgCommitsAwaitConfirmations = fsm.State("state_dkg_commits_await_confirmations")
|
||||||
|
@ -41,7 +42,7 @@ const (
|
||||||
StateDkgMasterKeyCollected = fsm.State("state_dkg_master_key_collected")
|
StateDkgMasterKeyCollected = fsm.State("state_dkg_master_key_collected")
|
||||||
|
|
||||||
// Events
|
// Events
|
||||||
eventAutoDKGInitialInternal = fsm.Event("event_dkg_init")
|
EventDKGInitProcess = fsm.Event("event_dkg_init_process")
|
||||||
|
|
||||||
EventDKGCommitConfirmationReceived = fsm.Event("event_dkg_commit_confirm_received")
|
EventDKGCommitConfirmationReceived = fsm.Event("event_dkg_commit_confirm_received")
|
||||||
EventDKGCommitConfirmationError = fsm.Event("event_dkg_commit_confirm_canceled_by_error")
|
EventDKGCommitConfirmationError = fsm.Event("event_dkg_commit_confirm_canceled_by_error")
|
||||||
|
@ -92,13 +93,13 @@ func New() internal.DumpedMachineProvider {
|
||||||
// Switch to pub keys required
|
// Switch to pub keys required
|
||||||
// {Name: eventDKGPubKeysSendingRequiredAuto, SrcState: []fsm.State{StateDkgInitial}, DstState: StateDkgPubKeysAwaitConfirmations, IsInternal: true, IsAuto: true, AutoRunMode: fsm.EventRunAfter},
|
// {Name: eventDKGPubKeysSendingRequiredAuto, SrcState: []fsm.State{StateDkgInitial}, DstState: StateDkgPubKeysAwaitConfirmations, IsInternal: true, IsAuto: true, AutoRunMode: fsm.EventRunAfter},
|
||||||
|
|
||||||
// {Name: eventAutoDKGInitialInternal, SrcState: []fsm.State{StateDkgPubKeysAwaitConfirmations}, DstState: StateDkgPubKeysAwaitConfirmations, IsInternal: true, IsAuto: true, AutoRunMode: fsm.EventRunBefore},
|
// {Name: EventDKGInitProcess, SrcState: []fsm.State{StateDkgPubKeysAwaitConfirmations}, DstState: StateDkgPubKeysAwaitConfirmations, IsInternal: true, IsAuto: true, AutoRunMode: fsm.EventRunBefore},
|
||||||
|
|
||||||
// StateDkgCommitsCollected = fsm.State("state_dkg_commits_collected")
|
// StateDkgCommitsCollected = fsm.State("state_dkg_commits_collected")
|
||||||
|
|
||||||
// {Name: eventAutoDKGInitInternal, SrcState: []fsm.State{StateDkgInitial}, DstState: StateDkgCommitsAwaitConfirmations, IsInternal: true, IsAuto: true, AutoRunMode: fsm.EventRunBefore},
|
// {Name: eventAutoDKGInitInternal, SrcState: []fsm.State{StateDkgInitial}, DstState: StateDkgCommitsAwaitConfirmations, IsInternal: true, IsAuto: true, AutoRunMode: fsm.EventRunBefore},
|
||||||
|
|
||||||
{Name: eventAutoDKGInitialInternal, SrcState: []fsm.State{StateDkgCommitsAwaitConfirmations}, DstState: StateDkgCommitsAwaitConfirmations, IsInternal: true, IsAuto: true, AutoRunMode: fsm.EventRunBefore},
|
{Name: EventDKGInitProcess, SrcState: []fsm.State{StateDkgInitial}, DstState: StateDkgCommitsAwaitConfirmations},
|
||||||
|
|
||||||
// Commits
|
// Commits
|
||||||
{Name: EventDKGCommitConfirmationReceived, SrcState: []fsm.State{StateDkgCommitsAwaitConfirmations}, DstState: StateDkgCommitsAwaitConfirmations},
|
{Name: EventDKGCommitConfirmationReceived, SrcState: []fsm.State{StateDkgCommitsAwaitConfirmations}, DstState: StateDkgCommitsAwaitConfirmations},
|
||||||
|
@ -144,7 +145,7 @@ func New() internal.DumpedMachineProvider {
|
||||||
// {Name: EventDKGMasterKeyRequiredInternal, SrcState: []fsm.State{StateDkgResponsesAwaitConfirmations}, DstState: fsm.StateGlobalDone, IsInternal: true},
|
// {Name: EventDKGMasterKeyRequiredInternal, SrcState: []fsm.State{StateDkgResponsesAwaitConfirmations}, DstState: fsm.StateGlobalDone, IsInternal: true},
|
||||||
},
|
},
|
||||||
fsm.Callbacks{
|
fsm.Callbacks{
|
||||||
eventAutoDKGInitialInternal: machine.actionInitDKGProposal,
|
EventDKGInitProcess: machine.actionInitDKGProposal,
|
||||||
|
|
||||||
EventDKGCommitConfirmationReceived: machine.actionCommitConfirmationReceived,
|
EventDKGCommitConfirmationReceived: machine.actionCommitConfirmationReceived,
|
||||||
EventDKGCommitConfirmationError: machine.actionConfirmationError,
|
EventDKGCommitConfirmationError: machine.actionConfirmationError,
|
||||||
|
|
|
@ -239,12 +239,22 @@ func Test_SignatureProposal_Positive(t *testing.T) {
|
||||||
|
|
||||||
if participantCounter > 0 {
|
if participantCounter > 0 {
|
||||||
compareState(t, spf.StateAwaitParticipantsConfirmations, fsmResponse.State)
|
compareState(t, spf.StateAwaitParticipantsConfirmations, fsmResponse.State)
|
||||||
} else {
|
|
||||||
compareState(t, spf.StateSignatureProposalCollected, fsmResponse.State)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
compareState(t, spf.StateSignatureProposalCollected, fsmResponse.State)
|
||||||
|
|
||||||
|
testFSMInstance, err = FromDump(dump)
|
||||||
|
|
||||||
|
fsmResponse, dump, err = testFSMInstance.Do(dpf.EventDKGInitProcess)
|
||||||
|
|
||||||
|
compareErrNil(t, err)
|
||||||
|
|
||||||
|
compareDumpNotZero(t, dump)
|
||||||
|
|
||||||
|
compareFSMResponseNotNil(t, fsmResponse)
|
||||||
|
|
||||||
compareState(t, dpf.StateDkgCommitsAwaitConfirmations, fsmResponse.State)
|
compareState(t, dpf.StateDkgCommitsAwaitConfirmations, fsmResponse.State)
|
||||||
|
|
||||||
// Commits
|
// Commits
|
||||||
|
|
|
@ -190,11 +190,6 @@ func (m *SignatureProposalFSM) actionValidateSignatureProposal(inEvent fsm.Event
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = m.SetState(eventSetProposalValidatedInternal)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
responseData := make(responses.SignatureProposalParticipantStatusResponse, 0)
|
responseData := make(responses.SignatureProposalParticipantStatusResponse, 0)
|
||||||
|
|
||||||
for _, participant := range m.payload.SignatureProposalPayload.Quorum {
|
for _, participant := range m.payload.SignatureProposalPayload.Quorum {
|
||||||
|
@ -207,7 +202,7 @@ func (m *SignatureProposalFSM) actionValidateSignatureProposal(inEvent fsm.Event
|
||||||
responseData = append(responseData, responseEntry)
|
responseData = append(responseData, responseEntry)
|
||||||
}
|
}
|
||||||
|
|
||||||
return eventDoneInternal, responseData, nil
|
return eventSetProposalValidatedInternal, responseData, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *SignatureProposalFSM) actionSignatureProposalCanceledByTimeout(inEvent fsm.Event, args ...interface{}) (outEvent fsm.Event, response interface{}, err error) {
|
func (m *SignatureProposalFSM) actionSignatureProposalCanceledByTimeout(inEvent fsm.Event, args ...interface{}) (outEvent fsm.Event, response interface{}, err error) {
|
||||||
|
|
|
@ -2,7 +2,6 @@ package signature_proposal_fsm
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/depools/dc4bc/fsm/fsm"
|
"github.com/depools/dc4bc/fsm/fsm"
|
||||||
dpf "github.com/depools/dc4bc/fsm/state_machines/dkg_proposal_fsm"
|
|
||||||
"github.com/depools/dc4bc/fsm/state_machines/internal"
|
"github.com/depools/dc4bc/fsm/state_machines/internal"
|
||||||
"sync"
|
"sync"
|
||||||
)
|
)
|
||||||
|
@ -67,10 +66,9 @@ func New() internal.DumpedMachineProvider {
|
||||||
// eventProposalValidate internal or from client?
|
// eventProposalValidate internal or from client?
|
||||||
// yay
|
// yay
|
||||||
|
|
||||||
|
// Exit point
|
||||||
{Name: eventSetProposalValidatedInternal, SrcState: []fsm.State{StateAwaitParticipantsConfirmations}, DstState: StateSignatureProposalCollected, IsInternal: true},
|
{Name: eventSetProposalValidatedInternal, SrcState: []fsm.State{StateAwaitParticipantsConfirmations}, DstState: StateSignatureProposalCollected, IsInternal: true},
|
||||||
|
|
||||||
// Exit point
|
|
||||||
{Name: eventDoneInternal, SrcState: []fsm.State{StateSignatureProposalCollected}, DstState: dpf.StateDkgInitial, IsInternal: true},
|
|
||||||
// nan
|
// nan
|
||||||
{Name: eventSetValidationCanceledByTimeout, SrcState: []fsm.State{StateAwaitParticipantsConfirmations}, DstState: StateValidationCanceledByTimeout, IsInternal: true},
|
{Name: eventSetValidationCanceledByTimeout, SrcState: []fsm.State{StateAwaitParticipantsConfirmations}, DstState: StateValidationCanceledByTimeout, IsInternal: true},
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue