Skip to content

Commit

Permalink
Encapsulate multisig collector factory in a func
Browse files Browse the repository at this point in the history
Signed-off-by: Matej Pavlovic <matopavlovic@gmail.com>
  • Loading branch information
matejpavlovic committed Aug 26, 2022
1 parent d838b42 commit de0091b
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 67 deletions.
41 changes: 41 additions & 0 deletions pkg/availability/multisigcollector/multisigcollector.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,12 @@ import (
"github.com/filecoin-project/mir/pkg/availability/multisigcollector/internal/parts/certcreation"
"github.com/filecoin-project/mir/pkg/availability/multisigcollector/internal/parts/certverification"
"github.com/filecoin-project/mir/pkg/dsl"
"github.com/filecoin-project/mir/pkg/factorymodule"
"github.com/filecoin-project/mir/pkg/logging"
"github.com/filecoin-project/mir/pkg/modules"
"github.com/filecoin-project/mir/pkg/pb/factorymodulepb"
t "github.com/filecoin-project/mir/pkg/types"
"github.com/filecoin-project/mir/pkg/util/maputil"
)

// ModuleConfig sets the module ids. All replicas are expected to use identical module configurations.
Expand Down Expand Up @@ -48,3 +52,40 @@ func NewModule(mc *ModuleConfig, params *ModuleParams, nodeID t.NodeID) (modules

return m, nil
}

func NewReconfigurableModule(mc *ModuleConfig, nodeID t.NodeID, logger logging.Logger) modules.PassiveModule {
return factorymodule.New(
mc.Self,
factorymodule.DefaultParams(

// This function will be called whenever the factory module
// is asked to create a new instance of the multisig collector.
func(mscID t.ModuleID, params *factorymodulepb.GeneratorParams) (modules.PassiveModule, error) {

// Extract the IDs of the nodes in the membership associated with this instance
m := params.Type.(*factorymodulepb.GeneratorParams_MultisigCollector).MultisigCollector.Membership
mscNodeIDs := maputil.GetSortedKeys(t.Membership(m))

// Crate a copy of basic module config with an adapted ID for the submodule.
submc := *mc
submc.Self = mscID

// Create a new instance of the multisig collector.
multisigCollector, err := NewModule(
&submc,
&ModuleParams{
InstanceUID: []byte(mscID),
AllNodes: mscNodeIDs,
F: (len(mscNodeIDs) - 1) / 2,
},
nodeID,
)
if err != nil {
return nil, err
}
return multisigCollector, nil
},
),
logger,
)
}
44 changes: 10 additions & 34 deletions pkg/iss/iss_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,12 @@ import (
"github.com/filecoin-project/mir/pkg/availability/batchdb/fakebatchdb"
"github.com/filecoin-project/mir/pkg/availability/multisigcollector"
"github.com/filecoin-project/mir/pkg/deploytest"
"github.com/filecoin-project/mir/pkg/factorymodule"
"github.com/filecoin-project/mir/pkg/logging"
"github.com/filecoin-project/mir/pkg/mempool/simplemempool"
"github.com/filecoin-project/mir/pkg/modules"
"github.com/filecoin-project/mir/pkg/pb/eventpb"
"github.com/filecoin-project/mir/pkg/pb/factorymodulepb"
"github.com/filecoin-project/mir/pkg/testsim"
t "github.com/filecoin-project/mir/pkg/types"
"github.com/filecoin-project/mir/pkg/util/maputil"
)

