sui_verifier_latest/
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, private_generics_verifier_v2,
13 struct_with_key_verifier, tx_context_restrictions_verifier,
14};
15use move_bytecode_verifier_meter::Meter;
16use move_bytecode_verifier_meter::dummy::DummyMeter;
17
18pub fn sui_verify_module_metered(
20 module: &CompiledModule,
21 fn_info_map: &FnInfoMap,
22 meter: &mut (impl Meter + ?Sized),
23 verifier_config: &VerifierConfig,
24) -> Result<(), ExecutionError> {
25 struct_with_key_verifier::verify_module(module)?;
26 global_storage_access_verifier::verify_module(module)?;
27 id_leak_verifier::verify_module(module, meter)?;
28 if verifier_config.private_generics_verifier_v2 {
29 private_generics_verifier_v2::verify_module(module, verifier_config)?;
30 } else {
31 private_generics::verify_module(module, verifier_config)?;
32 }
33 entry_points_verifier::verify_module(module, fn_info_map, verifier_config)?;
34 tx_context_restrictions_verifier::verify_module(module, verifier_config)?;
35 one_time_witness_verifier::verify_module(module, fn_info_map)
36}
37
38pub fn sui_verify_module_metered_check_timeout_only(
42 module: &CompiledModule,
43 fn_info_map: &FnInfoMap,
44 meter: &mut (impl Meter + ?Sized),
45 verifier_config: &VerifierConfig,
46) -> Result<(), ExecutionError> {
47 if let Err(error) = sui_verify_module_metered(module, fn_info_map, meter, verifier_config)
49 && matches!(
50 error.kind(),
51 sui_types::execution_status::ExecutionErrorKind::SuiMoveVerificationTimedout
52 )
53 {
54 return Err(error);
55 }
56 Ok(())
58}
59
60pub fn sui_verify_module_unmetered(
61 module: &CompiledModule,
62 fn_info_map: &FnInfoMap,
63 verifier_config: &VerifierConfig,
64) -> Result<(), ExecutionError> {
65 sui_verify_module_metered(module, fn_info_map, &mut DummyMeter, verifier_config).inspect_err(
66 |err| {
67 debug_assert!(
69 !matches!(
70 err.kind(),
71 sui_types::execution_status::ExecutionErrorKind::SuiMoveVerificationTimedout
72 ),
73 "Unexpected timeout error in execution"
74 );
75 },
76 )
77}