deployment

package module
v0.0.0-...-3610b3f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 2, 2026 License: MIT Imports: 20 Imported by: 5

Documentation

Index

Constants

View Source
const (
	MCMSInstanceSlow      MCMSInstance = "slow"
	MCMSInstanceFastCurse MCMSInstance = MCMSFastCurseLabel

	// CLLCCIPQualifier and RMNMCMSQualifier are the datastore qualifiers for the Sui MCMS
	// instances: slow -> CLLCCIP, fastcurse -> RMNMCMS.
	CLLCCIPQualifier = "CLLCCIP"
	RMNMCMSQualifier = "RMNMCMS"
)
View Source
const ChainSingletonQualifier = ""

ChainSingletonQualifier is used for types with one instance per chain.

View Source
const MCMSFastCurseLabel = "fastcurse"

MCMSLabel is the address book label applied to the fastcurse MCMS instance.

View Source
const SupersededLabel = "superseded"

SupersededLabel marks a ref that no longer represents the active deployment.

Variables

View Source
var (
	// CCIP
	SuiCCIPType                      deployment.ContractType = "SuiCCIP"
	SuiLatestCCIPPackageIDType       deployment.ContractType = "SuiLatestCCIPPackageID"
	SuiCCIPObjectRefType             deployment.ContractType = "SuiCCIPObjectRef"
	SuiCCIPOwnerCapObjectIDType      deployment.ContractType = "SuiCCIPOwnerCapObjectID"
	SuiCurserCapObjectIDType         deployment.ContractType = "SuiCurserCapObjectID"
	SuiCCIPUpgradeCapObjectIDType    deployment.ContractType = "SuiCCIPUpgradeCapObjectID"
	SuiFeeQuoterCapType              deployment.ContractType = "SuiCCIPFeeQuoterCap"
	SuiOnRampType                    deployment.ContractType = "SuiOnRamp"
	SuiLatestOnRampPackageIDType     deployment.ContractType = "SuiLatestOnRampPackageID"
	SuiOnRampStateObjectIDType       deployment.ContractType = "SuiOnRampStateObjectID"
	SuiOnRampOwnerCapObjectIDType    deployment.ContractType = "SuiOnRampOwnerCapObjectID"
	SuiOnRampUpgradeCapObjectIDType  deployment.ContractType = "SuiOnRampUpgradeCapObjectID"
	SuiOffRampType                   deployment.ContractType = "SuiOffRamp"
	SuiLatestOffRampPackageIDType    deployment.ContractType = "SuiLatestOffRampPackageID"
	SuiOffRampOwnerCapObjectIDType   deployment.ContractType = "SuiOffRampOwnerCapObjectID"
	SuiOffRampUpgradeCapObjectIDType deployment.ContractType = "SuiOffRampUpgradeCapObjectID"
	SuiOffRampStateObjectIDType      deployment.ContractType = "SuiOffRampStateObjectID"
	SuiLockReleaseTPType             deployment.ContractType = "SuiLockReleaseToken"
	SuiLockReleaseTPStateType        deployment.ContractType = "SuiLockReleaseTokenState"

	// CCIP Router
	SuiCCIPRouterType                 deployment.ContractType = "SuiRouter"
	SuiCCIPRouterStateObjectType      deployment.ContractType = "SuiRouterStateObjectID"
	SuiCCIPRouterOwnerCapObjectIDType deployment.ContractType = "SuiCCIPRouterOwnerCapObjectID"
	SuiRouterUpgradeCapObjectIDType   deployment.ContractType = "SuiRouterUpgradeCapObjectID"

	// MCMS Related
	SuiMCMSType                        deployment.ContractType = "SuiManyChainMultisig"
	SuiMcmsPackageIDType               deployment.ContractType = "SuiManyChainMultisigPackageID"
	SuiMcmsObjectIDType                deployment.ContractType = "SuiManyChainMultisigObjectID"
	SuiMcmsRegistryObjectIDType        deployment.ContractType = "SuiManyChainMultisigRegistryObjectID"
	SuiMcmsAccountStateObjectIDType    deployment.ContractType = "SuiManyChainMultisigAccountStateObjectID"
	SuiMcmsAccountOwnerCapObjectIDType deployment.ContractType = "SuiManyChainMultisigAccountOwnerCapObjectID"
	SuiMcmsTimelockObjectIDType        deployment.ContractType = "SuiManyChainMultisigTimelockObjectID"
	SuiMcmsDeployerObjectIDType        deployment.ContractType = "SuiManyChainMultisigDeployerObjectID"

	// MCMS User Related
	SuiMcmsUserPackageIDType        deployment.ContractType = "SuiMcmsUserPackageID"
	SuiMcmsUserDataObjectIDType     deployment.ContractType = "SuiMcmsUserDataObjectID"
	SuiMcmsUserOwnerCapObjectIDType deployment.ContractType = "SuiMcmsUserOwnerCapObjectID"

	// Link related
	SuiLinkTokenObjectMetadataID deployment.ContractType = "SuiLinkTokenObjectMetadataID"
	SuiLinkTokenTreasuryCapID    deployment.ContractType = "SuiLinkTokenTreasuryCapID"
	SuiLinkTokenUpgradeCapID     deployment.ContractType = "SuiLinkTokenUpgradeCapID"
	SuiLinkTokenType             deployment.ContractType = "SuiLinkToken"

	// Managed Token related
	// the coins under management
	SuiManagedTokenType               deployment.ContractType = "SuiManagedToken"
	SuiManagedTokenCoinMetadataIDType deployment.ContractType = "SuiManagedTokenCoinMetadataID"
	SuiManagedTokenTreasuryCapIDType  deployment.ContractType = "SuiManagedTokenTreasuryCapID"
	SuiManagedTokenUpgradeCapIDType   deployment.ContractType = "SuiManagedTokenUpgradeCapID"
	// the managed token wrapper package for the tokens
	SuiManagedTokenPackageIDType     deployment.ContractType = "SuiManagedTokenPackageID"
	SuiManagedTokenOwnerCapObjectID  deployment.ContractType = "SuiManagedTokenOwnerCapObjectID"
	SuiManagedTokenStateObjectID     deployment.ContractType = "SuiManagedTokenStateObjectID"
	SuiManagedTokenPublisherObjectId deployment.ContractType = "SuiManagedTokenPublisherObjectId"
	// SuiManagedTokenMinterCapID is holder-scoped: one cap per authorised minter, qualified
	// by MinterCapQualifier. The cap the faucet holds has its own type below, because a
	// faucet is a singleton per token and would otherwise share a holder (the deployer) with
	// the cap minted at token deploy time.
	SuiManagedTokenMinterCapID deployment.ContractType = "SuiManagedTokenMinterCapID"
	// Managed token faucet package
	SuiManagedTokenFaucetPackageIDType          deployment.ContractType = "SuiManagedTokenFaucetPackageID"
	SuiManagedTokenFaucetStateObjectIDType      deployment.ContractType = "SuiManagedTokenFaucetStateObjectID"
	SuiManagedTokenFaucetUpgradeCapObjectIDType deployment.ContractType = "SuiManagedTokenFaucetUpgradeCapObjectID"
	SuiManagedTokenFaucetMinterCapIDType        deployment.ContractType = "SuiManagedTokenFaucetMinterCapID"

	// BnM Token Pool related
	SuiBnMTokenPoolType                   deployment.ContractType = "SuiBnMTokenPool"
	SuiBnMTokenPoolStateType              deployment.ContractType = "SuiBnMTokenPoolState"
	SuiBnMTokenPoolOwnerCapObjectIDType   deployment.ContractType = "SuiBnMTokenPoolOwnerCapObjectID"
	SuiBnMTokenPoolUpgradeCapObjectIDType deployment.ContractType = "SuiBnMTokenPoolUpgradeCapObjectID"

	// LnR Token Pool related
	SuiLnRTokenPoolType                   deployment.ContractType = "SuiLnRTokenPool"
	SuiLnRTokenPoolStateType              deployment.ContractType = "SuiLnRTokenPoolState"
	SuiLnRTokenPoolOwnerCapObjectIDType   deployment.ContractType = "SuiLnRTokenPoolOwnerCapObjectID"
	SuiLnRTokenPoolUpgradeCapObjectIDType deployment.ContractType = "SuiLnRTokenPoolUpgradeCapObjectID"
	SuiLnRTokenPoolRebalancerCapIDType    deployment.ContractType = "SuiLnRTokenPoolRebalancerCapID"
	// the lock-release coin itself, recorded under its own type rather than the managed-token bucket
	SuiLnRTokenType               deployment.ContractType = "SuiLnRToken"
	SuiLnRTokenCoinMetadataIDType deployment.ContractType = "SuiLnRTokenCoinMetadataID"
	SuiLnRTokenTreasuryCapIDType  deployment.ContractType = "SuiLnRTokenTreasuryCapID"
	SuiLnRTokenUpgradeCapIDType   deployment.ContractType = "SuiLnRTokenUpgradeCapID"

	// Managed Token Pool related
	SuiManagedTokenPoolType                   deployment.ContractType = "SuiManagedTokenPool"
	SuiManagedTokenPoolStateType              deployment.ContractType = "SuiManagedTokenPoolState"
	SuiManagedTokenPoolOwnerCapObjectIDType   deployment.ContractType = "SuiManagedTokenPoolOwnerCapObjectID"
	SuiManagedTokenPoolUpgradeCapObjectIDType deployment.ContractType = "SuiManagedTokenPoolUpgradeCapObjectID"

	// Upgrade Related
	SuiCCIPMockV2              deployment.ContractType = "SuiCCIPMockV2PackageID"
	SuiOnRampMockV2            deployment.ContractType = "SuiOnRampMockV2PackageID"
	SuiOffRampMockV2           deployment.ContractType = "SuiOffRampMockV2PackageID"
	SuiUpgradeRegistryObjectId deployment.ContractType = "SuiUpgradeRegistryObjectId"
)
View Source
var (
	SuiCCIPBnMCoinTypeSuffix = "ccip_burn_mint_token::CCIP_BURN_MINT_TOKEN"
	SuiCCIPLnRCoinTypeSuffix = "ccip_lock_release_token::CCIP_LOCK_RELEASE_TOKEN"
	SuiLinkCoinTypeSuffix    = "link::LINK"
)

