Skip to content

Commit c9ab154

Browse files
feat(platform)!: improved token validation and token config update transition (#2435)
1 parent d9647cc commit c9ab154

File tree

163 files changed

+5857
-723
lines changed

Some content is hidden

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

163 files changed

+5857
-723
lines changed

Cargo.lock

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

packages/dapi-grpc/protos/platform/v0/platform.proto

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1622,6 +1622,12 @@ message GetGroupActionsResponse {
16221622
optional string public_note = 2; // Public note
16231623
}
16241624

1625+
// Token config update event
1626+
message TokenConfigUpdateEvent {
1627+
bytes token_config_update_item = 1; // Token config update item
1628+
optional string public_note = 2; // Public note
1629+
}
1630+
16251631
// Event associated with this action
16261632
message GroupActionEvent {
16271633
oneof event_type {
@@ -1661,6 +1667,7 @@ message GetGroupActionsResponse {
16611667
DestroyFrozenFundsEvent destroy_frozen_funds = 5; // Destroy frozen funds
16621668
TransferEvent transfer = 6; // Transfer event details
16631669
EmergencyActionEvent emergency_action = 7; // Emergency action details
1670+
TokenConfigUpdateEvent token_config_update = 8; // Token configuration update details
16641671
}
16651672
}
16661673

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
pub mod token_configuration;
2+
pub mod token_configuration_convention;
3+
pub mod token_configuration_item;

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

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,41 @@
11
pub mod v0;
22

3+
use crate::balances::credits::TokenAmount;
34
use crate::data_contract::associated_token::token_configuration::accessors::v0::{
45
TokenConfigurationV0Getters, TokenConfigurationV0Setters,
56
};
6-
use crate::data_contract::associated_token::token_configuration::v0::TokenConfigurationConventionV0;
77
use crate::data_contract::associated_token::token_configuration::TokenConfiguration;
8+
use crate::data_contract::associated_token::token_configuration_convention::TokenConfigurationConvention;
89
use crate::data_contract::change_control_rules::authorized_action_takers::AuthorizedActionTakers;
910
use crate::data_contract::change_control_rules::ChangeControlRules;
1011
use crate::data_contract::GroupContractPosition;
1112
use platform_value::Identifier;
13+
use std::collections::BTreeSet;
1214

1315
/// Implementing TokenConfigurationV0Getters for TokenConfiguration
1416
impl TokenConfigurationV0Getters for TokenConfiguration {
1517
/// Returns a reference to the conventions.
16-
fn conventions(&self) -> &TokenConfigurationConventionV0 {
18+
fn conventions(&self) -> &TokenConfigurationConvention {
1719
match self {
1820
TokenConfiguration::V0(v0) => v0.conventions(),
1921
}
2022
}
2123

2224
/// Returns a mutable reference to the conventions.
23-
fn conventions_mut(&mut self) -> &mut TokenConfigurationConventionV0 {
25+
fn conventions_mut(&mut self) -> &mut TokenConfigurationConvention {
2426
match self {
2527
TokenConfiguration::V0(v0) => v0.conventions_mut(),
2628
}
2729
}
2830

31+
fn conventions_change_rules(&self) -> &ChangeControlRules {
32+
match self {
33+
TokenConfiguration::V0(v0) => v0.conventions_change_rules(),
34+
}
35+
}
36+
2937
/// Returns the base supply.
30-
fn base_supply(&self) -> u64 {
38+
fn base_supply(&self) -> TokenAmount {
3139
match self {
3240
TokenConfiguration::V0(v0) => v0.base_supply(),
3341
}
@@ -141,17 +149,31 @@ impl TokenConfigurationV0Getters for TokenConfiguration {
141149
TokenConfiguration::V0(v0) => v0.main_control_group_can_be_modified(),
142150
}
143151
}
152+
153+
/// Returns all group positions used in the token configuration
154+
fn all_used_group_positions(&self) -> BTreeSet<GroupContractPosition> {
155+
match self {
156+
TokenConfiguration::V0(v0) => v0.all_used_group_positions(),
157+
}
158+
}
144159
}
145160

146161
/// Implementing TokenConfigurationV0Setters for TokenConfiguration
147162
impl TokenConfigurationV0Setters for TokenConfiguration {
148163
/// Sets the conventions.
149-
fn set_conventions(&mut self, conventions: TokenConfigurationConventionV0) {
164+
fn set_conventions(&mut self, conventions: TokenConfigurationConvention) {
150165
match self {
151166
TokenConfiguration::V0(v0) => v0.set_conventions(conventions),
152167
}
153168
}
154169

170+
/// Sets the conventions change rules.
171+
fn set_conventions_change_rules(&mut self, rules: ChangeControlRules) {
172+
match self {
173+
TokenConfiguration::V0(v0) => v0.set_conventions_change_rules(rules),
174+
}
175+
}
176+
155177
/// Sets the base supply.
156178
fn set_base_supply(&mut self, base_supply: u64) {
157179
match self {

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

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
use crate::balances::credits::TokenAmount;
2-
use crate::data_contract::associated_token::token_configuration::v0::TokenConfigurationConventionV0;
2+
use crate::data_contract::associated_token::token_configuration_convention::TokenConfigurationConvention;
33
use crate::data_contract::change_control_rules::authorized_action_takers::AuthorizedActionTakers;
44
use crate::data_contract::change_control_rules::ChangeControlRules;
55
use crate::data_contract::GroupContractPosition;
66
use platform_value::Identifier;
7+
use std::collections::BTreeSet;
78

89
/// Accessor trait for getters of `TokenConfigurationV0`
910
pub trait TokenConfigurationV0Getters {
1011
/// Returns a reference to the conventions.
11-
fn conventions(&self) -> &TokenConfigurationConventionV0;
12+
fn conventions(&self) -> &TokenConfigurationConvention;
1213

1314
/// Returns a mutable reference to the conventions.
14-
fn conventions_mut(&mut self) -> &mut TokenConfigurationConventionV0;
15+
fn conventions_mut(&mut self) -> &mut TokenConfigurationConvention;
16+
/// Returns the new tokens destination identity rules.
17+
fn conventions_change_rules(&self) -> &ChangeControlRules;
1518

1619
/// Returns the base supply.
1720
fn base_supply(&self) -> TokenAmount;
@@ -56,12 +59,18 @@ pub trait TokenConfigurationV0Getters {
5659

5760
/// Returns the main control group can be modified.
5861
fn main_control_group_can_be_modified(&self) -> &AuthorizedActionTakers;
62+
63+
/// Returns all group positions used in the token configuration
64+
fn all_used_group_positions(&self) -> BTreeSet<GroupContractPosition>;
5965
}
6066

6167
/// Accessor trait for setters of `TokenConfigurationV0`
6268
pub trait TokenConfigurationV0Setters {
6369
/// Sets the conventions.
64-
fn set_conventions(&mut self, conventions: TokenConfigurationConventionV0);
70+
fn set_conventions(&mut self, conventions: TokenConfigurationConvention);
71+
72+
/// Sets the conventions change rules.
73+
fn set_conventions_change_rules(&mut self, rules: ChangeControlRules);
6574

6675
/// Sets the base supply.
6776
fn set_base_supply(&mut self, base_supply: TokenAmount);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
use crate::data_contract::associated_token::token_configuration::TokenConfiguration;
2+
use crate::data_contract::associated_token::token_configuration_item::TokenConfigurationChangeItem;
3+
4+
mod v0;
5+
6+
impl TokenConfiguration {
7+
/// Applies a `TokenConfigurationChangeItem` to this token configuration.
8+
///
9+
/// # Parameters
10+
/// - `change_item`: The change item to be applied.
11+
///
12+
/// This method modifies the current `TokenConfigurationV0` instance in place.
13+
pub fn apply_token_configuration_item(&mut self, change_item: TokenConfigurationChangeItem) {
14+
match self {
15+
TokenConfiguration::V0(v0) => v0.apply_token_configuration_item(change_item),
16+
}
17+
}
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
use crate::data_contract::associated_token::token_configuration::v0::TokenConfigurationV0;
2+
use crate::data_contract::associated_token::token_configuration_item::TokenConfigurationChangeItem;
3+
impl TokenConfigurationV0 {
4+
/// Applies a `TokenConfigurationChangeItem` to this token configuration.
5+
///
6+
/// # Parameters
7+
/// - `change_item`: The change item to be applied.
8+
///
9+
/// This method modifies the current `TokenConfigurationV0` instance in place.
10+
pub fn apply_token_configuration_item(&mut self, change_item: TokenConfigurationChangeItem) {
11+
match change_item {
12+
TokenConfigurationChangeItem::TokenConfigurationNoChange => {
13+
// No changes are made
14+
}
15+
TokenConfigurationChangeItem::Conventions(conventions) => {
16+
self.conventions = conventions;
17+
}
18+
TokenConfigurationChangeItem::ConventionsControlGroup(control_group) => {
19+
self.conventions_change_rules
20+
.set_authorized_to_make_change_action_takers(control_group);
21+
}
22+
TokenConfigurationChangeItem::ConventionsAdminGroup(admin_group) => {
23+
self.conventions_change_rules
24+
.set_admin_action_takers(admin_group);
25+
}
26+
TokenConfigurationChangeItem::MaxSupply(max_supply) => {
27+
self.max_supply = max_supply;
28+
}
29+
TokenConfigurationChangeItem::MaxSupplyControlGroup(control_group) => {
30+
self.max_supply_change_rules
31+
.set_authorized_to_make_change_action_takers(control_group);
32+
}
33+
TokenConfigurationChangeItem::MaxSupplyAdminGroup(admin_group) => {
34+
self.max_supply_change_rules
35+
.set_admin_action_takers(admin_group);
36+
}
37+
TokenConfigurationChangeItem::NewTokensDestinationIdentity(identity) => {
38+
self.new_tokens_destination_identity = identity;
39+
}
40+
TokenConfigurationChangeItem::NewTokensDestinationIdentityControlGroup(
41+
control_group,
42+
) => {
43+
self.new_tokens_destination_identity_rules
44+
.set_authorized_to_make_change_action_takers(control_group);
45+
}
46+
TokenConfigurationChangeItem::NewTokensDestinationIdentityAdminGroup(admin_group) => {
47+
self.new_tokens_destination_identity_rules
48+
.set_admin_action_takers(admin_group);
49+
}
50+
TokenConfigurationChangeItem::MintingAllowChoosingDestination(allow) => {
51+
self.minting_allow_choosing_destination = allow;
52+
}
53+
TokenConfigurationChangeItem::MintingAllowChoosingDestinationControlGroup(
54+
control_group,
55+
) => {
56+
self.minting_allow_choosing_destination_rules
57+
.set_authorized_to_make_change_action_takers(control_group);
58+
}
59+
TokenConfigurationChangeItem::MintingAllowChoosingDestinationAdminGroup(
60+
admin_group,
61+
) => {
62+
self.minting_allow_choosing_destination_rules
63+
.set_admin_action_takers(admin_group);
64+
}
65+
TokenConfigurationChangeItem::ManualMinting(control_group) => {
66+
self.manual_minting_rules
67+
.set_authorized_to_make_change_action_takers(control_group);
68+
}
69+
TokenConfigurationChangeItem::ManualMintingAdminGroup(admin_group) => {
70+
self.manual_minting_rules
71+
.set_admin_action_takers(admin_group);
72+
}
73+
TokenConfigurationChangeItem::ManualBurning(control_group) => {
74+
self.manual_burning_rules
75+
.set_authorized_to_make_change_action_takers(control_group);
76+
}
77+
TokenConfigurationChangeItem::ManualBurningAdminGroup(admin_group) => {
78+
self.manual_burning_rules
79+
.set_admin_action_takers(admin_group);
80+
}
81+
TokenConfigurationChangeItem::Freeze(control_group) => {
82+
self.freeze_rules
83+
.set_authorized_to_make_change_action_takers(control_group);
84+
}
85+
TokenConfigurationChangeItem::FreezeAdminGroup(admin_group) => {
86+
self.freeze_rules.set_admin_action_takers(admin_group);
87+
}
88+
TokenConfigurationChangeItem::Unfreeze(control_group) => {
89+
self.unfreeze_rules
90+
.set_authorized_to_make_change_action_takers(control_group);
91+
}
92+
TokenConfigurationChangeItem::UnfreezeAdminGroup(admin_group) => {
93+
self.unfreeze_rules.set_admin_action_takers(admin_group);
94+
}
95+
TokenConfigurationChangeItem::DestroyFrozenFunds(control_group) => {
96+
self.destroy_frozen_funds_rules
97+
.set_authorized_to_make_change_action_takers(control_group);
98+
}
99+
TokenConfigurationChangeItem::DestroyFrozenFundsAdminGroup(admin_group) => {
100+
self.destroy_frozen_funds_rules
101+
.set_admin_action_takers(admin_group);
102+
}
103+
TokenConfigurationChangeItem::EmergencyAction(control_group) => {
104+
self.emergency_action_rules
105+
.set_authorized_to_make_change_action_takers(control_group);
106+
}
107+
TokenConfigurationChangeItem::EmergencyActionAdminGroup(admin_group) => {
108+
self.emergency_action_rules
109+
.set_admin_action_takers(admin_group);
110+
}
111+
TokenConfigurationChangeItem::MainControlGroup(main_group) => {
112+
self.main_control_group = main_group;
113+
}
114+
}
115+
}
116+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
use crate::data_contract::associated_token::token_configuration::TokenConfiguration;
2+
use crate::data_contract::associated_token::token_configuration_item::TokenConfigurationChangeItem;
3+
use crate::data_contract::change_control_rules::authorized_action_takers::AuthorizedActionTakers;
4+
5+
mod v0;
6+
7+
impl TokenConfiguration {
8+
/// Returns the authorized action takers for a specific `TokenConfigurationChangeItem`.
9+
///
10+
/// # Parameters
11+
/// - `change_item`: The change item for which to retrieve the authorized action takers.
12+
///
13+
/// # Returns
14+
/// - `AuthorizedActionTakers`: The authorized action takers for the given change item.
15+
pub fn authorized_action_takers_for_configuration_item(
16+
&self,
17+
change_item: &TokenConfigurationChangeItem,
18+
) -> AuthorizedActionTakers {
19+
match self {
20+
TokenConfiguration::V0(v0) => {
21+
v0.authorized_action_takers_for_configuration_item(change_item)
22+
}
23+
}
24+
}
25+
}

0 commit comments

Comments
 (0)