Skip to content

Commit

Permalink
Add utils for memory read/write
Browse files Browse the repository at this point in the history
  • Loading branch information
fmkra committed Oct 23, 2024
1 parent bed092e commit 109a1d8
Show file tree
Hide file tree
Showing 6 changed files with 125 additions and 159 deletions.
111 changes: 31 additions & 80 deletions cairo_vm_hints/src/hints/tests/construct_mmr.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
use crate::mmr::{Keccak, Mmr, Poseidon};
use crate::utils::{split_u256, write_struct, write_value, write_vector};
use cairo_vm::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::HintProcessorData;
use cairo_vm::hint_processor::builtin_hint_processor::hint_utils::{
get_ptr_from_var_name, get_relocatable_from_var_name, insert_value_from_var_name,
};
use cairo_vm::types::exec_scope::ExecutionScopes;
use cairo_vm::types::relocatable::MaybeRelocatable;
use cairo_vm::vm::{errors::hint_errors::HintError, vm_core::VirtualMachine};
Expand Down Expand Up @@ -78,13 +76,6 @@ ids.expected_new_root_poseidon = mmr_poseidon.get_root()
ids.expected_new_root_keccak.low, ids.expected_new_root_keccak.high = split_128(mmr_keccak.get_root())
ids.expected_new_len = len(mmr_poseidon.pos_hash)";

fn split_u256(number: &BigUint) -> [BigUint; 2] {
let mut iter = number.to_bytes_le().into_iter();
let low = &iter.by_ref().take(16).collect::<Vec<_>>();
let high = &iter.collect::<Vec<_>>();
[BigUint::from_bytes_le(low), BigUint::from_bytes_le(high)]
}

