evm

package
v2.0.0-alpha.1 Latest Latest
Warning

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

Go to latest
Published: Aug 2, 2025 License: GPL-3.0, LGPL-3.0 Imports: 93 Imported by: 1

README

EVM Package

The EVM package implements the Lux VM interface.

VM

The VM creates the Ethereum backend and provides basic block building, parsing, and retrieval logic to the consensus engine.

APIs

The VM creates APIs for the node through the function CreateHandlers(). CreateHandlers returns the Service struct to serve EVM specific APIs. Additionally, the Ethereum backend APIs are also returned at the /rpc extension.

Block Handling

The VM implements buildBlock, parseBlock, and getBlock and uses the chain package from Lux to construct a metered state, which uses these functions to implement an efficient caching layer and maintain the required invariants for blocks that get returned to the consensus engine.

To do this, the VM uses a modified version of the Ethereum RLP block type here and uses the core package's BlockChain type here to handle the insertion and storage of blocks into the chain.

Block

The Block type implements the Lux ChainVM Block interface. The key functions for this interface are Verify(), Accept(), Reject(), and Status().

The Block type wraps the stateless block type here and implements these functions to allow the consensus engine to verify blocks as valid, perform consensus, and mark them as accepted or rejected. See the documentation in Lux for the more detailed VM invariants that are maintained here.

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ID this VM should be referenced by
	IDStr = "subnetevm"
	ID    = iface.ID{'s', 'u', 'b', 'n', 'e', 't', 'e', 'v', 'm'}
)
View Source
var (
	// GitCommit is set by the build script
	GitCommit string
	// Version is the version of Lux EVM
	Version string = "v0.8.0"
)

Functions

func NewClockWrapper

func NewClockWrapper(clock *mockable.Clock) utils.MockableTimer

NewClockWrapper creates a new clock wrapper

func NewDatabaseWrapper

func NewDatabaseWrapper(db database.Database) iface.Database

NewDatabaseWrapper creates a new database wrapper

Types

type Admin

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

Admin is the API service for admin API calls

func NewAdminService

func NewAdminService(vm *VM, performanceDir string) *Admin

func (*Admin) GetVMConfig

func (p *Admin) GetVMConfig(_ *http.Request, _ *struct{}, reply *client.ConfigReply) error

func (*Admin) LockProfile

func (p *Admin) LockProfile(_ *http.Request, _ *struct{}, _ *api.EmptyReply) error

LockProfile runs a mutex profile writing to the specified file

func (*Admin) MemoryProfile

func (p *Admin) MemoryProfile(_ *http.Request, _ *struct{}, _ *api.EmptyReply) error

MemoryProfile runs a memory profile writing to the specified file

func (*Admin) SetLogLevel

func (p *Admin) SetLogLevel(_ *http.Request, args *client.SetLogLevelArgs, reply *api.EmptyReply) error

func (*Admin) StartCPUProfiler

func (p *Admin) StartCPUProfiler(_ *http.Request, _ *struct{}, _ *api.EmptyReply) error

StartCPUProfiler starts a cpu profile writing to the specified file

func (*Admin) StopCPUProfiler

func (p *Admin) StopCPUProfiler(r *http.Request, _ *struct{}, _ *api.EmptyReply) error

StopCPUProfiler stops the cpu profile

type BatchWrapper

type BatchWrapper struct {
	database.Batch
}

BatchWrapper wraps a node batch to provide compatibility with ethdb.Batch interface

func (*BatchWrapper) DeleteRange

func (b *BatchWrapper) DeleteRange(start, end []byte) error

DeleteRange implements ethdb.Batch interface

func (*BatchWrapper) Replay

func (b *BatchWrapper) Replay(w ethdb.KeyValueWriter) error

Replay implements ethdb.Batch interface

func (*BatchWrapper) ValueSize

func (b *BatchWrapper) ValueSize() int

ValueSize implements ethdb.Batch interface

type Block

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

Block implements the chain.Block interface

func (*Block) Accept

func (b *Block) Accept() error

Accept implements the chain.Block interface

func (*Block) Bytes

func (b *Block) Bytes() []byte

Bytes implements the chain.Block interface

func (*Block) Height

func (b *Block) Height() uint64

Height implements the chain.Block interface

func (*Block) ID

func (b *Block) ID() string

ID implements the block.Block interface (choices.Decidable)

func (*Block) Parent

