diff --git a/crates/starknet_os/src/hints/hint_implementation/stateless_compression/implementation.rs b/crates/starknet_os/src/hints/hint_implementation/stateless_compression/implementation.rs index d8f756bf4e..78ebf75dff 100644 --- a/crates/starknet_os/src/hints/hint_implementation/stateless_compression/implementation.rs +++ b/crates/starknet_os/src/hints/hint_implementation/stateless_compression/implementation.rs @@ -2,6 +2,7 @@ use std::collections::HashMap; use blockifier::state::state_api::StateReader; use cairo_vm::hint_processor::builtin_hint_processor::hint_utils::{ + get_integer_from_var_name, get_maybe_relocatable_from_var_name, get_ptr_from_var_name, insert_value_from_var_name, @@ -62,7 +63,18 @@ pub(crate) fn compression_hint( } pub(crate) fn set_decompressed_dst( - HintArgs { .. }: HintArgs<'_, S>, + HintArgs { vm, ids_data, ap_tracking, .. }: HintArgs<'_, S>, ) -> OsHintResult { - todo!() + let decompressed_dst = + get_ptr_from_var_name(Ids::DecompressedDst.into(), vm, ids_data, ap_tracking)?; + + let packed_felt = get_integer_from_var_name(Ids::PackedFelt.into(), vm, ids_data, ap_tracking)?; + let elm_bound = get_integer_from_var_name(Ids::ElmBound.into(), vm, ids_data, ap_tracking)?; + + vm.insert_value( + decompressed_dst, + packed_felt.div_rem(&elm_bound.try_into().expect("elm_bound is zero")).1, + )?; + + Ok(()) } diff --git a/crates/starknet_os/src/hints/vars.rs b/crates/starknet_os/src/hints/vars.rs index d527a7efa7..722429faa6 100644 --- a/crates/starknet_os/src/hints/vars.rs +++ b/crates/starknet_os/src/hints/vars.rs @@ -54,7 +54,9 @@ pub enum Ids { ContractStateChanges, DataEnd, DataStart, + DecompressedDst, DictPtr, + ElmBound, FullOutput, Hash, NCompiledClassFacts, @@ -62,6 +64,7 @@ pub enum Ids { OldBlockHash, OldBlockNumber, OsStateUpdate, + PackedFelt, PrevOffset, Sha256Ptr, StateEntry, @@ -81,7 +84,9 @@ impl From for &'static str { Ids::ContractStateChanges => "contract_state_changes", Ids::DataEnd => "data_end", Ids::DataStart => "data_start", + Ids::DecompressedDst => "decompressed_dst", Ids::DictPtr => "dict_ptr", + Ids::ElmBound => "elm_bound", Ids::FullOutput => "full_output", Ids::Hash => "hash", Ids::NCompiledClassFacts => "n_compiled_class_facts", @@ -89,6 +94,7 @@ impl From for &'static str { Ids::OldBlockHash => "old_block_hash", Ids::OldBlockNumber => "old_block_number", Ids::OsStateUpdate => "os_state_update", + Ids::PackedFelt => "packed_felt", Ids::PrevOffset => "prev_offset", Ids::Sha256Ptr => "sha256_ptr", Ids::StateEntry => "state_entry",