dpp/state_transition/state_transitions/document/batch_transition/
mod.rs

1use bincode::{Decode, Encode};
2
3use std::convert::TryInto;
4
5use derive_more::From;
6
7use platform_value::Value;
8#[cfg(feature = "serde-conversion")]
9use serde::{Deserialize, Serialize};
10
11use crate::ProtocolError;
12use crate::{identity::SecurityLevel, state_transition::StateTransitionFieldTypes};
13
14pub use self::batched_transition::{
15    document_base_transition, document_create_transition,
16    document_create_transition::DocumentCreateTransition, document_delete_transition,
17    document_delete_transition::DocumentDeleteTransition, document_replace_transition,
18    document_replace_transition::DocumentReplaceTransition, token_base_transition,
19    token_burn_transition, token_burn_transition::TokenBurnTransition, token_claim_transition,
20    token_claim_transition::TokenClaimTransition, token_config_update_transition,
21    token_config_update_transition::TokenConfigUpdateTransition,
22    token_destroy_frozen_funds_transition,
23    token_destroy_frozen_funds_transition::TokenDestroyFrozenFundsTransition,
24    token_direct_purchase_transition,
25    token_direct_purchase_transition::TokenDirectPurchaseTransition,
26    token_emergency_action_transition,
27    token_emergency_action_transition::TokenEmergencyActionTransition, token_freeze_transition,
28    token_freeze_transition::TokenFreezeTransition, token_mint_transition,
29    token_mint_transition::TokenMintTransition, token_set_price_for_direct_purchase_transition,
30    token_set_price_for_direct_purchase_transition::TokenSetPriceForDirectPurchaseTransition,
31    token_transfer_transition, token_transfer_transition::TokenTransferTransition,
32    token_unfreeze_transition, token_unfreeze_transition::TokenUnfreezeTransition,
33};
34
35use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize, PlatformSignable};
36use platform_versioning::PlatformVersioned;
37
38pub mod accessors;
39pub mod batched_transition;
40pub mod fields;
41mod identity_signed;
42#[cfg(feature = "json-conversion")]
43mod json_conversion;
44pub mod methods;
45pub mod resolvers;
46mod state_transition_estimated_fee_validation;
47mod state_transition_like;
48mod v0;
49mod v1;
50#[cfg(feature = "validation")]
51mod validation;
52#[cfg(feature = "value-conversion")]
53mod value_conversion;
54mod version;
55
56use crate::state_transition::data_contract_update_transition::{
57    SIGNATURE, SIGNATURE_PUBLIC_KEY_ID,
58};
59
60use crate::state_transition::batch_transition::fields::property_names;
61
62use crate::identity::state_transition::OptionallyAssetLockProved;
63pub use v0::*;
64pub use v1::*;
65
66#[derive(
67    Debug,
68    Clone,
69    PartialEq,
70    Encode,
71    Decode,
72    PlatformDeserialize,
73    PlatformSerialize,
74    PlatformSignable,
75    PlatformVersioned,
76    From,
77)]
78#[cfg_attr(
79    feature = "serde-conversion",
80    derive(Serialize, Deserialize),
81    serde(tag = "$formatVersion")
82)]
83#[platform_serialize(unversioned)] //versioned directly, no need to use platform_version
84#[platform_version_path_bounds(
85    "dpp.state_transition_serialization_versions.batch_state_transition"
86)]
87pub enum BatchTransition {
88    #[cfg_attr(feature = "serde-conversion", serde(rename = "0"))]
89    V0(BatchTransitionV0),
90    #[cfg_attr(feature = "serde-conversion", serde(rename = "1"))]
91    V1(BatchTransitionV1),
92}
93
94impl StateTransitionFieldTypes for BatchTransition {
95    fn binary_property_paths() -> Vec<&'static str> {
96        vec![SIGNATURE]
97    }
98
99    fn identifiers_property_paths() -> Vec<&'static str> {
100        vec![property_names::OWNER_ID]
101    }
102
103    fn signature_property_paths() -> Vec<&'static str> {
104        vec![SIGNATURE, SIGNATURE_PUBLIC_KEY_ID]
105    }
106}
107
108// TODO: Make a DocumentType method
109pub fn get_security_level_requirement(v: &Value, default: SecurityLevel) -> SecurityLevel {
110    let maybe_security_level: Option<u64> = v
111        .get_optional_integer(property_names::SECURITY_LEVEL_REQUIREMENT)
112        // TODO: Data Contract must already valid so there is no chance that this will fail
113        .expect("document schema must be a map");
114
115    match maybe_security_level {
116        Some(some_level) => (some_level as u8).try_into().unwrap_or(default),
117        None => default,
118    }
119}
120
121impl OptionallyAssetLockProved for BatchTransition {}
122
123#[cfg(test)]
124mod tests;