The EVM pallet allows unmodified EVM code to be executed in a Substrate-based blockchain.
There are a separate set of accounts managed by the EVM pallet. Substrate based accounts can call the EVM Pallet to deposit or withdraw balance from the Substrate base-currency into a different balance managed and used by the EVM pallet. Once a user has populated their balance, they can create and call smart contracts using this pallet.
There’s one-to-one mapping from Substrate accounts and EVM external accounts that is defined by a conversion function.
The EVM pallet should be able to produce nearly identical results compared to the Ethereum mainnet, including gas cost and balance changes.
Observable differences include:
- The available length of block hashes may not be 256 depending on the configuration of the System pallet in the Substrate runtime.
- Difficulty and coinbase, which do not make sense in this pallet and is currently hard coded to zero.
We currently do not aim to make unobservable behaviors, such as state root, to be the same. We also don’t aim to follow the exact same transaction / receipt format. However, given one Ethereum transaction and one Substrate account’s private key, one should be able to convert any Ethereum transaction into a transaction compatible with this pallet.
The gas configurations are configurable. Right now, a pre-defined London hard fork configuration option is provided.
Basic account information.
Context of the runtime.
Implements the transaction payment for a pallet implementing the
trait (eg. the pallet_balances) using an unbalance handler (implementing
Ensure that the origin never happens.
Ensure that the origin is root.
Ensure that the EVM address is the same as the Substrate address. This only works if the account
Ensure that the address is truncated hash of the origin. Only works if the account id is
Hashed address mapping.
Identity address mapping.
Data returned by a precompile on success.
Returns the Substrate block hash by number.
External input from the transaction.
Exit error reason.
Exit fatal reason.
Exit revert reason.
Exit succeed reason.
Data returned by a precompile in case of failure.
A trait for getting a block hash by number.
Trait that outputs the current transaction gas price.
A mapping function that converts Ethereum gas to Substrate weight
Handle withdrawing, refunding and depositing of transaction fees.
One single precompile used by EVM engine.
Handle provided to a precompile to interact with the EVM.
A set of precompiles. Checks of the provided address being in the precompile set should be as cheap as possible since it may be called often.