func (b *Block) Parent() ids.ID

Parent implements the chain.Block interface

func (*Block) Reject

func (b *Block) Reject() error

Reject implements the chain.Block interface

func (*Block) ShouldVerifyWithContext

func (b *Block) ShouldVerifyWithContext(context.Context) (bool, error)

ShouldVerifyWithContext implements the iface.WithVerifyContext interface

func (*Block) Status

func (b *Block) Status() choices.Status

Status implements the choices.Decidable interface

func (*Block) String

func (b *Block) String() string

func (*Block) Time

func (b *Block) Time() uint64

Time implements the chain.Block interface

func (*Block) Timestamp

func (b *Block) Timestamp() time.Time

Timestamp implements the chain.Block interface (deprecated - use Time())

func (*Block) Verify

func (b *Block) Verify(context.Context) error

Verify implements the chain.Block interface

func (*Block) VerifyWithContext

func (b *Block) VerifyWithContext(ctx context.Context, proposerVMBlockCtx *block.Context) error

VerifyWithContext implements the block.WithVerifyContext interface

type BlockValidator

type BlockValidator interface {
	SyntacticVerify(b *Block, rules params.Rules) error
}

func NewBlockValidator

func NewBlockValidator() BlockValidator

type ChainAPI

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

ChainAPI introduces linear specific functionality to the evm

func (*ChainAPI) GetAcceptedFront

func (api *ChainAPI) GetAcceptedFront(ctx context.Context) (*GetAcceptedFrontReply, error)

GetAcceptedFront returns the last accepted block's hash and height

func (*ChainAPI) IssueBlock

func (api *ChainAPI) IssueBlock(ctx context.Context) error

IssueBlock to the chain

type ClockWrapper

type ClockWrapper struct {
	*mockable.Clock
}

ClockWrapper wraps a mockable.Clock to implement utils.MockableTimer

func (*ClockWrapper) Advance

func (c *ClockWrapper) Advance(d time.Duration)

Advance implements utils.MockableTimer

type Config

