From 5f0517dc9b09179a2e1d2c079104b276f27835d4 Mon Sep 17 00:00:00 2001 From: Aviv Greenburg Date: Wed, 30 Oct 2024 16:11:28 +0200 Subject: [PATCH] chore(blockifier): alternate use of casm and native depending on tracked_resource --- .../src/execution/execution_utils.rs | 26 ++++++++++++++----- .../src/execution/native/contract_class.rs | 4 +++ 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/crates/blockifier/src/execution/execution_utils.rs b/crates/blockifier/src/execution/execution_utils.rs index ecd5c20f4b..8896f171bb 100644 --- a/crates/blockifier/src/execution/execution_utils.rs +++ b/crates/blockifier/src/execution/execution_utils.rs @@ -142,13 +142,25 @@ pub fn execute_entry_point_call( ), #[cfg(feature = "cairo_native")] ContractClass::V1Native(contract_class) => { - native_entry_point_execution::execute_entry_point_call( - call, - contract_class, - state, - resources, - context, - ) + if context.tracked_resource_stack.last() == Some(&TrackedResource::CairoSteps) { + // We cannot run native with cairo steps as the tracked resources (it's a vm + // resouorce). + entry_point_execution::execute_entry_point_call( + call, + contract_class.casm(), + state, + resources, + context, + ) + } else { + native_entry_point_execution::execute_entry_point_call( + call, + contract_class, + state, + resources, + context, + ) + } } } } diff --git a/crates/blockifier/src/execution/native/contract_class.rs b/crates/blockifier/src/execution/native/contract_class.rs index 97cb832a8c..529070283c 100644 --- a/crates/blockifier/src/execution/native/contract_class.rs +++ b/crates/blockifier/src/execution/native/contract_class.rs @@ -47,6 +47,10 @@ impl NativeContractClassV1 { pub fn get_entry_point(&self, call: &CallEntryPoint) -> Result { self.entry_points_by_type.get_entry_point(call).map(|ep| ep.function_id) } + + pub fn casm(&self) -> ContractClassV1 { + self.casm.clone() + } } #[derive(Debug)]