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