Skip to content

Commit 414735b

Browse files
starknet_os: pointer args wrap Vec<MaybeRelocatable>
1 parent 957786a commit 414735b

File tree

3 files changed

+27
-12
lines changed

3 files changed

+27
-12
lines changed

crates/starknet_os/src/test_utils/cairo_runner.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ pub enum ValueArg {
4444
/// pointer to a pointer.
4545
#[derive(Clone, Debug, Eq, PartialEq)]
4646
pub enum PointerArg {
47-
Array(Vec<Felt>),
47+
Array(Vec<MaybeRelocatable>),
4848
Composed(Vec<EndpointArg>),
4949
}
5050

@@ -93,9 +93,9 @@ impl EndpointArg {
9393
}
9494
},
9595
EndpointArg::Pointer(pointer_arg) => match pointer_arg {
96-
PointerArg::Array(felts) => vec![CairoArg::Array(
97-
felts.iter().map(|felt| MaybeRelocatable::Int(*felt)).collect(),
98-
)],
96+
PointerArg::Array(felts) => {
97+
vec![CairoArg::Array(felts.to_vec())]
98+
}
9999
PointerArg::Composed(endpoint_args) => vec![CairoArg::Composed(
100100
endpoint_args.iter().flat_map(Self::to_cairo_arg_vec).collect(),
101101
)],
@@ -433,8 +433,11 @@ fn load_endpoint_arg_from_address(
433433
EndpointArg::Pointer(pointer_arg) => match pointer_arg {
434434
PointerArg::Array(array) => {
435435
let array_pointer = vm.get_relocatable(address)?;
436-
let felt_array = load_sequence_of_felts(array.len(), array_pointer, vm)?;
437-
Ok((EndpointArg::Pointer(PointerArg::Array(felt_array)), (address + value_size)?))
436+
let array = load_sequence_of_felts(array.len(), array_pointer, vm)?
437+
.into_iter()
438+
.map(MaybeRelocatable::from)
439+
.collect();
440+
Ok((EndpointArg::Pointer(PointerArg::Array(array)), (address + value_size)?))
438441
}
439442
PointerArg::Composed(endpoint_args) => {
440443
let (endpoint_arg_array, _) = load_sequence_of_endpoint_args(

crates/starknet_os/src/tests/aliases.rs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use blockifier::test_utils::ALIAS_CONTRACT_ADDRESS;
77
use cairo_vm::hint_processor::builtin_hint_processor::dict_hint_utils::DICT_ACCESS_SIZE;
88
use cairo_vm::hint_processor::hint_processor_utils::felt_to_usize;
99
use cairo_vm::types::builtin_name::BuiltinName;
10+
use cairo_vm::types::relocatable::MaybeRelocatable;
1011
use rstest::rstest;
1112
use starknet_api::core::L2_ADDRESS_UPPER_BOUND;
1213
use starknet_api::state::StorageKey;
@@ -258,14 +259,19 @@ fn allocate_aliases_for_keys_and_replace(
258259
let expected_explicit_return_values = vec![
259260
EndpointArg::Value(ValueArg::Single(Felt::ZERO)), // Aliases.len
260261
EndpointArg::Pointer(PointerArg::Array(vec![ // Aliases.ptr
261-
Felt::ZERO;
262+
MaybeRelocatable::Int(Felt::ZERO);
262263
(unique_keys.len()) * DICT_ACCESS_SIZE
263264
])),
264265
// Aliases per-key ptr.
265-
EndpointArg::Pointer(PointerArg::Array(vec![Felt::ZERO; keys.len()])),
266+
EndpointArg::Pointer(PointerArg::Array(vec![
267+
MaybeRelocatable::Int(Felt::ZERO);
268+
keys.len()
269+
])),
266270
];
267271
let n_keys_arg = EndpointArg::Value(ValueArg::Single(keys.len().into()));
268-
let keys_arg = EndpointArg::Pointer(PointerArg::Array(keys));
272+
let keys_arg = EndpointArg::Pointer(PointerArg::Array(
273+
keys.iter().cloned().map(MaybeRelocatable::from).collect(),
274+
));
269275
let explicit_args = vec![n_keys_arg, keys_arg];
270276
let storage_view = initial_storage
271277
.into_iter()
@@ -292,8 +298,11 @@ fn allocate_aliases_for_keys_and_replace(
292298
{
293299
let n_aliases = felt_to_usize(n_aliases).unwrap();
294300
assert_eq!(n_aliases, aliases_storage_updates.len() / DICT_ACCESS_SIZE);
295-
let actual_alias_storage = parse_squashed_cairo_dict(aliases_storage_updates);
296-
(actual_alias_storage, alias_per_key.clone().to_vec())
301+
let aliases_storage_updates_as_felts: Vec<Felt> =
302+
aliases_storage_updates.iter().map(|f| f.get_int().unwrap()).collect();
303+
let actual_alias_storage = parse_squashed_cairo_dict(&aliases_storage_updates_as_felts);
304+
let alias_per_key: Vec<Felt> = alias_per_key.iter().map(|f| f.get_int().unwrap()).collect();
305+
(actual_alias_storage, alias_per_key)
297306
} else {
298307
panic!(
299308
"The return value doesn't match the given format.\n Got: {explicit_return_values:?}"

crates/starknet_os/src/tests/bls_field.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use std::collections::HashMap;
44
use apollo_starknet_os_program::OS_PROGRAM_BYTES;
55
use cairo_vm::types::builtin_name::BuiltinName;
66
use cairo_vm::types::program::Program;
7+
use cairo_vm::types::relocatable::MaybeRelocatable;
78
use ethnum::U256;
89
use num_bigint::{BigInt, BigUint, RandBigInt, RandomBits, Sign, ToBigInt};
910
use num_integer::Integer;
@@ -134,7 +135,9 @@ fn test_horner_eval() {
134135
.map(|_| Felt::from(RandBigInt::gen_bigint_range(&mut rng, &0.into(), &DEFAULT_PRIME)))
135136
.collect();
136137

137-
explicit_args.push(EndpointArg::Pointer(PointerArg::Array(coefficients.clone())));
138+
explicit_args.push(EndpointArg::Pointer(PointerArg::Array(
139+
coefficients.iter().cloned().map(MaybeRelocatable::from).collect(),
140+
)));
138141
let point =
139142
RandBigInt::gen_bigint_range(&mut rng, &0.into(), &BLS_PRIME.to_bigint().unwrap());
140143
explicit_args.push(EndpointArg::Value(ValueArg::Array(

0 commit comments

Comments
 (0)