deployment

package
v0.52.0 Latest Latest
Warning

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

Go to latest
Published: Sep 30, 2025 License: MIT Imports: 25 Imported by: 129

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrInvalidChainSelector = errors.New("invalid chain selector")
	ErrInvalidAddress       = errors.New("invalid address")
	ErrChainNotFound        = errors.New("chain not found")
)
View Source
var (
	ErrInvalidConfig      = errors.New("invalid changeset config")
	ErrInvalidEnvironment = errors.New("invalid environment")
)

Functions

func AddressBookContains

func AddressBookContains(ab AddressBook, chain uint64, addrToFind string) (bool, error)

func ConfirmIfNoError added in v0.0.12

func ConfirmIfNoError(chain evm.Chain, tx *types.Transaction, err error) (uint64, error)

ConfirmIfNoError confirms the transaction if no error occurred. if the error is a DataError, it will return the decoded error message and data.

func ConfirmIfNoErrorWithABI added in v0.0.12

func ConfirmIfNoErrorWithABI(chain evm.Chain, tx *types.Transaction, abi string, err error) (uint64, error)

ConfirmIfNoErrorWithABI confirms the transaction if no error occurred. if the error is a DataError, it will return the decoded error message and data.

func DecodeErr added in v0.0.13

func DecodeErr(encodedABI string, err error) error

DecodeErr decodes an error from a contract call using the contract's ABI. If the error is not decodable, it returns the original error.

func DecodedErrFromABIIfDataErr added in v0.0.12

func DecodedErrFromABIIfDataErr(err error, abi string) error

DecodedErrFromABIIfDataErr decodes the error message and data from a DataError.

func EnsureDeduped

func EnsureDeduped(addrs map[string]TypeAndVersion, bundle []TypeAndVersion) (bool, error)

EnsureDeduped ensures that each contract in the bundle only appears once in the address map. It returns an error if there are more than one instance of a contract. Returns true if every value in the bundle is found once, false otherwise.

func IsValidChainSelector added in v0.0.13

func IsValidChainSelector(cs uint64) error

IsValidChainSelector checks if the chain selector is valid.

func MaybeDataErr

func MaybeDataErr(err error) error

TODO(giogam): remove this once multiclient is removed from deployment

func MergeChangesetOutput added in v0.0.6

func MergeChangesetOutput(env Environment, dest *ChangesetOutput, src ChangesetOutput) error

MergeChangesetOutput merges the source ChangesetOutput into the destination ChangesetOutput. It is useful to combine multiple ChangesetOutput objects into one to create one consolidated changeset from multiple granular changesets. Ensure to run proposalutils.AggregateProposals at the end of consolidated changeset to ensure the proposals are merged correctly.

func SearchAddressBook

func SearchAddressBook(ab AddressBook, chain uint64, typ ContractType) (string, error)

SearchAddressBook search an address book for a given chain and contract type and return the first matching address.

func SimTransactOpts added in v0.0.13

func SimTransactOpts() *bind.TransactOpts

SimTransactOpts is useful to generate just the calldata for a given gethwrapper method.

Types

type AddressBook

type AddressBook interface {
	Save(chainSelector uint64, address string, tv TypeAndVersion) error
	Addresses() (map[uint64]map[string]TypeAndVersion, error)
	AddressesForChain(chain uint64) (map[string]TypeAndVersion, error)
	// Allows for merging address books (e.g. new deployments with existing ones)
	Merge(other AddressBook) error
	Remove(ab AddressBook) error
}

AddressBook is a simple interface for storing and retrieving contract addresses across chains. It is family agnostic as the keys are chain selectors. We store rather than derive typeAndVersion as some contracts do not support it. For ethereum addresses are always stored in EIP55 format.

type AddressBookMap

type AddressBookMap struct {
	// contains filtered or unexported fields
}

func NewMemoryAddressBook

func NewMemoryAddressBook() *AddressBookMap