Coin type suffixes (module::STRUCT) for the BnM and LINK coins. The coin deploy changesets attach these as a coinType= label on the coin package ref so deriveSuiCoinType can build the correct coin type for any token, including ones whose suffix differs, from that label.

View Source
var DefaultCCIPSeqConfig = ccipops.DeployAndInitCCIPSeqInput{

	MaxFeeJuelsPerMsg:            "200000000000000000000",
	TokenPriceStalenessThreshold: 1000000,

	AddMinFeeUsdCents:    []uint32{3000},
	AddMaxFeeUsdCents:    []uint32{30000},
	AddDeciBps:           []uint16{1000},
	AddDestGasOverhead:   []uint32{1000000},
	AddDestBytesOverhead: []uint32{1000},
	AddIsEnabled:         []bool{true},
	RemoveTokens:         []string{},

	IsEnabled:                         true,
	MaxNumberOfTokensPerMsg:           1,
	MaxDataBytes:                      16_000,
	MaxPerMsgGasLimit:                 3_000_000,
	DestGasOverhead:                   1_000_000,
	DestGasPerPayloadByteBase:         byte(16),
	DestGasPerPayloadByteHigh:         byte(40),
	DestGasPerPayloadByteThreshold:    uint16(3000),
	DestDataAvailabilityOverheadGas:   100,
	DestGasPerDataAvailabilityByte:    16,
	DestDataAvailabilityMultiplierBps: 1,
	ChainFamilySelector:               []byte{40, 18, 213, 44},
	EnforceOutOfOrder:                 false,
	DefaultTokenFeeUsdCents:           25,
	DefaultTokenDestGasOverhead:       90_000,
	DefaultTxGasLimit:                 200_000,
	GasMultiplierWeiPerEth:            1_000_000_000_000_000_000,
	GasPriceStalenessThreshold:        1_000_000,
	NetworkFeeUsdCents:                10,

	PremiumMultiplierWeiPerEth: []uint64{900_000_000_000_000_000},
}

