Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ impl TokenConfigurationV0Getters for TokenConfigurationV0 {
),
(
"trade_mode_change_rules",
&self.marketplace_rules.trade_mode_change_rules(),
self.marketplace_rules.trade_mode_change_rules(),
),
("manual_minting_rules", &self.manual_minting_rules),
("manual_burning_rules", &self.manual_burning_rules),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,30 +14,32 @@ use dpp::state_transition::batch_transition::BatchTransition;
use dpp::state_transition::StateTransition;
use dpp::tokens::calculate_token_id;
use dpp::version::PlatformVersion;
use std::sync::Arc;

/// A builder to configure and broadcast token burn transitions
pub struct TokenBurnTransitionBuilder<'a> {
data_contract: &'a DataContract,
token_position: TokenContractPosition,
owner_id: Identifier,
amount: TokenAmount,
public_note: Option<String>,
settings: Option<PutSettings>,
user_fee_increase: Option<UserFeeIncrease>,
using_group_info: Option<GroupStateTransitionInfoStatus>,
pub struct TokenBurnTransitionBuilder {
pub data_contract: Arc<DataContract>,
pub token_position: TokenContractPosition,
pub owner_id: Identifier,
pub amount: TokenAmount,
pub public_note: Option<String>,
pub settings: Option<PutSettings>,
pub user_fee_increase: Option<UserFeeIncrease>,
pub using_group_info: Option<GroupStateTransitionInfoStatus>,
pub state_transition_creation_options: Option<StateTransitionCreationOptions>,
}

