Documentation
¶
Overview ¶
Package chain provides the core blockchain abstraction layer for the Chainlink Deployments Framework, supporting multiple blockchain families through a unified interface.
Overview ¶
The chain package serves as the foundation for blockchain interactions in the Chainlink Deployments Framework. It defines the core BlockChain interface that all blockchain implementations must satisfy, and provides a powerful collection system for managing and querying multiple chains across different blockchain families.
Architecture ¶
The package consists of several key components:
- BlockChain Interface (blockchain.go) - Core abstraction for all blockchains
- BlockChains Collection (blockchain.go) - Container for managing multiple chains
- Provider Interface (provider.go) - Abstraction for blockchain providers
- Chain Family Support - Type-safe access to specific blockchain implementations
Basic Usage ¶
Core BlockChain Interface ¶
Every blockchain implementation satisfies the BlockChain interface:
import "github.com/smartcontractkit/chainlink-deployments-framework/chain" // BlockChain interface provides basic chain information type BlockChain interface { String() string // Human-readable chain info Name() string // Chain name ChainSelector() uint64 // Unique chain identifier Family() string // Blockchain family (evm, solana, etc.) } // Example usage with any blockchain func printChainInfo(bc chain.BlockChain) { fmt.Printf("Chain: %s\n", bc.String()) // "Ethereum Mainnet (1)" fmt.Printf("Name: %s\n", bc.Name()) // "Ethereum Mainnet" fmt.Printf("Selector: %d\n", bc.ChainSelector()) // 1 fmt.Printf("Family: %s\n", bc.Family()) // "evm" }
BlockChains Collection ¶
The BlockChains collection provides powerful querying and management capabilities:
import ( "github.com/smartcontractkit/chainlink-deployments-framework/chain" "github.com/smartcontractkit/chainlink-deployments-framework/chain/evm" "github.com/smartcontractkit/chainlink-deployments-framework/chain/solana" ) // Create a collection of chains := chain.NewBlockChains(map[uint64]chain.BlockChain{ 1: evmMainnet, // Ethereum mainnet 1151111081099710: solanaMainnet, // Solana mainnet 42161: arbChain, // Arbitrum }) // Check if chains exist if chains.Exists(1) { fmt.Println("Ethereum mainnet is available") } // Check multiple chains at once if chains.ExistsN(1, 42161) { fmt.Println("Both Ethereum and Arbitrum are available") }
Family-Specific Chain Access ¶
Retrieve chains by their blockchain family with type safety:
// Get all EVM chains evmChains := chains.EVMChains() for selector, evmChain := range evmChains { fmt.Printf("EVM Chain %d: %s\n", selector, evmChain.String()) // evmChain is typed as evm.Chain } // Get all Solana chains solanaChains := chains.SolanaChains() for selector, solChain := range solanaChains { fmt.Printf("Solana Chain %d: %s\n", selector, solChain.String()) // solChain is typed as solana.Chain } // Similarly for other families aptosChains := chains.AptosChains() suiChains := chains.SuiChains() tonChains := chains.TonChains() tronChains := chains.TronChains()
Iterating Over All Chains ¶
Use the iterator interface to process all chains:
// Iterate over all chains for selector, blockchain := range chains.All() { fmt.Printf("Processing chain %d (%s) from family %s\n", selector, blockchain.Name(), blockchain.Family()) // Handle each chain based on its family switch blockchain.Family() { case "evm": // Handle EVM-specific logic case "solana": // Handle Solana-specific logic case "aptos": // Handle Aptos-specific logic }
Advanced Querying ¶
Chain Selector Filtering ¶
The package provides flexible filtering options for chain selectors:
// Get all chain selectors allSelectors := chains.ListChainSelectors() fmt.Printf("All chains: %v\n", allSelectors) // Filter by blockchain family evmSelectors := chains.ListChainSelectors( chain.WithFamily("evm"), ) fmt.Printf("EVM chains: %v\n", evmSelectors) // Exclude specific chains filteredSelectors := chains.ListChainSelectors( chain.WithFamily("evm"), chain.WithChainSelectorsExclusion([]uint64{42161}), // Exclude Arbitrum ) fmt.Printf("EVM chains excluding Arbitrum: %v\n", filteredSelectors) // Combine multiple families testnetSelectors := chains.ListChainSelectors( chain.WithFamily("evm"), chain.WithFamily("solana"), chain.WithChainSelectorsExclusion([]uint64{1, 1151111081099710}), // Exclude mainnets )
Creating Collections from Slices ¶
// Create from slice of chains chainList := []chain.BlockChain{evmChain, solanaChain, aptosChain} chainsFromSlice := chain.NewBlockChainsFromSlice(chainList) // Equivalent to map-based creation chainsFromMap := chain.NewBlockChains(map[uint64]chain.BlockChain{ evmChain.ChainSelector(): evmChain, solanaChain.ChainSelector(): solanaChain, aptosChain.ChainSelector(): aptosChain, })
Provider System ¶
The Provider interface enables pluggable blockchain implementations:
import "context" // Provider interface for blockchain providers type Provider interface { Initialize(ctx context.Context) (BlockChain, error) Name() string ChainSelector() uint64 BlockChain() BlockChain } // Example provider usage func setupChain(provider chain.Provider) (chain.BlockChain, error) { ctx := context.Background() // Initialize the provider blockchain, err := provider.Initialize(ctx) if err != nil { return nil, fmt.Errorf("failed to initialize %s: %w", provider.Name(), err) } fmt.Printf("Initialized %s chain with selector %d\n", provider.Name(), provider.ChainSelector()) return blockchain, nil }
Integration with Deployment Framework ¶
The chain package integrates seamlessly with the broader deployment framework:
import "github.com/smartcontractkit/chainlink-deployments-framework/deployment" // Create deployment environment with multiple chains env := &deployment.Environment{ Chains: chains, // BlockChains collection // ... other environment fields } // Access chains in deployment operations evmChains := env.Chains.EVMChains() solanaChains := env.Chains.SolanaChains()
Index ¶
- Variables
- type BlockChain
- type BlockChains
- func (b BlockChains) All() iter.Seq2[uint64, BlockChain]
- func (b BlockChains) AptosChains() map[uint64]aptos.Chain
- func (b BlockChains) EVMChains() map[uint64]evm.Chain
- func (b BlockChains) Exists(selector uint64) bool
- func (b BlockChains) ExistsN(selectors ...uint64) bool
- func (b BlockChains) GetBySelector(selector uint64) (BlockChain, error)
- func (b BlockChains) ListChainSelectors(options ...ChainSelectorsOption) []uint64
- func (b BlockChains) SolanaChains() map[uint64]solana.Chain
- func (b BlockChains) SuiChains() map[uint64]sui.Chain
- func (b BlockChains) TonChains() map[uint64]ton.Chain
- func (b BlockChains) TronChains() map[uint64]tron.Chain
- type ChainSelectorsOption
- type Provider
Constants ¶
This section is empty.
Variables ¶
var ErrBlockChainNotFound = errors.New("blockchain not found")
Functions ¶
This section is empty.
Types ¶
type BlockChain ¶
type BlockChain interface { // String returns chain name and selector "<name> (<selector>)" String() string // Name returns the name of the chain Name() string ChainSelector() uint64 Family() string }
BlockChain is an interface that represents a chain. A chain can be an EVM chain, Solana chain Aptos chain or others.
type BlockChains ¶
type BlockChains struct {
// contains filtered or unexported fields
}
BlockChains represents a collection of chains. It provides querying capabilities for different types of chains.
func NewBlockChains ¶
func NewBlockChains(chains map[uint64]BlockChain) BlockChains
NewBlockChains initializes a new BlockChains instance
func NewBlockChainsFromSlice ¶ added in v0.8.0
func NewBlockChainsFromSlice(chains []BlockChain) BlockChains
NewBlockChainsFromSlice initializes a new BlockChains instance from a slice of BlockChain.
func (BlockChains) All ¶ added in v0.8.0
func (b BlockChains) All() iter.Seq2[uint64, BlockChain]
All returns an iterator over all chains with their selectors.
func (BlockChains) AptosChains ¶
func (b BlockChains) AptosChains() map[uint64]aptos.Chain
AptosChains returns a map of all Aptos chains with their selectors.
func (BlockChains) EVMChains ¶
func (b BlockChains) EVMChains() map[uint64]evm.Chain
EVMChains returns a map of all EVM chains with their selectors.
func (BlockChains) Exists ¶ added in v0.5.1
func (b BlockChains) Exists(selector uint64) bool
Exists checks if a chain with the given selector exists.
func (BlockChains) ExistsN ¶ added in v0.5.1
func (b BlockChains) ExistsN(selectors ...uint64) bool
ExistsN checks if all chains with the given selectors exist.
func (BlockChains) GetBySelector ¶ added in v0.50.1
func (b BlockChains) GetBySelector(selector uint64) (BlockChain, error)
GetBySelector returns a blockchain by its selector.
func (BlockChains) ListChainSelectors ¶
func (b BlockChains) ListChainSelectors(options ...ChainSelectorsOption) []uint64
ListChainSelectors returns all chain selectors with optional filtering Options: - WithFamily: filter by family eg WithFamily(chainsel.FamilySolana) - WithChainSelectorsExclusion: exclude specific chain selectors
func (BlockChains) SolanaChains ¶
func (b BlockChains) SolanaChains() map[uint64]solana.Chain
SolanaChains returns a map of all Solana chains with their selectors.
func (BlockChains) SuiChains ¶
func (b BlockChains) SuiChains() map[uint64]sui.Chain
SuiChains returns a map of all Sui chains with their selectors.
func (BlockChains) TonChains ¶
func (b BlockChains) TonChains() map[uint64]ton.Chain
TonChains returns a map of all Ton chains with their selectors.
func (BlockChains) TronChains ¶ added in v0.19.0
func (b BlockChains) TronChains() map[uint64]tron.Chain
TronChains returns a map of all Tron chains with their selectors.
type ChainSelectorsOption ¶
type ChainSelectorsOption func(*chainSelectorsOptions)
ChainSelectorsOption defines a function type for configuring ChainSelectors
func WithChainSelectorsExclusion ¶
func WithChainSelectorsExclusion(chainSelectors []uint64) ChainSelectorsOption
WithChainSelectorsExclusion returns an option to exclude specific chain selectors
func WithFamily ¶
func WithFamily(family string) ChainSelectorsOption
WithFamily returns an option to filter chains by family (evm, solana, aptos) Use constants from chainsel package eg WithFamily(chainsel.FamilySolana) This can be used more than once to include multiple families.
type Provider ¶ added in v0.7.0
type Provider interface { Initialize(ctx context.Context) (BlockChain, error) Name() string ChainSelector() uint64 BlockChain() BlockChain }
Directories
¶
Path | Synopsis |
---|---|
provider
Package provider contains EVM chain providers for the Chainlink Deployments Framework.
|
Package provider contains EVM chain providers for the Chainlink Deployments Framework. |
internal
|
|
addrconv
Package addrconv provides utilities for converting blockchain addresses to bytes across different chain families.
|
Package addrconv provides utilities for converting blockchain addresses to bytes across different chain families. |