5 个版本
0.1.4 | 2023 年 9 月 20 日 |
---|---|
0.1.3 | 2023 年 9 月 20 日 |
0.1.2 | 2023 年 9 月 20 日 |
0.1.1 | 2023 年 9 月 19 日 |
0.1.0 | 2023 年 9 月 19 日 |
#1612 in 魔法豆
265KB
5K SLoC
EVM Rust 模拟器
EVM Rust 模拟器是一个简单的内存中以太坊虚拟机 (EVM) 模拟器,使用 Rust 编写。它被设计成一个轻量级且易于使用的工具,供开发者直接在命令行或 Rust crate 中测试 EVM 字节码执行,无需使用带有 RPC 的完整 EVM 节点与区块链交互。
Rust crate
安装 crate
cargo add evm-rs-emulator
用法
use evm_rs_emulator::Runner;
fn main() {
let caller = [
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc4, 0x11, 0xe8,
];
let origin: Option<[u8; 20]> = None;
let address: Option<[u8; 20]> = None
let value: Option<[u8; 32]> = None;
let data: Option<Vec<u8>> = None;
let bytecode: Vec<u8> = vec![0x60, 0xff, 0x60, 0xff];
// Create a new interpreter
let mut runner =
Runner::new(caller, origin, address, value, data, None);
// Run all the bytecode
let _ = interpreter.interpret(bytecode, Some(255), true);
// Or run the bytecode OPCODE by OPCODE
runner.bytecode = bytecode;
runner.debug_level = Some(255);
// Run the first 3 opcodes
let _ = runner.interpret_op_code(runner.bytecode[runner.pc]);
let _ = runner.interpret_op_code(runner.bytecode[runner.pc]);
let _ = runner.interpret_op_code(runner.bytecode[runner.pc]);
}
🚧 警告 🚧
该项目目前处于实验性阶段,并可能频繁更改,因为我们仍在努力稳定 EVM 模拟。它尚未进行安全审计,因此不应在生产环境中使用。
缺少的功能(欢迎贡献 ❤️)
- EVM 气费使用(见 此分支)
- EVM 气价(使用分叉显示交易价格)
- EVM 气上限
- 使用 RPC 模拟数据
- 区块数据
- 调用外部合约
- 外部 crate 功能
- 部署合约
- 调用合约
- 获取日志
贡献
欢迎贡献!如果您有改进此项目的途径,请随时打开一个问题或提交一个 pull request。
要为 EVM Rust 模拟器做出贡献,您需要在您的系统上安装 Rust 和 Cargo。
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
安装这些工具后,您可以克隆项目。
git clone https://github.com/Yashiru/evm-rs-emulator.git
要运行测试,您可以使用以下命令。
cargo test
要运行覆盖率任务
cargo make cov
许可
底层源代码是免费且不受限制的软件,已发布到公有领域。有关更多信息,请参阅 LICENSE 文件。
依赖项
~30–47MB
~821K SLoC