From fe9b79dad6a43b28887e822ba85c85ba4fb097c9 Mon Sep 17 00:00:00 2001 From: Ivan Shumkov Date: Wed, 19 Mar 2025 15:52:18 +0700 Subject: [PATCH 1/4] fix: allowed token distribution timestamp in the past --- .../{methods => accessors}/mod.rs | 0 .../{methods => accessors}/v0/mod.rs | 0 packages/rs-dpp/src/errors/consensus/codes.rs | 1 + .../src/errors/consensus/state/state_error.rs | 5 +- .../src/errors/consensus/state/token/mod.rs | 2 + ...ed_distribution_timestamp_in_past_error.rs | 50 +++++++++++++++++++ .../data_contract_create/state/v0/mod.rs | 23 +++++++++ .../data_contract_update/state/v0/mod.rs | 29 +++++++++-- .../src/errors/consensus/consensus_error.rs | 3 ++ 9 files changed, 109 insertions(+), 4 deletions(-) rename packages/rs-dpp/src/data_contract/associated_token/token_pre_programmed_distribution/{methods => accessors}/mod.rs (100%) rename packages/rs-dpp/src/data_contract/associated_token/token_pre_programmed_distribution/{methods => accessors}/v0/mod.rs (100%) create mode 100644 packages/rs-dpp/src/errors/consensus/state/token/pre_programmed_distribution_timestamp_in_past_error.rs diff --git a/packages/rs-dpp/src/data_contract/associated_token/token_pre_programmed_distribution/methods/mod.rs b/packages/rs-dpp/src/data_contract/associated_token/token_pre_programmed_distribution/accessors/mod.rs similarity index 100% rename from packages/rs-dpp/src/data_contract/associated_token/token_pre_programmed_distribution/methods/mod.rs rename to packages/rs-dpp/src/data_contract/associated_token/token_pre_programmed_distribution/accessors/mod.rs diff --git a/packages/rs-dpp/src/data_contract/associated_token/token_pre_programmed_distribution/methods/v0/mod.rs b/packages/rs-dpp/src/data_contract/associated_token/token_pre_programmed_distribution/accessors/v0/mod.rs similarity index 100% rename from packages/rs-dpp/src/data_contract/associated_token/token_pre_programmed_distribution/methods/v0/mod.rs rename to packages/rs-dpp/src/data_contract/associated_token/token_pre_programmed_distribution/accessors/v0/mod.rs diff --git a/packages/rs-dpp/src/errors/consensus/codes.rs b/packages/rs-dpp/src/errors/consensus/codes.rs index e768aee5803..e3e02eff54d 100644 --- a/packages/rs-dpp/src/errors/consensus/codes.rs +++ b/packages/rs-dpp/src/errors/consensus/codes.rs @@ -304,6 +304,7 @@ impl ErrorWithCode for StateError { Self::InvalidTokenClaimPropertyMismatch(_) => 40715, Self::InvalidTokenClaimNoCurrentRewards(_) => 40716, Self::InvalidTokenClaimWrongClaimant(_) => 40717, + Self::PreProgrammedDistributionTimestampInPastError(_) => 40719, // Group errors: 40800-40899 Self::IdentityNotMemberOfGroupError(_) => 40800, diff --git a/packages/rs-dpp/src/errors/consensus/state/state_error.rs b/packages/rs-dpp/src/errors/consensus/state/state_error.rs index 39d696bd6b7..e51f8197f03 100644 --- a/packages/rs-dpp/src/errors/consensus/state/state_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/state_error.rs @@ -42,7 +42,7 @@ use crate::consensus::state::identity::missing_transfer_key_error::MissingTransf use crate::consensus::state::identity::no_transfer_key_for_core_withdrawal_available_error::NoTransferKeyForCoreWithdrawalAvailableError; use crate::consensus::state::prefunded_specialized_balances::prefunded_specialized_balance_insufficient_error::PrefundedSpecializedBalanceInsufficientError; use crate::consensus::state::prefunded_specialized_balances::prefunded_specialized_balance_not_found_error::PrefundedSpecializedBalanceNotFoundError; -use crate::consensus::state::token::{IdentityDoesNotHaveEnoughTokenBalanceError, IdentityTokenAccountFrozenError, IdentityTokenAccountNotFrozenError, InvalidGroupPositionError, NewAuthorizedActionTakerGroupDoesNotExistError, NewAuthorizedActionTakerIdentityDoesNotExistError, NewAuthorizedActionTakerMainGroupNotSetError, NewTokensDestinationIdentityDoesNotExistError, TokenMintPastMaxSupplyError, TokenSettingMaxSupplyToLessThanCurrentSupplyError, UnauthorizedTokenActionError, IdentityTokenAccountAlreadyFrozenError, TokenAlreadyPausedError, TokenIsPausedError, TokenNotPausedError, InvalidTokenClaimPropertyMismatch, InvalidTokenClaimNoCurrentRewards, InvalidTokenClaimWrongClaimant}; +use crate::consensus::state::token::{IdentityDoesNotHaveEnoughTokenBalanceError, IdentityTokenAccountFrozenError, IdentityTokenAccountNotFrozenError, InvalidGroupPositionError, NewAuthorizedActionTakerGroupDoesNotExistError, NewAuthorizedActionTakerIdentityDoesNotExistError, NewAuthorizedActionTakerMainGroupNotSetError, NewTokensDestinationIdentityDoesNotExistError, TokenMintPastMaxSupplyError, TokenSettingMaxSupplyToLessThanCurrentSupplyError, UnauthorizedTokenActionError, IdentityTokenAccountAlreadyFrozenError, TokenAlreadyPausedError, TokenIsPausedError, TokenNotPausedError, InvalidTokenClaimPropertyMismatch, InvalidTokenClaimNoCurrentRewards, InvalidTokenClaimWrongClaimant, PreProgrammedDistributionTimestampInPastError}; use crate::consensus::state::voting::masternode_incorrect_voter_identity_id_error::MasternodeIncorrectVoterIdentityIdError; use crate::consensus::state::voting::masternode_incorrect_voting_address_error::MasternodeIncorrectVotingAddressError; use crate::consensus::state::voting::masternode_not_found_error::MasternodeNotFoundError; @@ -276,6 +276,9 @@ pub enum StateError { #[error(transparent)] TokenNotPausedError(TokenNotPausedError), + + #[error(transparent)] + PreProgrammedDistributionTimestampInPastError(PreProgrammedDistributionTimestampInPastError), } impl From for ConsensusError { diff --git a/packages/rs-dpp/src/errors/consensus/state/token/mod.rs b/packages/rs-dpp/src/errors/consensus/state/token/mod.rs index a7bd5f9dcdd..f6f63edcafa 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/mod.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/mod.rs @@ -10,6 +10,7 @@ mod new_authorized_action_taker_group_does_not_exist_error; mod new_authorized_action_taker_identity_does_not_exist_error; mod new_authorized_action_taker_main_group_not_set_error; mod new_tokens_destination_identity_does_not_exist_error; +mod pre_programmed_distribution_timestamp_in_past_error; mod token_already_paused_error; mod token_is_paused_error; mod token_mint_past_max_supply_error; @@ -29,6 +30,7 @@ pub use new_authorized_action_taker_group_does_not_exist_error::*; pub use new_authorized_action_taker_identity_does_not_exist_error::*; pub use new_authorized_action_taker_main_group_not_set_error::*; pub use new_tokens_destination_identity_does_not_exist_error::*; +pub use pre_programmed_distribution_timestamp_in_past_error::*; pub use token_already_paused_error::*; pub use token_is_paused_error::*; pub use token_mint_past_max_supply_error::*; diff --git a/packages/rs-dpp/src/errors/consensus/state/token/pre_programmed_distribution_timestamp_in_past_error.rs b/packages/rs-dpp/src/errors/consensus/state/token/pre_programmed_distribution_timestamp_in_past_error.rs new file mode 100644 index 00000000000..71b84168018 --- /dev/null +++ b/packages/rs-dpp/src/errors/consensus/state/token/pre_programmed_distribution_timestamp_in_past_error.rs @@ -0,0 +1,50 @@ +use crate::consensus::state::state_error::StateError; +use crate::consensus::ConsensusError; +use crate::identity::TimestampMillis; +use crate::ProtocolError; +use bincode::{Decode, Encode}; +use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize}; +use platform_value::Identifier; +use thiserror::Error; + +#[derive( + Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize, +)] +#[error( + "Pre-programmed token distribution time {pre_programmed_timestamp}ms is in the past for token {token_position} in data contract {data_contract_id}. Current block time is {current_timestamp}.", +)] +#[platform_serialize(unversioned)] +pub struct PreProgrammedDistributionTimestampInPastError { + data_contract_id: Identifier, + token_position: Identifier, + pre_programmed_timestamp: TimestampMillis, + current_timestamp: TimestampMillis, +} + +impl PreProgrammedDistributionTimestampInPastError { + pub fn new( + data_contract_id: Identifier, + token_position: Identifier, + pre_programmed_timestamp: TimestampMillis, + current_timestamp: TimestampMillis, + ) -> Self { + Self { + data_contract_id, + token_position, + pre_programmed_timestamp, + current_timestamp, + } + } + + pub fn token_position(&self) -> &Identifier { + &self.token_position + } +} + +impl From for ConsensusError { + fn from(err: PreProgrammedDistributionTimestampInPastError) -> Self { + Self::StateError(StateError::PreProgrammedDistributionTimestampInPastError( + err, + )) + } +} diff --git a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/data_contract_create/state/v0/mod.rs b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/data_contract_create/state/v0/mod.rs index e22a92ffe12..1cdb276537b 100644 --- a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/data_contract_create/state/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/data_contract_create/state/v0/mod.rs @@ -5,6 +5,10 @@ use dpp::block::block_info::BlockInfo; use dpp::consensus::state::data_contract::data_contract_already_present_error::DataContractAlreadyPresentError; use dpp::consensus::state::state_error::StateError; +use dpp::consensus::state::token::PreProgrammedDistributionTimestampInPastError; +use dpp::data_contract::associated_token::token_configuration::accessors::v0::TokenConfigurationV0Getters; +use dpp::data_contract::associated_token::token_distribution_rules::accessors::v0::TokenDistributionRulesV0Getters; +use dpp::data_contract::associated_token::token_pre_programmed_distribution::methods::v0::TokenPreProgrammedDistributionV0Methods; use dpp::prelude::ConsensusValidationResult; use dpp::state_transition::data_contract_create_transition::accessors::DataContractCreateTransitionAccessorsV0; use dpp::state_transition::data_contract_create_transition::DataContractCreateTransition; @@ -63,6 +67,25 @@ impl DataContractCreateStateTransitionStateValidationV0 for DataContractCreateTr return Ok(action); } + // Validate token distribution rules + for (position, config) in self.data_contract().tokens() { + if let Some(distribution) = config.distribution_rules().pre_programmed_distribution() { + if let Some((timestamp, _)) = distribution.distributions().iter().next() { + if timestamp < &block_info.time_ms { + return Ok(ConsensusValidationResult::new_with_data_and_errors( + StateTransitionAction::BumpIdentityNonceAction( + BumpIdentityNonceAction::from_borrowed_data_contract_create_transition(self), + ), + vec![StateError::PreProgrammedDistributionTimestampInPastError( + PreProgrammedDistributionTimestampInPastError::new(self.data_contract().id(), position, *timestamp, block_info.time_ms), + ) + .into()], + )); + } + } + } + } + let contract_fetch_info = platform.drive.get_contract_with_fetch_info_and_fee( self.data_contract().id().to_buffer(), Some(&block_info.epoch), diff --git a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/data_contract_update/state/v0/mod.rs b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/data_contract_update/state/v0/mod.rs index 10d3e2b1850..31a1a7a6268 100644 --- a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/data_contract_update/state/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/data_contract_update/state/v0/mod.rs @@ -5,16 +5,19 @@ use dpp::block::block_info::BlockInfo; use dpp::consensus::basic::document::DataContractNotPresentError; use dpp::consensus::basic::BasicError; - +use dpp::consensus::state::state_error::StateError; +use dpp::consensus::state::token::PreProgrammedDistributionTimestampInPastError; use dpp::data_contract::accessors::v0::DataContractV0Getters; use dpp::data_contract::accessors::v1::{DataContractV1Getters, DataContractV1Setters}; +use dpp::data_contract::associated_token::token_configuration::accessors::v0::TokenConfigurationV0Getters; +use dpp::data_contract::associated_token::token_distribution_rules::accessors::v0::TokenDistributionRulesV0Getters; use dpp::data_contract::validate_update::DataContractUpdateValidationMethodsV0; use dpp::prelude::ConsensusValidationResult; -use dpp::ProtocolError; - +use dpp::state_transition::data_contract_update_transition::accessors::DataContractUpdateTransitionAccessorsV0; use dpp::state_transition::data_contract_update_transition::DataContractUpdateTransition; use dpp::version::PlatformVersion; +use dpp::ProtocolError; use crate::error::execution::ExecutionError; use crate::execution::validation::state_transition::ValidationMode; @@ -26,6 +29,7 @@ use crate::execution::types::execution_operation::ValidationOperation; use crate::execution::types::state_transition_execution_context::{ StateTransitionExecutionContext, StateTransitionExecutionContextMethodsV0, }; +use drive::state_transition_action::system::bump_identity_nonce_action::BumpIdentityNonceAction; use drive::state_transition_action::StateTransitionAction; pub(in crate::execution::validation::state_transition::state_transitions::data_contract_update) trait DataContractUpdateStateTransitionStateValidationV0 { @@ -69,6 +73,25 @@ impl DataContractUpdateStateTransitionStateValidationV0 for DataContractUpdateTr return Ok(action); } + // Validate token distribution rules + for (position, config) in self.data_contract().tokens() { + if let Some(distribution) = config.distribution_rules().pre_programmed_distribution() { + if let Some((timestamp, _)) = distribution.distributions().iter().next() { + if timestamp < &block_info.time_ms { + return Ok(ConsensusValidationResult::new_with_data_and_errors( + StateTransitionAction::BumpIdentityNonceAction( + BumpIdentityNonceAction::from_borrowed_data_contract_create_transition(self), + ), + vec![StateError::PreProgrammedDistributionTimestampInPastError( + PreProgrammedDistributionTimestampInPastError::new(self.data_contract().id(), position, *timestamp, block_info.time_ms), + ) + .into()], + )); + } + } + } + } + let state_transition_action = action.data.as_mut().ok_or(Error::Execution( ExecutionError::CorruptedCodeExecution( "we should always have an action at this point in data contract update", diff --git a/packages/wasm-dpp/src/errors/consensus/consensus_error.rs b/packages/wasm-dpp/src/errors/consensus/consensus_error.rs index 1a77988f810..aa83ba418b0 100644 --- a/packages/wasm-dpp/src/errors/consensus/consensus_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/consensus_error.rs @@ -384,6 +384,9 @@ pub fn from_state_error(state_error: &StateError) -> JsValue { StateError::InvalidTokenClaimWrongClaimant(e) => { generic_consensus_error!(InvalidTokenClaimWrongClaimant, e).into() } + StateError::PreProgrammedDistributionTimestampInPastError(e) => { + generic_consensus_error!(InvalidTokenClaimWrongClaimant, e).into() + } } } From ec64cac020fb37011e388b2488329dcf3a8fcaeb Mon Sep 17 00:00:00 2001 From: Ivan Shumkov Date: Wed, 19 Mar 2025 16:00:22 +0700 Subject: [PATCH 2/4] fix: invalid error to generate --- packages/wasm-dpp/src/errors/consensus/consensus_error.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/wasm-dpp/src/errors/consensus/consensus_error.rs b/packages/wasm-dpp/src/errors/consensus/consensus_error.rs index 822ffb57a27..81120bbb9ee 100644 --- a/packages/wasm-dpp/src/errors/consensus/consensus_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/consensus_error.rs @@ -388,7 +388,7 @@ pub fn from_state_error(state_error: &StateError) -> JsValue { generic_consensus_error!(TokenTransferRecipientIdentityNotExistError, e).into() } StateError::PreProgrammedDistributionTimestampInPastError(e) => { - generic_consensus_error!(InvalidTokenClaimWrongClaimant, e).into() + generic_consensus_error!(PreProgrammedDistributionTimestampInPastError, e).into() } } } From 1e6fe35b1364a7c37b8d38e8f2fe6fbf320d4cc1 Mon Sep 17 00:00:00 2001 From: Ivan Shumkov Date: Wed, 19 Mar 2025 16:00:33 +0700 Subject: [PATCH 3/4] fix: invalid error to generate --- packages/wasm-dpp/src/errors/consensus/consensus_error.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/wasm-dpp/src/errors/consensus/consensus_error.rs b/packages/wasm-dpp/src/errors/consensus/consensus_error.rs index 81120bbb9ee..90a642897b0 100644 --- a/packages/wasm-dpp/src/errors/consensus/consensus_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/consensus_error.rs @@ -84,7 +84,7 @@ use dpp::consensus::state::identity::no_transfer_key_for_core_withdrawal_availab use dpp::consensus::state::identity::RecipientIdentityDoesNotExistError; use dpp::consensus::state::prefunded_specialized_balances::prefunded_specialized_balance_insufficient_error::PrefundedSpecializedBalanceInsufficientError; use dpp::consensus::state::prefunded_specialized_balances::prefunded_specialized_balance_not_found_error::PrefundedSpecializedBalanceNotFoundError; -use dpp::consensus::state::token::{IdentityDoesNotHaveEnoughTokenBalanceError, IdentityTokenAccountNotFrozenError, IdentityTokenAccountFrozenError, TokenIsPausedError, IdentityTokenAccountAlreadyFrozenError, UnauthorizedTokenActionError, TokenSettingMaxSupplyToLessThanCurrentSupplyError, TokenMintPastMaxSupplyError, NewTokensDestinationIdentityDoesNotExistError, NewAuthorizedActionTakerIdentityDoesNotExistError, NewAuthorizedActionTakerGroupDoesNotExistError, NewAuthorizedActionTakerMainGroupNotSetError, InvalidGroupPositionError, TokenAlreadyPausedError, TokenNotPausedError, InvalidTokenClaimPropertyMismatch, InvalidTokenClaimNoCurrentRewards, InvalidTokenClaimWrongClaimant, TokenTransferRecipientIdentityNotExistError}; +use dpp::consensus::state::token::{IdentityDoesNotHaveEnoughTokenBalanceError, IdentityTokenAccountNotFrozenError, IdentityTokenAccountFrozenError, TokenIsPausedError, IdentityTokenAccountAlreadyFrozenError, UnauthorizedTokenActionError, TokenSettingMaxSupplyToLessThanCurrentSupplyError, TokenMintPastMaxSupplyError, NewTokensDestinationIdentityDoesNotExistError, NewAuthorizedActionTakerIdentityDoesNotExistError, NewAuthorizedActionTakerGroupDoesNotExistError, NewAuthorizedActionTakerMainGroupNotSetError, InvalidGroupPositionError, TokenAlreadyPausedError, TokenNotPausedError, InvalidTokenClaimPropertyMismatch, InvalidTokenClaimNoCurrentRewards, InvalidTokenClaimWrongClaimant, TokenTransferRecipientIdentityNotExistError, PreProgrammedDistributionTimestampInPastError}; use dpp::consensus::state::voting::masternode_incorrect_voter_identity_id_error::MasternodeIncorrectVoterIdentityIdError; use dpp::consensus::state::voting::masternode_incorrect_voting_address_error::MasternodeIncorrectVotingAddressError; use dpp::consensus::state::voting::masternode_not_found_error::MasternodeNotFoundError; From 34775ca53f0ab1efac06ca1130a24eede5a10e72 Mon Sep 17 00:00:00 2001 From: Ivan Shumkov Date: Wed, 19 Mar 2025 16:13:55 +0700 Subject: [PATCH 4/4] fix: various mistakes --- .../token_pre_programmed_distribution/mod.rs | 3 ++- ...re_programmed_distribution_timestamp_in_past_error.rs | 9 +++++---- .../data_contract_create/state/v0/mod.rs | 4 ++-- .../data_contract_update/state/v0/mod.rs | 7 ++++--- .../add_pre_programmed_distribution/v0/mod.rs | 2 +- .../token_claim_transition_action/v0/transformer.rs | 2 +- 6 files changed, 15 insertions(+), 12 deletions(-) diff --git a/packages/rs-dpp/src/data_contract/associated_token/token_pre_programmed_distribution/mod.rs b/packages/rs-dpp/src/data_contract/associated_token/token_pre_programmed_distribution/mod.rs index 2edbf6ac4f0..d12dcd3e4a8 100644 --- a/packages/rs-dpp/src/data_contract/associated_token/token_pre_programmed_distribution/mod.rs +++ b/packages/rs-dpp/src/data_contract/associated_token/token_pre_programmed_distribution/mod.rs @@ -4,7 +4,8 @@ use derive_more::From; use serde::{Deserialize, Serialize}; use std::fmt; -pub mod methods; +pub mod accessors; + pub mod v0; #[derive(Serialize, Deserialize, Encode, Decode, Debug, Clone, PartialEq, Eq, From)] diff --git a/packages/rs-dpp/src/errors/consensus/state/token/pre_programmed_distribution_timestamp_in_past_error.rs b/packages/rs-dpp/src/errors/consensus/state/token/pre_programmed_distribution_timestamp_in_past_error.rs index 71b84168018..9b13ea8df43 100644 --- a/packages/rs-dpp/src/errors/consensus/state/token/pre_programmed_distribution_timestamp_in_past_error.rs +++ b/packages/rs-dpp/src/errors/consensus/state/token/pre_programmed_distribution_timestamp_in_past_error.rs @@ -1,5 +1,6 @@ use crate::consensus::state::state_error::StateError; use crate::consensus::ConsensusError; +use crate::data_contract::TokenContractPosition; use crate::identity::TimestampMillis; use crate::ProtocolError; use bincode::{Decode, Encode}; @@ -16,7 +17,7 @@ use thiserror::Error; #[platform_serialize(unversioned)] pub struct PreProgrammedDistributionTimestampInPastError { data_contract_id: Identifier, - token_position: Identifier, + token_position: TokenContractPosition, pre_programmed_timestamp: TimestampMillis, current_timestamp: TimestampMillis, } @@ -24,7 +25,7 @@ pub struct PreProgrammedDistributionTimestampInPastError { impl PreProgrammedDistributionTimestampInPastError { pub fn new( data_contract_id: Identifier, - token_position: Identifier, + token_position: TokenContractPosition, pre_programmed_timestamp: TimestampMillis, current_timestamp: TimestampMillis, ) -> Self { @@ -36,8 +37,8 @@ impl PreProgrammedDistributionTimestampInPastError { } } - pub fn token_position(&self) -> &Identifier { - &self.token_position + pub fn token_position(&self) -> TokenContractPosition { + self.token_position } } diff --git a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/data_contract_create/state/v0/mod.rs b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/data_contract_create/state/v0/mod.rs index 1cdb276537b..f002fe48f7f 100644 --- a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/data_contract_create/state/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/data_contract_create/state/v0/mod.rs @@ -8,7 +8,7 @@ use dpp::consensus::state::state_error::StateError; use dpp::consensus::state::token::PreProgrammedDistributionTimestampInPastError; use dpp::data_contract::associated_token::token_configuration::accessors::v0::TokenConfigurationV0Getters; use dpp::data_contract::associated_token::token_distribution_rules::accessors::v0::TokenDistributionRulesV0Getters; -use dpp::data_contract::associated_token::token_pre_programmed_distribution::methods::v0::TokenPreProgrammedDistributionV0Methods; +use dpp::data_contract::associated_token::token_pre_programmed_distribution::accessors::v0::TokenPreProgrammedDistributionV0Methods; use dpp::prelude::ConsensusValidationResult; use dpp::state_transition::data_contract_create_transition::accessors::DataContractCreateTransitionAccessorsV0; use dpp::state_transition::data_contract_create_transition::DataContractCreateTransition; @@ -77,7 +77,7 @@ impl DataContractCreateStateTransitionStateValidationV0 for DataContractCreateTr BumpIdentityNonceAction::from_borrowed_data_contract_create_transition(self), ), vec![StateError::PreProgrammedDistributionTimestampInPastError( - PreProgrammedDistributionTimestampInPastError::new(self.data_contract().id(), position, *timestamp, block_info.time_ms), + PreProgrammedDistributionTimestampInPastError::new(self.data_contract().id(), *position, *timestamp, block_info.time_ms), ) .into()], )); diff --git a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/data_contract_update/state/v0/mod.rs b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/data_contract_update/state/v0/mod.rs index 31a1a7a6268..5b82d840181 100644 --- a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/data_contract_update/state/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/data_contract_update/state/v0/mod.rs @@ -11,6 +11,7 @@ use dpp::data_contract::accessors::v0::DataContractV0Getters; use dpp::data_contract::accessors::v1::{DataContractV1Getters, DataContractV1Setters}; use dpp::data_contract::associated_token::token_configuration::accessors::v0::TokenConfigurationV0Getters; use dpp::data_contract::associated_token::token_distribution_rules::accessors::v0::TokenDistributionRulesV0Getters; +use dpp::data_contract::associated_token::token_pre_programmed_distribution::accessors::v0::TokenPreProgrammedDistributionV0Methods; use dpp::data_contract::validate_update::DataContractUpdateValidationMethodsV0; use dpp::prelude::ConsensusValidationResult; @@ -79,11 +80,11 @@ impl DataContractUpdateStateTransitionStateValidationV0 for DataContractUpdateTr if let Some((timestamp, _)) = distribution.distributions().iter().next() { if timestamp < &block_info.time_ms { return Ok(ConsensusValidationResult::new_with_data_and_errors( - StateTransitionAction::BumpIdentityNonceAction( - BumpIdentityNonceAction::from_borrowed_data_contract_create_transition(self), + StateTransitionAction::BumpIdentityDataContractNonceAction( + BumpIdentityDataContractNonceAction::from_borrowed_data_contract_update_transition(self), ), vec![StateError::PreProgrammedDistributionTimestampInPastError( - PreProgrammedDistributionTimestampInPastError::new(self.data_contract().id(), position, *timestamp, block_info.time_ms), + PreProgrammedDistributionTimestampInPastError::new(self.data_contract().id(), *position, *timestamp, block_info.time_ms), ) .into()], )); diff --git a/packages/rs-drive/src/drive/tokens/distribution/add_pre_programmed_distribution/v0/mod.rs b/packages/rs-drive/src/drive/tokens/distribution/add_pre_programmed_distribution/v0/mod.rs index 6a80686e9bc..02851dfa2a3 100644 --- a/packages/rs-drive/src/drive/tokens/distribution/add_pre_programmed_distribution/v0/mod.rs +++ b/packages/rs-drive/src/drive/tokens/distribution/add_pre_programmed_distribution/v0/mod.rs @@ -17,7 +17,7 @@ use dpp::data_contract::associated_token::token_distribution_key::{ TokenDistributionKey, TokenDistributionType, }; use dpp::data_contract::associated_token::token_perpetual_distribution::distribution_recipient::TokenDistributionRecipient; -use dpp::data_contract::associated_token::token_pre_programmed_distribution::methods::v0::TokenPreProgrammedDistributionV0Methods; +use dpp::data_contract::associated_token::token_pre_programmed_distribution::accessors::v0::TokenPreProgrammedDistributionV0Methods; use dpp::data_contract::associated_token::token_pre_programmed_distribution::TokenPreProgrammedDistribution; use dpp::serialization::PlatformSerializable; use dpp::version::PlatformVersion; diff --git a/packages/rs-drive/src/state_transition_action/batch/batched_transition/token_transition/token_claim_transition_action/v0/transformer.rs b/packages/rs-drive/src/state_transition_action/batch/batched_transition/token_transition/token_claim_transition_action/v0/transformer.rs index 3467688a8df..27839e1ef61 100644 --- a/packages/rs-drive/src/state_transition_action/batch/batched_transition/token_transition/token_claim_transition_action/v0/transformer.rs +++ b/packages/rs-drive/src/state_transition_action/batch/batched_transition/token_transition/token_claim_transition_action/v0/transformer.rs @@ -17,7 +17,7 @@ use dpp::data_contract::associated_token::token_perpetual_distribution::distribu use dpp::data_contract::associated_token::token_perpetual_distribution::distribution_recipient::{TokenDistributionRecipient, TokenDistributionResolvedRecipient}; use dpp::data_contract::associated_token::token_perpetual_distribution::methods::v0::{TokenPerpetualDistributionV0Accessors, TokenPerpetualDistributionV0Methods}; use dpp::data_contract::associated_token::token_perpetual_distribution::reward_distribution_moment::RewardDistributionMoment; -use dpp::data_contract::associated_token::token_pre_programmed_distribution::methods::v0::TokenPreProgrammedDistributionV0Methods; +use dpp::data_contract::associated_token::token_pre_programmed_distribution::accessors::v0::TokenPreProgrammedDistributionV0Methods; use dpp::identifier::Identifier; use dpp::state_transition::batch_transition::token_claim_transition::v0::TokenClaimTransitionV0; use dpp::ProtocolError;