From a65bbf7de382796399a79079c5ab4131c98402b3 Mon Sep 17 00:00:00 2001 From: Fedor Sakharov Date: Wed, 21 Aug 2024 13:28:24 +0200 Subject: [PATCH] expose cycles statistics --- src/instruction_handlers/precompiles.rs | 10 ++++++---- src/single_instruction_test/vm.rs | 4 ++++ src/state.rs | 12 ++++++++++++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/instruction_handlers/precompiles.rs b/src/instruction_handlers/precompiles.rs index 8edf740e..01f5ee08 100644 --- a/src/instruction_handlers/precompiles.rs +++ b/src/instruction_handlers/precompiles.rs @@ -66,16 +66,18 @@ fn precompile_call( let heaps = &mut vm.state.heaps; match address_low { KECCAK256_ROUND_FUNCTION_PRECOMPILE_ADDRESS => { - keccak256_rounds_function::<_, false>(0, query, heaps); + vm.state.keccak256_cycles += + keccak256_rounds_function::<_, false>(0, query, heaps).0; } SHA256_ROUND_FUNCTION_PRECOMPILE_ADDRESS => { - sha256_rounds_function::<_, false>(0, query, heaps); + vm.state.sha256_cycles += sha256_rounds_function::<_, false>(0, query, heaps).0; } ECRECOVER_INNER_FUNCTION_PRECOMPILE_ADDRESS => { - ecrecover_function::<_, false>(0, query, heaps); + vm.state.ecrecover_cycles += ecrecover_function::<_, false>(0, query, heaps).0; } SECP256R1_VERIFY_PRECOMPILE_ADDRESS => { - secp256r1_verify_function::<_, false>(0, query, heaps); + vm.state.secp256v1_verify_cycles += + secp256r1_verify_function::<_, false>(0, query, heaps).0; } _ => { // A precompile call may be used just to burn gas diff --git a/src/single_instruction_test/vm.rs b/src/single_instruction_test/vm.rs index 80d5c1e4..4b1224c5 100644 --- a/src/single_instruction_test/vm.rs +++ b/src/single_instruction_test/vm.rs @@ -91,6 +91,10 @@ impl<'a, T: Tracer> Arbitrary<'a> for VirtualMachine { heaps, transaction_number: u.arbitrary()?, context_u128: u.arbitrary()?, + keccak256_cycles: 0, + ecrecover_cycles: 0, + sha256_cycles: 0, + secp256v1_verify_cycles: 0, }, settings: u.arbitrary()?, world_diff: Default::default(), diff --git a/src/state.rs b/src/state.rs index 783b991d..e14f5cc2 100644 --- a/src/state.rs +++ b/src/state.rs @@ -27,6 +27,14 @@ pub struct State { pub transaction_number: u16, + pub keccak256_cycles: usize, + + pub ecrecover_cycles: usize, + + pub sha256_cycles: usize, + + pub secp256v1_verify_cycles: usize, + pub(crate) context_u128: u128, } @@ -75,6 +83,10 @@ impl State { transaction_number: 0, context_u128: 0, + keccak256_cycles: 0, + ecrecover_cycles: 0, + sha256_cycles: 0, + secp256v1_verify_cycles: 0, } }