TODO: Maybe could add an environment argument which would ensure only mainnet/testnet chain selectors are used for further safety?

func NewMemoryAddressBookFromMap

func NewMemoryAddressBookFromMap(addressesByChain map[uint64]map[string]TypeAndVersion) *AddressBookMap

func (*AddressBookMap) Addresses

func (m *AddressBookMap) Addresses() (map[uint64]map[string]TypeAndVersion, error)

func (*AddressBookMap) AddressesForChain

func (m *AddressBookMap) AddressesForChain(chainSelector uint64) (map[string]TypeAndVersion, error)

func (*AddressBookMap) Merge

func (m *AddressBookMap) Merge(ab AddressBook) error

Merge will merge the addresses from another address book into this one. It will error on any existing addresses.

func (*AddressBookMap) Remove

func (m *AddressBookMap) Remove(ab AddressBook) error

Remove removes the address book addresses specified via the argument from the AddressBookMap. Errors if all the addresses in the given address book are not contained in the AddressBookMap.

func (*AddressBookMap) Save

func (m *AddressBookMap) Save(chainSelector uint64, address string, typeAndVersion TypeAndVersion) error

Save will save an address for a given chain selector. It will error if there is a conflicting existing address. thread safety version of the save method

type AddressesByChain

type AddressesByChain map[uint64]map[string]TypeAndVersion

type ChangeLogic added in v0.0.6

type ChangeLogic[C any] func(e Environment, config C) (ChangesetOutput, error)

ChangeLogic encapsulates the active behavior of a ChangeSetV2. The config struct contains environment-specific inputs for this logical change. For example, it might contain the chainSelectors against which this change logic should be applied, or certain contract addresses or configuration values to be used in this change. The function should perform any deployment or configuration tasks, compose and propose job-specs, and generate any MCMS proposals necessary. This is the standalone version of ChangeSetV2.Apply for use with CreateChangeSet

ChangeLogic functions should operate on a modest number of chains to reduce the risk of partial failures.

type ChangeSet added in v0.0.6

type ChangeSet[C any] func(e Environment, config C) (ChangesetOutput, error)

ChangeSet is equivalent to ChangeLogic Deprecated: use the ChangeLogic type, or an instance of a ChangeSetV2 in infrastructure or validation code.

type ChangeSetV2 added in v0.0.6

type ChangeSetV2[C any] interface {
	// Apply performs the logic of the changeset, including any side effects, such as on-chain (non-MCMS) writes or
	// contract deployments,  job-spec creation and Job-Distributor interaction, MCMS proposal creation, etc. It should
	// return the ingredients of the side effects in a ChangesetOutput.
	Apply(e Environment, config C) (ChangesetOutput, error)

	// VerifyPreconditions function verifies the preconditions of the config. It should have no side effects, instead
	// returning an error if the ChangeSetV2 should not be applied, or nil if the ChangeSetV2 is safe to apply.
	VerifyPreconditions(e Environment, config C) error
}

ChangeSetV2 is a type which encapsulates the logic to perform a set of changes to be made to an environment, in the context of deploying Chainlink's product operations - namely deploying and configuring contracts, generating and proposing TOML job-specs and interacting with the Job Distributor, and creating MCMS proposals.

ChangeSetV2 has a pre-validation function which is optional (can be implemented as a no-op), which execution environments (such as the migrations infrastructure in chainlink-deployments) should execute before invoking the Apply method.

> Note: ChangeSetV2 replaces ChangeSet, though its Apply method is identical in signature to a ChangeSet function.

func CreateChangeSet added in v0.0.6

func CreateChangeSet[C any](applyFunc ChangeLogic[C], verifyFunc func(e Environment, config C) error) ChangeSetV2[C]

CreateChangeSet creates a ChangeSetV2 from an existing execution function (or an older ChangeSet) and a precondition verification function.

func CreateLegacyChangeSet added in v0.0.6

