dash_sdk/platform/transition/
update_price_of_document.rsuse crate::{Error, Sdk};
use super::broadcast::BroadcastStateTransition;
use super::waitable::Waitable;
use crate::platform::transition::put_settings::PutSettings;
use dpp::data_contract::document_type::accessors::DocumentTypeV0Getters;
use dpp::data_contract::document_type::DocumentType;
use dpp::document::{Document, DocumentV0Getters};
use dpp::fee::Credits;
use dpp::identity::signer::Signer;
use dpp::identity::IdentityPublicKey;
use dpp::state_transition::documents_batch_transition::methods::v0::DocumentsBatchTransitionMethodsV0;
use dpp::state_transition::documents_batch_transition::DocumentsBatchTransition;
use dpp::state_transition::StateTransition;
#[async_trait::async_trait]
pub trait UpdatePriceOfDocument<S: Signer>: Waitable {
async fn update_price_of_document(
&self,
price: Credits,
sdk: &Sdk,
document_type: DocumentType,
identity_public_key: IdentityPublicKey,
signer: &S,
settings: Option<PutSettings>,
) -> Result<StateTransition, Error>;
async fn update_price_of_document_and_wait_for_response(
&self,
price: Credits,
sdk: &Sdk,
document_type: DocumentType,
identity_public_key: IdentityPublicKey,
signer: &S,
settings: Option<PutSettings>,
) -> Result<Document, Error>;
}
#[async_trait::async_trait]
impl<S: Signer> UpdatePriceOfDocument<S> for Document {
async fn update_price_of_document(
&self,
price: Credits,
sdk: &Sdk,
document_type: DocumentType,
identity_public_key: IdentityPublicKey,
signer: &S,
settings: Option<PutSettings>,
) -> Result<StateTransition, Error> {
let new_identity_contract_nonce = sdk
.get_identity_contract_nonce(
self.owner_id(),
document_type.data_contract_id(),
true,
settings,
)
.await?;
let settings = settings.unwrap_or_default();
let transition =
DocumentsBatchTransition::new_document_update_price_transition_from_document(
self.clone(),
document_type.as_ref(),
price,
&identity_public_key,
new_identity_contract_nonce,
settings.user_fee_increase.unwrap_or_default(),
signer,
sdk.version(),
None,
None,
None,
)?;
transition.broadcast(sdk, Some(settings)).await?;
Ok(transition)
}
async fn update_price_of_document_and_wait_for_response(
&self,
price: Credits,
sdk: &Sdk,
document_type: DocumentType,
identity_public_key: IdentityPublicKey,
signer: &S,
settings: Option<PutSettings>,
) -> Result<Document, Error> {
let state_transition = self
.update_price_of_document(price, sdk, document_type, identity_public_key, signer, None)
.await?;
Self::wait_for_response(sdk, state_transition, settings).await
}
}