@@ -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
3537func 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
466468func 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