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 神奇豆
62,617 每月下载量
用于 25 个 crate(18 个直接使用)
1MB
18K SLoC
revm
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 上做了很多努力。
- 优化解释器循环: https://github.com/bluealloy/revm/issues/7
- 引入字节码格式(以及更好的字节码分析): https://github.com/bluealloy/revm/issues/121
- 指令签名的统一: https://github.com/bluealloy/revm/pull/283
从源码构建
git clone https://github.com/bluealloy/revm.git
cd revm
cargo build --release
注意: 构建 revm 使用 clang
需要 c-kzg
或 secp256k1
功能标志,因为它们依赖于 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