20 个稳定版本 (8 个主要版本)

9.0.0 2024 年 8 月 8 日
8.1.0 2024 年 7 月 16 日
7.0.0 2024 年 7 月 8 日
6.0.0 2024 年 6 月 20 日
1.0.0 2023 年 1 月 29 日

#852魔法豆

Download history 9200/week @ 2024-04-30 9794/week @ 2024-05-07 10106/week @ 2024-05-14 8480/week @ 2024-05-21 7223/week @ 2024-05-28 6792/week @ 2024-06-04 6549/week @ 2024-06-11 9903/week @ 2024-06-18 10187/week @ 2024-06-25 9010/week @ 2024-07-02 11833/week @ 2024-07-09 13193/week @ 2024-07-16 11546/week @ 2024-07-23 12687/week @ 2024-07-30 14762/week @ 2024-08-06 13073/week @ 2024-08-13

54,751 每月下载量
29 个软件包中使用了 (4 个直接使用)

MIT 许可证

1MB
10K SLoC

revm

CI License Chat

Rust 以太坊虚拟机

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

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

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

项目

结构

  • crates
    • 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 找到。

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

  • analysis
  • snailtracer
  • transfer

要运行 snailtracer 基准测试,执行以下子命令:

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 是一个用 Rust 编写的完全无需信任、高效且便携的 Ethereum 轻客户端。
  • Reth 是一个模块化、易于贡献者参与且运行速度快的 Ethereum 协议实现。
  • Arbiter 是一个用于有状态 Ethereum 智能合约模拟的框架。
  • Zeth 是一个基于 RISC Zero zkVM 的开源 ZK 区块验证器,用于 Ethereum。
  • VERBS 是一个开源的基于Ethereum代理的建模和仿真库,具有Python API。
  • Hardhat 是一个用于编译、部署、测试和调试你的Ethereum软件的开发环境。
  • Trin 是 Portal Network 客户端。这是一个用Rust编写的执行和共识层 Ethereum 轻客户端。Portal Network 客户端提供完整、可验证和分布式执行存档访问。
  • Simular 是一个具有快速、嵌入式 Ethereum 虚拟机的 Python 智能合约 API。
  • rbuilder 是一个用 Rust 编写、与 Reth 兼容的先进 Ethereum MEV-Boost 区块构建器。
  • ...

(如果你想要将项目添加到列表中,联系我或打开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

依赖项

~9–12MB
~244K SLoC