These are the static/default FeeQuoter + chain params

View Source
var DefaultOffRampSeqConfig = offrampops.DeployAndInitCCIPOffRampSeqInput{
	PremissionExecThresholdSeconds:        uint32(60 * 60 * 8),
	SourceChainsIsEnabled:                 []bool{true},
	SourceChainsIsRMNVerificationDisabled: []bool{true},
}
View Source
var DefaultOnRampSeqConfig = onrampops.DeployAndInitCCIPOnRampSeqInput{
	OnRampInitializeInput: onrampops.OnRampInitializeInput{
		DestChainAllowListEnabled: []bool{true},
	},

	ApplyDestChainConfigureOnRampInput: onrampops.ApplyDestChainConfigureOnRampInput{

		DestChainAllowListEnabled: []bool{false},
	},

	ApplyAllowListUpdatesInput: onrampops.ApplyAllowListUpdatesInput{

		DestChainAllowListEnabled:     []bool{false},
		DestChainAddAllowedSenders:    [][]string{{}},
		DestChainRemoveAllowedSenders: [][]string{{}},
	},
}
View Source
var (
	Version1_0_0 = *semver.MustParse("1.0.0")
)

Functions

func LoadOnchainStatesui

func LoadOnchainStatesui(env cldf.Environment) (map[uint64]CCIPChainState, error)

