Skip to content
Snippets Groups Projects
Commit 65ff8beb authored by capossele's avatar capossele
Browse files

:recycle: refactors dispatcher

parent a3f14e3d
Branches
Tags
No related merge requests found
package drng package drng
import ( import (
"time"
"github.com/iotaledger/goshimmer/packages/binary/drng/payload"
"github.com/iotaledger/goshimmer/packages/binary/drng/payload/header" "github.com/iotaledger/goshimmer/packages/binary/drng/payload/header"
"github.com/iotaledger/goshimmer/packages/binary/drng/subtypes/collectiveBeacon" "github.com/iotaledger/goshimmer/packages/binary/drng/subtypes/collectiveBeacon"
"github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction" "github.com/iotaledger/goshimmer/packages/binary/drng/subtypes/collectiveBeacon/events"
cb "github.com/iotaledger/goshimmer/packages/binary/drng/subtypes/collectiveBeacon/payload"
"github.com/iotaledger/goshimmer/packages/binary/marshalutil"
"github.com/iotaledger/goshimmer/packages/binary/signature/ed25119"
) )
func (drng *Instance) Dispatch(subtype header.Type, tx *transaction.Transaction) { func (drng *Instance) Dispatch(issuer ed25119.PublicKey, timestamp time.Time, payload *payload.Payload) {
switch subtype { switch payload.SubType() {
case header.CollectiveBeaconType(): case header.CollectiveBeaconType():
// parse as CollectiveBeaconType
marshalUtil := marshalutil.New(payload.Bytes())
parsedPayload, err := cb.Parse(marshalUtil)
if err != nil {
return
}
// trigger CollectiveBeaconEvent
cbEvent := &events.CollectiveBeaconEvent{
IssuerPublicKey: issuer,
Timestamp: timestamp,
InstanceID: parsedPayload.Instance(),
Round: parsedPayload.Round(),
PrevSignature: parsedPayload.PrevSignature(),
Signature: parsedPayload.Signature(),
Dpk: parsedPayload.DistributedPK(),
}
drng.Events.CollectiveBeacon.Trigger(cbEvent)
// process collectiveBeacon // process collectiveBeacon
if err := collectiveBeacon.ProcessTransaction(drng.State, drng.Events.CollectiveBeacon, tx); err != nil { if err := collectiveBeacon.ProcessBeacon(drng.State, cbEvent); err != nil {
return return
} }
// trigger RandomnessEvent // trigger RandomnessEvent
......
...@@ -8,53 +8,30 @@ import ( ...@@ -8,53 +8,30 @@ import (
"github.com/drand/drand/key" "github.com/drand/drand/key"
"github.com/iotaledger/goshimmer/packages/binary/drng/state" "github.com/iotaledger/goshimmer/packages/binary/drng/state"
"github.com/iotaledger/goshimmer/packages/binary/drng/subtypes/collectiveBeacon/events" "github.com/iotaledger/goshimmer/packages/binary/drng/subtypes/collectiveBeacon/events"
"github.com/iotaledger/goshimmer/packages/binary/drng/subtypes/collectiveBeacon/payload"
"github.com/iotaledger/goshimmer/packages/binary/marshalutil"
"github.com/iotaledger/goshimmer/packages/binary/signature/ed25119" "github.com/iotaledger/goshimmer/packages/binary/signature/ed25119"
"github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction"
) )
// ProcessTransaction performs the following tasks: // ProcessTransaction performs the following tasks:
// 1 - parse as CollectiveBeaconType // - verify that we have a valid random
// 2 - trigger CollectiveBeaconEvent // - update drng state
// 3 - verify that we have a valid random func ProcessBeacon(drng *state.State, cb *events.CollectiveBeaconEvent) error {
// 4 - update drng state
func ProcessTransaction(drng *state.State, event events.CollectiveBeacon, tx *transaction.Transaction) error {
// 1 - parse as CollectiveBeaconType
marshalUtil := marshalutil.New(tx.GetPayload().Bytes())
parsedPayload, err := payload.Parse(marshalUtil)
if err != nil {
return err
}
// 2 - trigger CollectiveBeaconEvent
cbEvent := &events.CollectiveBeaconEvent{
IssuerPublicKey: tx.IssuerPublicKey(),
Timestamp: tx.IssuingTime(),
InstanceID: parsedPayload.Instance(),
Round: parsedPayload.Round(),
PrevSignature: parsedPayload.PrevSignature(),
Signature: parsedPayload.Signature(),
Dpk: parsedPayload.DistributedPK(),
}
event.Trigger(cbEvent)
// 3 - verify that we have a valid random // verify that we have a valid random
if err := VerifyCollectiveBeacon(drng, cbEvent); err != nil { if err := VerifyCollectiveBeacon(drng, cb); err != nil {
//TODO: handle error //TODO: handle error
return err return err
} }
// 4 - update drng state // update drng state
randomness, err := GetRandomness(cbEvent.Signature) randomness, err := GetRandomness(cb.Signature)
if err != nil { if err != nil {
//TODO: handle error //TODO: handle error
return err return err
} }
newRandomness := &state.Randomness{ newRandomness := &state.Randomness{
Round: cbEvent.Round, Round: cb.Round,
Randomness: randomness, Randomness: randomness,
Timestamp: cbEvent.Timestamp, Timestamp: cb.Timestamp,
} }
drng.SetRandomness(newRandomness) drng.SetRandomness(newRandomness)
return nil return nil
......
...@@ -4,7 +4,9 @@ import ( ...@@ -4,7 +4,9 @@ import (
"encoding/hex" "encoding/hex"
"testing" "testing"
"github.com/iotaledger/goshimmer/packages/binary/drng/state"
"github.com/iotaledger/goshimmer/packages/binary/drng/subtypes/collectiveBeacon/events" "github.com/iotaledger/goshimmer/packages/binary/drng/subtypes/collectiveBeacon/events"
"github.com/iotaledger/goshimmer/packages/binary/signature/ed25119"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
...@@ -13,19 +15,33 @@ var ( ...@@ -13,19 +15,33 @@ var (
prevSignatureTest []byte prevSignatureTest []byte
signatureTest []byte signatureTest []byte
dpkTest []byte dpkTest []byte
issuerPK ed25119.PublicKey
stateTest *state.State
) )
func init() { func init() {
prevSignatureTest, _ = hex.DecodeString("ae9ba6d1445bffea8e66cb7d28fe5924e0a8d31b11b62a8710204e56e1ba84bc3694a3033e5793fcee6e75e956e5da3016cd0e22aa46fa419cd06343a7ff9d1e9c5c08f660f0bdec099e97ef99f470bb8c607ce9667a165e9caa474710f62ffd") prevSignatureTest, _ = hex.DecodeString("ae9ba6d1445bffea8e66cb7d28fe5924e0a8d31b11b62a8710204e56e1ba84bc3694a3033e5793fcee6e75e956e5da3016cd0e22aa46fa419cd06343a7ff9d1e9c5c08f660f0bdec099e97ef99f470bb8c607ce9667a165e9caa474710f62ffd")
signatureTest, _ = hex.DecodeString("8dee56fae60dcad960f7176d0813d5415b930cf6e20c299ec2c2dfc5f2ad4903916fd462ba1abf5c32a5bfd94dcc8eba062d011a548d99df7fa1e3bbbc9a0455663d60f6ccc736c1d5b6de727dbe4427e21fb660925518be386265913f447c94") signatureTest, _ = hex.DecodeString("8dee56fae60dcad960f7176d0813d5415b930cf6e20c299ec2c2dfc5f2ad4903916fd462ba1abf5c32a5bfd94dcc8eba062d011a548d99df7fa1e3bbbc9a0455663d60f6ccc736c1d5b6de727dbe4427e21fb660925518be386265913f447c94")
dpkTest, _ = hex.DecodeString("a02fcd15edd52c8e134027491a43b597505b466d1679e88f70f927e57c45a93ae0765ff02fc2d015e3a02fd8748e2103") dpkTest, _ = hex.DecodeString("a02fcd15edd52c8e134027491a43b597505b466d1679e88f70f927e57c45a93ae0765ff02fc2d015e3a02fd8748e2103")
kp := ed25119.GenerateKeyPair()
issuerPK = kp.PublicKey
eventTest = &events.CollectiveBeaconEvent{ eventTest = &events.CollectiveBeaconEvent{
InstanceID: 1, IssuerPublicKey: issuerPK,
Round: 1, InstanceID: 1,
PrevSignature: prevSignatureTest, Round: 1,
Signature: signatureTest, PrevSignature: prevSignatureTest,
Dpk: dpkTest, Signature: signatureTest,
Dpk: dpkTest,
} }
stateTest = state.New(state.SetCommittee(
&state.Committee{
InstanceID: 1,
Threshold: 3,
Identities: []ed25119.PublicKey{issuerPK},
DistributedPK: dpkTest,
}))
} }
func TestVerifySignature(t *testing.T) { func TestVerifySignature(t *testing.T) {
...@@ -40,6 +56,11 @@ func TestGetRandomness(t *testing.T) { ...@@ -40,6 +56,11 @@ func TestGetRandomness(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
} }
func TestProcessTransaction(t *testing.T) {
err := ProcessBeacon(stateTest, eventTest)
require.NoError(t, err)
}
// func dkgShares(t *testing.T, n, threshold int) *collectiveBeacon.Payload { // func dkgShares(t *testing.T, n, threshold int) *collectiveBeacon.Payload {
// var priPoly *share.PriPoly // var priPoly *share.PriPoly
// var pubPoly *share.PubPoly // var pubPoly *share.PubPoly
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment