multiversx_chain_vm/vm_hooks/vh_handler/
vh_storage.rs1use crate::{
2 types::{RawHandle, VMAddress},
3 vm_hooks::VMHooksHandlerSource,
4};
5
6use super::VMHooksManagedTypes;
7
8pub trait VMHooksStorageRead: VMHooksHandlerSource {
9 fn storage_load_managed_buffer_raw(&self, key_handle: RawHandle, dest: RawHandle) {
10 let value = self.storage_read(self.m_types_lock().mb_get(key_handle));
11 self.m_types_lock().mb_set(dest, value);
12 }
13
14 fn storage_load_from_address(
15 &self,
16 address_handle: RawHandle,
17 key_handle: RawHandle,
18 dest: RawHandle,
19 ) {
20 let address = VMAddress::from_slice(self.m_types_lock().mb_get(address_handle));
21 let value = self.storage_read_any_address(&address, self.m_types_lock().mb_get(key_handle));
22 self.m_types_lock().mb_set(dest, value);
23 }
24}
25
26pub trait VMHooksStorageWrite: VMHooksHandlerSource + VMHooksManagedTypes {
27 fn storage_store_managed_buffer_raw(&self, key_handle: RawHandle, value_handle: RawHandle) {
28 let types = self.m_types_lock();
29 let key_bytes = types.mb_get(key_handle);
30 let value_bytes = types.mb_get(value_handle);
31 self.storage_write(key_bytes, value_bytes);
32 }
33}