From 50740fc1163df254eac723e7a0078736ea931dbd Mon Sep 17 00:00:00 2001 From: Joonatan Saarhelo Date: Tue, 9 Apr 2024 20:20:42 +0200 Subject: [PATCH] refine vm2 integration --- Cargo.lock | 4 +-- compiler_tester/src/vm/eravm/vm2_adapter.rs | 35 ++++++++++----------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3eba619e..708b75ea 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2596,7 +2596,7 @@ checksum = "2266fcb904c50fb17fda4c9a751a1715629ecf8b21f4c9d78b4890fb71525d71" [[package]] name = "vm2" version = "0.1.0" -source = "git+https://github.com/matter-labs/vm2#dbcb1e2efcdf05621c9d4dc1a3846689da2e8667" +source = "git+https://github.com/matter-labs/vm2#6b21528af947ebd71b9a4403a77fbb1d9d770ee3" dependencies = [ "arbitrary", "enum_dispatch", @@ -2991,7 +2991,7 @@ dependencies = [ [[package]] name = "zkevm_opcode_defs" version = "1.5.0" -source = "git+https://github.com/matter-labs/era-zkevm_opcode_defs?branch=v1.5.0#2aaab121eaff01e8224d8d113e446f700d88aba5" +source = "git+https://github.com/matter-labs/era-zkevm_opcode_defs?branch=v1.5.0#109d9f734804a8b9dc0531c0b576e2a0f55a40de" dependencies = [ "bitflags 2.5.0", "blake2", diff --git a/compiler_tester/src/vm/eravm/vm2_adapter.rs b/compiler_tester/src/vm/eravm/vm2_adapter.rs index 3bb6ab02..aa2e4847 100644 --- a/compiler_tester/src/vm/eravm/vm2_adapter.rs +++ b/compiler_tester/src/vm/eravm/vm2_adapter.rs @@ -6,11 +6,12 @@ use std::collections::HashMap; -use web3::ethabi::Address; - +use crate::vm::execution_result::ExecutionResult; +use anyhow::anyhow; use vm2::ExecutionEnd; +use vm2::Program; use vm2::World; -use zkevm_assembly::zkevm_opcode_defs::Assembly; +use zkevm_assembly::Assembly; use zkevm_opcode_defs::ethereum_types::{BigEndianHash, H256, U256}; use zkevm_tester::runners::compiler_tests::FullABIParams; use zkevm_tester::runners::compiler_tests::StorageKey; @@ -21,7 +22,6 @@ use crate::test::case::input::{ output::{event::Event, Output}, value::Value, }; -use crate::vm::eravm::execution_result::ExecutionResult; pub fn run_vm( contracts: HashMap, @@ -54,12 +54,13 @@ pub fn run_vm( r5_value: None, }, VmLaunchOption::ManualCallABI(abiparams) => abiparams, - x => return Err(anyhow::anyhow!("Unsupported launch option {x:?}")), + x => return Err(anyhow!("Unsupported launch option {x:?}")), }; for (_, contract) in contracts { let bytecode = contract.clone().compile_to_bytecode()?; - let hash = zkevm_assembly::zkevm_opcode_defs::bytecode_to_code_hash(&bytecode)?; + let hash = zkevm_assembly::zkevm_opcode_defs::bytecode_to_code_hash(&bytecode) + .map_err(|()| anyhow!("Failed to hash bytecode"))?; known_contracts.insert(U256::from_big_endian(&hash), contract); } @@ -73,9 +74,11 @@ pub fn run_vm( entry_address, context.msg_sender, calldata.to_vec(), - u32::MAX, + // zkevm_tester subtracts this constant, I don't know why + u32::MAX - 0x80000000, vm2::Settings { - default_aa_code_hash, + default_aa_code_hash: default_aa_code_hash.into(), + evm_interpreter_code_hash: evm_interpreter_code_hash.into(), hook_address: 0, }, ); @@ -101,7 +104,7 @@ pub fn run_vm( exception: true, events: vec![], }, - _panic => Output { + ExecutionEnd::Panicked => Output { return_data: vec![], exception: true, events: vec![], @@ -150,10 +153,7 @@ struct TestWorld { } impl World for TestWorld { - fn decommit( - &mut self, - hash: U256, - ) -> (std::sync::Arc<[vm2::Instruction]>, std::sync::Arc<[U256]>) { + fn decommit(&mut self, hash: U256) -> Program { let bytecode = self .contracts .get(&hash) @@ -169,13 +169,12 @@ impl World for TestWorld { }) .collect::>(); - ( - vm2::decode::decode_program(&instructions, false).into(), + Program::new( + vm2::decode::decode_program(&instructions, false), bytecode .iter() .map(|x| U256::from_big_endian(x)) - .collect::>() - .into(), + .collect::>(), ) } @@ -193,7 +192,7 @@ impl World for TestWorld { .unwrap_or(U256::zero()) } - fn handle_hook(&mut self, _: u32) { + fn handle_hook(&mut self, _: u32, _: &mut vm2::State) { unreachable!() // There is no bootloader } }