LoadOnchainStatesui loads chain state for Sui chains from env. Address metadata is read from env.DataStore (address_refs.json).

func MinterCapQualifier

func MinterCapQualifier(symbol string, holder string) string

MinterCapQualifier qualifies a token minter capability by token and holder.

func QualifierContainsSuiAddress

func QualifierContainsSuiAddress(qualifier, address string) bool

QualifierContainsSuiAddress detects an address-derived qualifier. It supports padded and unpadded 0x-prefixed forms; bare hex is intentionally not matched because writers used 0x.

func SaveSuiAddress

func SaveSuiAddress(
	ab *cldf.AddressBookMap,
	ds fdatastore.MutableAddressRefStore,
	chainSelector uint64,
	address string,
	tv cldf.TypeAndVersion,
	qualifier string,
) error

SaveSuiAddress writes a single Sui contract address to both the legacy address book and the datastore, deriving identical metadata from one TypeAndVersion so the two stores cannot drift. The datastore AddressRef copies the address-book labels (token symbol, "fastcurse") so LoadOnchainStatesui reconstructs the same TypeAndVersion.

The caller that knows the semantic qualifier provides it explicitly: it is never derived from the contract's own address and never derived from the label list or its order. Build it with the constructors in qualifiers.go TokenQualifier for token-scoped types, MinterCapQualifier for holder-scoped capability objects, MCMSInstance.DatastoreQualifier for the MCMS instances, ChainSingletonQualifier for the rest. The address-book labels are still copied onto the ref so the Sui loader reconstructs the same TypeAndVersion.

func StoreMCMSInAddressBook

func StoreMCMSInAddressBook(ab *cldf.AddressBookMap, ds fdatastore.MutableAddressRefStore, chainSelector uint64, mcmsReport mcmsops.DeployMCMSSeqOutput, instance MCMSInstance) error