pub fn test_construct_mmr(
vm: &mut VirtualMachine,
_exec_scope: &mut ExecutionScopes,
Expand All @@ -106,13 +97,7 @@ pub fn test_construct_mmr(

let previous_n_values = rng.gen_range(1..=200);
let n_values_to_append = rng.gen_range(1..=200);
insert_value_from_var_name(
"n_values_to_append",
n_values_to_append,
vm,
&hint_data.ids_data,
&hint_data.ap_tracking,
)?;
write_value("n_values_to_append", n_values_to_append, vm, hint_data)?;

let poseidon_hash_array = (0..n_values_to_append)
.map(|_| rng.gen_biguint_range(&BigUint::one(), &stark_prime))
Expand All @@ -121,30 +106,24 @@ pub fn test_construct_mmr(
.map(|_| rng.gen_biguint_range(&BigUint::one(), &two_pow_256))
.collect::<Vec<_>>();

vm.segments.load_data(
get_ptr_from_var_name(
"poseidon_hash_array",
vm,
&hint_data.ids_data,
&hint_data.ap_tracking,
)?,
write_vector(
"poseidon_hash_array",
&poseidon_hash_array
.iter()
.map(|x| MaybeRelocatable::Int(x.into()))
.collect::<Vec<_>>(),
vm,
&hint_data,
)?;
vm.segments.load_data(
get_ptr_from_var_name(
"keccak_hash_array",
vm,
&hint_data.ids_data,
&hint_data.ap_tracking,
)?,
write_vector(
"keccak_hash_array",
&keccak_hash_array
.iter()
.flat_map(split_u256)
.map(|x| MaybeRelocatable::Int(x.into()))
.collect::<Vec<_>>(),
vm,
&hint_data,
)?;

let mut mmr_poseidon = Mmr::<Poseidon>::new();
Expand All @@ -158,62 +137,44 @@ pub fn test_construct_mmr(
.map(|_| rng.gen_biguint_range(&BigUint::one(), &two_pow_256))
.for_each(|x| mmr_keccak.append(x));

insert_value_from_var_name(
"mmr_offset",
mmr_poseidon.size(),
vm,
&hint_data.ids_data,
&hint_data.ap_tracking,
)?;
write_value("mmr_offset", mmr_poseidon.size(), vm, &hint_data)?;

let previous_peaks_poseidon = mmr_poseidon.retrieve_nodes(mmr_poseidon.get_peaks());
let previous_peaks_keccak = mmr_keccak.retrieve_nodes(mmr_keccak.get_peaks());

vm.segments.load_data(
get_ptr_from_var_name(
"previous_peaks_values_poseidon",
vm,
&hint_data.ids_data,
&hint_data.ap_tracking,
)?,
write_vector(
"previous_peaks_values_poseidon",
&previous_peaks_poseidon
.iter()
.map(|x| MaybeRelocatable::Int(x.into()))
.collect::<Vec<_>>(),
vm,
&hint_data,
)?;

vm.segments.load_data(
get_ptr_from_var_name(
"previous_peaks_values_keccak",
vm,
&hint_data.ids_data,
&hint_data.ap_tracking,
)?,
write_vector(
"previous_peaks_values_keccak",
&previous_peaks_keccak
.iter()
.flat_map(split_u256)
.map(|x| MaybeRelocatable::Int(x.into()))
.collect::<Vec<_>>(),
vm,
&hint_data,
)?;

insert_value_from_var_name(
write_value(
"mmr_last_root_poseidon",
MaybeRelocatable::Int(mmr_poseidon.get_root().into()),
vm,
&hint_data.ids_data,
&hint_data.ap_tracking,
&hint_data,
)?;
vm.segments.load_data(
get_relocatable_from_var_name(
"mmr_last_root_keccak",
vm,
&hint_data.ids_data,
&hint_data.ap_tracking,
)?,
write_struct(
"mmr_last_root_keccak",
&split_u256(&mmr_keccak.get_root())
.iter()
.map(|x| MaybeRelocatable::Int(x.into()))
.collect::<Vec<_>>(),
vm,
&hint_data,
)?;

for elem in poseidon_hash_array.iter().rev() {
Expand All @@ -223,32 +184,22 @@ pub fn test_construct_mmr(
mmr_keccak.append(elem.clone());
}

insert_value_from_var_name(
write_value(
"expected_new_root_poseidon",
MaybeRelocatable::Int(mmr_poseidon.get_root().into()),
vm,
&hint_data.ids_data,
&hint_data.ap_tracking,
&hint_data,
)?;
vm.segments.load_data(
get_relocatable_from_var_name(
"expected_new_root_keccak",
vm,
&hint_data.ids_data,
&hint_data.ap_tracking,
)?,
write_struct(
"expected_new_root_keccak",
&split_u256(&mmr_keccak.get_root())
.iter()
.map(|x| MaybeRelocatable::Int(x.into()))
.collect::<Vec<_>>(),
)?;
insert_value_from_var_name(
"expected_new_len",
mmr_keccak.size(),
vm,
&hint_data.ids_data,
&hint_data.ap_tracking,
&hint_data,
)?;
write_value("expected_new_len", mmr_keccak.size(), vm, &hint_data)?;

Ok(())
}
23 changes: 9 additions & 14 deletions cairo_vm_hints/src/hints/tests/dw_hack.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
use crate::utils::{get_value, write_value};
use cairo_vm::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::HintProcessorData;
use cairo_vm::hint_processor::builtin_hint_processor::hint_utils::{
get_integer_from_var_name, insert_value_from_var_name,
};
use cairo_vm::types::exec_scope::ExecutionScopes;
use cairo_vm::types::relocatable::MaybeRelocatable;
use cairo_vm::vm::{errors::hint_errors::HintError, vm_core::VirtualMachine};
Expand All @@ -16,12 +14,11 @@ pub fn hint_bit_length_assign_140(
hint_data: &HintProcessorData,
_constants: &HashMap<String, Felt252>,
) -> Result<(), HintError> {
insert_value_from_var_name(
write_value(
"bit_length",
MaybeRelocatable::Int(Felt252::from_hex_unchecked("0x8C")),
vm,
&hint_data.ids_data,
&hint_data.ap_tracking,
&hint_data,
)?;

Ok(())
Expand All @@ -35,12 +32,11 @@ pub fn hint_bit_length_assign_negative_one(
hint_data: &HintProcessorData,
_constants: &HashMap<String, Felt252>,
) -> Result<(), HintError> {
insert_value_from_var_name(
write_value(
"bit_length",
MaybeRelocatable::Int(Felt252::ZERO - Felt252::ONE),
vm,
&hint_data.ids_data,
&hint_data.ap_tracking,
&hint_data,
)?;

Ok(())
Expand All @@ -54,12 +50,11 @@ pub fn hint_bit_length_assign_2500(
hint_data: &HintProcessorData,
_constants: &HashMap<String, Felt252>,
) -> Result<(), HintError> {
insert_value_from_var_name(
write_value(
"bit_length",
MaybeRelocatable::Int(Felt252::from_hex_unchecked("0x9C4")),
vm,
&hint_data.ids_data,
&hint_data.ap_tracking,
&hint_data,
)?;

Ok(())
Expand All @@ -75,8 +70,8 @@ pub fn hint_print_ns(
) -> Result<(), HintError> {
println!(
"N: {}, n: {}",
get_integer_from_var_name("N", vm, &hint_data.ids_data, &hint_data.ap_tracking)?,
get_integer_from_var_name("n", vm, &hint_data.ids_data, &hint_data.ap_tracking)?
get_value("N", vm, &hint_data)?,
get_value("n", vm, &hint_data)?
);
Ok(())
}
27 changes: 7 additions & 20 deletions cairo_vm_hints/src/hints/tests/encode_packed_256.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
use cairo_vm::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::HintProcessorData;
use cairo_vm::hint_processor::builtin_hint_processor::hint_utils::{
get_ptr_from_var_name, insert_value_from_var_name,
};
use cairo_vm::types::exec_scope::ExecutionScopes;
use cairo_vm::types::relocatable::MaybeRelocatable;
use cairo_vm::vm::{errors::hint_errors::HintError, vm_core::VirtualMachine};
Expand All @@ -11,6 +8,8 @@ use sha3::Digest;
use sha3::Keccak256;
use std::collections::HashMap;

use crate::utils::{write_value, write_vector};

fn get_random() -> [u8; 32] {
let mut rng = rand::thread_rng();
let mut arr = [0u8; 32];
Expand Down Expand Up @@ -52,8 +51,6 @@ pub fn hint_generate_test_vector(
.map(|(x, y)| keccak(x, y))
.collect();

let x_array_ptr =
get_ptr_from_var_name("x_array", vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
let x_array: Vec<MaybeRelocatable> = x_list
.into_iter()
.flat_map(|x| {
Expand All @@ -64,10 +61,8 @@ pub fn hint_generate_test_vector(
]
})
.collect();
vm.segments.load_data(x_array_ptr, &x_array)?;
write_vector("x_array", &x_array, vm, &hint_data)?;

let y_array_ptr =
get_ptr_from_var_name("y_array", vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
let y_array: Vec<MaybeRelocatable> = y_list
.into_iter()
.flat_map(|x| {
Expand All @@ -78,14 +73,8 @@ pub fn hint_generate_test_vector(
]
})
.collect();
vm.segments.load_data(y_array_ptr, &y_array)?;
write_vector("y_array", &y_array, vm, &hint_data)?;

let keccak_result_array_ptr = get_ptr_from_var_name(
"keccak_result_array",
vm,
&hint_data.ids_data,
&hint_data.ap_tracking,
)?;
let keccak_result_array: Vec<MaybeRelocatable> = keccak_result_list
.into_iter()
.flat_map(|x| {
Expand All @@ -96,15 +85,13 @@ pub fn hint_generate_test_vector(
]
})
.collect();
vm.segments
.load_data(keccak_result_array_ptr, &keccak_result_array)?;
write_vector("keccak_result_array", &keccak_result_array, vm, &hint_data)?;

insert_value_from_var_name(
write_value(
"len",
MaybeRelocatable::Int(Felt252::from(keccak_result_array.len() / 2)),
vm,
&hint_data.ids_data,
&hint_data.ap_tracking,
&hint_data,
)?;

Ok(())
Expand Down
Loading

0 comments on commit 109a1d8

Please sign in to comment.