Skip to content

Commit

Permalink
first part of token distribution
Browse files Browse the repository at this point in the history
  • Loading branch information
QuantumExplorer committed Jan 27, 2025
1 parent 19be127 commit 39ffaba
Show file tree
Hide file tree
Showing 40 changed files with 1,411 additions and 276 deletions.
14 changes: 14 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions packages/rs-dpp/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ authors = [
[dependencies]
anyhow = { version = "1.0.81" }
async-trait = { version = "0.1.79" }
ordered-float = { version = "4.6.0", features = ["serde"]}
base64 = "0.22.1"
bs58 = "0.5"
byteorder = { version = "1.4" }
Expand Down
3 changes: 3 additions & 0 deletions packages/rs-dpp/src/data_contract/associated_token/mod.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
pub mod token_configuration;
pub mod token_configuration_convention;
pub mod token_configuration_item;
pub mod token_distribution_rules;
pub mod token_perpetual_distribution;
pub mod token_pre_programmed_distribution;
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ use crate::data_contract::associated_token::token_configuration::accessors::v0::
};
use crate::data_contract::associated_token::token_configuration::TokenConfiguration;
use crate::data_contract::associated_token::token_configuration_convention::TokenConfigurationConvention;
use crate::data_contract::associated_token::token_distribution_rules::TokenDistributionRules;
use crate::data_contract::change_control_rules::authorized_action_takers::AuthorizedActionTakers;
use crate::data_contract::change_control_rules::ChangeControlRules;
use crate::data_contract::GroupContractPosition;
use platform_value::Identifier;
use std::collections::BTreeSet;

/// Implementing TokenConfigurationV0Getters for TokenConfiguration
Expand Down Expand Up @@ -69,30 +69,15 @@ impl TokenConfigurationV0Getters for TokenConfiguration {
}
}

