From b9d60aafb7cf04e17e4b7a8a244f2fb72d54ad52 Mon Sep 17 00:00:00 2001 From: James Kong Date: Thu, 21 May 2026 18:10:05 +0800 Subject: [PATCH] fix!: move contract version to internal package BREAKING CHANGE: Moves version constants out of the public API and into internal. This also does a slight naming refactor for conciseness of code. --- .gitignore | 2 +- internal/semvers/version.go | 14 ++++++ .../deploy_mcms_with_timelock_test.go | 8 +-- legacy/mcms/changesets/fund_mcm_pdas_test.go | 12 ++--- .../transfer_to_mcms_with_timelock_test.go | 6 +-- legacy/pkg/family/aptos/state.go | 6 +-- legacy/pkg/family/aptos/state_test.go | 12 ++--- .../pkg/family/evm/changesets/deploy_mcms.go | 4 +- legacy/pkg/family/evm/state.go | 34 ++++++------- legacy/pkg/family/evm/state_test.go | 50 +++++++++---------- .../solana/changesets/access_controller.go | 12 ++--- .../family/solana/changesets/deploy_mcm.go | 6 +-- .../solana/changesets/deploy_timelock.go | 6 +-- .../solana/changesets/transfer_ownership.go | 4 +- legacy/pkg/family/solana/state.go | 24 ++++----- legacy/pkg/family/solana/state_test.go | 8 +-- .../pkg/family/solana/testutils/datastore.go | 8 +-- link/changesets/deploy_link_token.go | 6 +-- link/changesets/deploy_link_token_test.go | 6 +-- pkg/cldfutil/version.go | 21 -------- pkg/contract/link/view/v10/link_token.go | 3 +- .../link/view/v10/static_link_token.go | 3 +- pkg/family/evm/operations/callproxy_deploy.go | 4 +- pkg/family/evm/operations/mcm_deploy.go | 8 +-- pkg/family/evm/operations/timelock_deploy.go | 4 +- pkg/family/solana/operations/operation.go | 26 +++++----- pkg/family/solana/sequences/sequence.go | 24 ++++----- 27 files changed, 157 insertions(+), 164 deletions(-) create mode 100644 internal/semvers/version.go delete mode 100644 pkg/cldfutil/version.go diff --git a/.gitignore b/.gitignore index d3d87ba..ed20272 100644 --- a/.gitignore +++ b/.gitignore @@ -29,4 +29,4 @@ go.work.sum # Editor/IDE .idea/ -# .vscode/ +.vscode/ diff --git a/internal/semvers/version.go b/internal/semvers/version.go new file mode 100644 index 0000000..40dca4c --- /dev/null +++ b/internal/semvers/version.go @@ -0,0 +1,14 @@ +// Package semvers defines the canonical semver constants used as version +// labels throughout this repository (e.g. for contracts, operations, and +// sequences). +package semvers + +import ( + "github.com/Masterminds/semver/v3" +) + +var ( + V1_0_0 = *semver.MustParse("1.0.0") + V1_5_0 = *semver.MustParse("1.5.0") + V1_6_0 = *semver.MustParse("1.6.0") +) diff --git a/legacy/mcms/changesets/deploy_mcms_with_timelock_test.go b/legacy/mcms/changesets/deploy_mcms_with_timelock_test.go index 0e4dcfd..1601386 100644 --- a/legacy/mcms/changesets/deploy_mcms_with_timelock_test.go +++ b/legacy/mcms/changesets/deploy_mcms_with_timelock_test.go @@ -19,11 +19,11 @@ import ( "github.com/smartcontractkit/quarantine" "github.com/stretchr/testify/require" + "github.com/smartcontractkit/cld-changesets/internal/semvers" mcmschangesets "github.com/smartcontractkit/cld-changesets/legacy/mcms/changesets" evmstate "github.com/smartcontractkit/cld-changesets/legacy/pkg/family/evm" solana2 "github.com/smartcontractkit/cld-changesets/legacy/pkg/family/solana" soltestutils "github.com/smartcontractkit/cld-changesets/legacy/pkg/family/solana/testutils" - "github.com/smartcontractkit/cld-changesets/pkg/cldfutil" familysolana "github.com/smartcontractkit/cld-changesets/pkg/family/solana" timelockBindings "github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings/v0_1_1/timelock" @@ -69,7 +69,7 @@ func TestGrantRoleInTimeLock(t *testing.T) { existingProposer := mcmsState[selector].ProposerMcm ab := cldf.NewMemoryAddressBook() require.NoError(t, ab.Save(selector, existingProposer.Address().String(), - cldf.NewTypeAndVersion(mcmscontracts.ProposerManyChainMultisig, cldfutil.Version1_0_0))) + cldf.NewTypeAndVersion(mcmscontracts.ProposerManyChainMultisig, semvers.V1_0_0))) require.NoError(t, updatedEnv.ExistingAddresses.Remove(ab)) //nolint:staticcheck // test removes legacy AddressBook entry while verifying DataStore migration behavior // remove from DataStore since deployment now uses DataStore @@ -143,7 +143,7 @@ func TestDeployMCMSWithTimelockV2WithFewExistingContracts(t *testing.T) { callProxyAddress := utils.RandomAddress() mcmsAddress := utils.RandomAddress() - mcmsType := cldf.NewTypeAndVersion(mcmscontracts.ManyChainMultisig, cldfutil.Version1_0_0) + mcmsType := cldf.NewTypeAndVersion(mcmscontracts.ManyChainMultisig, semvers.V1_0_0) // we use same address for bypasser and canceller mcmsType.AddLabel(mcmscontracts.BypasserRole.String()) mcmsType.AddLabel(mcmscontracts.CancellerRole.String()) @@ -153,7 +153,7 @@ func TestDeployMCMSWithTimelockV2WithFewExistingContracts(t *testing.T) { ChainSelector: selector1, Address: callProxyAddress.String(), Type: datastore.ContractType(mcmscontracts.CallProxy), - Version: &cldfutil.Version1_0_0, + Version: &semvers.V1_0_0, })) // Add MCMS contract with both bypasser and canceller labels for first chain only diff --git a/legacy/mcms/changesets/fund_mcm_pdas_test.go b/legacy/mcms/changesets/fund_mcm_pdas_test.go index 3120306..22c8f9d 100644 --- a/legacy/mcms/changesets/fund_mcm_pdas_test.go +++ b/legacy/mcms/changesets/fund_mcm_pdas_test.go @@ -21,8 +21,8 @@ import ( "github.com/smartcontractkit/chainlink-deployments-framework/pkg/logger" "github.com/stretchr/testify/require" + "github.com/smartcontractkit/cld-changesets/internal/semvers" solana2 "github.com/smartcontractkit/cld-changesets/legacy/pkg/family/solana" - "github.com/smartcontractkit/cld-changesets/pkg/cldfutil" solanastate "github.com/smartcontractkit/cld-changesets/pkg/family/solana" ) @@ -252,7 +252,7 @@ func saveMCMSAddresses(t *testing.T, addressBook cldf.AddressBook, selector uint require.NoError(t, addressBook.Save(selector, solana2.EncodeAddressWithSeed(state.McmProgram, state.BypasserMcmSeed), cldf.NewTypeAndVersion( mcmscontracts.BypasserManyChainMultisig, - cldfutil.Version1_0_0, + semvers.V1_0_0, ))) return state @@ -260,19 +260,19 @@ func saveMCMSAddresses(t *testing.T, addressBook cldf.AddressBook, selector uint require.NoError(t, addressBook.Save(selector, solana2.EncodeAddressWithSeed(state.TimelockProgram, state.TimelockSeed), cldf.NewTypeAndVersion( mcmscontracts.RBACTimelock, - cldfutil.Version1_0_0, + semvers.V1_0_0, ))) require.NoError(t, addressBook.Save(selector, solana2.EncodeAddressWithSeed(state.McmProgram, state.ProposerMcmSeed), cldf.NewTypeAndVersion( mcmscontracts.ProposerManyChainMultisig, - cldfutil.Version1_0_0, + semvers.V1_0_0, ))) require.NoError(t, addressBook.Save(selector, solana2.EncodeAddressWithSeed(state.McmProgram, state.CancellerMcmSeed), cldf.NewTypeAndVersion( mcmscontracts.CancellerManyChainMultisig, - cldfutil.Version1_0_0, + semvers.V1_0_0, ))) require.NoError(t, addressBook.Save(selector, solana2.EncodeAddressWithSeed(state.McmProgram, state.BypasserMcmSeed), cldf.NewTypeAndVersion( mcmscontracts.BypasserManyChainMultisig, - cldfutil.Version1_0_0, + semvers.V1_0_0, ))) return state diff --git a/legacy/mcms/changesets/transfer_to_mcms_with_timelock_test.go b/legacy/mcms/changesets/transfer_to_mcms_with_timelock_test.go index 79e1295..41b8603 100644 --- a/legacy/mcms/changesets/transfer_to_mcms_with_timelock_test.go +++ b/legacy/mcms/changesets/transfer_to_mcms_with_timelock_test.go @@ -12,9 +12,9 @@ import ( linkcontracts "github.com/smartcontractkit/chainlink-deployments-framework/engine/cld/contracts/link" "github.com/stretchr/testify/require" + "github.com/smartcontractkit/cld-changesets/internal/semvers" evmstate "github.com/smartcontractkit/cld-changesets/legacy/pkg/family/evm" linkchangesets "github.com/smartcontractkit/cld-changesets/link/changesets" - "github.com/smartcontractkit/cld-changesets/pkg/cldfutil" cldfproposalutils "github.com/smartcontractkit/chainlink-deployments-framework/engine/cld/mcms/proposalutils" @@ -124,7 +124,7 @@ func TestTransferToMCMSWithTimelockV2DataStore(t *testing.T) { //nolint:parallel // TODO: migrate DeployLinkToken to use datastore only linkAb := cldf.NewMemoryAddressBookFromMap(map[uint64]map[string]cldf.TypeAndVersion{ selector: { - link.LinkToken.Address().String(): cldf.NewTypeAndVersion(linkcontracts.LinkToken, cldfutil.Version1_0_0), + link.LinkToken.Address().String(): cldf.NewTypeAndVersion(linkcontracts.LinkToken, semvers.V1_0_0), }, }) err = rt.State().AddressBook.Remove(linkAb) @@ -132,7 +132,7 @@ func TestTransferToMCMSWithTimelockV2DataStore(t *testing.T) { //nolint:parallel // Add link token address to the datastore only ds := datastore.NewMemoryDataStore() - typeAndVersion := cldf.NewTypeAndVersion(linkcontracts.LinkToken, cldfutil.Version1_0_0) + typeAndVersion := cldf.NewTypeAndVersion(linkcontracts.LinkToken, semvers.V1_0_0) err = ds.Addresses().Add(datastore.AddressRef{ Address: link.LinkToken.Address().String(), diff --git a/legacy/pkg/family/aptos/state.go b/legacy/pkg/family/aptos/state.go index d57873c..5295472 100644 --- a/legacy/pkg/family/aptos/state.go +++ b/legacy/pkg/family/aptos/state.go @@ -7,7 +7,7 @@ import ( cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" - "github.com/smartcontractkit/cld-changesets/pkg/cldfutil" + "github.com/smartcontractkit/cld-changesets/internal/semvers" ) const ( @@ -28,12 +28,12 @@ func LoadMCMSAddresses(env cldf.Environment, chainSelectors []uint64) (map[uint6 for address, tv := range addresses { if tv.Equal(cldf.TypeAndVersion{ Type: AptosMCMSType, - Version: cldfutil.Version1_6_0, + Version: semvers.V1_6_0, }) { if err := mcmsAddress.ParseStringRelaxed(address); err != nil { return nil, fmt.Errorf( "failed to parse Aptos MCMS address for chain %d (type=%s, version=%s, address=%s): %w", - selector, AptosMCMSType, cldfutil.Version1_6_0.String(), address, err, + selector, AptosMCMSType, semvers.V1_6_0.String(), address, err, ) } diff --git a/legacy/pkg/family/aptos/state_test.go b/legacy/pkg/family/aptos/state_test.go index c607c3a..d6df8ae 100644 --- a/legacy/pkg/family/aptos/state_test.go +++ b/legacy/pkg/family/aptos/state_test.go @@ -15,7 +15,7 @@ import ( "github.com/smartcontractkit/chainlink-deployments-framework/offchain/ocr" "github.com/smartcontractkit/chainlink-deployments-framework/pkg/logger" - "github.com/smartcontractkit/cld-changesets/pkg/cldfutil" + "github.com/smartcontractkit/cld-changesets/internal/semvers" ) const testAptosMCMSAddr = "0x3" @@ -42,7 +42,7 @@ func TestLoadMCMSAddresses(t *testing.T) { t.Parallel() ab := cldf.NewMemoryAddressBook() - require.NoError(t, ab.Save(chainSel, testAptosMCMSAddr, cldf.NewTypeAndVersion(AptosMCMSType, cldfutil.Version1_6_0))) + require.NoError(t, ab.Save(chainSel, testAptosMCMSAddr, cldf.NewTypeAndVersion(AptosMCMSType, semvers.V1_6_0))) ds := datastore.NewMemoryDataStore().Seal() env := testEnv(t, ab, ds) @@ -59,7 +59,7 @@ func TestLoadMCMSAddresses(t *testing.T) { t.Parallel() ab := cldf.NewMemoryAddressBook() - other := cldf.NewTypeAndVersion("SomeOtherContract", cldfutil.Version1_0_0) + other := cldf.NewTypeAndVersion("SomeOtherContract", semvers.V1_0_0) require.NoError(t, ab.Save(chainSel, "0x1", other)) ds := datastore.NewMemoryDataStore().Seal() env := testEnv(t, ab, ds) @@ -86,7 +86,7 @@ func TestLoadMCMSAddresses(t *testing.T) { t.Parallel() ab := cldf.NewMemoryAddressBook() - require.NoError(t, ab.Save(chainSel, testAptosMCMSAddr, cldf.NewTypeAndVersion(AptosMCMSType, cldfutil.Version1_5_0))) + require.NoError(t, ab.Save(chainSel, testAptosMCMSAddr, cldf.NewTypeAndVersion(AptosMCMSType, semvers.V1_5_0))) ds := datastore.NewMemoryDataStore().Seal() env := testEnv(t, ab, ds) @@ -99,7 +99,7 @@ func TestLoadMCMSAddresses(t *testing.T) { t.Parallel() ab := cldf.NewMemoryAddressBook() - require.NoError(t, ab.Save(chainSel, "NotHex", cldf.NewTypeAndVersion(AptosMCMSType, cldfutil.Version1_6_0))) + require.NoError(t, ab.Save(chainSel, "NotHex", cldf.NewTypeAndVersion(AptosMCMSType, semvers.V1_6_0))) ds := datastore.NewMemoryDataStore().Seal() env := testEnv(t, ab, ds) @@ -107,7 +107,7 @@ func TestLoadMCMSAddresses(t *testing.T) { require.ErrorContains(t, err, fmt.Sprintf( "failed to parse Aptos MCMS address for chain %d (type=%s, version=%s, address=NotHex)", - chainSel, AptosMCMSType, cldfutil.Version1_6_0.String(), + chainSel, AptosMCMSType, semvers.V1_6_0.String(), )) var scratch aptoschain.AccountAddress parseErr := scratch.ParseStringRelaxed("NotHex") diff --git a/legacy/pkg/family/evm/changesets/deploy_mcms.go b/legacy/pkg/family/evm/changesets/deploy_mcms.go index 9ef8f88..4444dce 100644 --- a/legacy/pkg/family/evm/changesets/deploy_mcms.go +++ b/legacy/pkg/family/evm/changesets/deploy_mcms.go @@ -10,8 +10,8 @@ import ( "github.com/smartcontractkit/mcms/sdk" mcmsTypes "github.com/smartcontractkit/mcms/types" + "github.com/smartcontractkit/cld-changesets/internal/semvers" gethwrappers_zksync "github.com/smartcontractkit/cld-changesets/legacy/pkg/family/evm/changesets/zksync" - "github.com/smartcontractkit/cld-changesets/pkg/cldfutil" ) // TODO: Remove this function once the tests are implemented for the new sequence. @@ -50,7 +50,7 @@ func DeployMCMSWithConfigEVM( ) } - tv := cldf.NewTypeAndVersion(contractType, cldfutil.Version1_0_0) + tv := cldf.NewTypeAndVersion(contractType, semvers.V1_0_0) for _, option := range options { option(&tv) } diff --git a/legacy/pkg/family/evm/state.go b/legacy/pkg/family/evm/state.go index 333e273..62e4704 100644 --- a/legacy/pkg/family/evm/state.go +++ b/legacy/pkg/family/evm/state.go @@ -15,7 +15,7 @@ import ( "github.com/smartcontractkit/chainlink-evm/gethwrappers/generated/link_token_interface" "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/link_token" - "github.com/smartcontractkit/cld-changesets/pkg/cldfutil" + "github.com/smartcontractkit/cld-changesets/internal/semvers" linkv10 "github.com/smartcontractkit/cld-changesets/pkg/contract/link/view/v10" "github.com/smartcontractkit/cld-changesets/pkg/contract/mcms/view/v1_0" ) @@ -262,17 +262,17 @@ func MaybeLoadMCMSWithTimelockChainState(chain cldf_evm.Chain, addresses map[str state := MCMSWithTimelockState{} var ( // We expect one of each contract on the chain. - timelock = cldf.NewTypeAndVersion(mcmscontracts.RBACTimelock, cldfutil.Version1_0_0) - callProxy = cldf.NewTypeAndVersion(mcmscontracts.CallProxy, cldfutil.Version1_0_0) - proposer = cldf.NewTypeAndVersion(mcmscontracts.ProposerManyChainMultisig, cldfutil.Version1_0_0) - canceller = cldf.NewTypeAndVersion(mcmscontracts.CancellerManyChainMultisig, cldfutil.Version1_0_0) - bypasser = cldf.NewTypeAndVersion(mcmscontracts.BypasserManyChainMultisig, cldfutil.Version1_0_0) + timelock = cldf.NewTypeAndVersion(mcmscontracts.RBACTimelock, semvers.V1_0_0) + callProxy = cldf.NewTypeAndVersion(mcmscontracts.CallProxy, semvers.V1_0_0) + proposer = cldf.NewTypeAndVersion(mcmscontracts.ProposerManyChainMultisig, semvers.V1_0_0) + canceller = cldf.NewTypeAndVersion(mcmscontracts.CancellerManyChainMultisig, semvers.V1_0_0) + bypasser = cldf.NewTypeAndVersion(mcmscontracts.BypasserManyChainMultisig, semvers.V1_0_0) // the same contract can have different roles - multichain = cldf.NewTypeAndVersion(mcmscontracts.ManyChainMultisig, cldfutil.Version1_0_0) - proposerMCMS = cldf.NewTypeAndVersion(mcmscontracts.ManyChainMultisig, cldfutil.Version1_0_0) - bypasserMCMS = cldf.NewTypeAndVersion(mcmscontracts.ManyChainMultisig, cldfutil.Version1_0_0) - cancellerMCMS = cldf.NewTypeAndVersion(mcmscontracts.ManyChainMultisig, cldfutil.Version1_0_0) + multichain = cldf.NewTypeAndVersion(mcmscontracts.ManyChainMultisig, semvers.V1_0_0) + proposerMCMS = cldf.NewTypeAndVersion(mcmscontracts.ManyChainMultisig, semvers.V1_0_0) + bypasserMCMS = cldf.NewTypeAndVersion(mcmscontracts.ManyChainMultisig, semvers.V1_0_0) + cancellerMCMS = cldf.NewTypeAndVersion(mcmscontracts.ManyChainMultisig, semvers.V1_0_0) ) // Add role labels to the ManyChainMultisig variants and build the expected contract bundle. @@ -380,11 +380,11 @@ func MaybeLoadMCMSWithTimelockChainStateFromRefs(chain cldf_evm.Chain, refs []da state := MCMSWithTimelockState{} var ( // We expect one of each contract on the chain. - timelock = cldf.NewTypeAndVersion(mcmscontracts.RBACTimelock, cldfutil.Version1_0_0) - callProxy = cldf.NewTypeAndVersion(mcmscontracts.CallProxy, cldfutil.Version1_0_0) - proposer = cldf.NewTypeAndVersion(mcmscontracts.ProposerManyChainMultisig, cldfutil.Version1_0_0) - canceller = cldf.NewTypeAndVersion(mcmscontracts.CancellerManyChainMultisig, cldfutil.Version1_0_0) - bypasser = cldf.NewTypeAndVersion(mcmscontracts.BypasserManyChainMultisig, cldfutil.Version1_0_0) + timelock = cldf.NewTypeAndVersion(mcmscontracts.RBACTimelock, semvers.V1_0_0) + callProxy = cldf.NewTypeAndVersion(mcmscontracts.CallProxy, semvers.V1_0_0) + proposer = cldf.NewTypeAndVersion(mcmscontracts.ProposerManyChainMultisig, semvers.V1_0_0) + canceller = cldf.NewTypeAndVersion(mcmscontracts.CancellerManyChainMultisig, semvers.V1_0_0) + bypasser = cldf.NewTypeAndVersion(mcmscontracts.BypasserManyChainMultisig, semvers.V1_0_0) ) wantTypes := []cldf.TypeAndVersion{timelock, proposer, canceller, bypasser, callProxy} @@ -487,7 +487,7 @@ func (s LinkTokenState) GenerateLinkView() (linkv10.LinkTokenView, error) { func MaybeLoadLinkTokenChainState(chain cldf_evm.Chain, addresses map[string]cldf.TypeAndVersion) (*LinkTokenState, error) { state := LinkTokenState{} - linkToken := cldf.NewTypeAndVersion(linkcontracts.LinkToken, cldfutil.Version1_0_0) + linkToken := cldf.NewTypeAndVersion(linkcontracts.LinkToken, semvers.V1_0_0) // Convert map keys to a slice wantTypes := []cldf.TypeAndVersion{linkToken} @@ -525,7 +525,7 @@ func (s StaticLinkTokenState) GenerateStaticLinkView() (linkv10.StaticLinkTokenV func MaybeLoadStaticLinkTokenState(chain cldf_evm.Chain, addresses map[string]cldf.TypeAndVersion) (*StaticLinkTokenState, error) { state := StaticLinkTokenState{} - staticLinkToken := cldf.NewTypeAndVersion(linkcontracts.StaticLinkToken, cldfutil.Version1_0_0) + staticLinkToken := cldf.NewTypeAndVersion(linkcontracts.StaticLinkToken, semvers.V1_0_0) // Convert map keys to a slice wantTypes := []cldf.TypeAndVersion{staticLinkToken} diff --git a/legacy/pkg/family/evm/state_test.go b/legacy/pkg/family/evm/state_test.go index 500673a..a3b9d1b 100644 --- a/legacy/pkg/family/evm/state_test.go +++ b/legacy/pkg/family/evm/state_test.go @@ -25,7 +25,7 @@ import ( "github.com/smartcontractkit/chainlink-deployments-framework/offchain/ocr" "github.com/smartcontractkit/chainlink-deployments-framework/pkg/logger" - "github.com/smartcontractkit/cld-changesets/pkg/cldfutil" + "github.com/smartcontractkit/cld-changesets/internal/semvers" ) func TestGetAddressTypeVersionByQualifier(t *testing.T) { @@ -33,7 +33,7 @@ func TestGetAddressTypeVersionByQualifier(t *testing.T) { chainSel := chainsel.ETHEREUM_TESTNET_SEPOLIA.Selector otherSel := chainSel + 1 - v := cldfutil.Version1_0_0 + v := semvers.V1_0_0 t.Run("no addresses for chain", func(t *testing.T) { t.Parallel() @@ -215,7 +215,7 @@ func TestMaybeLoadMCMSWithTimelockChainState(t *testing.T) { t.Run("duplicate RBACTimelock in bundle", func(t *testing.T) { t.Parallel() - tv := cldf.NewTypeAndVersion(mcmscontracts.RBACTimelock, cldfutil.Version1_0_0) + tv := cldf.NewTypeAndVersion(mcmscontracts.RBACTimelock, semvers.V1_0_0) addrs := map[string]cldf.TypeAndVersion{ "0x0000000000000000000000000000000000000001": tv, "0x0000000000000000000000000000000000000002": tv, @@ -226,7 +226,7 @@ func TestMaybeLoadMCMSWithTimelockChainState(t *testing.T) { t.Run("invalid hex address in bundle", func(t *testing.T) { t.Parallel() - tv := cldf.NewTypeAndVersion(mcmscontracts.RBACTimelock, cldfutil.Version1_0_0) + tv := cldf.NewTypeAndVersion(mcmscontracts.RBACTimelock, semvers.V1_0_0) _, err := MaybeLoadMCMSWithTimelockChainState(ch, map[string]cldf.TypeAndVersion{ "not-a-valid-hex-address": tv, }) @@ -238,7 +238,7 @@ func TestMaybeLoadMCMSWithTimelockStateWithQualifier(t *testing.T) { t.Parallel() chainSel := chainsel.ETHEREUM_TESTNET_SEPOLIA.Selector - v := cldfutil.Version1_0_0 + v := semvers.V1_0_0 t.Run("chain not in environment", func(t *testing.T) { t.Parallel() @@ -434,7 +434,7 @@ func TestAddressesForChain(t *testing.T) { // Create environment with only AddressBook addressBook := cldf.NewMemoryAddressBook() err := addressBook.Save(chainSelector, "0x1234567890123456789012345678901234567890", - cldf.NewTypeAndVersion(linkcontracts.LinkToken, cldfutil.Version1_0_0)) + cldf.NewTypeAndVersion(linkcontracts.LinkToken, semvers.V1_0_0)) require.NoError(t, err) env := cldf.Environment{ @@ -460,7 +460,7 @@ func TestAddressesForChain(t *testing.T) { ChainSelector: chainSelector, Address: "0xABCDEF1234567890123456789012345678901234", Type: datastore.ContractType(mcmscontracts.RBACTimelock), - Version: &cldfutil.Version1_0_0, + Version: &semvers.V1_0_0, }) require.NoError(t, err) @@ -485,7 +485,7 @@ func TestAddressesForChain(t *testing.T) { // Create a mock environment with both AddressBook and DataStore addressBook := cldf.NewMemoryAddressBook() err := addressBook.Save(chainSelector, "0x1234567890123456789012345678901234567890", - cldf.NewTypeAndVersion(linkcontracts.LinkToken, cldfutil.Version1_0_0)) + cldf.NewTypeAndVersion(linkcontracts.LinkToken, semvers.V1_0_0)) require.NoError(t, err) dataStore := datastore.NewMemoryDataStore() @@ -493,7 +493,7 @@ func TestAddressesForChain(t *testing.T) { ChainSelector: chainSelector, Address: "0xABCDEF1234567890123456789012345678901234", Type: datastore.ContractType(mcmscontracts.RBACTimelock), - Version: &cldfutil.Version1_0_0, + Version: &semvers.V1_0_0, Labels: datastore.NewLabelSet( "team:core", "environment:production", @@ -519,11 +519,11 @@ func TestAddressesForChain(t *testing.T) { // Verify that types are correctly preserved linkTokenTV := mergedAddresses["0x1234567890123456789012345678901234567890"] require.Equal(t, linkcontracts.LinkToken, linkTokenTV.Type) - require.Equal(t, cldfutil.Version1_0_0, linkTokenTV.Version) + require.Equal(t, semvers.V1_0_0, linkTokenTV.Version) timelockTV := mergedAddresses["0xABCDEF1234567890123456789012345678901234"] require.Equal(t, mcmscontracts.RBACTimelock, timelockTV.Type) - require.Equal(t, cldfutil.Version1_0_0, timelockTV.Version) + require.Equal(t, semvers.V1_0_0, timelockTV.Version) // Verify labels are preserved in DataStore refs := env.DataStore.Addresses().Filter(datastore.AddressRefByChainSelector(chainSelector)) @@ -546,7 +546,7 @@ func TestAddressesForChain(t *testing.T) { ChainSelector: chainSelector, Address: "0x1111111111111111111111111111111111111111", Type: datastore.ContractType(mcmscontracts.RBACTimelock), - Version: &cldfutil.Version1_0_0, + Version: &semvers.V1_0_0, Qualifier: "team-a", Labels: datastore.NewLabelSet( "team:team-a", @@ -559,7 +559,7 @@ func TestAddressesForChain(t *testing.T) { ChainSelector: chainSelector, Address: "0x2222222222222222222222222222222222222222", Type: datastore.ContractType(mcmscontracts.RBACTimelock), - Version: &cldfutil.Version1_0_0, + Version: &semvers.V1_0_0, Qualifier: "team-b", Labels: datastore.NewLabelSet( "team:team-b", @@ -612,7 +612,7 @@ func TestAddressesForChain(t *testing.T) { addressBook := cldf.NewMemoryAddressBook() // Add LinkToken to AddressBook err := addressBook.Save(chainSelector, duplicateAddress, - cldf.NewTypeAndVersion(linkcontracts.LinkToken, cldfutil.Version1_0_0)) + cldf.NewTypeAndVersion(linkcontracts.LinkToken, semvers.V1_0_0)) require.NoError(t, err) dataStore := datastore.NewMemoryDataStore() @@ -622,7 +622,7 @@ func TestAddressesForChain(t *testing.T) { ChainSelector: chainSelector, Address: duplicateAddress, // Same address as AddressBook Type: datastore.ContractType(mcmscontracts.RBACTimelock), // Different type from AddressBook LinkToken - Version: &cldfutil.Version1_6_0, // Different version + Version: &semvers.V1_6_0, // Different version Labels: datastore.NewLabelSet( "team:datastore-team", "environment:staging", @@ -636,7 +636,7 @@ func TestAddressesForChain(t *testing.T) { ChainSelector: chainSelector, Address: uniqueAddress, Type: datastore.ContractType(mcmscontracts.RBACTimelock), - Version: &cldfutil.Version1_0_0, + Version: &semvers.V1_0_0, Labels: datastore.NewLabelSet( "team:unique-entry", "role:timelock", @@ -661,12 +661,12 @@ func TestAddressesForChain(t *testing.T) { // The duplicate address should use DataStore values (DataStore takes precedence) duplicateTV := mergedAddresses[duplicateAddress] require.Equal(t, mcmscontracts.RBACTimelock, duplicateTV.Type, "DataStore type should override AddressBook type") - require.Equal(t, cldfutil.Version1_6_0, duplicateTV.Version, "DataStore version should override AddressBook version") + require.Equal(t, semvers.V1_6_0, duplicateTV.Version, "DataStore version should override AddressBook version") // The unique address should have correct type uniqueTV := mergedAddresses[uniqueAddress] require.Equal(t, mcmscontracts.RBACTimelock, uniqueTV.Type) - require.Equal(t, cldfutil.Version1_0_0, uniqueTV.Version) + require.Equal(t, semvers.V1_0_0, uniqueTV.Version) // Verify that DataStore labels are preserved for both addresses refs := env.DataStore.Addresses().Filter(datastore.AddressRefByChainSelector(chainSelector)) @@ -741,9 +741,9 @@ func TestGetMCMSWithTimelockState(t *testing.T) { // timelock, callProxy, proposer shared by both stores commonRefs := []datastore.AddressRef{ - {ChainSelector: selector, Address: strings.ToLower(timelock.Address().Hex()), Type: datastore.ContractType(mcmscontracts.RBACTimelock), Version: &cldfutil.Version1_0_0}, - {ChainSelector: selector, Address: strings.ToLower(callProxy.Address().Hex()), Type: datastore.ContractType(mcmscontracts.CallProxy), Version: &cldfutil.Version1_0_0}, - {ChainSelector: selector, Address: strings.ToLower(proposerMcm.Address().Hex()), Type: datastore.ContractType(mcmscontracts.ProposerManyChainMultisig), Version: &cldfutil.Version1_0_0}, + {ChainSelector: selector, Address: strings.ToLower(timelock.Address().Hex()), Type: datastore.ContractType(mcmscontracts.RBACTimelock), Version: &semvers.V1_0_0}, + {ChainSelector: selector, Address: strings.ToLower(callProxy.Address().Hex()), Type: datastore.ContractType(mcmscontracts.CallProxy), Version: &semvers.V1_0_0}, + {ChainSelector: selector, Address: strings.ToLower(proposerMcm.Address().Hex()), Type: datastore.ContractType(mcmscontracts.ProposerManyChainMultisig), Version: &semvers.V1_0_0}, } t.Run("shared address for bypasser and canceller", func(t *testing.T) { @@ -756,11 +756,11 @@ func TestGetMCMSWithTimelockState(t *testing.T) { } require.NoError(t, store.Addresses().Add(datastore.AddressRef{ ChainSelector: selector, Address: sharedAddress, - Type: datastore.ContractType(mcmscontracts.BypasserManyChainMultisig), Version: &cldfutil.Version1_0_0, Qualifier: "bypasser", + Type: datastore.ContractType(mcmscontracts.BypasserManyChainMultisig), Version: &semvers.V1_0_0, Qualifier: "bypasser", })) require.NoError(t, store.Addresses().Add(datastore.AddressRef{ ChainSelector: selector, Address: sharedAddress, - Type: datastore.ContractType(mcmscontracts.CancellerManyChainMultisig), Version: &cldfutil.Version1_0_0, Qualifier: "canceller", + Type: datastore.ContractType(mcmscontracts.CancellerManyChainMultisig), Version: &semvers.V1_0_0, Qualifier: "canceller", })) state, err := GetMCMSWithTimelockState(store.Seal().Addresses(), chain, "") @@ -786,12 +786,12 @@ func TestGetMCMSWithTimelockState(t *testing.T) { } require.NoError(t, legacyStore.Addresses().Add(datastore.AddressRef{ ChainSelector: selector, Address: sharedAddress, - Type: datastore.ContractType(mcmscontracts.ManyChainMultisig), Version: &cldfutil.Version1_0_0, Qualifier: "bypasser", + Type: datastore.ContractType(mcmscontracts.ManyChainMultisig), Version: &semvers.V1_0_0, Qualifier: "bypasser", Labels: datastore.NewLabelSet(mcmscontracts.BypasserRole.String()), })) require.NoError(t, legacyStore.Addresses().Add(datastore.AddressRef{ ChainSelector: selector, Address: sharedAddress, - Type: datastore.ContractType(mcmscontracts.ManyChainMultisig), Version: &cldfutil.Version1_0_0, Qualifier: "canceller", + Type: datastore.ContractType(mcmscontracts.ManyChainMultisig), Version: &semvers.V1_0_0, Qualifier: "canceller", Labels: datastore.NewLabelSet(mcmscontracts.CancellerRole.String()), })) diff --git a/legacy/pkg/family/solana/changesets/access_controller.go b/legacy/pkg/family/solana/changesets/access_controller.go index c8576fb..c9c1017 100644 --- a/legacy/pkg/family/solana/changesets/access_controller.go +++ b/legacy/pkg/family/solana/changesets/access_controller.go @@ -7,19 +7,17 @@ import ( "github.com/gagliardetto/solana-go" "github.com/gagliardetto/solana-go/programs/system" "github.com/gagliardetto/solana-go/rpc" - mcmscontracts "github.com/smartcontractkit/chainlink-deployments-framework/engine/cld/contracts/mcms" - - cldf_solana "github.com/smartcontractkit/chainlink-deployments-framework/chain/solana" accessControllerBindings "github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings/v0_1_1/access_controller" timelockBindings "github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings/v0_1_1/timelock" solanaUtils "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/common" - + cldf_solana "github.com/smartcontractkit/chainlink-deployments-framework/chain/solana" cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" + mcmscontracts "github.com/smartcontractkit/chainlink-deployments-framework/engine/cld/contracts/mcms" + "github.com/smartcontractkit/cld-changesets/internal/semvers" legacy2 "github.com/smartcontractkit/cld-changesets/legacy/pkg/family/solana" "github.com/smartcontractkit/cld-changesets/legacy/pkg/family/solana/solutils" - "github.com/smartcontractkit/cld-changesets/pkg/cldfutil" familysolana "github.com/smartcontractkit/cld-changesets/pkg/family/solana" ) @@ -27,7 +25,7 @@ func deployAccessControllerProgram( e cldf.Environment, chainState *legacy2.MCMSWithTimelockState, chain cldf_solana.Chain, addressBook cldf.AddressBook, ) error { - typeAndVersion := cldf.NewTypeAndVersion(mcmscontracts.AccessControllerProgram, cldfutil.Version1_0_0) + typeAndVersion := cldf.NewTypeAndVersion(mcmscontracts.AccessControllerProgram, semvers.V1_0_0) programID, _, err := chainState.GetStateFromType(mcmscontracts.AccessControllerProgram) if err != nil { @@ -75,7 +73,7 @@ func initAccessController( if chainState.AccessControllerProgram.IsZero() { return errors.New("access controller program is not deployed") } - typeAndVersion := cldf.NewTypeAndVersion(contractType, cldfutil.Version1_0_0) + typeAndVersion := cldf.NewTypeAndVersion(contractType, semvers.V1_0_0) _, accessControllerAccountSeed, err := chainState.GetStateFromType(contractType) if err != nil { return fmt.Errorf("failed to get account controller state: %w", err) diff --git a/legacy/pkg/family/solana/changesets/deploy_mcm.go b/legacy/pkg/family/solana/changesets/deploy_mcm.go index c287387..47f89a0 100644 --- a/legacy/pkg/family/solana/changesets/deploy_mcm.go +++ b/legacy/pkg/family/solana/changesets/deploy_mcm.go @@ -18,9 +18,9 @@ import ( mcmBindings "github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings/v0_1_1/mcm" solanaUtils "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/common" + "github.com/smartcontractkit/cld-changesets/internal/semvers" legacy2 "github.com/smartcontractkit/cld-changesets/legacy/pkg/family/solana" "github.com/smartcontractkit/cld-changesets/legacy/pkg/family/solana/solutils" - "github.com/smartcontractkit/cld-changesets/pkg/cldfutil" familysolana "github.com/smartcontractkit/cld-changesets/pkg/family/solana" ) @@ -28,7 +28,7 @@ func deployMCMProgram( env cldf.Environment, chainState *legacy2.MCMSWithTimelockState, chain cldf_solana.Chain, addressBook cldf.AddressBook, ) error { - typeAndVersion := cldf.NewTypeAndVersion(mcmscontracts.ManyChainMultisigProgram, cldfutil.Version1_0_0) + typeAndVersion := cldf.NewTypeAndVersion(mcmscontracts.ManyChainMultisigProgram, semvers.V1_0_0) programID, _, err := chainState.GetStateFromType(mcmscontracts.ManyChainMultisigProgram) if err != nil { @@ -78,7 +78,7 @@ func initMCM( } programID := chainState.McmProgram - typeAndVersion := cldf.NewTypeAndVersion(contractType, cldfutil.Version1_0_0) + typeAndVersion := cldf.NewTypeAndVersion(contractType, semvers.V1_0_0) mcmProgram, mcmSeed, err := chainState.GetStateFromType(contractType) if err != nil { return fmt.Errorf("failed to get mcm state: %w", err) diff --git a/legacy/pkg/family/solana/changesets/deploy_timelock.go b/legacy/pkg/family/solana/changesets/deploy_timelock.go index c2624ca..d0c3ab7 100644 --- a/legacy/pkg/family/solana/changesets/deploy_timelock.go +++ b/legacy/pkg/family/solana/changesets/deploy_timelock.go @@ -16,9 +16,9 @@ import ( cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" + "github.com/smartcontractkit/cld-changesets/internal/semvers" legacy2 "github.com/smartcontractkit/cld-changesets/legacy/pkg/family/solana" "github.com/smartcontractkit/cld-changesets/legacy/pkg/family/solana/solutils" - "github.com/smartcontractkit/cld-changesets/pkg/cldfutil" familysolana "github.com/smartcontractkit/cld-changesets/pkg/family/solana" ) @@ -26,7 +26,7 @@ func deployTimelockProgram( e cldf.Environment, chainState *legacy2.MCMSWithTimelockState, chain cldf_solana.Chain, addressBook cldf.AddressBook, ) error { - typeAndVersion := cldf.NewTypeAndVersion(mcmscontracts.RBACTimelockProgram, cldfutil.Version1_0_0) + typeAndVersion := cldf.NewTypeAndVersion(mcmscontracts.RBACTimelockProgram, semvers.V1_0_0) programID, _, err := chainState.GetStateFromType(mcmscontracts.RBACTimelock) if err != nil { @@ -77,7 +77,7 @@ func initTimelock( programID := chainState.TimelockProgram timelockBindings.SetProgramID(programID) - typeAndVersion := cldf.NewTypeAndVersion(mcmscontracts.RBACTimelock, cldfutil.Version1_0_0) + typeAndVersion := cldf.NewTypeAndVersion(mcmscontracts.RBACTimelock, semvers.V1_0_0) timelockProgram, timelockSeed, err := chainState.GetStateFromType(mcmscontracts.RBACTimelock) if err != nil { return fmt.Errorf("failed to get timelock state: %w", err) diff --git a/legacy/pkg/family/solana/changesets/transfer_ownership.go b/legacy/pkg/family/solana/changesets/transfer_ownership.go index f07d2c3..a4ddad4 100644 --- a/legacy/pkg/family/solana/changesets/transfer_ownership.go +++ b/legacy/pkg/family/solana/changesets/transfer_ownership.go @@ -15,8 +15,8 @@ import ( mcmssolanasdk "github.com/smartcontractkit/mcms/sdk/solana" mcmstypes "github.com/smartcontractkit/mcms/types" + "github.com/smartcontractkit/cld-changesets/internal/semvers" solstate "github.com/smartcontractkit/cld-changesets/legacy/pkg/family/solana" - "github.com/smartcontractkit/cld-changesets/pkg/cldfutil" pdasol "github.com/smartcontractkit/cld-changesets/pkg/family/solana" accessControllerBindings "github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings/v0_1_1/access_controller" @@ -139,7 +139,7 @@ func (t *TransferToTimelockSolana) Apply( execOut, execErr := operations.ExecuteOperation(env.OperationsBundle, operations.NewOperation( "transfer-ownership", - &cldfutil.Version1_0_0, + &semvers.V1_0_0, "transfers ownership of contracts to mcms", TransferToTimelockSolanaOp, ), diff --git a/legacy/pkg/family/solana/state.go b/legacy/pkg/family/solana/state.go index f5ff70c..ea23d2f 100644 --- a/legacy/pkg/family/solana/state.go +++ b/legacy/pkg/family/solana/state.go @@ -13,7 +13,7 @@ import ( mcmscontracts "github.com/smartcontractkit/chainlink-deployments-framework/engine/cld/contracts/mcms" mcmssolanasdk "github.com/smartcontractkit/mcms/sdk/solana" - "github.com/smartcontractkit/cld-changesets/pkg/cldfutil" + "github.com/smartcontractkit/cld-changesets/internal/semvers" "github.com/smartcontractkit/cld-changesets/pkg/contract/mcms/view/v1_0" ) @@ -247,17 +247,17 @@ func MaybeLoadMCMSWithTimelockState(env cldf.Environment, chainSelectors []uint6 func MaybeLoadMCMSWithTimelockChainState(chain cldf_solana.Chain, addresses map[string]cldf.TypeAndVersion) (*MCMSWithTimelockState, error) { state := MCMSWithTimelockState{MCMSWithTimelockPrograms: &MCMSWithTimelockPrograms{}} - mcmProgram := cldf.NewTypeAndVersion(mcmscontracts.ManyChainMultisigProgram, cldfutil.Version1_0_0) - timelockProgram := cldf.NewTypeAndVersion(mcmscontracts.RBACTimelockProgram, cldfutil.Version1_0_0) - accessControllerProgram := cldf.NewTypeAndVersion(mcmscontracts.AccessControllerProgram, cldfutil.Version1_0_0) - proposerMCM := cldf.NewTypeAndVersion(mcmscontracts.ProposerManyChainMultisig, cldfutil.Version1_0_0) - cancellerMCM := cldf.NewTypeAndVersion(mcmscontracts.CancellerManyChainMultisig, cldfutil.Version1_0_0) - bypasserMCM := cldf.NewTypeAndVersion(mcmscontracts.BypasserManyChainMultisig, cldfutil.Version1_0_0) - timelock := cldf.NewTypeAndVersion(mcmscontracts.RBACTimelock, cldfutil.Version1_0_0) - proposerAccessControllerAccount := cldf.NewTypeAndVersion(mcmscontracts.ProposerAccessControllerAccount, cldfutil.Version1_0_0) - executorAccessControllerAccount := cldf.NewTypeAndVersion(mcmscontracts.ExecutorAccessControllerAccount, cldfutil.Version1_0_0) - cancellerAccessControllerAccount := cldf.NewTypeAndVersion(mcmscontracts.CancellerAccessControllerAccount, cldfutil.Version1_0_0) - bypasserAccessControllerAccount := cldf.NewTypeAndVersion(mcmscontracts.BypasserAccessControllerAccount, cldfutil.Version1_0_0) + mcmProgram := cldf.NewTypeAndVersion(mcmscontracts.ManyChainMultisigProgram, semvers.V1_0_0) + timelockProgram := cldf.NewTypeAndVersion(mcmscontracts.RBACTimelockProgram, semvers.V1_0_0) + accessControllerProgram := cldf.NewTypeAndVersion(mcmscontracts.AccessControllerProgram, semvers.V1_0_0) + proposerMCM := cldf.NewTypeAndVersion(mcmscontracts.ProposerManyChainMultisig, semvers.V1_0_0) + cancellerMCM := cldf.NewTypeAndVersion(mcmscontracts.CancellerManyChainMultisig, semvers.V1_0_0) + bypasserMCM := cldf.NewTypeAndVersion(mcmscontracts.BypasserManyChainMultisig, semvers.V1_0_0) + timelock := cldf.NewTypeAndVersion(mcmscontracts.RBACTimelock, semvers.V1_0_0) + proposerAccessControllerAccount := cldf.NewTypeAndVersion(mcmscontracts.ProposerAccessControllerAccount, semvers.V1_0_0) + executorAccessControllerAccount := cldf.NewTypeAndVersion(mcmscontracts.ExecutorAccessControllerAccount, semvers.V1_0_0) + cancellerAccessControllerAccount := cldf.NewTypeAndVersion(mcmscontracts.CancellerAccessControllerAccount, semvers.V1_0_0) + bypasserAccessControllerAccount := cldf.NewTypeAndVersion(mcmscontracts.BypasserAccessControllerAccount, semvers.V1_0_0) // Convert map keys to a slice wantTypes := []cldf.TypeAndVersion{ diff --git a/legacy/pkg/family/solana/state_test.go b/legacy/pkg/family/solana/state_test.go index 9cb44c0..20a6191 100644 --- a/legacy/pkg/family/solana/state_test.go +++ b/legacy/pkg/family/solana/state_test.go @@ -16,7 +16,7 @@ import ( "github.com/smartcontractkit/chainlink-deployments-framework/pkg/logger" "github.com/stretchr/testify/require" - "github.com/smartcontractkit/cld-changesets/pkg/cldfutil" + "github.com/smartcontractkit/cld-changesets/internal/semvers" ) func TestMaybeLoadMCMSWithTimelockChainState_NoMatchingRefs(t *testing.T) { @@ -88,8 +88,8 @@ func TestMaybeLoadMCMSWithTimelockState(t *testing.T) { t.Run("two chains isolated by selector", func(t *testing.T) { t.Parallel() ab := cldf.NewMemoryAddressBook() - tv := cldf.NewTypeAndVersion(mcmscontracts.ManyChainMultisigProgram, cldfutil.Version1_0_0) - tlTV := cldf.NewTypeAndVersion(mcmscontracts.RBACTimelockProgram, cldfutil.Version1_0_0) + tv := cldf.NewTypeAndVersion(mcmscontracts.ManyChainMultisigProgram, semvers.V1_0_0) + tlTV := cldf.NewTypeAndVersion(mcmscontracts.RBACTimelockProgram, semvers.V1_0_0) require.NoError(t, ab.Save(chain1, mcmProgramAddr, tv)) require.NoError(t, ab.Save(chain2, otherProgramAddr, tv)) require.NoError(t, ab.Save(chain2, timelockProgramAddr, tlTV)) @@ -113,7 +113,7 @@ func TestMaybeLoadMCMSWithTimelockState(t *testing.T) { t.Parallel() ab := cldf.NewMemoryAddressBook() require.NoError(t, ab.Save(chain1, "not-valid-base58", - cldf.NewTypeAndVersion(mcmscontracts.ManyChainMultisigProgram, cldfutil.Version1_0_0))) + cldf.NewTypeAndVersion(mcmscontracts.ManyChainMultisigProgram, semvers.V1_0_0))) env := testSolanaEnv(t, ab, testSolanaChains(chain1)) _, err := MaybeLoadMCMSWithTimelockState(env, []uint64{chain1}) require.ErrorContains(t, err, "unable to load mcms and timelock solana chain state") diff --git a/legacy/pkg/family/solana/testutils/datastore.go b/legacy/pkg/family/solana/testutils/datastore.go index eecb227..4d75407 100644 --- a/legacy/pkg/family/solana/testutils/datastore.go +++ b/legacy/pkg/family/solana/testutils/datastore.go @@ -9,9 +9,9 @@ import ( cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" + "github.com/smartcontractkit/cld-changesets/internal/semvers" familysolana "github.com/smartcontractkit/cld-changesets/legacy/pkg/family/solana" "github.com/smartcontractkit/cld-changesets/legacy/pkg/family/solana/solutils" - "github.com/smartcontractkit/cld-changesets/pkg/cldfutil" ) // PreloadAddressBookWithMCMSPrograms creates and returns an address book containing preloaded MCMS @@ -21,15 +21,15 @@ func PreloadAddressBookWithMCMSPrograms(t *testing.T, selector uint64) *cldf.Add ab := cldf.NewMemoryAddressBook() - tv := cldf.NewTypeAndVersion(mcmscontracts.ManyChainMultisigProgram, cldfutil.Version1_0_0) + tv := cldf.NewTypeAndVersion(mcmscontracts.ManyChainMultisigProgram, semvers.V1_0_0) err := ab.Save(selector, solutils.GetProgramID(solutils.ProgMCM), tv) require.NoError(t, err) - tv = cldf.NewTypeAndVersion(mcmscontracts.AccessControllerProgram, cldfutil.Version1_0_0) + tv = cldf.NewTypeAndVersion(mcmscontracts.AccessControllerProgram, semvers.V1_0_0) err = ab.Save(selector, solutils.GetProgramID(solutils.ProgAccessController), tv) require.NoError(t, err) - tv = cldf.NewTypeAndVersion(mcmscontracts.RBACTimelockProgram, cldfutil.Version1_0_0) + tv = cldf.NewTypeAndVersion(mcmscontracts.RBACTimelockProgram, semvers.V1_0_0) err = ab.Save(selector, solutils.GetProgramID(solutils.ProgTimelock), tv) require.NoError(t, err) diff --git a/link/changesets/deploy_link_token.go b/link/changesets/deploy_link_token.go index 31c851b..9b195d6 100644 --- a/link/changesets/deploy_link_token.go +++ b/link/changesets/deploy_link_token.go @@ -22,7 +22,7 @@ import ( "github.com/smartcontractkit/chainlink-evm/gethwrappers/generated/link_token_interface" "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/link_token" - "github.com/smartcontractkit/cld-changesets/pkg/cldfutil" + "github.com/smartcontractkit/cld-changesets/internal/semvers" ) var _ cldf.ChangeSet[[]uint64] = DeployLinkToken @@ -215,11 +215,11 @@ func newLinkTokenOutput() cldf.ChangesetOutput { } func linkTokenTypeAndVersion() cldf.TypeAndVersion { - return cldf.NewTypeAndVersion(linkcontracts.LinkToken, cldfutil.Version1_0_0) + return cldf.NewTypeAndVersion(linkcontracts.LinkToken, semvers.V1_0_0) } func staticLinkTokenTypeAndVersion() cldf.TypeAndVersion { - return cldf.NewTypeAndVersion(linkcontracts.StaticLinkToken, cldfutil.Version1_0_0) + return cldf.NewTypeAndVersion(linkcontracts.StaticLinkToken, semvers.V1_0_0) } func saveAddressRef(ds datastore.MutableDataStore, chainSelector uint64, address string, tv cldf.TypeAndVersion, qualifier string) error { diff --git a/link/changesets/deploy_link_token_test.go b/link/changesets/deploy_link_token_test.go index 68e6b6f..7c66534 100644 --- a/link/changesets/deploy_link_token_test.go +++ b/link/changesets/deploy_link_token_test.go @@ -16,8 +16,8 @@ import ( "github.com/smartcontractkit/chainlink-deployments-framework/engine/test/environment" "github.com/smartcontractkit/chainlink-deployments-framework/engine/test/runtime" + "github.com/smartcontractkit/cld-changesets/internal/semvers" evmstate "github.com/smartcontractkit/cld-changesets/legacy/pkg/family/evm" - "github.com/smartcontractkit/cld-changesets/pkg/cldfutil" ) func TestDeployLinkToken(t *testing.T) { @@ -54,7 +54,7 @@ func TestDeployLinkToken(t *testing.T) { require.Len(t, refs, len(selectors)) for _, ref := range refs { require.Equal(t, datastore.ContractType(linkcontracts.LinkToken), ref.Type) - require.True(t, cldfutil.Version1_0_0.Equal(ref.Version)) + require.True(t, semvers.V1_0_0.Equal(ref.Version)) } } @@ -205,7 +205,7 @@ func TestDeployStaticLinkToken(t *testing.T) { require.NoError(t, err) require.Len(t, refs, 1) require.Equal(t, datastore.ContractType(linkcontracts.StaticLinkToken), refs[0].Type) - require.True(t, cldfutil.Version1_0_0.Equal(refs[0].Version)) + require.True(t, semvers.V1_0_0.Equal(refs[0].Version)) } func addressBookWith(t *testing.T, selector uint64, address string, tv cldf.TypeAndVersion) cldf.AddressBook { diff --git a/pkg/cldfutil/version.go b/pkg/cldfutil/version.go deleted file mode 100644 index 56f1108..0000000 --- a/pkg/cldfutil/version.go +++ /dev/null @@ -1,21 +0,0 @@ -package cldfutil //nolint:revive // package name is part of the public repo layout - -import ( - "github.com/Masterminds/semver/v3" -) - -var ( - Version0_5_0 = *semver.MustParse("0.5.0") - Version1_0_0 = *semver.MustParse("1.0.0") - Version1_1_0 = *semver.MustParse("1.1.0") - Version1_2_0 = *semver.MustParse("1.2.0") - Version1_5_0 = *semver.MustParse("1.5.0") - Version1_5_1 = *semver.MustParse("1.5.1") - Version1_6_0 = *semver.MustParse("1.6.0") - Version1_6_1 = *semver.MustParse("1.6.1") - Version1_6_1Dev = *semver.MustParse("1.6.1-dev") - Version1_6_2 = *semver.MustParse("1.6.2") - Version1_6_3Dev = *semver.MustParse("1.6.3-dev") - Version1_6_3 = *semver.MustParse("1.6.3") - Version1_7_0 = *semver.MustParse("1.7.0") -) diff --git a/pkg/contract/link/view/v10/link_token.go b/pkg/contract/link/view/v10/link_token.go index 0f1278e..3af12c6 100644 --- a/pkg/contract/link/view/v10/link_token.go +++ b/pkg/contract/link/view/v10/link_token.go @@ -11,6 +11,7 @@ import ( cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" + "github.com/smartcontractkit/cld-changesets/internal/semvers" "github.com/smartcontractkit/cld-changesets/pkg/cldfutil" ) @@ -48,7 +49,7 @@ func GenerateLinkTokenView(lt *link_token.LinkToken) (LinkTokenView, error) { ContractMetaData: cldfutil.ContractMetaData{ TypeAndVersion: cldf.TypeAndVersion{ Type: linkcontracts.LinkToken, - Version: cldfutil.Version1_0_0, + Version: semvers.V1_0_0, }.String(), Address: lt.Address(), Owner: owner, diff --git a/pkg/contract/link/view/v10/static_link_token.go b/pkg/contract/link/view/v10/static_link_token.go index fc0337c..a2554fd 100644 --- a/pkg/contract/link/view/v10/static_link_token.go +++ b/pkg/contract/link/view/v10/static_link_token.go @@ -9,6 +9,7 @@ import ( cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" + "github.com/smartcontractkit/cld-changesets/internal/semvers" "github.com/smartcontractkit/cld-changesets/pkg/cldfutil" ) @@ -32,7 +33,7 @@ func GenerateStaticLinkTokenView(lt *link_token_interface.LinkToken) (StaticLink ContractMetaData: cldfutil.ContractMetaData{ TypeAndVersion: cldf.TypeAndVersion{ Type: linkcontracts.StaticLinkToken, - Version: cldfutil.Version1_0_0, + Version: semvers.V1_0_0, }.String(), Address: lt.Address(), // No owner. diff --git a/pkg/family/evm/operations/callproxy_deploy.go b/pkg/family/evm/operations/callproxy_deploy.go index 55aaf77..62475da 100644 --- a/pkg/family/evm/operations/callproxy_deploy.go +++ b/pkg/family/evm/operations/callproxy_deploy.go @@ -9,7 +9,7 @@ import ( zkbindings "github.com/smartcontractkit/mcms/sdk/zksync/bindings" - "github.com/smartcontractkit/cld-changesets/pkg/cldfutil" + "github.com/smartcontractkit/cld-changesets/internal/semvers" ) type OpEVMDeployCallProxyInput struct { @@ -23,7 +23,7 @@ var OpEVMDeployCallProxy = NewEVMDeployOperation( mcmscontracts.CallProxy, bindings.CallProxyMetaData, &ContractOpts{ - Version: &cldfutil.Version1_0_0, + Version: &semvers.V1_0_0, EVMBytecode: common.FromHex(bindings.CallProxyBin), ZkSyncVMBytecode: zkbindings.CallProxyZkBytecode, }, diff --git a/pkg/family/evm/operations/mcm_deploy.go b/pkg/family/evm/operations/mcm_deploy.go index 2fdf9f3..6947743 100644 --- a/pkg/family/evm/operations/mcm_deploy.go +++ b/pkg/family/evm/operations/mcm_deploy.go @@ -9,7 +9,7 @@ import ( zkbindings "github.com/smartcontractkit/mcms/sdk/zksync/bindings" - "github.com/smartcontractkit/cld-changesets/pkg/cldfutil" + "github.com/smartcontractkit/cld-changesets/internal/semvers" ) type OpEVMDeployMCMOutput struct { @@ -23,7 +23,7 @@ var OpEVMDeployProposerMCM = NewEVMDeployOperation( mcmscontracts.ProposerManyChainMultisig, bindings.ManyChainMultiSigMetaData, &ContractOpts{ - Version: &cldfutil.Version1_0_0, + Version: &semvers.V1_0_0, EVMBytecode: common.FromHex(bindings.ManyChainMultiSigBin), ZkSyncVMBytecode: zkbindings.ManyChainMultiSigZkBytecode, }, @@ -39,7 +39,7 @@ var OpEVMDeployBypasserMCM = NewEVMDeployOperation( mcmscontracts.BypasserManyChainMultisig, bindings.ManyChainMultiSigMetaData, &ContractOpts{ - Version: &cldfutil.Version1_0_0, + Version: &semvers.V1_0_0, EVMBytecode: common.FromHex(bindings.ManyChainMultiSigBin), ZkSyncVMBytecode: zkbindings.ManyChainMultiSigZkBytecode, }, @@ -55,7 +55,7 @@ var OpEVMDeployCancellerMCM = NewEVMDeployOperation( mcmscontracts.CancellerManyChainMultisig, bindings.ManyChainMultiSigMetaData, &ContractOpts{ - Version: &cldfutil.Version1_0_0, + Version: &semvers.V1_0_0, EVMBytecode: common.FromHex(bindings.ManyChainMultiSigBin), ZkSyncVMBytecode: zkbindings.ManyChainMultiSigZkBytecode, }, diff --git a/pkg/family/evm/operations/timelock_deploy.go b/pkg/family/evm/operations/timelock_deploy.go index e19268f..a645831 100644 --- a/pkg/family/evm/operations/timelock_deploy.go +++ b/pkg/family/evm/operations/timelock_deploy.go @@ -11,7 +11,7 @@ import ( zkbindings "github.com/smartcontractkit/mcms/sdk/zksync/bindings" - "github.com/smartcontractkit/cld-changesets/pkg/cldfutil" + "github.com/smartcontractkit/cld-changesets/internal/semvers" ) type OpEVMDeployTimelockInput struct { @@ -30,7 +30,7 @@ var OpEVMDeployTimelock = NewEVMDeployOperation( mcmscontracts.RBACTimelock, bindings.RBACTimelockMetaData, &ContractOpts{ - Version: &cldfutil.Version1_0_0, + Version: &semvers.V1_0_0, EVMBytecode: common.FromHex(bindings.RBACTimelockBin), ZkSyncVMBytecode: zkbindings.RBACTimelockZkBytecode, }, diff --git a/pkg/family/solana/operations/operation.go b/pkg/family/solana/operations/operation.go index a183de7..8b29031 100644 --- a/pkg/family/solana/operations/operation.go +++ b/pkg/family/solana/operations/operation.go @@ -10,8 +10,6 @@ import ( "github.com/gagliardetto/solana-go" "github.com/gagliardetto/solana-go/programs/system" "github.com/gagliardetto/solana-go/rpc" - mcmsSolanaSdk "github.com/smartcontractkit/mcms/sdk/solana" - mcmsTypes "github.com/smartcontractkit/mcms/types" accessControllerBindings "github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings/v0_1_1/access_controller" mcmBindings "github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings/v0_1_1/mcm" @@ -21,9 +19,11 @@ import ( "github.com/smartcontractkit/chainlink-deployments-framework/datastore" cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" "github.com/smartcontractkit/chainlink-deployments-framework/operations" + mcmsSolanaSdk "github.com/smartcontractkit/mcms/sdk/solana" + mcmsTypes "github.com/smartcontractkit/mcms/types" + "github.com/smartcontractkit/cld-changesets/internal/semvers" solana2 "github.com/smartcontractkit/cld-changesets/legacy/pkg/family/solana" - "github.com/smartcontractkit/cld-changesets/pkg/cldfutil" familysolana "github.com/smartcontractkit/cld-changesets/pkg/family/solana" ) @@ -37,48 +37,48 @@ type Deps struct { var ( DeployAccessControllerOp = operations.NewOperation( "deploy-access-controller", - &cldfutil.Version1_0_0, + &semvers.V1_0_0, "Deploys access controller for solana", Deploy, ) DeployMCMProgramOp = operations.NewOperation( "deploy-mcm-program", - &cldfutil.Version1_0_0, + &semvers.V1_0_0, "Deploys mcm for solana", Deploy, ) DeployTimelockOp = operations.NewOperation( "deploy-timelock-program", - &cldfutil.Version1_0_0, + &semvers.V1_0_0, "Deploys timelock for solana", Deploy, ) InitAccessControllerOp = operations.NewOperation( "init-access-controller", - &cldfutil.Version1_0_0, + &semvers.V1_0_0, "Initializes access controller for solana", initAccessController, ) InitMCMOp = operations.NewOperation( "init-mcm-program", - &cldfutil.Version1_0_0, + &semvers.V1_0_0, "Initializes MCMProgram for solana", initMCM, ) InitTimelockOp = operations.NewOperation( "init-timelock-program", - &cldfutil.Version1_0_0, + &semvers.V1_0_0, "Initializes timelock for solana", initTimelock, ) AddAccessOp = operations.NewOperation( "add-access-op", - &cldfutil.Version1_0_0, + &semvers.V1_0_0, "Adds access to provided role for timelock", addAccess, ) @@ -123,7 +123,7 @@ func initAccessController(b operations.Bundle, deps Deps, in InitAccessControlle return out, fmt.Errorf("access controller program is not deployed for chain sel %d", deps.Chain.ChainSelector()) } - typeAndVersion := cldf.NewTypeAndVersion(in.ContractType, cldfutil.Version1_0_0) + typeAndVersion := cldf.NewTypeAndVersion(in.ContractType, semvers.V1_0_0) _, accessControllerAccountSeed, err := deps.State.GetStateFromType(in.ContractType) if err != nil { return out, fmt.Errorf("failed to get account controller state: %w", err) @@ -234,7 +234,7 @@ func initMCM(b operations.Bundle, deps Deps, in InitMCMInput) (InitMCMOutput, er programID := deps.State.McmProgram mcmBindings.SetProgramID(programID) - typeAndVersion := cldf.NewTypeAndVersion(in.ContractType, cldfutil.Version1_0_0) + typeAndVersion := cldf.NewTypeAndVersion(in.ContractType, semvers.V1_0_0) mcmProgram, mcmSeed, err := deps.State.GetStateFromType(in.ContractType) if err != nil { return out, fmt.Errorf("failed to get mcm state: %w", err) @@ -354,7 +354,7 @@ func initTimelock(b operations.Bundle, deps Deps, in InitTimelockInput) (InitTim programID := deps.State.TimelockProgram timelockBindings.SetProgramID(programID) - typeAndVersion := cldf.NewTypeAndVersion(in.ContractType, cldfutil.Version1_0_0) + typeAndVersion := cldf.NewTypeAndVersion(in.ContractType, semvers.V1_0_0) timelockProgram, timelockSeed, err := deps.State.GetStateFromType(in.ContractType) if err != nil { return out, fmt.Errorf("failed to get timelock state: %w", err) diff --git a/pkg/family/solana/sequences/sequence.go b/pkg/family/solana/sequences/sequence.go index 0ce2113..2aa8859 100644 --- a/pkg/family/solana/sequences/sequence.go +++ b/pkg/family/solana/sequences/sequence.go @@ -6,19 +6,19 @@ import ( "math/big" "github.com/gagliardetto/solana-go" - mcmscontracts "github.com/smartcontractkit/chainlink-deployments-framework/engine/cld/contracts/mcms" - cldfproposalutils "github.com/smartcontractkit/chainlink-deployments-framework/engine/cld/mcms/proposalutils" - mcmsTypes "github.com/smartcontractkit/mcms/types" - "github.com/smartcontractkit/wsrpc/logger" timelockBindings "github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings/v0_1_1/timelock" "github.com/smartcontractkit/chainlink-deployments-framework/datastore" cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" + mcmscontracts "github.com/smartcontractkit/chainlink-deployments-framework/engine/cld/contracts/mcms" + cldfproposalutils "github.com/smartcontractkit/chainlink-deployments-framework/engine/cld/mcms/proposalutils" "github.com/smartcontractkit/chainlink-deployments-framework/operations" + mcmsTypes "github.com/smartcontractkit/mcms/types" + "github.com/smartcontractkit/wsrpc/logger" + "github.com/smartcontractkit/cld-changesets/internal/semvers" solana2 "github.com/smartcontractkit/cld-changesets/legacy/pkg/family/solana" "github.com/smartcontractkit/cld-changesets/legacy/pkg/family/solana/solutils" - "github.com/smartcontractkit/cld-changesets/pkg/cldfutil" familysolana "github.com/smartcontractkit/cld-changesets/pkg/family/solana" solops "github.com/smartcontractkit/cld-changesets/pkg/family/solana/operations" ) @@ -26,7 +26,7 @@ import ( var ( DeployMCMSWithTimelockSeq = operations.NewSequence( "deploy-access-controller-seq", - &cldfutil.Version1_0_0, + &semvers.V1_0_0, "Deploy AccessController,MCM and Timelock programs, Initialize them, set up role", deployMCMSWithTimelock, ) @@ -84,7 +84,7 @@ func deployMCMSWithTimelock(b operations.Bundle, deps solops.Deps, in DeployMCMS } func deployAccessController(b operations.Bundle, deps solops.Deps) error { - typeAndVersion := cldf.NewTypeAndVersion(mcmscontracts.AccessControllerProgram, cldfutil.Version1_0_0) + typeAndVersion := cldf.NewTypeAndVersion(mcmscontracts.AccessControllerProgram, semvers.V1_0_0) log := logger.With(b.Logger, "chain", deps.Chain.String(), "contract", typeAndVersion.String()) programID, _, err := deps.State.GetStateFromType(mcmscontracts.AccessControllerProgram) @@ -115,7 +115,7 @@ func deployAccessController(b operations.Bundle, deps solops.Deps) error { err = deps.Datastore.Addresses().Add(datastore.AddressRef{ ChainSelector: deps.Chain.ChainSelector(), Address: programID.String(), - Version: &cldfutil.Version1_0_0, + Version: &semvers.V1_0_0, Type: datastore.ContractType(mcmscontracts.AccessControllerProgram), }) if err != nil { @@ -148,7 +148,7 @@ func initAccessController(b operations.Bundle, deps solops.Deps) error { } func deployMCM(b operations.Bundle, deps solops.Deps) error { - typeAndVersion := cldf.NewTypeAndVersion(mcmscontracts.ManyChainMultisigProgram, cldfutil.Version1_0_0) + typeAndVersion := cldf.NewTypeAndVersion(mcmscontracts.ManyChainMultisigProgram, semvers.V1_0_0) log := logger.With(b.Logger, "chain", deps.Chain.String(), "contract", typeAndVersion.String()) programID, _, err := deps.State.GetStateFromType(mcmscontracts.ManyChainMultisigProgram) @@ -178,7 +178,7 @@ func deployMCM(b operations.Bundle, deps solops.Deps) error { err = deps.Datastore.Addresses().Add(datastore.AddressRef{ ChainSelector: deps.Chain.ChainSelector(), Address: programID.String(), - Version: &cldfutil.Version1_0_0, + Version: &semvers.V1_0_0, Type: datastore.ContractType(mcmscontracts.ManyChainMultisig), }) if err != nil { @@ -224,7 +224,7 @@ func initMCM(b operations.Bundle, deps solops.Deps, cfg cldfproposalutils.MCMSWi } func deployTimelock(b operations.Bundle, deps solops.Deps) error { - typeAndVersion := cldf.NewTypeAndVersion(mcmscontracts.RBACTimelockProgram, cldfutil.Version1_0_0) + typeAndVersion := cldf.NewTypeAndVersion(mcmscontracts.RBACTimelockProgram, semvers.V1_0_0) log := logger.With(b.Logger, "chain", deps.Chain.String(), "contract", typeAndVersion.String()) programID, _, err := deps.State.GetStateFromType(mcmscontracts.RBACTimelock) @@ -257,7 +257,7 @@ func deployTimelock(b operations.Bundle, deps solops.Deps) error { err = deps.Datastore.Addresses().Add(datastore.AddressRef{ ChainSelector: deps.Chain.ChainSelector(), Address: programID.String(), - Version: &cldfutil.Version1_0_0, + Version: &semvers.V1_0_0, Type: datastore.ContractType(mcmscontracts.RBACTimelockProgram), }) if err != nil {