diff --git a/evm/src/cpu/kernel/asm/mpt/hex_prefix.asm b/evm/src/cpu/kernel/asm/mpt/hex_prefix.asm index 18b0a5fff1..5bb9fa9d88 100644 --- a/evm/src/cpu/kernel/asm/mpt/hex_prefix.asm +++ b/evm/src/cpu/kernel/asm/mpt/hex_prefix.asm @@ -67,20 +67,20 @@ remaining_bytes: SWAP1 SUB DUP1 // stack: num_nibbles - parity, num_nibbles - parity, U256_MAX, packed_nibbles, rlp_pos, ret_dest %div_const(2) - // stack: remaining_bytes, num_nibbles - parity, U256_MAX, packed_nibbles, rlp_pos, ret_dest + // stack: rem_bytes, num_nibbles - parity, U256_MAX, packed_nibbles, rlp_pos, ret_dest SWAP2 SWAP1 - // stack: num_nibbles - parity, U256_MAX, remaining_bytes, packed_nibbles, rlp_pos, ret_dest + // stack: num_nibbles - parity, U256_MAX, rem_bytes, packed_nibbles, rlp_pos, ret_dest %mul_const(4) - // stack: 4*(num_nibbles - parity), U256_MAX, remaining_bytes, packed_nibbles, rlp_pos, ret_dest + // stack: 4*(num_nibbles - parity), U256_MAX, rem_bytes, packed_nibbles, rlp_pos, ret_dest PUSH 256 SUB - // stack: 256 - 4*(num_nibbles - parity), U256_MAX, remaining_bytes, packed_nibbles, rlp_pos, ret_dest + // stack: 256 - 4*(num_nibbles - parity), U256_MAX, rem_bytes, packed_nibbles, rlp_pos, ret_dest SHR - // stack: mask, remaining_bytes, packed_nibbles, rlp_pos, ret_dest + // stack: mask, rem_bytes, packed_nibbles, rlp_pos, ret_dest SWAP1 SWAP2 AND %stack - (remaining_nibbles, remaining_bytes, rlp_pos) -> - (rlp_pos, remaining_nibbles, remaining_bytes) + (remaining_nibbles, rem_bytes, rlp_pos) -> + (rlp_pos, remaining_nibbles, rem_bytes) %mstore_unpacking_rlp SWAP1 JUMP @@ -95,9 +95,13 @@ rlp_header_medium: // rlp_pos += 1 %increment - %stack - (rlp_pos, num_nibbles, packed_nibbles, terminated, retdest) -> - (rlp_pos, num_nibbles, packed_nibbles, terminated, remaining_bytes, num_nibbles, packed_nibbles, retdest) + // stack: rlp_pos, num_nibbles, packed_nibbles, terminated, retdest + SWAP3 DUP3 DUP3 + // stack: num_nibbles, packed_nibbles, terminated, num_nibbles, packed_nibbles, rlp_pos, retdest + PUSH remaining_bytes + // stack: remaining_bytes, num_nibbles, packed_nibbles, terminated, num_nibbles, packed_nibbles, rlp_pos, retdest + SWAP4 SWAP5 SWAP6 + // stack: rlp_pos, num_nibbles, packed_nibbles, terminated, remaining_bytes, num_nibbles, packed_nibbles, retdest %jump(first_byte) @@ -118,9 +122,12 @@ rlp_header_large: // rlp_pos += 2 %add_const(2) - %stack - (rlp_pos, num_nibbles, packed_nibbles, terminated, retdest) -> - (rlp_pos, num_nibbles, packed_nibbles, terminated, remaining_bytes, num_nibbles, packed_nibbles, retdest) + // stack: rlp_pos, num_nibbles, packed_nibbles, terminated, retdest + SWAP3 DUP3 DUP3 + // stack: num_nibbles, packed_nibbles, terminated, num_nibbles, packed_nibbles, rlp_pos, retdest + PUSH remaining_bytes + // stack: remaining_bytes, num_nibbles, packed_nibbles, terminated, num_nibbles, packed_nibbles, rlp_pos, retdest + SWAP4 SWAP5 SWAP6 + // stack: rlp_pos, num_nibbles, packed_nibbles, terminated, remaining_bytes, num_nibbles, packed_nibbles, retdest %jump(first_byte) - diff --git a/evm/src/cpu/kernel/tests/kernel_consistency.rs b/evm/src/cpu/kernel/tests/kernel_consistency.rs new file mode 100644 index 0000000000..ec9c649f0d --- /dev/null +++ b/evm/src/cpu/kernel/tests/kernel_consistency.rs @@ -0,0 +1,16 @@ +use anyhow::Result; +use ethereum_types::U256; + +use crate::cpu::kernel::aggregator::{combined_kernel, KERNEL}; +use crate::cpu::kernel::interpreter::Interpreter; +use crate::memory::segments::Segment; + +#[test] +fn test_kernel_code_hash_consistency() -> Result<()> { + for _ in 0..10 { + let kernel2 = combined_kernel(); + assert_eq!(kernel2.code_hash, KERNEL.code_hash); + } + + Ok(()) +} diff --git a/evm/src/cpu/kernel/tests/mod.rs b/evm/src/cpu/kernel/tests/mod.rs index 2fe2d09678..7581eefe75 100644 --- a/evm/src/cpu/kernel/tests/mod.rs +++ b/evm/src/cpu/kernel/tests/mod.rs @@ -10,6 +10,7 @@ mod core; mod ecc; mod exp; mod hash; +mod kernel_consistency; mod log; mod mpt; mod packing; diff --git a/evm/src/generation/mod.rs b/evm/src/generation/mod.rs index bfab75bcf0..afac60e28c 100644 --- a/evm/src/generation/mod.rs +++ b/evm/src/generation/mod.rs @@ -191,19 +191,6 @@ fn apply_metadata_and_tries_memops, const D: usize> state.traces.memory_ops.extend(ops); } -fn initialize_kernel_code, const D: usize>( - state: &mut GenerationState, -) { - for (i, &byte) in enumerate(KERNEL.code.iter()) { - let address = MemoryAddress { - context: 0, - segment: Segment::Code as usize, - virt: i, - }; - state.memory.set(address, byte.into()); - } -} - pub fn generate_traces, const D: usize>( all_stark: &AllStark, inputs: GenerationInputs, @@ -219,8 +206,6 @@ pub fn generate_traces, const D: usize>( apply_metadata_and_tries_memops(&mut state, &inputs); - initialize_kernel_code(&mut state); - timed!(timing, "simulate CPU", simulate_cpu(&mut state)?); assert!(