Skip to main content

iota_verifier_latest/
lib.rs

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