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 在 魔法豆
54,751 每月下载量
在 29 个软件包中使用了 (4 个直接使用)
1MB
10K SLoC
revm
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 进行了一些优化工作
- 优化解释器循环: 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
找到。
目前,可用的基准测试包括以下内容。
- 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