radix_engine/system/
system_substate_schemas.rs

1use crate::internal_prelude::*;
2use crate::kernel::kernel::*;
3use crate::system::system_callback::*;
4use crate::system::type_info::TypeInfoSubstate;
5use crate::transaction::SystemFieldKind;
6use crate::updates::*;
7use crate::vm::*;
8use lazy_static::lazy_static;
9use radix_transactions::validation::TransactionValidationConfigurationSubstate;
10use sbor::*;
11
12fn generate<S: ScryptoDescribe + ScryptoCheckedBackwardsCompatibleSchema>(
13) -> ScryptoSingleTypeSchema {
14    generate_single_type_schema::<S, _>()
15}
16
17pub fn resolve_system_field_schema(
18    system_field: SystemFieldKind,
19) -> &'static ScryptoSingleTypeSchema {
20    match system_field {
21        SystemFieldKind::TypeInfo => &TYPE_INFO_SUBSTATE_SCHEMA,
22        SystemFieldKind::VmBoot => &VM_BOOT_SUBSTATE_SCHEMA,
23        SystemFieldKind::SystemBoot => &SYSTEM_BOOT_SUBSTATE_SCHEMA,
24        SystemFieldKind::KernelBoot => &KERNEL_BOOT_SUBSTATE_SCHEMA,
25        SystemFieldKind::TransactionValidationConfiguration => {
26            &TRANSACTION_VALIDATION_CONFIGURATION_SUBSTATE_SCHEMA
27        }
28        SystemFieldKind::ProtocolUpdateStatusSummary => {
29            &PROTOCOL_UPDATE_STATUS_SUMMARY_SUBSTATE_SCHEMA
30        }
31    }
32}
33
34pub fn resolve_system_schema_schema() -> &'static ScryptoSingleTypeSchema {
35    &SCHEMA_SUBSTATE_SCHEMA
36}
37
38#[derive(ScryptoSbor, ScryptoSborAssertion)]
39#[sbor_assert(backwards_compatible(cuttlefish = "FILE:schema_substate_cuttlefish_schema.bin"))]
40#[sbor(transparent, transparent_name)]
41struct SchemaEntrySubstate(PackageSchemaEntrySubstate);
42
43// This is for having schemas to help map system substates
44lazy_static! {
45    static ref TYPE_INFO_SUBSTATE_SCHEMA: ScryptoSingleTypeSchema = generate::<TypeInfoSubstate>();
46    static ref KERNEL_BOOT_SUBSTATE_SCHEMA: ScryptoSingleTypeSchema =
47        generate::<KernelBootSubstate>();
48    static ref SYSTEM_BOOT_SUBSTATE_SCHEMA: ScryptoSingleTypeSchema =
49        generate::<SystemBootSubstate>();
50    static ref VM_BOOT_SUBSTATE_SCHEMA: ScryptoSingleTypeSchema = generate::<VmBootSubstate>();
51    static ref TRANSACTION_VALIDATION_CONFIGURATION_SUBSTATE_SCHEMA: ScryptoSingleTypeSchema =
52        generate::<TransactionValidationConfigurationSubstate>();
53    static ref PROTOCOL_UPDATE_STATUS_SUMMARY_SUBSTATE_SCHEMA: ScryptoSingleTypeSchema =
54        generate::<ProtocolUpdateStatusSummarySubstate>();
55    static ref SCHEMA_SUBSTATE_SCHEMA: ScryptoSingleTypeSchema = generate::<SchemaEntrySubstate>();
56}