Skip to content

Commit a6b0675

Browse files
committed
Running config run through blockifier
commit-id:4f165000
1 parent 0aebfcd commit a6b0675

File tree

9 files changed

+110
-229
lines changed

9 files changed

+110
-229
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: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,13 @@ pub fn run_test_case(
244244
extended_runtime: call_to_blockifier_runtime,
245245
};
246246

247-
let entry_point_initial_budget = setup::entry_point_initial_budget(&forge_runtime);
247+
let entry_point_initial_budget = setup::entry_point_initial_budget(
248+
&forge_runtime
249+
.extended_runtime
250+
.extended_runtime
251+
.extended_runtime
252+
.hint_handler,
253+
);
248254
let args = prepare_call_arguments(
249255
&forge_runtime
250256
.extended_runtime

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: 62 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
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,
1+
use super::hints::hints_by_representation;
2+
use crate::running::copied_code::{finalize_execution, prepare_call_arguments, run_entry_point};
3+
use crate::running::setup::{
4+
VmExecutionContext, build_test_call_and_entry_point, entry_point_initial_budget,
5+
initialize_execution_context,
86
};
7+
use crate::{forge_config::ForgeTrackedResource, package_tests::TestDetails};
98
use anyhow::Result;
109
use blockifier::execution::contract_class::TrackedResource;
1110
use blockifier::state::{cached_state::CachedState, state_api::StateReader};
@@ -20,6 +19,7 @@ use starknet_api::block::{
2019
use starknet_types_core::felt::Felt;
2120
use std::default::Default;
2221
use universal_sierra_compiler_api::AssembledProgramWithDebugInfo;
22+
2323
struct PhantomStateReader;
2424

2525
impl StateReader for PhantomStateReader {
@@ -63,11 +63,14 @@ pub fn run_config_pass(
6363
casm_program: &AssembledProgramWithDebugInfo,
6464
tracked_resource: &ForgeTrackedResource,
6565
) -> Result<RawForgeConfig> {
66+
let program = test_details.try_into_program(casm_program)?;
67+
let (call, entry_point) = build_test_call_and_entry_point(test_details, casm_program, &program);
68+
6669
let mut cached_state = CachedState::new(PhantomStateReader);
6770
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(),
71+
l1_gas_price: NonzeroGasPrice::new(GasPrice(2))?,
72+
l1_data_gas_price: NonzeroGasPrice::new(GasPrice(2))?,
73+
l2_gas_price: NonzeroGasPrice::new(GasPrice(2))?,
7174
};
7275

7376
let block_info = BlockInfo {
@@ -80,22 +83,21 @@ pub fn run_config_pass(
8083
sequencer_address: 0_u8.into(),
8184
use_kzg_da: true,
8285
};
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-
9086
let mut context = build_context(&block_info, None, &TrackedResource::from(tracked_resource));
9187

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

100102
let mut config = RawForgeConfig::default();
101103

@@ -115,11 +117,45 @@ pub fn run_config_pass(
115117
},
116118
};
117119

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

125161
Ok(config)

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

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

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

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ use cairo_vm::types::program::Program;
1313
use cairo_vm::types::relocatable::Relocatable;
1414
use cairo_vm::vm::runners::cairo_runner::CairoRunner;
1515
use cheatnet::constants::build_test_entry_point;
16-
use cheatnet::runtime_extensions::forge_runtime_extension::ForgeRuntime;
1716
use starknet_api::deprecated_contract_class::EntryPointOffset;
1817
use std::collections::HashMap;
1918
use universal_sierra_compiler_api::AssembledProgramWithDebugInfo;
@@ -76,12 +75,8 @@ fn builtins_from_program(program: &Program) -> Vec<BuiltinName> {
7675
program.iter_builtins().copied().collect::<Vec<_>>()
7776
}
7877

79-
pub fn entry_point_initial_budget(forge_runtime: &ForgeRuntime) -> u64 {
80-
forge_runtime
81-
.extended_runtime
82-
.extended_runtime
83-
.extended_runtime
84-
.hint_handler
78+
pub fn entry_point_initial_budget(syscall_hint_processor: &SyscallHintProcessor) -> u64 {
79+
syscall_hint_processor
8580
.base
8681
.context
8782
.gas_costs()

0 commit comments

Comments
 (0)