Skip to content

Commit c43a861

Browse files
test(mcms): replace legacy changeset usage
In the new changesets under mcms, we should be using the new changesets instead of the legacy changesets
1 parent 2695394 commit c43a861

9 files changed

Lines changed: 407 additions & 384 deletions

File tree

mcms/evm/firedrill/changeset_test.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,10 @@ import (
1515
mcmstypes "github.com/smartcontractkit/mcms/types"
1616
"github.com/stretchr/testify/require"
1717

18-
legacymcms "github.com/smartcontractkit/cld-changesets/legacy/mcms/changesets"
18+
deploy "github.com/smartcontractkit/cld-changesets/mcms/changesets/deploy"
1919
firedrill "github.com/smartcontractkit/cld-changesets/mcms/changesets/firedrill"
2020

21+
_ "github.com/smartcontractkit/cld-changesets/mcms/evm/deploy"
2122
_ "github.com/smartcontractkit/cld-changesets/mcms/evm/firedrill"
2223
_ "github.com/smartcontractkit/cld-changesets/mcms/evm/readers"
2324
)
@@ -66,8 +67,10 @@ func newEVMFireDrillRuntime(t *testing.T, selector uint64) *runtime.Runtime {
6667
require.NoError(t, err)
6768

6869
err = rt.Exec(
69-
runtime.ChangesetTask(cldf.CreateLegacyChangeSet(legacymcms.DeployMCMSWithTimelockV2), map[uint64]cldfproposalutils.MCMSWithTimelockConfig{
70-
selector: cldftesthelpers.SingleGroupTimelockConfig(t),
70+
runtime.ChangesetTask(deploy.Changeset{}, deploy.Input{
71+
ConfigByChain: map[uint64]cldfproposalutils.MCMSWithTimelockConfig{
72+
selector: cldftesthelpers.SingleGroupTimelockConfig(t),
73+
},
7174
}),
7275
)
7376
require.NoError(t, err)

mcms/evm/grant-role/sequence_test.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,11 @@ import (
2121
mcmsevm "github.com/smartcontractkit/mcms/sdk/evm"
2222
mcmstypes "github.com/smartcontractkit/mcms/types"
2323

24-
legacymcms "github.com/smartcontractkit/cld-changesets/legacy/mcms/changesets"
24+
deploy "github.com/smartcontractkit/cld-changesets/mcms/changesets/deploy"
2525
grantrole "github.com/smartcontractkit/cld-changesets/mcms/changesets/grant-role"
2626
evmreaders "github.com/smartcontractkit/cld-changesets/mcms/evm/readers"
2727

28+
_ "github.com/smartcontractkit/cld-changesets/mcms/evm/deploy"
2829
_ "github.com/smartcontractkit/cld-changesets/mcms/evm/readers"
2930
)
3031

@@ -135,8 +136,10 @@ func newEVMGrantRoleRuntime(t *testing.T, selector uint64) *runtime.Runtime {
135136
require.NoError(t, err)
136137

137138
err = rt.Exec(
138-
runtime.ChangesetTask(cldf.CreateLegacyChangeSet(legacymcms.DeployMCMSWithTimelockV2), map[uint64]cldfproposalutils.MCMSWithTimelockConfig{
139-
selector: cldftesthelpers.SingleGroupTimelockConfig(t),
139+
runtime.ChangesetTask(deploy.Changeset{}, deploy.Input{
140+
ConfigByChain: map[uint64]cldfproposalutils.MCMSWithTimelockConfig{
141+
selector: cldftesthelpers.SingleGroupTimelockConfig(t),
142+
},
140143
}),
141144
)
142145
require.NoError(t, err)

mcms/evm/set-config/changeset_test.go

Lines changed: 57 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,12 @@ import (
2626
"github.com/smartcontractkit/cld-changesets/datastore/refkey"
2727
"github.com/smartcontractkit/cld-changesets/internal/semvers"
2828

29-
// TODO: remove legacymcms import once remaining MCMS changesets are migrated out of legacy/mcms/changesets.
30-
legacymcms "github.com/smartcontractkit/cld-changesets/legacy/mcms/changesets"
3129
evmstate "github.com/smartcontractkit/cld-changesets/legacy/pkg/family/evm"
30+
deploy "github.com/smartcontractkit/cld-changesets/mcms/changesets/deploy"
3231
setconfig "github.com/smartcontractkit/cld-changesets/mcms/changesets/set-config"
32+
transfertotimelock "github.com/smartcontractkit/cld-changesets/mcms/changesets/transfer-to-timelock"
33+
34+
_ "github.com/smartcontractkit/cld-changesets/mcms/evm/transfer-to-timelock"
3335
)
3436

3537
func TestChangeset_VerifyPreconditions(t *testing.T) {
@@ -176,7 +178,7 @@ func TestChangeset_EVM(t *testing.T) {
176178
var mcmsInput *cldf.MCMSTimelockProposalInput
177179
if tt.useMCMS {
178180
cfgCanceller := cldftesthelpers.SingleGroupMCMS(t)
179-
cfgCanceller.Signers = append(cfgCanceller.Signers, mcmsState.BypasserMcm.Address())
181+
cfgCanceller.Signers = append(cfgCanceller.Signers, mcmsState.Bypasser)
180182
cfgCanceller.Quorum = 2
181183
targets = []setconfig.ContractSetConfig{
182184
{
@@ -186,15 +188,15 @@ func TestChangeset_EVM(t *testing.T) {
186188
}
187189
mcmsInput = newMCMSInput(mcmstypes.TimelockActionBypass, "Set config proposal", "")
188190
} else {
189-
timelockAddress := mcmsState.Timelock.Address()
191+
timelockAddress := mcmsState.Timelock
190192

191193
cfgProposer := cldftesthelpers.SingleGroupMCMS(t)
192194
cfgProposer.Signers = append(cfgProposer.Signers, timelockAddress)
193195
cfgProposer.Quorum = 2
194196
cfgCanceller := cldftesthelpers.SingleGroupMCMS(t)
195197
cfgBypasser := cldftesthelpers.SingleGroupMCMS(t)
196198
cfgBypasser.Signers = append(cfgBypasser.Signers, timelockAddress)
197-
cfgBypasser.Signers = append(cfgBypasser.Signers, mcmsState.ProposerMcm.Address())
199+
cfgBypasser.Signers = append(cfgBypasser.Signers, mcmsState.Proposer)
198200
cfgBypasser.Quorum = 3
199201

200202
targets = mcmsTargets(tt.selector, cfgProposer, cfgCanceller, cfgBypasser)
@@ -211,17 +213,17 @@ func TestChangeset_EVM(t *testing.T) {
211213

212214
if tt.useMCMS {
213215
cfgCanceller := targets[0].Config
214-
newConf, err := inspector.GetConfig(t.Context(), mcmsState.CancellerMcm.Address().Hex())
216+
newConf, err := inspector.GetConfig(t.Context(), mcmsState.Canceller.Hex())
215217
require.NoError(t, err)
216218
require.ElementsMatch(t, cfgCanceller.Signers, newConf.Signers)
217219
require.Equal(t, cfgCanceller.Quorum, newConf.Quorum)
218220

219-
proposerConf, err := inspector.GetConfig(t.Context(), mcmsState.ProposerMcm.Address().Hex())
221+
proposerConf, err := inspector.GetConfig(t.Context(), mcmsState.Proposer.Hex())
220222
require.NoError(t, err)
221223
require.ElementsMatch(t, originalCfg.Signers, proposerConf.Signers)
222224
require.Equal(t, originalCfg.Quorum, proposerConf.Quorum)
223225

224-
bypasserConf, err := inspector.GetConfig(t.Context(), mcmsState.BypasserMcm.Address().Hex())
226+
bypasserConf, err := inspector.GetConfig(t.Context(), mcmsState.Bypasser.Hex())
225227
require.NoError(t, err)
226228
require.ElementsMatch(t, originalCfg.Signers, bypasserConf.Signers)
227229
require.Equal(t, originalCfg.Quorum, bypasserConf.Quorum)
@@ -233,17 +235,17 @@ func TestChangeset_EVM(t *testing.T) {
233235
cfgCanceller := targets[1].Config
234236
cfgBypasser := targets[2].Config
235237

236-
newConf, err := inspector.GetConfig(t.Context(), mcmsState.ProposerMcm.Address().Hex())
238+
newConf, err := inspector.GetConfig(t.Context(), mcmsState.Proposer.Hex())
237239
require.NoError(t, err)
238240
require.ElementsMatch(t, cfgProposer.Signers, newConf.Signers)
239241
require.Equal(t, cfgProposer.Quorum, newConf.Quorum)
240242

241-
newConf, err = inspector.GetConfig(t.Context(), mcmsState.BypasserMcm.Address().Hex())
243+
newConf, err = inspector.GetConfig(t.Context(), mcmsState.Bypasser.Hex())
242244
require.NoError(t, err)
243245
require.ElementsMatch(t, cfgBypasser.Signers, newConf.Signers)
244246
require.Equal(t, cfgBypasser.Quorum, newConf.Quorum)
245247

246-
newConf, err = inspector.GetConfig(t.Context(), mcmsState.CancellerMcm.Address().Hex())
248+
newConf, err = inspector.GetConfig(t.Context(), mcmsState.Canceller.Hex())
247249
require.NoError(t, err)
248250
require.ElementsMatch(t, cfgCanceller.Signers, newConf.Signers)
249251
require.Equal(t, cfgCanceller.Quorum, newConf.Quorum)
@@ -260,7 +262,7 @@ func TestChangeset_EVM_PartialTargets(t *testing.T) {
260262
mcmsState, chain := evmMCMSChainState(t, rt, selector)
261263

262264
cfgProposer := cldftesthelpers.SingleGroupMCMS(t)
263-
cfgProposer.Signers = append(cfgProposer.Signers, mcmsState.Timelock.Address())
265+
cfgProposer.Signers = append(cfgProposer.Signers, mcmsState.Timelock)
264266
cfgProposer.Quorum = 2
265267

266268
err := rt.Exec(
@@ -279,17 +281,17 @@ func TestChangeset_EVM_PartialTargets(t *testing.T) {
279281
inspector := evm.NewInspector(chain.Client)
280282
originalCfg := cldftesthelpers.SingleGroupMCMS(t)
281283

282-
proposerConf, err := inspector.GetConfig(t.Context(), mcmsState.ProposerMcm.Address().Hex())
284+
proposerConf, err := inspector.GetConfig(t.Context(), mcmsState.Proposer.Hex())
283285
require.NoError(t, err)
284286
require.ElementsMatch(t, cfgProposer.Signers, proposerConf.Signers)
285287
require.Equal(t, cfgProposer.Quorum, proposerConf.Quorum)
286288

287-
cancellerConf, err := inspector.GetConfig(t.Context(), mcmsState.CancellerMcm.Address().Hex())
289+
cancellerConf, err := inspector.GetConfig(t.Context(), mcmsState.Canceller.Hex())
288290
require.NoError(t, err)
289291
require.ElementsMatch(t, originalCfg.Signers, cancellerConf.Signers)
290292
require.Equal(t, originalCfg.Quorum, cancellerConf.Quorum)
291293

292-
bypasserConf, err := inspector.GetConfig(t.Context(), mcmsState.BypasserMcm.Address().Hex())
294+
bypasserConf, err := inspector.GetConfig(t.Context(), mcmsState.Bypasser.Hex())
293295
require.NoError(t, err)
294296
require.ElementsMatch(t, originalCfg.Signers, bypasserConf.Signers)
295297
require.Equal(t, originalCfg.Quorum, bypasserConf.Quorum)
@@ -311,11 +313,11 @@ func TestChangeset_EVM_Qualifier(t *testing.T) {
311313
rmnmcmsConfig.Qualifier = &rmnmcmsQualifier
312314

313315
err := rt.Exec(
314-
runtime.ChangesetTask(cldf.CreateLegacyChangeSet(legacymcms.DeployMCMSWithTimelockV2), map[uint64]cldfproposalutils.MCMSWithTimelockConfig{
315-
selector: cllccipConfig,
316+
runtime.ChangesetTask(deploy.Changeset{}, deploy.Input{
317+
ConfigByChain: map[uint64]cldfproposalutils.MCMSWithTimelockConfig{selector: cllccipConfig},
316318
}),
317-
runtime.ChangesetTask(cldf.CreateLegacyChangeSet(legacymcms.DeployMCMSWithTimelockV2), map[uint64]cldfproposalutils.MCMSWithTimelockConfig{
318-
selector: rmnmcmsConfig,
319+
runtime.ChangesetTask(deploy.Changeset{}, deploy.Input{
320+
ConfigByChain: map[uint64]cldfproposalutils.MCMSWithTimelockConfig{selector: rmnmcmsConfig},
319321
}),
320322
)
321323
require.NoError(t, err)
@@ -457,7 +459,7 @@ func newEVMRuntimeWithDeploy(t *testing.T, selectors ...uint64) *runtime.Runtime
457459
for _, selector := range selectors {
458460
configByChain[selector] = cfg
459461
}
460-
err := rt.Exec(runtime.ChangesetTask(cldf.CreateLegacyChangeSet(legacymcms.DeployMCMSWithTimelockV2), configByChain))
462+
err := rt.Exec(runtime.ChangesetTask(deploy.Changeset{}, deploy.Input{ConfigByChain: configByChain}))
461463
require.NoError(t, err)
462464

463465
return rt
@@ -466,16 +468,23 @@ func newEVMRuntimeWithDeploy(t *testing.T, selectors ...uint64) *runtime.Runtime
466468
func transferEVMMCMSToTimelock(t *testing.T, rt *runtime.Runtime, selector uint64) {
467469
t.Helper()
468470

469-
mcmsState, _ := evmMCMSChainState(t, rt, selector)
470471
err := rt.Exec(
471-
runtime.ChangesetTask(cldf.CreateLegacyChangeSet(legacymcms.TransferToMCMSWithTimelockV2), legacymcms.TransferToMCMSWithTimelockConfig{
472-
ContractsByChain: map[uint64][]common.Address{
473-
selector: {
474-
mcmsState.ProposerMcm.Address(),
475-
mcmsState.BypasserMcm.Address(),
476-
mcmsState.CancellerMcm.Address(),
472+
runtime.ChangesetTask(transfertotimelock.Changeset{}, transfertotimelock.Input{
473+
Cfg: transfertotimelock.Config{
474+
ContractsByChain: map[uint64][]refkey.RefKey{
475+
selector: {
476+
contractRef(selector, mcmscontracts.ProposerManyChainMultisig, ""),
477+
contractRef(selector, mcmscontracts.BypasserManyChainMultisig, ""),
478+
contractRef(selector, mcmscontracts.CancellerManyChainMultisig, ""),
479+
},
477480
},
478481
},
482+
MCMS: &cldf.MCMSTimelockProposalInput{
483+
TimelockAction: mcmstypes.TimelockActionBypass,
484+
ValidUntil: uint32(time.Now().Add(2 * time.Hour).UTC().Unix()), //nolint:gosec // test timestamp
485+
TimelockDelay: mcmstypes.NewDuration(0),
486+
Description: "Transfer MCMS ownership to timelock",
487+
},
479488
}),
480489
runtime.SignAndExecuteProposalsTask([]*ecdsa.PrivateKey{cldftesthelpers.TestXXXMCMSSigner}),
481490
)
@@ -491,15 +500,30 @@ func newEVMRuntimeWithDeployAndTransfer(t *testing.T, selector uint64) *runtime.
491500
return rt
492501
}
493502

494-
func evmMCMSChainState(t *testing.T, rt *runtime.Runtime, selector uint64) (*evmstate.MCMSWithTimelockState, cldf_evm.Chain) {
503+
type evmMCMSChainRefs struct {
504+
Timelock common.Address
505+
Proposer common.Address
506+
Canceller common.Address
507+
Bypasser common.Address
508+
}
509+
510+
func evmMCMSChainState(t *testing.T, rt *runtime.Runtime, selector uint64) (evmMCMSChainRefs, cldf_evm.Chain) {
495511
t.Helper()
496512

497513
chain := rt.Environment().BlockChains.EVMChains()[selector]
498-
addrs, err := rt.State().AddressBook.AddressesForChain(selector)
499-
require.NoError(t, err)
514+
env := rt.Environment()
500515

501-
mcmsState, err := evmstate.MaybeLoadMCMSWithTimelockChainState(chain, addrs)
502-
require.NoError(t, err)
516+
resolve := func(contractType cldf.ContractType) common.Address {
517+
resolved, err := contractRef(selector, contractType, "").Resolve(env)
518+
require.NoError(t, err)
519+
520+
return common.HexToAddress(resolved.Address)
521+
}
503522

504-
return mcmsState, chain
523+
return evmMCMSChainRefs{
524+
Timelock: resolve(mcmscontracts.RBACTimelock),
525+
Proposer: resolve(mcmscontracts.ProposerManyChainMultisig),
526+
Canceller: resolve(mcmscontracts.CancellerManyChainMultisig),
527+
Bypasser: resolve(mcmscontracts.BypasserManyChainMultisig),
528+
}, chain
505529
}

0 commit comments

Comments
 (0)