StoreMCMSInAddressBook saves one MCMS deployment's seven object IDs to both the address book and the datastore under the correct instance label, so slow and fastcurse entries can coexist on one chain. Each entry is dual-written via SaveSuiAddress.

func StrTo32

func StrTo32(s string) ([]byte, error)

func StrToBytes

func StrToBytes(s string) ([]byte, error)

func SuiAddressesEqual

func SuiAddressesEqual(a, b string) bool

SuiAddressesEqual compares valid Sui addresses canonically; other strings compare exactly.

func TokenQualifier

func TokenQualifier(symbol string) string

TokenQualifier normalizes a token symbol for use as a datastore key.

func ValidateNoDatastoreConflicts

func ValidateNoDatastoreConflicts(
	e cldf.Environment,
	chainSelector uint64,
	replaceExisting bool,
	plan func() ([]PlannedRef, error),
) error

ValidateNoDatastoreConflicts reports whether any of the rows a changeset is about to write would take a datastore key that is already occupied.

Call it from VerifyPreconditions, which the changeset runner invokes before Apply. A conflict caught there costs a re-run; the same conflict discovered during Apply means the objects are already deployed on chain, and since a changeset that fails mid-way returns an empty ChangesetOutput, every address it had recorded up to that point is discarded too.

An occupied key is an error unless replaceExisting says the caller means to take it, a redeploy legitimately replaces the row a previous deployment wrote. That intent has to be stated rather than inferred: the two cases are indistinguishable from the datastore's side, and the framework resolves them identically and silently (both MemoryAddressRefStore.Upsert and MemoryDataStore.Merge replace on a key hit, with no error and no record of what was displaced). When the caller does opt in, the displaced address is logged.

Two things this cannot see, both structural. It compares against the environment datastore as it stands before the changeset runs, so it will not catch two changesets in the same pipeline claiming one key that collision only materialises when their outputs are merged. And it does not mark the row it displaces as superseded: keeping the old row alongside the new one means re-qualifying it, which is a key change and belongs to the re-qualification tooling, not to a deploy changeset.

This check reads only the datastore, not the address book, and legacy address-derived rows occupy different keys from their semantic replacements. The state loader gives semantic rows deterministic precedence while the re-qualification tooling retires the legacy rows.

Types

type CCIPChainState

type CCIPChainState struct {
	// MCMS related (normal governance instance)
	MCMSPackageID               string
	MCMSStateObjectID           string
	MCMSRegistryObjectID        string
	MCMSDeployerStateObjectID   string
	MCMSAccountStateObjectID    string
	MCMSAccountOwnerCapObjectID string
	MCMSTimelockObjectID        string

	// FastCurse MCMS related (fastcurse governance instance, stored with label "fastcurse")
	FastCurseMCMSPackageID               string
	FastCurseMCMSStateObjectID           string
	FastCurseMCMSRegistryObjectID        string
	FastCurseMCMSDeployerStateObjectID   string
	FastCurseMCMSAccountStateObjectID    string
	FastCurseMCMSAccountOwnerCapObjectID string
	FastCurseMCMSTimelockObjectID        string

	// CCIP related
	CCIPAddress            string
	LatestCCIPPackageID    string
	CCIPObjectRef          string
	CCIPOwnerCapObjectId   string
	CurserCapObjectId      string
	CCIPUpgradeCapObjectId string
	FeeQuoterCapId         string

	// CCIP Router related
	CCIPRouterAddress          string
	CCIPRouterStateObjectID    string
	CCIPRouterOwnerCapObjectId string
	CCIPRouterUpgradeCapId     string

	// OnRamp related
	OnRampAddress          string
	LatestOnRampPackageID  string
	OnRampStateObjectId    string
	OnRampOwnerCapObjectId string
	OnRampUpgradeCapId     string

	// OffRamp related
	OffRampAddress         string
	LatestOffRampPackageID string
	OffRampStateObjectId   string
	OffRampOwnerCapId      string
	OffRampUpgradeCapId    string

	// LINK token related
	LinkTokenAddress        string
	LinkTokenCoinMetadataId string
	LinkTokenTreasuryCapId  string
	LinkTokenUpgradeCapId   string

	// Managed Token related
	ManagedTokens       map[string]ManagedTokenState
	ManagedTokenFaucets map[string]ManagedTokenFaucetState

	// Token pools related
	LnRTokenPools     map[string]CCIPPoolState
	BnMTokenPools     map[string]CCIPPoolState
	ManagedTokenPools map[string]CCIPPoolState

	// mock upgrade related
	OnRampMockV2PackageId  string
	OffRampMockV2PackageId string
	CCIPMockV2PackageId    string
}

