dpp/identity/
identity_facade.rs1use dashcore::{InstantLock, Transaction};
2
3use std::collections::BTreeMap;
4
5use crate::identity::state_transition::asset_lock_proof::chain::ChainAssetLockProof;
6use crate::identity::state_transition::asset_lock_proof::{AssetLockProof, InstantAssetLockProof};
7use crate::identity::{Identity, IdentityPublicKey, KeyID};
8use crate::prelude::{Identifier, IdentityNonce};
9
10use crate::identity::identity_factory::IdentityFactory;
11#[cfg(feature = "state-transitions")]
12use crate::state_transition::{
13 identity_create_transition::IdentityCreateTransition,
14 identity_credit_transfer_transition::IdentityCreditTransferTransition,
15 identity_credit_withdrawal_transition::IdentityCreditWithdrawalTransition,
16 identity_topup_transition::IdentityTopUpTransition,
17 identity_update_transition::IdentityUpdateTransition,
18 public_key_in_creation::IdentityPublicKeyInCreation,
19};
20
21use crate::identity::core_script::CoreScript;
22use crate::withdrawal::Pooling;
23use crate::ProtocolError;
24
25#[derive(Clone)]
26pub struct IdentityFacade {
27 factory: IdentityFactory,
28}
29
30impl IdentityFacade {
31 pub fn new(protocol_version: u32) -> Self {
32 Self {
33 factory: IdentityFactory::new(protocol_version),
34 }
35 }
36
37 pub fn create(
38 &self,
39 id: Identifier,
40 public_keys: BTreeMap<KeyID, IdentityPublicKey>,
41 ) -> Result<Identity, ProtocolError> {
42 self.factory.create(id, public_keys)
43 }
44
45 #[cfg(all(feature = "identity-serialization", feature = "client"))]
56 pub fn create_from_buffer(
57 &self,
58 buffer: Vec<u8>,
59 #[cfg(feature = "validation")] skip_validation: bool,
60 ) -> Result<Identity, ProtocolError> {
61 self.factory.create_from_buffer(
62 buffer,
63 #[cfg(feature = "validation")]
64 skip_validation,
65 )
66 }
67
68 pub fn create_instant_lock_proof(
69 instant_lock: InstantLock,
70 asset_lock_transaction: Transaction,
71 output_index: u32,
72 ) -> InstantAssetLockProof {
73 IdentityFactory::create_instant_lock_proof(
74 instant_lock,
75 asset_lock_transaction,
76 output_index,
77 )
78 }
79
80 pub fn create_chain_asset_lock_proof(
81 core_chain_locked_height: u32,
82 out_point: [u8; 36],
83 ) -> ChainAssetLockProof {
84 IdentityFactory::create_chain_asset_lock_proof(core_chain_locked_height, out_point)
85 }
86
87 #[cfg(feature = "state-transitions")]
88 pub fn create_identity_create_transition(
89 &self,
90 identity: &Identity,
91 asset_lock_proof: AssetLockProof,
92 ) -> Result<IdentityCreateTransition, ProtocolError> {
93 self.factory
94 .create_identity_create_transition(identity, asset_lock_proof)
95 }
96
97 #[cfg(feature = "state-transitions")]
98 pub fn create_identity_topup_transition(
99 &self,
100 identity_id: Identifier,
101 asset_lock_proof: AssetLockProof,
102 ) -> Result<IdentityTopUpTransition, ProtocolError> {
103 self.factory
104 .create_identity_topup_transition(identity_id, asset_lock_proof)
105 }
106
107 #[cfg(feature = "state-transitions")]
108 pub fn create_identity_credit_transfer_transition(
109 &self,
110 identity: &Identity,
111 recipient_id: Identifier,
112 amount: u64,
113 identity_nonce: IdentityNonce,
114 ) -> Result<IdentityCreditTransferTransition, ProtocolError> {
115 self.factory.create_identity_credit_transfer_transition(
116 identity,
117 recipient_id,
118 amount,
119 identity_nonce,
120 )
121 }
122
123 #[cfg(feature = "state-transitions")]
124 pub fn create_identity_credit_withdrawal_transition(
125 &self,
126 identity_id: Identifier,
127 amount: u64,
128 core_fee_per_byte: u32,
129 pooling: Pooling,
130 output_script: Option<CoreScript>,
131 identity_nonce: u64,
132 ) -> Result<IdentityCreditWithdrawalTransition, ProtocolError> {
133 self.factory.create_identity_credit_withdrawal_transition(
134 identity_id,
135 amount,
136 core_fee_per_byte,
137 pooling,
138 output_script,
139 identity_nonce,
140 )
141 }
142
143 #[cfg(feature = "state-transitions")]
144 pub fn create_identity_update_transition(
145 &self,
146 identity: Identity,
147 identity_nonce: u64,
148 add_public_keys: Option<Vec<IdentityPublicKeyInCreation>>,
149 public_key_ids_to_disable: Option<Vec<KeyID>>,
150 ) -> Result<IdentityUpdateTransition, ProtocolError> {
151 self.factory.create_identity_update_transition(
152 identity,
153 identity_nonce,
154 add_public_keys,
155 public_key_ids_to_disable,
156 )
157 }
158}