Skip to main content

dpp/state_transition/traits/
state_transition_like.rs

1use 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
34/// The StateTransitionLike represents set of methods that are shared for all types of State Transition.
35/// Every type of state transition should also implement Debug, Clone, and support conversion to compounded [`StateTransition`]
36pub trait StateTransitionLike:
37    StateTransitionFieldTypes + Clone + Debug + Into<StateTransition>
38{
39    /// returns the protocol version
40    fn state_transition_protocol_version(&self) -> FeatureVersion;
41    /// returns the type of State Transition
42    fn state_transition_type(&self) -> StateTransitionType;
43    /// get modified ids list
44    fn modified_data_ids(&self) -> Vec<Identifier>;
45
46    /// returns true if state transition is a document state transition
47    fn is_document_state_transition(&self) -> bool {
48        DOCUMENT_TRANSITION_TYPES.contains(&self.state_transition_type())
49    }
50    /// returns true if state transition is a data contract state transition
51    fn is_data_contract_state_transition(&self) -> bool {
52        DATA_CONTRACT_TRANSITION_TYPES.contains(&self.state_transition_type())
53    }
54    /// return true if state transition is an identity state transition
55    fn is_identity_state_transition(&self) -> bool {
56        IDENTITY_TRANSITION_TYPE.contains(&self.state_transition_type())
57    }
58
59    /// return true if state transition is a voting state transition
60    fn is_voting_state_transition(&self) -> bool {
61        VOTING_TRANSITION_TYPE.contains(&self.state_transition_type())
62    }
63
64    /// unique identifiers for the state transition
65    /// This is often only one String except in the case of a documents batch state transition
66    fn unique_identifiers(&self) -> Vec<String>;
67}