type Config struct {
	// Airdrop
	AirdropFile string `json:"airdrop"`

	// Lux EVM APIs
	ChainAPIEnabled      bool   `json:"chain-api-enabled"`
	WarpAPIEnabled       bool   `json:"warp-api-enabled"`
	AdminAPIEnabled      bool   `json:"admin-api-enabled"`
	AdminAPIDir          string `json:"admin-api-dir"`
	ValidatorsAPIEnabled bool   `json:"validators-api-enabled"`

	// EnabledEthAPIs is a list of Ethereum services that should be enabled
	// If none is specified, then we use the default list [defaultEnabledAPIs]
	EnabledEthAPIs []string `json:"eth-apis"`

	// Continuous Profiler
	ContinuousProfilerDir       string   `json:"continuous-profiler-dir"`       // If set to non-empty string creates a continuous profiler
	ContinuousProfilerFrequency Duration `json:"continuous-profiler-frequency"` // Frequency to run continuous profiler if enabled
	ContinuousProfilerMaxFiles  int      `json:"continuous-profiler-max-files"` // Maximum number of files to maintain

	// Gas/Price Caps
	RPCGasCap   uint64  `json:"rpc-gas-cap"`
	RPCTxFeeCap float64 `json:"rpc-tx-fee-cap"`

	// Cache settings
	TrieCleanCache        int      `json:"trie-clean-cache"`         // Size of the trie clean cache (MB)
	TrieCleanJournal      string   `json:"trie-clean-journal"`       // Directory to use to save the trie clean cache (must be populated to enable journaling the trie clean cache)
	TrieCleanRejournal    Duration `json:"trie-clean-rejournal"`     // Frequency to re-journal the trie clean cache to disk (minimum 1 minute, must be populated to enable journaling the trie clean cache)
	TrieDirtyCache        int      `json:"trie-dirty-cache"`         // Size of the trie dirty cache (MB)
	TrieDirtyCommitTarget int      `json:"trie-dirty-commit-target"` // Memory limit to target in the dirty cache before performing a commit (MB)
	SnapshotCache         int      `json:"snapshot-cache"`           // Size of the snapshot disk layer clean cache (MB)

	// Eth Settings
	Preimages      bool `json:"preimages-enabled"`
	SnapshotWait   bool `json:"snapshot-wait"`
	SnapshotVerify bool `json:"snapshot-verification-enabled"`

	// Pruning Settings
	Pruning                         bool    `json:"pruning-enabled"`                    // If enabled, trie roots are only persisted every 4096 blocks
	AcceptorQueueLimit              int     `json:"accepted-queue-limit"`               // Maximum blocks to queue before blocking during acceptance
	CommitInterval                  uint64  `json:"commit-interval"`                    // Specifies the commit interval at which to persist EVM and atomic tries.
	AllowMissingTries               bool    `json:"allow-missing-tries"`                // If enabled, warnings preventing an incomplete trie index are suppressed
	PopulateMissingTries            *uint64 `json:"populate-missing-tries,omitempty"`   // Sets the starting point for re-populating missing tries. Disables re-generation if nil.
	PopulateMissingTriesParallelism int     `json:"populate-missing-tries-parallelism"` // Number of concurrent readers to use when re-populating missing tries on startup.
	PruneWarpDB                     bool    `json:"prune-warp-db-enabled"`              // Determines if the warpDB should be cleared on startup

	// Metric Settings
	MetricsExpensiveEnabled bool `json:"metrics-expensive-enabled"` // Debug-level metrics that might impact runtime performance

	// API Settings
	LocalTxsEnabled bool `json:"local-txs-enabled"`

	TxPoolJournal      string   `json:"tx-pool-journal"`
	TxPoolRejournal    Duration `json:"tx-pool-rejournal"`
	TxPoolPriceLimit   uint64   `json:"tx-pool-price-limit"`
	TxPoolPriceBump    uint64   `json:"tx-pool-price-bump"`
	TxPoolAccountSlots uint64   `json:"tx-pool-account-slots"`
	TxPoolGlobalSlots  uint64   `json:"tx-pool-global-slots"`
	TxPoolAccountQueue uint64   `json:"tx-pool-account-queue"`
	TxPoolGlobalQueue  uint64   `json:"tx-pool-global-queue"`
	TxPoolLifetime     Duration `json:"tx-pool-lifetime"`

	APIMaxDuration           Duration      `json:"api-max-duration"`
	WSCPURefillRate          Duration      `json:"ws-cpu-refill-rate"`
	WSCPUMaxStored           Duration      `json:"ws-cpu-max-stored"`
	MaxBlocksPerRequest      int64         `json:"api-max-blocks-per-request"`
	AllowUnfinalizedQueries  bool          `json:"allow-unfinalized-queries"`
	AllowUnprotectedTxs      bool          `json:"allow-unprotected-txs"`
	AllowUnprotectedTxHashes []common.Hash `json:"allow-unprotected-tx-hashes"`

	// Keystore Settings
	KeystoreDirectory             string `json:"keystore-directory"` // both absolute and relative supported
	KeystoreExternalSigner        string `json:"keystore-external-signer"`
	KeystoreInsecureUnlockAllowed bool   `json:"keystore-insecure-unlock-allowed"`

	// Gossip Settings
	RemoteGossipOnlyEnabled       bool             `json:"remote-gossip-only-enabled"`
	RegossipFrequency             Duration         `json:"regossip-frequency"`
	RegossipMaxTxs                int              `json:"regossip-max-txs"`
	RegossipTxsPerAddress         int              `json:"regossip-txs-per-address"`
	PriorityRegossipFrequency     Duration         `json:"priority-regossip-frequency"`
	PriorityRegossipMaxTxs        int              `json:"priority-regossip-max-txs"`
	PriorityRegossipTxsPerAddress int              `json:"priority-regossip-txs-per-address"`
	PriorityRegossipAddresses     []common.Address `json:"priority-regossip-addresses"`

	// Log
	LogLevel      string `json:"log-level"`
	LogJSONFormat bool   `json:"log-json-format"`

	// Address for Tx Fees (must be empty if not supported by blockchain)
	FeeRecipient string `json:"feeRecipient"`

	// Offline Pruning Settings
	OfflinePruning                bool   `json:"offline-pruning-enabled"`
	OfflinePruningBloomFilterSize uint64 `json:"offline-pruning-bloom-filter-size"`
	OfflinePruningDataDirectory   string `json:"offline-pruning-data-directory"`

	// VM2VM network
	MaxOutboundActiveRequests           int64 `json:"max-outbound-active-requests"`
	MaxOutboundActiveCrossChainRequests int64 `json:"max-outbound-active-cross-chain-requests"`

	// Sync settings
	StateSyncEnabled         bool   `json:"state-sync-enabled"`
	StateSyncSkipResume      bool   `json:"state-sync-skip-resume"` // Forces state sync to use the highest available summary block
	StateSyncServerTrieCache int    `json:"state-sync-server-trie-cache"`
	StateSyncIDs             string `json:"state-sync-ids"`
	StateSyncCommitInterval  uint64 `json:"state-sync-commit-interval"`
	StateSyncMinBlocks       uint64 `json:"state-sync-min-blocks"`
	StateSyncRequestSize     uint16 `json:"state-sync-request-size"`

	// Database Settings
	InspectDatabase bool `json:"inspect-database"` // Inspects the database on startup if enabled.

	// SkipUpgradeCheck disables checking that upgrades must take place before the last
	// accepted interfaces. Skipping this check is useful when a node operator does not update
	// their node before the network upgrade and their node accepts blocks that have
	// identical state with the pre-upgrade ruleset.
	SkipUpgradeCheck bool `json:"skip-upgrade-check"`

	// TriePrefetcherParallelism sets the number of goroutines to use for trie prefetching
	TriePrefetcherParallelism int `json:"trie-prefetcher-parallelism"`

	// HistoricalProofQueryWindow is the number of blocks before the last accepted block to be accepted for state queries.
	HistoricalProofQueryWindow uint64 `json:"historical-proof-query-window"`

	// TransactionHistory is the number of blocks to keep the transaction history for
	TransactionHistory uint64 `json:"transaction-history"`

	// SkipTxIndexing disables transaction indexing
	SkipTxIndexing bool `json:"skip-tx-indexing"`

	// AcceptedCacheSize is the depth to keep in the accepted headers cache and the
	// accepted logs cache at the accepted tip.
	//
	// This is particularly useful for improving the performance of eth_getLogs
	// on RPC nodes.
	AcceptedCacheSize int `json:"accepted-cache-size"`

	// TxLookupLimit is the maximum number of blocks from head whose tx indices
	// are reserved:
	//  * 0:   means no limit
	//  * N:   means N block limit [HEAD-N+1, HEAD] and delete extra indexes
	TxLookupLimit uint64 `json:"tx-lookup-limit"`

	// WarpOffChainMessages encodes off-chain messages (unrelated to any on-chain event ie. block or AddressedCall)
	// that the node should be willing to sign.
	// Note: only supports AddressedCall payloads as defined here:
	// https://github.com/luxfi/node/tree/7623ffd4be915a5185c9ed5e11fa9be15a6e1f00/vms/platformvm/warp/payload#addressedcall
	WarpOffChainMessages []hexutil.Bytes `json:"warp-off-chain-messages"`
}

