Skip to content

Commit 9c26d30

Browse files
committed
Running config run through blockifier
commit-id:4f165000
1 parent 737445f commit 9c26d30

File tree

8 files changed

+110
-226
lines changed

8 files changed

+110
-226
lines changed

crates/forge-runner/src/package_tests.rs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use crate::running::hints_to_params;
2+
use anyhow::Result;
13
use cairo_lang_sierra::extensions::NamedType;
24
use cairo_lang_sierra::extensions::bitwise::BitwiseType;
35
use cairo_lang_sierra::extensions::circuit::{AddModType, MulModType};
@@ -8,8 +10,13 @@ use cairo_lang_sierra::extensions::range_check::{RangeCheck96Type, RangeCheckTyp
810
use cairo_lang_sierra::extensions::segment_arena::SegmentArenaType;
911
use cairo_lang_sierra::ids::GenericTypeId;
1012
use cairo_lang_sierra::program::ProgramArtifact;
13+
use cairo_vm::serde::deserialize_program::ReferenceManager;
1114
use cairo_vm::types::builtin_name::BuiltinName;
15+
use cairo_vm::types::program::Program;
16+
use cairo_vm::types::relocatable::MaybeRelocatable;
1217
use camino::Utf8PathBuf;
18+
use starknet_types_core::felt::Felt;
19+
use std::collections::HashMap;
1320
use std::sync::Arc;
1421
use universal_sierra_compiler_api::AssembledProgramWithDebugInfo;
1522

@@ -57,6 +64,36 @@ impl TestDetails {
5764
}
5865
builtins
5966
}
67+
68+
pub fn try_into_program(
69+
&self,
70+
casm_program: &AssembledProgramWithDebugInfo,
71+
) -> Result<Program> {
72+
let builtins = self.builtins();
73+
74+
let assembled_program = &casm_program.assembled_cairo_program;
75+
let hints_dict = hints_to_params(assembled_program);
76+
let data: Vec<MaybeRelocatable> = assembled_program
77+
.bytecode
78+
.iter()
79+
.map(Felt::from)
80+
.map(MaybeRelocatable::from)
81+
.collect();
82+
83+
Program::new(
84+
builtins.clone(),
85+
data,
86+
Some(0),
87+
hints_dict,
88+
ReferenceManager {
89+
references: Vec::new(),
90+
},
91+
HashMap::new(),
92+
vec![],
93+
None,
94+
)
95+
.map_err(std::convert::Into::into)
96+
}
6097
}
6198

6299
#[derive(Debug, Clone)]

crates/forge-runner/src/package_tests/with_config_resolved.rs

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,11 @@
11
use super::{TestCase, TestTarget};
22
use crate::expected_result::ExpectedTestResult;
3-
use crate::running::hints_to_params;
43
use anyhow::Result;
5-
use cairo_vm::serde::deserialize_program::ReferenceManager;
64
use cairo_vm::types::program::Program;
7-
use cairo_vm::types::relocatable::MaybeRelocatable;
85
use cheatnet::runtime_extensions::forge_config_extension::config::{
96
RawAvailableGasConfig, RawFuzzerConfig,
107
};
118
use starknet_api::block::BlockNumber;
12-
use starknet_types_core::felt::Felt;
13-
use std::collections::HashMap;
149
use universal_sierra_compiler_api::AssembledProgramWithDebugInfo;
1510
use url::Url;
1611

@@ -23,30 +18,7 @@ impl TestCaseWithResolvedConfig {
2318
&self,
2419
casm_program: &AssembledProgramWithDebugInfo,
2520
) -> Result<Program> {
26-
let builtins = self.test_details.builtins();
27-
28-
let assembled_program = &casm_program.assembled_cairo_program;
29-
let hints_dict = hints_to_params(assembled_program);
30-
let data: Vec<MaybeRelocatable> = assembled_program
31-
.bytecode
32-
.iter()
33-
.map(Felt::from)
34-
.map(MaybeRelocatable::from)
35-
.collect();
36-
37-
Program::new(
38-
builtins.clone(),
39-
data,
40-
Some(0),
41-
hints_dict,
42-
ReferenceManager {
43-
references: Vec::new(),
44-
},
45-
HashMap::new(),
46-
vec![],
47-
None,
48-
)
49-
.map_err(std::convert::Into::into)
21+
self.test_details.try_into_program(casm_program)
5022
}
5123
}
5224

