# README
Subnet EVM
Metal 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] [email protected] (Protocol Version: 9)
[v0.1.1-v0.1.2] [email protected] (Protocol Version: 10)
[v0.2.0] [email protected] (Protocol Version: 11)
[v0.2.1] [email protected] (Protocol Version: 12)
[v0.2.2] [email protected] (Protocol Version: 14)
[v0.2.3] [email protected] (Protocol Version: 15)
[v0.2.4] [email protected] (Protocol Version: 15)
[v0.2.5] [email protected] (Protocol Version: 15)
[v0.2.6] [email protected] (Protocol Version: 15)
[v0.2.7] [email protected] (Protocol Version: 15)
[v0.2.8] [email protected] (Protocol Version: 15)
[v0.2.9] [email protected] (Protocol Version: 15)
[v0.3.0] [email protected] (Protocol Version: 16)
[v0.4.0] [email protected] (Protocol Version: 17)
[v0.4.1] [email protected] (Protocol Version: 18)
[v0.4.2] [email protected] (Protocol Version: 18)
[v0.4.3] [email protected] (Protocol Version: 19)
[v0.4.4] [email protected] (Protocol Version: 19)
[v0.4.5] [email protected] (Protocol Version: 20)
[v0.4.6] [email protected] (Protocol Version: 20)
[v0.4.7] [email protected] (Protocol Version: 21)
[v0.4.8] [email protected] (Protocol Version: 22)
[v0.4.9] [email protected] (Protocol Version: 23)
[v0.4.10] [email protected] (Protocol Version: 23)
[v0.4.11] [email protected] (Protocol Version: 24)
[v0.4.12] [email protected] (Protocol Version: 24)
[v0.5.0] [email protected] (Protocol Version: 25)
[v0.5.1] [email protected] (Protocol Version: 26)
[v0.5.2] [email protected] (Protocol Version: 26)
[v0.5.3] [email protected] (Protocol Version: 27)
[v0.5.4] [email protected] (Protocol Version: 28)
[v0.5.5] [email protected] (Protocol Version: 28)
[v0.5.6] [email protected] (Protocol Version: 28)
[v0.5.7] [email protected] (Protocol Version: 29)
[v0.5.8] [email protected] (Protocol Version: 29)
[v0.5.9] [email protected] (Protocol Version: 30)
[v0.5.10] [email protected] (Protocol Version: 30)
[v0.5.11] [email protected] (Protocol Version: 31)
[v0.6.0] [email protected] (Protocol Version: 33)
[v0.6.1] [email protected] (Protocol Version: 33)
[v0.6.2] [email protected] (Protocol Version: 34)
[v0.6.3] [email protected] (Protocol Version: 35)
API
The Subnet EVM supports the following API namespaces:
eth
personal
txpool
debug
Only the eth
namespace is enabled by default.
Compatibility
The Subnet EVM is compatible with almost all Ethereum tooling, including Remix, Metamask and Truffle.
Differences Between Subnet EVM and Coreth
- Added configurable fees and gas limits in genesis
- Merged Metal 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.7 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/!metal!blockchain
cd src/github.com/\!metal\!blockchain
git clone [email protected]:MetalBlockchain/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 metal-cli to set up an instance of Subnet-EVM on a local Metal Network.