feat: updated flow

This commit is contained in:
x88 2020-08-14 02:35:52 +03:00
parent 33ecea0a9a
commit 19640adcf0
6 changed files with 29 additions and 21 deletions

View File

@ -380,6 +380,8 @@ func (f *FSM) do(trEvent *trEvent, args ...interface{}) (resp *Response, err err
}
}
resp.State = f.State()
return
}

View File

@ -114,12 +114,14 @@ func Init(machines ...MachineProvider) *FSMPool {
p.states[state] = initMachineName
continue
}
}
if name, exists := p.states[state]; exists && name != machineName {
panic(fmt.Sprintf("duplicate state for machines \"%s\"", state))
} else {
if name, exists := p.states[state]; exists && name != machineName {
panic(fmt.Sprintf("duplicate state for machines \"%s\"", state))
}
p.states[state] = machineName
}
p.states[state] = machineName
}
}

View File

@ -3,13 +3,14 @@ package dkg_proposal_fsm
import (
"github.com/depools/dc4bc/fsm/fsm"
"github.com/depools/dc4bc/fsm/state_machines/internal"
spf "github.com/depools/dc4bc/fsm/state_machines/signature_proposal_fsm"
"sync"
)
const (
FsmName = "dkg_proposal_fsm"
StateDkgInitial = StateDkgCommitsAwaitConfirmations
StateDkgInitial = spf.StateSignatureProposalCollected
// Sending dkg commits
StateDkgCommitsAwaitConfirmations = fsm.State("state_dkg_commits_await_confirmations")
@ -41,7 +42,7 @@ const (
StateDkgMasterKeyCollected = fsm.State("state_dkg_master_key_collected")
// Events
eventAutoDKGInitialInternal = fsm.Event("event_dkg_init")
EventDKGInitProcess = fsm.Event("event_dkg_init_process")
EventDKGCommitConfirmationReceived = fsm.Event("event_dkg_commit_confirm_received")
EventDKGCommitConfirmationError = fsm.Event("event_dkg_commit_confirm_canceled_by_error")
@ -92,13 +93,13 @@ func New() internal.DumpedMachineProvider {
// Switch to pub keys required
// {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")
// {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
{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},
},
fsm.Callbacks{
eventAutoDKGInitialInternal: machine.actionInitDKGProposal,
EventDKGInitProcess: machine.actionInitDKGProposal,
EventDKGCommitConfirmationReceived: machine.actionCommitConfirmationReceived,
EventDKGCommitConfirmationError: machine.actionConfirmationError,

View File

@ -239,12 +239,22 @@ func Test_SignatureProposal_Positive(t *testing.T) {
if participantCounter > 0 {
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)
// Commits

View File

@ -190,11 +190,6 @@ func (m *SignatureProposalFSM) actionValidateSignatureProposal(inEvent fsm.Event
return
}
err = m.SetState(eventSetProposalValidatedInternal)
if err != nil {
return
}
responseData := make(responses.SignatureProposalParticipantStatusResponse, 0)
for _, participant := range m.payload.SignatureProposalPayload.Quorum {
@ -207,7 +202,7 @@ func (m *SignatureProposalFSM) actionValidateSignatureProposal(inEvent fsm.Event
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) {

View File

@ -2,7 +2,6 @@ package signature_proposal_fsm
import (
"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"
"sync"
)
@ -67,10 +66,9 @@ func New() internal.DumpedMachineProvider {
// eventProposalValidate internal or from client?
// yay
// Exit point
{Name: eventSetProposalValidatedInternal, SrcState: []fsm.State{StateAwaitParticipantsConfirmations}, DstState: StateSignatureProposalCollected, IsInternal: true},
// Exit point
{Name: eventDoneInternal, SrcState: []fsm.State{StateSignatureProposalCollected}, DstState: dpf.StateDkgInitial, IsInternal: true},
// nan
{Name: eventSetValidationCanceledByTimeout, SrcState: []fsm.State{StateAwaitParticipantsConfirmations}, DstState: StateValidationCanceledByTimeout, IsInternal: true},
},