You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

Status: Proposed

EVM Library 

Feature Overview: 

Pull out the EVM functionality from the `core` subproject/module into a separate `evm` subproject module, suitable for use as a library component. Limited to no classes unrelated to EVM functionality will be required for the dependency (example: no QBFT, no ETCHash, no transaction type code, etc).

Rationale

Besu is currently monolithic in its deployment.  While there is some component and package separation those are mostly accidental and reflect boundaries between developer groups.  There are a number of components that may be severable with effort (EVM, consensus, p2p, rpc, network definitions, etc).  The EVM is fairly self contained and would be a good starting point to start this process.

Potential Risks / Rabbit Holes: 

  • Deep code changes may be required

In Scope:

  • no measurable performance regressions for mainnet and existing public networks
  • Usable by other projects
    • Usable by Web3j in their local EVM execution tasks
    • Includable in other DLTs (or Layer 2s) without requiring full mainnet semantics
    • Includable in Android applications without large library dependencies
  • Ultimately move to a top-level repo as a Besu subproject.
    • Within Besu either included via submodule reference or via synchronized releases.
  • To the extent possible testable with existing Ethereum reference tests (via t8n tool interfaces)

Out of scope:

  • Pluggable EVM/Contract layer.
    • May be a good idea, but not now.

Longer description: 

Anticipated Changes

  • Create appropriate Interface classes for use by Besu to access the EVM component
    • Pretty much anything Mainnet* is a candidate here
  • move code to new directory/repository
  • rework build scripts to support new locations

Targets of Opportunity:

  • re-implement EVM Tool to just the EVM library
  • support t8n tool formats
  • Quarkus/GraalVM AOT build (suitable for fuzz testing)

Go crazy here! This section should thoroughly describe the feature in as much or little detail as is available. Feel free to link out to other resources, include screenshots, code snippets, etc.

  • No labels