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