18个稳定版本 (7个主要版本)

新版本 8.0.0 2024年8月8日
7.1.0 2024年7月16日
6.0.0 2024年7月8日
5.0.0 2024年6月20日
1.0.0 2023年1月29日

#903魔法豆

Download history 12835/week @ 2024-04-24 10192/week @ 2024-05-01 10920/week @ 2024-05-08 11176/week @ 2024-05-15 9860/week @ 2024-05-22 9006/week @ 2024-05-29 8788/week @ 2024-06-05 8031/week @ 2024-06-12 12803/week @ 2024-06-19 11024/week @ 2024-06-26 9720/week @ 2024-07-03 13249/week @ 2024-07-10 14851/week @ 2024-07-17 12600/week @ 2024-07-24 14283/week @ 2024-07-31 17309/week @ 2024-08-07

61,780 每月下载量
用于 40 个crate(11个直接使用)

MIT 许可证

490KB
3.5K SLoC

revm

CI License Chat

Rust以太坊虚拟机

Revm是一个用Rust编写的EVM,专注于速度简洁性。它具有快速灵活的实现、简单的接口和嵌入式宿主。它通过了所有ethereum/tests测试套件。

以下是Revm遵循的一些指导原则。

  • 与EVM兼容性和稳定性 - 这不言而喻,但在这里提及一下。在区块链行业中,稳定性是任何系统的最期望属性。
  • 速度 - 是最重要的因素之一,大多数决策都是为了配合这一点。
  • 简洁性 - 内部简化以便易于理解和扩展,接口易于使用或集成到其他项目中。
  • 接口 - [no_std]以便可以作为wasm库使用,并在需要时与JavaScript和cpp绑定集成。

项目

结构

  • crates
    • revm -> 主要EVM库。
    • revm-primitives -> 基本数据类型。
    • revm-interpreter -> 带有指令的执行循环。
    • revm-precompile -> EVM预编译
  • bins
    • revme: cli二进制文件,用于运行状态测试json文件

该项目倾向于使用最新的Rust版本,因此如果您遇到构建错误,请首先尝试运行 rustup update

在revm的优化上投入了很大努力

从源码构建

git clone https://github.com/bluealloy/revm.git
cd revm
cargo build --release

注意: 使用 clang 是构建带有 c-kzgsecp256k1 功能标志的 revm 所必需的,因为它们依赖于 C 库。如果您尚未安装,可以使用 apt install clang 安装它。

运行eth测试

转到 cd bins/revme/

从(这将花费一些时间)下载eth测试: git clone https://github.com/ethereum/tests

使用以下命令运行测试: cargo run --release -- statetest tests/GeneralStateTests/ tests/LegacyTests/Constantinople/GeneralStateTests

GeneralStateTests 包含所有与EVM相关的测试。

运行基准测试

基准测试可以在 crates/revm/benches 中找到。

目前,可用的基准测试包括以下内容。

  • analysis
  • snailtracer
  • transfer

要运行 snailtracer 基准测试,执行下面的 cargo bench

cargo bench --package revm --profile release -- snailtracer

使用 flamegraph,您可以创建一个火焰图,将基准执行中各个部分的运行时分解 - 一个火焰图。执行 cargo flamegraph

cargo flamegraph --root --freq 4000 --min-width 0.001 --package revm --bench bench -- snailtracer

此命令将产生一个输出到 flamegraph.svg 的火焰图图像。火焰图还需要sudo模式来运行(因此有 --root 命令行参数)并且如果您尚未在sudo模式下,它将提示您输入密码。

运行示例

cargo run -p revm --features ethersdb --example fork_ref_transact

生成块跟踪并将它们写入新的 traces/ 目录中的json文件。每个文件对应于块中的一个事务,并以此命名: <tx index>.json

cargo run -p revm --features std,serde-json,ethersdb --example generate_block_traces

使用

  • Foundry 是一个使用Rust编写的快速、可移植和模块化的Ethereum应用程序开发工具包。
  • Helios 是一个完全无信任、高效且可移植的Ethereum轻客户端,使用Rust编写。
  • Reth 是一个模块化、对贡献者友好且快速实现的Ethereum协议
  • Arbiter 是一个用于状态化以太坊智能合约模拟的框架。
  • Zeth 是基于 RISC Zero zkVM 的开源 ZK 区块证明器,用于以太坊。
  • VERBS 是一个开源的以太坊基于代理建模和模拟库,具有 Python API。
  • Hardhat 是一个用于编译、部署、测试和调试您的以太坊软件的开发环境。
  • Trin 是 Portal 网络客户端。这是一个用 Rust 编写的执行和共识层以太坊轻客户端,Portal 网络客户端提供完整、可证明和分布式执行存档访问。
  • Simular 是一个具有快速嵌入式的以太坊虚拟机的 Python 智能合约 API。
  • rbuilder 是一个基于 Rust 的先进以太坊 MEV-Boost 区块构建器,旨在与 Reth 一起工作。
  • ...

(如果您想将项目添加到列表中,请联系我或打开 PR)

文档

本书可以在以下 GitHub 页面找到: https://bluealloy.github.io/revm/

文档(遗憾的是需要一些爱)可以在以下位置找到: https://bluealloy.github.io/revm/docs/

要在本地环境中提供 mdbook 文档,请确保您已安装 mdbook(如果尚未安装,请使用 cargo 安装)然后运行

mdbook serve documentation

联系

有一个公开的 Telegram 群组: https://t.me/+Ig4WDWOzikA3MzA0

或者如果您想直接联系我,以下是我的电子邮件: [email protected] 和 Telegram: https://t.me/draganrakita

依赖项

~15MB
~365K SLoC