subnet-evm

module
v0.6.5-rc.0 Latest Latest
Warning

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

Go to latest
Published: May 23, 2024 License: GPL-3.0, LGPL-3.0

README

Subnet EVM

CodeQL

Avalanche is a network composed of multiple blockchains. Each blockchain is an instance of a Virtual Machine (VM), much like an object in an object-oriented language is an instance of a class. That is, the VM defines the behavior of the blockchain.

Subnet EVM is the Virtual Machine (VM) that defines the Subnet Contract Chains. Subnet EVM is a simplified version of Coreth VM (C-Chain).

This chain implements the Ethereum Virtual Machine and supports Solidity smart contracts as well as most other Ethereum client functionality.

Building

The Subnet EVM runs in a separate process from the main AvalancheGo process and communicates with it over a local gRPC connection.

AvalancheGo Compatibility
[v0.1.0] AvalancheGo@v1.7.0-v1.7.4 (Protocol Version: 9)
[v0.1.1-v0.1.2] AvalancheGo@v1.7.5-v1.7.6 (Protocol Version: 10)
[v0.2.0] AvalancheGo@v1.7.7-v1.7.9 (Protocol Version: 11)
[v0.2.1] AvalancheGo@v1.7.10 (Protocol Version: 12)
[v0.2.2] AvalancheGo@v1.7.11-v1.7.12 (Protocol Version: 14)
[v0.2.3] AvalancheGo@v1.7.13-v1.7.16 (Protocol Version: 15)
[v0.2.4] AvalancheGo@v1.7.13-v1.7.16 (Protocol Version: 15)
[v0.2.5] AvalancheGo@v1.7.13-v1.7.16 (Protocol Version: 15)
[v0.2.6] AvalancheGo@v1.7.13-v1.7.16 (Protocol Version: 15)
[v0.2.7] AvalancheGo@v1.7.13-v1.7.16 (Protocol Version: 15)
[v0.2.8] AvalancheGo@v1.7.13-v1.7.18 (Protocol Version: 15)
[v0.2.9] AvalancheGo@v1.7.13-v1.7.18 (Protocol Version: 15)
[v0.3.0] AvalancheGo@v1.8.0-v1.8.6 (Protocol Version: 16)
[v0.4.0] AvalancheGo@v1.9.0 (Protocol Version: 17)
[v0.4.1] AvalancheGo@v1.9.1 (Protocol Version: 18)
[v0.4.2] AvalancheGo@v1.9.1 (Protocol Version: 18)
[v0.4.3] AvalancheGo@v1.9.2-v1.9.3 (Protocol Version: 19)
[v0.4.4] AvalancheGo@v1.9.2-v1.9.3 (Protocol Version: 19)
[v0.4.5] AvalancheGo@v1.9.4 (Protocol Version: 20)
[v0.4.6] AvalancheGo@v1.9.4 (Protocol Version: 20)
[v0.4.7] AvalancheGo@v1.9.5 (Protocol Version: 21)
[v0.4.8] AvalancheGo@v1.9.6-v1.9.8 (Protocol Version: 22)
[v0.4.9] AvalancheGo@v1.9.9 (Protocol Version: 23)
[v0.4.10] AvalancheGo@v1.9.9 (Protocol Version: 23)
[v0.4.11] AvalancheGo@v1.9.10-v1.9.16 (Protocol Version: 24)
[v0.4.12] AvalancheGo@v1.9.10-v1.9.16 (Protocol Version: 24)
[v0.5.0] AvalancheGo@v1.10.0 (Protocol Version: 25)
[v0.5.1] AvalancheGo@v1.10.1-v1.10.4 (Protocol Version: 26)
[v0.5.2] AvalancheGo@v1.10.1-v1.10.4 (Protocol Version: 26)
[v0.5.3] AvalancheGo@v1.10.5-v1.10.8 (Protocol Version: 27)
[v0.5.4] AvalancheGo@v1.10.9-v1.10.12 (Protocol Version: 28)
[v0.5.5] AvalancheGo@v1.10.9-v1.10.12 (Protocol Version: 28)
[v0.5.6] AvalancheGo@v1.10.9-v1.10.12 (Protocol Version: 28)
[v0.5.7] AvalancheGo@v1.10.13-v1.10.14 (Protocol Version: 29)
[v0.5.8] AvalancheGo@v1.10.13-v1.10.14 (Protocol Version: 29)
[v0.5.9] AvalancheGo@v1.10.15-v1.10.17 (Protocol Version: 30)
[v0.5.10] AvalancheGo@v1.10.15-v1.10.17 (Protocol Version: 30)
[v0.5.11] AvalancheGo@v1.10.18-v1.10.19 (Protocol Version: 31)
[v0.6.0] AvalancheGo@v1.11.0-v1.11.1 (Protocol Version: 33)
[v0.6.1] AvalancheGo@v1.11.0-v1.11.1 (Protocol Version: 33)
[v0.6.2] AvalancheGo@v1.11.2 (Protocol Version: 34)
[v0.6.3] AvalancheGo@v1.11.3-v1.11.6 (Protocol Version: 35)
[v0.6.4] AvalancheGo@v1.11.3-v1.11.6 (Protocol Version: 35)
[v0.6.5] AvalancheGo@v1.11.3-v1.11.6 (Protocol Version: 35)