func (CCIPChainState) EffectiveCCIPPackageID

func (s CCIPChainState) EffectiveCCIPPackageID() string

EffectiveCCIPPackageID returns the latest upgraded CCIP package head when recorded, otherwise the genesis package ID from initial deploy.

func (CCIPChainState) EffectiveOffRampPackageID

func (s CCIPChainState) EffectiveOffRampPackageID() string

EffectiveOffRampPackageID returns the latest upgraded OffRamp package head when recorded, otherwise the genesis package ID from initial deploy.

func (CCIPChainState) EffectiveOnRampPackageID

func (s CCIPChainState) EffectiveOnRampPackageID() string

EffectiveOnRampPackageID returns the latest upgraded OnRamp package head when recorded, otherwise the genesis package ID from initial deploy.

func (CCIPChainState) GenerateView

func (s CCIPChainState) GenerateView(e *cldf.Environment, selector uint64, chainName string) (SuiChainView, error)

func (CCIPChainState) HasMCMSInstance

func (s CCIPChainState) HasMCMSInstance(instance MCMSInstance) bool

HasMCMSInstance reports whether the chain state has a deployed MCMS for the instance.

func (CCIPChainState) MCMSState

func (s CCIPChainState) MCMSState(isFastCurse bool) MCMSStateFields

MCMSState returns the MCMS object IDs for the requested instance. When isFastCurse is true the fastcurse instance fields are returned; otherwise the normal governance instance fields are returned.

func (CCIPChainState) MCMSStateByInstance

func (s CCIPChainState) MCMSStateByInstance(instance MCMSInstance) MCMSStateFields

MCMSStateByInstance returns the MCMS object IDs for the requested instance.

type CCIPPoolState

type CCIPPoolState struct {
	PackageID          string
	StateObjectId      string
	OwnerCapObjectId   string
	UpgradeCapObjectId string
	RebalancerCapIds   []string // only applicable for LR TP
}

type MCMSInstance

type MCMSInstance string

MCMSInstance identifies which MCMS deployment on a chain an operation targets. Slow and fastcurse instances share the same address-book type constants and are distinguished by the fastcurse label on address-book entries.

func MCMSInstanceFromFastCurseFlag

func MCMSInstanceFromFastCurseFlag(isFastCurse bool) MCMSInstance

MCMSInstanceFromFastCurseFlag maps the legacy isFastCurse config flag to an instance.

func MCMSInstanceFromQualifier

func MCMSInstanceFromQualifier(qualifier string) (MCMSInstance, bool)

MCMSInstanceFromQualifier is the inverse of DatastoreQualifier: it recovers the instance from a datastore ref's qualifier, reporting false for a qualifier that names no instance.

It lives next to DatastoreQualifier so the two directions cannot drift; the round trip is pinned by test. MCMSFastCurseLabel is accepted because rows written before the purpose qualifiers existed carry "fastcurse" in the qualifier field.

func (MCMSInstance) AddressBookLabel

func (i MCMSInstance) AddressBookLabel() string

AddressBookLabel returns the address-book label for this instance. The slow instance uses no label.

func (MCMSInstance) DatastoreQualifier

