Skip to content

Commit 6d5af88

Browse files
feat(dpp): token distribution model (#2447)
1 parent e735313 commit 6d5af88

File tree

41 files changed

+1649
-272
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+1649
-272
lines changed

Cargo.lock

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/rs-dpp/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ authors = [
1414
[dependencies]
1515
anyhow = { version = "1.0.81" }
1616
async-trait = { version = "0.1.79" }
17+
ordered-float = { version = "4.6.0", features = ["serde"]}
1718
base64 = "0.22.1"
1819
bs58 = "0.5"
1920
byteorder = { version = "1.4" }
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
pub mod token_configuration;
22
pub mod token_configuration_convention;
33
pub mod token_configuration_item;
4+
pub mod token_distribution_rules;
5+
pub mod token_perpetual_distribution;
6+
pub mod token_pre_programmed_distribution;

packages/rs-dpp/src/data_contract/associated_token/token_configuration/accessors/mod.rs

Lines changed: 7 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ use crate::data_contract::associated_token::token_configuration::accessors::v0::
66
};
77
use crate::data_contract::associated_token::token_configuration::TokenConfiguration;
88
use crate::data_contract::associated_token::token_configuration_convention::TokenConfigurationConvention;
9+
use crate::data_contract::associated_token::token_distribution_rules::TokenDistributionRules;
910
use crate::data_contract::change_control_rules::authorized_action_takers::AuthorizedActionTakers;
1011
use crate::data_contract::change_control_rules::ChangeControlRules;
1112
use crate::data_contract::GroupContractPosition;
12-
use platform_value::Identifier;
1313
use std::collections::BTreeSet;
1414

1515
/// Implementing TokenConfigurationV0Getters for TokenConfiguration
@@ -69,30 +69,15 @@ impl TokenConfigurationV0Getters for TokenConfiguration {
6969
}
7070
}
7171

72-
/// Returns the new tokens destination identity.
73-
fn new_tokens_destination_identity(&self) -> Option<Identifier> {
72+
fn distribution_rules(&self) -> &TokenDistributionRules {
7473
match self {
75-
TokenConfiguration::V0(v0) => v0.new_tokens_destination_identity(),
74+
TokenConfiguration::V0(v0) => v0.distribution_rules(),
7675
}
7776
}
7877

79-
/// Returns the new tokens destination identity rules.
80-
fn new_tokens_destination_identity_rules(&self) -> &ChangeControlRules {
78+
fn distribution_rules_mut(&mut self) -> &mut TokenDistributionRules {
8179
match self {
82-
TokenConfiguration::V0(v0) => v0.new_tokens_destination_identity_rules(),
83-
}
84-
}
85-
/// Returns whether minting allows choosing a destination.
86-
fn minting_allow_choosing_destination(&self) -> bool {
87-
match self {
88-
TokenConfiguration::V0(v0) => v0.minting_allow_choosing_destination(),
89-
}
90-
}
91-
92-
/// Returns the rules for minting destination selection.
93-
fn minting_allow_choosing_destination_rules(&self) -> &ChangeControlRules {
94-
match self {
95-
TokenConfiguration::V0(v0) => v0.minting_allow_choosing_destination_rules(),
80+
TokenConfiguration::V0(v0) => v0.distribution_rules_mut(),
9681
}
9782
}
9883

@@ -195,17 +180,9 @@ impl TokenConfigurationV0Setters for TokenConfiguration {
195180
}
196181
}
197182

198-
/// Sets the new tokens destination identity.
199-
fn set_new_tokens_destination_identity(&mut self, id: Option<Identifier>) {
183+
fn set_distribution_rules(&mut self, rules: TokenDistributionRules) {
200184
match self {
201-
TokenConfiguration::V0(v0) => v0.set_new_tokens_destination_identity(id),
202-
}
203-
}
204-
205-
/// Sets the new tokens destination identity rules.
206-
fn set_new_tokens_destination_identity_rules(&mut self, rules: ChangeControlRules) {
207-
match self {
208-
TokenConfiguration::V0(v0) => v0.set_new_tokens_destination_identity_rules(rules),
185+
TokenConfiguration::V0(v0) => v0.set_distribution_rules(rules),
209186
}
210187
}
211188

@@ -262,16 +239,4 @@ impl TokenConfigurationV0Setters for TokenConfiguration {
262239
TokenConfiguration::V0(v0) => v0.set_main_control_group_can_be_modified(action_takers),
263240
}
264241
}
265-
266-
fn set_minting_allow_choosing_destination(&mut self, value: bool) {
267-
match self {
268-
TokenConfiguration::V0(v0) => v0.set_minting_allow_choosing_destination(value),
269-
}
270-
}
271-
272-
fn set_minting_allow_choosing_destination_rules(&mut self, rules: ChangeControlRules) {
273-
match self {
274-
TokenConfiguration::V0(v0) => v0.set_minting_allow_choosing_destination_rules(rules),
275-
}
276-
}
277242
}

