diff --git a/deployment/ccip/changeset/accept_ownership_test.go b/deployment/ccip/changeset/accept_ownership_test.go index 264be42cce1..3cf8d6a5802 100644 --- a/deployment/ccip/changeset/accept_ownership_test.go +++ b/deployment/ccip/changeset/accept_ownership_test.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/require" "golang.org/x/exp/maps" + "github.com/smartcontractkit/chainlink/deployment" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/testhelpers" commonchangeset "github.com/smartcontractkit/chainlink/deployment/common/changeset" @@ -39,12 +40,12 @@ func Test_NewAcceptOwnershipChangeset(t *testing.T) { require.NoError(t, err) // compose the transfer ownership and accept ownership changesets - _, err = commonchangeset.ApplyChangesets(t, e.Env, timelockContracts, []commonchangeset.ChangesetApplication{ + _, err = commonchangeset.ApplyChangesets(t, e.Env, timelockContracts, []commonchangeset.ConfiguredChangeSet{ // note this doesn't have proposals. - { - Changeset: commonchangeset.WrapChangeSet(commonchangeset.TransferToMCMSWithTimelock), - Config: testhelpers.GenTestTransferOwnershipConfig(e, allChains, state), - }, + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.TransferToMCMSWithTimelock), + testhelpers.GenTestTransferOwnershipConfig(e, allChains, state), + ), }) require.NoError(t, err) diff --git a/deployment/ccip/changeset/cs_accept_admin_role_test.go b/deployment/ccip/changeset/cs_accept_admin_role_test.go index 8d7c8cb6e9f..046d7b8a347 100644 --- a/deployment/ccip/changeset/cs_accept_admin_role_test.go +++ b/deployment/ccip/changeset/cs_accept_admin_role_test.go @@ -102,11 +102,11 @@ func TestAcceptAdminRoleChangeset_Validations(t *testing.T) { for _, test := range tests { t.Run(test.Msg, func(t *testing.T) { - _, err := commonchangeset.ApplyChangesets(t, e, timelockContracts, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.AcceptAdminRoleChangeset), - Config: test.Config, - }, + _, err := commonchangeset.ApplyChangesets(t, e, timelockContracts, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.AcceptAdminRoleChangeset), + test.Config, + ), }) require.Error(t, err) require.ErrorContains(t, err, test.ErrStr) @@ -143,10 +143,10 @@ func TestAcceptAdminRoleChangeset_Execution(t *testing.T) { registryOnA := state.Chains[selectorA].TokenAdminRegistry registryOnB := state.Chains[selectorB].TokenAdminRegistry - e, err = commonchangeset.ApplyChangesets(t, e, timelockContracts, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.ProposeAdminRoleChangeset), - Config: changeset.TokenAdminRegistryChangesetConfig{ + e, err = commonchangeset.ApplyChangesets(t, e, timelockContracts, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.ProposeAdminRoleChangeset), + changeset.TokenAdminRegistryChangesetConfig{ MCMS: mcmsConfig, Pools: map[uint64]map[changeset.TokenSymbol]changeset.TokenPoolInfo{ selectorA: map[changeset.TokenSymbol]changeset.TokenPoolInfo{ @@ -163,10 +163,10 @@ func TestAcceptAdminRoleChangeset_Execution(t *testing.T) { }, }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.AcceptAdminRoleChangeset), - Config: changeset.TokenAdminRegistryChangesetConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.AcceptAdminRoleChangeset), + changeset.TokenAdminRegistryChangesetConfig{ MCMS: mcmsConfig, Pools: map[uint64]map[changeset.TokenSymbol]changeset.TokenPoolInfo{ selectorA: map[changeset.TokenSymbol]changeset.TokenPoolInfo{ @@ -183,7 +183,7 @@ func TestAcceptAdminRoleChangeset_Execution(t *testing.T) { }, }, }, - }, + ), }) require.NoError(t, err) diff --git a/deployment/ccip/changeset/cs_active_candidate_test.go b/deployment/ccip/changeset/cs_active_candidate_test.go index d0882a078c7..b9b5ca60012 100644 --- a/deployment/ccip/changeset/cs_active_candidate_test.go +++ b/deployment/ccip/changeset/cs_active_candidate_test.go @@ -9,6 +9,7 @@ import ( "golang.org/x/exp/maps" "github.com/smartcontractkit/chainlink-testing-framework/lib/utils/testcontext" + "github.com/smartcontractkit/chainlink/deployment" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/internal" @@ -41,10 +42,10 @@ func Test_ActiveCandidate(t *testing.T) { // Connect source to dest sourceState := state.Chains[source] - tenv.Env, err = commonchangeset.ApplyChangesets(t, tenv.Env, tenv.TimelockContracts(t), []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateOnRampsDestsChangeset), - Config: changeset.UpdateOnRampDestsConfig{ + tenv.Env, err = commonchangeset.ApplyChangesets(t, tenv.Env, tenv.TimelockContracts(t), []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateOnRampsDestsChangeset), + changeset.UpdateOnRampDestsConfig{ UpdatesByChain: map[uint64]map[uint64]changeset.OnRampDestinationUpdate{ source: { dest: { @@ -54,10 +55,10 @@ func Test_ActiveCandidate(t *testing.T) { }, }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateFeeQuoterPricesChangeset), - Config: changeset.UpdateFeeQuoterPricesConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateFeeQuoterPricesChangeset), + changeset.UpdateFeeQuoterPricesConfig{ PricesByChain: map[uint64]changeset.FeeQuoterPriceUpdatePerSource{ source: { TokenPrices: map[common.Address]*big.Int{ @@ -70,20 +71,20 @@ func Test_ActiveCandidate(t *testing.T) { }, }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateFeeQuoterDestsChangeset), - Config: changeset.UpdateFeeQuoterDestsConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateFeeQuoterDestsChangeset), + changeset.UpdateFeeQuoterDestsConfig{ UpdatesByChain: map[uint64]map[uint64]fee_quoter.FeeQuoterDestChainConfig{ source: { dest: changeset.DefaultFeeQuoterDestChainConfig(true), }, }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateOffRampSourcesChangeset), - Config: changeset.UpdateOffRampSourcesConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateOffRampSourcesChangeset), + changeset.UpdateOffRampSourcesConfig{ UpdatesByChain: map[uint64]map[uint64]changeset.OffRampSourceUpdate{ dest: { source: { @@ -92,10 +93,10 @@ func Test_ActiveCandidate(t *testing.T) { }, }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateRouterRampsChangeset), - Config: changeset.UpdateRouterRampsConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateRouterRampsChangeset), + changeset.UpdateRouterRampsConfig{ UpdatesByChain: map[uint64]changeset.RouterUpdates{ // onRamp update on source chain source: { @@ -111,7 +112,7 @@ func Test_ActiveCandidate(t *testing.T) { }, }, }, - }, + ), }) require.NoError(t, err) @@ -124,11 +125,11 @@ func Test_ActiveCandidate(t *testing.T) { // Transfer ownership so that we can set new candidate configs // and set new config digest on the offramp. - _, err = commonchangeset.ApplyChangesets(t, tenv.Env, tenv.TimelockContracts(t), []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(commonchangeset.TransferToMCMSWithTimelock), - Config: testhelpers.GenTestTransferOwnershipConfig(tenv, allChains, state), - }, + _, err = commonchangeset.ApplyChangesets(t, tenv.Env, tenv.TimelockContracts(t), []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.TransferToMCMSWithTimelock), + testhelpers.GenTestTransferOwnershipConfig(tenv, allChains, state), + ), }) require.NoError(t, err) testhelpers.AssertTimelockOwnership(t, tenv, allChains, state) @@ -191,10 +192,10 @@ func Test_ActiveCandidate(t *testing.T) { // Now we can add a candidate config, send another request, and observe behavior. // The candidate config should not be able to execute messages. tokenConfig := changeset.NewTestTokenConfig(state.Chains[tenv.FeedChainSel].USDFeeds) - _, err = commonchangeset.ApplyChangesets(t, tenv.Env, tenv.TimelockContracts(t), []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.SetCandidateChangeset), - Config: changeset.SetCandidateChangesetConfig{ + _, err = commonchangeset.ApplyChangesets(t, tenv.Env, tenv.TimelockContracts(t), []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.SetCandidateChangeset), + changeset.SetCandidateChangesetConfig{ SetCandidateConfigBase: changeset.SetCandidateConfigBase{ HomeChainSelector: tenv.HomeChainSel, FeedChainSelector: tenv.FeedChainSel, @@ -226,7 +227,7 @@ func Test_ActiveCandidate(t *testing.T) { }, }, }, - }, + ), }) require.NoError(t, err) diff --git a/deployment/ccip/changeset/cs_ccip_home_test.go b/deployment/ccip/changeset/cs_ccip_home_test.go index dcd6fe9f6b6..b3c1050c743 100644 --- a/deployment/ccip/changeset/cs_ccip_home_test.go +++ b/deployment/ccip/changeset/cs_ccip_home_test.go @@ -36,10 +36,10 @@ func TestInvalidOCR3Params(t *testing.T) { require.NoError(t, err) // Need to deploy prerequisites first so that we can form the USDC config // no proposals to be made, timelock can be passed as nil here - e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, nil, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.DeployHomeChainChangeset), - Config: changeset.DeployHomeChainConfig{ + e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, nil, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.DeployHomeChainChangeset), + changeset.DeployHomeChainConfig{ HomeChainSel: e.HomeChainSel, RMNDynamicConfig: testhelpers.NewTestRMNDynamicConfig(), RMNStaticConfig: testhelpers.NewTestRMNStaticConfig(), @@ -48,10 +48,10 @@ func TestInvalidOCR3Params(t *testing.T) { testhelpers.TestNodeOperator: envNodes.NonBootstraps().PeerIDs(), }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.DeployChainContractsChangeset), - Config: changeset.DeployChainContractsConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.DeployChainContractsChangeset), + changeset.DeployChainContractsConfig{ HomeChainSelector: e.HomeChainSel, ContractParamsPerChain: map[uint64]changeset.ChainContractParams{ chain1: { @@ -60,7 +60,7 @@ func TestInvalidOCR3Params(t *testing.T) { }, }, }, - }, + ), }) require.NoError(t, err) @@ -155,10 +155,10 @@ func Test_PromoteCandidate(t *testing.T) { Timelock: state.Chains[tenv.HomeChainSel].Timelock, CallProxy: state.Chains[tenv.HomeChainSel].CallProxy, }, - }, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.PromoteCandidateChangeset), - Config: changeset.PromoteCandidateChangesetConfig{ + }, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.PromoteCandidateChangeset), + changeset.PromoteCandidateChangesetConfig{ HomeChainSelector: tenv.HomeChainSel, PluginInfo: []changeset.PromoteCandidatePluginInfo{ { @@ -169,7 +169,7 @@ func Test_PromoteCandidate(t *testing.T) { }, MCMS: mcmsConfig, }, - }, + ), }) require.NoError(t, err) @@ -251,10 +251,10 @@ func Test_SetCandidate(t *testing.T) { Timelock: state.Chains[tenv.HomeChainSel].Timelock, CallProxy: state.Chains[tenv.HomeChainSel].CallProxy, }, - }, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.SetCandidateChangeset), - Config: changeset.SetCandidateChangesetConfig{ + }, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.SetCandidateChangeset), + changeset.SetCandidateChangesetConfig{ SetCandidateConfigBase: changeset.SetCandidateConfigBase{ HomeChainSelector: tenv.HomeChainSel, FeedChainSelector: tenv.FeedChainSel, @@ -283,7 +283,7 @@ func Test_SetCandidate(t *testing.T) { }, }, }, - }, + ), }) require.NoError(t, err) @@ -368,10 +368,10 @@ func Test_RevokeCandidate(t *testing.T) { Timelock: state.Chains[tenv.HomeChainSel].Timelock, CallProxy: state.Chains[tenv.HomeChainSel].CallProxy, }, - }, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.SetCandidateChangeset), - Config: changeset.SetCandidateChangesetConfig{ + }, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.SetCandidateChangeset), + changeset.SetCandidateChangesetConfig{ SetCandidateConfigBase: changeset.SetCandidateConfigBase{ HomeChainSelector: tenv.HomeChainSel, FeedChainSelector: tenv.FeedChainSel, @@ -400,7 +400,7 @@ func Test_RevokeCandidate(t *testing.T) { }, }, }, - }, + ), }) require.NoError(t, err) @@ -426,25 +426,25 @@ func Test_RevokeCandidate(t *testing.T) { Timelock: state.Chains[tenv.HomeChainSel].Timelock, CallProxy: state.Chains[tenv.HomeChainSel].CallProxy, }, - }, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.RevokeCandidateChangeset), - Config: changeset.RevokeCandidateChangesetConfig{ + }, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.RevokeCandidateChangeset), + changeset.RevokeCandidateChangesetConfig{ HomeChainSelector: tenv.HomeChainSel, RemoteChainSelector: dest, PluginType: types.PluginTypeCCIPCommit, MCMS: mcmsConfig, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.RevokeCandidateChangeset), - Config: changeset.RevokeCandidateChangesetConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.RevokeCandidateChangeset), + changeset.RevokeCandidateChangesetConfig{ HomeChainSelector: tenv.HomeChainSel, RemoteChainSelector: dest, PluginType: types.PluginTypeCCIPExec, MCMS: mcmsConfig, }, - }, + ), }) require.NoError(t, err) @@ -484,11 +484,11 @@ func transferToTimelock( Timelock: state.Chains[tenv.HomeChainSel].Timelock, CallProxy: state.Chains[tenv.HomeChainSel].CallProxy, }, - }, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(commonchangeset.TransferToMCMSWithTimelock), - Config: testhelpers.GenTestTransferOwnershipConfig(tenv, []uint64{source, dest}, state), - }, + }, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.TransferToMCMSWithTimelock), + testhelpers.GenTestTransferOwnershipConfig(tenv, []uint64{source, dest}, state), + ), }) require.NoError(t, err) testhelpers.AssertTimelockOwnership(t, tenv, []uint64{source, dest}, state) @@ -539,16 +539,16 @@ func Test_UpdateChainConfigs(t *testing.T) { Timelock: state.Chains[tenv.HomeChainSel].Timelock, CallProxy: state.Chains[tenv.HomeChainSel].CallProxy, }, - }, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateChainConfigChangeset), - Config: changeset.UpdateChainConfigConfig{ + }, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateChainConfigChangeset), + changeset.UpdateChainConfigConfig{ HomeChainSelector: tenv.HomeChainSel, RemoteChainRemoves: []uint64{otherChain}, RemoteChainAdds: make(map[uint64]changeset.ChainConfig), MCMS: mcmsConfig, }, - }, + ), }) require.NoError(t, err) @@ -563,10 +563,10 @@ func Test_UpdateChainConfigs(t *testing.T) { Timelock: state.Chains[tenv.HomeChainSel].Timelock, CallProxy: state.Chains[tenv.HomeChainSel].CallProxy, }, - }, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateChainConfigChangeset), - Config: changeset.UpdateChainConfigConfig{ + }, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateChainConfigChangeset), + changeset.UpdateChainConfigConfig{ HomeChainSelector: tenv.HomeChainSel, RemoteChainRemoves: []uint64{}, RemoteChainAdds: map[uint64]changeset.ChainConfig{ @@ -582,7 +582,7 @@ func Test_UpdateChainConfigs(t *testing.T) { }, MCMS: mcmsConfig, }, - }, + ), }) require.NoError(t, err) diff --git a/deployment/ccip/changeset/cs_chain_contracts_test.go b/deployment/ccip/changeset/cs_chain_contracts_test.go index c6b6ebb5585..addbc1f73f3 100644 --- a/deployment/ccip/changeset/cs_chain_contracts_test.go +++ b/deployment/ccip/changeset/cs_chain_contracts_test.go @@ -11,6 +11,7 @@ import ( "golang.org/x/exp/maps" "github.com/smartcontractkit/chainlink-testing-framework/lib/utils/testcontext" + "github.com/smartcontractkit/chainlink/deployment" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/testhelpers" @@ -56,10 +57,10 @@ func TestUpdateOnRampsDests(t *testing.T) { MinDelay: 0, } } - _, err = commonchangeset.ApplyChangesets(t, tenv.Env, tenv.TimelockContracts(t), []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateOnRampsDestsChangeset), - Config: changeset.UpdateOnRampDestsConfig{ + _, err = commonchangeset.ApplyChangesets(t, tenv.Env, tenv.TimelockContracts(t), []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateOnRampsDestsChangeset), + changeset.UpdateOnRampDestsConfig{ UpdatesByChain: map[uint64]map[uint64]changeset.OnRampDestinationUpdate{ source: { dest: { @@ -78,7 +79,7 @@ func TestUpdateOnRampsDests(t *testing.T) { }, MCMS: mcmsConfig, }, - }, + ), }) require.NoError(t, err) @@ -132,10 +133,10 @@ func TestUpdateOnRampDynamicConfig(t *testing.T) { MinDelay: 0, } } - _, err = commonchangeset.ApplyChangesets(t, tenv.Env, tenv.TimelockContracts(t), []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateOnRampDynamicConfigChangeset), - Config: changeset.UpdateOnRampDynamicConfig{ + _, err = commonchangeset.ApplyChangesets(t, tenv.Env, tenv.TimelockContracts(t), []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateOnRampDynamicConfigChangeset), + changeset.UpdateOnRampDynamicConfig{ UpdatesByChain: map[uint64]changeset.OnRampDynamicConfigUpdate{ source: { FeeAggregator: common.HexToAddress("0x1002"), @@ -146,7 +147,7 @@ func TestUpdateOnRampDynamicConfig(t *testing.T) { }, MCMS: mcmsConfig, }, - }, + ), }) require.NoError(t, err) @@ -200,10 +201,10 @@ func TestUpdateOnRampAllowList(t *testing.T) { MinDelay: 0, } } - _, err = commonchangeset.ApplyChangesets(t, tenv.Env, tenv.TimelockContracts(t), []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateOnRampAllowListChangeset), - Config: changeset.UpdateOnRampAllowListConfig{ + _, err = commonchangeset.ApplyChangesets(t, tenv.Env, tenv.TimelockContracts(t), []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateOnRampAllowListChangeset), + changeset.UpdateOnRampAllowListConfig{ UpdatesByChain: map[uint64]map[uint64]changeset.OnRampAllowListUpdate{ source: { dest: { @@ -222,7 +223,7 @@ func TestUpdateOnRampAllowList(t *testing.T) { }, MCMS: mcmsConfig, }, - }, + ), }) require.NoError(t, err) @@ -330,17 +331,17 @@ func TestWithdrawOnRampFeeTokens(t *testing.T) { require.NoError(t, err) require.Equal(t, tokenAmount, onRampInitWeth) - _, err = commonchangeset.ApplyChangesets(t, tenv.Env, tenv.TimelockContracts(t), []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.WithdrawOnRampFeeTokensChangeset), - Config: changeset.WithdrawOnRampFeeTokensConfig{ + _, err = commonchangeset.ApplyChangesets(t, tenv.Env, tenv.TimelockContracts(t), []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.WithdrawOnRampFeeTokensChangeset), + changeset.WithdrawOnRampFeeTokensConfig{ FeeTokensByChain: map[uint64][]common.Address{ source: {linkToken.Address(), weth9.Address()}, dest: {state.Chains[dest].LinkToken.Address(), state.Chains[dest].Weth9.Address()}, }, MCMS: mcmsConfig, }, - }, + ), }) require.NoError(t, err) @@ -390,10 +391,10 @@ func TestUpdateOffRampsSources(t *testing.T) { MinDelay: 0, } } - _, err = commonchangeset.ApplyChangesets(t, tenv.Env, tenv.TimelockContracts(t), []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateOffRampSourcesChangeset), - Config: changeset.UpdateOffRampSourcesConfig{ + _, err = commonchangeset.ApplyChangesets(t, tenv.Env, tenv.TimelockContracts(t), []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateOffRampSourcesChangeset), + changeset.UpdateOffRampSourcesConfig{ UpdatesByChain: map[uint64]map[uint64]changeset.OffRampSourceUpdate{ source: { dest: { @@ -410,7 +411,7 @@ func TestUpdateOffRampsSources(t *testing.T) { }, MCMS: mcmsConfig, }, - }, + ), }) require.NoError(t, err) @@ -464,10 +465,10 @@ func TestUpdateFQDests(t *testing.T) { fqCfg1 := changeset.DefaultFeeQuoterDestChainConfig(true) fqCfg2 := changeset.DefaultFeeQuoterDestChainConfig(true) fqCfg2.DestGasOverhead = 1000 - _, err = commonchangeset.ApplyChangesets(t, tenv.Env, tenv.TimelockContracts(t), []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateFeeQuoterDestsChangeset), - Config: changeset.UpdateFeeQuoterDestsConfig{ + _, err = commonchangeset.ApplyChangesets(t, tenv.Env, tenv.TimelockContracts(t), []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateFeeQuoterDestsChangeset), + changeset.UpdateFeeQuoterDestsConfig{ UpdatesByChain: map[uint64]map[uint64]fee_quoter.FeeQuoterDestChainConfig{ source: { dest: fqCfg1, @@ -478,7 +479,7 @@ func TestUpdateFQDests(t *testing.T) { }, MCMS: mcmsConfig, }, - }, + ), }) require.NoError(t, err) @@ -530,10 +531,10 @@ func TestUpdateRouterRamps(t *testing.T) { } // Updates test router. - _, err = commonchangeset.ApplyChangesets(t, tenv.Env, tenv.TimelockContracts(t), []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateRouterRampsChangeset), - Config: changeset.UpdateRouterRampsConfig{ + _, err = commonchangeset.ApplyChangesets(t, tenv.Env, tenv.TimelockContracts(t), []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateRouterRampsChangeset), + changeset.UpdateRouterRampsConfig{ TestRouter: true, UpdatesByChain: map[uint64]changeset.RouterUpdates{ source: { @@ -555,7 +556,7 @@ func TestUpdateRouterRamps(t *testing.T) { }, MCMS: mcmsConfig, }, - }, + ), }) require.NoError(t, err) @@ -605,10 +606,10 @@ func TestUpdateDynamicConfigOffRampChangeset(t *testing.T) { } } msgInterceptor := utils.RandomAddress() - _, err = commonchangeset.ApplyChangesets(t, tenv.Env, tenv.TimelockContracts(t), []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateDynamicConfigOffRampChangeset), - Config: changeset.UpdateDynamicConfigOffRampConfig{ + _, err = commonchangeset.ApplyChangesets(t, tenv.Env, tenv.TimelockContracts(t), []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateDynamicConfigOffRampChangeset), + changeset.UpdateDynamicConfigOffRampConfig{ Updates: map[uint64]changeset.OffRampParams{ source: { PermissionLessExecutionThresholdSeconds: uint32(2 * 60 * 60), @@ -618,7 +619,7 @@ func TestUpdateDynamicConfigOffRampChangeset(t *testing.T) { }, MCMS: mcmsConfig, }, - }, + ), }) require.NoError(t, err) // Assert the nonce manager configuration is as we expect. @@ -667,10 +668,10 @@ func TestUpdateNonceManagersCS(t *testing.T) { } } - _, err = commonchangeset.ApplyChangesets(t, tenv.Env, tenv.TimelockContracts(t), []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateNonceManagersChangeset), - Config: changeset.UpdateNonceManagerConfig{ + _, err = commonchangeset.ApplyChangesets(t, tenv.Env, tenv.TimelockContracts(t), []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateNonceManagersChangeset), + changeset.UpdateNonceManagerConfig{ UpdatesByChain: map[uint64]changeset.NonceManagerUpdate{ source: { RemovedAuthCallers: []common.Address{state.Chains[source].OnRamp.Address()}, @@ -678,7 +679,7 @@ func TestUpdateNonceManagersCS(t *testing.T) { }, MCMS: mcmsConfig, }, - }, + ), }) require.NoError(t, err) // Assert the nonce manager configuration is as we expect. diff --git a/deployment/ccip/changeset/cs_configure_token_pools_test.go b/deployment/ccip/changeset/cs_configure_token_pools_test.go index 749c6ab8f59..9d116fc3d1f 100644 --- a/deployment/ccip/changeset/cs_configure_token_pools_test.go +++ b/deployment/ccip/changeset/cs_configure_token_pools_test.go @@ -429,10 +429,10 @@ func TestValidateConfigureTokenPoolContracts(t *testing.T) { if test.RegistrationPass != nil { // Configure & set the active pools on the registry - e, err = commonchangeset.ApplyChangesets(t, e, timelockContracts, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.ConfigureTokenPoolContractsChangeset), - Config: changeset.ConfigureTokenPoolContractsConfig{ + e, err = commonchangeset.ApplyChangesets(t, e, timelockContracts, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.ConfigureTokenPoolContractsChangeset), + changeset.ConfigureTokenPoolContractsConfig{ TokenSymbol: testhelpers.TestTokenSymbol, MCMS: mcmsConfig, PoolUpdates: map[uint64]changeset.TokenPoolConfig{ @@ -452,10 +452,10 @@ func TestValidateConfigureTokenPoolContracts(t *testing.T) { }, }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.ProposeAdminRoleChangeset), - Config: changeset.TokenAdminRegistryChangesetConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.ProposeAdminRoleChangeset), + changeset.TokenAdminRegistryChangesetConfig{ MCMS: mcmsConfig, Pools: map[uint64]map[changeset.TokenSymbol]changeset.TokenPoolInfo{ selectorA: map[changeset.TokenSymbol]changeset.TokenPoolInfo{ @@ -472,10 +472,10 @@ func TestValidateConfigureTokenPoolContracts(t *testing.T) { }, }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.AcceptAdminRoleChangeset), - Config: changeset.TokenAdminRegistryChangesetConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.AcceptAdminRoleChangeset), + changeset.TokenAdminRegistryChangesetConfig{ MCMS: mcmsConfig, Pools: map[uint64]map[changeset.TokenSymbol]changeset.TokenPoolInfo{ selectorA: map[changeset.TokenSymbol]changeset.TokenPoolInfo{ @@ -492,10 +492,10 @@ func TestValidateConfigureTokenPoolContracts(t *testing.T) { }, }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.SetPoolChangeset), - Config: changeset.TokenAdminRegistryChangesetConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.SetPoolChangeset), + changeset.TokenAdminRegistryChangesetConfig{ MCMS: mcmsConfig, Pools: map[uint64]map[changeset.TokenSymbol]changeset.TokenPoolInfo{ selectorA: map[changeset.TokenSymbol]changeset.TokenPoolInfo{ @@ -512,7 +512,7 @@ func TestValidateConfigureTokenPoolContracts(t *testing.T) { }, }, }, - }, + ), }) require.NoError(t, err) @@ -552,10 +552,10 @@ func TestValidateConfigureTokenPoolContracts(t *testing.T) { if test.UpdatePass.UpdatePoolOnB { bType = changeset.BurnMintTokenPool } - e, err = commonchangeset.ApplyChangesets(t, e, timelockContracts, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.ConfigureTokenPoolContractsChangeset), - Config: changeset.ConfigureTokenPoolContractsConfig{ + e, err = commonchangeset.ApplyChangesets(t, e, timelockContracts, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.ConfigureTokenPoolContractsChangeset), + changeset.ConfigureTokenPoolContractsConfig{ TokenSymbol: testhelpers.TestTokenSymbol, MCMS: mcmsConfig, PoolUpdates: map[uint64]changeset.TokenPoolConfig{ @@ -575,7 +575,7 @@ func TestValidateConfigureTokenPoolContracts(t *testing.T) { }, }, }, - }, + ), }) require.NoError(t, err) diff --git a/deployment/ccip/changeset/cs_deploy_chain_test.go b/deployment/ccip/changeset/cs_deploy_chain_test.go index 027fa26ca92..06a874a46a2 100644 --- a/deployment/ccip/changeset/cs_deploy_chain_test.go +++ b/deployment/ccip/changeset/cs_deploy_chain_test.go @@ -45,10 +45,10 @@ func TestDeployChainContractsChangeset(t *testing.T) { }) } - e, err = commonchangeset.ApplyChangesets(t, e, nil, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.DeployHomeChainChangeset), - Config: changeset.DeployHomeChainConfig{ + e, err = commonchangeset.ApplyChangesets(t, e, nil, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.DeployHomeChainChangeset), + changeset.DeployHomeChainConfig{ HomeChainSel: homeChainSel, RMNStaticConfig: testhelpers.NewTestRMNStaticConfig(), RMNDynamicConfig: testhelpers.NewTestRMNDynamicConfig(), @@ -57,28 +57,28 @@ func TestDeployChainContractsChangeset(t *testing.T) { "NodeOperator": p2pIds, }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(commonchangeset.DeployLinkToken), - Config: evmSelectors, - }, - { - Changeset: commonchangeset.WrapChangeSet(commonchangeset.DeployMCMSWithTimelock), - Config: cfg, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.DeployPrerequisitesChangeset), - Config: changeset.DeployPrerequisiteConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.DeployLinkToken), + evmSelectors, + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.DeployMCMSWithTimelock), + cfg, + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.DeployPrerequisitesChangeset), + changeset.DeployPrerequisiteConfig{ Configs: prereqCfg, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.DeployChainContractsChangeset), - Config: changeset.DeployChainContractsConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.DeployChainContractsChangeset), + changeset.DeployChainContractsConfig{ HomeChainSelector: homeChainSel, ContractParamsPerChain: contractParams, }, - }, + ), }) require.NoError(t, err) diff --git a/deployment/ccip/changeset/cs_deploy_token_pools_test.go b/deployment/ccip/changeset/cs_deploy_token_pools_test.go index 693b5f54f3e..20f8e8656f0 100644 --- a/deployment/ccip/changeset/cs_deploy_token_pools_test.go +++ b/deployment/ccip/changeset/cs_deploy_token_pools_test.go @@ -282,10 +282,10 @@ func TestDeployTokenPoolContracts(t *testing.T) { e, selectorA, _, tokens, timelockContracts := testhelpers.SetupTwoChainEnvironmentWithTokens(t, logger.TestLogger(t), true) - e, err := commonchangeset.ApplyChangesets(t, e, timelockContracts, []commonchangeset.ChangesetApplication{ - commonchangeset.ChangesetApplication{ - Changeset: commonchangeset.WrapChangeSet(changeset.DeployTokenPoolContractsChangeset), - Config: changeset.DeployTokenPoolContractsConfig{ + e, err := commonchangeset.ApplyChangesets(t, e, timelockContracts, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.DeployTokenPoolContractsChangeset), + changeset.DeployTokenPoolContractsConfig{ TokenSymbol: testhelpers.TestTokenSymbol, NewPools: map[uint64]changeset.DeployTokenPoolInput{ selectorA: { @@ -296,7 +296,7 @@ func TestDeployTokenPoolContracts(t *testing.T) { }, }, }, - }, + ), }) require.NoError(t, err) diff --git a/deployment/ccip/changeset/cs_home_chain_test.go b/deployment/ccip/changeset/cs_home_chain_test.go index a836b75952d..7ebbed4265d 100644 --- a/deployment/ccip/changeset/cs_home_chain_test.go +++ b/deployment/ccip/changeset/cs_home_chain_test.go @@ -148,14 +148,14 @@ func TestRemoveDons(t *testing.T) { // Remove a don w/o MCMS donsBefore, err := homeChain.CapabilityRegistry.GetDONs(nil) require.NoError(t, err) - e.Env, err = commoncs.ApplyChangesets(t, e.Env, nil, []commoncs.ChangesetApplication{ - { - Changeset: commoncs.WrapChangeSet(changeset.RemoveDONs), - Config: changeset.RemoveDONsConfig{ + e.Env, err = commoncs.ApplyChangesets(t, e.Env, nil, []commoncs.ConfiguredChangeSet{ + commoncs.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.RemoveDONs), + changeset.RemoveDONsConfig{ HomeChainSel: e.HomeChainSel, DonIDs: []uint32{donsBefore[0].Id}, }, - }, + ), }) require.NoError(t, err) donsAfter, err := homeChain.CapabilityRegistry.GetDONs(nil) @@ -170,24 +170,24 @@ func TestRemoveDons(t *testing.T) { Timelock: s.Chains[e.HomeChainSel].Timelock, CallProxy: s.Chains[e.HomeChainSel].CallProxy, }, - }, []commoncs.ChangesetApplication{ - { - Changeset: commoncs.WrapChangeSet(commoncs.TransferToMCMSWithTimelock), - Config: commoncs.TransferToMCMSWithTimelockConfig{ + }, []commoncs.ConfiguredChangeSet{ + commoncs.ChangesetApplication( + deployment.CreateLegacyChangeSet(commoncs.TransferToMCMSWithTimelock), + commoncs.TransferToMCMSWithTimelockConfig{ ContractsByChain: map[uint64][]common.Address{ e.HomeChainSel: {homeChain.CapabilityRegistry.Address()}, }, MinDelay: 0, }, - }, - { - Changeset: commoncs.WrapChangeSet(changeset.RemoveDONs), - Config: changeset.RemoveDONsConfig{ + ), + commoncs.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.RemoveDONs), + changeset.RemoveDONsConfig{ HomeChainSel: e.HomeChainSel, DonIDs: []uint32{donsBefore[0].Id}, MCMS: &changeset.MCMSConfig{MinDelay: 0}, }, - }, + ), }) require.NoError(t, err) donsAfter, err = homeChain.CapabilityRegistry.GetDONs(nil) diff --git a/deployment/ccip/changeset/cs_propose_admin_role_test.go b/deployment/ccip/changeset/cs_propose_admin_role_test.go index c60948d2abd..9874d623f97 100644 --- a/deployment/ccip/changeset/cs_propose_admin_role_test.go +++ b/deployment/ccip/changeset/cs_propose_admin_role_test.go @@ -32,10 +32,10 @@ func TestProposeAdminRoleChangeset_Validations(t *testing.T) { } // We want an administrator to exist to force failure in the last test - e, err := commonchangeset.ApplyChangesets(t, e, timelockContracts, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.ProposeAdminRoleChangeset), - Config: changeset.TokenAdminRegistryChangesetConfig{ + e, err := commonchangeset.ApplyChangesets(t, e, timelockContracts, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.ProposeAdminRoleChangeset), + changeset.TokenAdminRegistryChangesetConfig{ MCMS: mcmsConfig, Pools: map[uint64]map[changeset.TokenSymbol]changeset.TokenPoolInfo{ selectorA: map[changeset.TokenSymbol]changeset.TokenPoolInfo{ @@ -46,10 +46,10 @@ func TestProposeAdminRoleChangeset_Validations(t *testing.T) { }, }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.AcceptAdminRoleChangeset), - Config: changeset.TokenAdminRegistryChangesetConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.AcceptAdminRoleChangeset), + changeset.TokenAdminRegistryChangesetConfig{ MCMS: mcmsConfig, Pools: map[uint64]map[changeset.TokenSymbol]changeset.TokenPoolInfo{ selectorA: map[changeset.TokenSymbol]changeset.TokenPoolInfo{ @@ -60,7 +60,7 @@ func TestProposeAdminRoleChangeset_Validations(t *testing.T) { }, }, }, - }, + ), }) require.NoError(t, err) @@ -145,11 +145,11 @@ func TestProposeAdminRoleChangeset_Validations(t *testing.T) { for _, test := range tests { t.Run(test.Msg, func(t *testing.T) { - _, err = commonchangeset.ApplyChangesets(t, e, timelockContracts, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.ProposeAdminRoleChangeset), - Config: test.Config, - }, + _, err = commonchangeset.ApplyChangesets(t, e, timelockContracts, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.ProposeAdminRoleChangeset), + test.Config, + ), }) require.Error(t, err) require.ErrorContains(t, err, test.ErrStr) @@ -186,10 +186,10 @@ func TestProposeAdminRoleChangeset_ExecutionWithoutExternalAdmin(t *testing.T) { registryOnA := state.Chains[selectorA].TokenAdminRegistry registryOnB := state.Chains[selectorB].TokenAdminRegistry - e, err = commonchangeset.ApplyChangesets(t, e, timelockContracts, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.ProposeAdminRoleChangeset), - Config: changeset.TokenAdminRegistryChangesetConfig{ + e, err = commonchangeset.ApplyChangesets(t, e, timelockContracts, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.ProposeAdminRoleChangeset), + changeset.TokenAdminRegistryChangesetConfig{ MCMS: mcmsConfig, Pools: map[uint64]map[changeset.TokenSymbol]changeset.TokenPoolInfo{ selectorA: map[changeset.TokenSymbol]changeset.TokenPoolInfo{ @@ -206,7 +206,7 @@ func TestProposeAdminRoleChangeset_ExecutionWithoutExternalAdmin(t *testing.T) { }, }, }, - }, + ), }) require.NoError(t, err) @@ -260,10 +260,10 @@ func TestProposeAdminRoleChangeset_ExecutionWithExternalAdmin(t *testing.T) { registryOnA := state.Chains[selectorA].TokenAdminRegistry registryOnB := state.Chains[selectorB].TokenAdminRegistry - _, err = commonchangeset.ApplyChangesets(t, e, timelockContracts, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.ProposeAdminRoleChangeset), - Config: changeset.TokenAdminRegistryChangesetConfig{ + _, err = commonchangeset.ApplyChangesets(t, e, timelockContracts, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.ProposeAdminRoleChangeset), + changeset.TokenAdminRegistryChangesetConfig{ MCMS: mcmsConfig, Pools: map[uint64]map[changeset.TokenSymbol]changeset.TokenPoolInfo{ selectorA: map[changeset.TokenSymbol]changeset.TokenPoolInfo{ @@ -282,7 +282,7 @@ func TestProposeAdminRoleChangeset_ExecutionWithExternalAdmin(t *testing.T) { }, }, }, - }, + ), }) require.NoError(t, err) diff --git a/deployment/ccip/changeset/cs_set_pool_test.go b/deployment/ccip/changeset/cs_set_pool_test.go index f20ef7c214a..4ed6a176f25 100644 --- a/deployment/ccip/changeset/cs_set_pool_test.go +++ b/deployment/ccip/changeset/cs_set_pool_test.go @@ -102,11 +102,11 @@ func TestSetPoolChangeset_Validations(t *testing.T) { for _, test := range tests { t.Run(test.Msg, func(t *testing.T) { - _, err := commonchangeset.ApplyChangesets(t, e, timelockContracts, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.SetPoolChangeset), - Config: test.Config, - }, + _, err := commonchangeset.ApplyChangesets(t, e, timelockContracts, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.SetPoolChangeset), + test.Config, + ), }) require.Error(t, err) require.ErrorContains(t, err, test.ErrStr) @@ -143,10 +143,10 @@ func TestSetPoolChangeset_Execution(t *testing.T) { registryOnA := state.Chains[selectorA].TokenAdminRegistry registryOnB := state.Chains[selectorB].TokenAdminRegistry - _, err = commonchangeset.ApplyChangesets(t, e, timelockContracts, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.ProposeAdminRoleChangeset), - Config: changeset.TokenAdminRegistryChangesetConfig{ + _, err = commonchangeset.ApplyChangesets(t, e, timelockContracts, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.ProposeAdminRoleChangeset), + changeset.TokenAdminRegistryChangesetConfig{ MCMS: mcmsConfig, Pools: map[uint64]map[changeset.TokenSymbol]changeset.TokenPoolInfo{ selectorA: map[changeset.TokenSymbol]changeset.TokenPoolInfo{ @@ -163,10 +163,10 @@ func TestSetPoolChangeset_Execution(t *testing.T) { }, }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.AcceptAdminRoleChangeset), - Config: changeset.TokenAdminRegistryChangesetConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.AcceptAdminRoleChangeset), + changeset.TokenAdminRegistryChangesetConfig{ MCMS: mcmsConfig, Pools: map[uint64]map[changeset.TokenSymbol]changeset.TokenPoolInfo{ selectorA: map[changeset.TokenSymbol]changeset.TokenPoolInfo{ @@ -183,10 +183,10 @@ func TestSetPoolChangeset_Execution(t *testing.T) { }, }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.SetPoolChangeset), - Config: changeset.TokenAdminRegistryChangesetConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.SetPoolChangeset), + changeset.TokenAdminRegistryChangesetConfig{ MCMS: mcmsConfig, Pools: map[uint64]map[changeset.TokenSymbol]changeset.TokenPoolInfo{ selectorA: map[changeset.TokenSymbol]changeset.TokenPoolInfo{ @@ -203,7 +203,7 @@ func TestSetPoolChangeset_Execution(t *testing.T) { }, }, }, - }, + ), }) require.NoError(t, err) diff --git a/deployment/ccip/changeset/cs_transfer_admin_role_test.go b/deployment/ccip/changeset/cs_transfer_admin_role_test.go index 6bab89d5016..3fd2e94c24c 100644 --- a/deployment/ccip/changeset/cs_transfer_admin_role_test.go +++ b/deployment/ccip/changeset/cs_transfer_admin_role_test.go @@ -119,11 +119,11 @@ func TestTransferAdminRoleChangeset_Validations(t *testing.T) { for _, test := range tests { t.Run(test.Msg, func(t *testing.T) { - _, err := commonchangeset.ApplyChangesets(t, e, timelockContracts, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.TransferAdminRoleChangeset), - Config: test.Config, - }, + _, err := commonchangeset.ApplyChangesets(t, e, timelockContracts, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.TransferAdminRoleChangeset), + test.Config, + ), }) require.Error(t, err) require.ErrorContains(t, err, test.ErrStr) @@ -162,10 +162,10 @@ func TestTransferAdminRoleChangeset_Execution(t *testing.T) { registryOnA := state.Chains[selectorA].TokenAdminRegistry registryOnB := state.Chains[selectorB].TokenAdminRegistry - _, err = commonchangeset.ApplyChangesets(t, e, timelockContracts, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.ProposeAdminRoleChangeset), - Config: changeset.TokenAdminRegistryChangesetConfig{ + _, err = commonchangeset.ApplyChangesets(t, e, timelockContracts, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.ProposeAdminRoleChangeset), + changeset.TokenAdminRegistryChangesetConfig{ MCMS: mcmsConfig, Pools: map[uint64]map[changeset.TokenSymbol]changeset.TokenPoolInfo{ selectorA: map[changeset.TokenSymbol]changeset.TokenPoolInfo{ @@ -182,10 +182,10 @@ func TestTransferAdminRoleChangeset_Execution(t *testing.T) { }, }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.AcceptAdminRoleChangeset), - Config: changeset.TokenAdminRegistryChangesetConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.AcceptAdminRoleChangeset), + changeset.TokenAdminRegistryChangesetConfig{ MCMS: mcmsConfig, Pools: map[uint64]map[changeset.TokenSymbol]changeset.TokenPoolInfo{ selectorA: map[changeset.TokenSymbol]changeset.TokenPoolInfo{ @@ -202,10 +202,10 @@ func TestTransferAdminRoleChangeset_Execution(t *testing.T) { }, }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.TransferAdminRoleChangeset), - Config: changeset.TokenAdminRegistryChangesetConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.TransferAdminRoleChangeset), + changeset.TokenAdminRegistryChangesetConfig{ MCMS: mcmsConfig, Pools: map[uint64]map[changeset.TokenSymbol]changeset.TokenPoolInfo{ selectorA: map[changeset.TokenSymbol]changeset.TokenPoolInfo{ @@ -224,7 +224,7 @@ func TestTransferAdminRoleChangeset_Execution(t *testing.T) { }, }, }, - }, + ), }) require.NoError(t, err) diff --git a/deployment/ccip/changeset/deployer_group_test.go b/deployment/ccip/changeset/deployer_group_test.go index 0f670f0d2f6..b3f49bcc450 100644 --- a/deployment/ccip/changeset/deployer_group_test.go +++ b/deployment/ccip/changeset/deployer_group_test.go @@ -233,30 +233,30 @@ func TestDeployerGroupMCMS(t *testing.T) { contractsByChain := make(map[uint64][]common.Address) contractsByChain[e.HomeChainSel] = []common.Address{state.Chains[e.HomeChainSel].LinkToken.Address()} - _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(commonchangeset.TransferToMCMSWithTimelock), - Config: commonchangeset.TransferToMCMSWithTimelockConfig{ + _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.TransferToMCMSWithTimelock), + commonchangeset.TransferToMCMSWithTimelockConfig{ ContractsByChain: contractsByChain, MinDelay: 0, }, - }, + ), }) require.NoError(t, err) - _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(dummyDeployerGroupGrantMintChangeset), - Config: tc.cfg, - }, + _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(dummyDeployerGroupGrantMintChangeset), + tc.cfg, + ), }) require.NoError(t, err) - _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(dummyDeployerGroupMintChangeset), - Config: tc.cfg, - }, + _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(dummyDeployerGroupMintChangeset), + tc.cfg, + ), }) require.NoError(t, err) @@ -310,22 +310,22 @@ func TestDeployerGroupGenerateMultipleProposals(t *testing.T) { contractsByChain[chain] = []common.Address{state.Chains[chain].LinkToken.Address()} } - _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(commonchangeset.TransferToMCMSWithTimelock), - Config: commonchangeset.TransferToMCMSWithTimelockConfig{ + _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.TransferToMCMSWithTimelock), + commonchangeset.TransferToMCMSWithTimelockConfig{ ContractsByChain: contractsByChain, MinDelay: 0, }, - }, + ), }) require.NoError(t, err) - _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(dummyDeployerGroupGrantMintMultiChainChangeset), - Config: tc, - }, + _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(dummyDeployerGroupGrantMintMultiChainChangeset), + tc, + ), }) require.NoError(t, err) @@ -370,30 +370,30 @@ func TestDeployerGroupMultipleProposalsMCMS(t *testing.T) { contractsByChain[chain] = []common.Address{state.Chains[chain].LinkToken.Address()} } - _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(commonchangeset.TransferToMCMSWithTimelock), - Config: commonchangeset.TransferToMCMSWithTimelockConfig{ + _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.TransferToMCMSWithTimelock), + commonchangeset.TransferToMCMSWithTimelockConfig{ ContractsByChain: contractsByChain, MinDelay: 0, }, - }, + ), }) require.NoError(t, err) - _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(dummyDeployerGroupGrantMintMultiChainChangeset), - Config: cfg, - }, + _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(dummyDeployerGroupGrantMintMultiChainChangeset), + cfg, + ), }) require.NoError(t, err) - _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(dummyDeployerGroupMintMultiDeploymentContextChangeset), - Config: cfg, - }, + _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(dummyDeployerGroupMintMultiDeploymentContextChangeset), + cfg, + ), }) require.NoError(t, err) diff --git a/deployment/ccip/changeset/solana/cs_chain_contracts_test.go b/deployment/ccip/changeset/solana/cs_chain_contracts_test.go index a8e122d48a7..3fca5d4f190 100644 --- a/deployment/ccip/changeset/solana/cs_chain_contracts_test.go +++ b/deployment/ccip/changeset/solana/cs_chain_contracts_test.go @@ -36,10 +36,10 @@ func TestAddRemoteChain(t *testing.T) { state, err := changeset.LoadOnchainState(tenv.Env) require.NoError(t, err) - tenv.Env, err = commonchangeset.ApplyChangesets(t, tenv.Env, nil, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateOnRampsDestsChangeset), - Config: changeset.UpdateOnRampDestsConfig{ + tenv.Env, err = commonchangeset.ApplyChangesets(t, tenv.Env, nil, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateOnRampsDestsChangeset), + changeset.UpdateOnRampDestsConfig{ UpdatesByChain: map[uint64]map[uint64]changeset.OnRampDestinationUpdate{ evmChain: { solChain: { @@ -50,10 +50,10 @@ func TestAddRemoteChain(t *testing.T) { }, }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset_solana.AddRemoteChainToSolana), - Config: changeset_solana.AddRemoteChainToSolanaConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset_solana.AddRemoteChainToSolana), + changeset_solana.AddRemoteChainToSolanaConfig{ UpdatesByChain: map[uint64]map[uint64]changeset_solana.RemoteChainConfigSolana{ solChain: { evmChain: { @@ -74,7 +74,7 @@ func TestAddRemoteChain(t *testing.T) { }, }, }, - }, + ), }) require.NoError(t, err) @@ -106,15 +106,15 @@ func TestAddTokenPool(t *testing.T) { evmChain := tenv.Env.AllChainSelectors()[0] solChain := tenv.Env.AllChainSelectorsSolana()[0] - e, err := commonchangeset.ApplyChangesets(t, tenv.Env, nil, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset_solana.DeploySolanaToken), - Config: changeset_solana.DeploySolanaTokenConfig{ + e, err := commonchangeset.ApplyChangesets(t, tenv.Env, nil, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset_solana.DeploySolanaToken), + changeset_solana.DeploySolanaTokenConfig{ ChainSelector: solChain, TokenProgramName: deployment.SPL2022Tokens, TokenDecimals: 9, }, - }, + ), }) require.NoError(t, err) @@ -124,10 +124,10 @@ func TestAddTokenPool(t *testing.T) { // TODO: can test this with solana.SolMint as well (WSOL) // https://smartcontract-it.atlassian.net/browse/INTAUTO-440 - e, err = commonchangeset.ApplyChangesets(t, e, nil, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset_solana.AddTokenPool), - Config: changeset_solana.TokenPoolConfig{ + e, err = commonchangeset.ApplyChangesets(t, e, nil, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset_solana.AddTokenPool), + changeset_solana.TokenPoolConfig{ ChainSelector: solChain, TokenPubKey: tokenAddress.String(), TokenProgramName: deployment.SPL2022Tokens, @@ -135,10 +135,10 @@ func TestAddTokenPool(t *testing.T) { // this works for testing, but if we really want some other authority we need to pass in a private key for signing purposes Authority: e.SolChains[solChain].DeployerKey.PublicKey().String(), }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset_solana.SetupTokenPoolForRemoteChain), - Config: changeset_solana.RemoteChainTokenPoolConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset_solana.SetupTokenPoolForRemoteChain), + changeset_solana.RemoteChainTokenPoolConfig{ ChainSelector: solChain, RemoteChainSelector: evmChain, TokenPubKey: tokenAddress.String(), @@ -158,7 +158,7 @@ func TestAddTokenPool(t *testing.T) { Rate: 0, }, }, - }, + ), }) require.NoError(t, err) @@ -189,15 +189,15 @@ func TestBilling(t *testing.T) { evmChain := tenv.Env.AllChainSelectors()[0] solChain := tenv.Env.AllChainSelectorsSolana()[0] - e, err := commonchangeset.ApplyChangesets(t, tenv.Env, nil, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset_solana.DeploySolanaToken), - Config: changeset_solana.DeploySolanaTokenConfig{ + e, err := commonchangeset.ApplyChangesets(t, tenv.Env, nil, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset_solana.DeploySolanaToken), + changeset_solana.DeploySolanaTokenConfig{ ChainSelector: solChain, TokenProgramName: deployment.SPL2022Tokens, TokenDecimals: 9, }, - }, + ), }) require.NoError(t, err) @@ -209,10 +209,10 @@ func TestBilling(t *testing.T) { bigNum, ok := new(big.Int).SetString("19816680000000000000", 10) require.True(t, ok) bigNum.FillBytes(value[:]) - e, err = commonchangeset.ApplyChangesets(t, e, nil, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset_solana.AddBillingToken), - Config: changeset_solana.BillingTokenConfig{ + e, err = commonchangeset.ApplyChangesets(t, e, nil, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset_solana.AddBillingToken), + changeset_solana.BillingTokenConfig{ ChainSelector: solChain, TokenPubKey: tokenAddress.String(), TokenProgramName: deployment.SPL2022Tokens, @@ -226,10 +226,10 @@ func TestBilling(t *testing.T) { PremiumMultiplierWeiPerEth: 100, }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset_solana.AddBillingTokenForRemoteChain), - Config: changeset_solana.BillingTokenForRemoteChainConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset_solana.AddBillingTokenForRemoteChain), + changeset_solana.BillingTokenForRemoteChainConfig{ ChainSelector: solChain, RemoteChainSelector: evmChain, TokenPubKey: tokenAddress.String(), @@ -242,7 +242,7 @@ func TestBilling(t *testing.T) { IsEnabled: true, }, }, - }, + ), }) require.NoError(t, err) @@ -268,15 +268,15 @@ func TestTokenAdminRegistry(t *testing.T) { solChain := tenv.Env.AllChainSelectorsSolana()[0] - e, err := commonchangeset.ApplyChangesets(t, tenv.Env, nil, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset_solana.DeploySolanaToken), - Config: changeset_solana.DeploySolanaTokenConfig{ + e, err := commonchangeset.ApplyChangesets(t, tenv.Env, nil, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset_solana.DeploySolanaToken), + changeset_solana.DeploySolanaTokenConfig{ ChainSelector: solChain, TokenProgramName: deployment.SPL2022Tokens, TokenDecimals: 9, }, - }, + ), }) require.NoError(t, err) @@ -288,33 +288,36 @@ func TestTokenAdminRegistry(t *testing.T) { // We have to do run the ViaOwnerInstruction testcase for linkToken as we already registered a PDA for tokenAddress in the previous testcase linkTokenAddress := state.SolChains[solChain].LinkToken - e, err = commonchangeset.ApplyChangesets(t, e, nil, []commonchangeset.ChangesetApplication{ - { // register token admin registry for tokenAddress via getCcipAdminInstruction - Changeset: commonchangeset.WrapChangeSet(changeset_solana.RegisterTokenAdminRegistry), - Config: changeset_solana.RegisterTokenAdminRegistryConfig{ + e, err = commonchangeset.ApplyChangesets(t, e, nil, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + // register token admin registry for tokenAddress via getCcipAdminInstruction + deployment.CreateLegacyChangeSet(changeset_solana.RegisterTokenAdminRegistry), + changeset_solana.RegisterTokenAdminRegistryConfig{ ChainSelector: solChain, TokenPubKey: tokenAddress.String(), TokenAdminRegistryAdmin: tokenAdminRegistryAdminPrivKey.PublicKey().String(), RegisterType: changeset_solana.ViaGetCcipAdminInstruction, }, - }, - { // register token admin registry for linkToken via owner instruction - Changeset: commonchangeset.WrapChangeSet(changeset_solana.RegisterTokenAdminRegistry), - Config: changeset_solana.RegisterTokenAdminRegistryConfig{ + ), + commonchangeset.ChangesetApplication( + // register token admin registry for linkToken via owner instruction + deployment.CreateLegacyChangeSet(changeset_solana.RegisterTokenAdminRegistry), + changeset_solana.RegisterTokenAdminRegistryConfig{ ChainSelector: solChain, TokenPubKey: linkTokenAddress.String(), RegisterType: changeset_solana.ViaOwnerInstruction, }, - }, - { // transfer admin role for tokenAddress - Changeset: commonchangeset.WrapChangeSet(changeset_solana.TransferAdminRoleTokenAdminRegistry), - Config: changeset_solana.TransferAdminRoleTokenAdminRegistryConfig{ + ), + commonchangeset.ChangesetApplication( + // transfer admin role for tokenAddress + deployment.CreateLegacyChangeSet(changeset_solana.TransferAdminRoleTokenAdminRegistry), + changeset_solana.TransferAdminRoleTokenAdminRegistryConfig{ ChainSelector: solChain, TokenPubKey: tokenAddress.String(), CurrentRegistryAdminPrivateKey: tokenAdminRegistryAdminPrivKey.String(), NewRegistryAdminPublicKey: e.SolChains[solChain].DeployerKey.PublicKey().String(), }, - }, + ), }) require.NoError(t, err) @@ -333,15 +336,16 @@ func TestTokenAdminRegistry(t *testing.T) { // as DeployLinkToken (DeploySolanaToken) makes the deployer key the authority of the token, it should be the administrator of the tokenAdminRegistry via owner instruction require.Equal(t, e.SolChains[solChain].DeployerKey.PublicKey(), linkTokenAdminRegistryAccount.Administrator) - e, err = commonchangeset.ApplyChangesets(t, e, nil, []commonchangeset.ChangesetApplication{ - { // accept admin role for tokenAddress - Changeset: commonchangeset.WrapChangeSet(changeset_solana.AcceptAdminRoleTokenAdminRegistry), - Config: changeset_solana.AcceptAdminRoleTokenAdminRegistryConfig{ + e, err = commonchangeset.ApplyChangesets(t, e, nil, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + // accept admin role for tokenAddress + deployment.CreateLegacyChangeSet(changeset_solana.AcceptAdminRoleTokenAdminRegistry), + changeset_solana.AcceptAdminRoleTokenAdminRegistryConfig{ ChainSelector: solChain, TokenPubKey: tokenAddress.String(), NewRegistryAdminPrivateKey: e.SolChains[solChain].DeployerKey.String(), }, - }, + ), }) require.NoError(t, err) err = e.SolChains[solChain].GetAccountDataBorshInto(context.Background(), tokenAdminRegistryPDA, &tokenAdminRegistryAccount) diff --git a/deployment/ccip/changeset/solana/cs_deploy_chain_test.go b/deployment/ccip/changeset/solana/cs_deploy_chain_test.go index 01416f0dd23..d33c06e9c23 100644 --- a/deployment/ccip/changeset/solana/cs_deploy_chain_test.go +++ b/deployment/ccip/changeset/solana/cs_deploy_chain_test.go @@ -57,10 +57,10 @@ func TestDeployChainContractsChangeset(t *testing.T) { } testhelpers.SavePreloadedSolAddresses(t, e, solChainSelectors[0]) - e, err = commonchangeset.ApplyChangesets(t, e, nil, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.DeployHomeChainChangeset), - Config: changeset.DeployHomeChainConfig{ + e, err = commonchangeset.ApplyChangesets(t, e, nil, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.DeployHomeChainChangeset), + changeset.DeployHomeChainConfig{ HomeChainSel: homeChainSel, RMNStaticConfig: testhelpers.NewTestRMNStaticConfig(), RMNDynamicConfig: testhelpers.NewTestRMNDynamicConfig(), @@ -69,28 +69,28 @@ func TestDeployChainContractsChangeset(t *testing.T) { testhelpers.TestNodeOperator: nodes.NonBootstraps().PeerIDs(), }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(commonchangeset.DeployLinkToken), - Config: selectors, - }, - { - Changeset: commonchangeset.WrapChangeSet(commonchangeset.DeployMCMSWithTimelock), - Config: cfg, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.DeployPrerequisitesChangeset), - Config: changeset.DeployPrerequisiteConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.DeployLinkToken), + selectors, + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.DeployMCMSWithTimelock), + cfg, + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.DeployPrerequisitesChangeset), + changeset.DeployPrerequisiteConfig{ Configs: prereqCfg, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.DeployChainContractsChangeset), - Config: changeset.DeployChainContractsConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.DeployChainContractsChangeset), + changeset.DeployChainContractsConfig{ HomeChainSelector: homeChainSel, ContractParamsPerChain: contractParams, }, - }, + ), }) require.NoError(t, err) diff --git a/deployment/ccip/changeset/solana/cs_solana_token_test.go b/deployment/ccip/changeset/solana/cs_solana_token_test.go index 67573b20c71..65c141e5652 100644 --- a/deployment/ccip/changeset/solana/cs_solana_token_test.go +++ b/deployment/ccip/changeset/solana/cs_solana_token_test.go @@ -14,7 +14,6 @@ import ( ccipChangeset "github.com/smartcontractkit/chainlink/deployment/ccip/changeset" changeset_solana "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/solana" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/testhelpers" - "github.com/smartcontractkit/chainlink/deployment/common/changeset" commonchangeset "github.com/smartcontractkit/chainlink/deployment/common/changeset" "github.com/smartcontractkit/chainlink/deployment/environment/memory" "github.com/smartcontractkit/chainlink/v2/core/logger" @@ -27,15 +26,15 @@ func TestSolanaTokenOps(t *testing.T) { SolChains: 1, }) solChain1 := e.AllChainSelectorsSolana()[0] - e, err := commonchangeset.ApplyChangesets(t, e, nil, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset_solana.DeploySolanaToken), - Config: changeset_solana.DeploySolanaTokenConfig{ + e, err := commonchangeset.ApplyChangesets(t, e, nil, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset_solana.DeploySolanaToken), + changeset_solana.DeploySolanaTokenConfig{ ChainSelector: solChain1, TokenProgramName: deployment.SPL2022Tokens, TokenDecimals: 9, }, - }, + ), }) require.NoError(t, err) @@ -45,19 +44,19 @@ func TestSolanaTokenOps(t *testing.T) { testUser, _ := solana.NewRandomPrivateKey() testUserPubKey := testUser.PublicKey() - e, err = changeset.ApplyChangesets(t, e, nil, []changeset.ChangesetApplication{ - { - Changeset: changeset.WrapChangeSet(changeset_solana.CreateSolanaTokenATA), - Config: changeset_solana.CreateSolanaTokenATAConfig{ + e, err = commonchangeset.ApplyChangesets(t, e, nil, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset_solana.CreateSolanaTokenATA), + changeset_solana.CreateSolanaTokenATAConfig{ ChainSelector: solChain1, TokenPubkey: tokenAddress, TokenProgram: deployment.SPL2022Tokens, ATAList: []string{testUserPubKey.String()}, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset_solana.MintSolanaToken), - Config: changeset_solana.MintSolanaTokenConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset_solana.MintSolanaToken), + changeset_solana.MintSolanaTokenConfig{ ChainSelector: solChain1, TokenPubkey: tokenAddress, TokenProgram: deployment.SPL2022Tokens, @@ -65,7 +64,7 @@ func TestSolanaTokenOps(t *testing.T) { testUserPubKey.String(): uint64(1000), }, }, - }, + ), }) require.NoError(t, err) diff --git a/deployment/ccip/changeset/testhelpers/test_environment.go b/deployment/ccip/changeset/testhelpers/test_environment.go index 991d67a2e26..aa6dded4215 100644 --- a/deployment/ccip/changeset/testhelpers/test_environment.go +++ b/deployment/ccip/changeset/testhelpers/test_environment.go @@ -439,28 +439,28 @@ func NewEnvironmentWithPrerequisitesContracts(t *testing.T, tEnv TestEnvironment Opts: opts, }) } - deployLinkApp := commonchangeset.ChangesetApplication{ - Changeset: commonchangeset.WrapChangeSet(commonchangeset.DeployLinkToken), - Config: allChains, - } + deployLinkApp := commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.DeployLinkToken), + allChains, + ) if tc.IsStaticLink { - deployLinkApp = commonchangeset.ChangesetApplication{ - Changeset: commonchangeset.WrapChangeSet(commonchangeset.DeployStaticLinkToken), - Config: allChains, - } + deployLinkApp = commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.DeployStaticLinkToken), + allChains, + ) } - e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, nil, []commonchangeset.ChangesetApplication{ + e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, nil, []commonchangeset.ConfiguredChangeSet{ deployLinkApp, - { - Changeset: commonchangeset.WrapChangeSet(changeset.DeployPrerequisitesChangeset), - Config: changeset.DeployPrerequisiteConfig{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.DeployPrerequisitesChangeset), + changeset.DeployPrerequisiteConfig{ Configs: prereqCfg, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(commonchangeset.DeployMCMSWithTimelock), - Config: mcmsCfg, - }, + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.DeployMCMSWithTimelock), + mcmsCfg, + ), }) require.NoError(t, err) tEnv.UpdateDeployedEnvironment(e) @@ -500,13 +500,13 @@ func NewEnvironmentWithJobsAndContracts(t *testing.T, tEnv TestEnvironment) Depl e = AddCCIPContractsToEnvironment(t, allChains, tEnv, false) // now we update RMNProxy to point to RMNRemote - e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, nil, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.SetRMNRemoteOnRMNProxyChangeset), - Config: changeset.SetRMNRemoteOnRMNProxyConfig{ + e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, nil, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.SetRMNRemoteOnRMNProxyChangeset), + changeset.SetRMNRemoteOnRMNProxyConfig{ ChainSelectors: evmChains, }, - }, + ), }) require.NoError(t, err) return e @@ -520,7 +520,7 @@ func AddCCIPContractsToEnvironment(t *testing.T, allChains []uint64, tEnv TestEn // Need to deploy prerequisites first so that we can form the USDC config // no proposals to be made, timelock can be passed as nil here - var apps []commonchangeset.ChangesetApplication + var apps []commonchangeset.ConfiguredChangeSet allContractParams := make(map[uint64]changeset.ChainContractParams) for _, chain := range allChains { @@ -544,10 +544,10 @@ func AddCCIPContractsToEnvironment(t *testing.T, allChains []uint64, tEnv TestEn } } - apps = append(apps, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.DeployHomeChainChangeset), - Config: changeset.DeployHomeChainConfig{ + apps = append(apps, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.DeployHomeChainChangeset), + changeset.DeployHomeChainConfig{ HomeChainSel: e.HomeChainSel, RMNDynamicConfig: NewTestRMNDynamicConfig(), RMNStaticConfig: NewTestRMNStaticConfig(), @@ -556,14 +556,14 @@ func AddCCIPContractsToEnvironment(t *testing.T, allChains []uint64, tEnv TestEn TestNodeOperator: envNodes.NonBootstraps().PeerIDs(), }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.DeployChainContractsChangeset), - Config: changeset.DeployChainContractsConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.DeployChainContractsChangeset), + changeset.DeployChainContractsConfig{ HomeChainSelector: e.HomeChainSel, ContractParamsPerChain: allContractParams, }, - }, + ), }...) e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, nil, apps) require.NoError(t, err) @@ -679,20 +679,20 @@ func AddCCIPContractsToEnvironment(t *testing.T, allChains []uint64, tEnv TestEn MinDelay: 0, } } - apps = []commonchangeset.ChangesetApplication{ - { + apps = []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( // Add the chain configs for the new chains. - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateChainConfigChangeset), - Config: changeset.UpdateChainConfigConfig{ + deployment.CreateLegacyChangeSet(changeset.UpdateChainConfigChangeset), + changeset.UpdateChainConfigConfig{ HomeChainSelector: e.HomeChainSel, RemoteChainAdds: chainConfigs, MCMS: mcmsConfig, }, - }, - { + ), + commonchangeset.ChangesetApplication( // Add the DONs and candidate commit OCR instances for the chain. - Changeset: commonchangeset.WrapChangeSet(changeset.AddDonAndSetCandidateChangeset), - Config: changeset.AddDonAndSetCandidateChangesetConfig{ + deployment.CreateLegacyChangeSet(changeset.AddDonAndSetCandidateChangeset), + changeset.AddDonAndSetCandidateChangesetConfig{ SetCandidateConfigBase: changeset.SetCandidateConfigBase{ HomeChainSelector: e.HomeChainSel, // TODO: we dont know what this means for solana @@ -704,11 +704,11 @@ func AddCCIPContractsToEnvironment(t *testing.T, allChains []uint64, tEnv TestEn PluginType: types.PluginTypeCCIPCommit, }, }, - }, - { + ), + commonchangeset.ChangesetApplication( // Add the exec OCR instances for the new chains. - Changeset: commonchangeset.WrapChangeSet(changeset.SetCandidateChangeset), - Config: changeset.SetCandidateChangesetConfig{ + deployment.CreateLegacyChangeSet(changeset.SetCandidateChangeset), + changeset.SetCandidateChangesetConfig{ SetCandidateConfigBase: changeset.SetCandidateConfigBase{ HomeChainSelector: e.HomeChainSel, // TODO: we dont know what this means for solana @@ -722,11 +722,11 @@ func AddCCIPContractsToEnvironment(t *testing.T, allChains []uint64, tEnv TestEn }, }, }, - }, - { + ), + commonchangeset.ChangesetApplication( // Promote everything - Changeset: commonchangeset.WrapChangeSet(changeset.PromoteCandidateChangeset), - Config: changeset.PromoteCandidateChangesetConfig{ + deployment.CreateLegacyChangeSet(changeset.PromoteCandidateChangeset), + changeset.PromoteCandidateChangesetConfig{ HomeChainSelector: e.HomeChainSel, PluginInfo: []changeset.PromoteCandidatePluginInfo{ { @@ -740,28 +740,29 @@ func AddCCIPContractsToEnvironment(t *testing.T, allChains []uint64, tEnv TestEn }, MCMS: mcmsConfig, }, - }, - { + ), + commonchangeset.ChangesetApplication( // Enable the OCR config on the remote chains. - Changeset: commonchangeset.WrapChangeSet(changeset.SetOCR3OffRampChangeset), - Config: changeset.SetOCR3OffRampConfig{ + deployment.CreateLegacyChangeSet(changeset.SetOCR3OffRampChangeset), + changeset.SetOCR3OffRampConfig{ HomeChainSel: e.HomeChainSel, RemoteChainSels: evmChains, CCIPHomeConfigType: globals.ConfigTypeActive, }, - }, - { + ), + commonchangeset.ChangesetApplication( // Enable the OCR config on the remote chains. - Changeset: commonchangeset.WrapChangeSet(changeset_solana.SetOCR3ConfigSolana), - Config: changeset.SetOCR3OffRampConfig{ + deployment.CreateLegacyChangeSet(changeset_solana.SetOCR3ConfigSolana), + changeset.SetOCR3OffRampConfig{ HomeChainSel: e.HomeChainSel, RemoteChainSels: solChains, CCIPHomeConfigType: globals.ConfigTypeActive, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.CCIPCapabilityJobspecChangeset), - }, + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.CCIPCapabilityJobspecChangeset), + nil, // Changeset ignores any config + ), } e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, timelockContractsPerChain, apps) require.NoError(t, err) diff --git a/deployment/ccip/changeset/testhelpers/test_helpers.go b/deployment/ccip/changeset/testhelpers/test_helpers.go index 75d190ae3f0..323c22c2b8c 100644 --- a/deployment/ccip/changeset/testhelpers/test_helpers.go +++ b/deployment/ccip/changeset/testhelpers/test_helpers.go @@ -428,10 +428,10 @@ func AddLane( t.Fatalf("from family is not evm, %s", fromFamily) } - changesets := []commoncs.ChangesetApplication{ - { - Changeset: commoncs.WrapChangeSet(changeset.UpdateOnRampsDestsChangeset), - Config: changeset.UpdateOnRampDestsConfig{ + changesets := []commoncs.ConfiguredChangeSet{ + commoncs.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateOnRampsDestsChangeset), + changeset.UpdateOnRampDestsConfig{ UpdatesByChain: map[uint64]map[uint64]changeset.OnRampDestinationUpdate{ from: { to: { @@ -442,10 +442,10 @@ func AddLane( }, }, }, - }, - { - Changeset: commoncs.WrapChangeSet(changeset.UpdateFeeQuoterPricesChangeset), - Config: changeset.UpdateFeeQuoterPricesConfig{ + ), + commoncs.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateFeeQuoterPricesChangeset), + changeset.UpdateFeeQuoterPricesConfig{ PricesByChain: map[uint64]changeset.FeeQuoterPriceUpdatePerSource{ from: { TokenPrices: tokenPrices, @@ -453,27 +453,27 @@ func AddLane( }, }, }, - }, - { - Changeset: commoncs.WrapChangeSet(changeset.UpdateFeeQuoterDestsChangeset), - Config: changeset.UpdateFeeQuoterDestsConfig{ + ), + commoncs.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateFeeQuoterDestsChangeset), + changeset.UpdateFeeQuoterDestsConfig{ UpdatesByChain: map[uint64]map[uint64]fee_quoter.FeeQuoterDestChainConfig{ from: { to: fqCfg, }, }, }, - }, + ), } require.NoError(t, err) switch toFamily { case chainsel.FamilyEVM: - evmChangesets := []commoncs.ChangesetApplication{ - { - Changeset: commoncs.WrapChangeSet(changeset.UpdateOffRampSourcesChangeset), - Config: changeset.UpdateOffRampSourcesConfig{ + evmChangesets := []commoncs.ConfiguredChangeSet{ + commoncs.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateOffRampSourcesChangeset), + changeset.UpdateOffRampSourcesConfig{ UpdatesByChain: map[uint64]map[uint64]changeset.OffRampSourceUpdate{ to: { from: { @@ -483,10 +483,10 @@ func AddLane( }, }, }, - }, - { - Changeset: commoncs.WrapChangeSet(changeset.UpdateRouterRampsChangeset), - Config: changeset.UpdateRouterRampsConfig{ + ), + commoncs.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateRouterRampsChangeset), + changeset.UpdateRouterRampsConfig{ TestRouter: isTestRouter, UpdatesByChain: map[uint64]changeset.RouterUpdates{ // onRamp update on source chain @@ -503,7 +503,7 @@ func AddLane( }, }, }, - }, + ), } changesets = append(changesets, evmChangesets...) case chainsel.FamilySolana: @@ -511,10 +511,10 @@ func AddLane( bigNum, ok := new(big.Int).SetString("19816680000000000000", 10) require.True(t, ok) bigNum.FillBytes(value[:]) - solanaChangesets := []commoncs.ChangesetApplication{ - { - Changeset: commoncs.WrapChangeSet(changeset_solana.AddRemoteChainToSolana), - Config: changeset_solana.AddRemoteChainToSolanaConfig{ + solanaChangesets := []commoncs.ConfiguredChangeSet{ + commoncs.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset_solana.AddRemoteChainToSolana), + changeset_solana.AddRemoteChainToSolanaConfig{ UpdatesByChain: map[uint64]map[uint64]changeset_solana.RemoteChainConfigSolana{ to: { from: { @@ -534,7 +534,7 @@ func AddLane( }, }, }, - }, + ), } changesets = append(changesets, solanaChangesets...) } @@ -546,10 +546,10 @@ func AddLane( // RemoveLane removes a lane between the source and destination chains in the deployed environment. func RemoveLane(t *testing.T, e *DeployedEnv, src, dest uint64, isTestRouter bool) { var err error - apps := []commoncs.ChangesetApplication{ - { - Changeset: commoncs.WrapChangeSet(changeset.UpdateRouterRampsChangeset), - Config: changeset.UpdateRouterRampsConfig{ + apps := []commoncs.ConfiguredChangeSet{ + commoncs.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateRouterRampsChangeset), + changeset.UpdateRouterRampsConfig{ UpdatesByChain: map[uint64]changeset.RouterUpdates{ // onRamp update on source chain src: { @@ -559,20 +559,20 @@ func RemoveLane(t *testing.T, e *DeployedEnv, src, dest uint64, isTestRouter boo }, }, }, - }, - { - Changeset: commoncs.WrapChangeSet(changeset.UpdateFeeQuoterDestsChangeset), - Config: changeset.UpdateFeeQuoterDestsConfig{ + ), + commoncs.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateFeeQuoterDestsChangeset), + changeset.UpdateFeeQuoterDestsConfig{ UpdatesByChain: map[uint64]map[uint64]fee_quoter.FeeQuoterDestChainConfig{ src: { dest: changeset.DefaultFeeQuoterDestChainConfig(false), }, }, }, - }, - { - Changeset: commoncs.WrapChangeSet(changeset.UpdateOnRampsDestsChangeset), - Config: changeset.UpdateOnRampDestsConfig{ + ), + commoncs.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateOnRampsDestsChangeset), + changeset.UpdateOnRampDestsConfig{ UpdatesByChain: map[uint64]map[uint64]changeset.OnRampDestinationUpdate{ src: { dest: { @@ -583,7 +583,7 @@ func RemoveLane(t *testing.T, e *DeployedEnv, src, dest uint64, isTestRouter boo }, }, }, - }, + ), } e.Env, err = commoncs.ApplyChangesets(t, e.Env, e.TimelockContracts(t), apps) require.NoError(t, err) @@ -1488,11 +1488,8 @@ func DeployLinkTokenTest(t *testing.T, solChains int) { config = append(config, solChain1) } - e, err := commoncs.ApplyChangesets(t, e, nil, []commoncs.ChangesetApplication{ - { - Changeset: commoncs.WrapChangeSet(commoncs.DeployLinkToken), - Config: config, - }, + e, err := commoncs.ApplyChangesets(t, e, nil, []commoncs.ConfiguredChangeSet{ + commoncs.ChangesetApplication(deployment.CreateLegacyChangeSet(commoncs.DeployLinkToken), config), }) require.NoError(t, err) addrs, err := e.ExistingAddresses.AddressesForChain(chain1) diff --git a/deployment/ccip/changeset/testhelpers/test_token_helpers.go b/deployment/ccip/changeset/testhelpers/test_token_helpers.go index cc7fde2c01c..628dcb7b1c4 100644 --- a/deployment/ccip/changeset/testhelpers/test_token_helpers.go +++ b/deployment/ccip/changeset/testhelpers/test_token_helpers.go @@ -76,17 +76,15 @@ func SetupTwoChainEnvironmentWithTokens( } // Deploy MCMS setup & prerequisite contracts - e, err := commoncs.ApplyChangesets(t, e, nil, []commoncs.ChangesetApplication{ - { - Changeset: commoncs.WrapChangeSet(changeset.DeployPrerequisitesChangeset), - Config: changeset.DeployPrerequisiteConfig{ - Configs: prereqCfg, - }, - }, - { - Changeset: commoncs.WrapChangeSet(commoncs.DeployMCMSWithTimelock), - Config: mcmsCfg, - }, + e, err := commoncs.ApplyChangesets(t, e, nil, []commoncs.ConfiguredChangeSet{ + commoncs.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.DeployPrerequisitesChangeset), + changeset.DeployPrerequisiteConfig{Configs: prereqCfg}, + ), + commoncs.ChangesetApplication( + deployment.CreateLegacyChangeSet(commoncs.DeployMCMSWithTimelock), + mcmsCfg, + ), }) require.NoError(t, err) @@ -110,14 +108,14 @@ func SetupTwoChainEnvironmentWithTokens( if transferToTimelock { // Transfer ownership of token admin registry to the Timelock - e, err = commoncs.ApplyChangesets(t, e, timelockContracts, []commoncs.ChangesetApplication{ - { - Changeset: commoncs.WrapChangeSet(commoncs.TransferToMCMSWithTimelock), - Config: commoncs.TransferToMCMSWithTimelockConfig{ + e, err = commoncs.ApplyChangesets(t, e, timelockContracts, []commoncs.ConfiguredChangeSet{ + commoncs.ChangesetApplication( + deployment.CreateLegacyChangeSet(commoncs.TransferToMCMSWithTimelock), + commoncs.TransferToMCMSWithTimelockConfig{ ContractsByChain: timelockOwnedContractsByChain, MinDelay: 0, }, - }, + ), }) require.NoError(t, err) } @@ -147,14 +145,14 @@ func DeployTestTokenPools( ) deployment.Environment { selectors := e.AllChainSelectors() - e, err := commonchangeset.ApplyChangesets(t, e, nil, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.DeployTokenPoolContractsChangeset), - Config: changeset.DeployTokenPoolContractsConfig{ + e, err := commonchangeset.ApplyChangesets(t, e, nil, []commonchangeset.ConfiguredChangeSet{ + commoncs.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.DeployTokenPoolContractsChangeset), + changeset.DeployTokenPoolContractsConfig{ TokenSymbol: TestTokenSymbol, NewPools: newPools, }, - }, + ), }) require.NoError(t, err) @@ -188,14 +186,14 @@ func DeployTestTokenPools( } // Transfer ownership of token admin registry to the Timelock - e, err = commoncs.ApplyChangesets(t, e, timelockContracts, []commoncs.ChangesetApplication{ - { - Changeset: commoncs.WrapChangeSet(commoncs.TransferToMCMSWithTimelock), - Config: commoncs.TransferToMCMSWithTimelockConfig{ + e, err = commoncs.ApplyChangesets(t, e, timelockContracts, []commoncs.ConfiguredChangeSet{ + commoncs.ChangesetApplication( + deployment.CreateLegacyChangeSet(commoncs.TransferToMCMSWithTimelock), + commoncs.TransferToMCMSWithTimelockConfig{ ContractsByChain: timelockOwnedContractsByChain, MinDelay: 0, }, - }, + ), }) require.NoError(t, err) } diff --git a/deployment/ccip/changeset/testhelpers/v1_5/test_helpers.go b/deployment/ccip/changeset/testhelpers/v1_5/test_helpers.go index aafd7dce1c1..c4dc445e47d 100644 --- a/deployment/ccip/changeset/testhelpers/v1_5/test_helpers.go +++ b/deployment/ccip/changeset/testhelpers/v1_5/test_helpers.go @@ -34,26 +34,26 @@ import ( func AddLanes(t *testing.T, e deployment.Environment, state changeset.CCIPOnChainState, pairs []testhelpers.SourceDestPair) deployment.Environment { addLanesCfg, commitOCR2Configs, execOCR2Configs, jobspecs := LaneConfigsForChains(t, e, state, pairs) var err error - e, err = commonchangeset.ApplyChangesets(t, e, nil, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(v1_5changeset.DeployLanesChangeset), - Config: v1_5changeset.DeployLanesConfig{ + e, err = commonchangeset.ApplyChangesets(t, e, nil, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(v1_5changeset.DeployLanesChangeset), + v1_5changeset.DeployLanesConfig{ Configs: addLanesCfg, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(v1_5changeset.SetOCR2ConfigForTestChangeset), - Config: v1_5changeset.OCR2Config{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(v1_5changeset.SetOCR2ConfigForTestChangeset), + v1_5changeset.OCR2Config{ CommitConfigs: commitOCR2Configs, ExecConfigs: execOCR2Configs, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(v1_5changeset.JobSpecsForLanesChangeset), - Config: v1_5changeset.JobSpecsForLanesConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(v1_5changeset.JobSpecsForLanesChangeset), + v1_5changeset.JobSpecsForLanesConfig{ Configs: jobspecs, }, - }, + ), }) require.NoError(t, err) return e diff --git a/deployment/ccip/changeset/v1_5/e2e_test.go b/deployment/ccip/changeset/v1_5/e2e_test.go index 7be04b42cda..0c324f9bd8b 100644 --- a/deployment/ccip/changeset/v1_5/e2e_test.go +++ b/deployment/ccip/changeset/v1_5/e2e_test.go @@ -8,6 +8,7 @@ import ( chainselectors "github.com/smartcontractkit/chain-selectors" "github.com/stretchr/testify/require" + "github.com/smartcontractkit/chainlink/deployment" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/testhelpers" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/testhelpers/v1_5" @@ -54,10 +55,10 @@ func TestE2ELegacy(t *testing.T) { } e.Env = v1_5.AddLanes(t, e.Env, state, pairs) // permabless the commit stores - e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, e.TimelockContracts(t), []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(v1_5changeset.PermaBlessCommitStoreChangeset), - Config: v1_5changeset.PermaBlessCommitStoreConfig{ + e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, e.TimelockContracts(t), []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(v1_5changeset.PermaBlessCommitStoreChangeset), + v1_5changeset.PermaBlessCommitStoreConfig{ Configs: map[uint64]v1_5changeset.PermaBlessCommitStoreConfigPerDest{ dest: { Sources: []v1_5changeset.PermaBlessConfigPerSourceChain{ @@ -69,7 +70,7 @@ func TestE2ELegacy(t *testing.T) { }, }, }, - }, + ), }) require.NoError(t, err) // reload state after adding lanes diff --git a/deployment/changeset.go b/deployment/changeset.go index fbde1dbb3d1..cb21db925d3 100644 --- a/deployment/changeset.go +++ b/deployment/changeset.go @@ -8,18 +8,84 @@ import ( ) var ( - ErrInvalidConfig = errors.New("invalid changeset config") + ErrInvalidConfig = errors.New("invalid changeset config") + ErrInvalidEnvironment = errors.New("invalid environment") ) -// ChangeSet represents a set of changes to be made to an environment. -// The configuration contains environment specific inputs for a specific changeset. -// The configuration might contain for example the chainSelectors to apply the change to -// or existing environment specific contract addresses. -// Its recommended that changesets operate on a small number of chains (e.g. 1-3) -// to reduce the risk of partial failures. -// If the configuration is unexpected type or format, the changeset should return ErrInvalidConfig. +// ChangeSet is equivalent to ChangeLogic +// Deprecated: use the ChangeLogic type, or an instance of a ChangeSetV2 in infrastructure or validation code. type ChangeSet[C any] func(e Environment, config C) (ChangesetOutput, error) +// ChangeLogic encapsulates the active behavior of a ChangeSetV2. +// The config struct contains environment-specific inputs for this logical change. For example, it might contain +// the chainSelectors against which this change logic should be applied, or certain contract addresses or configuration +// values to be used in this change. +// The function should perform any deployment or configuration tasks, compose and propose job-specs, and generate any +// MCMS proposals necessary. +// This is the standalone version of ChangeSetV2.Apply for use with CreateChangeSet +// +// ChangeLogic functions should operate on a modest number of chains to reduce the risk of partial failures. +type ChangeLogic[C any] func(e Environment, config C) (ChangesetOutput, error) + +// PreconditionVerifier functions should evaluate the supplied config, in the context of an environment, to ensure that +// the config struct is correct, and that the environmental preconditions are as expected. This is the standalone +// version of ChangeSetV2.VerifyPreconditions for use with CreateChangeSet +// +// If the configuration is unexpected type or format, the changeset should return ErrInvalidConfig. If there are +// surprising aspects in the environment (a contract expected to be present cannot be located, etc.), then +// ErrInvalidEnvironment should be returned. +type PreconditionVerifier[C any] func(e Environment, config C) error + +// ChangeSetV2 is a type which encapsulates the logic to perform a set of changes to be made to an environment, in the +// context of deploying Chainlink's product operations - namely deploying and configuring contracts, generating and +// proposing TOML job-specs and interacting with the Job Distributor, and creating MCMS proposals. +// +// ChangeSetV2 has a pre-validation function which is optional (can be implemented as a no-op), which execution +// environments (such as the migrations infrastructure in chainlink-deployments) should execute before invoking the +// Apply method. +// +// > Note: ChangeSetV2 replaces ChangeSet, though its Apply method is identical in signature to a ChangeSet function. +type ChangeSetV2[C any] interface { + // Apply performs the logic of the changeset, including any side effects, such as on-chain (non-MCMS) writes or + // contract deployments, job-spec creation and Job-Distributor interaction, MCMS proposal creation, etc. It should + // return the ingredients of the side effects in a ChangesetOutput. + Apply(e Environment, config C) (ChangesetOutput, error) + + // VerifyPreconditions function verifies the preconditions of the config. It should have no side effects, instead + // returning an error if the ChangeSetV2 should not be applied, or nil if the ChangeSetV2 is safe to apply. + VerifyPreconditions(e Environment, config C) error +} + +type simpleChangeSet[C any] struct { + apply ChangeLogic[C] + verify PreconditionVerifier[C] +} + +func (scs simpleChangeSet[C]) Apply(e Environment, config C) (ChangesetOutput, error) { + return scs.apply(e, config) +} + +func (scs simpleChangeSet[C]) VerifyPreconditions(e Environment, config C) error { + return scs.verify(e, config) +} + +// CreateChangeSet creates a ChangeSetV2 from an existing execution function (or an older ChangeSet) and a +// precondition verification function. +func CreateChangeSet[C any](applyFunc ChangeLogic[C], verifyFunc func(e Environment, config C) error) ChangeSetV2[C] { + return simpleChangeSet[C]{ + apply: applyFunc, + verify: verifyFunc, + } +} + +func CreateLegacyChangeSet[C any](changeset ChangeSet[C]) ChangeSetV2[C] { + var cs ChangeLogic[C] = func(e Environment, config C) (ChangesetOutput, error) { return changeset(e, config) } + return simpleChangeSet[C]{ + apply: cs, + verify: func(e Environment, config C) error { return nil }, + } +} + // ProposedJob represents a job spec which has been proposed to a node, with the JobID returned by the // Job Distributor. type ProposedJob struct { diff --git a/deployment/changeset_test.go b/deployment/changeset_test.go new file mode 100644 index 00000000000..adb748ab261 --- /dev/null +++ b/deployment/changeset_test.go @@ -0,0 +1,108 @@ +package deployment + +import ( + "context" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/smartcontractkit/chainlink-common/pkg/utils/tests" + "github.com/smartcontractkit/chainlink/v2/core/logger" +) + +type MyChangeSet struct{} + +func (m MyChangeSet) Apply(e Environment, config uint64) (ChangesetOutput, error) { + return ChangesetOutput{AddressBook: NewMemoryAddressBook()}, nil +} +func (m MyChangeSet) VerifyPreconditions(e Environment, config uint64) error { + return nil +} + +func TestChangeSetNormalType(t *testing.T) { + t.Parallel() + e := NewNoopEnvironment(t) + + var cs ChangeSetV2[uint64] = MyChangeSet{} + verify := cs.VerifyPreconditions(e, 5) + assert.Equal(t, nil, verify) + out, _ := cs.Apply(e, 5) + assert.Equal(t, NewMemoryAddressBook(), out.AddressBook) +} + +func TestChangeSetConstructionComposedFromLambdas(t *testing.T) { + t.Parallel() + e := NewNoopEnvironment(t) + + var cs = CreateChangeSet( + // Don't do this in real life, this is for a test. Make nice tested functions. + func(e Environment, config string) (ChangesetOutput, error) { + return ChangesetOutput{AddressBook: NewMemoryAddressBook()}, nil + }, + func(e Environment, config string) error { + return nil + }, + ) + verify := cs.VerifyPreconditions(e, "foo") + assert.Equal(t, nil, verify) + out, _ := cs.Apply(e, "foo") + assert.Equal(t, NewMemoryAddressBook(), out.AddressBook) +} + +var fakeChangeSet = CreateChangeSet(oldSchool, oldSchoolVerify) + +func oldSchool(e Environment, config uint32) (ChangesetOutput, error) { + return ChangesetOutput{AddressBook: NewMemoryAddressBook()}, nil +} +func oldSchoolVerify(e Environment, _ uint32) error { + return nil +} + +// This is likely the best example of how to use this API. +func TestChangeSetComposedType(t *testing.T) { + t.Parallel() + e := NewNoopEnvironment(t) + + verify := fakeChangeSet.VerifyPreconditions(e, 5) + assert.Equal(t, nil, verify) + out, _ := fakeChangeSet.Apply(e, 5) + assert.Equal(t, NewMemoryAddressBook(), out.AddressBook) +} + +// TestChangeSetLegacyFunction tests using legacy ChangeSet functions (but just naturally conforming to the type, +// via duck-typing, in the new wrapper. +func TestChangeSetLegacyFunctionWithStandardChangeSetFunction(t *testing.T) { + t.Parallel() + e := NewNoopEnvironment(t) + var cs = CreateLegacyChangeSet(oldSchool) + verify := cs.VerifyPreconditions(e, 5) + assert.NoError(t, verify) + out, _ := cs.Apply(e, 5) + assert.Equal(t, NewMemoryAddressBook(), out.AddressBook) +} + +// TestChangeSetLegacyFunction tests using legacy ChangeSet (strongly declared as a ChangeSet[C]) in the wrapper. +func TestChangeSetLegacyFunction(t *testing.T) { + t.Parallel() + e := NewNoopEnvironment(t) + var csFunc ChangeSet[uint32] = oldSchool // Cast to a ChangeSet and use in CreateLegacyChangeSet + var cs = CreateLegacyChangeSet(csFunc) + verify := cs.VerifyPreconditions(e, 5) + assert.Equal(t, nil, verify) + out, _ := cs.Apply(e, 5) + assert.Equal(t, NewMemoryAddressBook(), out.AddressBook) +} + +func NewNoopEnvironment(t *testing.T) Environment { + return *NewEnvironment( + "noop", + logger.TestLogger(t), + NewMemoryAddressBook(), + map[uint64]Chain{}, + map[uint64]SolChain{}, + []string{}, + nil, + func() context.Context { return tests.Context(t) }, + XXXGenerateTestOCRSecrets(), + ) +} diff --git a/deployment/common/changeset/example/link_transfer_test.go b/deployment/common/changeset/example/link_transfer_test.go index 4cc2bd0880b..d8a6492ce34 100644 --- a/deployment/common/changeset/example/link_transfer_test.go +++ b/deployment/common/changeset/example/link_transfer_test.go @@ -35,14 +35,14 @@ func setupLinkTransferTestEnv(t *testing.T) deployment.Environment { config := proposalutils.SingleGroupMCMS(t) // Deploy MCMS and Timelock - env, err := changeset.ApplyChangesets(t, env, nil, []changeset.ChangesetApplication{ - { - Changeset: changeset.WrapChangeSet(changeset.DeployLinkToken), - Config: []uint64{chainSelector}, - }, - { - Changeset: changeset.WrapChangeSet(changeset.DeployMCMSWithTimelock), - Config: map[uint64]types.MCMSWithTimelockConfig{ + env, err := changeset.ApplyChangesets(t, env, nil, []changeset.ConfiguredChangeSet{ + changeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.DeployLinkToken), + []uint64{chainSelector}, + ), + changeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.DeployMCMSWithTimelock), + map[uint64]types.MCMSWithTimelockConfig{ chainSelector: { Canceller: config, Bypasser: config, @@ -50,7 +50,7 @@ func setupLinkTransferTestEnv(t *testing.T) deployment.Environment { TimelockMinDelay: big.NewInt(0), }, }, - }, + ), }) require.NoError(t, err) return env @@ -94,12 +94,12 @@ func TestLinkTransferMCMS(t *testing.T) { }, } // Apply the changeset - _, err = changeset.ApplyChangesets(t, env, timelocks, []changeset.ChangesetApplication{ + _, err = changeset.ApplyChangesets(t, env, timelocks, []changeset.ConfiguredChangeSet{ // the changeset produces proposals, ApplyChangesets will sign & execute them. // in practice, signing and executing are separated processes. - { - Changeset: changeset.WrapChangeSet(example.LinkTransfer), - Config: &example.LinkTransferConfig{ + changeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(example.LinkTransfer), + &example.LinkTransferConfig{ From: timelockAddress, Transfers: map[uint64][]example.TransferConfig{ chainSelector: { @@ -114,7 +114,7 @@ func TestLinkTransferMCMS(t *testing.T) { OverrideRoot: true, }, }, - }, + ), }) require.NoError(t, err) @@ -169,12 +169,12 @@ func TestLinkTransfer(t *testing.T) { } // Apply the changeset - _, err = changeset.ApplyChangesets(t, env, timelocks, []changeset.ChangesetApplication{ + _, err = changeset.ApplyChangesets(t, env, timelocks, []changeset.ConfiguredChangeSet{ // the changeset produces proposals, ApplyChangesets will sign & execute them. // in practice, signing and executing are separated processes. - { - Changeset: changeset.WrapChangeSet(example.LinkTransfer), - Config: &example.LinkTransferConfig{ + changeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(example.LinkTransfer), + &example.LinkTransferConfig{ From: chain.DeployerKey.From, Transfers: map[uint64][]example.TransferConfig{ chainSelector: { @@ -186,7 +186,7 @@ func TestLinkTransfer(t *testing.T) { }, // No MCMSConfig here means we'll execute the txs directly. }, - }, + ), }) require.NoError(t, err) diff --git a/deployment/common/changeset/example/mint_link_test.go b/deployment/common/changeset/example/mint_link_test.go index 1c60c3221de..73cccac54fd 100644 --- a/deployment/common/changeset/example/mint_link_test.go +++ b/deployment/common/changeset/example/mint_link_test.go @@ -8,6 +8,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/stretchr/testify/require" + "github.com/smartcontractkit/chainlink/deployment" "github.com/smartcontractkit/chainlink/deployment/common/changeset" "github.com/smartcontractkit/chainlink/deployment/common/changeset/example" ) @@ -29,14 +30,14 @@ func TestMintLink(t *testing.T) { linkState, err := changeset.MaybeLoadLinkTokenChainState(chain, addrs) require.NoError(t, err) - _, err = changeset.ApplyChangesets(t, env, nil, []changeset.ChangesetApplication{ - { - Changeset: changeset.WrapChangeSet(example.AddMintersBurnersLink), - Config: &example.AddMintersBurnersLinkConfig{ + _, err = changeset.ApplyChangesets(t, env, nil, []changeset.ConfiguredChangeSet{ + changeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(example.AddMintersBurnersLink), + &example.AddMintersBurnersLinkConfig{ ChainSelector: chainSelector, Minters: []common.Address{chain.DeployerKey.From}, }, - }, + ), }) require.NoError(t, err) diff --git a/deployment/common/changeset/set_config_mcms_test.go b/deployment/common/changeset/set_config_mcms_test.go index 207b37c00f3..19b952e01b6 100644 --- a/deployment/common/changeset/set_config_mcms_test.go +++ b/deployment/common/changeset/set_config_mcms_test.go @@ -35,17 +35,17 @@ func setupSetConfigTestEnv(t *testing.T) deployment.Environment { config := proposalutils.SingleGroupTimelockConfig(t) // Deploy MCMS and Timelock - env, err := commonchangeset.ApplyChangesets(t, env, nil, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(commonchangeset.DeployLinkToken), - Config: []uint64{chainSelector}, - }, - { - Changeset: commonchangeset.WrapChangeSet(commonchangeset.DeployMCMSWithTimelock), - Config: map[uint64]types.MCMSWithTimelockConfig{ + env, err := commonchangeset.ApplyChangesets(t, env, nil, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.DeployLinkToken), + []uint64{chainSelector}, + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.DeployMCMSWithTimelock), + map[uint64]types.MCMSWithTimelockConfig{ chainSelector: config, }, - }, + ), }) require.NoError(t, err) return env @@ -56,15 +56,15 @@ func TestSetConfigMCMSVariants(t *testing.T) { // Add the timelock as a signer to check state changes for _, tc := range []struct { name string - changeSets func(mcmsState *commonchangeset.MCMSWithTimelockState, chainSel uint64, cfgProp, cfgCancel, cfgBypass config.Config) []commonchangeset.ChangesetApplication + changeSets func(mcmsState *commonchangeset.MCMSWithTimelockState, chainSel uint64, cfgProp, cfgCancel, cfgBypass config.Config) []commonchangeset.ConfiguredChangeSet }{ { name: "MCMS disabled", - changeSets: func(mcmsState *commonchangeset.MCMSWithTimelockState, chainSel uint64, cfgProp, cfgCancel, cfgBypass config.Config) []commonchangeset.ChangesetApplication { - return []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(commonchangeset.SetConfigMCMS), - Config: commonchangeset.MCMSConfig{ + changeSets: func(mcmsState *commonchangeset.MCMSWithTimelockState, chainSel uint64, cfgProp, cfgCancel, cfgBypass config.Config) []commonchangeset.ConfiguredChangeSet { + return []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.SetConfigMCMS), + commonchangeset.MCMSConfig{ ConfigsPerChain: map[uint64]commonchangeset.ConfigPerRole{ chainSel: { Proposer: cfgProp, @@ -73,25 +73,25 @@ func TestSetConfigMCMSVariants(t *testing.T) { }, }, }, - }, + ), } }, }, { name: "MCMS enabled", - changeSets: func(mcmsState *commonchangeset.MCMSWithTimelockState, chainSel uint64, cfgProp, cfgCancel, cfgBypass config.Config) []commonchangeset.ChangesetApplication { - return []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(commonchangeset.TransferToMCMSWithTimelock), - Config: commonchangeset.TransferToMCMSWithTimelockConfig{ + changeSets: func(mcmsState *commonchangeset.MCMSWithTimelockState, chainSel uint64, cfgProp, cfgCancel, cfgBypass config.Config) []commonchangeset.ConfiguredChangeSet { + return []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.TransferToMCMSWithTimelock), + commonchangeset.TransferToMCMSWithTimelockConfig{ ContractsByChain: map[uint64][]common.Address{ chainSel: {mcmsState.ProposerMcm.Address(), mcmsState.BypasserMcm.Address(), mcmsState.CancellerMcm.Address()}, }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(commonchangeset.SetConfigMCMS), - Config: commonchangeset.MCMSConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.SetConfigMCMS), + commonchangeset.MCMSConfig{ ProposalConfig: &commonchangeset.TimelockConfig{ MinDelay: 0, }, @@ -103,7 +103,7 @@ func TestSetConfigMCMSVariants(t *testing.T) { }, }, }, - }, + ), } }, }, diff --git a/deployment/common/changeset/test_helpers.go b/deployment/common/changeset/test_helpers.go index 3c2409566eb..0d2de2c49d6 100644 --- a/deployment/common/changeset/test_helpers.go +++ b/deployment/common/changeset/test_helpers.go @@ -13,31 +13,46 @@ import ( "github.com/smartcontractkit/chainlink/deployment/common/proposalutils" ) -type ChangesetApplication struct { - Changeset deployment.ChangeSet[any] - Config any +type ConfiguredChangeSet interface { + Apply(e deployment.Environment) (deployment.ChangesetOutput, error) } -func WrapChangeSet[C any](fn deployment.ChangeSet[C]) func(e deployment.Environment, config any) (deployment.ChangesetOutput, error) { - return func(e deployment.Environment, config any) (deployment.ChangesetOutput, error) { - var zeroC C - if config != nil { - c, ok := config.(C) - if !ok { - return deployment.ChangesetOutput{}, fmt.Errorf("invalid config type, expected %T", c) - } - return fn(e, config.(C)) - } +func ChangesetApplication[C any]( + changeset deployment.ChangeSetV2[C], + config C, +) ConfiguredChangeSet { + return configuredChangeSetImpl[C]{ + changeset: changeset, + config: config, + } +} - return fn(e, zeroC) +type configuredChangeSetImpl[C any] struct { + changeset deployment.ChangeSetV2[C] + config C +} + +func (ca configuredChangeSetImpl[C]) Apply(e deployment.Environment) (deployment.ChangesetOutput, error) { + err := ca.changeset.VerifyPreconditions(e, ca.config) + if err != nil { + return deployment.ChangesetOutput{}, err } + return ca.changeset.Apply(e, ca.config) +} + +// ApplyAll applies the changeset applications to the environment and returns the updated environment. This is the +// variadic function equivalent of ApplyChangesets, but allowing you to simply pass in one or more changesets as +// parameters at the end of the function. e.g. `changeset.ApplyAll(t, e, nil, configuredCS1, configuredCS2)` etc. +func ApplyAll(t *testing.T, e deployment.Environment, timelockContractsPerChain map[uint64]*proposalutils.TimelockExecutionContracts, first ConfiguredChangeSet, rest ...ConfiguredChangeSet) (deployment.Environment, error) { + return ApplyChangesets(t, e, timelockContractsPerChain, append([]ConfiguredChangeSet{first}, rest...)) } // ApplyChangesets applies the changeset applications to the environment and returns the updated environment. -func ApplyChangesets(t *testing.T, e deployment.Environment, timelockContractsPerChain map[uint64]*proposalutils.TimelockExecutionContracts, changesetApplications []ChangesetApplication) (deployment.Environment, error) { +func ApplyChangesets(t *testing.T, e deployment.Environment, timelockContractsPerChain map[uint64]*proposalutils.TimelockExecutionContracts, changesetApplications []ConfiguredChangeSet) (deployment.Environment, error) { currentEnv := e for i, csa := range changesetApplications { - out, err := csa.Changeset(currentEnv, csa.Config) + + out, err := csa.Apply(currentEnv) if err != nil { return e, fmt.Errorf("failed to apply changeset at index %d: %w", i, err) } diff --git a/deployment/common/changeset/test_helpers_test.go b/deployment/common/changeset/test_helpers_test.go new file mode 100644 index 00000000000..54762ca7246 --- /dev/null +++ b/deployment/common/changeset/test_helpers_test.go @@ -0,0 +1,77 @@ +package changeset + +import ( + "context" + "errors" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/smartcontractkit/chainlink-common/pkg/utils/tests" + "github.com/smartcontractkit/chainlink/deployment" + "github.com/smartcontractkit/chainlink/v2/core/logger" +) + +func TestChangeSetLegacyFunction_PassingCase(t *testing.T) { + t.Parallel() + e := NewNoopEnvironment(t) + + executedCs := false + executedValidator := false + + csv2 := deployment.CreateChangeSet( + func(e deployment.Environment, config uint32) (deployment.ChangesetOutput, error) { + executedCs = true + return deployment.ChangesetOutput{AddressBook: deployment.NewMemoryAddressBook()}, nil + }, + func(e deployment.Environment, config uint32) error { + executedValidator = true + return nil + }, + ) + assert.False(t, executedCs, "Not expected to have executed the changeset yet") + assert.False(t, executedValidator, "Not expected to have executed the validator yet") + _, err := ApplyAll(t, e, nil, ChangesetApplication(csv2, 1)) + assert.True(t, executedCs, "Validator should have returned nil, allowing changeset execution") + assert.True(t, executedValidator, "Not expected to have executed the validator yet") + assert.NoError(t, err) +} + +func TestChangeSetLegacyFunction_ErrorCase(t *testing.T) { + t.Parallel() + e := NewNoopEnvironment(t) + + executedCs := false + executedValidator := false + + csv2 := deployment.CreateChangeSet( + func(e deployment.Environment, config uint32) (deployment.ChangesetOutput, error) { + executedCs = true + return deployment.ChangesetOutput{AddressBook: deployment.NewMemoryAddressBook()}, nil + }, + func(e deployment.Environment, config uint32) error { + executedValidator = true + return errors.New("you shall not pass") + }, + ) + assert.False(t, executedCs, "Not expected to have executed the changeset yet") + assert.False(t, executedValidator, "Not expected to have executed the validator yet") + _, err := ApplyAll(t, e, nil, ChangesetApplication(csv2, 1)) + assert.False(t, executedCs, "Validator should have fired, preventing changeset execution") + assert.True(t, executedValidator, "Not expected to have executed the validator yet") + assert.Equal(t, "failed to apply changeset at index 0: you shall not pass", err.Error()) +} + +func NewNoopEnvironment(t *testing.T) deployment.Environment { + return *deployment.NewEnvironment( + "noop", + logger.TestLogger(t), + deployment.NewMemoryAddressBook(), + map[uint64]deployment.Chain{}, + map[uint64]deployment.SolChain{}, + []string{}, + nil, + func() context.Context { return tests.Context(t) }, + deployment.XXXGenerateTestOCRSecrets(), + ) +} diff --git a/deployment/common/changeset/transfer_to_mcms_with_timelock_test.go b/deployment/common/changeset/transfer_to_mcms_with_timelock_test.go index c8c0f462811..06dc3667049 100644 --- a/deployment/common/changeset/transfer_to_mcms_with_timelock_test.go +++ b/deployment/common/changeset/transfer_to_mcms_with_timelock_test.go @@ -23,17 +23,17 @@ func TestTransferToMCMSWithTimelock(t *testing.T) { Nodes: 1, }) chain1 := e.AllChainSelectors()[0] - e, err := ApplyChangesets(t, e, nil, []ChangesetApplication{ - { - Changeset: WrapChangeSet(DeployLinkToken), - Config: []uint64{chain1}, - }, - { - Changeset: WrapChangeSet(DeployMCMSWithTimelock), - Config: map[uint64]types.MCMSWithTimelockConfig{ + e, err := ApplyChangesets(t, e, nil, []ConfiguredChangeSet{ + ChangesetApplication( + deployment.CreateLegacyChangeSet(DeployLinkToken), + []uint64{chain1}, + ), + ChangesetApplication( + deployment.CreateLegacyChangeSet(DeployMCMSWithTimelock), + map[uint64]types.MCMSWithTimelockConfig{ chain1: proposalutils.SingleGroupTimelockConfig(t), }, - }, + ), }) require.NoError(t, err) addrs, err := e.ExistingAddresses.AddressesForChain(chain1) @@ -47,16 +47,16 @@ func TestTransferToMCMSWithTimelock(t *testing.T) { Timelock: state.Timelock, CallProxy: state.CallProxy, }, - }, []ChangesetApplication{ - { - Changeset: WrapChangeSet(TransferToMCMSWithTimelock), - Config: TransferToMCMSWithTimelockConfig{ + }, []ConfiguredChangeSet{ + ChangesetApplication( + deployment.CreateLegacyChangeSet(TransferToMCMSWithTimelock), + TransferToMCMSWithTimelockConfig{ ContractsByChain: map[uint64][]common.Address{ chain1: {link.LinkToken.Address()}, }, MinDelay: 0, }, - }, + ), }) require.NoError(t, err) // We expect now that the link token is owned by the MCMS timelock. @@ -67,14 +67,14 @@ func TestTransferToMCMSWithTimelock(t *testing.T) { require.Equal(t, state.Timelock.Address(), o) // Try a rollback to the deployer. - e, err = ApplyChangesets(t, e, nil, []ChangesetApplication{ - { - Changeset: WrapChangeSet(TransferToDeployer), - Config: TransferToDeployerConfig{ + e, err = ApplyChangesets(t, e, nil, []ConfiguredChangeSet{ + ChangesetApplication( + deployment.CreateLegacyChangeSet(TransferToDeployer), + TransferToDeployerConfig{ ContractAddress: link.LinkToken.Address(), ChainSel: chain1, }, - }, + ), }) require.NoError(t, err) @@ -91,13 +91,13 @@ func TestRenounceTimelockDeployerConfigValidate(t *testing.T) { Nodes: 1, }) chain1 := e.AllChainSelectors()[0] - e, err := ApplyChangesets(t, e, nil, []ChangesetApplication{ - { - Changeset: WrapChangeSet(DeployMCMSWithTimelock), - Config: map[uint64]types.MCMSWithTimelockConfig{ + e, err := ApplyChangesets(t, e, nil, []ConfiguredChangeSet{ + ChangesetApplication( + deployment.CreateLegacyChangeSet(DeployMCMSWithTimelock), + map[uint64]types.MCMSWithTimelockConfig{ chain1: proposalutils.SingleGroupTimelockConfig(t), }, - }, + ), }) require.NoError(t, err) @@ -165,13 +165,13 @@ func TestRenounceTimelockDeployer(t *testing.T) { Nodes: 1, }) chain1 := e.AllChainSelectors()[0] - e, err := ApplyChangesets(t, e, nil, []ChangesetApplication{ - { - Changeset: WrapChangeSet(DeployMCMSWithTimelock), - Config: map[uint64]types.MCMSWithTimelockConfig{ + e, err := ApplyChangesets(t, e, nil, []ConfiguredChangeSet{ + ChangesetApplication( + deployment.CreateLegacyChangeSet(DeployMCMSWithTimelock), + map[uint64]types.MCMSWithTimelockConfig{ chain1: proposalutils.SingleGroupTimelockConfig(t), }, - }, + ), }) require.NoError(t, err) addrs, err := e.ExistingAddresses.AddressesForChain(chain1) @@ -191,13 +191,13 @@ func TestRenounceTimelockDeployer(t *testing.T) { require.Equal(t, int64(2), r.Int64()) // Revoke Deployer - e, err = ApplyChangesets(t, e, nil, []ChangesetApplication{ - { - Changeset: WrapChangeSet(RenounceTimelockDeployer), - Config: RenounceTimelockDeployerConfig{ + e, err = ApplyChangesets(t, e, nil, []ConfiguredChangeSet{ + ChangesetApplication( + deployment.CreateLegacyChangeSet(RenounceTimelockDeployer), + RenounceTimelockDeployerConfig{ ChainSel: chain1, }, - }, + ), }) require.NoError(t, err) diff --git a/deployment/environment/crib/ccip_deployer.go b/deployment/environment/crib/ccip_deployer.go index 5c4913b799e..1761f226120 100644 --- a/deployment/environment/crib/ccip_deployer.go +++ b/deployment/environment/crib/ccip_deployer.go @@ -55,14 +55,14 @@ func DeployHomeChainContracts(ctx context.Context, lggr logger.Logger, envConfig TimelockMinDelay: big.NewInt(0), } } - *e, err = commonchangeset.ApplyChangesets(nil, *e, nil, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(commonchangeset.DeployMCMSWithTimelock), - Config: cfg, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.DeployHomeChainChangeset), - Config: changeset.DeployHomeChainConfig{ + *e, err = commonchangeset.ApplyChangesets(nil, *e, nil, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.DeployMCMSWithTimelock), + cfg, + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.DeployHomeChainChangeset), + changeset.DeployHomeChainConfig{ HomeChainSel: homeChainSel, RMNStaticConfig: testhelpers.NewTestRMNStaticConfig(), RMNDynamicConfig: testhelpers.NewTestRMNDynamicConfig(), @@ -71,7 +71,7 @@ func DeployHomeChainContracts(ctx context.Context, lggr logger.Logger, envConfig "NodeOperator": p2pIds, }, }, - }, + ), }) state, err := changeset.LoadOnchainState(*e) @@ -129,41 +129,41 @@ func DeployCCIPAndAddLanes(ctx context.Context, lggr logger.Logger, envConfig de } // Setup because we only need to deploy the contracts and distribute job specs - *e, err = commonchangeset.ApplyChangesets(nil, *e, nil, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateChainConfigChangeset), - Config: changeset.UpdateChainConfigConfig{ + *e, err = commonchangeset.ApplyChangesets(nil, *e, nil, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateChainConfigChangeset), + changeset.UpdateChainConfigConfig{ HomeChainSelector: homeChainSel, RemoteChainAdds: chainConfigs, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(commonchangeset.DeployLinkToken), - Config: chainSelectors, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.DeployPrerequisitesChangeset), - Config: changeset.DeployPrerequisiteConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.DeployLinkToken), + chainSelectors, + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.DeployPrerequisitesChangeset), + changeset.DeployPrerequisiteConfig{ Configs: prereqCfgs, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.DeployChainContractsChangeset), - Config: changeset.DeployChainContractsConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.DeployChainContractsChangeset), + changeset.DeployChainContractsConfig{ HomeChainSelector: homeChainSel, ContractParamsPerChain: contractParams, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.SetRMNRemoteOnRMNProxyChangeset), - Config: changeset.SetRMNRemoteOnRMNProxyConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.SetRMNRemoteOnRMNProxyChangeset), + changeset.SetRMNRemoteOnRMNProxyConfig{ ChainSelectors: chainSelectors, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.CCIPCapabilityJobspecChangeset), - Config: struct{}{}, - }, + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.CCIPCapabilityJobspecChangeset), + nil, // ChangeSet does not use a config. + ), }) state, err := changeset.LoadOnchainState(*e) if err != nil { @@ -177,11 +177,11 @@ func DeployCCIPAndAddLanes(ctx context.Context, lggr logger.Logger, envConfig de ) } - *e, err = commonchangeset.ApplyChangesets(nil, *e, nil, []commonchangeset.ChangesetApplication{ - { - // Add the DONs and candidate commit OCR instances for the chain. - Changeset: commonchangeset.WrapChangeSet(changeset.AddDonAndSetCandidateChangeset), - Config: changeset.AddDonAndSetCandidateChangesetConfig{ + *e, err = commonchangeset.ApplyChangesets(nil, *e, nil, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + // Add the DONs and candidate commit OCR instances for the chain + deployment.CreateLegacyChangeSet(changeset.AddDonAndSetCandidateChangeset), + changeset.AddDonAndSetCandidateChangesetConfig{ SetCandidateConfigBase: changeset.SetCandidateConfigBase{ HomeChainSelector: homeChainSel, FeedChainSelector: feedChainSel, @@ -191,11 +191,11 @@ func DeployCCIPAndAddLanes(ctx context.Context, lggr logger.Logger, envConfig de PluginType: types.PluginTypeCCIPCommit, }, }, - }, - { - // Add the exec OCR instances for the new chains. - Changeset: commonchangeset.WrapChangeSet(changeset.SetCandidateChangeset), - Config: changeset.SetCandidateChangesetConfig{ + ), + commonchangeset.ChangesetApplication( + // Add the exec OCR instances for the new chains + deployment.CreateLegacyChangeSet(changeset.SetCandidateChangeset), + changeset.SetCandidateChangesetConfig{ SetCandidateConfigBase: changeset.SetCandidateConfigBase{ HomeChainSelector: homeChainSel, FeedChainSelector: feedChainSel, @@ -207,11 +207,11 @@ func DeployCCIPAndAddLanes(ctx context.Context, lggr logger.Logger, envConfig de }, }, }, - }, - { + ), + commonchangeset.ChangesetApplication( // Promote everything - Changeset: commonchangeset.WrapChangeSet(changeset.PromoteCandidateChangeset), - Config: changeset.PromoteCandidateChangesetConfig{ + deployment.CreateLegacyChangeSet(changeset.PromoteCandidateChangeset), + changeset.PromoteCandidateChangesetConfig{ HomeChainSelector: homeChainSel, PluginInfo: []changeset.PromoteCandidatePluginInfo{ { @@ -224,15 +224,15 @@ func DeployCCIPAndAddLanes(ctx context.Context, lggr logger.Logger, envConfig de }, }, }, - }, - { - // Enable the OCR config on the remote chains. - Changeset: commonchangeset.WrapChangeSet(changeset.SetOCR3OffRampChangeset), - Config: changeset.SetOCR3OffRampConfig{ + ), + commonchangeset.ChangesetApplication( + // Enable the OCR config on the remote chains + deployment.CreateLegacyChangeSet(changeset.SetOCR3OffRampChangeset), + changeset.SetOCR3OffRampConfig{ HomeChainSel: homeChainSel, RemoteChainSels: chainSelectors, }, - }, + ), }) if err != nil { return DeployCCIPOutput{}, fmt.Errorf("failed to apply changesets: %w", err) @@ -243,10 +243,10 @@ func DeployCCIPAndAddLanes(ctx context.Context, lggr logger.Logger, envConfig de for dst := range e.Chains { if src != dst { stateChain1 := state.Chains[src] - newEnv, err := commonchangeset.ApplyChangesets(nil, *e, nil, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateOnRampsDestsChangeset), - Config: changeset.UpdateOnRampDestsConfig{ + newEnv, err := commonchangeset.ApplyChangesets(nil, *e, nil, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateOnRampsDestsChangeset), + changeset.UpdateOnRampDestsConfig{ UpdatesByChain: map[uint64]map[uint64]changeset.OnRampDestinationUpdate{ src: { dst: { @@ -256,10 +256,10 @@ func DeployCCIPAndAddLanes(ctx context.Context, lggr logger.Logger, envConfig de }, }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateFeeQuoterPricesChangeset), - Config: changeset.UpdateFeeQuoterPricesConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateFeeQuoterPricesChangeset), + changeset.UpdateFeeQuoterPricesConfig{ PricesByChain: map[uint64]changeset.FeeQuoterPriceUpdatePerSource{ src: { TokenPrices: map[common.Address]*big.Int{ @@ -272,20 +272,20 @@ func DeployCCIPAndAddLanes(ctx context.Context, lggr logger.Logger, envConfig de }, }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateFeeQuoterDestsChangeset), - Config: changeset.UpdateFeeQuoterDestsConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateFeeQuoterDestsChangeset), + changeset.UpdateFeeQuoterDestsConfig{ UpdatesByChain: map[uint64]map[uint64]fee_quoter.FeeQuoterDestChainConfig{ src: { dst: changeset.DefaultFeeQuoterDestChainConfig(true), }, }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateOffRampSourcesChangeset), - Config: changeset.UpdateOffRampSourcesConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateOffRampSourcesChangeset), + changeset.UpdateOffRampSourcesConfig{ UpdatesByChain: map[uint64]map[uint64]changeset.OffRampSourceUpdate{ dst: { src: { @@ -294,10 +294,10 @@ func DeployCCIPAndAddLanes(ctx context.Context, lggr logger.Logger, envConfig de }, }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateRouterRampsChangeset), - Config: changeset.UpdateRouterRampsConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateRouterRampsChangeset), + changeset.UpdateRouterRampsConfig{ UpdatesByChain: map[uint64]changeset.RouterUpdates{ src: { OffRampUpdates: map[uint64]bool{ @@ -317,7 +317,7 @@ func DeployCCIPAndAddLanes(ctx context.Context, lggr logger.Logger, envConfig de }, }, }, - }, + ), }) if err != nil { return DeployCCIPOutput{}, fmt.Errorf("failed to apply changesets: %w", err) diff --git a/deployment/keystone/changeset/accept_ownership_test.go b/deployment/keystone/changeset/accept_ownership_test.go index 4007fde4f79..0bb249bcbd1 100644 --- a/deployment/keystone/changeset/accept_ownership_test.go +++ b/deployment/keystone/changeset/accept_ownership_test.go @@ -7,6 +7,7 @@ import ( "go.uber.org/zap/zapcore" "github.com/smartcontractkit/chainlink-common/pkg/logger" + "github.com/smartcontractkit/chainlink/deployment" commonchangeset "github.com/smartcontractkit/chainlink/deployment/common/changeset" "github.com/smartcontractkit/chainlink/deployment/common/proposalutils" @@ -24,29 +25,29 @@ func TestAcceptAllOwnership(t *testing.T) { } env := memory.NewMemoryEnvironment(t, lggr, zapcore.DebugLevel, cfg) registrySel := env.AllChainSelectors()[0] - env, err := commonchangeset.ApplyChangesets(t, env, nil, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.DeployCapabilityRegistry), - Config: registrySel, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.DeployOCR3), - Config: registrySel, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.DeployForwarder), - Config: changeset.DeployForwarderRequest{}, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.DeployFeedsConsumer), - Config: &changeset.DeployFeedsConsumerRequest{ChainSelector: registrySel}, - }, - { - Changeset: commonchangeset.WrapChangeSet(commonchangeset.DeployMCMSWithTimelock), - Config: map[uint64]types.MCMSWithTimelockConfig{ + env, err := commonchangeset.ApplyChangesets(t, env, nil, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.DeployCapabilityRegistry), + registrySel, + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.DeployOCR3), + registrySel, + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.DeployForwarder), + changeset.DeployForwarderRequest{}, + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.DeployFeedsConsumer), + &changeset.DeployFeedsConsumerRequest{ChainSelector: registrySel}, + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.DeployMCMSWithTimelock), + map[uint64]types.MCMSWithTimelockConfig{ registrySel: proposalutils.SingleGroupTimelockConfig(t), }, - }, + ), }) require.NoError(t, err) addrs, err := env.ExistingAddresses.AddressesForChain(registrySel) @@ -59,14 +60,14 @@ func TestAcceptAllOwnership(t *testing.T) { Timelock: timelock.Timelock, CallProxy: timelock.CallProxy, }, - }, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.AcceptAllOwnershipsProposal), - Config: &changeset.AcceptAllOwnershipRequest{ + }, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.AcceptAllOwnershipsProposal), + &changeset.AcceptAllOwnershipRequest{ ChainSelector: registrySel, MinDelay: 0, }, - }, + ), }) require.NoError(t, err) } diff --git a/deployment/keystone/changeset/add_capabilities_test.go b/deployment/keystone/changeset/add_capabilities_test.go index a995ef2e1c6..04d5e6f8e96 100644 --- a/deployment/keystone/changeset/add_capabilities_test.go +++ b/deployment/keystone/changeset/add_capabilities_test.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/smartcontractkit/chainlink/deployment" commonchangeset "github.com/smartcontractkit/chainlink/deployment/common/changeset" "github.com/smartcontractkit/chainlink/deployment/common/proposalutils" "github.com/smartcontractkit/chainlink/deployment/keystone/changeset" @@ -73,11 +74,8 @@ func TestAddCapabilities(t *testing.T) { CallProxy: contracts.CallProxy, }, } - _, err = commonchangeset.ApplyChangesets(t, te.Env, timelockContracts, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.AddCapabilities), - Config: req, - }, + _, err = commonchangeset.ApplyChangesets(t, te.Env, timelockContracts, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication(deployment.CreateLegacyChangeSet(changeset.AddCapabilities), req), }) require.NoError(t, err) diff --git a/deployment/keystone/changeset/append_node_capabilities_test.go b/deployment/keystone/changeset/append_node_capabilities_test.go index 3cf6081e966..d7feff93edc 100644 --- a/deployment/keystone/changeset/append_node_capabilities_test.go +++ b/deployment/keystone/changeset/append_node_capabilities_test.go @@ -7,6 +7,7 @@ import ( "github.com/stretchr/testify/require" "golang.org/x/exp/maps" + "github.com/smartcontractkit/chainlink/deployment" commonchangeset "github.com/smartcontractkit/chainlink/deployment/common/changeset" "github.com/smartcontractkit/chainlink/deployment/common/proposalutils" "github.com/smartcontractkit/chainlink/deployment/keystone/changeset" @@ -96,11 +97,11 @@ func TestAppendNodeCapabilities(t *testing.T) { }, } - _, err = commonchangeset.ApplyChangesets(t, te.Env, timelockContracts, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.AppendNodeCapabilities), - Config: &cfg, - }, + _, err = commonchangeset.ApplyChangesets(t, te.Env, timelockContracts, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.AppendNodeCapabilities), + &cfg, + ), }) require.NoError(t, err) validateCapabilityAppends(t, te, newCapabilities) diff --git a/deployment/keystone/changeset/deploy_forwarder_test.go b/deployment/keystone/changeset/deploy_forwarder_test.go index 40ef0c02aeb..8f9b002c4ef 100644 --- a/deployment/keystone/changeset/deploy_forwarder_test.go +++ b/deployment/keystone/changeset/deploy_forwarder_test.go @@ -126,11 +126,11 @@ func TestConfigureForwarders(t *testing.T) { CallProxy: contractSet.CallProxy, } } - _, err = commonchangeset.ApplyChangesets(t, te.Env, timelockContracts, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.ConfigureForwardContracts), - Config: cfg, - }, + _, err = commonchangeset.ApplyChangesets(t, te.Env, timelockContracts, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.ConfigureForwardContracts), + cfg, + ), }) require.NoError(t, err) }) diff --git a/deployment/keystone/changeset/deploy_ocr3_test.go b/deployment/keystone/changeset/deploy_ocr3_test.go index 5ede6c5e6c7..feb227e98b5 100644 --- a/deployment/keystone/changeset/deploy_ocr3_test.go +++ b/deployment/keystone/changeset/deploy_ocr3_test.go @@ -11,6 +11,7 @@ import ( "go.uber.org/zap/zapcore" "github.com/smartcontractkit/chainlink-common/pkg/logger" + "github.com/smartcontractkit/chainlink/deployment" commonchangeset "github.com/smartcontractkit/chainlink/deployment/common/changeset" "github.com/smartcontractkit/chainlink/deployment/common/proposalutils" @@ -285,11 +286,11 @@ func TestConfigureOCR3(t *testing.T) { // now apply the changeset such that the proposal is signed and execed w2 := &bytes.Buffer{} cfg.WriteGeneratedConfig = w2 - _, err = commonchangeset.ApplyChangesets(t, te.Env, timelockContracts, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.ConfigureOCR3Contract), - Config: cfg, - }, + _, err = commonchangeset.ApplyChangesets(t, te.Env, timelockContracts, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.ConfigureOCR3Contract), + cfg, + ), }) require.NoError(t, err) }) diff --git a/deployment/keystone/changeset/test/helpers.go b/deployment/keystone/changeset/test/helpers.go index a1e1b8b8bf8..69568f120c8 100644 --- a/deployment/keystone/changeset/test/helpers.go +++ b/deployment/keystone/changeset/test/helpers.go @@ -116,23 +116,23 @@ func SetupTestEnv(t *testing.T, c TestConfig) TestEnv { Chains: chains, ExistingAddresses: deployment.NewMemoryAddressBook(), } - e, err := commonchangeset.ApplyChangesets(t, e, nil, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(kschangeset.DeployCapabilityRegistry), - Config: registryChainSel, - }, - { - Changeset: commonchangeset.WrapChangeSet(kschangeset.DeployOCR3), - Config: registryChainSel, - }, - { - Changeset: commonchangeset.WrapChangeSet(kschangeset.DeployForwarder), - Config: kschangeset.DeployForwarderRequest{}, - }, - { - Changeset: commonchangeset.WrapChangeSet(workflowregistry.Deploy), - Config: registryChainSel, - }, + e, err := commonchangeset.ApplyChangesets(t, e, nil, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(kschangeset.DeployCapabilityRegistry), + registryChainSel, + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(kschangeset.DeployOCR3), + registryChainSel, + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(kschangeset.DeployForwarder), + kschangeset.DeployForwarderRequest{}, + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(workflowregistry.Deploy), + registryChainSel, + ), }) require.NoError(t, err) require.NotNil(t, e) @@ -260,11 +260,11 @@ func SetupTestEnv(t *testing.T, c TestConfig) TestEnv { t.Logf("Enabling MCMS on chain %d", sel) timelockCfgs[sel] = proposalutils.SingleGroupTimelockConfig(t) } - env, err = commonchangeset.ApplyChangesets(t, env, nil, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(commonchangeset.DeployMCMSWithTimelock), - Config: timelockCfgs, - }, + env, err = commonchangeset.ApplyChangesets(t, env, nil, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.DeployMCMSWithTimelock), + timelockCfgs, + ), }) require.NoError(t, err) // extract the MCMS address @@ -279,14 +279,14 @@ func SetupTestEnv(t *testing.T, c TestConfig) TestEnv { require.NoError(t, mcms.Validate()) // transfer ownership of all contracts to the MCMS - env, err = commonchangeset.ApplyChangesets(t, env, map[uint64]*proposalutils.TimelockExecutionContracts{sel: {Timelock: mcms.Timelock, CallProxy: mcms.CallProxy}}, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(kschangeset.AcceptAllOwnershipsProposal), - Config: &kschangeset.AcceptAllOwnershipRequest{ + env, err = commonchangeset.ApplyChangesets(t, env, map[uint64]*proposalutils.TimelockExecutionContracts{sel: {Timelock: mcms.Timelock, CallProxy: mcms.CallProxy}}, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(kschangeset.AcceptAllOwnershipsProposal), + &kschangeset.AcceptAllOwnershipRequest{ ChainSelector: sel, MinDelay: 0, }, - }, + ), }) require.NoError(t, err) } diff --git a/deployment/keystone/changeset/update_don_test.go b/deployment/keystone/changeset/update_don_test.go index 501afb77e21..ae6ce75618f 100644 --- a/deployment/keystone/changeset/update_don_test.go +++ b/deployment/keystone/changeset/update_don_test.go @@ -7,6 +7,7 @@ import ( "github.com/stretchr/testify/require" "google.golang.org/protobuf/proto" + "github.com/smartcontractkit/chainlink/deployment" commonchangeset "github.com/smartcontractkit/chainlink/deployment/common/changeset" "github.com/smartcontractkit/chainlink/deployment/common/proposalutils" "github.com/smartcontractkit/chainlink/deployment/keystone/changeset" @@ -129,11 +130,11 @@ func TestUpdateDon(t *testing.T) { CallProxy: contracts.CallProxy, }, } - _, err = commonchangeset.ApplyChangesets(t, te.Env, timelockContracts, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateDon), - Config: &cfg, - }, + _, err = commonchangeset.ApplyChangesets(t, te.Env, timelockContracts, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateDon), + &cfg, + ), }) require.NoError(t, err) assertDonContainsCapabilities(t, te.ContractSets()[te.RegistrySelector].CapabilitiesRegistry, caps, p2pIDs) diff --git a/deployment/keystone/changeset/update_node_capabilities_test.go b/deployment/keystone/changeset/update_node_capabilities_test.go index 8962dfc389d..5aaf3f78f50 100644 --- a/deployment/keystone/changeset/update_node_capabilities_test.go +++ b/deployment/keystone/changeset/update_node_capabilities_test.go @@ -7,6 +7,7 @@ import ( "github.com/stretchr/testify/require" "golang.org/x/exp/maps" + "github.com/smartcontractkit/chainlink/deployment" commonchangeset "github.com/smartcontractkit/chainlink/deployment/common/changeset" "github.com/smartcontractkit/chainlink/deployment/common/proposalutils" "github.com/smartcontractkit/chainlink/deployment/keystone/changeset" @@ -126,11 +127,11 @@ func TestUpdateNodeCapabilities(t *testing.T) { }, } - _, err = commonchangeset.ApplyChangesets(t, te.Env, timelockContracts, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateNodeCapabilities), - Config: &cfg, - }, + _, err = commonchangeset.ApplyChangesets(t, te.Env, timelockContracts, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateNodeCapabilities), + &cfg, + ), }) require.NoError(t, err) validateCapabilityUpdates(t, te, capabiltiesToSet) diff --git a/deployment/keystone/changeset/update_nodes_test.go b/deployment/keystone/changeset/update_nodes_test.go index 5709482ddb3..c821d727619 100644 --- a/deployment/keystone/changeset/update_nodes_test.go +++ b/deployment/keystone/changeset/update_nodes_test.go @@ -8,6 +8,7 @@ import ( "github.com/stretchr/testify/require" "golang.org/x/exp/maps" + "github.com/smartcontractkit/chainlink/deployment" commonchangeset "github.com/smartcontractkit/chainlink/deployment/common/changeset" "github.com/smartcontractkit/chainlink/deployment/common/proposalutils" "github.com/smartcontractkit/chainlink/deployment/keystone/changeset" @@ -97,15 +98,15 @@ func TestUpdateNodes(t *testing.T) { CallProxy: contracts.CallProxy, }, } - _, err = commonchangeset.ApplyChangesets(t, te.Env, timelockContracts, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateNodes), - Config: &changeset.UpdateNodesRequest{ + _, err = commonchangeset.ApplyChangesets(t, te.Env, timelockContracts, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateNodes), + &changeset.UpdateNodesRequest{ RegistryChainSel: te.RegistrySelector, P2pToUpdates: updates, MCMSConfig: &changeset.MCMSConfig{MinDuration: 0}, }, - }, + ), }) require.NoError(t, err) diff --git a/deployment/keystone/changeset/workflowregistry/update_allowed_dons_test.go b/deployment/keystone/changeset/workflowregistry/update_allowed_dons_test.go index aa869ce1517..75bf5530388 100644 --- a/deployment/keystone/changeset/workflowregistry/update_allowed_dons_test.go +++ b/deployment/keystone/changeset/workflowregistry/update_allowed_dons_test.go @@ -100,11 +100,11 @@ func Test_UpdateAllowedDons_WithMCMS(t *testing.T) { }, } - _, err = commonchangeset.ApplyChangesets(t, te.Env, timelockContracts, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(workflowregistry.UpdateAllowedDons), - Config: req, - }, + _, err = commonchangeset.ApplyChangesets(t, te.Env, timelockContracts, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(workflowregistry.UpdateAllowedDons), + req, + ), }) require.NoError(t, err) } diff --git a/deployment/keystone/changeset/workflowregistry/update_authorized_addresses_test.go b/deployment/keystone/changeset/workflowregistry/update_authorized_addresses_test.go index 20dbf9895d4..e640b040b16 100644 --- a/deployment/keystone/changeset/workflowregistry/update_authorized_addresses_test.go +++ b/deployment/keystone/changeset/workflowregistry/update_authorized_addresses_test.go @@ -103,11 +103,11 @@ func Test_UpdateAuthorizedAddresses_WithMCMS(t *testing.T) { }, } - _, err = commonchangeset.ApplyChangesets(t, te.Env, timelockContracts, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(workflowregistry.UpdateAuthorizedAddresses), - Config: req, - }, + _, err = commonchangeset.ApplyChangesets(t, te.Env, timelockContracts, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(workflowregistry.UpdateAuthorizedAddresses), + req, + ), }) require.NoError(t, err) } diff --git a/integration-tests/smoke/ccip/ccip_add_chain_test.go b/integration-tests/smoke/ccip/ccip_add_chain_test.go index 4b634543462..bc4302b9206 100644 --- a/integration-tests/smoke/ccip/ccip_add_chain_test.go +++ b/integration-tests/smoke/ccip/ccip_add_chain_test.go @@ -10,6 +10,7 @@ import ( "github.com/smartcontractkit/chainlink-common/pkg/utils/tests" "github.com/smartcontractkit/chainlink-testing-framework/lib/utils/testcontext" + "github.com/smartcontractkit/chainlink/deployment" ccipcs "github.com/smartcontractkit/chainlink/deployment/ccip/changeset" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/testhelpers" @@ -432,22 +433,22 @@ func setupInboundWiring( } var err error - e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, e.TimelockContracts(t), []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(ccipcs.UpdateOffRampSourcesChangeset), - Config: ccipcs.UpdateOffRampSourcesConfig{ + e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, e.TimelockContracts(t), []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(ccipcs.UpdateOffRampSourcesChangeset), + ccipcs.UpdateOffRampSourcesConfig{ UpdatesByChain: offRampSourceUpdates(t, newChains, sources, testRouterEnabled), MCMS: mcmsConfig, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(ccipcs.UpdateRouterRampsChangeset), - Config: ccipcs.UpdateRouterRampsConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(ccipcs.UpdateRouterRampsChangeset), + ccipcs.UpdateRouterRampsConfig{ TestRouter: testRouterEnabled, UpdatesByChain: routerOffRampUpdates(t, newChains, sources), MCMS: mcmsConfig, }, - }, + ), }) require.NoError(t, err) @@ -473,36 +474,36 @@ func setupOutboundWiring( } var err error - e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, e.TimelockContracts(t), []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(ccipcs.UpdateOnRampsDestsChangeset), - Config: ccipcs.UpdateOnRampDestsConfig{ + e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, e.TimelockContracts(t), []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(ccipcs.UpdateOnRampsDestsChangeset), + ccipcs.UpdateOnRampDestsConfig{ UpdatesByChain: onRampDestUpdates(t, newChains, sources, testRouterEnabled), MCMS: mcmsConfig, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(ccipcs.UpdateFeeQuoterPricesChangeset), - Config: ccipcs.UpdateFeeQuoterPricesConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(ccipcs.UpdateFeeQuoterPricesChangeset), + ccipcs.UpdateFeeQuoterPricesConfig{ PricesByChain: feeQuoterPricesByChain(t, newChains, sources), MCMS: mcmsConfig, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(ccipcs.UpdateFeeQuoterDestsChangeset), - Config: ccipcs.UpdateFeeQuoterDestsConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(ccipcs.UpdateFeeQuoterDestsChangeset), + ccipcs.UpdateFeeQuoterDestsConfig{ UpdatesByChain: feeQuoterDestUpdates(t, newChains, sources), MCMS: mcmsConfig, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(ccipcs.UpdateRouterRampsChangeset), - Config: ccipcs.UpdateRouterRampsConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(ccipcs.UpdateRouterRampsChangeset), + ccipcs.UpdateRouterRampsConfig{ TestRouter: testRouterEnabled, UpdatesByChain: routerOnRampUpdates(t, newChains, sources), MCMS: mcmsConfig, }, - }, + ), }) require.NoError(t, err) @@ -517,13 +518,13 @@ func setupChain(t *testing.T, e testhelpers.DeployedEnv, tEnv testhelpers.TestEn // Need to update what the RMNProxy is pointing to, otherwise plugin will not work. var err error - e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, e.TimelockContracts(t), []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(ccipcs.SetRMNRemoteOnRMNProxyChangeset), - Config: ccipcs.SetRMNRemoteOnRMNProxyConfig{ + e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, e.TimelockContracts(t), []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(ccipcs.SetRMNRemoteOnRMNProxyChangeset), + ccipcs.SetRMNRemoteOnRMNProxyConfig{ ChainSelectors: chains, }, - }, + ), }) require.NoError(t, err) @@ -757,7 +758,7 @@ func transferToMCMSAndRenounceTimelockDeployer( state ccipcs.CCIPOnChainState, onlyChainContracts bool, ) { - apps := make([]commonchangeset.ChangesetApplication, 0, len(chains)+1) + apps := make([]commonchangeset.ConfiguredChangeSet, 0, len(chains)+1) cfg := testhelpers.GenTestTransferOwnershipConfig(e, chains, state) if onlyChainContracts { // filter out the home chain contracts from e.HomeChainSel @@ -774,17 +775,17 @@ func transferToMCMSAndRenounceTimelockDeployer( } cfg.ContractsByChain[e.HomeChainSel] = chainContracts } - apps = append(apps, commonchangeset.ChangesetApplication{ - Changeset: commonchangeset.WrapChangeSet(commonchangeset.TransferToMCMSWithTimelock), - Config: cfg, - }) + apps = append(apps, commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.TransferToMCMSWithTimelock), + cfg, + )) for _, chain := range chains { - apps = append(apps, commonchangeset.ChangesetApplication{ - Changeset: commonchangeset.WrapChangeSet(commonchangeset.RenounceTimelockDeployer), - Config: commonchangeset.RenounceTimelockDeployerConfig{ + apps = append(apps, commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.RenounceTimelockDeployer), + commonchangeset.RenounceTimelockDeployerConfig{ ChainSel: chain, }, - }) + )) } var err error e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, e.TimelockContracts(t), apps) diff --git a/integration-tests/smoke/ccip/ccip_cs_rmn_curse_uncurse_test.go b/integration-tests/smoke/ccip/ccip_cs_rmn_curse_uncurse_test.go index 2fb9333a14a..6999ea85f13 100644 --- a/integration-tests/smoke/ccip/ccip_cs_rmn_curse_uncurse_test.go +++ b/integration-tests/smoke/ccip/ccip_cs_rmn_curse_uncurse_test.go @@ -6,6 +6,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/stretchr/testify/require" + "github.com/smartcontractkit/chainlink/deployment" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/testhelpers" commonchangeset "github.com/smartcontractkit/chainlink/deployment/common/changeset" @@ -187,14 +188,14 @@ func transferRMNContractToMCMS(t *testing.T, e *testhelpers.DeployedEnv, state c contractsByChain[e.HomeChainSel] = append(contractsByChain[e.HomeChainSel], state.Chains[e.HomeChainSel].RMNHome.Address()) // This is required because RMN Contracts is initially owned by the deployer - _, err := commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(commonchangeset.TransferToMCMSWithTimelock), - Config: commonchangeset.TransferToMCMSWithTimelockConfig{ + _, err := commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.TransferToMCMSWithTimelock), + commonchangeset.TransferToMCMSWithTimelockConfig{ ContractsByChain: contractsByChain, MinDelay: 0, }, - }, + ), }) require.NoError(t, err) } @@ -221,21 +222,21 @@ func runRmnUncurseMCMSTest(t *testing.T, tc CurseTestCase) { transferRMNContractToMCMS(t, &e, state, timelocksPerChain) - _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.RMNCurseChangeset), - Config: config, - }, + _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.RMNCurseChangeset), + config, + ), }) require.NoError(t, err) verifyTestCaseAssertions(t, &e, tc, mapIDToSelector) - _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.RMNUncurseChangeset), - Config: config, - }, + _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.RMNUncurseChangeset), + config, + ), }) require.NoError(t, err) @@ -351,11 +352,11 @@ func runRmnCurseMCMSTest(t *testing.T, tc CurseTestCase) { transferRMNContractToMCMS(t, &e, state, timelocksPerChain) - _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.RMNCurseChangeset), - Config: config, - }, + _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.RMNCurseChangeset), + config, + ), }) require.NoError(t, err) diff --git a/integration-tests/smoke/ccip/ccip_cs_update_rmn_config_test.go b/integration-tests/smoke/ccip/ccip_cs_update_rmn_config_test.go index c3edf090e88..5d50803ca2c 100644 --- a/integration-tests/smoke/ccip/ccip_cs_update_rmn_config_test.go +++ b/integration-tests/smoke/ccip/ccip_cs_update_rmn_config_test.go @@ -1,9 +1,8 @@ package ccip import ( - "testing" - "math/big" + "testing" "github.com/ethereum/go-ethereum/common" "github.com/stretchr/testify/require" @@ -193,14 +192,14 @@ func updateRMNConfig(t *testing.T, tc updateRMNConfigTestCase) { timelocksPerChain := changeset.BuildTimelockPerChain(e.Env, state) if tc.useMCMS { // This is required because RMNHome is initially owned by the deployer - _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(commonchangeset.TransferToMCMSWithTimelock), - Config: commonchangeset.TransferToMCMSWithTimelockConfig{ + _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.TransferToMCMSWithTimelock), + commonchangeset.TransferToMCMSWithTimelockConfig{ ContractsByChain: contractsByChain, MinDelay: 0, }, - }, + ), }) require.NoError(t, err) } @@ -238,11 +237,11 @@ func updateRMNConfig(t *testing.T, tc updateRMNConfigTestCase) { MCMSConfig: mcmsConfig, } - _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.SetRMNHomeCandidateConfigChangeset), - Config: setRMNHomeCandidateConfig, - }, + _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.SetRMNHomeCandidateConfigChangeset), + setRMNHomeCandidateConfig, + ), }) require.NoError(t, err) @@ -264,11 +263,11 @@ func updateRMNConfig(t *testing.T, tc updateRMNConfigTestCase) { MCMSConfig: mcmsConfig, } - _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.PromoteRMNHomeCandidateConfigChangeset), - Config: promoteConfig, - }, + _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.PromoteRMNHomeCandidateConfigChangeset), + promoteConfig, + ), }) require.NoError(t, err) @@ -298,11 +297,11 @@ func updateRMNConfig(t *testing.T, tc updateRMNConfigTestCase) { MCMSConfig: mcmsConfig, } - _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.SetRMNRemoteConfigChangeset), - Config: setRemoteConfig, - }, + _, err = commonchangeset.ApplyChangesets(t, e.Env, timelocksPerChain, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.SetRMNRemoteConfigChangeset), + setRemoteConfig, + ), }) require.NoError(t, err) @@ -346,21 +345,21 @@ func TestSetRMNRemoteOnRMNProxy(t *testing.T) { } // Need to deploy prerequisites first so that we can form the USDC config // no proposals to be made, timelock can be passed as nil here - e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, nil, []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(commonchangeset.DeployLinkToken), - Config: allChains, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.DeployPrerequisitesChangeset), - Config: changeset.DeployPrerequisiteConfig{ + e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, nil, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.DeployLinkToken), + allChains, + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.DeployPrerequisitesChangeset), + changeset.DeployPrerequisiteConfig{ Configs: prereqCfgs, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(commonchangeset.DeployMCMSWithTimelock), - Config: mcmsCfg, - }, + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.DeployMCMSWithTimelock), + mcmsCfg, + ), }) require.NoError(t, err) contractsByChain := make(map[uint64][]common.Address) @@ -385,19 +384,18 @@ func TestSetRMNRemoteOnRMNProxy(t *testing.T) { } envNodes, err := deployment.NodeInfo(e.Env.NodeIDs, e.Env.Offchain) require.NoError(t, err) - e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, timelockContractsPerChain, []commonchangeset.ChangesetApplication{ + e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, timelockContractsPerChain, []commonchangeset.ConfiguredChangeSet{ // transfer ownership of RMNProxy to timelock - { - Changeset: commonchangeset.WrapChangeSet(commonchangeset.TransferToMCMSWithTimelock), - Config: commonchangeset.TransferToMCMSWithTimelockConfig{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.TransferToMCMSWithTimelock), + commonchangeset.TransferToMCMSWithTimelockConfig{ ContractsByChain: contractsByChain, MinDelay: 0, }, - }, - - { - Changeset: commonchangeset.WrapChangeSet(changeset.DeployHomeChainChangeset), - Config: changeset.DeployHomeChainConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.DeployHomeChainChangeset), + changeset.DeployHomeChainConfig{ HomeChainSel: e.HomeChainSel, RMNDynamicConfig: testhelpers.NewTestRMNDynamicConfig(), RMNStaticConfig: testhelpers.NewTestRMNStaticConfig(), @@ -406,23 +404,23 @@ func TestSetRMNRemoteOnRMNProxy(t *testing.T) { "NodeOperator": envNodes.NonBootstraps().PeerIDs(), }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.DeployChainContractsChangeset), - Config: changeset.DeployChainContractsConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.DeployChainContractsChangeset), + changeset.DeployChainContractsConfig{ HomeChainSelector: e.HomeChainSel, ContractParamsPerChain: allContractParams, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.SetRMNRemoteOnRMNProxyChangeset), - Config: changeset.SetRMNRemoteOnRMNProxyConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.SetRMNRemoteOnRMNProxyChangeset), + changeset.SetRMNRemoteOnRMNProxyConfig{ ChainSelectors: allChains, MCMSConfig: &changeset.MCMSConfig{ MinDelay: 0, }, }, - }, + ), }) require.NoError(t, err) state, err = changeset.LoadOnchainState(e.Env) diff --git a/integration-tests/smoke/ccip/ccip_fee_boosting_test.go b/integration-tests/smoke/ccip/ccip_fee_boosting_test.go index 6f4deea8b23..cf3683f4664 100644 --- a/integration-tests/smoke/ccip/ccip_fee_boosting_test.go +++ b/integration-tests/smoke/ccip/ccip_fee_boosting_test.go @@ -96,10 +96,10 @@ func Test_CCIPFeeBoosting(t *testing.T) { feeQuoterCfg) // Update token prices in destination chain FeeQuoter - e.Env, err = commoncs.ApplyChangesets(t, e.Env, e.TimelockContracts(t), []commoncs.ChangesetApplication{ - { - Changeset: commoncs.WrapChangeSet(changeset.UpdateFeeQuoterPricesChangeset), - Config: changeset.UpdateFeeQuoterPricesConfig{ + e.Env, err = commoncs.ApplyChangesets(t, e.Env, e.TimelockContracts(t), []commoncs.ConfiguredChangeSet{ + commoncs.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateFeeQuoterPricesChangeset), + changeset.UpdateFeeQuoterPricesConfig{ PricesByChain: map[uint64]changeset.FeeQuoterPriceUpdatePerSource{ destChain: { TokenPrices: map[common.Address]*big.Int{ @@ -109,7 +109,7 @@ func Test_CCIPFeeBoosting(t *testing.T) { }, }, }, - }, + ), }) require.NoError(t, err) @@ -137,10 +137,10 @@ func Test_CCIPFeeBoosting(t *testing.T) { DestChainSelector: destChain, }] = []uint64{msgSentEvent.SequenceNumber} - e.Env, err = commoncs.ApplyChangesets(t, e.Env, e.TimelockContracts(t), []commoncs.ChangesetApplication{ - { - Changeset: commoncs.WrapChangeSet(changeset.UpdateFeeQuoterPricesChangeset), - Config: changeset.UpdateFeeQuoterPricesConfig{ + e.Env, err = commoncs.ApplyChangesets(t, e.Env, e.TimelockContracts(t), []commoncs.ConfiguredChangeSet{ + commoncs.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateFeeQuoterPricesChangeset), + changeset.UpdateFeeQuoterPricesConfig{ PricesByChain: map[uint64]changeset.FeeQuoterPriceUpdatePerSource{ sourceChain: { GasPrices: map[uint64]*big.Int{ @@ -149,7 +149,7 @@ func Test_CCIPFeeBoosting(t *testing.T) { }, }, }, - }, + ), }) require.NoError(t, err) diff --git a/integration-tests/smoke/ccip/ccip_migration_to_v_1_6_test.go b/integration-tests/smoke/ccip/ccip_migration_to_v_1_6_test.go index bab7717f3b1..24370b16db1 100644 --- a/integration-tests/smoke/ccip/ccip_migration_to_v_1_6_test.go +++ b/integration-tests/smoke/ccip/ccip_migration_to_v_1_6_test.go @@ -11,6 +11,7 @@ import ( chainselectors "github.com/smartcontractkit/chain-selectors" "github.com/smartcontractkit/chainlink-testing-framework/lib/utils/testcontext" + "github.com/smartcontractkit/chainlink/deployment" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/testhelpers" @@ -71,10 +72,10 @@ func TestMigrateFromV1_5ToV1_6(t *testing.T) { e.Env = v1_5testhelpers.AddLanes(t, e.Env, state, pairs) // permabless the commit stores - e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, e.TimelockContracts(t), []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(v1_5.PermaBlessCommitStoreChangeset), - Config: v1_5.PermaBlessCommitStoreConfig{ + e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, e.TimelockContracts(t), []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(v1_5.PermaBlessCommitStoreChangeset), + v1_5.PermaBlessCommitStoreConfig{ Configs: map[uint64]v1_5.PermaBlessCommitStoreConfigPerDest{ dest: { Sources: []v1_5.PermaBlessConfigPerSourceChain{ @@ -90,7 +91,7 @@ func TestMigrateFromV1_5ToV1_6(t *testing.T) { }, }, }, - }, + ), }) require.NoError(t, err) // reload state after adding lanes @@ -142,14 +143,14 @@ func TestMigrateFromV1_5ToV1_6(t *testing.T) { } } - e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, e.TimelockContracts(t), []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(commonchangeset.TransferToMCMSWithTimelock), - Config: commonchangeset.TransferToMCMSWithTimelockConfig{ + e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, e.TimelockContracts(t), []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(commonchangeset.TransferToMCMSWithTimelock), + commonchangeset.TransferToMCMSWithTimelockConfig{ ContractsByChain: contractsByChain, MinDelay: 0, }, - }, + ), }) require.NoError(t, err) // add 1.6 contracts to the environment and send 1.6 jobs @@ -158,20 +159,20 @@ func TestMigrateFromV1_5ToV1_6(t *testing.T) { e = testhelpers.AddCCIPContractsToEnvironment(t, e.Env.AllChainSelectors(), tEnv, false) // Set RMNProxy to point to RMNRemote. // nonce manager should point to 1.5 ramps - e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, e.TimelockContracts(t), []commonchangeset.ChangesetApplication{ - { + e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, e.TimelockContracts(t), []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( // as we have already transferred ownership for RMNProxy to MCMS, it needs to be done via MCMS proposal - Changeset: commonchangeset.WrapChangeSet(changeset.SetRMNRemoteOnRMNProxyChangeset), - Config: changeset.SetRMNRemoteOnRMNProxyConfig{ + deployment.CreateLegacyChangeSet(changeset.SetRMNRemoteOnRMNProxyChangeset), + changeset.SetRMNRemoteOnRMNProxyConfig{ ChainSelectors: e.Env.AllChainSelectors(), MCMSConfig: &changeset.MCMSConfig{ MinDelay: 0, }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateNonceManagersChangeset), - Config: changeset.UpdateNonceManagerConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateNonceManagersChangeset), + changeset.UpdateNonceManagerConfig{ // we only have lanes between src1 --> dest UpdatesByChain: map[uint64]changeset.NonceManagerUpdate{ src1: { @@ -204,7 +205,7 @@ func TestMigrateFromV1_5ToV1_6(t *testing.T) { }, }, }, - }, + ), }) require.NoError(t, err) state, err = changeset.LoadOnchainState(e.Env) @@ -274,10 +275,10 @@ func TestMigrateFromV1_5ToV1_6(t *testing.T) { require.NotNil(t, sentEventBeforeSwitch) // now that the 1.6 lane is working, we can enable the real router - e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, e.TimelockContracts(t), []commonchangeset.ChangesetApplication{ - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateOnRampsDestsChangeset), - Config: changeset.UpdateOnRampDestsConfig{ + e.Env, err = commonchangeset.ApplyChangesets(t, e.Env, e.TimelockContracts(t), []commonchangeset.ConfiguredChangeSet{ + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateOnRampsDestsChangeset), + changeset.UpdateOnRampDestsConfig{ UpdatesByChain: map[uint64]map[uint64]changeset.OnRampDestinationUpdate{ src1: { dest: { @@ -288,10 +289,10 @@ func TestMigrateFromV1_5ToV1_6(t *testing.T) { }, }, }, - }, - { - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateOffRampSourcesChangeset), - Config: changeset.UpdateOffRampSourcesConfig{ + ), + commonchangeset.ChangesetApplication( + deployment.CreateLegacyChangeSet(changeset.UpdateOffRampSourcesChangeset), + changeset.UpdateOffRampSourcesConfig{ UpdatesByChain: map[uint64]map[uint64]changeset.OffRampSourceUpdate{ dest: { src1: { @@ -301,11 +302,11 @@ func TestMigrateFromV1_5ToV1_6(t *testing.T) { }, }, }, - }, - { + ), + commonchangeset.ChangesetApplication( // this needs to be MCMS proposal as the router contract is owned by MCMS - Changeset: commonchangeset.WrapChangeSet(changeset.UpdateRouterRampsChangeset), - Config: changeset.UpdateRouterRampsConfig{ + deployment.CreateLegacyChangeSet(changeset.UpdateRouterRampsChangeset), + changeset.UpdateRouterRampsConfig{ TestRouter: false, MCMS: &changeset.MCMSConfig{ MinDelay: 0, @@ -325,7 +326,7 @@ func TestMigrateFromV1_5ToV1_6(t *testing.T) { }, }, }, - }, + ), }) require.NoError(t, err)