iota_verifier_latest/
verifier.rs1use iota_types::{error::ExecutionError, move_package::FnInfoMap};
8use move_binary_format::file_format::CompiledModule;
9use move_bytecode_verifier_meter::{Meter, dummy::DummyMeter};
10
11use crate::{
12 entry_points_verifier, global_storage_access_verifier, id_leak_verifier,
13 one_time_witness_verifier, private_generics, struct_with_key_verifier,
14};
15
16pub fn iota_verify_module_metered(
18 module: &CompiledModule,
19 fn_info_map: &FnInfoMap,
20 meter: &mut (impl Meter + ?Sized),
21) -> Result<(), ExecutionError> {
22 struct_with_key_verifier::verify_module(module)?;
23 global_storage_access_verifier::verify_module(module)?;
24 id_leak_verifier::verify_module(module, meter)?;
25 private_generics::verify_module(module)?;
26 entry_points_verifier::verify_module(module, fn_info_map)?;
27 one_time_witness_verifier::verify_module(module, fn_info_map)
28}
29
30pub fn iota_verify_module_metered_check_timeout_only(
34 module: &CompiledModule,
35 fn_info_map: &FnInfoMap,
36 meter: &mut (impl Meter + ?Sized),
37) -> Result<(), ExecutionError> {
38 if let Err(error) = iota_verify_module_metered(module, fn_info_map, meter) {
40 if matches!(
41 error.kind(),
42 iota_types::execution_status::ExecutionFailureStatus::IotaMoveVerificationTimeout
43 ) {
44 return Err(error);
45 }
46 }
47 Ok(())
49}
50
51pub fn iota_verify_module_unmetered(
52 module: &CompiledModule,
53 fn_info_map: &FnInfoMap,
54) -> Result<(), ExecutionError> {
55 iota_verify_module_metered(module, fn_info_map, &mut DummyMeter).inspect_err(|err| {
56 debug_assert!(
58 !matches!(
59 err.kind(),
60 iota_types::execution_status::ExecutionFailureStatus::IotaMoveVerificationTimeout
61 ),
62 "Unexpected timeout error in execution"
63 );
64 })
65}