packages/rs-dpp/src/data_contract/associated_token/token_configuration/accessors/v0/mod.rs

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
use crate::balances::credits::TokenAmount;
22
use crate::data_contract::associated_token::token_configuration_convention::TokenConfigurationConvention;
3+
use crate::data_contract::associated_token::token_distribution_rules::TokenDistributionRules;
34
use crate::data_contract::change_control_rules::authorized_action_takers::AuthorizedActionTakers;
45
use crate::data_contract::change_control_rules::ChangeControlRules;
56
use crate::data_contract::GroupContractPosition;
6-
use platform_value::Identifier;
77
use std::collections::BTreeSet;
88

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

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

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

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

84-
/// Sets the new tokens destination identity.
85-
fn set_new_tokens_destination_identity(&mut self, id: Option<Identifier>);
86-
87-
/// Sets the new tokens destination identity rules.
88-
fn set_new_tokens_destination_identity_rules(&mut self, rules: ChangeControlRules);
80+
/// Sets the distribution rules.
81+
fn set_distribution_rules(&mut self, rules: TokenDistributionRules);
8982

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

109102
/// Sets the main control group can be modified.
110103
fn set_main_control_group_can_be_modified(&mut self, action_takers: AuthorizedActionTakers);
111-
/// Sets whether minting allows choosing a destination.
112-
fn set_minting_allow_choosing_destination(&mut self, value: bool);
113-
/// Sets the rules for minting destination selection.
114-
fn set_minting_allow_choosing_destination_rules(&mut self, rules: ChangeControlRules);
115104
}

packages/rs-dpp/src/data_contract/associated_token/token_configuration/methods/apply_token_configuration_item/v0/mod.rs

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
use crate::data_contract::associated_token::token_configuration::v0::TokenConfigurationV0;
22
use crate::data_contract::associated_token::token_configuration_item::TokenConfigurationChangeItem;
3+
use crate::data_contract::associated_token::token_distribution_rules::accessors::v0::{
4+
TokenDistributionRulesV0Getters, TokenDistributionRulesV0Setters,
5+
};
6+
37
impl TokenConfigurationV0 {
48
/// Applies a `TokenConfigurationChangeItem` to this token configuration.
59
///
@@ -35,31 +39,51 @@ impl TokenConfigurationV0 {
3539
.set_admin_action_takers(admin_group);
3640
}
3741
TokenConfigurationChangeItem::NewTokensDestinationIdentity(identity) => {
38-
self.new_tokens_destination_identity = identity;
42+
self.distribution_rules
43+
.set_new_tokens_destination_identity(identity);
3944
}
4045
TokenConfigurationChangeItem::NewTokensDestinationIdentityControlGroup(
4146
control_group,
4247
) => {
43-
self.new_tokens_destination_identity_rules
48+
self.distribution_rules
49+
.new_tokens_destination_identity_rules_mut()
4450
.set_authorized_to_make_change_action_takers(control_group);
4551
}
4652
TokenConfigurationChangeItem::NewTokensDestinationIdentityAdminGroup(admin_group) => {
47-
self.new_tokens_destination_identity_rules
53+
self.distribution_rules
54+
.new_tokens_destination_identity_rules_mut()
4855
.set_admin_action_takers(admin_group);
4956
}
5057
TokenConfigurationChangeItem::MintingAllowChoosingDestination(allow) => {
51-
self.minting_allow_choosing_destination = allow;
58+
self.distribution_rules
59+
.set_minting_allow_choosing_destination(allow);
5260
}
5361
TokenConfigurationChangeItem::MintingAllowChoosingDestinationControlGroup(
5462
control_group,
5563
) => {
56-
self.minting_allow_choosing_destination_rules
64+
self.distribution_rules
65+
.minting_allow_choosing_destination_rules_mut()
5766
.set_authorized_to_make_change_action_takers(control_group);
5867
}
5968
TokenConfigurationChangeItem::MintingAllowChoosingDestinationAdminGroup(
6069
admin_group,
6170
) => {
62-
self.minting_allow_choosing_destination_rules
71+
self.distribution_rules
72+
.minting_allow_choosing_destination_rules_mut()
73+
.set_admin_action_takers(admin_group);
74+
}
75+
TokenConfigurationChangeItem::PerpetualDistribution(perpetual_distribution) => {
76+
self.distribution_rules
77+
.set_perpetual_distribution(perpetual_distribution);
78+
}
79+
TokenConfigurationChangeItem::PerpetualDistributionControlGroup(control_group) => {
80+
self.distribution_rules
81+
.perpetual_distribution_rules_mut()
82+
.set_authorized_to_make_change_action_takers(control_group);
83+
}
84+
TokenConfigurationChangeItem::PerpetualDistributionAdminGroup(admin_group) => {
85+
self.distribution_rules
86+
.perpetual_distribution_rules_mut()
6387
.set_admin_action_takers(admin_group);
6488
}
6589
TokenConfigurationChangeItem::ManualMinting(control_group) => {

0 commit comments

Comments
 (0)