Documentation
¶
Index ¶
- Constants
- Variables
- func NewLinearizeOnInitializeVM(vm interface{}) *linearizeOnInitializeVM
- type ChainConfig
- type ChainParameters
- type ChainValidationConfig
- type ChainValidatorSet
- type GenesisNFTInfo
- type GenesisNFTVerifier
- type Manager
- type ManagerConfig
- type NFTOwnership
- type NFTRequirement
- type NFTVerifier
- type Registrant
- type StakingManager
- type Subnets
- type ValidatorChainManager
- func (vcm *ValidatorChainManager) CanValidateChain(validatorID ids.NodeID, chainID ids.ID) bool
- func (vcm *ValidatorChainManager) GetChainValidatorSet(chainID ids.ID) (*ChainValidatorSet, error)
- func (vcm *ValidatorChainManager) GetValidatorConfig(validatorID ids.NodeID) (*ChainValidationConfig, bool)
- func (vcm *ValidatorChainManager) GetValidatorsForChain(chainID ids.ID) []ids.NodeID
- func (vcm *ValidatorChainManager) RegisterValidator(validatorID ids.NodeID, config *ChainValidationConfig) error
- func (vcm *ValidatorChainManager) UpdateValidatorConfig(validatorID ids.NodeID, config *ChainValidationConfig) error
Constants ¶
const (
ChainLabel = "chain"
)
Variables ¶
var ( // Commonly shared VM DB prefix VMDBPrefix = []byte("vm") // Bootstrapping prefixes for LinearizableVMs VertexDBPrefix = []byte("vertex") VertexBootstrappingDBPrefix = []byte("vertex_bs") TxBootstrappingDBPrefix = []byte("tx_bs") BlockBootstrappingDBPrefix = []byte("interval_block_bs") // Bootstrapping prefixes for ChainVMs ChainBootstrappingDBPrefix = []byte("interval_bs") )
var ErrNoPrimaryNetworkConfig = errors.New("no subnet config for primary network found")
Functions ¶
func NewLinearizeOnInitializeVM ¶ added in v0.1.1
func NewLinearizeOnInitializeVM(vm interface{}) *linearizeOnInitializeVM
Types ¶
type ChainConfig ¶ added in v0.1.1
ChainConfig is configuration settings for the current execution. [Config] is the user-provided config blob for the block. [Upgrade] is a chain-specific blob for coordinating upgrades.
type ChainParameters ¶
type ChainParameters struct {
// The ID of the chain being created.
ID ids.ID
// ID of the subnet that validates this block.
SubnetID ids.ID
// The genesis data of this chain's ledger.
GenesisData []byte
// The ID of the vm this chain is running.
VMID ids.ID
// The IDs of the feature extensions this chain is running.
FxIDs []ids.ID
// Invariant: Only used when [ID] is the P-chain ID.
CustomBeacons validators.Manager
}
ChainParameters defines the chain being created
type ChainValidationConfig ¶ added in v1.14.2
type ChainValidationConfig struct {
// Core chains that validators can opt into
ValidateAChain bool // AI Chain (opt-in)
ValidateBChain bool // Bridge Chain (Genesis NFT-gated)
ValidateCChain bool // EVM Chain
ValidateMChain bool // MPC Chain (Genesis NFT-gated)
ValidatePChain bool // Platform Chain (usually required)
ValidateQChain bool // Quantum Chain (usually required)
ValidateXChain bool // Exchange Chain
ValidateZChain bool // ZK Chain (opt-in)
// Genesis NFT requirements for B/M chains
GenesisNFTContract string // Address of Genesis NFT contract
GenesisNFTTokenIDs []uint64 // Required Genesis NFT token IDs
// Optional specific NFT requirements per chain
ChainSpecificNFTs map[ids.ID]NFTRequirement
// Staking requirements per chain
MinStakePerChain map[ids.ID]uint64
}
ChainValidationConfig specifies which chains a validator participates in
func DefaultValidationConfig ¶ added in v1.14.2
func DefaultValidationConfig() *ChainValidationConfig
DefaultValidationConfig returns the default validation configuration
type ChainValidatorSet ¶ added in v1.14.2
type ChainValidatorSet struct {
ChainID ids.ID
Validators []ids.NodeID
IsGenesisGated bool
MinValidators int
}
ChainValidatorSet represents the validator set for a specific chain
type GenesisNFTInfo ¶ added in v1.14.2
type GenesisNFTInfo struct {
ContractAddress string
TotalSupply uint64
RequiredTokens []uint64 // Specific token IDs required for validation
// Different tiers of Genesis NFTs
TierMapping map[string][]uint64
}
GenesisNFTInfo contains information about the Genesis NFT collection
func GetGenesisNFTInfo ¶ added in v1.14.2
func GetGenesisNFTInfo() *GenesisNFTInfo
GetGenesisNFTInfo returns information about the Genesis NFT collection
type GenesisNFTVerifier ¶ added in v1.14.2
type GenesisNFTVerifier struct {
// contains filtered or unexported fields
}
GenesisNFTVerifier verifies Genesis NFT ownership for chain validation
func NewGenesisNFTVerifier ¶ added in v1.14.2
func NewGenesisNFTVerifier(cChainEndpoint string, genesisNFTAddress string) (*GenesisNFTVerifier, error)
NewGenesisNFTVerifier creates a new Genesis NFT verifier
func (*GenesisNFTVerifier) VerifyNFTOwnership ¶ added in v1.14.2
func (v *GenesisNFTVerifier) VerifyNFTOwnership(validatorID ids.NodeID, contractAddress string, requiredTokenIDs []uint64) (bool, error)
VerifyNFTOwnership checks if a validator owns the required NFTs
type Manager ¶
type Manager interface {
ids.Aliaser
// Queues a chain to be created in the future after chain creator is unblocked.
// This is only called from the P-chain thread to create other chains
// Queued chains are created only after P-chain is bootstrapped.
// This assumes only chains in tracked subnets are queued.
QueueChainCreation(ChainParameters)
// Add a registrant [r]. Every time a chain is
// created, [r].RegisterChain([new chain]) is called.
AddRegistrant(Registrant)
// Given an alias, return the ID of the chain associated with that alias
Lookup(string) (ids.ID, error)
// Given an alias, return the ID of the VM associated with that alias
LookupVM(string) (ids.ID, error)
// Returns true iff the chain with the given ID exists and is finished bootstrapping
IsBootstrapped(ids.ID) bool
// Starts the chain creator with the initial platform chain parameters, must
// be called once.
StartChainCreator(platformChain ChainParameters) error
Shutdown()
}
Manager manages the chains running on this node. It can:
- Create a chain
- Add a registrant. When a chain is created, each registrant calls RegisterChain with the new chain as the argument.
- Manage the aliases of chains
var TestManager Manager = testManager{}
TestManager implements Manager but does nothing. Always returns nil error. To be used only in tests
type ManagerConfig ¶ added in v0.1.1
type ManagerConfig struct {
SybilProtectionEnabled bool
StakingTLSSigner crypto.Signer
StakingTLSCert *staking.Certificate
StakingBLSKey bls.Signer
TracingEnabled bool
// Must not be used unless [TracingEnabled] is true as this may be nil.
Tracer trace.Tracer
Log log.Logger
LogFactory log.Factory
VMManager vms.Manager // Manage mappings from vm ID --> vm
BlockAcceptorGroup quasar.AcceptorGroup
TxAcceptorGroup quasar.AcceptorGroup
VertexAcceptorGroup quasar.AcceptorGroup
DB db.Database
MsgCreator message.OutboundMsgBuilder // message creator, shared with network
Router router.Router // Routes incoming messages to the appropriate chain
Net network.Network // Sends consensus messages to other validators
Validators validators.Manager // Validators validating on this chain
NodeID ids.NodeID // The ID of this node
NetworkID uint32 // ID of the network this node is connected to
PartialSyncPrimaryNetwork bool
Server server.Server // Handles HTTP API calls
AtomicMemory *atomic.Memory
LUXAssetID ids.ID
XChainID ids.ID // ID of the X-Chain,
CChainID ids.ID // ID of the C-Chain,
CriticalChains set.Set[ids.ID] // Chains that can't exit gracefully
TimeoutManager timeout.Manager // Manages request timeouts when sending messages to other validators
Health health.Registerer
SubnetConfigs map[ids.ID]subnets.Config // ID -> SubnetConfig
ChainConfigs map[string]ChainConfig // alias -> ChainConfig
// ShutdownNodeFunc allows the chain manager to issue a request to shutdown the node
ShutdownNodeFunc func(exitCode int)
MeterVMEnabled bool // Should each VM be wrapped with a MeterVM
ImportMode bool // If true, disable pruning for one-time blockchain data import
Metrics metrics.MultiGatherer
MeterDBMetrics metrics.MultiGatherer
FrontierPollFrequency time.Duration
ConsensusAppConcurrency int
// Max Time to spend fetching a container and its
// ancestors when responding to a GetAncestors
BootstrapMaxTimeGetAncestors time.Duration
// Max number of containers in an ancestors message sent by this node.
BootstrapAncestorsMaxContainersSent int
// This node will only consider the first [AncestorsMaxContainersReceived]
// containers in an ancestors message it receives.
BootstrapAncestorsMaxContainersReceived int
Upgrades upgrade.Config
// Tracks CPU/disk usage caused by each peer.
ResourceTracker timetracker.ResourceTracker
StateSyncBeacons []ids.NodeID
ChainDataDir string
Subnets *Subnets
}
type NFTOwnership ¶ added in v1.14.2
NFTOwnership represents cached NFT ownership data
type NFTRequirement ¶ added in v1.14.2
type NFTRequirement struct {
ContractAddress string
RequiredTokenIDs []uint64
MinimumBalance uint64 // Minimum number of NFTs required
}
NFTRequirement specifies NFT requirements for a specific chain
type NFTVerifier ¶ added in v1.14.2
type NFTVerifier interface {
// VerifyNFTOwnership checks if a validator owns required NFTs
VerifyNFTOwnership(validatorID ids.NodeID, contractAddress string, requiredTokenIDs []uint64) (bool, error)
}
NFTVerifier interface for checking NFT ownership
type Registrant ¶
type Registrant interface {
// Called when a chain is created
// This function is called before the chain starts processing messages
// [vm] should be a vertex.DAGVM or block.ChainVM
RegisterChain(chainName string, ctx *quasar.Context, vm core.VM)
}
Registrant can register the existence of a chain
type StakingManager ¶ added in v1.14.2
type StakingManager interface {
// GetValidatorStake returns the stake amount for a validator on a specific chain
GetValidatorStake(validatorID ids.NodeID, chainID ids.ID) (uint64, error)
}
StakingManager interface for checking staking requirements
type Subnets ¶ added in v0.1.1
type Subnets struct {
// contains filtered or unexported fields
}
Subnets holds the currently running subnets on this node
func NewSubnets ¶ added in v0.1.1
NewSubnets returns an instance of Subnets
func (*Subnets) Bootstrapping ¶ added in v0.1.1
Bootstrapping returns the subnetIDs of any chains that are still bootstrapping.
type ValidatorChainManager ¶ added in v1.14.2
type ValidatorChainManager struct {
// contains filtered or unexported fields
}
ValidatorChainManager manages validator opt-in for different chains
func NewValidatorChainManager ¶ added in v1.14.2
func NewValidatorChainManager(nftVerifier NFTVerifier, stakingManager StakingManager) *ValidatorChainManager
NewValidatorChainManager creates a new validator chain manager
func (*ValidatorChainManager) CanValidateChain ¶ added in v1.14.2
CanValidateChain checks if a validator can validate a specific chain
func (*ValidatorChainManager) GetChainValidatorSet ¶ added in v1.14.2
func (vcm *ValidatorChainManager) GetChainValidatorSet(chainID ids.ID) (*ChainValidatorSet, error)
GetChainValidatorSet returns the validator set for a specific chain
func (*ValidatorChainManager) GetValidatorConfig ¶ added in v1.14.2
func (vcm *ValidatorChainManager) GetValidatorConfig(validatorID ids.NodeID) (*ChainValidationConfig, bool)
GetValidatorConfig returns the configuration for a specific validator
func (*ValidatorChainManager) GetValidatorsForChain ¶ added in v1.14.2
func (vcm *ValidatorChainManager) GetValidatorsForChain(chainID ids.ID) []ids.NodeID
GetValidatorsForChain returns all validators that can validate a specific chain
func (*ValidatorChainManager) RegisterValidator ¶ added in v1.14.2
func (vcm *ValidatorChainManager) RegisterValidator(validatorID ids.NodeID, config *ChainValidationConfig) error
RegisterValidator registers a validator with their chain preferences
func (*ValidatorChainManager) UpdateValidatorConfig ¶ added in v1.14.2
func (vcm *ValidatorChainManager) UpdateValidatorConfig(validatorID ids.NodeID, config *ChainValidationConfig) error
UpdateValidatorConfig updates a validator's chain preferences
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
atomicmock
Package atomicmock is a generated GoMock package.
|
Package atomicmock is a generated GoMock package. |