Crate pallet_evm

Source
Expand description

§EVM Pallet

The EVM pallet allows unmodified EVM code to be executed in a Substrate-based blockchain.

§EVM Engine

The EVM pallet uses SputnikVM as the underlying EVM engine. The engine is overhauled so that it’s modular.

§Execution Lifecycle

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.

§EVM Pallet vs Ethereum Network

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.

Re-exports§

pub use self::runner::Runner;
pub use self::runner::RunnerError;
pub use self::weights::WeightInfo;
pub use self::pallet::*;

Modules§

pallet
The pallet module in each FRAME pallet hosts the most important items needed to construct this pallet.
runner
weights
Autogenerated weights for pallet_evm

Structs§

Account
Basic account information.
CodeMetadata
Context
Context of the runtime.
EVMCurrencyAdapter
Implements the transaction payment for a pallet implementing the Currency trait (eg. the pallet_balances) using an unbalance handler (implementing OnUnbalanced). Similar to CurrencyAdapter of pallet_transaction_payment
EVMFungibleAdapter
Implements transaction payment for a pallet implementing the [fungible] trait (eg. pallet_balances) using an unbalance handler (implementing [OnUnbalanced]).
EnsureAccountId20
Ensure that the address is AccountId20.
EnsureAddressNever
Ensure that the origin never happens.
EnsureAddressRoot
Ensure that the origin is root.
EnsureAddressSame
Ensure that the EVM address is the same as the Substrate address. This only works if the account ID is H160.
EnsureAddressTruncated
Ensure that the address is truncated hash of the origin. Only works if the account id is AccountId32.
EnsureAllowedCreateAddress
EvmConfig
Runtime configuration.
ExecutionInfo
FixedGasWeightMapping
FrameSystemAccountProvider
EVM account provider based on the [frame_system] accounts.
HashedAddressMapping
Hashed address mapping.
IdentityAddressMapping
Identity address mapping.
Log
PrecompileOutput
Data returned by a precompile on success.
SubstrateBlockHashMapping
Returns the Substrate block hash by number.
Vicinity
External input from the transaction.

Enums§

ExitError
Exit error reason.
ExitFatal
Exit fatal reason.
ExitReason
Exit reason.
ExitRevert
Exit revert reason.
ExitSucceed
Exit succeed reason.
IsPrecompileResult
PrecompileFailure
Data returned by a precompile in case of failure.
TransactionValidationError
Transaction validation errors

Traits§

AccountProvider
The account provider interface abstraction layer.
AddressMapping
Trait to be implemented for evm address mapping.
BlockHashMapping
A trait for getting a block hash by number.
EnsureAddressOrigin
EnsureCreateOrigin
FeeCalculator
Trait that outputs the current transaction gas price.
FixedGasWeightMappingAssociatedTypes
GasWeightMapping
A mapping function that converts Ethereum gas to Substrate weight
LinearCostPrecompile
OnChargeEVMTransaction
Handle withdrawing, refunding and depositing of transaction fees. Similar to OnChargeTransaction of pallet_transaction_payment
OnCreate
Precompile
One single precompile used by EVM engine.
PrecompileHandle
Handle provided to a precompile to interact with the EVM.
PrecompileSet
A set of precompiles.

Type Aliases§

AccountIdOf
Utility alias for easy access to the AccountProvider::AccountId type from a given config.
BalanceOf
Type alias for currency balance.
CallInfo
CreateInfo
PrecompileResult