ITADN
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.0MIT license中的任意一种进行许可。
除非您明确说明其他情况,否则根据 Apache-2.0 许可证的定义,您有意提交以纳入这些 crate 的任何贡献,均应按照上述方式采用双重许可,且不得附加任何其他条款或条件。