multiversx_chain_vm/vm_hooks/vh_handler/
vh_storage.rs

1use 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}