dpp/identity/
identity_facade.rs

1use 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    // TODO(versioning): not used anymore?
46    // pub fn create_from_object(
47    //     &self,
48    //     raw_identity: Value,
49    //     skip_validation: bool,
50    // ) -> Result<Identity, ProtocolError> {
51    //     self.factory
52    //         .create_from_object(raw_identity)
53    // }
54
55    #[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}