API

The Subnet EVM supports the following API namespaces:

  • eth
  • personal
  • txpool
  • debug

Only the eth namespace is enabled by default. Subnet EVM is a simplified version of Coreth VM (C-Chain). Full documentation for the C-Chain's API can be found here.

Compatibility

The Subnet EVM is compatible with almost all Ethereum tooling, including Remix, Metamask, and Foundry.

Differences Between Subnet EVM and Coreth

  • Added configurable fees and gas limits in genesis
  • Merged Avalanche hardforks into the single "Subnet EVM" hardfork
  • Removed Atomic Txs and Shared Memory
  • Removed Multicoin Contract and State

Block Format

To support these changes, there have been a number of changes to the SubnetEVM block format compared to what exists on the C-Chain and Ethereum. Here we list the changes to the block format as compared to Ethereum.

Block Header
  • BaseFee: Added by EIP-1559 to represent the base fee of the block (present in Ethereum as of EIP-1559)
  • BlockGasCost: surcharge for producing a block faster than the target rate

Create an EVM Subnet on a Local Network

Clone Subnet-evm

First install Go 1.21.10 or later. Follow the instructions here. You can verify by running go version.

Set $GOPATH environment variable properly for Go to look for Go Workspaces. Please read this for details. You can verify by running echo $GOPATH.

As a few software will be installed into $GOPATH/bin, please make sure that $GOPATH/bin is in your $PATH, otherwise, you may get error running the commands below.

Download the subnet-evm repository into your $GOPATH:

cd $GOPATH
mkdir -p src/github.com/ava-labs
cd src/github.com/ava-labs
git clone git@github.com:ava-labs/subnet-evm.git
cd subnet-evm

This will clone and checkout to master branch.

Run Local Network

To run a local network, it is recommended to use the avalanche-cli to set up an instance of Subnet-EVM on a local Avalanche Network.

There are two options when using the Avalanche-CLI:

  1. Use an official Subnet-EVM release: https://docs.avax.network/subnets/build-first-subnet
  2. Build and deploy a locally built (and optionally modified) version of Subnet-EVM: https://docs.avax.network/subnets/create-custom-subnet

Directories

