From 1ce0ecf4c147a43c93520173e159d28860a3d4bd Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Thu, 22 May 2025 14:18:59 +0200 Subject: [PATCH 1/2] feat!: disable changes to perpetual distribution in token configuration --- .../basic/unsupported_feature_error.rs | 2 +- .../validate_structure/v0/mod.rs | 27 ++++++++++++++++--- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/packages/rs-dpp/src/errors/consensus/basic/unsupported_feature_error.rs b/packages/rs-dpp/src/errors/consensus/basic/unsupported_feature_error.rs index 40c7dc217b7..0a0c542e2b8 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/unsupported_feature_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/unsupported_feature_error.rs @@ -9,7 +9,7 @@ use thiserror::Error; #[derive( Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, )] -#[error("feature {feature_name} is not supported in version {current_protocol_version}")] +#[error("feature {feature_name} is not supported. This validation was done in protocol version {current_protocol_version}")] #[platform_serialize(unversioned)] pub struct UnsupportedFeatureError { /* diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_config_update_transition/validate_structure/v0/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_config_update_transition/validate_structure/v0/mod.rs index 54189684602..010369f8b3a 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_config_update_transition/validate_structure/v0/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_config_update_transition/validate_structure/v0/mod.rs @@ -1,5 +1,6 @@ +use platform_version::version::PlatformVersion; use crate::consensus::basic::token::{InvalidTokenConfigUpdateNoChangeError, InvalidTokenNoteTooBigError, TokenNoteOnlyAllowedWhenProposerError}; -use crate::consensus::basic::BasicError; +use crate::consensus::basic::{BasicError, UnsupportedFeatureError}; use crate::consensus::ConsensusError; use crate::data_contract::associated_token::token_configuration_item::TokenConfigurationChangeItem; use crate::state_transition::batch_transition::token_config_update_transition::v0::v0_methods::TokenConfigUpdateTransitionV0Methods; @@ -11,10 +12,16 @@ use crate::state_transition::batch_transition::token_base_transition::token_base use crate::state_transition::batch_transition::token_base_transition::v0::v0_methods::TokenBaseTransitionV0Methods; pub(super) trait TokenConfigUpdateTransitionStructureValidationV0 { - fn validate_structure_v0(&self) -> Result; + fn validate_structure_v0( + &self, + platform_version: &PlatformVersion, + ) -> Result; } impl TokenConfigUpdateTransitionStructureValidationV0 for TokenConfigUpdateTransition { - fn validate_structure_v0(&self) -> Result { + fn validate_structure_v0( + &self, + platform_version: &PlatformVersion, + ) -> Result { if matches!( self.update_token_configuration_item(), TokenConfigurationChangeItem::TokenConfigurationNoChange @@ -26,6 +33,20 @@ impl TokenConfigUpdateTransitionStructureValidationV0 for TokenConfigUpdateTrans )); } + if matches!( + self.update_token_configuration_item(), + TokenConfigurationChangeItem::PerpetualDistribution(_) + ) { + return Ok(SimpleConsensusValidationResult::new_with_error( + ConsensusError::BasicError(BasicError::UnsupportedFeatureError( + UnsupportedFeatureError::new( + "of changing perpetual distribution".to_string(), + platform_version.protocol_version, + ), + )), + )); + } + if let Some(public_note) = self.public_note() { if public_note.len() > MAX_TOKEN_NOTE_LEN { return Ok(SimpleConsensusValidationResult::new_with_error( From 95609e08c1d99d4470148740d7a666f85c3b708e Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Thu, 22 May 2025 14:32:55 +0200 Subject: [PATCH 2/2] small fix --- .../token_config_update_transition/validate_structure/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_config_update_transition/validate_structure/mod.rs b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_config_update_transition/validate_structure/mod.rs index 9e361bf8bb7..79c77afb32b 100644 --- a/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_config_update_transition/validate_structure/mod.rs +++ b/packages/rs-dpp/src/state_transition/state_transitions/document/batch_transition/batched_transition/token_config_update_transition/validate_structure/mod.rs @@ -24,7 +24,7 @@ impl TokenConfigUpdateTransitionStructureValidation for TokenConfigUpdateTransit .batch_state_transition .token_config_update_transition_structure_validation { - 0 => self.validate_structure_v0(), + 0 => self.validate_structure_v0(platform_version), version => Err(ProtocolError::UnknownVersionMismatch { method: "TokenConfigUpdateTransition::validate_structure".to_string(), known_versions: vec![0],