func (i MCMSInstance) DatastoreQualifier() string

DatastoreQualifier returns the datastore qualifier for this instance: slow -> CLLCCIP, fastcurse -> RMNMCMS. The fastcurse address-book label is still added separately (see AddressBookLabel) so the Sui loader, which special-cases it, keeps working unchanged.

func (MCMSInstance) IsFastCurse

func (i MCMSInstance) IsFastCurse() bool

IsFastCurse reports whether this instance is the fastcurse MCMS.

func (MCMSInstance) String

func (i MCMSInstance) String() string

type MCMSStateFields

type MCMSStateFields struct {
	PackageID               string
	StateObjectID           string
	RegistryObjectID        string
	DeployerStateObjectID   string
	AccountStateObjectID    string
	AccountOwnerCapObjectID string
	TimelockObjectID        string
}

MCMSStateFields holds the seven object IDs that describe one MCMS deployment.

type ManagedTokenFaucetState

type ManagedTokenFaucetState struct {
	PackageID     string
	StateObjectID string
	// MinterCapObjectId is the managed-token minter cap the faucet mints with. Refs written
	// before the faucet cap had its own contract type land in
	// ManagedTokenState.MinterCapObjectIds instead, so this is empty for those deployments.
	MinterCapObjectID  string
	UpgradeCapObjectId string
}

type ManagedTokenState

type ManagedTokenState struct {
	TokenPackageID      string
	TokenCoinMetadataID string
	TokenTreasuryCapID  string
	TokenUpgradeCapID   string
	PackageID           string
	StateObjectId       string
	OwnerCapObjectId    string
	MinterCapObjectIds  []string
	PublisherObjectId   string
}

type PlannedRef

type PlannedRef struct {
	Type      cldf.ContractType
	Qualifier string
	// Version defaults to Version1_0_0 when nil, which is what every Sui write site uses.
	Version *semver.Version
	// Address is optional: deploy changesets plan their keys before anything is on chain,
	// when the address is not yet knowable. Import-style changesets (e.g. RecordCurserCap)
	// do know it. When set and equal to the address already recorded under the key, the write
	// is a re-record of the same object a no-op, not a conflict.
	Address string
}

PlannedRef is one datastore row a changeset intends to write, named by the part of the key that is knowable before anything is deployed.

The datastore key is (chainSelector, type, version, qualifier)

func PlannedMCMSRefs

func PlannedMCMSRefs(instance MCMSInstance) []PlannedRef

PlannedMCMSRefs returns the datastore keys a deployment of this MCMS instance will occupy, so a changeset's VerifyPreconditions can check them before anything is deployed.

type SuiChainView

type SuiChainView struct {
	ChainSelector uint64 `json:"chainSelector,omitempty"`
	ChainID       string `json:"chainID,omitempty"`

	MCMSWithTimelock          view.MCMSWithTimelockView `json:"mcmsWithTimelock"`
	FastCurseMCMSWithTimelock view.MCMSWithTimelockView `json:"fastcurseMcmsWithTimelock"`

	CCIP    view.CCIPView               `json:"ccip"`
	OnRamp  map[string]view.OnRampView  `json:"onRamp,omitempty"`
	OffRamp map[string]view.OffRampView `json:"offRamp,omitempty"`
	Router  view.RouterView             `json:"router"`

	TokenPools map[string]map[string]view.TokenPoolView `json:"tokenPools,omitempty"` // TokenSymbol => TokenPool Address => PoolView
}

type TokenPoolType

type TokenPoolType string
const (
	TokenPoolTypeBurnMint    TokenPoolType = "bnm"
	TokenPoolTypeLockRelease TokenPoolType = "lnr"
	TokenPoolTypeManaged     TokenPoolType = "managed"
)

Directories

Path Synopsis
ops
ccip_router
Package routerops provides operations for deploying and managing CCIP Router contracts.
Package routerops provides operations for deploying and managing CCIP Router contracts.
rmn

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL