Lux 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.
Lux EVM is the unified Virtual Machine (VM) that powers both the C-Chain and L1/L2 Subnet EVM chains. This package consolidates the former Coreth (C-Chain) and Subnet EVM codebases into a single implementation.
Note: The
github.com/luxfi/corethrepository has been deprecated and merged here. See the migration guide below.
This chain implements the Ethereum Virtual Machine and supports Solidity smart contracts as well as most other Ethereum client functionality.
The Subnet EVM runs in a separate process from the main Luxd process and communicates with it over a local gRPC connection.
[v0.7.0] Luxd@v1.12.0-v1.12.1 (Protocol Version: 38)
[v0.7.1] Luxd@v1.12.2 (Protocol Version: 39)
[v0.7.2] Luxd@v1.12.2/1.13.0-testnet (Protocol Version: 39)
[v0.7.3] Luxd@v1.12.2/1.13.0 (Protocol Version: 39)
[v0.7.4] Luxd@v1.13.1 (Protocol Version: 40)
[v0.7.5] Luxd@v1.13.2 (Protocol Version: 41)
[v0.7.6] Luxd@v1.13.3-rc.2 (Protocol Version: 42)
[v0.7.7] Luxd@v1.13.3 (Protocol Version: 42)
The Subnet EVM supports the following API namespaces:
ethpersonaltxpooldebug
Only the eth namespace is enabled by default.
Full documentation for the C-Chain's API can be found here.
The Subnet EVM is compatible with almost all Ethereum tooling, including Remix, Metamask, and Foundry.
This unified EVM package supports both modes:
C-Chain Mode (Primary Network):
- Atomic transactions for cross-chain transfers (X-Chain ↔ C-Chain)
- Shared memory integration
- Primary network consensus
Subnet EVM Mode (L1/L2 Subnets):
- Configurable fees and gas limits in genesis
- Simplified hardfork configuration
- No atomic transactions (cross-chain via Warp messaging)
If you were using github.com/luxfi/coreth, update your imports:
// Before
import "github.com/luxfi/coreth/core"
// After
import "github.com/luxfi/evm/core"All coreth functionality is preserved in this package.
To support these changes, there have been a number of changes to the EVM 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.
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
First install Go 1.23.9 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 evm repository into your $GOPATH:
cd $GOPATH
mkdir -p src/github.com/luxfi
cd src/github.com/luxfi
git clone git@github.com:luxfi/evm.git
cd evmThis will clone and checkout to master branch.
To run a local network, it is recommended to use the lux-cli to set up an instance of EVM on a local Lux Network.
There are two options when using the Lux-CLI:
- Use an official EVM release: https://docs.lux.network/subnets/build-first-subnet
- Build and deploy a locally built (and optionally modified) version of EVM: https://docs.lux.network/subnets/create-custom-subnet
You can refer to the docs/releasing/README.md file for the release process.