Documentation ¶
Index ¶
- Variables
- func NewSharedMemoryWriter() *sharedMemoryWriter
- func SubnetEVMJSONFormat(alias string) log.Format
- func SubnetEVMTermFormat(alias string) log.Format
- type Admin
- func (p *Admin) GetVMConfig(_ *http.Request, _ *struct{}, reply *ConfigReply) error
- func (p *Admin) LockProfile(_ *http.Request, _ *struct{}, _ *api.EmptyReply) error
- func (p *Admin) MemoryProfile(_ *http.Request, _ *struct{}, _ *api.EmptyReply) error
- func (p *Admin) SetLogLevel(_ *http.Request, args *SetLogLevelArgs, reply *api.EmptyReply) error
- func (p *Admin) StartCPUProfiler(_ *http.Request, _ *struct{}, _ *api.EmptyReply) error
- func (p *Admin) StopCPUProfiler(r *http.Request, _ *struct{}, _ *api.EmptyReply) error
- type Batch
- type Block
- func (b *Block) Accept(context.Context) error
- func (b *Block) Bytes() []byte
- func (b *Block) Height() uint64
- func (b *Block) ID() ids.ID
- func (b *Block) Parent() ids.ID
- func (b *Block) Reject(context.Context) error
- func (b *Block) SetStatus(status choices.Status)
- func (b *Block) ShouldVerifyWithContext(context.Context) (bool, error)
- func (b *Block) Status() choices.Status
- func (b *Block) String() string
- func (b *Block) Timestamp() time.Time
- func (b *Block) Verify(context.Context) error
- func (b *Block) VerifyWithContext(ctx context.Context, proposerVMBlockCtx *block.Context) error
- type BlockValidator
- type BuildGenesisArgs
- type BuildGenesisReply
- type Client
- type Config
- type ConfigReply
- type Database
- type DecodeGenesisArgs
- type DecodeGenesisReply
- type Duration
- type Factory
- type GetAcceptedFrontReply
- type GossipHandler
- type GossipReceivedStats
- type GossipSentStats
- type GossipStats
- type GossipTx
- type GossipTxPool
- type Gossiper
- type SetLogLevelArgs
- type SnowmanAPI
- type StateSyncClient
- type StateSyncServer
- type StaticService
- type Status
- type SubnetEVMLogger
- type Syncer
- type VM
- func (vm *VM) CreateHandlers(context.Context) (map[string]http.Handler, error)
- func (vm *VM) CreateStaticHandlers(context.Context) (map[string]http.Handler, error)
- func (vm *VM) GetBlockIDAtHeight(_ context.Context, blkHeight uint64) (ids.ID, error)
- func (vm *VM) GetCurrentNonce(address common.Address) (uint64, error)
- func (vm *VM) HealthCheck(context.Context) (interface{}, error)
- func (vm *VM) Initialize(_ context.Context, chainCtx *snow.Context, db database.Database, ...) error
- func (vm *VM) NewBlockBuilder(notifyBuildBlockChan chan<- commonEng.Message) *blockBuilder
- func (vm *VM) ParseEthBlock(b []byte) (*types.Block, error)
- func (vm *VM) SetPreference(ctx context.Context, blkID ids.ID) error
- func (vm *VM) SetState(_ context.Context, state snow.State) error
- func (vm *VM) Shutdown(context.Context) error
- func (vm *VM) VerifyHeightIndex(context.Context) error
- func (vm *VM) Version(context.Context) (string, error)
Constants ¶
This section is empty.
Variables ¶
var ( // ID this VM should be referenced by IDStr = "subnetevm" ID = ids.ID{'s', 'u', 'b', 'n', 'e', 't', 'e', 'v', 'm'} )
var ( // GitCommit is set by the build script GitCommit string // Version is the version of Subnet EVM Version string = "v0.5.10" )
Functions ¶
func NewSharedMemoryWriter ¶
func NewSharedMemoryWriter() *sharedMemoryWriter
func SubnetEVMJSONFormat ¶
func SubnetEVMTermFormat ¶
Types ¶
type Admin ¶
type Admin struct {
// contains filtered or unexported fields
}
Admin is the API service for admin API calls
func NewAdminService ¶
func (*Admin) GetVMConfig ¶
func (p *Admin) GetVMConfig(_ *http.Request, _ *struct{}, reply *ConfigReply) error
func (*Admin) LockProfile ¶
LockProfile runs a mutex profile writing to the specified file
func (*Admin) MemoryProfile ¶
MemoryProfile runs a memory profile writing to the specified file
func (*Admin) SetLogLevel ¶
func (p *Admin) SetLogLevel(_ *http.Request, args *SetLogLevelArgs, reply *api.EmptyReply) error
func (*Admin) StartCPUProfiler ¶
StartCPUProfiler starts a cpu profile writing to the specified file
func (*Admin) StopCPUProfiler ¶
StopCPUProfiler stops the cpu profile
type Batch ¶
Batch implements ethdb.Batch
type Block ¶
type Block struct {
// contains filtered or unexported fields
}
Block implements the snowman.Block interface
func (*Block) SetStatus ¶
SetStatus implements the InternalBlock interface allowing ChainState to set the status on an existing block
func (*Block) ShouldVerifyWithContext ¶
ShouldVerifyWithContext implements the block.WithVerifyContext interface
type BlockValidator ¶
func NewBlockValidator ¶
func NewBlockValidator() BlockValidator
type BuildGenesisArgs ¶
type BuildGenesisArgs struct { GenesisData *core.Genesis `json:"genesisData"` Encoding formatting.Encoding `json:"encoding"` }
BuildGenesisArgs are arguments for BuildGenesis
type BuildGenesisReply ¶
type BuildGenesisReply struct { GenesisBytes string `json:"genesisBytes"` Encoding formatting.Encoding `json:"encoding"` }
BuildGenesisReply is the reply from BuildGenesis
type Client ¶
type Client interface { StartCPUProfiler(ctx context.Context, options ...rpc.Option) error StopCPUProfiler(ctx context.Context, options ...rpc.Option) error MemoryProfile(ctx context.Context, options ...rpc.Option) error LockProfile(ctx context.Context, options ...rpc.Option) error SetLogLevel(ctx context.Context, level log.Lvl, options ...rpc.Option) error GetVMConfig(ctx context.Context, options ...rpc.Option) (*Config, error) }
Client interface for interacting with EVM chain
func NewCChainClient ¶
NewCChainClient returns a Client for interacting with the C Chain
type Config ¶
type Config struct { // Airdrop AirdropFile string `json:"airdrop"` // Subnet EVM APIs SnowmanAPIEnabled bool `json:"snowman-api-enabled"` WarpAPIEnabled bool `json:"warp-api-enabled"` AdminAPIEnabled bool `json:"admin-api-enabled"` AdminAPIDir string `json:"admin-api-dir"` // 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"` 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 block. 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"` // 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"` }
Config ...
func (Config) EthAPIs ¶
EthAPIs returns an array of strings representing the Eth APIs that should be enabled
func (Config) EthBackendSettings ¶
func (*Config) SetDefaults ¶
func (c *Config) SetDefaults()
type ConfigReply ¶
type ConfigReply struct {
Config *Config `json:"config"`
}
type Database ¶
Database implements ethdb.Database
func (Database) NewBatchWithSize ¶
NewBatchWithSize implements ethdb.Database TODO: propagate size through avalanchego Database interface
func (Database) NewIterator ¶
NewIterator implements ethdb.Database
Note: This method assumes that the prefix is NOT part of the start, so there's no need for the caller to prepend the prefix to the start.
func (Database) NewIteratorWithStart ¶
NewIteratorWithStart implements ethdb.Database
type DecodeGenesisArgs ¶
type DecodeGenesisArgs struct { GenesisBytes string `json:"genesisBytes"` Encoding formatting.Encoding `json:"encoding"` }
DecodeGenesisArgs are arguments for DecodeGenesis
type DecodeGenesisReply ¶
type DecodeGenesisReply struct { Genesis *core.Genesis `json:"genesisData"` Encoding formatting.Encoding `json:"encoding"` }
DecodeGenesisReply is the reply from DecodeGenesis
type Duration ¶
func (Duration) MarshalJSON ¶
String implements the stringer interface.
func (*Duration) UnmarshalJSON ¶
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 GossipHandler ¶
type GossipHandler struct {
// contains filtered or unexported fields
}
GossipHandler handles incoming gossip messages
func NewGossipHandler ¶
func NewGossipHandler(vm *VM, stats GossipReceivedStats) *GossipHandler
type GossipReceivedStats ¶
type GossipReceivedStats interface { IncEthTxsGossipReceived() // new vs. known txs received IncEthTxsGossipReceivedKnown() IncEthTxsGossipReceivedNew() }
GossipReceivedStats groups functions for incoming gossip stats.
type GossipSentStats ¶
type GossipSentStats interface { IncEthTxsGossipSent() // regossip IncEthTxsRegossipQueued() IncEthTxsRegossipQueuedLocal(count int) IncEthTxsRegossipQueuedRemote(count int) }
GossipSentStats groups functions for outgoing gossip stats.
type GossipStats ¶
type GossipStats interface { GossipReceivedStats GossipSentStats }
GossipStats contains methods for updating incoming and outgoing gossip stats.
func NewGossipStats ¶
func NewGossipStats() GossipStats
type GossipTx ¶
type GossipTx struct {
Tx *types.Transaction
}
type GossipTxPool ¶
type GossipTxPool struct {
// contains filtered or unexported fields
}
func NewGossipTxPool ¶
func NewGossipTxPool(mempool *txpool.TxPool) (*GossipTxPool, error)
func (*GossipTxPool) Add ¶
func (g *GossipTxPool) Add(tx *GossipTx) error
Add enqueues the transaction to the mempool. Subscribe should be called to receive an event if tx is actually added to the mempool or not.
func (*GossipTxPool) Iterate ¶
func (g *GossipTxPool) Iterate(f func(tx *GossipTx) bool)
func (*GossipTxPool) Subscribe ¶
func (g *GossipTxPool) Subscribe(ctx context.Context)
type Gossiper ¶
type Gossiper interface { // GossipTxs sends AppGossip message containing the given [txs] GossipTxs(txs []*types.Transaction) error }
Gossiper handles outgoing gossip of transactions
type SetLogLevelArgs ¶
type SetLogLevelArgs struct {
Level string `json:"level"`
}
type SnowmanAPI ¶
type SnowmanAPI struct {
// contains filtered or unexported fields
}
SnowmanAPI introduces snowman specific functionality to the evm
func (*SnowmanAPI) GetAcceptedFront ¶
func (api *SnowmanAPI) GetAcceptedFront(ctx context.Context) (*GetAcceptedFrontReply, error)
GetAcceptedFront returns the last accepted block's hash and height
func (*SnowmanAPI) IssueBlock ¶
func (api *SnowmanAPI) IssueBlock(ctx context.Context) error
IssueBlock to the chain
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 StateSyncClearOngoingSummary() 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 StaticService ¶
type StaticService struct{}
StaticService defines the static API services exposed by the evm
func CreateStaticService ¶
func CreateStaticService() *StaticService
func (*StaticService) BuildGenesis ¶
func (ss *StaticService) BuildGenesis(_ *http.Request, args *BuildGenesisArgs, reply *BuildGenesisReply) error
BuildGenesis constructs a genesis file.
func (*StaticService) DecodeGenesis ¶
func (ss *StaticService) DecodeGenesis(_ *http.Request, args *DecodeGenesisArgs, reply *DecodeGenesisReply) error
BuildGenesis constructs a genesis file.
type Status ¶
type Status uint32
Status ...
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
type SubnetEVMLogger ¶
func InitLogger ¶
func InitLogger(alias string, level string, jsonFormat bool, writer io.Writer) (SubnetEVMLogger, error)
InitLogger initializes logger with alias and sets the log level and format with the original os.StdErr interface along with the context logger.
func (*SubnetEVMLogger) SetLogLevel ¶
func (c *SubnetEVMLogger) SetLogLevel(level string) error
SetLogLevel sets the log level of initialized log handler.
type Syncer ¶
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 peer.Network // State sync server and client StateSyncServer StateSyncClient // contains filtered or unexported fields }
VM implements the snowman.ChainVM interface
func (*VM) CreateHandlers ¶
CreateHandlers makes new http handlers that can handle API calls
func (*VM) CreateStaticHandlers ¶
CreateStaticHandlers makes new http handlers that can handle API calls
func (*VM) GetBlockIDAtHeight ¶
GetBlockAtHeight returns the canonical block at [blkHeight]. If [blkHeight] is less than the height of the last accepted block, this will return the block accepted at that height. Otherwise, it may return a blkID that has not yet been accepted. Note: the engine assumes that if a block is not found at [blkHeight], 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 ¶
GetCurrentNonce returns the nonce associated with the address at the preferred block
func (*VM) HealthCheck ¶
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 *snow.Context, db database.Database, genesisBytes []byte, upgradeBytes []byte, configBytes []byte, toEngine chan<- commonEng.Message, fxs []*commonEng.Fx, appSender commonEng.AppSender, ) error
Initialize implements the snowman.ChainVM interface
func (*VM) NewBlockBuilder ¶
func (*VM) SetPreference ¶
SetPreference sets what the current tail of the chain is
func (*VM) VerifyHeightIndex ¶
VerifyHeightIndex always returns a nil error since the index is maintained by vm.blockChain.