Skip to content

Commit

Permalink
fix: prevents multiple labeled MCMS contracts
Browse files Browse the repository at this point in the history
  • Loading branch information
MStreet3 committed Feb 19, 2025
1 parent 8c49751 commit 29f5cde
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 3 deletions.
15 changes: 12 additions & 3 deletions deployment/common/changeset/state.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,11 +102,20 @@ func MaybeLoadMCMSWithTimelockChainState(
bypasser = deployment.NewTypeAndVersion(types.BypasserManyChainMultisig, deployment.Version1_0_0)

// the same contract can have different roles
multichain = deployment.NewTypeAndVersion(types.ManyChainMultisig, deployment.Version1_0_0)
// Convert map keys to a slice
wantTypes = []deployment.TypeAndVersion{timelock, proposer, canceller, bypasser, callProxy}
multichain = deployment.NewTypeAndVersion(types.ManyChainMultisig, deployment.Version1_0_0)
proposerMCMS = deployment.NewTypeAndVersion(types.ManyChainMultisig, deployment.Version1_0_0)
bypasserMCMS = deployment.NewTypeAndVersion(types.ManyChainMultisig, deployment.Version1_0_0)
cancellerMCMS = deployment.NewTypeAndVersion(types.ManyChainMultisig, deployment.Version1_0_0)
)

// Convert map keys to a slice
proposerMCMS.Labels.Add(types.ProposerRole.String())
bypasserMCMS.Labels.Add(types.BypasserRole.String())
cancellerMCMS.Labels.Add(types.CancellerRole.String())
wantTypes := []deployment.TypeAndVersion{timelock, proposer, canceller, bypasser, callProxy,
proposerMCMS, bypasserMCMS, cancellerMCMS,
}

// Ensure we either have the bundle or not.
_, err := deployment.EnsureDeduped(addresses, wantTypes)
if err != nil {
Expand Down
23 changes: 23 additions & 0 deletions deployment/common/changeset/state_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,29 @@ func TestMaybeLoadMCMSWithTimelockChainState(t *testing.T) {
},
wantErr: "unable to check MCMS contracts",
},
{
name: "NOK_multiple generic MCMS contracts with same label",
chain: defaultChain,
addresses: map[string]deployment.TypeAndVersion{
"0x123": deployment.NewTypeAndVersion(types.RBACTimelock, deployment.Version1_0_0),
"0x456": deployment.NewTypeAndVersion(types.CallProxy, deployment.Version1_0_0),
"0xabc": deployment.NewTypeAndVersion(types.CancellerManyChainMultisig, deployment.Version1_0_0),
"0xdef": deployment.NewTypeAndVersion(types.BypasserManyChainMultisig, deployment.Version1_0_0),

"0x789": deployment.NewTypeAndVersion(types.ProposerManyChainMultisig, deployment.Version1_0_0),
"0xaaa": func() deployment.TypeAndVersion {
tv := deployment.NewTypeAndVersion(types.ManyChainMultisig, deployment.Version1_0_0)
tv.Labels.Add(types.ProposerRole.String())
return tv
}(),
"0xbbb": func() deployment.TypeAndVersion {
tv := deployment.NewTypeAndVersion(types.ManyChainMultisig, deployment.Version1_0_0)
tv.Labels.Add(types.ProposerRole.String())
return tv
}(),
},
wantErr: "unable to check MCMS contracts",
},
}

for _, tt := range tests {
Expand Down

0 comments on commit 29f5cde

Please sign in to comment.