drive/state_transition_action/identity/identity_update/
mod.rs1pub mod transformer;
3pub 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#[derive(Debug, Clone, From)]
14pub enum IdentityUpdateTransitionAction {
15 V0(IdentityUpdateTransitionActionV0),
17}
18
19impl IdentityUpdateTransitionAction {
20 pub fn public_keys_to_add(&self) -> &Vec<IdentityPublicKey> {
22 match self {
23 IdentityUpdateTransitionAction::V0(transition) => &transition.add_public_keys,
24 }
25 }
26 pub fn public_keys_to_disable(&self) -> &Vec<KeyID> {
28 match self {
29 IdentityUpdateTransitionAction::V0(transition) => &transition.disable_public_keys,
30 }
31 }
32
33 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 pub fn identity_id(&self) -> Identifier {
44 match self {
45 IdentityUpdateTransitionAction::V0(transition) => transition.identity_id,
46 }
47 }
48
49 pub fn revision(&self) -> Revision {
51 match self {
52 IdentityUpdateTransitionAction::V0(transition) => transition.revision,
53 }
54 }
55
56 pub fn nonce(&self) -> IdentityNonce {
58 match self {
59 IdentityUpdateTransitionAction::V0(transition) => transition.nonce,
60 }
61 }
62
63 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}