drive/state_transition_action/shielded/shield_from_identity/
mod.rs1pub mod transformer;
3pub mod v0;
5
6use crate::state_transition_action::shielded::shield_from_identity::v0::ShieldFromIdentityTransitionActionV0;
7use crate::state_transition_action::shielded::ShieldedActionNote;
8use derive_more::From;
9use dpp::fee::Credits;
10use dpp::platform_value::Identifier;
11use dpp::prelude::{IdentityNonce, UserFeeIncrease};
12
13#[derive(Debug, Clone, From)]
15pub enum ShieldFromIdentityTransitionAction {
16 V0(ShieldFromIdentityTransitionActionV0),
18}
19
20impl ShieldFromIdentityTransitionAction {
21 pub fn identity_id(&self) -> Identifier {
23 match self {
24 ShieldFromIdentityTransitionAction::V0(transition) => transition.identity_id,
25 }
26 }
27 pub fn nonce(&self) -> IdentityNonce {
29 match self {
30 ShieldFromIdentityTransitionAction::V0(transition) => transition.nonce,
31 }
32 }
33 pub fn shield_amount(&self) -> Credits {
35 match self {
36 ShieldFromIdentityTransitionAction::V0(transition) => transition.shield_amount,
37 }
38 }
39 pub fn notes(&self) -> &[ShieldedActionNote] {
41 match self {
42 ShieldFromIdentityTransitionAction::V0(transition) => &transition.notes,
43 }
44 }
45 pub fn user_fee_increase(&self) -> UserFeeIncrease {
47 match self {
48 ShieldFromIdentityTransitionAction::V0(transition) => transition.user_fee_increase,
49 }
50 }
51 pub fn current_total_balance(&self) -> Credits {
53 match self {
54 ShieldFromIdentityTransitionAction::V0(transition) => transition.current_total_balance,
55 }
56 }
57}
58
59#[cfg(test)]
60mod tests {
61 use super::*;
62
63 fn make_note() -> ShieldedActionNote {
64 ShieldedActionNote {
65 nullifier: [0x11; 32],
66 cmx: [0x22; 32],
67 cv_net: [0x33; 32],
68 encrypted_note: vec![0xAB, 0xCD, 0xEF],
69 }
70 }
71
72 fn make_action() -> ShieldFromIdentityTransitionAction {
73 ShieldFromIdentityTransitionAction::from(ShieldFromIdentityTransitionActionV0 {
74 identity_id: Identifier::from([0xAA; 32]),
75 nonce: 3,
76 shield_amount: 5000,
77 notes: vec![make_note(), make_note()],
78 user_fee_increase: 2,
79 current_total_balance: 50000,
80 })
81 }
82
83 #[test]
84 fn test_accessors() {
85 let action = make_action();
86 assert!(matches!(action, ShieldFromIdentityTransitionAction::V0(_)));
87 assert_eq!(action.identity_id(), Identifier::from([0xAA; 32]));
88 assert_eq!(action.nonce(), 3);
89 assert_eq!(action.shield_amount(), 5000);
90 assert_eq!(action.notes().len(), 2);
91 assert_eq!(action.notes()[0].cmx, [0x22; 32]);
92 assert_eq!(action.user_fee_increase(), 2);
93 assert_eq!(action.current_total_balance(), 50000);
94 }
95}