Documentation
¶
Index ¶
- Constants
- Variables
- func LoadOnchainStatesui(env cldf.Environment) (map[uint64]CCIPChainState, error)
- func MinterCapQualifier(symbol string, holder string) string
- func QualifierContainsSuiAddress(qualifier, address string) bool
- func SaveSuiAddress(ab *cldf.AddressBookMap, ds fdatastore.MutableAddressRefStore, ...) error
- func StoreMCMSInAddressBook(ab *cldf.AddressBookMap, ds fdatastore.MutableAddressRefStore, ...) error
- func StrTo32(s string) ([]byte, error)
- func StrToBytes(s string) ([]byte, error)
- func SuiAddressesEqual(a, b string) bool
- func TokenQualifier(symbol string) string
- func ValidateNoDatastoreConflicts(e cldf.Environment, chainSelector uint64, replaceExisting bool, ...) error
- type CCIPChainState
- func (s CCIPChainState) EffectiveCCIPPackageID() string
- func (s CCIPChainState) EffectiveOffRampPackageID() string
- func (s CCIPChainState) EffectiveOnRampPackageID() string
- func (s CCIPChainState) GenerateView(e *cldf.Environment, selector uint64, chainName string) (SuiChainView, error)
- func (s CCIPChainState) HasMCMSInstance(instance MCMSInstance) bool
- func (s CCIPChainState) MCMSState(isFastCurse bool) MCMSStateFields
- func (s CCIPChainState) MCMSStateByInstance(instance MCMSInstance) MCMSStateFields
- type CCIPPoolState
- type MCMSInstance
- type MCMSStateFields
- type ManagedTokenFaucetState
- type ManagedTokenState
- type PlannedRef
- type SuiChainView
- type TokenPoolType
Constants ¶
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" )
const ChainSingletonQualifier = ""
ChainSingletonQualifier is used for types with one instance per chain.
const MCMSFastCurseLabel = "fastcurse"
MCMSLabel is the address book label applied to the fastcurse MCMS instance.
const SupersededLabel = "superseded"
SupersededLabel marks a ref that no longer represents the active deployment.
Variables ¶
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" )
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.
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
var DefaultOffRampSeqConfig = offrampops.DeployAndInitCCIPOffRampSeqInput{ PremissionExecThresholdSeconds: uint32(60 * 60 * 8), SourceChainsIsEnabled: []bool{true}, SourceChainsIsRMNVerificationDisabled: []bool{true}, }
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{{}}, }, }
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 ¶
MinterCapQualifier qualifies a token minter capability by token and holder.
func QualifierContainsSuiAddress ¶
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 StrToBytes ¶
func SuiAddressesEqual ¶
SuiAddressesEqual compares valid Sui addresses canonically; other strings compare exactly.
func TokenQualifier ¶
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 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 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" )
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
ccip_router
Package routerops provides operations for deploying and managing CCIP Router contracts.
|
Package routerops provides operations for deploying and managing CCIP Router contracts. |