crates/forge-runner/src/running.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,18 +52,16 @@ use tokio::sync::mpsc::Sender;
5252
use tokio::task::JoinHandle;
5353
use universal_sierra_compiler_api::AssembledProgramWithDebugInfo;
5454

55-
mod casm;
5655
pub mod config_run;
5756
mod copied_code;
58-
mod entry_code;
5957
mod hints;
6058
mod syscall_handler;
6159
pub mod with_config;
6260

61+
use crate::package_tests::TestDetails;
6362
use crate::running::copied_code::{
6463
finalize_execution, prepare_call_arguments, prepare_program_extra_data, run_entry_point,
6564
};
66-
use crate::running::syscall_handler::build_syscall_handler;
6765
pub use hints::hints_to_params;
6866
pub use syscall_handler::has_segment_arena;
6967
pub use syscall_handler::syscall_handler_offset;
@@ -242,11 +240,11 @@ fn entry_point_initial_budget(forge_runtime: &ForgeRuntime) -> u64 {
242240
}
243241

244242
fn build_test_call_and_entry_point(
245-
case: &TestCaseWithResolvedConfig,
243+
test_details: &TestDetails,
246244
casm_program: &AssembledProgramWithDebugInfo,
247245
program: &Program,
248246
) -> (ExecutableCallEntryPoint, EntryPointV1) {
249-
let sierra_instruction_idx = case.test_details.sierra_entry_point_statement_idx;
247+
let sierra_instruction_idx = test_details.sierra_entry_point_statement_idx;
250248
let casm_entry_point_offset = casm_program.debug_info[sierra_instruction_idx].0;
251249

252250
let call = build_test_entry_point();
@@ -266,7 +264,8 @@ pub fn run_test_case(
266264
fuzzer_rng: Option<Arc<Mutex<StdRng>>>,
267265
) -> Result<RunResult> {
268266
let program = case.try_into_program(casm_program)?;
269-
let (call, entry_point) = build_test_call_and_entry_point(case, casm_program, &program);
267+
let (call, entry_point) =
268+
build_test_call_and_entry_point(&case.test_details, casm_program, &program);
270269

271270
let mut state_reader = ExtendedStateReader {
272271
dict_state_reader: cheatnet_constants::build_testing_state(),

crates/forge-runner/src/running/casm.rs

Lines changed: 0 additions & 88 deletions
This file was deleted.

crates/forge-runner/src/running/config_run.rs

Lines changed: 66 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
use super::{
2-
casm::{get_assembled_program, run_assembled_program},
3-
entry_code::create_entry_code,
4-
hints::{hints_by_representation, hints_to_params},
5-
};
6-
use crate::{
7-
forge_config::ForgeTrackedResource, package_tests::TestDetails, running::build_syscall_handler,
2+
VmExecutionContext, build_test_call_and_entry_point, hints::hints_by_representation,
3+
initialize_execution_context,
84
};
5+
use crate::running::copied_code::{finalize_execution, prepare_call_arguments, run_entry_point};
6+
use crate::{forge_config::ForgeTrackedResource, package_tests::TestDetails};
97
use anyhow::Result;
108
use blockifier::execution::contract_class::TrackedResource;
119
use blockifier::state::{cached_state::CachedState, state_api::StateReader};
@@ -20,6 +18,7 @@ use starknet_api::block::{
2018
use starknet_types_core::felt::Felt;
2119
use std::default::Default;
2220
use universal_sierra_compiler_api::AssembledProgramWithDebugInfo;
21+
2322
struct PhantomStateReader;
2423

2524
impl StateReader for PhantomStateReader {
@@ -63,11 +62,14 @@ pub fn run_config_pass(
6362
casm_program: &AssembledProgramWithDebugInfo,
6463
tracked_resource: &ForgeTrackedResource,
6564
) -> Result<RawForgeConfig> {
65+
let program = test_details.try_into_program(casm_program)?;
66+
let (call, entry_point) = build_test_call_and_entry_point(test_details, casm_program, &program);
67+
6668
let mut cached_state = CachedState::new(PhantomStateReader);
6769
let gas_price_vector = GasPriceVector {
68-
l1_gas_price: NonzeroGasPrice::new(GasPrice(2)).unwrap(),
69-
l1_data_gas_price: NonzeroGasPrice::new(GasPrice(2)).unwrap(),
70-
l2_gas_price: NonzeroGasPrice::new(GasPrice(2)).unwrap(),
70+
l1_gas_price: NonzeroGasPrice::new(GasPrice(2))?,
71+
l1_data_gas_price: NonzeroGasPrice::new(GasPrice(2))?,
72+
l2_gas_price: NonzeroGasPrice::new(GasPrice(2))?,
7173
};
7274

7375
let block_info = BlockInfo {
@@ -80,22 +82,21 @@ pub fn run_config_pass(
8082
sequencer_address: 0_u8.into(),
8183
use_kzg_da: true,
8284
};
83-
let (entry_code, builtins) = create_entry_code(test_details, casm_program);
84-
85-
let assembled_program = get_assembled_program(casm_program, entry_code);
86-
87-
let string_to_hint = hints_by_representation(&assembled_program);
88-
let hints_dict = hints_to_params(&assembled_program);
89-
9085
let mut context = build_context(&block_info, None, &TrackedResource::from(tracked_resource));
9186

92-
let syscall_handler = build_syscall_handler(
87+
let hints = hints_by_representation(&casm_program.assembled_cairo_program);
88+
let VmExecutionContext {
89+
mut runner,
90+
syscall_handler,
91+
initial_syscall_ptr,
92+
program_extra_data_length,
93+
} = initialize_execution_context(
94+
call.clone(),
95+
&hints,
96+
&program,
9397
&mut cached_state,
94-
&string_to_hint,
9598
&mut context,
96-
&test_details.parameter_types,
97-
builtins.len(),
98-
);
99+
)?;
99100

100101
let mut config = RawForgeConfig::default();
101102

@@ -115,11 +116,51 @@ pub fn run_config_pass(
115116
},
116117
};
117118

118-
run_assembled_program(
119-
&assembled_program,
120-
builtins,
121-
hints_dict,
119+
let tracked_resource = TrackedResource::from(tracked_resource);
120+
let entry_point_initial_budget = forge_config_runtime
121+
.extended_runtime
122+
.hint_handler
123+
.base
124+
.context
125+
.gas_costs()
126+
.base
127+
.entry_point_initial_budget;
128+
let args = prepare_call_arguments(
129+
&forge_config_runtime
130+
.extended_runtime
131+
.hint_handler
132+
.base
133+
.call
134+
.clone()
135+
.into(),
136+
&mut runner,
137+
initial_syscall_ptr,
138+
&mut forge_config_runtime
139+
.extended_runtime
140+
.hint_handler
141+
.read_only_segments,
142+
&entry_point,
143+
entry_point_initial_budget,
144+
)?;
145+
let n_total_args = args.len();
146+
147+
let bytecode_length = program.data_len();
148+
let program_segment_size = bytecode_length + program_extra_data_length;
149+
150+
run_entry_point(
151+
&mut runner,
122152
&mut forge_config_runtime,
153+
entry_point,
154+
args,
155+
program_segment_size,
156+
)?;
157+
158+
finalize_execution(
159+
&mut runner,
160+
&mut forge_config_runtime.extended_runtime.hint_handler,
161+
n_total_args,
162+
program_extra_data_length,
163+
tracked_resource,
123164
)?;
124165

125166
Ok(config)

crates/forge-runner/src/running/entry_code.rs

Lines changed: 0 additions & 22 deletions
This file was deleted.

0 commit comments

Comments
 (0)