dash_sdk/platform/transition/
top_up_identity.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
use super::broadcast::BroadcastStateTransition;
use super::put_settings::PutSettings;
use super::waitable::Waitable;
use crate::{Error, Sdk};
use dpp::dashcore::PrivateKey;
use dpp::identity::{Identity, PartialIdentity};
use dpp::prelude::{AssetLockProof, UserFeeIncrease};
use dpp::state_transition::identity_topup_transition::methods::IdentityTopUpTransitionMethodsV0;
use dpp::state_transition::identity_topup_transition::IdentityTopUpTransition;

#[async_trait::async_trait]
pub trait TopUpIdentity: Waitable {
    async fn top_up_identity(
        &self,
        sdk: &Sdk,
        asset_lock_proof: AssetLockProof,
        asset_lock_proof_private_key: &PrivateKey,
        user_fee_increase: Option<UserFeeIncrease>,
        settings: Option<PutSettings>,
    ) -> Result<u64, Error>;
}

#[async_trait::async_trait]
impl TopUpIdentity for Identity {
    async fn top_up_identity(
        &self,
        sdk: &Sdk,
        asset_lock_proof: AssetLockProof,
        asset_lock_proof_private_key: &PrivateKey,
        user_fee_increase: Option<UserFeeIncrease>,
        settings: Option<PutSettings>,
    ) -> Result<u64, Error> {
        let state_transition = IdentityTopUpTransition::try_from_identity(
            self,
            asset_lock_proof,
            asset_lock_proof_private_key.inner.as_ref(),
            user_fee_increase.unwrap_or_default(),
            sdk.version(),
            None,
        )?;
        let identity: PartialIdentity = state_transition.broadcast_and_wait(sdk, settings).await?;

        identity.balance.ok_or(Error::DapiClientError(
            "expected an identity balance".to_string(),
        ))
    }
}