Config ...

func (Config) EthAPIs

func (c Config) EthAPIs() []string

EthAPIs returns an array of strings representing the Eth APIs that should be enabled

func (Config) EthBackendSettings

func (c Config) EthBackendSettings() eth.Settings

func (*Config) SetDefaults

func (c *Config) SetDefaults()

func (*Config) Validate

func (c *Config) Validate() error

Validate returns an error if this is an invalid interfaces.

type DatabaseConfig

type DatabaseConfig struct {
	// If true, all writes are to memory and are discarded at shutdown.
	ReadOnly bool `json:"readOnly"`

	// Path to database
	Path string `json:"path"`

	// Name of the database type to use
	Name string `json:"name"`

	// Config bytes (JSON) for the database
	// See relevant (pebbledb, leveldb) config options
	Config []byte `json:"-"`
}

type DatabaseWrapper

type DatabaseWrapper struct {
	database.Database
}

DatabaseWrapper wraps a node database to provide compatibility with EVM database interfaces

func (*DatabaseWrapper) Ancient

func (d *DatabaseWrapper) Ancient(kind string, number uint64) ([]byte, error)

Ancient methods - not supported by node database, required by ethdb.Database

func (*DatabaseWrapper) AncientDatadir

func (d *DatabaseWrapper) AncientDatadir() (string, error)

func (*DatabaseWrapper) AncientRange

func (d *DatabaseWrapper) AncientRange(kind string, start, count, maxBytes uint64) ([][]byte, error)

func (*DatabaseWrapper) AncientSize

func (d *DatabaseWrapper) AncientSize(kind string) (uint64, error)

func (*DatabaseWrapper) Ancients

func (d *DatabaseWrapper) Ancients() (uint64, error)

