Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,4 @@ go.work.sum

# Editor/IDE
.idea/
# .vscode/
.vscode/
14 changes: 14 additions & 0 deletions internal/semvers/version.go
Original file line number Diff line number Diff line change
@@ -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")
)
8 changes: 4 additions & 4 deletions legacy/mcms/changesets/deploy_mcms_with_timelock_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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())
Expand All @@ -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
Expand Down
12 changes: 6 additions & 6 deletions legacy/mcms/changesets/fund_mcm_pdas_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)

Expand Down Expand Up @@ -252,27 +252,27 @@ 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
}

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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down Expand Up @@ -124,15 +124,15 @@ 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)
require.NoError(t, err)

// 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(),
Expand Down
6 changes: 3 additions & 3 deletions legacy/pkg/family/aptos/state.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
Expand All @@ -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,
)
}

Expand Down
12 changes: 6 additions & 6 deletions legacy/pkg/family/aptos/state_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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)

Expand All @@ -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)
Expand All @@ -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)

Expand All @@ -99,15 +99,15 @@ 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)

_, err := LoadMCMSAddresses(env, []uint64{chainSel})

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")
Expand Down
4 changes: 2 additions & 2 deletions legacy/pkg/family/evm/changesets/deploy_mcms.go
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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)
}
Expand Down
34 changes: 17 additions & 17 deletions legacy/pkg/family/evm/state.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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}
Expand Down Expand Up @@ -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}
Expand Down Expand Up @@ -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}
Expand Down
Loading
Loading