drive/state_transition_action/identity/identity_update/
mod.rs

1/// transformer
2pub mod transformer;
3/// v0
4pub mod v0;
5
6use crate::state_transition_action::identity::identity_update::v0::IdentityUpdateTransitionActionV0;
7use derive_more::From;
8use dpp::identity::{IdentityPublicKey, KeyID};
9use dpp::platform_value::Identifier;
10use dpp::prelude::{IdentityNonce, Revision, UserFeeIncrease};
11
12/// action
13#[derive(Debug, Clone, From)]
14pub enum IdentityUpdateTransitionAction {
15    /// v0
16    V0(IdentityUpdateTransitionActionV0),
17}
18
19impl IdentityUpdateTransitionAction {
20    /// Public Keys
21    pub fn public_keys_to_add(&self) -> &Vec<IdentityPublicKey> {
22        match self {
23            IdentityUpdateTransitionAction::V0(transition) => &transition.add_public_keys,
24        }
25    }
26    /// Disable Public Keys
27    pub fn public_keys_to_disable(&self) -> &Vec<KeyID> {
28        match self {
29            IdentityUpdateTransitionAction::V0(transition) => &transition.disable_public_keys,
30        }
31    }
32
33    /// Public Keys to Add and Disable Owned
34    pub fn public_keys_to_add_and_disable_owned(self) -> (Vec<IdentityPublicKey>, Vec<KeyID>) {
35        match self {
36            IdentityUpdateTransitionAction::V0(transition) => {
37                (transition.add_public_keys, transition.disable_public_keys)
38            }
39        }
40    }
41
42    /// Identity Id
43    pub fn identity_id(&self) -> Identifier {
44        match self {
45            IdentityUpdateTransitionAction::V0(transition) => transition.identity_id,
46        }
47    }
48
49    /// Revision
50    pub fn revision(&self) -> Revision {
51        match self {
52            IdentityUpdateTransitionAction::V0(transition) => transition.revision,
53        }
54    }
55
56    /// Nonce
57    pub fn nonce(&self) -> IdentityNonce {
58        match self {
59            IdentityUpdateTransitionAction::V0(transition) => transition.nonce,
60        }
61    }
62
63    /// fee multiplier
64    pub fn user_fee_increase(&self) -> UserFeeIncrease {
65        match self {
66            IdentityUpdateTransitionAction::V0(transition) => transition.user_fee_increase,
67        }
68    }
69}
70
71#[cfg(test)]
72mod tests {
73    use super::*;
74    use crate::state_transition_action::identity::identity_update::v0::IdentityUpdateTransitionActionV0;
75    use dpp::identity::IdentityPublicKey;
76    use dpp::version::PlatformVersion;
77
78    fn make_v0() -> IdentityUpdateTransitionActionV0 {
79        let platform_version = PlatformVersion::latest();
80        let (key, _private) =
81            IdentityPublicKey::random_masternode_transfer_key(1, Some(42), platform_version)
82                .expect("expected a random key");
83        IdentityUpdateTransitionActionV0 {
84            add_public_keys: vec![key],
85            disable_public_keys: vec![5, 10],
86            identity_id: Identifier::from([0xAA; 32]),
87            revision: 7,
88            nonce: 99,
89            user_fee_increase: 2,
90        }
91    }
92
93    #[test]
94    fn test_from_v0() {
95        let v0 = make_v0();
96        let action: IdentityUpdateTransitionAction = v0.into();
97        assert!(matches!(action, IdentityUpdateTransitionAction::V0(_)));
98    }
99
100    #[test]
101    fn test_public_keys_to_add() {
102        let action = IdentityUpdateTransitionAction::V0(make_v0());
103        assert_eq!(action.public_keys_to_add().len(), 1);
104    }
105
106    #[test]
107    fn test_public_keys_to_disable() {
108        let action = IdentityUpdateTransitionAction::V0(make_v0());
109        assert_eq!(action.public_keys_to_disable(), &vec![5u32, 10]);
110    }
111
112    #[test]
113    fn test_public_keys_to_add_and_disable_owned() {
114        let action = IdentityUpdateTransitionAction::V0(make_v0());
115        let (add, disable) = action.public_keys_to_add_and_disable_owned();
116        assert_eq!(add.len(), 1);
117        assert_eq!(disable, vec![5u32, 10]);
118    }
119
120    #[test]
121    fn test_identity_id() {
122        let action = IdentityUpdateTransitionAction::V0(make_v0());
123        assert_eq!(action.identity_id(), Identifier::from([0xAA; 32]));
124    }
125
126    #[test]
127    fn test_revision() {
128        let action = IdentityUpdateTransitionAction::V0(make_v0());
129        assert_eq!(action.revision(), 7);
130    }
131
132    #[test]
133    fn test_nonce() {
134        let action = IdentityUpdateTransitionAction::V0(make_v0());
135        assert_eq!(action.nonce(), 99);
136    }
137
138    #[test]
139    fn test_user_fee_increase() {
140        let action = IdentityUpdateTransitionAction::V0(make_v0());
141        assert_eq!(action.user_fee_increase(), 2);
142    }
143}