mirror of https://github.com/certusone/dc4bc.git
commit
9b6f2e92e6
|
@ -157,8 +157,8 @@ const (
|
|||
SigningAwaitConfirmation SigningParticipantStatus = iota
|
||||
SigningConfirmed
|
||||
SigningDeclined
|
||||
SigningAwaitPartialKeys
|
||||
SigningPartialKeysConfirmed
|
||||
SigningAwaitPartialSigns
|
||||
SigningPartialSignsConfirmed
|
||||
SigningError
|
||||
SigningProcess
|
||||
)
|
||||
|
@ -170,10 +170,10 @@ func (s SigningParticipantStatus) String() string {
|
|||
str = "SigningAwaitConfirmation"
|
||||
case SigningConfirmed:
|
||||
str = "SigningConfirmed"
|
||||
case SigningAwaitPartialKeys:
|
||||
str = "SigningAwaitPartialKeys"
|
||||
case SigningPartialKeysConfirmed:
|
||||
str = "SigningPartialKeysConfirmed"
|
||||
case SigningAwaitPartialSigns:
|
||||
str = "SigningAwaitPartialSigns"
|
||||
case SigningPartialSignsConfirmed:
|
||||
str = "SigningPartialSignsConfirmed"
|
||||
case SigningError:
|
||||
str = "SigningError"
|
||||
case SigningProcess:
|
||||
|
|
|
@ -975,7 +975,7 @@ func Test_SigningProposal_EventConfirmSigningConfirmation_Positive(t *testing.T)
|
|||
|
||||
}
|
||||
|
||||
compareState(t, sif.StateSigningAwaitPartialKeys, fsmResponse.State)
|
||||
compareState(t, sif.StateSigningAwaitPartialSigns, fsmResponse.State)
|
||||
|
||||
response, ok := fsmResponse.Data.(responses.SigningPartialSignsParticipantInvitationsResponse)
|
||||
|
||||
|
@ -991,9 +991,9 @@ func Test_SigningProposal_EventConfirmSigningConfirmation_Positive(t *testing.T)
|
|||
t.Fatalf("expected matched {SrcPayload}")
|
||||
}
|
||||
|
||||
testFSMDump[sif.StateSigningAwaitPartialKeys] = testFSMDumpLocal
|
||||
testFSMDump[sif.StateSigningAwaitPartialSigns] = testFSMDumpLocal
|
||||
|
||||
compareDumpNotZero(t, testFSMDump[sif.StateSigningAwaitPartialKeys])
|
||||
compareDumpNotZero(t, testFSMDump[sif.StateSigningAwaitPartialSigns])
|
||||
}
|
||||
|
||||
func Test_SigningProposal_EventDeclineProposal_Canceled_Participant(t *testing.T) {
|
||||
|
@ -1056,7 +1056,7 @@ func Test_SigningProposal_EventSigningPartialKeyReceived_Positive(t *testing.T)
|
|||
|
||||
participantCounter := participantsCount
|
||||
|
||||
testFSMDumpLocal = testFSMDump[sif.StateSigningAwaitPartialKeys]
|
||||
testFSMDumpLocal = testFSMDump[sif.StateSigningAwaitPartialSigns]
|
||||
|
||||
for participantId, participant := range testIdMapParticipants {
|
||||
participantCounter--
|
||||
|
@ -1068,9 +1068,9 @@ func Test_SigningProposal_EventSigningPartialKeyReceived_Positive(t *testing.T)
|
|||
compareFSMInstanceNotNil(t, testFSMInstance)
|
||||
|
||||
inState, _ := testFSMInstance.State()
|
||||
compareState(t, sif.StateSigningAwaitPartialKeys, inState)
|
||||
compareState(t, sif.StateSigningAwaitPartialSigns, inState)
|
||||
|
||||
fsmResponse, testFSMDumpLocal, err = testFSMInstance.Do(sif.EventSigningPartialKeyReceived, requests.SigningProposalPartialKeyRequest{
|
||||
fsmResponse, testFSMDumpLocal, err = testFSMInstance.Do(sif.EventSigningPartialSignReceived, requests.SigningProposalPartialSignRequest{
|
||||
SigningId: testSigningId,
|
||||
ParticipantId: participantId,
|
||||
PartialSign: participant.DkgPartialKey,
|
||||
|
@ -1084,12 +1084,12 @@ func Test_SigningProposal_EventSigningPartialKeyReceived_Positive(t *testing.T)
|
|||
compareFSMResponseNotNil(t, fsmResponse)
|
||||
|
||||
if participantCounter > 0 {
|
||||
compareState(t, sif.StateSigningAwaitPartialKeys, fsmResponse.State)
|
||||
compareState(t, sif.StateSigningAwaitPartialSigns, fsmResponse.State)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
compareState(t, sif.StateSigningPartialKeysCollected, fsmResponse.State)
|
||||
compareState(t, sif.StateSigningPartialSignsCollected, fsmResponse.State)
|
||||
|
||||
response, ok := fsmResponse.Data.(responses.SigningProcessParticipantResponse)
|
||||
|
||||
|
@ -1105,9 +1105,9 @@ func Test_SigningProposal_EventSigningPartialKeyReceived_Positive(t *testing.T)
|
|||
t.Fatalf("expected matched {SrcPayload}")
|
||||
}
|
||||
|
||||
testFSMDump[sif.StateSigningPartialKeysCollected] = testFSMDumpLocal
|
||||
testFSMDump[sif.StateSigningPartialSignsCollected] = testFSMDumpLocal
|
||||
|
||||
compareDumpNotZero(t, testFSMDump[sif.StateSigningPartialKeysCollected])
|
||||
compareDumpNotZero(t, testFSMDump[sif.StateSigningPartialSignsCollected])
|
||||
}
|
||||
|
||||
func Test_DkgProposal_EventSigningRestart_Positive(t *testing.T) {
|
||||
|
@ -1116,14 +1116,14 @@ func Test_DkgProposal_EventSigningRestart_Positive(t *testing.T) {
|
|||
testFSMDumpLocal []byte
|
||||
)
|
||||
|
||||
testFSMInstance, err := FromDump(testFSMDump[sif.StateSigningPartialKeysCollected])
|
||||
testFSMInstance, err := FromDump(testFSMDump[sif.StateSigningPartialSignsCollected])
|
||||
|
||||
compareErrNil(t, err)
|
||||
|
||||
compareFSMInstanceNotNil(t, testFSMInstance)
|
||||
|
||||
inState, _ := testFSMInstance.State()
|
||||
compareState(t, sif.StateSigningPartialKeysCollected, inState)
|
||||
compareState(t, sif.StateSigningPartialSignsCollected, inState)
|
||||
|
||||
fsmResponse, testFSMDumpLocal, err = testFSMInstance.Do(sif.EventSigningRestart, requests.DefaultRequest{
|
||||
CreatedAt: time.Now(),
|
||||
|
|
|
@ -188,7 +188,7 @@ func (m *SigningProposalFSM) actionValidateSigningProposalConfirmations(inEvent
|
|||
outEvent = eventSetProposalValidatedInternal
|
||||
|
||||
for _, participant := range m.payload.SigningProposalPayload.Quorum {
|
||||
participant.Status = internal.SigningAwaitPartialKeys
|
||||
participant.Status = internal.SigningAwaitPartialSigns
|
||||
}
|
||||
|
||||
// Make response
|
||||
|
@ -203,19 +203,19 @@ func (m *SigningProposalFSM) actionValidateSigningProposalConfirmations(inEvent
|
|||
return
|
||||
}
|
||||
|
||||
func (m *SigningProposalFSM) actionPartialKeyConfirmationReceived(inEvent fsm.Event, args ...interface{}) (outEvent fsm.Event, response interface{}, err error) {
|
||||
func (m *SigningProposalFSM) actionPartialSignConfirmationReceived(inEvent fsm.Event, args ...interface{}) (outEvent fsm.Event, response interface{}, err error) {
|
||||
m.payloadMu.Lock()
|
||||
defer m.payloadMu.Unlock()
|
||||
|
||||
if len(args) != 1 {
|
||||
err = errors.New("{arg0} required {SigningProposalPartialKeyRequest}")
|
||||
err = errors.New("{arg0} required {SigningProposalPartialSignRequest}")
|
||||
return
|
||||
}
|
||||
|
||||
request, ok := args[0].(requests.SigningProposalPartialKeyRequest)
|
||||
request, ok := args[0].(requests.SigningProposalPartialSignRequest)
|
||||
|
||||
if !ok {
|
||||
err = errors.New("cannot cast {arg0} to type {SigningProposalPartialKeyRequest}")
|
||||
err = errors.New("cannot cast {arg0} to type {SigningProposalPartialSignRequest}")
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -230,14 +230,14 @@ func (m *SigningProposalFSM) actionPartialKeyConfirmationReceived(inEvent fsm.Ev
|
|||
|
||||
signingProposalParticipant := m.payload.SigningQuorumGet(request.ParticipantId)
|
||||
|
||||
if signingProposalParticipant.Status != internal.SigningAwaitPartialKeys {
|
||||
if signingProposalParticipant.Status != internal.SigningAwaitPartialSigns {
|
||||
err = errors.New(fmt.Sprintf("cannot confirm response with {Status} = {\"%s\"}", signingProposalParticipant.Status))
|
||||
return
|
||||
}
|
||||
|
||||
signingProposalParticipant.PartialSign = make([]byte, len(request.PartialSign))
|
||||
copy(signingProposalParticipant.PartialSign, request.PartialSign)
|
||||
signingProposalParticipant.Status = internal.SigningPartialKeysConfirmed
|
||||
signingProposalParticipant.Status = internal.SigningPartialSignsConfirmed
|
||||
|
||||
signingProposalParticipant.UpdatedAt = request.CreatedAt
|
||||
m.payload.SignatureProposalPayload.UpdatedAt = request.CreatedAt
|
||||
|
@ -247,7 +247,7 @@ func (m *SigningProposalFSM) actionPartialKeyConfirmationReceived(inEvent fsm.Ev
|
|||
return
|
||||
}
|
||||
|
||||
func (m *SigningProposalFSM) actionValidateSigningPartialKeyAwaitConfirmations(inEvent fsm.Event, args ...interface{}) (outEvent fsm.Event, response interface{}, err error) {
|
||||
func (m *SigningProposalFSM) actionValidateSigningPartialSignsAwaitConfirmations(inEvent fsm.Event, args ...interface{}) (outEvent fsm.Event, response interface{}, err error) {
|
||||
var (
|
||||
isContainsError bool
|
||||
)
|
||||
|
@ -256,7 +256,7 @@ func (m *SigningProposalFSM) actionValidateSigningPartialKeyAwaitConfirmations(i
|
|||
defer m.payloadMu.Unlock()
|
||||
|
||||
if m.payload.SigningProposalPayload.IsExpired() {
|
||||
outEvent = eventSigningPartialKeyCancelByTimeoutInternal
|
||||
outEvent = eventSigningPartialSignsAwaitCancelByTimeoutInternal
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -264,13 +264,13 @@ func (m *SigningProposalFSM) actionValidateSigningPartialKeyAwaitConfirmations(i
|
|||
for _, participant := range m.payload.SigningProposalPayload.Quorum {
|
||||
if participant.Status == internal.SigningError {
|
||||
isContainsError = true
|
||||
} else if participant.Status == internal.SigningPartialKeysConfirmed {
|
||||
} else if participant.Status == internal.SigningPartialSignsConfirmed {
|
||||
unconfirmedParticipants--
|
||||
}
|
||||
}
|
||||
|
||||
if isContainsError {
|
||||
outEvent = eventSigningPartialKeyCancelByErrorInternal
|
||||
outEvent = eventSigningPartialSignsAwaitCancelByErrorInternal
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -279,7 +279,7 @@ func (m *SigningProposalFSM) actionValidateSigningPartialKeyAwaitConfirmations(i
|
|||
return
|
||||
}
|
||||
|
||||
outEvent = eventSigningPartialKeysConfirmedInternal
|
||||
outEvent = eventSigningPartialSignsConfirmedInternal
|
||||
|
||||
for _, participant := range m.payload.SigningProposalPayload.Quorum {
|
||||
participant.Status = internal.SigningProcess
|
||||
|
@ -341,11 +341,11 @@ func (m *SigningProposalFSM) actionConfirmationError(inEvent fsm.Event, args ...
|
|||
|
||||
// TODO: Move to methods
|
||||
switch inEvent {
|
||||
case EventSigningPartialKeyError:
|
||||
case EventSigningPartialSignError:
|
||||
switch signingProposalParticipant.Status {
|
||||
case internal.SigningAwaitPartialKeys:
|
||||
case internal.SigningAwaitPartialSigns:
|
||||
signingProposalParticipant.Status = internal.SigningError
|
||||
case internal.SigningPartialKeysConfirmed:
|
||||
case internal.SigningPartialSignsConfirmed:
|
||||
err = errors.New("{Status} already confirmed")
|
||||
case internal.SigningError:
|
||||
err = errors.New(fmt.Sprintf("{Status} already has {\"%s\"}", internal.SigningError))
|
||||
|
|
|
@ -21,12 +21,12 @@ const (
|
|||
StateSigningConfirmationsAwaitCancelledByTimeout = fsm.State("state_signing_confirmations_await_cancelled_by_timeout")
|
||||
StateSigningConfirmationsAwaitCancelledByParticipant = fsm.State("state_signing_confirmations_await_cancelled_by_participant")
|
||||
|
||||
StateSigningAwaitPartialKeys = fsm.State("state_signing_await_partial_keys")
|
||||
StateSigningAwaitPartialSigns = fsm.State("state_signing_await_partial_signs")
|
||||
// Cancelled
|
||||
StateSigningPartialKeysAwaitCancelledByTimeout = fsm.State("state_signing_partial_signatures_await_cancelled_by_timeout")
|
||||
StateSigningPartialKeysAwaitCancelledByError = fsm.State("state_signing_partial_signatures_await_cancelled_by_error")
|
||||
StateSigningPartialSignsAwaitCancelledByTimeout = fsm.State("state_signing_partial_signs_await_cancelled_by_timeout")
|
||||
StateSigningPartialSignsAwaitCancelledByError = fsm.State("state_signing_partial_signs_await_cancelled_by_error")
|
||||
|
||||
StateSigningPartialKeysCollected = fsm.State("state_signing_partial_signatures_collected")
|
||||
StateSigningPartialSignsCollected = fsm.State("state_signing_partial_signs_collected")
|
||||
|
||||
// Events
|
||||
|
||||
|
@ -40,14 +40,14 @@ const (
|
|||
eventAutoSigningValidateProposalInternal = fsm.Event("event_signing_proposal_await_validate")
|
||||
eventSetProposalValidatedInternal = fsm.Event("event_signing_proposal_set_validated")
|
||||
|
||||
EventSigningPartialKeyReceived = fsm.Event("event_signing_partial_key_received")
|
||||
EventSigningPartialKeyError = fsm.Event("event_signing_partial_key_error_received")
|
||||
eventSigningPartialKeyCancelByTimeoutInternal = fsm.Event("event_signing_partial_key_canceled_by_timeout_internal")
|
||||
eventSigningPartialKeyCancelByErrorInternal = fsm.Event("event_signing_partial_key_canceled_by_error_internal")
|
||||
EventSigningPartialSignReceived = fsm.Event("event_signing_partial_sign_received")
|
||||
EventSigningPartialSignError = fsm.Event("event_signing_partial_sign_error_received")
|
||||
eventSigningPartialSignsAwaitCancelByTimeoutInternal = fsm.Event("event_signing_partial_signs_await_cancel_by_timeout_internal")
|
||||
eventSigningPartialSignsAwaitCancelByErrorInternal = fsm.Event("event_signing_partial_signs_await_sign_cancel_by_error_internal")
|
||||
|
||||
eventAutoSigningValidatePartialKeyInternal = fsm.Event("event_signing_partial_keys_await_validate")
|
||||
eventAutoSigningValidatePartialSignInternal = fsm.Event("event_signing_partial_signs_await_validate")
|
||||
|
||||
eventSigningPartialKeysConfirmedInternal = fsm.Event("event_signing_partial_keys_confirmed_internal")
|
||||
eventSigningPartialSignsConfirmedInternal = fsm.Event("event_signing_partial_signs_confirmed_internal")
|
||||
EventSigningRestart = fsm.Event("event_signing_restart")
|
||||
)
|
||||
|
||||
|
@ -81,20 +81,20 @@ func New() internal.DumpedMachineProvider {
|
|||
// Validate
|
||||
{Name: eventAutoSigningValidateProposalInternal, SrcState: []fsm.State{StateSigningAwaitConfirmations}, DstState: StateSigningAwaitConfirmations, IsInternal: true, IsAuto: true},
|
||||
|
||||
{Name: eventSetProposalValidatedInternal, SrcState: []fsm.State{StateSigningAwaitConfirmations}, DstState: StateSigningAwaitPartialKeys, IsInternal: true},
|
||||
{Name: eventSetProposalValidatedInternal, SrcState: []fsm.State{StateSigningAwaitConfirmations}, DstState: StateSigningAwaitPartialSigns, IsInternal: true},
|
||||
|
||||
// Canceled
|
||||
{Name: EventSigningPartialKeyReceived, SrcState: []fsm.State{StateSigningAwaitPartialKeys}, DstState: StateSigningAwaitPartialKeys},
|
||||
{Name: EventSigningPartialKeyError, SrcState: []fsm.State{StateSigningAwaitPartialKeys}, DstState: StateSigningPartialKeysAwaitCancelledByError},
|
||||
{Name: eventSigningPartialKeyCancelByTimeoutInternal, SrcState: []fsm.State{StateSigningAwaitPartialKeys}, DstState: StateSigningPartialKeysAwaitCancelledByTimeout, IsInternal: true},
|
||||
{Name: eventSigningPartialKeyCancelByErrorInternal, SrcState: []fsm.State{StateSigningAwaitPartialKeys}, DstState: StateSigningPartialKeysAwaitCancelledByError, IsInternal: true},
|
||||
{Name: EventSigningPartialSignReceived, SrcState: []fsm.State{StateSigningAwaitPartialSigns}, DstState: StateSigningAwaitPartialSigns},
|
||||
{Name: EventSigningPartialSignError, SrcState: []fsm.State{StateSigningAwaitPartialSigns}, DstState: StateSigningPartialSignsAwaitCancelledByError},
|
||||
{Name: eventSigningPartialSignsAwaitCancelByTimeoutInternal, SrcState: []fsm.State{StateSigningAwaitPartialSigns}, DstState: StateSigningPartialSignsAwaitCancelledByTimeout, IsInternal: true},
|
||||
{Name: eventSigningPartialSignsAwaitCancelByErrorInternal, SrcState: []fsm.State{StateSigningAwaitPartialSigns}, DstState: StateSigningPartialSignsAwaitCancelledByError, IsInternal: true},
|
||||
|
||||
// Validate
|
||||
{Name: eventAutoSigningValidatePartialKeyInternal, SrcState: []fsm.State{StateSigningAwaitPartialKeys}, DstState: StateSigningAwaitPartialKeys, IsInternal: true, IsAuto: true},
|
||||
{Name: eventAutoSigningValidatePartialSignInternal, SrcState: []fsm.State{StateSigningAwaitPartialSigns}, DstState: StateSigningAwaitPartialSigns, IsInternal: true, IsAuto: true},
|
||||
|
||||
{Name: eventSigningPartialKeysConfirmedInternal, SrcState: []fsm.State{StateSigningAwaitPartialKeys}, DstState: StateSigningPartialKeysCollected, IsInternal: true},
|
||||
{Name: eventSigningPartialSignsConfirmedInternal, SrcState: []fsm.State{StateSigningAwaitPartialSigns}, DstState: StateSigningPartialSignsCollected, IsInternal: true},
|
||||
|
||||
{Name: EventSigningRestart, SrcState: []fsm.State{StateSigningPartialKeysCollected}, DstState: StateSigningIdle},
|
||||
{Name: EventSigningRestart, SrcState: []fsm.State{StateSigningPartialSignsCollected}, DstState: StateSigningIdle},
|
||||
},
|
||||
fsm.Callbacks{
|
||||
EventSigningInit: machine.actionInitSigningProposal,
|
||||
|
@ -102,9 +102,9 @@ func New() internal.DumpedMachineProvider {
|
|||
EventConfirmSigningConfirmation: machine.actionProposalResponseByParticipant,
|
||||
EventDeclineSigningConfirmation: machine.actionProposalResponseByParticipant,
|
||||
eventAutoSigningValidateProposalInternal: machine.actionValidateSigningProposalConfirmations,
|
||||
EventSigningPartialKeyReceived: machine.actionPartialKeyConfirmationReceived,
|
||||
eventAutoSigningValidatePartialKeyInternal: machine.actionValidateSigningPartialKeyAwaitConfirmations,
|
||||
EventSigningPartialKeyError: machine.actionConfirmationError,
|
||||
EventSigningPartialSignReceived: machine.actionPartialSignConfirmationReceived,
|
||||
eventAutoSigningValidatePartialSignInternal: machine.actionValidateSigningPartialSignsAwaitConfirmations,
|
||||
EventSigningPartialSignError: machine.actionConfirmationError,
|
||||
EventSigningRestart: machine.actionSigningRestart,
|
||||
},
|
||||
)
|
||||
|
|
|
@ -21,7 +21,7 @@ type SigningProposalParticipantRequest struct {
|
|||
|
||||
// States: "state_signing_await_partial_keys"
|
||||
// Events: "event_signing_partial_key_received"
|
||||
type SigningProposalPartialKeyRequest struct {
|
||||
type SigningProposalPartialSignRequest struct {
|
||||
SigningId string
|
||||
ParticipantId int
|
||||
PartialSign []byte
|
||||
|
|
|
@ -34,7 +34,7 @@ func (r *SigningProposalParticipantRequest) Validate() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (r *SigningProposalPartialKeyRequest) Validate() error {
|
||||
func (r *SigningProposalPartialSignRequest) Validate() error {
|
||||
if r.SigningId == "" {
|
||||
return errors.New("{SigningId} cannot be empty")
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue