multiversx_chain_vm/host/vm_hooks/vh_handler/
vh_error.rs1use multiversx_chain_core::types::ReturnCode;
2use multiversx_chain_vm_executor::VMHooksEarlyExit;
3
4use crate::{
5 host::vm_hooks::{vh_early_exit::early_exit_vm_error, VMHooksContext},
6 types::RawHandle,
7};
8
9use super::VMHooksHandler;
10
11impl<C: VMHooksContext> VMHooksHandler<C> {
12 pub fn signal_error(&mut self, message: &[u8]) -> Result<(), VMHooksEarlyExit> {
13 println!("{}", std::str::from_utf8(message).unwrap());
16
17 match String::from_utf8(message.to_owned()) {
18 Ok(message_string) => {
19 Err(VMHooksEarlyExit::new(ReturnCode::UserError.as_u64())
20 .with_message(message_string))
21 }
22 Err(_) => Err(early_exit_vm_error("error message utf-8 error")),
23 }
24 }
25
26 pub fn signal_error_from_buffer(
27 &mut self,
28 message_handle: RawHandle,
29 ) -> Result<(), VMHooksEarlyExit> {
30 let bytes = self.context.m_types_lock().mb_get_owned(message_handle);
31 self.signal_error(&bytes)
32 }
33}