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 在 魔法豆
61,780 每月下载量
用于 40 个crate(11个直接使用)
490KB
3.5K SLoC
revm
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的优化上投入了很大努力
- 优化解释器循环: 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
注意: 使用 clang
是构建带有 c-kzg
或 secp256k1
功能标志的 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