sui_verifier_latest/
lib.rs

1// Copyright (c) Mysten Labs, Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4pub mod verifier;
5
6pub mod entry_points_verifier;
7pub mod global_storage_access_verifier;
8pub mod id_leak_verifier;
9pub mod meter;
10pub mod one_time_witness_verifier;
11pub mod private_generics;
12pub mod private_generics_verifier_v2;
13pub mod struct_with_key_verifier;
14
15use move_core_types::{
16    account_address::AccountAddress, ident_str, identifier::IdentStr, vm_status::StatusCode,
17};
18use sui_types::error::{ExecutionError, ExecutionErrorKind};
19
20pub const INIT_FN_NAME: &IdentStr = ident_str!("init");
21pub const TEST_SCENARIO_MODULE_NAME: &str = "test_scenario";
22
23pub type FunctionIdent<'a> = (AccountAddress, &'a IdentStr, &'a IdentStr);
24
25fn verification_failure(error: String) -> ExecutionError {
26    ExecutionError::new_with_source(ExecutionErrorKind::SuiMoveVerificationError, error)
27}
28
29fn to_verification_timeout_error(error: String) -> ExecutionError {
30    ExecutionError::new_with_source(ExecutionErrorKind::SuiMoveVerificationTimedout, error)
31}
32
33/// Runs the Move verifier and checks if the error counts as a Move verifier timeout
34/// NOTE: this function only check if the verifier error is a timeout
35/// All other errors are ignored
36pub fn check_for_verifier_timeout(major_status_code: &StatusCode) -> bool {
37    [
38        StatusCode::PROGRAM_TOO_COMPLEX,
39        // Do we want to make this a substatus of `PROGRAM_TOO_COMPLEX`?
40        StatusCode::TOO_MANY_BACK_EDGES,
41        StatusCode::BORROWLOC_EXISTS_BORROW_ERROR,
42        StatusCode::COPYLOC_EXISTS_BORROW_ERROR,
43        StatusCode::DEPRECATED_BYTECODE_FORMAT,
44    ]
45    .contains(major_status_code)
46}