This commit is contained in:
x88 2020-08-26 16:41:50 +03:00
parent cb263b45b1
commit 039a664564
8 changed files with 69 additions and 19 deletions

View File

@ -24,7 +24,7 @@ import (
//
// req := requests.SigningProposalPartialKeyRequest{
// ParticipantId: 0, // TODO: from where?
// PartialKey: partialSign,
// PartialSign: partialSign,
// CreatedAt: o.CreatedAt,
// }
// reqBz, err := json.Marshal(req)

View File

@ -183,9 +183,9 @@ func (s SigningParticipantStatus) String() string {
}
type SigningProposalParticipant struct {
Addr string
Status SigningParticipantStatus
PartialKey []byte
Error error
UpdatedAt time.Time
Addr string
Status SigningParticipantStatus
PartialSign []byte
Error error
UpdatedAt time.Time
}

View File

@ -50,6 +50,7 @@ var (
testSigningId string
testSigningInitiator int
testSigningPayload = []byte("message to sign")
testFSMDump = map[fsm.State][]byte{}
)
@ -880,7 +881,6 @@ func Test_SigningProposal_EventSigningInit(t *testing.T) {
// Start
func Test_SigningProposal_EventSigningStart(t *testing.T) {
var (
mockPayload = []byte("message to sign")
fsmResponse *fsm.Response
)
@ -919,8 +919,8 @@ func Test_SigningProposal_EventSigningStart(t *testing.T) {
t.Fatalf("expected field {SigningId}")
}
if !reflect.DeepEqual(response.SrcPayload, mockPayload) {
t.Fatalf("expected matched {SigningId}")
if !reflect.DeepEqual(response.SrcPayload, testSigningPayload) {
t.Fatalf("expected matched {SrcPayload}")
}
testSigningId = response.SigningId
@ -977,6 +977,20 @@ func Test_SigningProposal_EventConfirmSigningConfirmation_Positive(t *testing.T)
compareState(t, sif.StateSigningAwaitPartialKeys, fsmResponse.State)
response, ok := fsmResponse.Data.(responses.SigningPartialSignsParticipantInvitationsResponse)
if !ok {
t.Fatalf("expected response {SigningProposalParticipantInvitationsResponse}")
}
if response.SigningId == "" {
t.Fatalf("expected field {SigningId}")
}
if !reflect.DeepEqual(response.SrcPayload, testSigningPayload) {
t.Fatalf("expected matched {SrcPayload}")
}
testFSMDump[sif.StateSigningAwaitPartialKeys] = testFSMDumpLocal
compareDumpNotZero(t, testFSMDump[sif.StateSigningAwaitPartialKeys])
@ -1059,7 +1073,7 @@ func Test_SigningProposal_EventSigningPartialKeyReceived_Positive(t *testing.T)
fsmResponse, testFSMDumpLocal, err = testFSMInstance.Do(sif.EventSigningPartialKeyReceived, requests.SigningProposalPartialKeyRequest{
SigningId: testSigningId,
ParticipantId: participantId,
PartialKey: participant.DkgPartialKey,
PartialSign: participant.DkgPartialKey,
CreatedAt: time.Now(),
})
@ -1077,6 +1091,20 @@ func Test_SigningProposal_EventSigningPartialKeyReceived_Positive(t *testing.T)
compareState(t, sif.StateSigningPartialKeysCollected, fsmResponse.State)
response, ok := fsmResponse.Data.(responses.SigningProcessParticipantResponse)
if !ok {
t.Fatalf("expected response {SigningProcessParticipantResponse}")
}
if response.SigningId == "" {
t.Fatalf("expected field {SigningId}")
}
if !reflect.DeepEqual(response.SrcPayload, testSigningPayload) {
t.Fatalf("expected matched {SrcPayload}")
}
testFSMDump[sif.StateSigningPartialKeysCollected] = testFSMDumpLocal
compareDumpNotZero(t, testFSMDump[sif.StateSigningPartialKeysCollected])

View File

@ -84,7 +84,6 @@ func (m *SigningProposalFSM) actionStartSigningProposal(inEvent fsm.Event, args
m.payload.SigningProposalPayload.CreatedAt = request.CreatedAt
// Make response
responseData := responses.SigningProposalParticipantInvitationsResponse{
SigningId: m.payload.SigningProposalPayload.SigningId,
InitiatorId: m.payload.SigningProposalPayload.InitiatorId,
@ -192,6 +191,15 @@ func (m *SigningProposalFSM) actionValidateSigningProposalConfirmations(inEvent
participant.Status = internal.SigningAwaitPartialKeys
}
// Make response
responseData := responses.SigningPartialSignsParticipantInvitationsResponse{
SigningId: m.payload.SigningProposalPayload.SigningId,
InitiatorId: m.payload.SigningProposalPayload.InitiatorId,
SrcPayload: m.payload.SigningProposalPayload.SrcPayload,
}
response = responseData
return
}
@ -227,8 +235,8 @@ func (m *SigningProposalFSM) actionPartialKeyConfirmationReceived(inEvent fsm.Ev
return
}
signingProposalParticipant.PartialKey = make([]byte, len(request.PartialKey))
copy(signingProposalParticipant.PartialKey, request.PartialKey)
signingProposalParticipant.PartialSign = make([]byte, len(request.PartialSign))
copy(signingProposalParticipant.PartialSign, request.PartialSign)
signingProposalParticipant.Status = internal.SigningPartialKeysConfirmed
signingProposalParticipant.UpdatedAt = request.CreatedAt
@ -280,6 +288,7 @@ func (m *SigningProposalFSM) actionValidateSigningPartialKeyAwaitConfirmations(i
// Response
responseData := responses.SigningProcessParticipantResponse{
SigningId: m.payload.SigningProposalPayload.SigningId,
SrcPayload: m.payload.SigningProposalPayload.SrcPayload,
Participants: make([]*responses.SigningProcessParticipantEntry, 0),
}
@ -287,7 +296,7 @@ func (m *SigningProposalFSM) actionValidateSigningPartialKeyAwaitConfirmations(i
responseEntry := &responses.SigningProcessParticipantEntry{
ParticipantId: participantId,
Addr: participant.Addr,
PartialKey: participant.PartialKey,
PartialSign: participant.PartialSign,
}
responseData.Participants = append(responseData.Participants, responseEntry)
}

View File

@ -24,6 +24,6 @@ type SigningProposalParticipantRequest struct {
type SigningProposalPartialKeyRequest struct {
SigningId string
ParticipantId int
PartialKey []byte
PartialSign []byte
CreatedAt time.Time
}

View File

@ -43,8 +43,8 @@ func (r *SigningProposalPartialKeyRequest) Validate() error {
return errors.New("{ParticipantId} cannot be a negative number")
}
if len(r.PartialKey) == 0 {
return errors.New("{PartialKey} cannot zero length")
if len(r.PartialSign) == 0 {
return errors.New("{PartialSign} cannot zero length")
}
if r.CreatedAt.IsZero() {

View File

@ -4,7 +4,6 @@ package responses
// Event: "event_sig_proposal_init"
// States: "__idle"
type SignatureProposalParticipantInvitationsResponse []*SignatureProposalParticipantInvitationEntry
type SignatureProposalParticipantInvitationEntry struct {

View File

@ -1,5 +1,7 @@
package responses
// Event: "event_signing_start"
// States: "state_signing_await_confirmations"
type SigningProposalParticipantInvitationsResponse struct {
SigningId string
InitiatorId int
@ -14,6 +16,16 @@ type SigningProposalParticipantInvitationEntry struct {
Status uint8
}
// Event: "event_signing_proposal_confirm_by_participant"
// States: "state_signing_await_partial_keys"
type SigningPartialSignsParticipantInvitationsResponse struct {
SigningId string
InitiatorId int
SrcPayload []byte
}
// Event: ""
// States: ""
type SigningProposalParticipantStatusResponse struct {
SigningId string
Participants []*SignatureProposalParticipantStatusEntry
@ -25,6 +37,8 @@ type SigningProposalParticipantStatusEntry struct {
Status uint8
}
// Event: ""
// States: ""
type SigningProcessParticipantResponse struct {
SigningId string
SrcPayload []byte
@ -34,5 +48,5 @@ type SigningProcessParticipantResponse struct {
type SigningProcessParticipantEntry struct {
ParticipantId int
Addr string
PartialKey []byte
PartialSign []byte
}