func CreateLegacyChangeSet[C any](changeset ChangeSet[C]) ChangeSetV2[C]

type ChangesetOutput added in v0.0.6

type ChangesetOutput struct {
	// Deprecated: Prefer Jobs instead.
	JobSpecs                   map[string][]string `deprecated:"true"`
	Jobs                       []ProposedJob
	MCMSTimelockProposals      []mcms.TimelockProposal
	DescribedTimelockProposals []string
	MCMSProposals              []mcms.Proposal
	// Deprecated: AddressBook is deprecated and will be removed in future versions.
	// Please use DataStore instead. If you still need to use AddressBook in your code,
	// be aware that you may encounter CI failures due to linting errors.
	// To work around this, you can disable the linter for that specific line using the //nolint directive.
	AddressBook AddressBook
	DataStore   datastore.MutableDataStore
	// Reports are populated by the Operations API with the
	// results of the operations executed in the changeset.
	Reports []operations.Report[any, any]
}

ChangesetOutput is the output of a Changeset function. Think of it like a state transition output. The address book here should contain only new addresses created in this changeset.

type ContractDeploy added in v0.0.12

type ContractDeploy[C any] struct {
	Address  common.Address     // We leave this incase a Go binding doesn't have Address()
	Contract C                  // Expected to be a Go binding
	Tx       *types.Transaction // Incase the caller needs for example tx hash info for
	Tv       TypeAndVersion
	Err      error
}

ContractDeploy represents the result of an EVM contract deployment via an abigen Go binding. It contains all the return values as they are useful in different ways.

func DeployContract added in v0.0.12

func DeployContract[C any](
	lggr logger.Logger,
	chain cldf_evm.Chain,
	addressBook AddressBook,
	deploy func(chain cldf_evm.Chain) ContractDeploy[C],
) (*ContractDeploy[C], error)

DeployContract deploys an EVM contract and records the address in the provided address book if the deployment was confirmed onchain. Deploying and saving the address is a very common pattern so this helps to reduce boilerplate. It returns an error if the deployment failed, the tx was not confirmed or the address could not be saved.

type ContractType

type ContractType string

ContractType is a simple string type for identifying contract types.

func (ContractType) String

func (ct ContractType) String() string

type Environment added in v0.0.6

type Environment struct {
	Name   string
	Logger logger.Logger
	// Deprecated: AddressBook is deprecated and will be removed in future versions.
	// Please use DataStore instead. If you still need to use AddressBook in your code,
	// be aware that you may encounter CI failures due to linting errors.
	// To work around this, you can disable the linter for that specific line using the //nolint directive.
	ExistingAddresses AddressBook
	DataStore         datastore.DataStore

	Catalog datastore.CatalogStore

	NodeIDs    []string
	Offchain   offchain.Client
	GetContext func() context.Context
	OCRSecrets ocr.OCRSecrets
	// OperationsBundle contains dependencies required by the operations API.
	OperationsBundle operations.Bundle
	// BlockChains is the container of all chains in the environment.
	BlockChains chain.BlockChains
}

Environment represents an instance of a deployed product including on and offchain components. It is intended to be cross-family to enable a coherent view of a product deployed to all its chains. TODO: Add SolChains, AptosChain etc. using Go bindings/libraries from their respective repositories i.e. chainlink-solana, chainlink-cosmos You can think of ExistingAddresses as a set of family agnostic "onchain pointers" meant to be used in conjunction with chain fields to read/write relevant chain state. Similarly, you can think of NodeIDs as "offchain pointers" to be used in conjunction with the Offchain client to read/write relevant offchain state (i.e. state in the DON(s)).

func NewEnvironment added in v0.0.6

func NewEnvironment(
	name string,
	logger logger.Logger,
	existingAddrs AddressBook,
	dataStore datastore.DataStore,
	nodeIDs []string,
	offchain offchain.Client,
	ctx func() context.Context,
	secrets ocr.OCRSecrets,
	blockChains chain.BlockChains,
	opts ...EnvironmentOption,
) *Environment