func (*DatabaseWrapper) Close

func (d *DatabaseWrapper) Close() error

Close closes the database

func (*DatabaseWrapper) Compact

func (d *DatabaseWrapper) Compact(start []byte, limit []byte) error

Compact implements ethdb interface

func (*DatabaseWrapper) Delete

func (d *DatabaseWrapper) Delete(key []byte) error

Delete implements ethdb interface

func (*DatabaseWrapper) DeleteRange

func (d *DatabaseWrapper) DeleteRange(start, end []byte) error

DeleteRange deletes all of the keys (and values) in the range [start,end) (inclusive on start, exclusive on end).

func (*DatabaseWrapper) Get

func (d *DatabaseWrapper) Get(key []byte) ([]byte, error)

Get implements ethdb interface

func (*DatabaseWrapper) Has

func (d *DatabaseWrapper) Has(key []byte) (bool, error)

Has implements ethdb interface

func (*DatabaseWrapper) HealthCheck

func (d *DatabaseWrapper) HealthCheck() (interface{}, error)

HealthCheck implements the HealthChecker interface

func (*DatabaseWrapper) MigrateTable

func (d *DatabaseWrapper) MigrateTable(string, func([]byte) ([]byte, error)) error

func (*DatabaseWrapper) ModifyAncients

func (d *DatabaseWrapper) ModifyAncients(fn func(ethdb.AncientWriteOp) error) (int64, error)

func (*DatabaseWrapper) NewBatch

func (d *DatabaseWrapper) NewBatch() ethdb.Batch

NewBatch implements ethdb interface

func (*DatabaseWrapper) NewBatchWithSize

func (d *DatabaseWrapper) NewBatchWithSize(size int) ethdb.Batch

NewBatchWithSize creates a write-only database batch with pre-allocated buffer.

func (*DatabaseWrapper) NewIterator

func (d *DatabaseWrapper) NewIterator(prefix []byte, start []byte) ethdb.Iterator

NewIterator implements ethdb interface

func (*DatabaseWrapper) NewSnapshot

func (d *DatabaseWrapper) NewSnapshot() (interface{}, error)

func (*DatabaseWrapper) Put

func (d *DatabaseWrapper) Put(key []byte, value []byte) error

Put implements ethdb interface

func (*DatabaseWrapper) ReadAncients

func (d *DatabaseWrapper) ReadAncients(fn func(ethdb.AncientReaderOp) error) (err error)

ReadAncients reads multiple ancient values in one go

func (*DatabaseWrapper) Stat

func (d *DatabaseWrapper) Stat() (string, error)

func (*DatabaseWrapper) Sync

func (d *DatabaseWrapper) Sync() error

func (*DatabaseWrapper) SyncAncient

func (d *DatabaseWrapper) SyncAncient() error

SyncAncient flushes the accumulated writes to disk synchronously.

func (*DatabaseWrapper) SyncKeyValue

func (d *DatabaseWrapper) SyncKeyValue() error

SyncKeyValue flushes the key-value store to disk synchronously.

func (*DatabaseWrapper) Tail

func (d *DatabaseWrapper) Tail() (uint64, error)

func (*DatabaseWrapper) TruncateHead

func (d *DatabaseWrapper) TruncateHead(n uint64) (uint64, error)

func (*DatabaseWrapper) TruncateTail

func (d *DatabaseWrapper) TruncateTail(n uint64) (uint64, error)

type Duration

type Duration struct {
	time.Duration
}

func (Duration) MarshalJSON

func (d Duration) MarshalJSON() ([]byte, error)

String implements the stringer interface.

func (Duration) String

func (d Duration) String() string

String implements the stringer interface.

func (*Duration) UnmarshalJSON

func (d *Duration) UnmarshalJSON(data []byte) (err error)

type EthPushGossiper

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

EthPushGossiper handles gossiping of Ethereum transactions

func (*EthPushGossiper) Add

func (e *EthPushGossiper) Add(tx *types.Transaction)

Add implements the eth.PushGossiper interface

type Factory

type Factory struct{}

func (*Factory) New

func (*Factory) New(luxlog.Logger) (interface{}, error)

type GetAcceptedFrontReply

type GetAcceptedFrontReply struct {
	Hash   common.Hash `json:"hash"`
	Number *big.Int    `json:"number"`
}

GetAcceptedFrontReply defines the reply that will be sent from the GetAcceptedFront API call

