In the past, users of Frontier have to compromise and choose between two different runners:
- Stack runner, which focuses on Ethereum compliance.
- Builtin runner, which has better Substrate interoperability.
The compromise is no more!
This PR removes the need of this compromise, and introduces a unified EVM runner that has both good Ethereum compliance and Substrate interoperability. This is done by generalizing the StackExecutor
in evm
crate to expose a concrete and “dumb” StackState
trait. Users of evm
now only need to implement StackState
trait, and can re-use all other call/create/transact logic in the executor, which has already passed EVM test suites. The impl
of StackState
in Substrate then uses Substrate’s storage transactional layer, which makes it suitable for any Substrate interoperability jobs.