2个不稳定版本

0.1.0 2024年6月27日
0.0.0-保留2024年6月19日

#58 in #evm

MIT/Apache

255KB
5.5K SLoC

revmc

实验性的JITAOT编译器,用于以太坊虚拟机

编译器实现抽象于中间表示后端。它性能出色,如下面的我们的criterion基准测试所示,并通过Revm暴露了直观的API。

image

此仓库托管两个后端实现

  • LLVM (revmc-llvm):主后端,具备完整的测试覆盖率;
  • Cranelift (revmc-cranelift);由于Cranelift缺少i256支持,目前无法使用。这可能需要Cranelift的定制分支。

需求

  • 最新稳定版Rust

LLVM后端

  • Linux或macOS,Windows不支持
  • LLVM 17
    • 在基于Debian的Linux发行版上:见apt.llvm.org
    • 在基于Arch的Linux发行版上:pacman -S llvm
    • 在macOS上:brew install llvm@17
    • 可能需要以下环境变量
      prefix=$(llvm-config --prefix)
      # or
      #prefix=$(llvm-config-17 --prefix)
      # on macOS:
      #prefix=$(brew --prefix llvm@17)
      export LLVM_SYS_170_PREFIX=$prefix
      

用法

编译器实现为一个库,可以通过revmccrate使用。

需要最小运行时来运行AOT编译的字节码。默认运行时实现通过在revmc-builtinscrate中导出的符号提供,必须在最终二进制文件中导出。这可以通过以下构建脚本实现

fn main() {
    revmc_build::emit();
}

您可以在示例目录中查看示例用法。

致谢

初始编译器实现受到了paradigmxyz/jitevm的启发。

许可

根据您的选择,许可协议为Apache License, Version 2.0或MIT许可证。
除非您明确表示,否则根据Apache-2.0许可证定义的,您有意提交的任何贡献,均应双许可,如上所述,无任何附加条款或条件。

依赖项

约15-26MB
约435K SLoC