Path Synopsis
Package accounts implements high level Ethereum account management.
Package accounts implements high level Ethereum account management.
abi
Package abi implements the Ethereum ABI (Application Binary Interface).
Package abi implements the Ethereum ABI (Application Binary Interface).
abi/bind
Package bind generates Ethereum contract Go bindings.
Package bind generates Ethereum contract Go bindings.
abi/bind/precompilebind
Package bind generates Ethereum contract Go bindings.
Package bind generates Ethereum contract Go bindings.
keystore
Package keystore implements encrypted storage of secp256k1 private keys.
Package keystore implements encrypted storage of secp256k1 private keys.
cmd
abigen
(c) 2023, Ava Labs, Inc.
(c) 2023, Ava Labs, Inc.
evm
evm executes EVM code snippets.
evm executes EVM code snippets.
utils
Package utils contains internal helper functions for go-ethereum commands.
Package utils contains internal helper functions for go-ethereum commands.
simulator Module
Package consensus implements different Ethereum consensus engines.
Package consensus implements different Ethereum consensus engines.
Package core implements the Ethereum consensus protocol.
Package core implements the Ethereum consensus protocol.
bloombits
Package bloombits implements bloom filtering on batches of data.
Package bloombits implements bloom filtering on batches of data.
rawdb
Package rawdb contains a collection of low level database accessors.
Package rawdb contains a collection of low level database accessors.
state
Package state provides a caching layer atop the Ethereum state trie.
Package state provides a caching layer atop the Ethereum state trie.
state/snapshot
Package snapshot implements a journalled, dynamic state dump.
Package snapshot implements a journalled, dynamic state dump.
txpool/blobpool
Package blobpool implements the EIP-4844 blob transaction pool.
Package blobpool implements the EIP-4844 blob transaction pool.
txpool/legacypool
Package legacypool implements the normal EVM execution transaction pool.
Package legacypool implements the normal EVM execution transaction pool.
types
Package types contains data types related to Ethereum consensus.
Package types contains data types related to Ethereum consensus.
vm
Package vm implements the Ethereum Virtual Machine.
Package vm implements the Ethereum Virtual Machine.
vm/runtime
Package runtime provides a basic execution model for executing EVM code.
Package runtime provides a basic execution model for executing EVM code.
eth
Package eth implements the Ethereum protocol.
Package eth implements the Ethereum protocol.
filters
Package filters implements an ethereum filtering system for block, transactions and log events.
Package filters implements an ethereum filtering system for block, transactions and log events.
tracers
Package tracers is a manager for transaction tracing engines.
Package tracers is a manager for transaction tracing engines.
tracers/internal/tracetest
(c) 2023, Ava Labs, Inc.
(c) 2023, Ava Labs, Inc.
tracers/js/internal/tracers
Package tracers contains the actual JavaScript tracer assets.
Package tracers contains the actual JavaScript tracer assets.
Package ethclient provides a client for the Ethereum RPC API.
Package ethclient provides a client for the Ethereum RPC API.
subnetevmclient
Package subnetevmclient provides an RPC client for subnet-evm-specific APIs.
Package subnetevmclient provides an RPC client for subnet-evm-specific APIs.
Package ethereum defines interfaces for interacting with Ethereum.
Package ethereum defines interfaces for interacting with Ethereum.
internal
debug
Package debug interfaces Go runtime debugging facilities.
Package debug interfaces Go runtime debugging facilities.
ethapi
Package ethapi implements the general Ethereum API functions.
Package ethapi implements the general Ethereum API functions.
reexec
This file originates from Docker/Moby, https://github.com/moby/moby/blob/master/pkg/reexec/reexec.go Licensed under Apache License 2.0: https://github.com/moby/moby/blob/master/LICENSE Copyright 2013-2018 Docker, Inc.
This file originates from Docker/Moby, https://github.com/moby/moby/blob/master/pkg/reexec/reexec.go Licensed under Apache License 2.0: https://github.com/moby/moby/blob/master/LICENSE Copyright 2013-2018 Docker, Inc.
version
Package version implements reading of build version information.
Package version implements reading of build version information.
Go port of Coda Hale's Metrics library
Go port of Coda Hale's Metrics library
Package miner implements Ethereum block creation and mining.
Package miner implements Ethereum block creation and mining.
evm
precompile
contract
Defines the interface for the configuration and execution of a precompile contract
Defines the interface for the configuration and execution of a precompile contract
precompileconfig
Defines the stateless interface for unmarshalling an arbitrary config of a precompile
Defines the stateless interface for unmarshalling an arbitrary config of a precompile
registry
Module to facilitate the registration of precompiles and their configuration.
Module to facilitate the registration of precompiles and their configuration.
Package rpc implements bi-directional JSON-RPC 2.0 on multiple transports.
Package rpc implements bi-directional JSON-RPC 2.0 on multiple transports.
runner module
scripts
parser Module
signer
sync
precompile/solidity
Implements solidity tests.
Implements solidity tests.
Package trie implements Merkle Patricia Tries.
Package trie implements Merkle Patricia Tries.
aggregator
Package aggregator is a generated GoMock package.
Package aggregator is a generated GoMock package.

Jump to

Keyboard shortcuts

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