36 个稳定版本 (13 个主要版本)

13.0.0 2024 年 8 月 8 日
12.1.0 2024 年 7 月 16 日
11.0.0 2024 年 7 月 8 日
10.0.0 2024 年 6 月 20 日
0.5.0 2021 年 11 月 17 日

#456 in 神奇豆

Download history 11347/week @ 2024-05-04 11486/week @ 2024-05-11 10388/week @ 2024-05-18 8588/week @ 2024-05-25 8225/week @ 2024-06-01 7983/week @ 2024-06-08 9255/week @ 2024-06-15 12887/week @ 2024-06-22 10435/week @ 2024-06-29 12415/week @ 2024-07-06 14212/week @ 2024-07-13 14410/week @ 2024-07-20 13575/week @ 2024-07-27 15821/week @ 2024-08-03 15697/week @ 2024-08-10 14586/week @ 2024-08-17

62,617 每月下载量
用于 25 个 crate(18 个直接使用)

MIT 许可证

1MB
18K SLoC

revm

CI License Chat

Rust Ethereum 虚拟机

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

以下是 Revm 遵循的指导原则列表。

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

项目

结构

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

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

在优化 revm 上做了很多努力。

从源码构建

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

注意: 构建 revm 使用 clang 需要 c-kzgsecp256k1 功能标志,因为它们依赖于 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 中找到。

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

  • 分析
  • snailtracer
  • 转账

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

(如果您想将项目添加到列表中,请 ping 我或打开 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

依赖项

~10–30MB
~491K SLoC