/// Returns the new tokens destination identity.
fn new_tokens_destination_identity(&self) -> Option<Identifier> {
fn distribution_rules(&self) -> &TokenDistributionRules {
match self {
TokenConfiguration::V0(v0) => v0.new_tokens_destination_identity(),
TokenConfiguration::V0(v0) => v0.distribution_rules(),
}
}

/// Returns the new tokens destination identity rules.
fn new_tokens_destination_identity_rules(&self) -> &ChangeControlRules {
fn distribution_rules_mut(&mut self) -> &mut TokenDistributionRules {
match self {
TokenConfiguration::V0(v0) => v0.new_tokens_destination_identity_rules(),
}
}
/// Returns whether minting allows choosing a destination.
fn minting_allow_choosing_destination(&self) -> bool {
match self {
TokenConfiguration::V0(v0) => v0.minting_allow_choosing_destination(),
}
}

/// Returns the rules for minting destination selection.
fn minting_allow_choosing_destination_rules(&self) -> &ChangeControlRules {
match self {
TokenConfiguration::V0(v0) => v0.minting_allow_choosing_destination_rules(),
TokenConfiguration::V0(v0) => v0.distribution_rules_mut(),
}
}

Expand Down Expand Up @@ -195,17 +180,9 @@ impl TokenConfigurationV0Setters for TokenConfiguration {
}
}

/// Sets the new tokens destination identity.
fn set_new_tokens_destination_identity(&mut self, id: Option<Identifier>) {
fn set_distribution_rules(&mut self, rules: TokenDistributionRules) {
match self {
TokenConfiguration::V0(v0) => v0.set_new_tokens_destination_identity(id),
}
}

/// Sets the new tokens destination identity rules.
fn set_new_tokens_destination_identity_rules(&mut self, rules: ChangeControlRules) {
match self {
TokenConfiguration::V0(v0) => v0.set_new_tokens_destination_identity_rules(rules),
TokenConfiguration::V0(v0) => v0.set_distribution_rules(rules),
}
}

Expand Down Expand Up @@ -262,16 +239,4 @@ impl TokenConfigurationV0Setters for TokenConfiguration {
TokenConfiguration::V0(v0) => v0.set_main_control_group_can_be_modified(action_takers),
}
}

fn set_minting_allow_choosing_destination(&mut self, value: bool) {
match self {
TokenConfiguration::V0(v0) => v0.set_minting_allow_choosing_destination(value),
}
}

fn set_minting_allow_choosing_destination_rules(&mut self, rules: ChangeControlRules) {
match self {
TokenConfiguration::V0(v0) => v0.set_minting_allow_choosing_destination_rules(rules),
}
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
use crate::balances::credits::TokenAmount;
use crate::data_contract::associated_token::token_configuration_convention::TokenConfigurationConvention;
use crate::data_contract::associated_token::token_distribution_rules::TokenDistributionRules;
use crate::data_contract::change_control_rules::authorized_action_takers::AuthorizedActionTakers;
use crate::data_contract::change_control_rules::ChangeControlRules;
use crate::data_contract::GroupContractPosition;
use platform_value::Identifier;
use std::collections::BTreeSet;

/// Accessor trait for getters of `TokenConfigurationV0`
Expand All @@ -28,15 +28,11 @@ pub trait TokenConfigurationV0Getters {
/// Returns the max supply change rules.
fn max_supply_change_rules(&self) -> &ChangeControlRules;

/// Returns the new tokens destination identity.
fn new_tokens_destination_identity(&self) -> Option<Identifier>;
/// Returns the distribution rules.
fn distribution_rules(&self) -> &TokenDistributionRules;

/// Returns the new tokens destination identity rules.
fn new_tokens_destination_identity_rules(&self) -> &ChangeControlRules;
/// Returns whether minting allows choosing a destination.
fn minting_allow_choosing_destination(&self) -> bool;
/// Returns the rules for minting destination selection.
fn minting_allow_choosing_destination_rules(&self) -> &ChangeControlRules;
/// Returns a mutable reference to the distribution rules.
fn distribution_rules_mut(&mut self) -> &mut TokenDistributionRules;

/// Returns the manual minting rules.
fn manual_minting_rules(&self) -> &ChangeControlRules;
Expand Down Expand Up @@ -81,11 +77,8 @@ pub trait TokenConfigurationV0Setters {
/// Sets the max supply change rules.
fn set_max_supply_change_rules(&mut self, rules: ChangeControlRules);

/// Sets the new tokens destination identity.
fn set_new_tokens_destination_identity(&mut self, id: Option<Identifier>);

/// Sets the new tokens destination identity rules.
fn set_new_tokens_destination_identity_rules(&mut self, rules: ChangeControlRules);
/// Sets the distribution rules.
fn set_distribution_rules(&mut self, rules: TokenDistributionRules);

/// Sets the manual minting rules.
fn set_manual_minting_rules(&mut self, rules: ChangeControlRules);
Expand All @@ -108,8 +101,4 @@ pub trait TokenConfigurationV0Setters {

/// Sets the main control group can be modified.
fn set_main_control_group_can_be_modified(&mut self, action_takers: AuthorizedActionTakers);
/// Sets whether minting allows choosing a destination.
fn set_minting_allow_choosing_destination(&mut self, value: bool);
/// Sets the rules for minting destination selection.
fn set_minting_allow_choosing_destination_rules(&mut self, rules: ChangeControlRules);
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
use crate::data_contract::associated_token::token_configuration::v0::TokenConfigurationV0;
use crate::data_contract::associated_token::token_configuration_item::TokenConfigurationChangeItem;
use crate::data_contract::associated_token::token_distribution_rules::accessors::v0::{
TokenDistributionRulesV0Getters, TokenDistributionRulesV0Setters,
};

impl TokenConfigurationV0 {
/// Applies a `TokenConfigurationChangeItem` to this token configuration.
///
Expand Down Expand Up @@ -35,31 +39,51 @@ impl TokenConfigurationV0 {
.set_admin_action_takers(admin_group);
}
TokenConfigurationChangeItem::NewTokensDestinationIdentity(identity) => {
self.new_tokens_destination_identity = identity;
self.distribution_rules
.set_new_tokens_destination_identity(identity);
}
TokenConfigurationChangeItem::NewTokensDestinationIdentityControlGroup(
control_group,
) => {
self.new_tokens_destination_identity_rules
self.distribution_rules
.new_tokens_destination_identity_rules_mut()
.set_authorized_to_make_change_action_takers(control_group);
}
TokenConfigurationChangeItem::NewTokensDestinationIdentityAdminGroup(admin_group) => {
self.new_tokens_destination_identity_rules
self.distribution_rules
.new_tokens_destination_identity_rules_mut()
.set_admin_action_takers(admin_group);
}
TokenConfigurationChangeItem::MintingAllowChoosingDestination(allow) => {
self.minting_allow_choosing_destination = allow;
self.distribution_rules
.set_minting_allow_choosing_destination(allow);
}
TokenConfigurationChangeItem::MintingAllowChoosingDestinationControlGroup(
control_group,
) => {
self.minting_allow_choosing_destination_rules
self.distribution_rules
.minting_allow_choosing_destination_rules_mut()
.set_authorized_to_make_change_action_takers(control_group);
}
TokenConfigurationChangeItem::MintingAllowChoosingDestinationAdminGroup(
admin_group,
) => {
self.minting_allow_choosing_destination_rules
self.distribution_rules
.minting_allow_choosing_destination_rules_mut()
.set_admin_action_takers(admin_group);
}
TokenConfigurationChangeItem::PerpetualDistribution(perpetual_distribution) => {
self.distribution_rules
.set_perpetual_distribution(perpetual_distribution);
}
TokenConfigurationChangeItem::PerpetualDistributionControlGroup(control_group) => {
self.distribution_rules
.perpetual_distribution_rules_mut()
.set_authorized_to_make_change_action_takers(control_group);
}
TokenConfigurationChangeItem::PerpetualDistributionAdminGroup(admin_group) => {
self.distribution_rules
.perpetual_distribution_rules_mut()
.set_admin_action_takers(admin_group);
}
TokenConfigurationChangeItem::ManualMinting(control_group) => {
Expand Down
Loading

0 comments on commit 39ffaba

Please sign in to comment.