NewEnvironment creates a new environment for CLDF.

func (Environment) Clone added in v0.0.6

func (e Environment) Clone() Environment

Clone creates a copy of the environment with a new reference to the address book.

type EnvironmentOption added in v0.18.0

type EnvironmentOption func(*Environment)

EnvironmentOption is a functional option for configuring an Environment

func WithCatalog added in v0.18.0

func WithCatalog(catalog datastore.CatalogStore) EnvironmentOption

WithCatalog sets the catalog store for the environment

type LabelSet

type LabelSet map[string]struct{}

LabelSet represents a set of labels on an address book entry.

func NewLabelSet

func NewLabelSet(labels ...string) LabelSet

NewLabelSet initializes a new LabelSet with any number of labels.

func (LabelSet) Add

func (ls LabelSet) Add(labels string)

Add inserts a labels into the set.

func (LabelSet) Contains

func (ls LabelSet) Contains(labels string) bool

Contains checks if the set contains the given labels.

func (LabelSet) Equal

func (ls LabelSet) Equal(other LabelSet) bool

Equal checks if two LabelSets are equal.

func (LabelSet) IsEmpty

func (ls LabelSet) IsEmpty() bool

func (LabelSet) List

func (ls LabelSet) List() []string

List returns the labels as a sorted slice of strings.

func (LabelSet) Remove

func (ls LabelSet) Remove(labels string)

Remove deletes a labels from the set, if it exists.

func (LabelSet) String

func (ls LabelSet) String() string

String returns the labels as a sorted, space-separated string. It implements the fmt.Stringer interface.

type PreconditionVerifier added in v0.0.6

type PreconditionVerifier[C any] func(e Environment, config C) error

PreconditionVerifier functions should evaluate the supplied config, in the context of an environment, to ensure that the config struct is correct, and that the environmental preconditions are as expected. This is the standalone version of ChangeSetV2.VerifyPreconditions for use with CreateChangeSet

If the configuration is unexpected type or format, the changeset should return ErrInvalidConfig. If there are surprising aspects in the environment (a contract expected to be present cannot be located, etc.), then ErrInvalidEnvironment should be returned.

type ProposedJob added in v0.0.6

type ProposedJob struct {
	JobID string
	Node  string
	Spec  string
}

ProposedJob represents a job spec which has been proposed to a node, with the JobID returned by the Job Distributor.

type TypeAndVersion

type TypeAndVersion struct {
	Type    ContractType   `json:"Type"`
	Version semver.Version `json:"Version"`
	Labels  LabelSet       `json:"Labels,omitempty"`
}

func MustTypeAndVersionFromString

func MustTypeAndVersionFromString(s string) TypeAndVersion

func NewTypeAndVersion

func NewTypeAndVersion(t ContractType, v semver.Version) TypeAndVersion

func TypeAndVersionFromString

func TypeAndVersionFromString(s string) (TypeAndVersion, error)

Note this will become useful for validation. When we want to assert an onchain call to typeAndVersion yields whats expected.

func (*TypeAndVersion) AddLabel

func (tv *TypeAndVersion) AddLabel(label string)

AddLabel adds a string to the LabelSet in the TypeAndVersion.

func (TypeAndVersion) Equal

func (tv TypeAndVersion) Equal(other TypeAndVersion) bool

func (TypeAndVersion) String

func (tv TypeAndVersion) String() string

type ViewState added in v0.0.6

type ViewState func(e Environment) (json.Marshaler, error)

ViewState produces a product specific JSON representation of the on and offchain state of the environment.

type ViewStateV2 added in v0.0.6

type ViewStateV2 func(e Environment, previousView json.Marshaler) (json.Marshaler, error)

Jump to

Keyboard shortcuts

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