type GossipEthTx

type GossipEthTx struct {
	Tx *types.Transaction
}

func (*GossipEthTx) GossipID

func (tx *GossipEthTx) GossipID() ids.ID

type GossipEthTxMarshaller

type GossipEthTxMarshaller struct{}

func (GossipEthTxMarshaller) MarshalGossip

func (g GossipEthTxMarshaller) MarshalGossip(tx *GossipEthTx) ([]byte, error)

func (GossipEthTxMarshaller) UnmarshalGossip

func (g GossipEthTxMarshaller) UnmarshalGossip(bytes []byte) (*GossipEthTx, error)

type GossipEthTxPool

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

GossipEthTxPool is an implementation of gossip.Set[*GossipEthTx]

func NewGossipEthTxPool

func NewGossipEthTxPool(txPool *txpool.TxPool, sdkMetrics luxmetrics.Metrics) (*GossipEthTxPool, error)

func (*GossipEthTxPool) Add

func (g *GossipEthTxPool) Add(tx *GossipEthTx) error

func (*GossipEthTxPool) GetFilter

func (g *GossipEthTxPool) GetFilter() ([]byte, []byte)

func (*GossipEthTxPool) Has

func (g *GossipEthTxPool) Has(txID ids.ID) bool

func (*GossipEthTxPool) Iterate

func (g *GossipEthTxPool) Iterate(f func(*GossipEthTx) bool)

func (*GossipEthTxPool) Subscribe

func (g *GossipEthTxPool) Subscribe(ctx context.Context)

Subscribe subscribes to transaction pool events

type StateSyncClient

type StateSyncClient interface {
	// methods that implement the client side of [block.StateSyncableVM]
	StateSyncEnabled(context.Context) (bool, error)
	GetOngoingSyncStateSummary(context.Context) (block.StateSummary, error)
	ParseStateSummary(ctx context.Context, summaryBytes []byte) (block.StateSummary, error)

	// additional methods required by the evm package
	ClearOngoingSummary() error
	Shutdown() error
	Error() error
}

func NewStateSyncClient

func NewStateSyncClient(config *stateSyncClientConfig) StateSyncClient

type StateSyncServer

type StateSyncServer interface {
	GetLastStateSummary(context.Context) (block.StateSummary, error)
	GetStateSummary(context.Context, uint64) (block.StateSummary, error)
}

func NewStateSyncServer

func NewStateSyncServer(config *stateSyncServerConfig) StateSyncServer

type Status

type Status uint32

Status ...

const (
	Unknown Status = iota
	Dropped
	Processing
	Accepted
)

List of possible status values Unknown Zero value, means the status is not known Dropped means the transaction was in the mempool, but was dropped because it failed verification Processing means the transaction is in the mempool Accepted means the transaction was accepted

func (Status) MarshalJSON

func (s Status) MarshalJSON() ([]byte, error)

MarshalJSON ...

func (Status) String

func (s Status) String() string

func (*Status) UnmarshalJSON

func (s *Status) UnmarshalJSON(b []byte) error

UnmarshalJSON ...

func (Status) Valid

func (s Status) Valid() error

Valid returns nil if the status is a valid status.

type Syncer

type Syncer interface {
	Start(ctx context.Context) error
	Done() <-chan error
}

Syncer represents a step in state sync, along with Start/Done methods to control and monitor progress. Error returns an error if any was encountered.

type VM

type VM struct {

	// *chain.State helps to implement the VM interface by wrapping blocks
	// with an efficient caching layer.
	*chain.State

	Network *p2p.Network

	// State sync server and client
	StateSyncServer
	StateSyncClient
	// contains filtered or unexported fields
}

VM implements the block.ChainVM interface

func (*VM) AppGossip

func (vm *VM) AppGossip(ctx context.Context, nodeID ids.NodeID, msg []byte) error

AppGossip handles incoming gossip messages

func (*VM) AppRequest

func (vm *VM) AppRequest(ctx context.Context, nodeID ids.NodeID, requestID uint32, deadline time.Time, request []byte) error

AppRequest handles incoming app requests

func (*VM) AppRequestFailed

func (vm *VM) AppRequestFailed(ctx context.Context, nodeID ids.NodeID, requestID uint32, appErr *commonEng.AppError) error

AppRequestFailed handles failed app requests

func (*VM) AppResponse

func (vm *VM) AppResponse(ctx context.Context, nodeID ids.NodeID, requestID uint32, response []byte) error

