dpp/state_transition/traits/
state_transition_like.rs1use std::fmt::Debug;
2
3use crate::prelude::Identifier;
4use crate::version::FeatureVersion;
5
6use crate::state_transition::StateTransitionType;
7use crate::state_transition::{StateTransition, StateTransitionFieldTypes};
8
9pub const DOCUMENT_TRANSITION_TYPES: [StateTransitionType; 1] = [StateTransitionType::Batch];
10
11pub const IDENTITY_TRANSITION_TYPE: [StateTransitionType; 11] = [
12 StateTransitionType::IdentityCreate,
13 StateTransitionType::IdentityTopUp,
14 StateTransitionType::IdentityUpdate,
15 StateTransitionType::IdentityCreditTransfer,
16 StateTransitionType::IdentityCreditWithdrawal,
17 StateTransitionType::IdentityTopUpFromAddresses,
18 StateTransitionType::IdentityCreateFromAddresses,
19 StateTransitionType::IdentityCreditTransferToAddresses,
20 StateTransitionType::IdentityCreateFromShieldedPool,
21 StateTransitionType::IdentityTopUpFromShieldedPool,
22 StateTransitionType::IdentityKeyLimitsUpdate,
23];
24
25pub const VOTING_TRANSITION_TYPE: [StateTransitionType; 1] = [StateTransitionType::MasternodeVote];
26
27pub const DATA_CONTRACT_TRANSITION_TYPES: [StateTransitionType; 4] = [
28 StateTransitionType::DataContractCreate,
29 StateTransitionType::DataContractUpdate,
30 StateTransitionType::ContractUserModeration,
31 StateTransitionType::ContractFeeClaim,
32];
33
34pub trait StateTransitionLike:
37 StateTransitionFieldTypes + Clone + Debug + Into<StateTransition>
38{
39 fn state_transition_protocol_version(&self) -> FeatureVersion;
41 fn state_transition_type(&self) -> StateTransitionType;
43 fn modified_data_ids(&self) -> Vec<Identifier>;
45
46 fn is_document_state_transition(&self) -> bool {
48 DOCUMENT_TRANSITION_TYPES.contains(&self.state_transition_type())
49 }
50 fn is_data_contract_state_transition(&self) -> bool {
52 DATA_CONTRACT_TRANSITION_TYPES.contains(&self.state_transition_type())
53 }
54 fn is_identity_state_transition(&self) -> bool {
56 IDENTITY_TRANSITION_TYPE.contains(&self.state_transition_type())
57 }
58
59 fn is_voting_state_transition(&self) -> bool {
61 VOTING_TRANSITION_TYPE.contains(&self.state_transition_type())
62 }
63
64 fn unique_identifiers(&self) -> Vec<String>;
67}