const (
Expand Down Expand Up @@ -426,36 +423,15 @@ func newDeployment(conf *TestConfig) (*deploytest.Deployment, error) {
)

// Instantiate the availability layer.
mscFactory := factorymodule.New(
"availability",
factorymodule.DefaultParams(
func(mscID t.ModuleID, params *factorymodulepb.GeneratorParams) (modules.PassiveModule, error) {

m := params.Type.(*factorymodulepb.GeneratorParams_MultisigCollector).MultisigCollector.Membership
mscNodeIDs := maputil.GetSortedKeys(t.Membership(m))

// Instantiate the availability layer.
multisigCollector, err := multisigcollector.NewModule(
&multisigcollector.ModuleConfig{
Self: mscID,
Mempool: "mempool",
BatchDB: "batchdb",
Net: "net",
Crypto: "crypto",
},
&multisigcollector.ModuleParams{
InstanceUID: []byte(mscID),
AllNodes: mscNodeIDs,
F: (len(mscNodeIDs) - 1) / 2,
},
nodeID,
)
if err != nil {
return nil, err
}
return multisigCollector, nil
},
),
availability := multisigcollector.NewReconfigurableModule(
&multisigcollector.ModuleConfig{
Self: "availability",
Mempool: "mempool",
BatchDB: "batchdb",
Net: "net",
Crypto: "crypto",
},
nodeID,
logger,
)

Expand All @@ -466,7 +442,7 @@ func newDeployment(conf *TestConfig) (*deploytest.Deployment, error) {
"net": transport,
"mempool": mempool,
"batchdb": batchdb,
"availability": mscFactory,
"availability": availability,
})
if err != nil {
return nil, fmt.Errorf("error initializing the Mir modules: %w", err)
Expand Down
43 changes: 10 additions & 33 deletions samples/chat-demo/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,13 @@ import (
"github.com/filecoin-project/mir/pkg/availability/multisigcollector"
mirCrypto "github.com/filecoin-project/mir/pkg/crypto"
"github.com/filecoin-project/mir/pkg/events"
"github.com/filecoin-project/mir/pkg/factorymodule"
"github.com/filecoin-project/mir/pkg/iss"
"github.com/filecoin-project/mir/pkg/logging"
"github.com/filecoin-project/mir/pkg/mempool/simplemempool"
"github.com/filecoin-project/mir/pkg/modules"
"github.com/filecoin-project/mir/pkg/net"
"github.com/filecoin-project/mir/pkg/net/grpc"
"github.com/filecoin-project/mir/pkg/net/libp2p"
"github.com/filecoin-project/mir/pkg/pb/factorymodulepb"
"github.com/filecoin-project/mir/pkg/pb/requestpb"
t "github.com/filecoin-project/mir/pkg/types"
libp2ptools "github.com/filecoin-project/mir/pkg/util/libp2p"
Expand Down Expand Up @@ -226,36 +224,15 @@ func run() error {
},
)

mscFactory := factorymodule.New(
"availability",
factorymodule.DefaultParams(
func(mscID t.ModuleID, params *factorymodulepb.GeneratorParams) (modules.PassiveModule, error) {

m := params.Type.(*factorymodulepb.GeneratorParams_MultisigCollector).MultisigCollector.Membership
mscNodeIDs := maputil.GetSortedKeys(t.Membership(m))

// Instantiate the availability layer.
multisigCollector, err := multisigcollector.NewModule(
&multisigcollector.ModuleConfig{
Self: mscID,
Mempool: "mempool",
BatchDB: "batchdb",
Net: "net",
Crypto: "crypto",
},
&multisigcollector.ModuleParams{
InstanceUID: []byte(mscID),
AllNodes: mscNodeIDs,
F: (len(mscNodeIDs) - 1) / 2,
},
args.OwnID,
)
if err != nil {
return nil, err
}
return multisigCollector, nil
},
),
availability := multisigcollector.NewReconfigurableModule(
&multisigcollector.ModuleConfig{
Self: "availability",
Mempool: "mempool",
BatchDB: "batchdb",
Net: "net",
Crypto: "crypto",
},
args.OwnID,
logger,
)

Expand All @@ -279,7 +256,7 @@ func run() error {

"mempool": mempool,
"batchdb": batchdb,
"availability": mscFactory,
"availability": availability,
})
if err != nil {
return fmt.Errorf("failed to initialize Mir modules: %w", err)
Expand Down

0 comments on commit de0091b

Please sign in to comment.