impl<'a> TokenBurnTransitionBuilder<'a> {
impl TokenBurnTransitionBuilder {
/// Creates a new `TokenBurnTransitionBuilder`
///
/// # Arguments
///
/// * `data_contract` - A reference to the data contract
/// * `data_contract` - An Arc to the data contract
/// * `token_position` - The position of the token in the contract
/// * `owner_id` - The identifier of the token owner
/// * `amount` - The amount of tokens to burn
pub fn new(
data_contract: &'a DataContract,
data_contract: Arc<DataContract>,
token_position: TokenContractPosition,
owner_id: Identifier,
amount: TokenAmount,
Expand All @@ -51,6 +53,7 @@ impl<'a> TokenBurnTransitionBuilder<'a> {
settings: None,
user_fee_increase: None,
using_group_info: None,
state_transition_creation_options: None,
}
}

Expand Down Expand Up @@ -110,6 +113,23 @@ impl<'a> TokenBurnTransitionBuilder<'a> {
self
}

/// Adds state transition creation options to the token burn transition
///
/// # Arguments
///
/// * `state_transition_creation_options` - The signing options to add
///
/// # Returns
///
/// * `Self` - The updated builder
pub fn with_state_transition_creation_options(
mut self,
state_transition_creation_options: StateTransitionCreationOptions,
) -> Self {
self.state_transition_creation_options = Some(state_transition_creation_options);
self
}

/// Signs the token burn transition
///
/// # Arguments
Expand All @@ -123,12 +143,11 @@ impl<'a> TokenBurnTransitionBuilder<'a> {
///
/// * `Result<StateTransition, Error>` - The signed state transition or an error
pub async fn sign(
&self,
self,
sdk: &Sdk,
identity_public_key: &IdentityPublicKey,
signer: &impl Signer,
platform_version: &PlatformVersion,
options: Option<StateTransitionCreationOptions>,
) -> Result<StateTransition, Error> {
let token_id = Identifier::from(calculate_token_id(
self.data_contract.id().as_bytes(),
Expand Down Expand Up @@ -157,7 +176,7 @@ impl<'a> TokenBurnTransitionBuilder<'a> {
self.user_fee_increase.unwrap_or_default(),
signer,
platform_version,
options,
self.state_transition_creation_options,
)?;

Ok(state_transition)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,24 +13,26 @@ use dpp::state_transition::batch_transition::BatchTransition;
use dpp::state_transition::StateTransition;
use dpp::tokens::calculate_token_id;
use dpp::version::PlatformVersion;
use std::sync::Arc;

/// A builder to configure and broadcast token claim transitions
pub struct TokenClaimTransitionBuilder<'a> {
data_contract: &'a DataContract,
token_position: TokenContractPosition,
owner_id: Identifier,
distribution_type: TokenDistributionType,
public_note: Option<String>,
settings: Option<PutSettings>,
user_fee_increase: Option<UserFeeIncrease>,
pub struct TokenClaimTransitionBuilder {
pub data_contract: Arc<DataContract>,
pub token_position: TokenContractPosition,
pub owner_id: Identifier,
pub distribution_type: TokenDistributionType,
pub public_note: Option<String>,
pub settings: Option<PutSettings>,
pub user_fee_increase: Option<UserFeeIncrease>,
pub state_transition_creation_options: Option<StateTransitionCreationOptions>,
}

impl<'a> TokenClaimTransitionBuilder<'a> {
impl TokenClaimTransitionBuilder {
/// Start building a claim tokens transition for the provided DataContract.
///
/// # Arguments
///
/// * `data_contract` - A reference to the data contract
/// * `data_contract` - An Arc to the data contract
/// * `token_position` - The position of the token in the contract
/// * `owner_id` - The identifier of the state transition owner
/// * `distribution_type` - The token distribution type
Expand All @@ -39,13 +41,11 @@ impl<'a> TokenClaimTransitionBuilder<'a> {
///
/// * `Self` - The new builder instance
pub fn new(
data_contract: &'a DataContract,
data_contract: Arc<DataContract>,
token_position: TokenContractPosition,
owner_id: Identifier,
distribution_type: TokenDistributionType,
) -> Self {
// TODO: Validate token position

Self {
data_contract,
token_position,
Expand All @@ -54,6 +54,7 @@ impl<'a> TokenClaimTransitionBuilder<'a> {
public_note: None,
settings: None,
user_fee_increase: None,
state_transition_creation_options: None,
}
}

Expand Down Expand Up @@ -99,6 +100,23 @@ impl<'a> TokenClaimTransitionBuilder<'a> {
self
}

/// Adds state transition creation options to the token claim transition
///
/// # Arguments
///
/// * `state_transition_creation_options` - The state transition creation options to add
///
/// # Returns
///
/// * `Self` - The updated builder
pub fn with_state_transition_creation_options(
mut self,
state_transition_creation_options: StateTransitionCreationOptions,
) -> Self {
self.state_transition_creation_options = Some(state_transition_creation_options);
self
}

/// Signs the token claim transition
///
/// # Arguments
Expand All @@ -112,12 +130,11 @@ impl<'a> TokenClaimTransitionBuilder<'a> {
///
/// * `Result<StateTransition, Error>` - The signed state transition or an error
pub async fn sign(
&self,
self,
sdk: &Sdk,
identity_public_key: &IdentityPublicKey,
signer: &impl Signer,
platform_version: &PlatformVersion,
options: Option<StateTransitionCreationOptions>,
) -> Result<StateTransition, Error> {
let token_id = Identifier::from(calculate_token_id(
self.data_contract.id().as_bytes(),
Expand Down Expand Up @@ -145,7 +162,7 @@ impl<'a> TokenClaimTransitionBuilder<'a> {
self.user_fee_increase.unwrap_or_default(),
signer,
platform_version,
options,
self.state_transition_creation_options,
)?;

Ok(state_transition)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,25 +14,27 @@ use dpp::state_transition::batch_transition::BatchTransition;
use dpp::state_transition::StateTransition;
use dpp::tokens::calculate_token_id;
use dpp::version::PlatformVersion;
use std::sync::Arc;

/// A builder to configure and broadcast token config_update transitions
pub struct TokenConfigUpdateTransitionBuilder<'a> {
data_contract: &'a DataContract,
token_position: TokenContractPosition,
owner_id: Identifier,
update_token_configuration_item: TokenConfigurationChangeItem,
public_note: Option<String>,
using_group_info: Option<GroupStateTransitionInfoStatus>,
settings: Option<PutSettings>,
user_fee_increase: Option<UserFeeIncrease>,
pub struct TokenConfigUpdateTransitionBuilder {
pub data_contract: Arc<DataContract>,
pub token_position: TokenContractPosition,
pub owner_id: Identifier,
pub update_token_configuration_item: TokenConfigurationChangeItem,
pub public_note: Option<String>,
pub using_group_info: Option<GroupStateTransitionInfoStatus>,
pub settings: Option<PutSettings>,
pub user_fee_increase: Option<UserFeeIncrease>,
pub state_transition_creation_options: Option<StateTransitionCreationOptions>,
}

impl<'a> TokenConfigUpdateTransitionBuilder<'a> {
impl TokenConfigUpdateTransitionBuilder {
/// Start building a config_update tokens transition for the provided DataContract.
///
/// # Arguments
///
/// * `data_contract` - A reference to the data contract
/// * `data_contract` - An Arc to the data contract
/// * `token_position` - The position of the token in the contract
/// * `owner_id` - The identifier of the state transition owner
/// * `update_token_configuration_item` - The token configuration change item
Expand All @@ -42,13 +44,11 @@ impl<'a> TokenConfigUpdateTransitionBuilder<'a> {
///
/// * `Self` - The new builder instance
pub fn new(
data_contract: &'a DataContract,
data_contract: Arc<DataContract>,
token_position: TokenContractPosition,
owner_id: Identifier,
update_token_configuration_item: TokenConfigurationChangeItem,
) -> Self {
// TODO: Validate token position

Self {
data_contract,
token_position,
Expand All @@ -58,6 +58,7 @@ impl<'a> TokenConfigUpdateTransitionBuilder<'a> {
using_group_info: None,
settings: None,
user_fee_increase: None,
state_transition_creation_options: None,
}
}

Expand Down Expand Up @@ -120,6 +121,23 @@ impl<'a> TokenConfigUpdateTransitionBuilder<'a> {
self
}

/// Adds state transition creation options to the token config_update transition
///
/// # Arguments
///
/// * `state_transition_creation_options` - The state transition creation options to add
///
/// # Returns
///
/// * `Self` - The updated builder
pub fn with_state_transition_creation_options(
mut self,
state_transition_creation_options: StateTransitionCreationOptions,
) -> Self {
self.state_transition_creation_options = Some(state_transition_creation_options);
self
}

/// Signs the token config_update transition
///
/// # Arguments
Expand All @@ -133,12 +151,11 @@ impl<'a> TokenConfigUpdateTransitionBuilder<'a> {
///
/// * `Result<StateTransition, Error>` - The signed state transition or an error
pub async fn sign(
&self,
self,
sdk: &Sdk,
identity_public_key: &IdentityPublicKey,
signer: &impl Signer,
platform_version: &PlatformVersion,
options: Option<StateTransitionCreationOptions>,
) -> Result<StateTransition, Error> {
let token_id = Identifier::from(calculate_token_id(
self.data_contract.id().as_bytes(),
Expand Down Expand Up @@ -167,7 +184,7 @@ impl<'a> TokenConfigUpdateTransitionBuilder<'a> {
self.user_fee_increase.unwrap_or_default(),
signer,
platform_version,
options,
self.state_transition_creation_options,
)?;

Ok(state_transition)
Expand Down
Loading
Loading