alloy-rs/evm2 · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈
evm2
基于 Rust 开发的快速、可定制的 EVM 实现。
特点
- 由于采用了更高效的解释器、静态调度表以及更优的指令处理机制,其速度可达 revm 的 2 倍。
- 专为定制化 EVM 设计:无需修改核心代码,即可扩展规范、操作码、Gas 费用规则、交易处理逻辑、预编译功能、环境数据以及检测工具。
- 清晰的扩展边界:通过类型化的配置,可将分叉逻辑、交易处理、主机状态及操作码定义分开管理,最终编译为简洁的执行路径。
示例
enum CustomSpecId {
Custom,
// ...
}
struct CustomTypes;
impl EvmTypes for CustomTypes {
// ...
}
#[instruction(EvmTypes = CustomTypes)]
fn l1_blocknumber(cx: _) -> out {
*out = Word::from(cx.state.host().block_env().ext.l1_block_number);
}
fn main() -> Result<()> {
let spec_id = CustomSpecId::Custom;
let mut evm = Evm::<CustomTypes>::new(spec_id, ..);
let tx = CustomTx { .. };
let executed = evm.transact(&tx)?;
let result = executed.commit();
// ...
Ok(())
}
完整版本请参见 crates/evm2/examples/custom_evm]。
基准测试
cargo bench -p evm2 --bench evm
EVM2_BENCH_REVM=1 cargo bench -p evm2 --bench evm
开发
cargo fmt --all
cargo cl
cargo nextest run
支持的 Rust 版本(MSRV)
evm2 始终致力于保持与最新稳定版的 Rust 同步。
最低支持的 Rust 版本(MSRV)可能会随时更新,这样我们就能利用 Rust 的新功能与改进。
许可证
您可以根据自己的选择,采用Apache License,Version 2.0或MIT license中的任意一种进行许可。除非您明确说明其他情况,否则根据 Apache-2.0 许可证的定义,您有意提交以纳入这些 crate 的任何贡献,均应按照上述方式采用双重许可,且不得附加任何其他条款或条件。