AppResponse handles incoming app responses

func (*VM) BuildBlock

func (vm *VM) BuildBlock(ctx context.Context) (chainblock.Block, error)

BuildBlock builds a block to be wrapped by ChainState

func (*VM) BuildBlockWithContext

func (vm *VM) BuildBlockWithContext(ctx context.Context, proposerVMBlockCtx *chainblock.Context) (chainblock.Block, error)

func (*VM) Connected

func (vm *VM) Connected(ctx context.Context, nodeID ids.NodeID, nodeVersion *version.Application) error

Connected handles new peer connections

func (*VM) CreateHTTP2Handler

func (*VM) CreateHTTP2Handler(context.Context) (http.Handler, error)

func (*VM) CreateHandlers

func (vm *VM) CreateHandlers(context.Context) (map[string]http.Handler, error)

CreateHandlers makes new http handlers that can handle API calls

func (*VM) Disconnected

func (vm *VM) Disconnected(ctx context.Context, nodeID ids.NodeID) error

func (*VM) GetAcceptedBlock

func (vm *VM) GetAcceptedBlock(ctx context.Context, blkID ids.ID) (chainblock.Block, error)

GetAcceptedBlock attempts to retrieve block [blkID] from the VM. This method only returns accepted blocks.

func (*VM) GetBlock

func (vm *VM) GetBlock(ctx context.Context, id ids.ID) (chainblock.Block, error)

GetBlock attempts to retrieve block [id] from the VM.

func (*VM) GetBlockIDAtHeight

func (vm *VM) GetBlockIDAtHeight(_ context.Context, height uint64) (ids.ID, error)

GetBlockIDAtHeight returns the canonical block at [height]. Note: the engine assumes that if a block is not found at [height], then [database.ErrNotFound] will be returned. This indicates that the VM has state synced and does not have all historical blocks available.

func (*VM) GetCurrentNonce

func (vm *VM) GetCurrentNonce(address common.Address) (uint64, error)

GetCurrentNonce returns the nonce associated with the address at the preferred block

func (*VM) HealthCheck

func (vm *VM) HealthCheck(context.Context) (interface{}, error)

Health returns nil if this chain is healthy. Also returns details, which should be one of: string, []byte, map[string]string

func (*VM) Initialize

func (vm *VM) Initialize(
	_ context.Context,
	chainCtx *nodequasar.Context,
	db database.Database,
	genesisBytes []byte,
	upgradeBytes []byte,
	configBytes []byte,
	fxs []*commonEng.Fx,
	appSender commonEng.AppSender,
) error

Initialize implements the block.ChainVM interface

func (*VM) NewBlockBuilder

func (vm *VM) NewBlockBuilder(notifyBuildBlockChan chan<- commonEng.Message) *blockBuilder

func (*VM) NewHTTPHandler

func (vm *VM) NewHTTPHandler(ctx context.Context) (http.Handler, error)

func (*VM) ParseBlock

func (vm *VM) ParseBlock(ctx context.Context, b []byte) (chainblock.Block, error)

ParseBlock parses [b] into a block.

func (*VM) ParseEthBlock

func (vm *VM) ParseEthBlock(b []byte) (*types.Block, error)

func (*VM) SetPreference

func (vm *VM) SetPreference(ctx context.Context, blkID ids.ID) error

SetPreference sets what the current tail of the chain is

func (*VM) SetState

func (vm *VM) SetState(_ context.Context, state nodequasar.State) error

func (*VM) Shutdown

func (vm *VM) Shutdown(context.Context) error

Shutdown implements the ChainVM interface

func (*VM) Version

func (vm *VM) Version(context.Context) (string, error)

func (*VM) WaitForEvent

func (vm *VM) WaitForEvent(ctx context.Context) (commonEng.Message, error)

WaitForEvent implements a VM interface method TODO: determine proper Event type from node package

type ValidatorsAPI

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

func (*ValidatorsAPI) GetCurrentValidators

Directories

Path Synopsis
blockgascost implements the block gas cost logic
blockgascost implements the block gas cost logic
(c) 2025, Lux Industries, Inc.
(c) 2025, Lux Industries, Inc.
manager is a no-op stub that allows the EVM library to compile without node-level dependencies.
manager is a no-op stub that allows the EVM library to compile without node-level dependencies.

Jump to

Keyboard shortcuts

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