Skip to content

Commit 2c77dea

Browse files
blockifier: convert entry points
1 parent 7f1d3f2 commit 2c77dea

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed

crates/blockifier/src/execution/contract_class.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -749,6 +749,26 @@ impl From<CasmContractEntryPoints> for EntryPointsByType<EntryPointV1> {
749749
}
750750
}
751751

752+
impl From<&EntryPointV1> for CasmContractEntryPoint {
753+
fn from(ep: &EntryPointV1) -> Self {
754+
CasmContractEntryPoint {
755+
selector: ep.selector.0.to_biguint(),
756+
offset: ep.offset.0,
757+
builtins: ep.builtins.iter().map(|b| b.to_str().to_string()).collect(),
758+
}
759+
}
760+
}
761+
762+
impl From<&EntryPointsByType<EntryPointV1>> for CasmContractEntryPoints {
763+
fn from(entry_points: &EntryPointsByType<EntryPointV1>) -> Self {
764+
CasmContractEntryPoints {
765+
external: entry_points.external.iter().map(Into::into).collect(),
766+
l1_handler: entry_points.l1_handler.iter().map(Into::into).collect(),
767+
constructor: entry_points.constructor.iter().map(Into::into).collect(),
768+
}
769+
}
770+
}
771+
752772
impl<EP: Clone + HasSelector> EntryPointsByType<EP> {
753773
pub fn get_entry_point(
754774
&self,

crates/blockifier/src/execution/contract_class_test.rs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,13 @@ use std::sync::Arc;
55
use assert_matches::assert_matches;
66
use blockifier_test_utils::cairo_versions::{CairoVersion, RunnableCairo1};
77
use blockifier_test_utils::contracts::FeatureContract;
8+
use cairo_lang_starknet_classes::casm_contract_class::{
9+
CasmContractEntryPoint,
10+
CasmContractEntryPoints,
11+
};
812
use cairo_lang_starknet_classes::NestedIntList;
913
use cairo_lang_utils::bigint::BigUintAsHex;
14+
use num_bigint::BigUint;
1015
use rstest::rstest;
1116
use starknet_api::contract_class::compiled_class_hash::{HashVersion, HashableCompiledClass};
1217
use starknet_api::contract_class::ContractClass;
@@ -16,6 +21,8 @@ use starknet_types_core::hash::Blake2Felt252;
1621
use crate::execution::contract_class::{
1722
CompiledClassV1,
1823
ContractClassV1Inner,
24+
EntryPointV1,
25+
EntryPointsByType,
1926
FeltSizeCount,
2027
NestedFeltCounts,
2128
RunnableCompiledClass,
@@ -184,3 +191,48 @@ fn test_encoded_u32_len(#[case] test_data: &[Felt]) {
184191

185192
assert_eq!(actual_u32_len, estimated_u32_len);
186193
}
194+
195+
#[rstest]
196+
#[case::empty(CasmContractEntryPoints::default())]
197+
#[case::single_external(CasmContractEntryPoints {
198+
external: vec![CasmContractEntryPoint {
199+
selector: BigUint::from(123u64),
200+
offset: 42,
201+
builtins: vec!["range_check".to_string(), "pedersen".to_string()],
202+
}],
203+
l1_handler: vec![],
204+
constructor: vec![],
205+
})]
206+
#[case::all_types(CasmContractEntryPoints {
207+
external: vec![
208+
CasmContractEntryPoint {
209+
selector: BigUint::from(100u64),
210+
offset: 10,
211+
builtins: vec!["range_check".to_string()],
212+
},
213+
CasmContractEntryPoint {
214+
selector: BigUint::from(200u64),
215+
offset: 20,
216+
builtins: vec![],
217+
},
218+
],
219+
l1_handler: vec![CasmContractEntryPoint {
220+
selector: BigUint::from(300u64),
221+
offset: 30,
222+
builtins: vec!["pedersen".to_string()],
223+
}],
224+
constructor: vec![CasmContractEntryPoint {
225+
selector: BigUint::from(400u64),
226+
offset: 40,
227+
builtins: vec!["range_check".to_string(), "bitwise".to_string()],
228+
}],
229+
})]
230+
fn test_entry_points_round_trip(#[case] original: CasmContractEntryPoints) {
231+
// Convert CasmContractEntryPoints -> EntryPointsByType<EntryPointV1>.
232+
let entry_points_by_type: EntryPointsByType<EntryPointV1> = (&original).into();
233+
234+
// Convert back: EntryPointsByType<EntryPointV1> -> CasmContractEntryPoints.
235+
let round_tripped: CasmContractEntryPoints = (&entry_points_by_type).into();
236+
237+
assert_eq!(round_tripped, original);
238+
}

0 commit comments

Comments
 (0)