From 09531c7bcb1613b71a42f53f8c55cc010514eaa4 Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Mon, 24 Jun 2024 12:01:04 +0300 Subject: [PATCH 01/47] start of work --- packages/rs-dpp/src/fee/default_costs/mod.rs | 85 +++++++------ .../get_epochs_protocol_versions/mod.rs | 46 +++++++ .../get_epochs_protocol_versions/v0/mod.rs | 114 ++++++++++++++++++ .../src/drive/credit_pools/epochs/mod.rs | 1 + .../src/version/drive_versions.rs | 1 + 5 files changed, 211 insertions(+), 36 deletions(-) create mode 100644 packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/mod.rs create mode 100644 packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs diff --git a/packages/rs-dpp/src/fee/default_costs/mod.rs b/packages/rs-dpp/src/fee/default_costs/mod.rs index a91d072f59..3f02c80cbd 100644 --- a/packages/rs-dpp/src/fee/default_costs/mod.rs +++ b/packages/rs-dpp/src/fee/default_costs/mod.rs @@ -34,7 +34,11 @@ use crate::block::epoch::Epoch; use crate::block::epoch::EpochIndex; +use crate::fee::Credits; +use itertools::Itertools; use lazy_static::lazy_static; +use platform_version::version::fee::FeeVersion; +use platform_version::version::PlatformVersion; use std::collections::HashMap; pub mod constants; @@ -73,31 +77,43 @@ pub enum KnownCostItem { VerifySignatureEddsa25519Hash160, } -const EPOCH_COST_UPDATE_VERSIONS: [u16; 1] = [0]; +impl KnownCostItem { + pub fn lookup_cost(&self, fee_version: &FeeVersion) -> Credits { + match self { + KnownCostItem::StorageDiskUsageCreditPerByte => { + fee_version.storage.storage_disk_usage_credit_per_byte + } + KnownCostItem::StorageProcessingCreditPerByte => { + fee_version.storage.storage_processing_credit_per_byte + } + KnownCostItem::StorageLoadCreditPerByte => { + fee_version.storage.storage_load_credit_per_byte + } + KnownCostItem::NonStorageLoadCreditPerByte => { + fee_version.storage.non_storage_load_credit_per_byte + } + KnownCostItem::StorageSeekCost => fee_version.storage.storage_seek_cost, + KnownCostItem::FetchIdentityBalanceProcessingCost => {} + KnownCostItem::FetchSingleIdentityKeyProcessingCost => {} + KnownCostItem::DoubleSHA256 => {} + KnownCostItem::SingleSHA256 => {} + KnownCostItem::VerifySignatureEcdsaSecp256k1 => {} + KnownCostItem::VerifySignatureBLS12_381 => {} + KnownCostItem::VerifySignatureEcdsaHash160 => {} + KnownCostItem::VerifySignatureBip13ScriptHash => {} + KnownCostItem::VerifySignatureEddsa25519Hash160 => {} + } + } + + pub fn lookup_cost_on_epoch(&self, epoch: &Epoch) -> Credits { + let version = epoch.active_fee_version(); + self.lookup_cost(version) + } +} lazy_static! { - static ref EPOCH_COSTS: HashMap> = HashMap::from([( - 0, - HashMap::from([ - (KnownCostItem::StorageDiskUsageCreditPerByte, 27000u64), - (KnownCostItem::StorageProcessingCreditPerByte, 400u64), - (KnownCostItem::StorageLoadCreditPerByte, 400u64), - (KnownCostItem::NonStorageLoadCreditPerByte, 30u64), - (KnownCostItem::StorageSeekCost, 4000u64), - (KnownCostItem::FetchIdentityBalanceProcessingCost, 10000u64), - ( - KnownCostItem::FetchSingleIdentityKeyProcessingCost, - 10000u64 - ), - (KnownCostItem::DoubleSHA256, 800u64), - (KnownCostItem::SingleSHA256, 500u64), - (KnownCostItem::VerifySignatureEcdsaSecp256k1, 3000u64), - (KnownCostItem::VerifySignatureBLS12_381, 6000u64), - (KnownCostItem::VerifySignatureEcdsaHash160, 4000u64), - (KnownCostItem::VerifySignatureBip13ScriptHash, 6000u64), - (KnownCostItem::VerifySignatureEddsa25519Hash160, 3000u64), - ]) - )]); + static ref EPOCH_CHANGE_FEE_VERSION: HashMap = + HashMap::from([(0, &PlatformVersion::first().fee_version)]); } /// Costs for Epochs @@ -105,26 +121,23 @@ pub trait EpochCosts { //todo: should just have a static lookup table /// Get the closest epoch in the past that has a cost table /// This is where the base costs last changed - fn get_closest_epoch_index_cost_update_version(&self) -> EpochIndex; + fn active_fee_version(&self) -> EpochIndex; /// Get the cost for the known cost item - fn cost_for_known_cost_item(&self, cost_item: KnownCostItem) -> u64; + fn cost_for_known_cost_item(&self, cost_item: KnownCostItem) -> Credits; } impl EpochCosts for Epoch { - //todo: should just have a static lookup table - /// Get the closest epoch in the past that has a cost table - /// This is where the base costs last changed - fn get_closest_epoch_index_cost_update_version(&self) -> EpochIndex { - match EPOCH_COST_UPDATE_VERSIONS.binary_search(&self.index) { - Ok(_) => self.index, - Err(pos) => EPOCH_COST_UPDATE_VERSIONS[pos - 1], + /// Get the active fee version for an epoch + fn active_fee_version(&self) -> &'static FeeVersion { + //todo, find previous index in the list + match EPOCH_CHANGE_FEE_VERSION.iter().find_position(&self.index) { + Ok(fee_version) => fee_version, + Err(pos) => EPOCH_CHANGE_FEE_VERSION[pos - 1], } } /// Get the cost for the known cost item - fn cost_for_known_cost_item(&self, cost_item: KnownCostItem) -> u64 { - let epoch = self.get_closest_epoch_index_cost_update_version(); - let specific_epoch_costs = EPOCH_COSTS.get(&epoch).unwrap(); - *specific_epoch_costs.get(&cost_item).unwrap() + fn cost_for_known_cost_item(&self, cost_item: KnownCostItem) -> Credits { + cost_item.lookup_cost_on_epoch(self) } } diff --git a/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/mod.rs b/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/mod.rs new file mode 100644 index 0000000000..2a2fe69be6 --- /dev/null +++ b/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/mod.rs @@ -0,0 +1,46 @@ +mod v0; + +use crate::drive::Drive; +use crate::error::drive::DriveError; +use crate::error::Error; + +use dpp::block::epoch::EpochIndex; +use dpp::block::extended_epoch_info::ExtendedEpochInfo; +use dpp::util::deserializer::ProtocolVersion; +use grovedb::TransactionArg; +use nohash_hasher::IntMap; + +use dpp::version::PlatformVersion; + +impl Drive { + /// Get multiple epoch protocol versions starting at a given epoch index + pub fn get_epochs_protocol_versions( + &self, + start_epoch_index: u16, + count: Option, + ascending: bool, + transaction: TransactionArg, + platform_version: &PlatformVersion, + ) -> Result, Error> { + match platform_version + .drive + .methods + .credit_pools + .epochs + .get_epochs_protocol_versions + { + 0 => self.get_epochs_protocol_versions_v0( + start_epoch_index, + count, + ascending, + transaction, + platform_version, + ), + version => Err(Error::Drive(DriveError::UnknownVersionMismatch { + method: "get_epochs_protocol_versions".to_string(), + known_versions: vec![0], + received: version, + })), + } + } +} diff --git a/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs b/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs new file mode 100644 index 0000000000..bb48fd2459 --- /dev/null +++ b/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs @@ -0,0 +1,114 @@ +use crate::drive::Drive; +use crate::error::drive::DriveError; +use crate::error::Error; +use dpp::block::epoch::{EpochIndex, EPOCH_KEY_OFFSET}; +use dpp::util::deserializer::ProtocolVersion; +use dpp::ProtocolError; +use grovedb::query_result_type::{QueryResultElement, QueryResultType}; +use grovedb::{Element, PathQuery, Query, SizedQuery, TransactionArg}; +use nohash_hasher::IntMap; + +use crate::drive::credit_pools::pools_vec_path; +use crate::error::query::QuerySyntaxError; +use crate::fee_pools::epochs::epoch_key_constants::KEY_PROTOCOL_VERSION; +use crate::query::QueryItem; +use dpp::version::PlatformVersion; + +impl Drive { + pub(super) fn get_epochs_protocol_versions_v0( + &self, + start_epoch_index: u16, + count: Option, + ascending: bool, + transaction: TransactionArg, + platform_version: &PlatformVersion, + ) -> Result, Error> { + if let Some(count) = count { + if count > 16383 { + return Err(Error::Query(QuerySyntaxError::InvalidLimit(format!( + "get_epochs_protocol_versions_v0 count too high {}", + count + )))); + } + } + let index_with_offset = start_epoch_index + .checked_add(EPOCH_KEY_OFFSET) + .ok_or(ProtocolError::Overflow("stored epoch index too high"))?; + let mut query = if ascending { + Query::new_single_query_item(QueryItem::RangeFrom( + index_with_offset.to_be_bytes().to_vec().., + )) + } else { + Query::new_single_query_item(QueryItem::RangeToInclusive( + ..=index_with_offset.to_be_bytes().to_vec(), + )) + }; + query.left_to_right = ascending; + query.set_subquery_path(vec![KEY_PROTOCOL_VERSION.to_vec()]); + let path_query = PathQuery::new( + pools_vec_path(), + // The multiplier must be equal to requested keys count + SizedQuery::new(query, count, None), + ); + + let results = self + .grove_get_path_query( + &path_query, + transaction, + QueryResultType::QueryPathKeyElementTrioResultType, + &mut vec![], + &platform_version.drive, + )? + .0; + + let mut map: IntMap = IntMap::new(); + + for result_item in results.elements.into_iter() { + if let QueryResultElement::PathKeyElementTrioResultItem(( + mut path, + _, + protocol_version_element, + )) = result_item + { + let Some(epoch_index_vec) = path.pop() else { + return Err(Error::Drive(DriveError::CorruptedDriveState( + "path must be bigger than empty".to_string(), + ))); + }; + + let epoch_index_bytes: [u8; 32] = + epoch_index_vec.as_slice().try_into().map_err(|_| { + Error::Drive(DriveError::CorruptedSerialization( + "extended epoch info: item has an invalid length".to_string(), + )) + })?; + let epoch_index = EpochIndex::from_be_bytes(epoch_index_bytes) + .checked_sub(EPOCH_KEY_OFFSET) + .ok_or(Error::Drive(DriveError::CorruptedSerialization( + "epoch bytes on disk too small, should be over epoch key offset" + .to_string(), + )))?; + + let Element::Item(encoded_protocol_version, _) = protocol_version_element else { + return Err(Error::Drive(DriveError::UnexpectedElementType( + "protocol version must be an item", + ))); + }; + + let protocol_version_bytes: [u8; 4] = encoded_protocol_version + .as_slice() + .try_into() + .map_err(|_| { + Error::Drive(DriveError::CorruptedSerialization( + "protocol version must be 4 bytes for a u32".to_string(), + )) + })?; + + let protocol_version = u32::from_be_bytes(protocol_version_bytes); + + map.insert(epoch_index, protocol_version); + } + } + Ok(map) + } +} diff --git a/packages/rs-drive/src/drive/credit_pools/epochs/mod.rs b/packages/rs-drive/src/drive/credit_pools/epochs/mod.rs index d7bcdb6d26..37341a9158 100644 --- a/packages/rs-drive/src/drive/credit_pools/epochs/mod.rs +++ b/packages/rs-drive/src/drive/credit_pools/epochs/mod.rs @@ -38,6 +38,7 @@ use grovedb::TransactionArg; pub mod credit_distribution_pools; mod get_epochs_infos; +mod get_epochs_protocol_versions; pub mod proposers; mod prove_epochs_infos; pub mod start_block; diff --git a/packages/rs-platform-version/src/version/drive_versions.rs b/packages/rs-platform-version/src/version/drive_versions.rs index 94ac237f1b..b8011e6fc1 100644 --- a/packages/rs-platform-version/src/version/drive_versions.rs +++ b/packages/rs-platform-version/src/version/drive_versions.rs @@ -372,6 +372,7 @@ pub struct DriveCreditPoolMethodVersions { #[derive(Clone, Debug, Default)] pub struct DriveCreditPoolEpochsMethodVersions { pub get_epochs_infos: FeatureVersion, + pub get_epochs_protocol_versions: FeatureVersion, pub prove_epochs_infos: FeatureVersion, pub get_epoch_fee_multiplier: FeatureVersion, pub get_epoch_processing_credits_for_distribution: FeatureVersion, From 083323a2770b7eec5c582cb22c2c0fdcf16e372b Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 27 Jun 2024 15:41:59 +0300 Subject: [PATCH 02/47] more work --- packages/rs-dpp/src/fee/default_costs/mod.rs | 75 +++++++++++++------ packages/rs-dpp/src/fee/fee_result/refunds.rs | 5 +- .../upgrade_protocol_version/v0/mod.rs | 2 + .../platform_types/platform_state/v0/mod.rs | 9 ++- .../apply_drive_operations/v0/mod.rs | 2 + packages/rs-drive/src/drive/cache.rs | 5 ++ .../v0/mod.rs | 3 + .../get_fetch/fetch_contract/v0/mod.rs | 8 +- .../get_contract_with_fetch_info/v0/mod.rs | 4 + .../contract/insert/insert_contract/v0/mod.rs | 2 + .../contract/update/update_contract/v0/mod.rs | 2 + .../get_epochs_protocol_versions/v0/mod.rs | 4 +- .../delete_document_for_contract/v0/mod.rs | 2 + .../delete_document_for_contract_id/v0/mod.rs | 2 + .../rs-drive/src/drive/document/delete/mod.rs | 3 + .../document/insert/add_document/v0/mod.rs | 2 + .../add_document_for_contract/v0/mod.rs | 2 + .../rs-drive/src/drive/document/query/mod.rs | 12 +++ .../document/query/query_documents/v0/mod.rs | 2 + .../update_document_for_contract/v0/mod.rs | 2 + .../update_document_for_contract_id/v0/mod.rs | 2 + .../v0/mod.rs | 2 + .../src/drive/fee/calculate_fee/mod.rs | 7 +- .../src/drive/fee/calculate_fee/v0/mod.rs | 7 +- .../fetch_identity_contract_nonce/v0/mod.rs | 2 + .../balance/fetch_identity_balance/v0/mod.rs | 2 + .../v0/mod.rs | 2 + .../fetch_full_identity/v0/mod.rs | 2 + .../nonce/fetch_identity_nonce/v0/mod.rs | 2 + .../v0/mod.rs | 9 ++- .../fetch_identity_with_balance/v0/mod.rs | 3 +- .../fetch_identity_revision/v0/mod.rs | 2 + .../insert/add_new_identity/v0/mod.rs | 2 + .../src/drive/identity/key/fetch/mod.rs | 10 ++- .../v0/mod.rs | 2 + .../add_new_unique_keys_to_identity/v0/mod.rs | 2 + .../methods/add_to_identity_balance/v0/mod.rs | 2 + .../methods/disable_identity_keys/v0/mod.rs | 2 + .../methods/merge_identity_nonce/v0/mod.rs | 2 + .../remove_from_identity_balance/v0/mod.rs | 2 + .../update_identity_revision/v0/mod.rs | 2 + packages/rs-drive/src/drive/open/mod.rs | 22 ++++++ packages/rs-drive/src/fee/op.rs | 27 ++++--- packages/rs-drive/src/query/mod.rs | 6 ++ .../rs-platform-version/src/version/v1.rs | 1 + 45 files changed, 220 insertions(+), 52 deletions(-) diff --git a/packages/rs-dpp/src/fee/default_costs/mod.rs b/packages/rs-dpp/src/fee/default_costs/mod.rs index 3f02c80cbd..72cb4ee2ef 100644 --- a/packages/rs-dpp/src/fee/default_costs/mod.rs +++ b/packages/rs-dpp/src/fee/default_costs/mod.rs @@ -39,7 +39,7 @@ use itertools::Itertools; use lazy_static::lazy_static; use platform_version::version::fee::FeeVersion; use platform_version::version::PlatformVersion; -use std::collections::HashMap; +use std::collections::BTreeMap; pub mod constants; @@ -92,28 +92,51 @@ impl KnownCostItem { KnownCostItem::NonStorageLoadCreditPerByte => { fee_version.storage.non_storage_load_credit_per_byte } - KnownCostItem::StorageSeekCost => fee_version.storage.storage_seek_cost, - KnownCostItem::FetchIdentityBalanceProcessingCost => {} - KnownCostItem::FetchSingleIdentityKeyProcessingCost => {} - KnownCostItem::DoubleSHA256 => {} - KnownCostItem::SingleSHA256 => {} - KnownCostItem::VerifySignatureEcdsaSecp256k1 => {} - KnownCostItem::VerifySignatureBLS12_381 => {} - KnownCostItem::VerifySignatureEcdsaHash160 => {} - KnownCostItem::VerifySignatureBip13ScriptHash => {} - KnownCostItem::VerifySignatureEddsa25519Hash160 => {} + KnownCostItem::StorageSeekCost => { + fee_version.storage.storage_seek_cost + }, + KnownCostItem::FetchIdentityBalanceProcessingCost => { + fee_version.processing.fetch_identity_balance_processing_cost + } + KnownCostItem::FetchSingleIdentityKeyProcessingCost => { + fee_version.processing.fetch_single_identity_key_processing_cost + } + KnownCostItem::DoubleSHA256 => { + //TODO: double_sha256_base or double_sha256_per_block? + fee_version.hashing.double_sha256_base + } + KnownCostItem::SingleSHA256 => { + //TODO: single_sha256_base or single_sha256_per_block? + fee_version.hashing.single_sha256_base + } + KnownCostItem::VerifySignatureEcdsaSecp256k1 => { + fee_version.signature.verify_signature_ecdsa_secp256k1 + } + KnownCostItem::VerifySignatureBLS12_381 => { + fee_version.signature.verify_signature_bls12_381 + } + KnownCostItem::VerifySignatureEcdsaHash160 => { + fee_version.signature.verify_signature_ecdsa_hash160 + } + KnownCostItem::VerifySignatureBip13ScriptHash => { + fee_version.signature.verify_signature_bip13_script_hash + } + KnownCostItem::VerifySignatureEddsa25519Hash160 => { + fee_version.signature.verify_signature_eddsa25519_hash160 + } } } - pub fn lookup_cost_on_epoch(&self, epoch: &Epoch) -> Credits { - let version = epoch.active_fee_version(); + pub fn lookup_cost_on_epoch(&self, epoch: &Epoch, cached_fee_version: &BTreeMap) -> Credits { + let version = epoch.active_fee_version(cached_fee_version); self.lookup_cost(version) } } lazy_static! { - static ref EPOCH_CHANGE_FEE_VERSION: HashMap = - HashMap::from([(0, &PlatformVersion::first().fee_version)]); + static ref EPOCH_CHANGE_FEE_VERSION: BTreeMap = BTreeMap::from([ + (0, &PlatformVersion::first().fee_version) + ]); } /// Costs for Epochs @@ -121,23 +144,27 @@ pub trait EpochCosts { //todo: should just have a static lookup table /// Get the closest epoch in the past that has a cost table /// This is where the base costs last changed - fn active_fee_version(&self) -> EpochIndex; + fn active_fee_version(&self, cached_fee_version: &BTreeMap) -> &'static FeeVersion; /// Get the cost for the known cost item - fn cost_for_known_cost_item(&self, cost_item: KnownCostItem) -> Credits; + //fn cost_for_known_cost_item(&self, cost_item: KnownCostItem) -> Credits; + fn cost_for_known_cost_item(&self, cached_fee_version: &BTreeMap, cost_item: KnownCostItem) -> Credits; } impl EpochCosts for Epoch { /// Get the active fee version for an epoch - fn active_fee_version(&self) -> &'static FeeVersion { - //todo, find previous index in the list - match EPOCH_CHANGE_FEE_VERSION.iter().find_position(&self.index) { - Ok(fee_version) => fee_version, - Err(pos) => EPOCH_CHANGE_FEE_VERSION[pos - 1], - } + fn active_fee_version(&self, cached_fee_version: &BTreeMap) -> &'static FeeVersion { + EPOCH_CHANGE_FEE_VERSION.range(..=self.index).next_back() + .map(|(_, &fee_version)| fee_version) + .unwrap_or_else(|| &PlatformVersion::first().fee_version) } + /// Get the cost for the known cost item - fn cost_for_known_cost_item(&self, cost_item: KnownCostItem) -> Credits { + + /*fn cost_for_known_cost_item(&self, cost_item: KnownCostItem) -> Credits { cost_item.lookup_cost_on_epoch(self) + }*/ + fn cost_for_known_cost_item(&self, cached_fee_version: &BTreeMap, cost_item: KnownCostItem) -> Credits { + cost_item.lookup_cost_on_epoch(self, cached_fee_version) } } diff --git a/packages/rs-dpp/src/fee/fee_result/refunds.rs b/packages/rs-dpp/src/fee/fee_result/refunds.rs index 8e7ad0bad6..b0b9bb7f63 100644 --- a/packages/rs-dpp/src/fee/fee_result/refunds.rs +++ b/packages/rs-dpp/src/fee/fee_result/refunds.rs @@ -16,6 +16,7 @@ use platform_value::Identifier; use serde::{Deserialize, Serialize}; use std::collections::btree_map::Iter; use std::collections::BTreeMap; +use platform_version::version::fee::FeeVersion; /// There are additional work and storage required to process refunds /// To protect system from the spam and unnecessary work @@ -38,6 +39,7 @@ impl FeeRefunds { storage_removal: I, current_epoch_index: EpochIndex, epochs_per_era: u16, + cached_fee_version: &BTreeMap ) -> Result where I: IntoIterator, @@ -56,7 +58,7 @@ impl FeeRefunds { // TODO We should use multipliers let credits: Credits = (bytes as Credits) - .checked_mul(Epoch::new(current_epoch_index)?.cost_for_known_cost_item(StorageDiskUsageCreditPerByte)) + .checked_mul(Epoch::new(current_epoch_index)?.cost_for_known_cost_item(cached_fee_version, StorageDiskUsageCreditPerByte)) .ok_or(ProtocolError::Overflow("storage written bytes cost overflow"))?; let (amount, _) = calculate_storage_fee_refund_amount_and_leftovers( @@ -194,6 +196,7 @@ mod tests { let storage_removal = BytesPerEpochByIdentifier::from_iter([(identity_id, bytes_per_epoch)]); + // Not accessible but this is unit test so should be ok let fee_refunds = FeeRefunds::from_storage_removal(storage_removal, 3, 20) .expect("should create fee refunds"); diff --git a/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs index 46b793e4ff..aafba77c5e 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs @@ -37,6 +37,8 @@ impl Platform { .protocol_version; let current_block_protocol_version = platform_version.protocol_version; + // here + // Protocol version can be changed only on epoch change if epoch_info.is_epoch_change_but_not_genesis() { if current_block_protocol_version == previous_block_protocol_version { diff --git a/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs b/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs index 2c22025628..6eacce1641 100644 --- a/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs +++ b/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs @@ -2,7 +2,7 @@ use crate::error::execution::ExecutionError; use crate::error::Error; use dashcore_rpc::dashcore::{ProTxHash, QuorumHash}; use dashcore_rpc::dashcore_rpc_json::MasternodeListItem; -use dpp::block::epoch::{Epoch, EPOCH_0}; +use dpp::block::epoch::{Epoch, EPOCH_0, EpochIndex}; use dpp::block::extended_block_info::ExtendedBlockInfo; use dpp::bincode::{Decode, Encode}; @@ -58,6 +58,9 @@ pub struct PlatformStateV0 { /// current HPMN masternode list pub hpmn_masternode_list: BTreeMap, + + /// Epoch change fee versions + pub epoch_change_fee_versions: BTreeMap, } impl Debug for PlatformStateV0 { @@ -223,6 +226,8 @@ impl From for PlatformStateV0 { .into_iter() .map(|(k, v)| (ProTxHash::from_byte_array(k.to_buffer()), v.into())) .collect(), + // TODO: Check if we need to store in PlatformStateForSavingV0? + epoch_change_fee_versions: BTreeMap::new(), } } } @@ -254,6 +259,8 @@ impl PlatformStateV0 { full_masternode_list: Default::default(), hpmn_masternode_list: Default::default(), genesis_block_info: None, + // TODO: Check if we need to store in PlatformStateForSavingV0? + epoch_change_fee_versions: BTreeMap::default(), }; Ok(state) diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs index bceb686403..6aeba428c1 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs @@ -85,12 +85,14 @@ impl Drive { task.execute(self, platform_version); } + let cached_fee_versions = self.cache.cached_fee_version.read(); Drive::calculate_fee( None, Some(cost_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions ) } } diff --git a/packages/rs-drive/src/drive/cache.rs b/packages/rs-drive/src/drive/cache.rs index 936869cf04..651d78da1e 100644 --- a/packages/rs-drive/src/drive/cache.rs +++ b/packages/rs-drive/src/drive/cache.rs @@ -1,3 +1,4 @@ +use std::collections::BTreeMap; use dpp::identity::TimestampMillis; mod data_contract; @@ -5,6 +6,8 @@ mod protocol_version; mod system_contracts; pub use data_contract::DataContractCache; +use dpp::block::epoch::EpochIndex; +use platform_version::version::fee::FeeVersion; pub use protocol_version::ProtocolVersionsCache; pub use system_contracts::SystemDataContracts; @@ -20,4 +23,6 @@ pub struct DriveCache { pub protocol_versions_counter: parking_lot::RwLock, /// Versioned system data contracts pub system_data_contracts: SystemDataContracts, + /// Cached Epoch changed FeeVersion + pub cached_fee_version: parking_lot::RwLock>, } diff --git a/packages/rs-drive/src/drive/contract/apply/apply_contract_with_serialization/v0/mod.rs b/packages/rs-drive/src/drive/contract/apply/apply_contract_with_serialization/v0/mod.rs index 1b1c360608..8870b5ff7e 100644 --- a/packages/rs-drive/src/drive/contract/apply/apply_contract_with_serialization/v0/mod.rs +++ b/packages/rs-drive/src/drive/contract/apply/apply_contract_with_serialization/v0/mod.rs @@ -61,12 +61,15 @@ impl Drive { &platform_version.drive, )?; cost_operations.push(CalculatedCostOperation(fetch_cost)); + + let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(cost_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/contract/get_fetch/fetch_contract/v0/mod.rs b/packages/rs-drive/src/drive/contract/get_fetch/fetch_contract/v0/mod.rs index b238534842..4bbca6a25c 100644 --- a/packages/rs-drive/src/drive/contract/get_fetch/fetch_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/contract/get_fetch/fetch_contract/v0/mod.rs @@ -84,6 +84,7 @@ impl Drive { .map_err(Error::Protocol) ); let drive_operation = CalculatedCostOperation(cost.clone()); + let cached_fee_versions = self.cache.cached_fee_version.read(); let fee = if let Some(epoch) = epoch { Some(cost_return_on_error_no_add!( &cost, @@ -92,7 +93,8 @@ impl Drive { Some(vec![drive_operation]), epoch, self.config.epochs_per_era, - platform_version + platform_version, + &cached_fee_versions ) )) } else { @@ -138,6 +140,7 @@ impl Drive { .map_err(Error::Protocol) ); let drive_operation = CalculatedCostOperation(cost.clone()); + let cached_fee_versions = self.cache.cached_fee_version.read(); let fee = if let Some(epoch) = epoch { Some(cost_return_on_error_no_add!( &cost, @@ -146,7 +149,8 @@ impl Drive { Some(vec![drive_operation]), epoch, self.config.epochs_per_era, - platform_version + platform_version, + &cached_fee_versions ) )) } else { diff --git a/packages/rs-drive/src/drive/contract/get_fetch/get_contract_with_fetch_info/v0/mod.rs b/packages/rs-drive/src/drive/contract/get_fetch/get_contract_with_fetch_info/v0/mod.rs index 11440501e0..df51b5279d 100644 --- a/packages/rs-drive/src/drive/contract/get_fetch/get_contract_with_fetch_info/v0/mod.rs +++ b/packages/rs-drive/src/drive/contract/get_fetch/get_contract_with_fetch_info/v0/mod.rs @@ -93,6 +93,7 @@ impl Drive { &mut drive_operations, platform_version, )?; + let cached_fee_versions = self.cache.cached_fee_version.read(); let fee_result = epoch.map_or(Ok(None), |epoch| { Drive::calculate_fee( None, @@ -100,6 +101,7 @@ impl Drive { epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions ) .map(Some) })?; @@ -148,6 +150,7 @@ impl Drive { known_fee.clone() } else { // we need to calculate new fee + let cached_fee_versions = self.cache.cached_fee_version.read(); let op = vec![CalculatedCostOperation(contract_fetch_info.cost.clone())]; let fee = Drive::calculate_fee( None, @@ -155,6 +158,7 @@ impl Drive { epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; let updated_contract_fetch_info = Arc::new(DataContractFetchInfo { diff --git a/packages/rs-drive/src/drive/contract/insert/insert_contract/v0/mod.rs b/packages/rs-drive/src/drive/contract/insert/insert_contract/v0/mod.rs index 2d7bc1f9c3..2dfc0708dc 100644 --- a/packages/rs-drive/src/drive/contract/insert/insert_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/contract/insert/insert_contract/v0/mod.rs @@ -70,12 +70,14 @@ impl Drive { platform_version, )?; + let cached_fee_versions = self.cache.cached_fee_version.read(); Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions ) } diff --git a/packages/rs-drive/src/drive/contract/update/update_contract/v0/mod.rs b/packages/rs-drive/src/drive/contract/update/update_contract/v0/mod.rs index 00990e0715..2800757fa2 100644 --- a/packages/rs-drive/src/drive/contract/update/update_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/contract/update/update_contract/v0/mod.rs @@ -126,12 +126,14 @@ impl Drive { .data_contracts .insert(updated_contract_fetch_info, transaction.is_some()); + let cached_fee_versions = self.cache.cached_fee_version.read(); Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions ) } diff --git a/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs b/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs index bb48fd2459..367b8e36bf 100644 --- a/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs +++ b/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs @@ -61,7 +61,7 @@ impl Drive { )? .0; - let mut map: IntMap = IntMap::new(); + let mut map: IntMap = IntMap::default(); for result_item in results.elements.into_iter() { if let QueryResultElement::PathKeyElementTrioResultItem(( @@ -82,7 +82,7 @@ impl Drive { "extended epoch info: item has an invalid length".to_string(), )) })?; - let epoch_index = EpochIndex::from_be_bytes(epoch_index_bytes) + let epoch_index = EpochIndex::from_be_bytes([epoch_index_bytes[0], epoch_index_bytes[1]]) .checked_sub(EPOCH_KEY_OFFSET) .ok_or(Error::Drive(DriveError::CorruptedSerialization( "epoch bytes on disk too small, should be over epoch key offset" diff --git a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/v0/mod.rs b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/v0/mod.rs index a9f3180a43..56a08034da 100644 --- a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/v0/mod.rs @@ -39,12 +39,14 @@ impl Drive { &mut drive_operations, platform_version, )?; + let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/v0/mod.rs b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/v0/mod.rs index e7439154c8..601ed47010 100644 --- a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/v0/mod.rs @@ -61,12 +61,14 @@ impl Drive { platform_version, )?; + let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; Ok(fees) diff --git a/packages/rs-drive/src/drive/document/delete/mod.rs b/packages/rs-drive/src/drive/document/delete/mod.rs index 89c007e59f..59d461d847 100644 --- a/packages/rs-drive/src/drive/document/delete/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/mod.rs @@ -803,6 +803,7 @@ mod tests { ) .expect("expected to insert a document successfully"); + // drive.cache let added_bytes = fee_result.storage_fee / Epoch::new(0) .unwrap() @@ -838,6 +839,7 @@ mod tests { .unwrap(); assert_eq!(*removed_credits, 41881536); + // drive.cache let refund_equivalent_bytes = removed_credits.to_unsigned() / Epoch::new(0) .unwrap() @@ -899,6 +901,7 @@ mod tests { ) .expect("expected to insert a document successfully"); + // drive.cache let added_bytes = fee_result.storage_fee / Epoch::new(0) .unwrap() diff --git a/packages/rs-drive/src/drive/document/insert/add_document/v0/mod.rs b/packages/rs-drive/src/drive/document/insert/add_document/v0/mod.rs index 703c0bd710..f200ba8436 100644 --- a/packages/rs-drive/src/drive/document/insert/add_document/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/insert/add_document/v0/mod.rs @@ -58,12 +58,14 @@ impl Drive { &mut drive_operations, platform_version, )?; + let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/document/insert/add_document_for_contract/v0/mod.rs b/packages/rs-drive/src/drive/document/insert/add_document_for_contract/v0/mod.rs index 8039295db6..37e17cd0b5 100644 --- a/packages/rs-drive/src/drive/document/insert/add_document_for_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/insert/add_document_for_contract/v0/mod.rs @@ -32,12 +32,14 @@ impl Drive { &mut drive_operations, platform_version, )?; + let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/document/query/mod.rs b/packages/rs-drive/src/drive/document/query/mod.rs index 136092c5d6..16bf83ab58 100644 --- a/packages/rs-drive/src/drive/document/query/mod.rs +++ b/packages/rs-drive/src/drive/document/query/mod.rs @@ -160,12 +160,14 @@ impl Drive { protocol_version, )?; let cost = if let Some(block_info) = block_info { + let cached_fee_versions = self.cache.cached_fee_version.read(); let fee_result = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; fee_result.processing_fee } else { @@ -213,12 +215,14 @@ impl Drive { protocol_version, )?; let cost = if let Some(block_info) = block_info { + let cached_fee_versions = self.cache.cached_fee_version.read(); let fee_result = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; fee_result.processing_fee } else { @@ -251,12 +255,14 @@ impl Drive { protocol_version, )?; let cost = if let Some(block_info) = block_info { + let cached_fee_versions = self.cache.cached_fee_version.read(); let fee_result = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; fee_result.processing_fee } else { @@ -307,12 +313,14 @@ impl Drive { protocol_version, )?; let cost = if let Some(block_info) = block_info { + let cached_fee_versions = self.cache.cached_fee_version.read(); let fee_result = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; fee_result.processing_fee } else { @@ -365,12 +373,14 @@ impl Drive { protocol_version, )?; let cost = if let Some(block_info) = block_info { + let cached_fee_versions = self.cache.cached_fee_version.read(); let fee_result = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; fee_result.processing_fee } else { @@ -454,12 +464,14 @@ impl Drive { platform_version, )?; let cost = if let Some(epoch) = epoch { + let cached_fee_versions = self.cache.cached_fee_version.read(); let fee_result = Drive::calculate_fee( None, Some(drive_operations), epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; fee_result.processing_fee } else { diff --git a/packages/rs-drive/src/drive/document/query/query_documents/v0/mod.rs b/packages/rs-drive/src/drive/document/query/query_documents/v0/mod.rs index 03494ae8c4..689b1436a5 100644 --- a/packages/rs-drive/src/drive/document/query/query_documents/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/query/query_documents/v0/mod.rs @@ -103,12 +103,14 @@ impl Drive { }) .collect::, ProtocolError>>()?; let cost = if let Some(epoch) = epoch { + let cached_fee_versions = self.cache.cached_fee_version.read(); let fee_result = Drive::calculate_fee( None, Some(drive_operations), epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; fee_result.processing_fee } else { diff --git a/packages/rs-drive/src/drive/document/update/update_document_for_contract/v0/mod.rs b/packages/rs-drive/src/drive/document/update/update_document_for_contract/v0/mod.rs index 3b4fc7562a..85e64acfc6 100644 --- a/packages/rs-drive/src/drive/document/update/update_document_for_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/update/update_document_for_contract/v0/mod.rs @@ -54,12 +54,14 @@ impl Drive { &mut drive_operations, platform_version, )?; + let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/v0/mod.rs b/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/v0/mod.rs index ec10219dc2..c9bafe4eb9 100644 --- a/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/v0/mod.rs @@ -75,12 +75,14 @@ impl Drive { platform_version, )?; + let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; Ok(fees) diff --git a/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/v0/mod.rs b/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/v0/mod.rs index 18f02688a3..3740d2fc70 100644 --- a/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/v0/mod.rs @@ -59,12 +59,14 @@ impl Drive { &mut drive_operations, platform_version, )?; + let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs b/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs index e0a41ceee8..a4ddba381f 100644 --- a/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs +++ b/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs @@ -1,11 +1,13 @@ +use std::collections::BTreeMap; use crate::drive::Drive; use crate::error::drive::DriveError; use crate::error::Error; use crate::fee::op::{BaseOp, LowLevelDriveOperation}; -use dpp::block::epoch::Epoch; +use dpp::block::epoch::{Epoch, EpochIndex}; use dpp::fee::fee_result::FeeResult; use dpp::version::PlatformVersion; use enum_map::EnumMap; +use platform_version::version::fee::FeeVersion; mod v0; @@ -35,9 +37,10 @@ impl Drive { epoch: &Epoch, epochs_per_era: u16, platform_version: &PlatformVersion, + cached_fee_version: &BTreeMap, ) -> Result { match platform_version.drive.methods.fees.calculate_fee { - 0 => Self::calculate_fee_v0(base_operations, drive_operations, epoch, epochs_per_era), + 0 => Self::calculate_fee_v0(base_operations, drive_operations, epoch, epochs_per_era, cached_fee_version), version => Err(Error::Drive(DriveError::UnknownVersionMismatch { method: "Drive::calculate_fee".to_string(), known_versions: vec![0], diff --git a/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs b/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs index 94e0b8edca..b2aa4b67a9 100644 --- a/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs +++ b/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs @@ -1,11 +1,13 @@ +use std::collections::BTreeMap; use crate::drive::Drive; use crate::error::fee::FeeError; use crate::error::Error; use crate::fee::op::{BaseOp, LowLevelDriveOperation}; -use dpp::block::epoch::Epoch; +use dpp::block::epoch::{Epoch, EpochIndex}; use dpp::fee::fee_result::FeeResult; use enum_map::EnumMap; +use platform_version::version::fee::FeeVersion; impl Drive { /// Calculates fees for the given operations. Returns the storage and processing costs. @@ -15,6 +17,7 @@ impl Drive { drive_operations: Option>, epoch: &Epoch, epochs_per_era: u16, + cached_fee_version: &BTreeMap ) -> Result { let mut aggregate_fee_result = FeeResult::default(); if let Some(base_operations) = base_operations { @@ -32,7 +35,7 @@ impl Drive { if let Some(drive_operations) = drive_operations { // println!("{:#?}", drive_operations); for drive_fee_result in - LowLevelDriveOperation::consume_to_fees(drive_operations, epoch, epochs_per_era)? + LowLevelDriveOperation::consume_to_fees(drive_operations, epoch, epochs_per_era, cached_fee_version)? { aggregate_fee_result.checked_add_assign(drive_fee_result)?; } diff --git a/packages/rs-drive/src/drive/identity/contract_info/identity_contract_nonce/fetch_identity_contract_nonce/v0/mod.rs b/packages/rs-drive/src/drive/identity/contract_info/identity_contract_nonce/fetch_identity_contract_nonce/v0/mod.rs index a1e0ca636a..a38ecfbc5a 100644 --- a/packages/rs-drive/src/drive/identity/contract_info/identity_contract_nonce/fetch_identity_contract_nonce/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/contract_info/identity_contract_nonce/fetch_identity_contract_nonce/v0/mod.rs @@ -106,12 +106,14 @@ impl Drive { &mut drive_operations, platform_version, )?; + let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; Ok((value, fees)) } diff --git a/packages/rs-drive/src/drive/identity/fetch/balance/fetch_identity_balance/v0/mod.rs b/packages/rs-drive/src/drive/identity/fetch/balance/fetch_identity_balance/v0/mod.rs index 0ce12abf78..3328f83cef 100644 --- a/packages/rs-drive/src/drive/identity/fetch/balance/fetch_identity_balance/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/fetch/balance/fetch_identity_balance/v0/mod.rs @@ -51,12 +51,14 @@ impl Drive { &mut drive_operations, platform_version, )?; + let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; Ok((value, fees)) } diff --git a/packages/rs-drive/src/drive/identity/fetch/balance/fetch_identity_balance_include_debt/v0/mod.rs b/packages/rs-drive/src/drive/identity/fetch/balance/fetch_identity_balance_include_debt/v0/mod.rs index 34bb3a9ae4..e4a7f2bdee 100644 --- a/packages/rs-drive/src/drive/identity/fetch/balance/fetch_identity_balance_include_debt/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/fetch/balance/fetch_identity_balance_include_debt/v0/mod.rs @@ -48,12 +48,14 @@ impl Drive { &mut drive_operations, platform_version, )?; + let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; Ok((value, fees)) } diff --git a/packages/rs-drive/src/drive/identity/fetch/full_identity/fetch_full_identity/v0/mod.rs b/packages/rs-drive/src/drive/identity/fetch/full_identity/fetch_full_identity/v0/mod.rs index be13b98efd..904b80abf4 100644 --- a/packages/rs-drive/src/drive/identity/fetch/full_identity/fetch_full_identity/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/fetch/full_identity/fetch_full_identity/v0/mod.rs @@ -27,12 +27,14 @@ impl Drive { &mut drive_operations, platform_version, )?; + let cached_fee_versions = self.cache.cached_fee_version.read(); let fee = Drive::calculate_fee( None, Some(drive_operations), epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; Ok((maybe_identity, fee)) } diff --git a/packages/rs-drive/src/drive/identity/fetch/nonce/fetch_identity_nonce/v0/mod.rs b/packages/rs-drive/src/drive/identity/fetch/nonce/fetch_identity_nonce/v0/mod.rs index 79f32b45ea..0afdd14e8d 100644 --- a/packages/rs-drive/src/drive/identity/fetch/nonce/fetch_identity_nonce/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/fetch/nonce/fetch_identity_nonce/v0/mod.rs @@ -100,12 +100,14 @@ impl Drive { &mut drive_operations, platform_version, )?; + let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; Ok((value, fees)) } diff --git a/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_balance_with_keys/v0/mod.rs b/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_balance_with_keys/v0/mod.rs index 5524071534..1e57150300 100644 --- a/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_balance_with_keys/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_balance_with_keys/v0/mod.rs @@ -78,9 +78,11 @@ impl Drive { transaction: TransactionArg, platform_version: &PlatformVersion, ) -> Result<(Option, FeeResult), Error> { - let balance_cost = epoch.cost_for_known_cost_item(FetchIdentityBalanceProcessingCost); + let read_guard = self.cache.cached_fee_version.read(); + let balance_cost = epoch.cost_for_known_cost_item(&read_guard, FetchIdentityBalanceProcessingCost); if !apply { - let keys_cost = identity_key_request.processing_cost(epoch)?; + let read_guard = self.cache.cached_fee_version.read(); + let keys_cost = identity_key_request.processing_cost(epoch, &read_guard)?; return Ok(( None, FeeResult::new_from_processing_fee(balance_cost + keys_cost), @@ -97,7 +99,8 @@ impl Drive { return Ok((None, FeeResult::new_from_processing_fee(balance_cost))); }; - let keys_cost = identity_key_request.processing_cost(epoch)?; + let read_guard = self.cache.cached_fee_version.read(); + let keys_cost = identity_key_request.processing_cost(epoch, &read_guard)?; let loaded_public_keys = self.fetch_identity_keys::( identity_key_request, diff --git a/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_with_balance/v0/mod.rs b/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_with_balance/v0/mod.rs index f7d87d2ba1..12e030fe17 100644 --- a/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_with_balance/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_with_balance/v0/mod.rs @@ -50,7 +50,8 @@ impl Drive { transaction: TransactionArg, platform_version: &PlatformVersion, ) -> Result<(Option, FeeResult), Error> { - let balance_cost = epoch.cost_for_known_cost_item(FetchIdentityBalanceProcessingCost); + let read_guard = self.cache.cached_fee_version.read(); + let balance_cost = epoch.cost_for_known_cost_item(&read_guard, FetchIdentityBalanceProcessingCost); if !apply { return Ok((None, FeeResult::new_from_processing_fee(balance_cost))); } diff --git a/packages/rs-drive/src/drive/identity/fetch/revision/fetch_identity_revision/v0/mod.rs b/packages/rs-drive/src/drive/identity/fetch/revision/fetch_identity_revision/v0/mod.rs index c8d354b3c6..4cadda09d3 100644 --- a/packages/rs-drive/src/drive/identity/fetch/revision/fetch_identity_revision/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/fetch/revision/fetch_identity_revision/v0/mod.rs @@ -100,12 +100,14 @@ impl Drive { &mut drive_operations, platform_version, )?; + let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; Ok((value, fees)) } diff --git a/packages/rs-drive/src/drive/identity/insert/add_new_identity/v0/mod.rs b/packages/rs-drive/src/drive/identity/insert/add_new_identity/v0/mod.rs index 217039ad48..7598988897 100644 --- a/packages/rs-drive/src/drive/identity/insert/add_new_identity/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/insert/add_new_identity/v0/mod.rs @@ -45,12 +45,14 @@ impl Drive { &mut drive_operations, platform_version, )?; + let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/identity/key/fetch/mod.rs b/packages/rs-drive/src/drive/identity/key/fetch/mod.rs index f8c9772650..9053218710 100644 --- a/packages/rs-drive/src/drive/identity/key/fetch/mod.rs +++ b/packages/rs-drive/src/drive/identity/key/fetch/mod.rs @@ -48,6 +48,8 @@ use { Element::Item, }, }; +use dpp::block::epoch::EpochIndex; +use platform_version::version::fee::FeeVersion; // Modules conditionally compiled for the feature "server" #[cfg(feature = "server")] @@ -653,18 +655,20 @@ pub struct IdentityKeysRequest { impl IdentityKeysRequest { #[cfg(feature = "server")] /// Gets the processing cost of an identity keys request - pub fn processing_cost(&self, epoch: &Epoch) -> Result { + pub fn processing_cost(&self, epoch: &Epoch, cached_fee_version: &BTreeMap) -> Result { + // Good match &self.request_type { AllKeys => Err(Error::Fee(FeeError::OperationNotAllowed( "You can not get costs for requesting all keys", ))), SpecificKeys(keys) => Ok(keys.len() as u64 - * epoch.cost_for_known_cost_item(FetchSingleIdentityKeyProcessingCost)), + * epoch.cost_for_known_cost_item(cached_fee_version, FetchSingleIdentityKeyProcessingCost)), SearchKey(_search) => todo!(), ContractBoundKey(_, _, key_kind) | ContractDocumentTypeBoundKey(_, _, _, key_kind) => { match key_kind { CurrentKeyOfKindRequest => { - Ok(epoch.cost_for_known_cost_item(FetchSingleIdentityKeyProcessingCost)) + // not acceissble + Ok(epoch.cost_for_known_cost_item(cached_fee_version, FetchSingleIdentityKeyProcessingCost)) } AllKeysOfKindRequest => Err(Error::Fee(FeeError::OperationNotAllowed( "You can not get costs for an all keys of kind request", diff --git a/packages/rs-drive/src/drive/identity/update/methods/add_new_non_unique_keys_to_identity/v0/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/add_new_non_unique_keys_to_identity/v0/mod.rs index 12c3c5922f..8af40cbbc5 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/add_new_non_unique_keys_to_identity/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/add_new_non_unique_keys_to_identity/v0/mod.rs @@ -45,12 +45,14 @@ impl Drive { &mut drive_operations, &platform_version.drive, )?; + let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/identity/update/methods/add_new_unique_keys_to_identity/v0/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/add_new_unique_keys_to_identity/v0/mod.rs index 76251a5d54..43d27b1f46 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/add_new_unique_keys_to_identity/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/add_new_unique_keys_to_identity/v0/mod.rs @@ -45,12 +45,14 @@ impl Drive { &mut drive_operations, &platform_version.drive, )?; + let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/identity/update/methods/add_to_identity_balance/v0/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/add_to_identity_balance/v0/mod.rs index e655606a07..9a9cc2c52f 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/add_to_identity_balance/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/add_to_identity_balance/v0/mod.rs @@ -47,12 +47,14 @@ impl Drive { &platform_version.drive, )?; + let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; Ok(fees) diff --git a/packages/rs-drive/src/drive/identity/update/methods/disable_identity_keys/v0/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/disable_identity_keys/v0/mod.rs index 63c70f3362..cc0ea9b104 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/disable_identity_keys/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/disable_identity_keys/v0/mod.rs @@ -59,12 +59,14 @@ impl Drive { &platform_version.drive, )?; + let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; Ok(fees) diff --git a/packages/rs-drive/src/drive/identity/update/methods/merge_identity_nonce/v0/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/merge_identity_nonce/v0/mod.rs index c5073ac634..d1596f788c 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/merge_identity_nonce/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/merge_identity_nonce/v0/mod.rs @@ -58,12 +58,14 @@ impl Drive { &platform_version.drive, )?; + let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; Some(fees) diff --git a/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/v0/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/v0/mod.rs index 0c9286db79..50f48553be 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/v0/mod.rs @@ -47,12 +47,14 @@ impl Drive { &platform_version.drive, )?; + let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/v0/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/v0/mod.rs index 58a55021f7..90e89b507e 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/v0/mod.rs @@ -53,12 +53,14 @@ impl Drive { &platform_version.drive, )?; + let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, + &cached_fee_versions )?; Ok(fees) diff --git a/packages/rs-drive/src/drive/open/mod.rs b/packages/rs-drive/src/drive/open/mod.rs index 8dca4f3fc0..7e62547b8f 100644 --- a/packages/rs-drive/src/drive/open/mod.rs +++ b/packages/rs-drive/src/drive/open/mod.rs @@ -1,3 +1,4 @@ +use std::collections::BTreeMap; use crate::drive::cache::SystemDataContracts; use crate::drive::cache::{DataContractCache, DriveCache, ProtocolVersionsCache}; use crate::drive::config::DriveConfig; @@ -9,6 +10,8 @@ use dpp::util::deserializer::ProtocolVersion; use grovedb::GroveDb; use platform_version::version::PlatformVersion; use std::path::Path; +use platform_version::error::PlatformVersionError; +use crate::error::drive::DriveError; impl Drive { /// Opens GroveDB database @@ -58,9 +61,28 @@ impl Drive { system_data_contracts: SystemDataContracts::load_genesis_system_contracts( platform_version, )?, + // TODO: Populate this from groveDB + cached_fee_version: parking_lot::RwLock::new(BTreeMap::new()), }, }; + { + let res_map = drive.get_epochs_protocol_versions(0, None, true, None, platform_version)?; + let mut write_guard = drive.cache.cached_fee_version.write(); + + for (epoch_index, protocol_version) in res_map.iter() { + let platform_version = PlatformVersion::get(*protocol_version) + .map_err(|e| Error::Drive(DriveError::CorruptedCacheState(format!( + "no platform version {e}" + ))))?; + write_guard.insert(*epoch_index, platform_version.fee_version.clone()); + } + } + + { + let read_guard = drive.cache.cached_fee_version.read(); + } + Ok((drive, protocol_version)) } } diff --git a/packages/rs-drive/src/fee/op.rs b/packages/rs-drive/src/fee/op.rs index 527c55e9f9..854e816046 100644 --- a/packages/rs-drive/src/fee/op.rs +++ b/packages/rs-drive/src/fee/op.rs @@ -1,3 +1,4 @@ +use std::collections::BTreeMap; use crate::drive::batch::GroveDbOpBatch; use grovedb_costs::storage_cost::removal::Identifier; use grovedb_costs::storage_cost::removal::StorageRemovedBytes::{ @@ -20,7 +21,7 @@ use crate::error::Error; use crate::fee::op::LowLevelDriveOperation::{ CalculatedCostOperation, FunctionOperation, GroveOperation, PreCalculatedFeeResult, }; -use dpp::block::epoch::Epoch; +use dpp::block::epoch::{Epoch, EpochIndex}; use dpp::fee::default_costs::EpochCosts; use dpp::fee::default_costs::KnownCostItem::{ StorageDiskUsageCreditPerByte, StorageLoadCreditPerByte, StorageProcessingCreditPerByte, @@ -28,6 +29,7 @@ use dpp::fee::default_costs::KnownCostItem::{ }; use dpp::fee::fee_result::refunds::FeeRefunds; use dpp::fee::fee_result::FeeResult; +use platform_version::version::fee::FeeVersion; /// Base ops #[derive(Debug, Enum)] @@ -203,6 +205,7 @@ impl LowLevelDriveOperation { drive_operation: Vec, epoch: &Epoch, epochs_per_era: u16, + cached_fee_version: &BTreeMap ) -> Result, Error> { drive_operation .into_iter() @@ -214,8 +217,8 @@ impl LowLevelDriveOperation { }), _ => { let cost = operation.operation_cost()?; - let storage_fee = cost.storage_cost(epoch)?; - let processing_fee = cost.ephemeral_cost(epoch)?; + let storage_fee = cost.storage_cost(epoch, cached_fee_version)?; + let processing_fee = cost.ephemeral_cost(epoch, cached_fee_version)?; let (fee_refunds, removed_bytes_from_system) = match cost.storage_cost.removed_bytes { NoStorageRemoval => (FeeRefunds::default(), 0), @@ -233,6 +236,7 @@ impl LowLevelDriveOperation { removal_per_epoch_by_identifier, epoch.index, epochs_per_era, + cached_fee_version )?, system_amount, ) @@ -405,14 +409,14 @@ impl LowLevelDriveOperation { /// Drive cost trait pub trait DriveCost { /// Ephemeral cost - fn ephemeral_cost(&self, epoch: &Epoch) -> Result; + fn ephemeral_cost(&self, epoch: &Epoch, cached_fee_version: &BTreeMap) -> Result; /// Storage cost - fn storage_cost(&self, epoch: &Epoch) -> Result; + fn storage_cost(&self, epoch: &Epoch, cached_fee_version: &BTreeMap) -> Result; } impl DriveCost for OperationCost { /// Return the ephemeral cost from the operation - fn ephemeral_cost(&self, epoch: &Epoch) -> Result { + fn ephemeral_cost(&self, epoch: &Epoch, cached_fee_version: &BTreeMap) -> Result { //todo: deal with epochs let OperationCost { seek_count, @@ -421,9 +425,9 @@ impl DriveCost for OperationCost { hash_node_calls, } = self; let epoch_cost_for_processing_credit_per_byte = - epoch.cost_for_known_cost_item(StorageProcessingCreditPerByte); + epoch.cost_for_known_cost_item(cached_fee_version, StorageProcessingCreditPerByte); let seek_cost = (*seek_count as u64) - .checked_mul(epoch.cost_for_known_cost_item(StorageSeekCost)) + .checked_mul(epoch.cost_for_known_cost_item(cached_fee_version, StorageSeekCost)) .ok_or_else(|| get_overflow_error("seek cost overflow"))?; let storage_added_bytes_ephemeral_cost = (storage_cost.added_bytes as u64) .checked_mul(epoch_cost_for_processing_credit_per_byte) @@ -435,8 +439,9 @@ impl DriveCost for OperationCost { (storage_cost.removed_bytes.total_removed_bytes() as u64) .checked_mul(epoch_cost_for_processing_credit_per_byte) .ok_or_else(|| get_overflow_error("storage written bytes cost overflow"))?; + // not accessible let storage_loaded_bytes_cost = (*storage_loaded_bytes as u64) - .checked_mul(epoch.cost_for_known_cost_item(StorageLoadCreditPerByte)) + .checked_mul(epoch.cost_for_known_cost_item(cached_fee_version, StorageLoadCreditPerByte)) .ok_or_else(|| get_overflow_error("storage loaded cost overflow"))?; // this can't overflow let hash_node_cost = @@ -451,11 +456,11 @@ impl DriveCost for OperationCost { } /// Return the storage cost from the operation - fn storage_cost(&self, epoch: &Epoch) -> Result { + fn storage_cost(&self, epoch: &Epoch, cached_fee_version: &BTreeMap) -> Result { //todo: deal with epochs let OperationCost { storage_cost, .. } = self; (storage_cost.added_bytes as u64) - .checked_mul(epoch.cost_for_known_cost_item(StorageDiskUsageCreditPerByte)) + .checked_mul(epoch.cost_for_known_cost_item(cached_fee_version, StorageDiskUsageCreditPerByte)) .ok_or_else(|| get_overflow_error("storage written bytes cost overflow")) } } diff --git a/packages/rs-drive/src/query/mod.rs b/packages/rs-drive/src/query/mod.rs index 2f6db41c17..cef215dc0a 100644 --- a/packages/rs-drive/src/query/mod.rs +++ b/packages/rs-drive/src/query/mod.rs @@ -1613,12 +1613,14 @@ impl<'a> DriveQuery<'a> { platform_version, )?; let cost = if let Some(block_info) = block_info { + let cached_fee_versions = drive.cache.cached_fee_version.read(); let fee_result = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, drive.config.epochs_per_era, platform_version, + &cached_fee_versions )?; fee_result.processing_fee } else { @@ -1669,12 +1671,14 @@ impl<'a> DriveQuery<'a> { platform_version, )?; let cost = if let Some(block_info) = block_info { + let cached_fee_versions = drive.cache.cached_fee_version.read(); let fee_result = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, drive.config.epochs_per_era, platform_version, + &cached_fee_versions )?; fee_result.processing_fee } else { @@ -1727,12 +1731,14 @@ impl<'a> DriveQuery<'a> { platform_version, )?; let cost = if let Some(block_info) = block_info { + let cached_fee_versions = drive.cache.cached_fee_version.read(); let fee_result = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, drive.config.epochs_per_era, platform_version, + &cached_fee_versions )?; fee_result.processing_fee } else { diff --git a/packages/rs-platform-version/src/version/v1.rs b/packages/rs-platform-version/src/version/v1.rs index a539e8bc29..1ff1cb07b6 100644 --- a/packages/rs-platform-version/src/version/v1.rs +++ b/packages/rs-platform-version/src/version/v1.rs @@ -109,6 +109,7 @@ pub const PLATFORM_V1: PlatformVersion = PlatformVersion { credit_pools: DriveCreditPoolMethodVersions { epochs: DriveCreditPoolEpochsMethodVersions { get_epochs_infos: 0, + get_epochs_protocol_versions: 0, prove_epochs_infos: 0, get_epoch_fee_multiplier: 0, get_epoch_processing_credits_for_distribution: 0, From 11957fc5f2e022d368fc211fb44320e93f7bb042 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 27 Jun 2024 15:45:25 +0300 Subject: [PATCH 03/47] made cached_fee_version static ref --- packages/rs-dpp/src/fee/default_costs/mod.rs | 10 +++++----- packages/rs-dpp/src/fee/fee_result/refunds.rs | 2 +- packages/rs-drive/src/drive/cache.rs | 2 +- packages/rs-drive/src/drive/fee/calculate_fee/mod.rs | 2 +- .../rs-drive/src/drive/fee/calculate_fee/v0/mod.rs | 2 +- packages/rs-drive/src/drive/identity/key/fetch/mod.rs | 2 +- packages/rs-drive/src/drive/open/mod.rs | 2 +- packages/rs-drive/src/fee/op.rs | 10 +++++----- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/rs-dpp/src/fee/default_costs/mod.rs b/packages/rs-dpp/src/fee/default_costs/mod.rs index 72cb4ee2ef..55c30bef1a 100644 --- a/packages/rs-dpp/src/fee/default_costs/mod.rs +++ b/packages/rs-dpp/src/fee/default_costs/mod.rs @@ -127,7 +127,7 @@ impl KnownCostItem { } } - pub fn lookup_cost_on_epoch(&self, epoch: &Epoch, cached_fee_version: &BTreeMap) -> Credits { + pub fn lookup_cost_on_epoch(&self, epoch: &Epoch, cached_fee_version: &BTreeMap) -> Credits { let version = epoch.active_fee_version(cached_fee_version); self.lookup_cost(version) } @@ -144,15 +144,15 @@ pub trait EpochCosts { //todo: should just have a static lookup table /// Get the closest epoch in the past that has a cost table /// This is where the base costs last changed - fn active_fee_version(&self, cached_fee_version: &BTreeMap) -> &'static FeeVersion; + fn active_fee_version(&self, cached_fee_version: &BTreeMap) -> &'static FeeVersion; /// Get the cost for the known cost item //fn cost_for_known_cost_item(&self, cost_item: KnownCostItem) -> Credits; - fn cost_for_known_cost_item(&self, cached_fee_version: &BTreeMap, cost_item: KnownCostItem) -> Credits; + fn cost_for_known_cost_item(&self, cached_fee_version: &BTreeMap, cost_item: KnownCostItem) -> Credits; } impl EpochCosts for Epoch { /// Get the active fee version for an epoch - fn active_fee_version(&self, cached_fee_version: &BTreeMap) -> &'static FeeVersion { + fn active_fee_version(&self, cached_fee_version: &BTreeMap) -> &'static FeeVersion { EPOCH_CHANGE_FEE_VERSION.range(..=self.index).next_back() .map(|(_, &fee_version)| fee_version) .unwrap_or_else(|| &PlatformVersion::first().fee_version) @@ -164,7 +164,7 @@ impl EpochCosts for Epoch { /*fn cost_for_known_cost_item(&self, cost_item: KnownCostItem) -> Credits { cost_item.lookup_cost_on_epoch(self) }*/ - fn cost_for_known_cost_item(&self, cached_fee_version: &BTreeMap, cost_item: KnownCostItem) -> Credits { + fn cost_for_known_cost_item(&self, cached_fee_version: &BTreeMap, cost_item: KnownCostItem) -> Credits { cost_item.lookup_cost_on_epoch(self, cached_fee_version) } } diff --git a/packages/rs-dpp/src/fee/fee_result/refunds.rs b/packages/rs-dpp/src/fee/fee_result/refunds.rs index b0b9bb7f63..b0dcfc41d9 100644 --- a/packages/rs-dpp/src/fee/fee_result/refunds.rs +++ b/packages/rs-dpp/src/fee/fee_result/refunds.rs @@ -39,7 +39,7 @@ impl FeeRefunds { storage_removal: I, current_epoch_index: EpochIndex, epochs_per_era: u16, - cached_fee_version: &BTreeMap + cached_fee_version: &BTreeMap ) -> Result where I: IntoIterator, diff --git a/packages/rs-drive/src/drive/cache.rs b/packages/rs-drive/src/drive/cache.rs index 651d78da1e..f4b0d5e297 100644 --- a/packages/rs-drive/src/drive/cache.rs +++ b/packages/rs-drive/src/drive/cache.rs @@ -24,5 +24,5 @@ pub struct DriveCache { /// Versioned system data contracts pub system_data_contracts: SystemDataContracts, /// Cached Epoch changed FeeVersion - pub cached_fee_version: parking_lot::RwLock>, + pub cached_fee_version: parking_lot::RwLock>, } diff --git a/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs b/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs index a4ddba381f..5cd1204da4 100644 --- a/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs +++ b/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs @@ -37,7 +37,7 @@ impl Drive { epoch: &Epoch, epochs_per_era: u16, platform_version: &PlatformVersion, - cached_fee_version: &BTreeMap, + cached_fee_version: &BTreeMap, ) -> Result { match platform_version.drive.methods.fees.calculate_fee { 0 => Self::calculate_fee_v0(base_operations, drive_operations, epoch, epochs_per_era, cached_fee_version), diff --git a/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs b/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs index b2aa4b67a9..009514d764 100644 --- a/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs +++ b/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs @@ -17,7 +17,7 @@ impl Drive { drive_operations: Option>, epoch: &Epoch, epochs_per_era: u16, - cached_fee_version: &BTreeMap + cached_fee_version: &BTreeMap ) -> Result { let mut aggregate_fee_result = FeeResult::default(); if let Some(base_operations) = base_operations { diff --git a/packages/rs-drive/src/drive/identity/key/fetch/mod.rs b/packages/rs-drive/src/drive/identity/key/fetch/mod.rs index 9053218710..bb6cf3e2fb 100644 --- a/packages/rs-drive/src/drive/identity/key/fetch/mod.rs +++ b/packages/rs-drive/src/drive/identity/key/fetch/mod.rs @@ -655,7 +655,7 @@ pub struct IdentityKeysRequest { impl IdentityKeysRequest { #[cfg(feature = "server")] /// Gets the processing cost of an identity keys request - pub fn processing_cost(&self, epoch: &Epoch, cached_fee_version: &BTreeMap) -> Result { + pub fn processing_cost(&self, epoch: &Epoch, cached_fee_version: &BTreeMap) -> Result { // Good match &self.request_type { AllKeys => Err(Error::Fee(FeeError::OperationNotAllowed( diff --git a/packages/rs-drive/src/drive/open/mod.rs b/packages/rs-drive/src/drive/open/mod.rs index 7e62547b8f..e606d126f7 100644 --- a/packages/rs-drive/src/drive/open/mod.rs +++ b/packages/rs-drive/src/drive/open/mod.rs @@ -75,7 +75,7 @@ impl Drive { .map_err(|e| Error::Drive(DriveError::CorruptedCacheState(format!( "no platform version {e}" ))))?; - write_guard.insert(*epoch_index, platform_version.fee_version.clone()); + write_guard.insert(*epoch_index, &platform_version.fee_version); } } diff --git a/packages/rs-drive/src/fee/op.rs b/packages/rs-drive/src/fee/op.rs index 854e816046..5da2ca50b4 100644 --- a/packages/rs-drive/src/fee/op.rs +++ b/packages/rs-drive/src/fee/op.rs @@ -205,7 +205,7 @@ impl LowLevelDriveOperation { drive_operation: Vec, epoch: &Epoch, epochs_per_era: u16, - cached_fee_version: &BTreeMap + cached_fee_version: &BTreeMap ) -> Result, Error> { drive_operation .into_iter() @@ -409,14 +409,14 @@ impl LowLevelDriveOperation { /// Drive cost trait pub trait DriveCost { /// Ephemeral cost - fn ephemeral_cost(&self, epoch: &Epoch, cached_fee_version: &BTreeMap) -> Result; + fn ephemeral_cost(&self, epoch: &Epoch, cached_fee_version: &BTreeMap) -> Result; /// Storage cost - fn storage_cost(&self, epoch: &Epoch, cached_fee_version: &BTreeMap) -> Result; + fn storage_cost(&self, epoch: &Epoch, cached_fee_version: &BTreeMap) -> Result; } impl DriveCost for OperationCost { /// Return the ephemeral cost from the operation - fn ephemeral_cost(&self, epoch: &Epoch, cached_fee_version: &BTreeMap) -> Result { + fn ephemeral_cost(&self, epoch: &Epoch, cached_fee_version: &BTreeMap) -> Result { //todo: deal with epochs let OperationCost { seek_count, @@ -456,7 +456,7 @@ impl DriveCost for OperationCost { } /// Return the storage cost from the operation - fn storage_cost(&self, epoch: &Epoch, cached_fee_version: &BTreeMap) -> Result { + fn storage_cost(&self, epoch: &Epoch, cached_fee_version: &BTreeMap) -> Result { //todo: deal with epochs let OperationCost { storage_cost, .. } = self; (storage_cost.added_bytes as u64) From 2e4e8b1673b52c664ac04105b8dac0a31b6a3ab2 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 27 Jun 2024 17:24:51 +0300 Subject: [PATCH 04/47] more work --- Cargo.lock | 1 + packages/rs-dpp/src/fee/default_costs/mod.rs | 17 ++------- packages/rs-dpp/src/fee/fee_result/refunds.rs | 10 +++++- packages/rs-drive/Cargo.toml | 1 + .../rs-drive/src/drive/document/delete/mod.rs | 19 ++++++++-- .../rs-drive/src/drive/document/insert/mod.rs | 20 ++++++++--- .../rs-drive/src/drive/document/update/mod.rs | 35 +++++++++++++------ packages/rs-drive/src/drive/open/mod.rs | 33 +++++++++-------- .../src/version/mocks/v2_test.rs | 1 + .../src/version/mocks/v3_test.rs | 1 + 10 files changed, 89 insertions(+), 49 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f5e046b964..70957f8444 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1619,6 +1619,7 @@ dependencies = [ "integer-encoding", "intmap", "itertools 0.11.0", + "lazy_static", "moka", "nohash-hasher", "parking_lot", diff --git a/packages/rs-dpp/src/fee/default_costs/mod.rs b/packages/rs-dpp/src/fee/default_costs/mod.rs index 55c30bef1a..334850fee2 100644 --- a/packages/rs-dpp/src/fee/default_costs/mod.rs +++ b/packages/rs-dpp/src/fee/default_costs/mod.rs @@ -36,7 +36,6 @@ use crate::block::epoch::Epoch; use crate::block::epoch::EpochIndex; use crate::fee::Credits; use itertools::Itertools; -use lazy_static::lazy_static; use platform_version::version::fee::FeeVersion; use platform_version::version::PlatformVersion; use std::collections::BTreeMap; @@ -133,37 +132,25 @@ impl KnownCostItem { } } -lazy_static! { - static ref EPOCH_CHANGE_FEE_VERSION: BTreeMap = BTreeMap::from([ - (0, &PlatformVersion::first().fee_version) - ]); -} - /// Costs for Epochs pub trait EpochCosts { - //todo: should just have a static lookup table /// Get the closest epoch in the past that has a cost table /// This is where the base costs last changed fn active_fee_version(&self, cached_fee_version: &BTreeMap) -> &'static FeeVersion; /// Get the cost for the known cost item - //fn cost_for_known_cost_item(&self, cost_item: KnownCostItem) -> Credits; fn cost_for_known_cost_item(&self, cached_fee_version: &BTreeMap, cost_item: KnownCostItem) -> Credits; } impl EpochCosts for Epoch { /// Get the active fee version for an epoch fn active_fee_version(&self, cached_fee_version: &BTreeMap) -> &'static FeeVersion { - EPOCH_CHANGE_FEE_VERSION.range(..=self.index).next_back() + // TODO: Test this + cached_fee_version.range(..=self.index).next_back() .map(|(_, &fee_version)| fee_version) .unwrap_or_else(|| &PlatformVersion::first().fee_version) } - /// Get the cost for the known cost item - - /*fn cost_for_known_cost_item(&self, cost_item: KnownCostItem) -> Credits { - cost_item.lookup_cost_on_epoch(self) - }*/ fn cost_for_known_cost_item(&self, cached_fee_version: &BTreeMap, cost_item: KnownCostItem) -> Credits { cost_item.lookup_cost_on_epoch(self, cached_fee_version) } diff --git a/packages/rs-dpp/src/fee/fee_result/refunds.rs b/packages/rs-dpp/src/fee/fee_result/refunds.rs index b0dcfc41d9..0df7828416 100644 --- a/packages/rs-dpp/src/fee/fee_result/refunds.rs +++ b/packages/rs-dpp/src/fee/fee_result/refunds.rs @@ -16,7 +16,9 @@ use platform_value::Identifier; use serde::{Deserialize, Serialize}; use std::collections::btree_map::Iter; use std::collections::BTreeMap; +use lazy_static::lazy_static; use platform_version::version::fee::FeeVersion; +use platform_version::version::PlatformVersion; /// There are additional work and storage required to process refunds /// To protect system from the spam and unnecessary work @@ -170,6 +172,12 @@ impl FeeRefunds { } } +lazy_static! { + static ref EPOCH_CHANGE_FEE_VERSION_TEST: BTreeMap = BTreeMap::from([ + (0, &PlatformVersion::first().fee_version) + ]); +} + impl IntoIterator for FeeRefunds { type Item = ([u8; 32], CreditsPerEpoch); type IntoIter = std::collections::btree_map::IntoIter<[u8; 32], CreditsPerEpoch>; @@ -197,7 +205,7 @@ mod tests { BytesPerEpochByIdentifier::from_iter([(identity_id, bytes_per_epoch)]); // Not accessible but this is unit test so should be ok - let fee_refunds = FeeRefunds::from_storage_removal(storage_removal, 3, 20) + let fee_refunds = FeeRefunds::from_storage_removal(storage_removal, 3, 20, &EPOCH_CHANGE_FEE_VERSION_TEST) .expect("should create fee refunds"); let credits_per_epoch = fee_refunds.get(&identity_id).expect("should exists"); diff --git a/packages/rs-drive/Cargo.toml b/packages/rs-drive/Cargo.toml index 013d70f832..39bf007c30 100644 --- a/packages/rs-drive/Cargo.toml +++ b/packages/rs-drive/Cargo.toml @@ -49,6 +49,7 @@ grovedb = { git = "https://github.com/dashpay/grovedb", rev = "d9292aa20bd8f3bda grovedb-costs = { git = "https://github.com/dashpay/grovedb", rev = "d9292aa20bd8f3bda7c5d25d62db06ac341b0677", optional = true } grovedb-path = { git = "https://github.com/dashpay/grovedb", rev = "d9292aa20bd8f3bda7c5d25d62db06ac341b0677" } grovedb-storage = { git = "https://github.com/dashpay/grovedb", rev = "d9292aa20bd8f3bda7c5d25d62db06ac341b0677", optional = true } +lazy_static = "1.4.0" [dev-dependencies] criterion = "0.3.5" diff --git a/packages/rs-drive/src/drive/document/delete/mod.rs b/packages/rs-drive/src/drive/document/delete/mod.rs index 59d461d847..d569c193dd 100644 --- a/packages/rs-drive/src/drive/document/delete/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/mod.rs @@ -3,6 +3,12 @@ //! This module implements functions in Drive for deleting documents. //! +use std::collections::BTreeMap; +use lazy_static::lazy_static; +use dpp::block::epoch::EpochIndex; +use platform_version::version::fee::FeeVersion; +use platform_version::version::PlatformVersion; + // Module: delete_document_for_contract // This module contains functionality for deleting a document associated with a given contract mod delete_document_for_contract; @@ -45,6 +51,12 @@ mod delete_document_for_contract_operations; mod internal; +lazy_static! { + static ref EPOCH_CHANGE_FEE_VERSION_TEST: BTreeMap = BTreeMap::from([ + (0, &PlatformVersion::first().fee_version) + ]); +} + #[cfg(feature = "server")] #[cfg(test)] mod tests { @@ -75,6 +87,7 @@ mod tests { use crate::tests::helpers::setup::setup_drive_with_initial_state_structure; use dpp::version::PlatformVersion; + use crate::drive::document::delete::EPOCH_CHANGE_FEE_VERSION_TEST; #[test] fn test_add_and_remove_family_one_document_no_transaction() { @@ -807,7 +820,7 @@ mod tests { let added_bytes = fee_result.storage_fee / Epoch::new(0) .unwrap() - .cost_for_known_cost_item(StorageDiskUsageCreditPerByte); + .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); // We added 1559 bytes assert_eq!(added_bytes, 1559); @@ -843,7 +856,7 @@ mod tests { let refund_equivalent_bytes = removed_credits.to_unsigned() / Epoch::new(0) .unwrap() - .cost_for_known_cost_item(StorageDiskUsageCreditPerByte); + .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); assert!(added_bytes > refund_equivalent_bytes); assert_eq!(refund_equivalent_bytes, 1551); // we refunded 1551 instead of 1559 @@ -905,7 +918,7 @@ mod tests { let added_bytes = fee_result.storage_fee / Epoch::new(0) .unwrap() - .cost_for_known_cost_item(StorageDiskUsageCreditPerByte); + .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); // We added 1558 bytes assert_eq!(added_bytes, 1559); diff --git a/packages/rs-drive/src/drive/document/insert/mod.rs b/packages/rs-drive/src/drive/document/insert/mod.rs index 03e8979c84..57aec06dc5 100644 --- a/packages/rs-drive/src/drive/document/insert/mod.rs +++ b/packages/rs-drive/src/drive/document/insert/mod.rs @@ -64,11 +64,22 @@ mod add_indices_for_top_index_level_for_contract_operations; // This module contains functionality for adding a reference for an index level for contract operations mod add_reference_for_index_level_for_contract_operations; +use std::collections::BTreeMap; +use lazy_static::lazy_static; +use dpp::block::epoch::EpochIndex; #[cfg(all( feature = "fixtures-and-mocks", feature = "data-contract-cbor-conversion" ))] use dpp::data_contract::conversion::cbor::DataContractCborConversionMethodsV0; +use platform_version::version::fee::FeeVersion; +use platform_version::version::PlatformVersion; + +lazy_static! { + static ref EPOCH_CHANGE_FEE_VERSION_TEST: BTreeMap = BTreeMap::from([ + (0, &PlatformVersion::first().fee_version) + ]); +} #[cfg(test)] mod tests { @@ -97,6 +108,7 @@ mod tests { use dpp::tests::fixtures::get_dpns_data_contract_fixture; use dpp::tests::json_document::json_document_to_document; use dpp::version::PlatformVersion; + use crate::drive::document::insert::EPOCH_CHANGE_FEE_VERSION_TEST; #[test] fn test_add_dashpay_documents_no_transaction() { @@ -331,7 +343,7 @@ mod tests { storage_fee: 3058 * Epoch::new(0) .unwrap() - .cost_for_known_cost_item(StorageDiskUsageCreditPerByte), + .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte), processing_fee: 2317270, ..Default::default() } @@ -394,7 +406,7 @@ mod tests { storage_fee: 1305 * Epoch::new(0) .unwrap() - .cost_for_known_cost_item(StorageDiskUsageCreditPerByte), + .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte), processing_fee: 1482010, ..Default::default() } @@ -459,7 +471,7 @@ mod tests { let added_bytes = storage_fee / Epoch::new(0) .unwrap() - .cost_for_known_cost_item(StorageDiskUsageCreditPerByte); + .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); assert_eq!(1305, added_bytes); assert_eq!(142936800, processing_fee); } @@ -686,7 +698,7 @@ mod tests { storage_fee: 1761 * Epoch::new(0) .unwrap() - .cost_for_known_cost_item(StorageDiskUsageCreditPerByte), + .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte), processing_fee: 2069390, ..Default::default() } diff --git a/packages/rs-drive/src/drive/document/update/mod.rs b/packages/rs-drive/src/drive/document/update/mod.rs index 74b4681b63..a80cd3e6a5 100644 --- a/packages/rs-drive/src/drive/document/update/mod.rs +++ b/packages/rs-drive/src/drive/document/update/mod.rs @@ -32,6 +32,12 @@ //! This modules implements functions in Drive relevant to updating Documents. //! +use std::collections::BTreeMap; +use lazy_static::lazy_static; +use dpp::block::epoch::EpochIndex; +use platform_version::version::fee::FeeVersion; +use platform_version::version::PlatformVersion; + // Module: add_update_multiple_documents_operations // This module contains functionality for adding operations to update multiple documents #[cfg(feature = "server")] @@ -52,6 +58,12 @@ mod update_document_for_contract_id; mod internal; mod update_document_with_serialization_for_contract; +lazy_static! { + static ref EPOCH_CHANGE_FEE_VERSION_TEST: BTreeMap = BTreeMap::from([ + (0, &PlatformVersion::first().fee_version) + ]); +} + #[cfg(test)] mod tests { use grovedb::TransactionArg; @@ -95,6 +107,7 @@ mod tests { use dpp::platform_value; use dpp::tests::json_document::json_document_to_document; use platform_version::version::PlatformVersion; + use crate::drive::document::update::EPOCH_CHANGE_FEE_VERSION_TEST; #[test] fn test_create_and_update_document_same_transaction() { @@ -919,7 +932,7 @@ mod tests { let original_bytes = original_fees.storage_fee / Epoch::new(0) .unwrap() - .cost_for_known_cost_item(StorageDiskUsageCreditPerByte); + .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); let expected_added_bytes = if using_history { //Explanation for 1237 @@ -1086,7 +1099,7 @@ mod tests { let refund_equivalent_bytes = removed_credits.to_unsigned() / Epoch::new(0) .unwrap() - .cost_for_known_cost_item(StorageDiskUsageCreditPerByte); + .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); assert!(expected_added_bytes > refund_equivalent_bytes); assert_eq!(refund_equivalent_bytes, 960); // we refunded 960 instead of 963 @@ -1105,7 +1118,7 @@ mod tests { let original_bytes = original_fees.storage_fee / Epoch::new(0) .unwrap() - .cost_for_known_cost_item(StorageDiskUsageCreditPerByte); + .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); assert_eq!(original_bytes, expected_added_bytes); } @@ -1125,7 +1138,7 @@ mod tests { let added_bytes = update_fees.storage_fee / Epoch::new(0) .unwrap() - .cost_for_known_cost_item(StorageDiskUsageCreditPerByte); + .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); let expected_added_bytes = if using_history { 313 } else { 1 }; assert_eq!(added_bytes, expected_added_bytes); @@ -1196,7 +1209,7 @@ mod tests { let original_bytes = original_fees.storage_fee / Epoch::new(0) .unwrap() - .cost_for_known_cost_item(StorageDiskUsageCreditPerByte); + .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); let expected_added_bytes = if using_history { 1238 } else { 962 }; assert_eq!(original_bytes, expected_added_bytes); if !using_history { @@ -1221,7 +1234,7 @@ mod tests { let refund_equivalent_bytes = removed_credits.to_unsigned() / Epoch::new(0) .unwrap() - .cost_for_known_cost_item(StorageDiskUsageCreditPerByte); + .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); assert!(expected_added_bytes > refund_equivalent_bytes); assert_eq!(refund_equivalent_bytes, 960); // we refunded 960 instead of 1012 @@ -1240,7 +1253,7 @@ mod tests { let original_bytes = original_fees.storage_fee / Epoch::new(0) .unwrap() - .cost_for_known_cost_item(StorageDiskUsageCreditPerByte); + .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); assert_eq!(original_bytes, expected_added_bytes); } @@ -1260,7 +1273,7 @@ mod tests { let added_bytes = update_fees.storage_fee / Epoch::new(0) .unwrap() - .cost_for_known_cost_item(StorageDiskUsageCreditPerByte); + .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); let removed_credits = update_fees .fee_refunds @@ -1278,7 +1291,7 @@ mod tests { let refund_equivalent_bytes = removed_credits.to_unsigned() / Epoch::new(0) .unwrap() - .cost_for_known_cost_item(StorageDiskUsageCreditPerByte); + .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); assert!(expected_added_bytes > refund_equivalent_bytes); let expected_remove_bytes = if using_history { 603 } else { 601 }; @@ -1390,7 +1403,7 @@ mod tests { let original_bytes = original_fees.storage_fee / Epoch::new(0) .unwrap() - .cost_for_known_cost_item(StorageDiskUsageCreditPerByte); + .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); let expected_added_bytes = if using_history { //Explanation for 1237 @@ -1549,7 +1562,7 @@ mod tests { let added_bytes = update_fees.storage_fee / Epoch::new(0) .unwrap() - .cost_for_known_cost_item(StorageDiskUsageCreditPerByte); + .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); let expected_added_bytes = if using_history { 1239 } else { 963 }; assert_eq!(added_bytes, expected_added_bytes); diff --git a/packages/rs-drive/src/drive/open/mod.rs b/packages/rs-drive/src/drive/open/mod.rs index e606d126f7..0c3328f6f6 100644 --- a/packages/rs-drive/src/drive/open/mod.rs +++ b/packages/rs-drive/src/drive/open/mod.rs @@ -66,23 +66,26 @@ impl Drive { }, }; - { - let res_map = drive.get_epochs_protocol_versions(0, None, true, None, platform_version)?; - let mut write_guard = drive.cache.cached_fee_version.write(); + populate_cached_fee_version(&drive, platform_version)?; - for (epoch_index, protocol_version) in res_map.iter() { - let platform_version = PlatformVersion::get(*protocol_version) - .map_err(|e| Error::Drive(DriveError::CorruptedCacheState(format!( - "no platform version {e}" - ))))?; - write_guard.insert(*epoch_index, &platform_version.fee_version); - } - } + Ok((drive, protocol_version)) + } +} - { - let read_guard = drive.cache.cached_fee_version.read(); - } +/// Test doc +fn populate_cached_fee_version( + drive: &Drive, + platform_version: &PlatformVersion, +) -> Result<(), Error> { + let epochs_protocol_versions = drive.get_epochs_protocol_versions(0, None, true, None, platform_version)?; + let mut write_guard = drive.cache.cached_fee_version.write(); - Ok((drive, protocol_version)) + for (epoch_index, protocol_version) in epochs_protocol_versions.iter() { + let platform_version = PlatformVersion::get(*protocol_version) + .map_err(|e| Error::Drive(DriveError::CorruptedCacheState(format!( + "unable to get platform version {e}" + ))))?; + write_guard.insert(*epoch_index, &platform_version.fee_version); } + Ok(()) } diff --git a/packages/rs-platform-version/src/version/mocks/v2_test.rs b/packages/rs-platform-version/src/version/mocks/v2_test.rs index 41e1a4f381..c7232ef700 100644 --- a/packages/rs-platform-version/src/version/mocks/v2_test.rs +++ b/packages/rs-platform-version/src/version/mocks/v2_test.rs @@ -110,6 +110,7 @@ pub const TEST_PLATFORM_V2: PlatformVersion = PlatformVersion { credit_pools: DriveCreditPoolMethodVersions { epochs: DriveCreditPoolEpochsMethodVersions { get_epochs_infos: 0, + get_epochs_protocol_versions: 0, prove_epochs_infos: 0, get_epoch_fee_multiplier: 0, get_epoch_processing_credits_for_distribution: 0, diff --git a/packages/rs-platform-version/src/version/mocks/v3_test.rs b/packages/rs-platform-version/src/version/mocks/v3_test.rs index c027f7886f..bbb4119baf 100644 --- a/packages/rs-platform-version/src/version/mocks/v3_test.rs +++ b/packages/rs-platform-version/src/version/mocks/v3_test.rs @@ -110,6 +110,7 @@ pub const TEST_PLATFORM_V3: PlatformVersion = PlatformVersion { credit_pools: DriveCreditPoolMethodVersions { epochs: DriveCreditPoolEpochsMethodVersions { get_epochs_infos: 0, + get_epochs_protocol_versions: 0, prove_epochs_infos: 0, get_epoch_fee_multiplier: 0, get_epoch_processing_credits_for_distribution: 0, From d04d6264ea39af423399007c88bdffa86578d64d Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 27 Jun 2024 17:31:17 +0300 Subject: [PATCH 05/47] fmt --- packages/rs-dpp/src/fee/default_costs/mod.rs | 44 +++++++--- packages/rs-dpp/src/fee/fee_result/refunds.rs | 22 +++-- .../platform_types/platform_state/v0/mod.rs | 2 +- .../apply_drive_operations/v0/mod.rs | 2 +- packages/rs-drive/src/drive/cache.rs | 2 +- .../v0/mod.rs | 2 +- .../get_contract_with_fetch_info/v0/mod.rs | 4 +- .../contract/insert/insert_contract/v0/mod.rs | 2 +- .../contract/update/update_contract/v0/mod.rs | 2 +- .../get_epochs_protocol_versions/v0/mod.rs | 13 +-- .../delete_document_for_contract/v0/mod.rs | 2 +- .../delete_document_for_contract_id/v0/mod.rs | 2 +- .../rs-drive/src/drive/document/delete/mod.rs | 32 +++---- .../document/insert/add_document/v0/mod.rs | 2 +- .../add_document_for_contract/v0/mod.rs | 2 +- .../rs-drive/src/drive/document/insert/mod.rs | 39 ++++---- .../rs-drive/src/drive/document/query/mod.rs | 12 +-- .../document/query/query_documents/v0/mod.rs | 2 +- .../rs-drive/src/drive/document/update/mod.rs | 88 +++++++++++-------- .../update_document_for_contract/v0/mod.rs | 2 +- .../update_document_for_contract_id/v0/mod.rs | 2 +- .../v0/mod.rs | 2 +- .../src/drive/fee/calculate_fee/mod.rs | 10 ++- .../src/drive/fee/calculate_fee/v0/mod.rs | 13 +-- .../fetch_identity_contract_nonce/v0/mod.rs | 2 +- .../balance/fetch_identity_balance/v0/mod.rs | 2 +- .../v0/mod.rs | 2 +- .../fetch_full_identity/v0/mod.rs | 2 +- .../nonce/fetch_identity_nonce/v0/mod.rs | 2 +- .../v0/mod.rs | 3 +- .../fetch_identity_with_balance/v0/mod.rs | 3 +- .../fetch_identity_revision/v0/mod.rs | 2 +- .../insert/add_new_identity/v0/mod.rs | 2 +- .../src/drive/identity/key/fetch/mod.rs | 20 +++-- .../v0/mod.rs | 2 +- .../add_new_unique_keys_to_identity/v0/mod.rs | 2 +- .../methods/add_to_identity_balance/v0/mod.rs | 2 +- .../methods/disable_identity_keys/v0/mod.rs | 2 +- .../methods/merge_identity_nonce/v0/mod.rs | 2 +- .../remove_from_identity_balance/v0/mod.rs | 2 +- .../update_identity_revision/v0/mod.rs | 2 +- packages/rs-drive/src/drive/open/mod.rs | 16 ++-- packages/rs-drive/src/fee/op.rs | 38 ++++++-- packages/rs-drive/src/query/mod.rs | 6 +- 44 files changed, 252 insertions(+), 167 deletions(-) diff --git a/packages/rs-dpp/src/fee/default_costs/mod.rs b/packages/rs-dpp/src/fee/default_costs/mod.rs index 334850fee2..4978943295 100644 --- a/packages/rs-dpp/src/fee/default_costs/mod.rs +++ b/packages/rs-dpp/src/fee/default_costs/mod.rs @@ -91,14 +91,16 @@ impl KnownCostItem { KnownCostItem::NonStorageLoadCreditPerByte => { fee_version.storage.non_storage_load_credit_per_byte } - KnownCostItem::StorageSeekCost => { - fee_version.storage.storage_seek_cost - }, + KnownCostItem::StorageSeekCost => fee_version.storage.storage_seek_cost, KnownCostItem::FetchIdentityBalanceProcessingCost => { - fee_version.processing.fetch_identity_balance_processing_cost + fee_version + .processing + .fetch_identity_balance_processing_cost } KnownCostItem::FetchSingleIdentityKeyProcessingCost => { - fee_version.processing.fetch_single_identity_key_processing_cost + fee_version + .processing + .fetch_single_identity_key_processing_cost } KnownCostItem::DoubleSHA256 => { //TODO: double_sha256_base or double_sha256_per_block? @@ -126,7 +128,11 @@ impl KnownCostItem { } } - pub fn lookup_cost_on_epoch(&self, epoch: &Epoch, cached_fee_version: &BTreeMap) -> Credits { + pub fn lookup_cost_on_epoch( + &self, + epoch: &Epoch, + cached_fee_version: &BTreeMap, + ) -> Credits { let version = epoch.active_fee_version(cached_fee_version); self.lookup_cost(version) } @@ -136,22 +142,38 @@ impl KnownCostItem { pub trait EpochCosts { /// Get the closest epoch in the past that has a cost table /// This is where the base costs last changed - fn active_fee_version(&self, cached_fee_version: &BTreeMap) -> &'static FeeVersion; + fn active_fee_version( + &self, + cached_fee_version: &BTreeMap, + ) -> &'static FeeVersion; /// Get the cost for the known cost item - fn cost_for_known_cost_item(&self, cached_fee_version: &BTreeMap, cost_item: KnownCostItem) -> Credits; + fn cost_for_known_cost_item( + &self, + cached_fee_version: &BTreeMap, + cost_item: KnownCostItem, + ) -> Credits; } impl EpochCosts for Epoch { /// Get the active fee version for an epoch - fn active_fee_version(&self, cached_fee_version: &BTreeMap) -> &'static FeeVersion { + fn active_fee_version( + &self, + cached_fee_version: &BTreeMap, + ) -> &'static FeeVersion { // TODO: Test this - cached_fee_version.range(..=self.index).next_back() + cached_fee_version + .range(..=self.index) + .next_back() .map(|(_, &fee_version)| fee_version) .unwrap_or_else(|| &PlatformVersion::first().fee_version) } /// Get the cost for the known cost item - fn cost_for_known_cost_item(&self, cached_fee_version: &BTreeMap, cost_item: KnownCostItem) -> Credits { + fn cost_for_known_cost_item( + &self, + cached_fee_version: &BTreeMap, + cost_item: KnownCostItem, + ) -> Credits { cost_item.lookup_cost_on_epoch(self, cached_fee_version) } } diff --git a/packages/rs-dpp/src/fee/fee_result/refunds.rs b/packages/rs-dpp/src/fee/fee_result/refunds.rs index 0df7828416..8e93592fc2 100644 --- a/packages/rs-dpp/src/fee/fee_result/refunds.rs +++ b/packages/rs-dpp/src/fee/fee_result/refunds.rs @@ -12,13 +12,13 @@ use crate::fee::Credits; use crate::ProtocolError; use bincode::{Decode, Encode}; +use lazy_static::lazy_static; use platform_value::Identifier; +use platform_version::version::fee::FeeVersion; +use platform_version::version::PlatformVersion; use serde::{Deserialize, Serialize}; use std::collections::btree_map::Iter; use std::collections::BTreeMap; -use lazy_static::lazy_static; -use platform_version::version::fee::FeeVersion; -use platform_version::version::PlatformVersion; /// There are additional work and storage required to process refunds /// To protect system from the spam and unnecessary work @@ -41,7 +41,7 @@ impl FeeRefunds { storage_removal: I, current_epoch_index: EpochIndex, epochs_per_era: u16, - cached_fee_version: &BTreeMap + cached_fee_version: &BTreeMap, ) -> Result where I: IntoIterator, @@ -173,9 +173,8 @@ impl FeeRefunds { } lazy_static! { - static ref EPOCH_CHANGE_FEE_VERSION_TEST: BTreeMap = BTreeMap::from([ - (0, &PlatformVersion::first().fee_version) - ]); + static ref EPOCH_CHANGE_FEE_VERSION_TEST: BTreeMap = + BTreeMap::from([(0, &PlatformVersion::first().fee_version)]); } impl IntoIterator for FeeRefunds { @@ -205,8 +204,13 @@ mod tests { BytesPerEpochByIdentifier::from_iter([(identity_id, bytes_per_epoch)]); // Not accessible but this is unit test so should be ok - let fee_refunds = FeeRefunds::from_storage_removal(storage_removal, 3, 20, &EPOCH_CHANGE_FEE_VERSION_TEST) - .expect("should create fee refunds"); + let fee_refunds = FeeRefunds::from_storage_removal( + storage_removal, + 3, + 20, + &EPOCH_CHANGE_FEE_VERSION_TEST, + ) + .expect("should create fee refunds"); let credits_per_epoch = fee_refunds.get(&identity_id).expect("should exists"); diff --git a/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs b/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs index 6eacce1641..39ffb794c2 100644 --- a/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs +++ b/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs @@ -2,7 +2,7 @@ use crate::error::execution::ExecutionError; use crate::error::Error; use dashcore_rpc::dashcore::{ProTxHash, QuorumHash}; use dashcore_rpc::dashcore_rpc_json::MasternodeListItem; -use dpp::block::epoch::{Epoch, EPOCH_0, EpochIndex}; +use dpp::block::epoch::{Epoch, EpochIndex, EPOCH_0}; use dpp::block::extended_block_info::ExtendedBlockInfo; use dpp::bincode::{Decode, Encode}; diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs index 6aeba428c1..033eee50f2 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs @@ -92,7 +92,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, ) } } diff --git a/packages/rs-drive/src/drive/cache.rs b/packages/rs-drive/src/drive/cache.rs index f4b0d5e297..fdbec68716 100644 --- a/packages/rs-drive/src/drive/cache.rs +++ b/packages/rs-drive/src/drive/cache.rs @@ -1,5 +1,5 @@ -use std::collections::BTreeMap; use dpp::identity::TimestampMillis; +use std::collections::BTreeMap; mod data_contract; mod protocol_version; diff --git a/packages/rs-drive/src/drive/contract/apply/apply_contract_with_serialization/v0/mod.rs b/packages/rs-drive/src/drive/contract/apply/apply_contract_with_serialization/v0/mod.rs index 8870b5ff7e..83920fd6d8 100644 --- a/packages/rs-drive/src/drive/contract/apply/apply_contract_with_serialization/v0/mod.rs +++ b/packages/rs-drive/src/drive/contract/apply/apply_contract_with_serialization/v0/mod.rs @@ -69,7 +69,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/contract/get_fetch/get_contract_with_fetch_info/v0/mod.rs b/packages/rs-drive/src/drive/contract/get_fetch/get_contract_with_fetch_info/v0/mod.rs index df51b5279d..d162f3fb5f 100644 --- a/packages/rs-drive/src/drive/contract/get_fetch/get_contract_with_fetch_info/v0/mod.rs +++ b/packages/rs-drive/src/drive/contract/get_fetch/get_contract_with_fetch_info/v0/mod.rs @@ -101,7 +101,7 @@ impl Drive { epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, ) .map(Some) })?; @@ -158,7 +158,7 @@ impl Drive { epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; let updated_contract_fetch_info = Arc::new(DataContractFetchInfo { diff --git a/packages/rs-drive/src/drive/contract/insert/insert_contract/v0/mod.rs b/packages/rs-drive/src/drive/contract/insert/insert_contract/v0/mod.rs index 2dfc0708dc..6a6a96499c 100644 --- a/packages/rs-drive/src/drive/contract/insert/insert_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/contract/insert/insert_contract/v0/mod.rs @@ -77,7 +77,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, ) } diff --git a/packages/rs-drive/src/drive/contract/update/update_contract/v0/mod.rs b/packages/rs-drive/src/drive/contract/update/update_contract/v0/mod.rs index 2800757fa2..2bea06942d 100644 --- a/packages/rs-drive/src/drive/contract/update/update_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/contract/update/update_contract/v0/mod.rs @@ -133,7 +133,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, ) } diff --git a/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs b/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs index 367b8e36bf..6e8d10fc4b 100644 --- a/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs +++ b/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs @@ -82,12 +82,13 @@ impl Drive { "extended epoch info: item has an invalid length".to_string(), )) })?; - let epoch_index = EpochIndex::from_be_bytes([epoch_index_bytes[0], epoch_index_bytes[1]]) - .checked_sub(EPOCH_KEY_OFFSET) - .ok_or(Error::Drive(DriveError::CorruptedSerialization( - "epoch bytes on disk too small, should be over epoch key offset" - .to_string(), - )))?; + let epoch_index = + EpochIndex::from_be_bytes([epoch_index_bytes[0], epoch_index_bytes[1]]) + .checked_sub(EPOCH_KEY_OFFSET) + .ok_or(Error::Drive(DriveError::CorruptedSerialization( + "epoch bytes on disk too small, should be over epoch key offset" + .to_string(), + )))?; let Element::Item(encoded_protocol_version, _) = protocol_version_element else { return Err(Error::Drive(DriveError::UnexpectedElementType( diff --git a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/v0/mod.rs b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/v0/mod.rs index 56a08034da..2ce77396f9 100644 --- a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/v0/mod.rs @@ -46,7 +46,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/v0/mod.rs b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/v0/mod.rs index 601ed47010..f7ac840a66 100644 --- a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/v0/mod.rs @@ -68,7 +68,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; Ok(fees) diff --git a/packages/rs-drive/src/drive/document/delete/mod.rs b/packages/rs-drive/src/drive/document/delete/mod.rs index d569c193dd..a3e5c76a03 100644 --- a/packages/rs-drive/src/drive/document/delete/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/mod.rs @@ -3,11 +3,11 @@ //! This module implements functions in Drive for deleting documents. //! -use std::collections::BTreeMap; -use lazy_static::lazy_static; use dpp::block::epoch::EpochIndex; +use lazy_static::lazy_static; use platform_version::version::fee::FeeVersion; use platform_version::version::PlatformVersion; +use std::collections::BTreeMap; // Module: delete_document_for_contract // This module contains functionality for deleting a document associated with a given contract @@ -52,9 +52,8 @@ mod delete_document_for_contract_operations; mod internal; lazy_static! { - static ref EPOCH_CHANGE_FEE_VERSION_TEST: BTreeMap = BTreeMap::from([ - (0, &PlatformVersion::first().fee_version) - ]); + static ref EPOCH_CHANGE_FEE_VERSION_TEST: BTreeMap = + BTreeMap::from([(0, &PlatformVersion::first().fee_version)]); } #[cfg(feature = "server")] @@ -85,9 +84,9 @@ mod tests { use dpp::fee::default_costs::KnownCostItem::StorageDiskUsageCreditPerByte; use dpp::tests::json_document::{json_document_to_contract, json_document_to_document}; + use crate::drive::document::delete::EPOCH_CHANGE_FEE_VERSION_TEST; use crate::tests::helpers::setup::setup_drive_with_initial_state_structure; use dpp::version::PlatformVersion; - use crate::drive::document::delete::EPOCH_CHANGE_FEE_VERSION_TEST; #[test] fn test_add_and_remove_family_one_document_no_transaction() { @@ -818,9 +817,10 @@ mod tests { // drive.cache let added_bytes = fee_result.storage_fee - / Epoch::new(0) - .unwrap() - .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); + / Epoch::new(0).unwrap().cost_for_known_cost_item( + &EPOCH_CHANGE_FEE_VERSION_TEST, + StorageDiskUsageCreditPerByte, + ); // We added 1559 bytes assert_eq!(added_bytes, 1559); @@ -854,9 +854,10 @@ mod tests { assert_eq!(*removed_credits, 41881536); // drive.cache let refund_equivalent_bytes = removed_credits.to_unsigned() - / Epoch::new(0) - .unwrap() - .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); + / Epoch::new(0).unwrap().cost_for_known_cost_item( + &EPOCH_CHANGE_FEE_VERSION_TEST, + StorageDiskUsageCreditPerByte, + ); assert!(added_bytes > refund_equivalent_bytes); assert_eq!(refund_equivalent_bytes, 1551); // we refunded 1551 instead of 1559 @@ -916,9 +917,10 @@ mod tests { // drive.cache let added_bytes = fee_result.storage_fee - / Epoch::new(0) - .unwrap() - .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); + / Epoch::new(0).unwrap().cost_for_known_cost_item( + &EPOCH_CHANGE_FEE_VERSION_TEST, + StorageDiskUsageCreditPerByte, + ); // We added 1558 bytes assert_eq!(added_bytes, 1559); diff --git a/packages/rs-drive/src/drive/document/insert/add_document/v0/mod.rs b/packages/rs-drive/src/drive/document/insert/add_document/v0/mod.rs index f200ba8436..65da7c0d67 100644 --- a/packages/rs-drive/src/drive/document/insert/add_document/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/insert/add_document/v0/mod.rs @@ -65,7 +65,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/document/insert/add_document_for_contract/v0/mod.rs b/packages/rs-drive/src/drive/document/insert/add_document_for_contract/v0/mod.rs index 37e17cd0b5..5727ce886d 100644 --- a/packages/rs-drive/src/drive/document/insert/add_document_for_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/insert/add_document_for_contract/v0/mod.rs @@ -39,7 +39,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/document/insert/mod.rs b/packages/rs-drive/src/drive/document/insert/mod.rs index 57aec06dc5..a5c5faf084 100644 --- a/packages/rs-drive/src/drive/document/insert/mod.rs +++ b/packages/rs-drive/src/drive/document/insert/mod.rs @@ -64,21 +64,20 @@ mod add_indices_for_top_index_level_for_contract_operations; // This module contains functionality for adding a reference for an index level for contract operations mod add_reference_for_index_level_for_contract_operations; -use std::collections::BTreeMap; -use lazy_static::lazy_static; use dpp::block::epoch::EpochIndex; #[cfg(all( feature = "fixtures-and-mocks", feature = "data-contract-cbor-conversion" ))] use dpp::data_contract::conversion::cbor::DataContractCborConversionMethodsV0; +use lazy_static::lazy_static; use platform_version::version::fee::FeeVersion; use platform_version::version::PlatformVersion; +use std::collections::BTreeMap; lazy_static! { - static ref EPOCH_CHANGE_FEE_VERSION_TEST: BTreeMap = BTreeMap::from([ - (0, &PlatformVersion::first().fee_version) - ]); + static ref EPOCH_CHANGE_FEE_VERSION_TEST: BTreeMap = + BTreeMap::from([(0, &PlatformVersion::first().fee_version)]); } #[cfg(test)] @@ -99,6 +98,7 @@ mod tests { use dpp::data_contract::accessors::v0::DataContractV0Getters; use dpp::document::Document; + use crate::drive::document::insert::EPOCH_CHANGE_FEE_VERSION_TEST; use crate::drive::object_size_info::DocumentInfo::DocumentRefInfo; use crate::tests::helpers::setup::setup_drive_with_initial_state_structure; use dpp::document::serialization_traits::DocumentCborMethodsV0; @@ -108,7 +108,6 @@ mod tests { use dpp::tests::fixtures::get_dpns_data_contract_fixture; use dpp::tests::json_document::json_document_to_document; use dpp::version::PlatformVersion; - use crate::drive::document::insert::EPOCH_CHANGE_FEE_VERSION_TEST; #[test] fn test_add_dashpay_documents_no_transaction() { @@ -341,9 +340,10 @@ mod tests { fee_result, FeeResult { storage_fee: 3058 - * Epoch::new(0) - .unwrap() - .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte), + * Epoch::new(0).unwrap().cost_for_known_cost_item( + &EPOCH_CHANGE_FEE_VERSION_TEST, + StorageDiskUsageCreditPerByte + ), processing_fee: 2317270, ..Default::default() } @@ -404,9 +404,10 @@ mod tests { fee_result, FeeResult { storage_fee: 1305 - * Epoch::new(0) - .unwrap() - .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte), + * Epoch::new(0).unwrap().cost_for_known_cost_item( + &EPOCH_CHANGE_FEE_VERSION_TEST, + StorageDiskUsageCreditPerByte + ), processing_fee: 1482010, ..Default::default() } @@ -469,9 +470,10 @@ mod tests { .expect("expected to insert a document successfully"); let added_bytes = storage_fee - / Epoch::new(0) - .unwrap() - .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); + / Epoch::new(0).unwrap().cost_for_known_cost_item( + &EPOCH_CHANGE_FEE_VERSION_TEST, + StorageDiskUsageCreditPerByte, + ); assert_eq!(1305, added_bytes); assert_eq!(142936800, processing_fee); } @@ -696,9 +698,10 @@ mod tests { fee_result, FeeResult { storage_fee: 1761 - * Epoch::new(0) - .unwrap() - .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte), + * Epoch::new(0).unwrap().cost_for_known_cost_item( + &EPOCH_CHANGE_FEE_VERSION_TEST, + StorageDiskUsageCreditPerByte + ), processing_fee: 2069390, ..Default::default() } diff --git a/packages/rs-drive/src/drive/document/query/mod.rs b/packages/rs-drive/src/drive/document/query/mod.rs index 16bf83ab58..713207302d 100644 --- a/packages/rs-drive/src/drive/document/query/mod.rs +++ b/packages/rs-drive/src/drive/document/query/mod.rs @@ -167,7 +167,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; fee_result.processing_fee } else { @@ -222,7 +222,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; fee_result.processing_fee } else { @@ -262,7 +262,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; fee_result.processing_fee } else { @@ -320,7 +320,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; fee_result.processing_fee } else { @@ -380,7 +380,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; fee_result.processing_fee } else { @@ -471,7 +471,7 @@ impl Drive { epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; fee_result.processing_fee } else { diff --git a/packages/rs-drive/src/drive/document/query/query_documents/v0/mod.rs b/packages/rs-drive/src/drive/document/query/query_documents/v0/mod.rs index 689b1436a5..b76218b1ba 100644 --- a/packages/rs-drive/src/drive/document/query/query_documents/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/query/query_documents/v0/mod.rs @@ -110,7 +110,7 @@ impl Drive { epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; fee_result.processing_fee } else { diff --git a/packages/rs-drive/src/drive/document/update/mod.rs b/packages/rs-drive/src/drive/document/update/mod.rs index a80cd3e6a5..0021c090fe 100644 --- a/packages/rs-drive/src/drive/document/update/mod.rs +++ b/packages/rs-drive/src/drive/document/update/mod.rs @@ -32,11 +32,11 @@ //! This modules implements functions in Drive relevant to updating Documents. //! -use std::collections::BTreeMap; -use lazy_static::lazy_static; use dpp::block::epoch::EpochIndex; +use lazy_static::lazy_static; use platform_version::version::fee::FeeVersion; use platform_version::version::PlatformVersion; +use std::collections::BTreeMap; // Module: add_update_multiple_documents_operations // This module contains functionality for adding operations to update multiple documents @@ -59,9 +59,8 @@ mod internal; mod update_document_with_serialization_for_contract; lazy_static! { - static ref EPOCH_CHANGE_FEE_VERSION_TEST: BTreeMap = BTreeMap::from([ - (0, &PlatformVersion::first().fee_version) - ]); + static ref EPOCH_CHANGE_FEE_VERSION_TEST: BTreeMap = + BTreeMap::from([(0, &PlatformVersion::first().fee_version)]); } #[cfg(test)] @@ -90,6 +89,7 @@ mod tests { use crate::common::setup_contract; use crate::drive::document::tests::setup_dashpay; + use crate::drive::document::update::EPOCH_CHANGE_FEE_VERSION_TEST; use crate::query::DriveQuery; use crate::tests::helpers::setup::{setup_drive, setup_drive_with_initial_state_structure}; use dpp::block::epoch::Epoch; @@ -107,7 +107,6 @@ mod tests { use dpp::platform_value; use dpp::tests::json_document::json_document_to_document; use platform_version::version::PlatformVersion; - use crate::drive::document::update::EPOCH_CHANGE_FEE_VERSION_TEST; #[test] fn test_create_and_update_document_same_transaction() { @@ -930,9 +929,10 @@ mod tests { platform_version, ); let original_bytes = original_fees.storage_fee - / Epoch::new(0) - .unwrap() - .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); + / Epoch::new(0).unwrap().cost_for_known_cost_item( + &EPOCH_CHANGE_FEE_VERSION_TEST, + StorageDiskUsageCreditPerByte, + ); let expected_added_bytes = if using_history { //Explanation for 1237 @@ -1097,9 +1097,10 @@ mod tests { assert_eq!(*removed_credits, 25940733); let refund_equivalent_bytes = removed_credits.to_unsigned() - / Epoch::new(0) - .unwrap() - .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); + / Epoch::new(0).unwrap().cost_for_known_cost_item( + &EPOCH_CHANGE_FEE_VERSION_TEST, + StorageDiskUsageCreditPerByte, + ); assert!(expected_added_bytes > refund_equivalent_bytes); assert_eq!(refund_equivalent_bytes, 960); // we refunded 960 instead of 963 @@ -1116,9 +1117,10 @@ mod tests { ); let original_bytes = original_fees.storage_fee - / Epoch::new(0) - .unwrap() - .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); + / Epoch::new(0).unwrap().cost_for_known_cost_item( + &EPOCH_CHANGE_FEE_VERSION_TEST, + StorageDiskUsageCreditPerByte, + ); assert_eq!(original_bytes, expected_added_bytes); } @@ -1136,9 +1138,10 @@ mod tests { // we both add and remove bytes // this is because trees are added because of indexes, and also removed let added_bytes = update_fees.storage_fee - / Epoch::new(0) - .unwrap() - .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); + / Epoch::new(0).unwrap().cost_for_known_cost_item( + &EPOCH_CHANGE_FEE_VERSION_TEST, + StorageDiskUsageCreditPerByte, + ); let expected_added_bytes = if using_history { 313 } else { 1 }; assert_eq!(added_bytes, expected_added_bytes); @@ -1207,9 +1210,10 @@ mod tests { platform_version, ); let original_bytes = original_fees.storage_fee - / Epoch::new(0) - .unwrap() - .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); + / Epoch::new(0).unwrap().cost_for_known_cost_item( + &EPOCH_CHANGE_FEE_VERSION_TEST, + StorageDiskUsageCreditPerByte, + ); let expected_added_bytes = if using_history { 1238 } else { 962 }; assert_eq!(original_bytes, expected_added_bytes); if !using_history { @@ -1232,9 +1236,10 @@ mod tests { assert_eq!(*removed_credits, 25940733); let refund_equivalent_bytes = removed_credits.to_unsigned() - / Epoch::new(0) - .unwrap() - .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); + / Epoch::new(0).unwrap().cost_for_known_cost_item( + &EPOCH_CHANGE_FEE_VERSION_TEST, + StorageDiskUsageCreditPerByte, + ); assert!(expected_added_bytes > refund_equivalent_bytes); assert_eq!(refund_equivalent_bytes, 960); // we refunded 960 instead of 1012 @@ -1251,9 +1256,10 @@ mod tests { ); let original_bytes = original_fees.storage_fee - / Epoch::new(0) - .unwrap() - .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); + / Epoch::new(0).unwrap().cost_for_known_cost_item( + &EPOCH_CHANGE_FEE_VERSION_TEST, + StorageDiskUsageCreditPerByte, + ); assert_eq!(original_bytes, expected_added_bytes); } @@ -1271,9 +1277,10 @@ mod tests { // we both add and remove bytes // this is because trees are added because of indexes, and also removed let added_bytes = update_fees.storage_fee - / Epoch::new(0) - .unwrap() - .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); + / Epoch::new(0).unwrap().cost_for_known_cost_item( + &EPOCH_CHANGE_FEE_VERSION_TEST, + StorageDiskUsageCreditPerByte, + ); let removed_credits = update_fees .fee_refunds @@ -1289,9 +1296,10 @@ mod tests { let expected_removed_credits = if using_history { 16286655 } else { 16232643 }; assert_eq!(*removed_credits, expected_removed_credits); let refund_equivalent_bytes = removed_credits.to_unsigned() - / Epoch::new(0) - .unwrap() - .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); + / Epoch::new(0).unwrap().cost_for_known_cost_item( + &EPOCH_CHANGE_FEE_VERSION_TEST, + StorageDiskUsageCreditPerByte, + ); assert!(expected_added_bytes > refund_equivalent_bytes); let expected_remove_bytes = if using_history { 603 } else { 601 }; @@ -1401,9 +1409,10 @@ mod tests { platform_version, ); let original_bytes = original_fees.storage_fee - / Epoch::new(0) - .unwrap() - .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); + / Epoch::new(0).unwrap().cost_for_known_cost_item( + &EPOCH_CHANGE_FEE_VERSION_TEST, + StorageDiskUsageCreditPerByte, + ); let expected_added_bytes = if using_history { //Explanation for 1237 @@ -1560,9 +1569,10 @@ mod tests { // we both add and remove bytes // this is because trees are added because of indexes, and also removed let added_bytes = update_fees.storage_fee - / Epoch::new(0) - .unwrap() - .cost_for_known_cost_item(&EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte); + / Epoch::new(0).unwrap().cost_for_known_cost_item( + &EPOCH_CHANGE_FEE_VERSION_TEST, + StorageDiskUsageCreditPerByte, + ); let expected_added_bytes = if using_history { 1239 } else { 963 }; assert_eq!(added_bytes, expected_added_bytes); diff --git a/packages/rs-drive/src/drive/document/update/update_document_for_contract/v0/mod.rs b/packages/rs-drive/src/drive/document/update/update_document_for_contract/v0/mod.rs index 85e64acfc6..24fef88512 100644 --- a/packages/rs-drive/src/drive/document/update/update_document_for_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/update/update_document_for_contract/v0/mod.rs @@ -61,7 +61,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/v0/mod.rs b/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/v0/mod.rs index c9bafe4eb9..461b51dae1 100644 --- a/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/v0/mod.rs @@ -82,7 +82,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; Ok(fees) diff --git a/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/v0/mod.rs b/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/v0/mod.rs index 3740d2fc70..14ce321997 100644 --- a/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/v0/mod.rs @@ -66,7 +66,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs b/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs index 5cd1204da4..3235d9dc4f 100644 --- a/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs +++ b/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs @@ -1,4 +1,3 @@ -use std::collections::BTreeMap; use crate::drive::Drive; use crate::error::drive::DriveError; use crate::error::Error; @@ -8,6 +7,7 @@ use dpp::fee::fee_result::FeeResult; use dpp::version::PlatformVersion; use enum_map::EnumMap; use platform_version::version::fee::FeeVersion; +use std::collections::BTreeMap; mod v0; @@ -40,7 +40,13 @@ impl Drive { cached_fee_version: &BTreeMap, ) -> Result { match platform_version.drive.methods.fees.calculate_fee { - 0 => Self::calculate_fee_v0(base_operations, drive_operations, epoch, epochs_per_era, cached_fee_version), + 0 => Self::calculate_fee_v0( + base_operations, + drive_operations, + epoch, + epochs_per_era, + cached_fee_version, + ), version => Err(Error::Drive(DriveError::UnknownVersionMismatch { method: "Drive::calculate_fee".to_string(), known_versions: vec![0], diff --git a/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs b/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs index 009514d764..d0af46f3cd 100644 --- a/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs +++ b/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs @@ -1,10 +1,10 @@ -use std::collections::BTreeMap; use crate::drive::Drive; use crate::error::fee::FeeError; use crate::error::Error; use crate::fee::op::{BaseOp, LowLevelDriveOperation}; use dpp::block::epoch::{Epoch, EpochIndex}; use dpp::fee::fee_result::FeeResult; +use std::collections::BTreeMap; use enum_map::EnumMap; use platform_version::version::fee::FeeVersion; @@ -17,7 +17,7 @@ impl Drive { drive_operations: Option>, epoch: &Epoch, epochs_per_era: u16, - cached_fee_version: &BTreeMap + cached_fee_version: &BTreeMap, ) -> Result { let mut aggregate_fee_result = FeeResult::default(); if let Some(base_operations) = base_operations { @@ -34,9 +34,12 @@ impl Drive { if let Some(drive_operations) = drive_operations { // println!("{:#?}", drive_operations); - for drive_fee_result in - LowLevelDriveOperation::consume_to_fees(drive_operations, epoch, epochs_per_era, cached_fee_version)? - { + for drive_fee_result in LowLevelDriveOperation::consume_to_fees( + drive_operations, + epoch, + epochs_per_era, + cached_fee_version, + )? { aggregate_fee_result.checked_add_assign(drive_fee_result)?; } } diff --git a/packages/rs-drive/src/drive/identity/contract_info/identity_contract_nonce/fetch_identity_contract_nonce/v0/mod.rs b/packages/rs-drive/src/drive/identity/contract_info/identity_contract_nonce/fetch_identity_contract_nonce/v0/mod.rs index a38ecfbc5a..874be86da4 100644 --- a/packages/rs-drive/src/drive/identity/contract_info/identity_contract_nonce/fetch_identity_contract_nonce/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/contract_info/identity_contract_nonce/fetch_identity_contract_nonce/v0/mod.rs @@ -113,7 +113,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; Ok((value, fees)) } diff --git a/packages/rs-drive/src/drive/identity/fetch/balance/fetch_identity_balance/v0/mod.rs b/packages/rs-drive/src/drive/identity/fetch/balance/fetch_identity_balance/v0/mod.rs index 3328f83cef..0e6277fd67 100644 --- a/packages/rs-drive/src/drive/identity/fetch/balance/fetch_identity_balance/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/fetch/balance/fetch_identity_balance/v0/mod.rs @@ -58,7 +58,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; Ok((value, fees)) } diff --git a/packages/rs-drive/src/drive/identity/fetch/balance/fetch_identity_balance_include_debt/v0/mod.rs b/packages/rs-drive/src/drive/identity/fetch/balance/fetch_identity_balance_include_debt/v0/mod.rs index e4a7f2bdee..00c7fba70a 100644 --- a/packages/rs-drive/src/drive/identity/fetch/balance/fetch_identity_balance_include_debt/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/fetch/balance/fetch_identity_balance_include_debt/v0/mod.rs @@ -55,7 +55,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; Ok((value, fees)) } diff --git a/packages/rs-drive/src/drive/identity/fetch/full_identity/fetch_full_identity/v0/mod.rs b/packages/rs-drive/src/drive/identity/fetch/full_identity/fetch_full_identity/v0/mod.rs index 904b80abf4..81662d4b7c 100644 --- a/packages/rs-drive/src/drive/identity/fetch/full_identity/fetch_full_identity/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/fetch/full_identity/fetch_full_identity/v0/mod.rs @@ -34,7 +34,7 @@ impl Drive { epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; Ok((maybe_identity, fee)) } diff --git a/packages/rs-drive/src/drive/identity/fetch/nonce/fetch_identity_nonce/v0/mod.rs b/packages/rs-drive/src/drive/identity/fetch/nonce/fetch_identity_nonce/v0/mod.rs index 0afdd14e8d..34d2598915 100644 --- a/packages/rs-drive/src/drive/identity/fetch/nonce/fetch_identity_nonce/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/fetch/nonce/fetch_identity_nonce/v0/mod.rs @@ -107,7 +107,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; Ok((value, fees)) } diff --git a/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_balance_with_keys/v0/mod.rs b/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_balance_with_keys/v0/mod.rs index 1e57150300..6ebf9f1130 100644 --- a/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_balance_with_keys/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_balance_with_keys/v0/mod.rs @@ -79,7 +79,8 @@ impl Drive { platform_version: &PlatformVersion, ) -> Result<(Option, FeeResult), Error> { let read_guard = self.cache.cached_fee_version.read(); - let balance_cost = epoch.cost_for_known_cost_item(&read_guard, FetchIdentityBalanceProcessingCost); + let balance_cost = + epoch.cost_for_known_cost_item(&read_guard, FetchIdentityBalanceProcessingCost); if !apply { let read_guard = self.cache.cached_fee_version.read(); let keys_cost = identity_key_request.processing_cost(epoch, &read_guard)?; diff --git a/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_with_balance/v0/mod.rs b/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_with_balance/v0/mod.rs index 12e030fe17..b6e2856485 100644 --- a/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_with_balance/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_with_balance/v0/mod.rs @@ -51,7 +51,8 @@ impl Drive { platform_version: &PlatformVersion, ) -> Result<(Option, FeeResult), Error> { let read_guard = self.cache.cached_fee_version.read(); - let balance_cost = epoch.cost_for_known_cost_item(&read_guard, FetchIdentityBalanceProcessingCost); + let balance_cost = + epoch.cost_for_known_cost_item(&read_guard, FetchIdentityBalanceProcessingCost); if !apply { return Ok((None, FeeResult::new_from_processing_fee(balance_cost))); } diff --git a/packages/rs-drive/src/drive/identity/fetch/revision/fetch_identity_revision/v0/mod.rs b/packages/rs-drive/src/drive/identity/fetch/revision/fetch_identity_revision/v0/mod.rs index 4cadda09d3..06b91f37d5 100644 --- a/packages/rs-drive/src/drive/identity/fetch/revision/fetch_identity_revision/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/fetch/revision/fetch_identity_revision/v0/mod.rs @@ -107,7 +107,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; Ok((value, fees)) } diff --git a/packages/rs-drive/src/drive/identity/insert/add_new_identity/v0/mod.rs b/packages/rs-drive/src/drive/identity/insert/add_new_identity/v0/mod.rs index 7598988897..1b46f75234 100644 --- a/packages/rs-drive/src/drive/identity/insert/add_new_identity/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/insert/add_new_identity/v0/mod.rs @@ -52,7 +52,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/identity/key/fetch/mod.rs b/packages/rs-drive/src/drive/identity/key/fetch/mod.rs index bb6cf3e2fb..eae378c699 100644 --- a/packages/rs-drive/src/drive/identity/key/fetch/mod.rs +++ b/packages/rs-drive/src/drive/identity/key/fetch/mod.rs @@ -27,6 +27,8 @@ use { }; // Conditional imports for the feature "server" +use dpp::block::epoch::EpochIndex; +use platform_version::version::fee::FeeVersion; #[cfg(feature = "server")] use { crate::error::{drive::DriveError, fee::FeeError, identity::IdentityError, Error}, @@ -48,8 +50,6 @@ use { Element::Item, }, }; -use dpp::block::epoch::EpochIndex; -use platform_version::version::fee::FeeVersion; // Modules conditionally compiled for the feature "server" #[cfg(feature = "server")] @@ -655,20 +655,30 @@ pub struct IdentityKeysRequest { impl IdentityKeysRequest { #[cfg(feature = "server")] /// Gets the processing cost of an identity keys request - pub fn processing_cost(&self, epoch: &Epoch, cached_fee_version: &BTreeMap) -> Result { + pub fn processing_cost( + &self, + epoch: &Epoch, + cached_fee_version: &BTreeMap, + ) -> Result { // Good match &self.request_type { AllKeys => Err(Error::Fee(FeeError::OperationNotAllowed( "You can not get costs for requesting all keys", ))), SpecificKeys(keys) => Ok(keys.len() as u64 - * epoch.cost_for_known_cost_item(cached_fee_version, FetchSingleIdentityKeyProcessingCost)), + * epoch.cost_for_known_cost_item( + cached_fee_version, + FetchSingleIdentityKeyProcessingCost, + )), SearchKey(_search) => todo!(), ContractBoundKey(_, _, key_kind) | ContractDocumentTypeBoundKey(_, _, _, key_kind) => { match key_kind { CurrentKeyOfKindRequest => { // not acceissble - Ok(epoch.cost_for_known_cost_item(cached_fee_version, FetchSingleIdentityKeyProcessingCost)) + Ok(epoch.cost_for_known_cost_item( + cached_fee_version, + FetchSingleIdentityKeyProcessingCost, + )) } AllKeysOfKindRequest => Err(Error::Fee(FeeError::OperationNotAllowed( "You can not get costs for an all keys of kind request", diff --git a/packages/rs-drive/src/drive/identity/update/methods/add_new_non_unique_keys_to_identity/v0/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/add_new_non_unique_keys_to_identity/v0/mod.rs index 8af40cbbc5..97eac4555b 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/add_new_non_unique_keys_to_identity/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/add_new_non_unique_keys_to_identity/v0/mod.rs @@ -52,7 +52,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/identity/update/methods/add_new_unique_keys_to_identity/v0/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/add_new_unique_keys_to_identity/v0/mod.rs index 43d27b1f46..995d4c92eb 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/add_new_unique_keys_to_identity/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/add_new_unique_keys_to_identity/v0/mod.rs @@ -52,7 +52,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/identity/update/methods/add_to_identity_balance/v0/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/add_to_identity_balance/v0/mod.rs index 9a9cc2c52f..fdcd23454d 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/add_to_identity_balance/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/add_to_identity_balance/v0/mod.rs @@ -54,7 +54,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; Ok(fees) diff --git a/packages/rs-drive/src/drive/identity/update/methods/disable_identity_keys/v0/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/disable_identity_keys/v0/mod.rs index cc0ea9b104..86c29efe91 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/disable_identity_keys/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/disable_identity_keys/v0/mod.rs @@ -66,7 +66,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; Ok(fees) diff --git a/packages/rs-drive/src/drive/identity/update/methods/merge_identity_nonce/v0/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/merge_identity_nonce/v0/mod.rs index d1596f788c..8378bb0ab3 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/merge_identity_nonce/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/merge_identity_nonce/v0/mod.rs @@ -65,7 +65,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; Some(fees) diff --git a/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/v0/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/v0/mod.rs index 50f48553be..7d91fba262 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/v0/mod.rs @@ -54,7 +54,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/v0/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/v0/mod.rs index 90e89b507e..c595031650 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/v0/mod.rs @@ -60,7 +60,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; Ok(fees) diff --git a/packages/rs-drive/src/drive/open/mod.rs b/packages/rs-drive/src/drive/open/mod.rs index 0c3328f6f6..014e8fca95 100644 --- a/packages/rs-drive/src/drive/open/mod.rs +++ b/packages/rs-drive/src/drive/open/mod.rs @@ -1,17 +1,17 @@ -use std::collections::BTreeMap; use crate::drive::cache::SystemDataContracts; use crate::drive::cache::{DataContractCache, DriveCache, ProtocolVersionsCache}; use crate::drive::config::DriveConfig; use crate::drive::defaults::INITIAL_PROTOCOL_VERSION; use crate::drive::Drive; +use crate::error::drive::DriveError; use crate::error::Error; use dpp::errors::ProtocolError; use dpp::util::deserializer::ProtocolVersion; use grovedb::GroveDb; +use platform_version::error::PlatformVersionError; use platform_version::version::PlatformVersion; +use std::collections::BTreeMap; use std::path::Path; -use platform_version::error::PlatformVersionError; -use crate::error::drive::DriveError; impl Drive { /// Opens GroveDB database @@ -77,14 +77,16 @@ fn populate_cached_fee_version( drive: &Drive, platform_version: &PlatformVersion, ) -> Result<(), Error> { - let epochs_protocol_versions = drive.get_epochs_protocol_versions(0, None, true, None, platform_version)?; + let epochs_protocol_versions = + drive.get_epochs_protocol_versions(0, None, true, None, platform_version)?; let mut write_guard = drive.cache.cached_fee_version.write(); for (epoch_index, protocol_version) in epochs_protocol_versions.iter() { - let platform_version = PlatformVersion::get(*protocol_version) - .map_err(|e| Error::Drive(DriveError::CorruptedCacheState(format!( + let platform_version = PlatformVersion::get(*protocol_version).map_err(|e| { + Error::Drive(DriveError::CorruptedCacheState(format!( "unable to get platform version {e}" - ))))?; + ))) + })?; write_guard.insert(*epoch_index, &platform_version.fee_version); } Ok(()) diff --git a/packages/rs-drive/src/fee/op.rs b/packages/rs-drive/src/fee/op.rs index 5da2ca50b4..1da804d3fd 100644 --- a/packages/rs-drive/src/fee/op.rs +++ b/packages/rs-drive/src/fee/op.rs @@ -1,9 +1,9 @@ -use std::collections::BTreeMap; use crate::drive::batch::GroveDbOpBatch; use grovedb_costs::storage_cost::removal::Identifier; use grovedb_costs::storage_cost::removal::StorageRemovedBytes::{ BasicStorageRemoval, NoStorageRemoval, SectionedStorageRemoval, }; +use std::collections::BTreeMap; use enum_map::Enum; use grovedb::batch::key_info::KeyInfo; @@ -205,7 +205,7 @@ impl LowLevelDriveOperation { drive_operation: Vec, epoch: &Epoch, epochs_per_era: u16, - cached_fee_version: &BTreeMap + cached_fee_version: &BTreeMap, ) -> Result, Error> { drive_operation .into_iter() @@ -236,7 +236,7 @@ impl LowLevelDriveOperation { removal_per_epoch_by_identifier, epoch.index, epochs_per_era, - cached_fee_version + cached_fee_version, )?, system_amount, ) @@ -409,14 +409,26 @@ impl LowLevelDriveOperation { /// Drive cost trait pub trait DriveCost { /// Ephemeral cost - fn ephemeral_cost(&self, epoch: &Epoch, cached_fee_version: &BTreeMap) -> Result; + fn ephemeral_cost( + &self, + epoch: &Epoch, + cached_fee_version: &BTreeMap, + ) -> Result; /// Storage cost - fn storage_cost(&self, epoch: &Epoch, cached_fee_version: &BTreeMap) -> Result; + fn storage_cost( + &self, + epoch: &Epoch, + cached_fee_version: &BTreeMap, + ) -> Result; } impl DriveCost for OperationCost { /// Return the ephemeral cost from the operation - fn ephemeral_cost(&self, epoch: &Epoch, cached_fee_version: &BTreeMap) -> Result { + fn ephemeral_cost( + &self, + epoch: &Epoch, + cached_fee_version: &BTreeMap, + ) -> Result { //todo: deal with epochs let OperationCost { seek_count, @@ -441,7 +453,9 @@ impl DriveCost for OperationCost { .ok_or_else(|| get_overflow_error("storage written bytes cost overflow"))?; // not accessible let storage_loaded_bytes_cost = (*storage_loaded_bytes as u64) - .checked_mul(epoch.cost_for_known_cost_item(cached_fee_version, StorageLoadCreditPerByte)) + .checked_mul( + epoch.cost_for_known_cost_item(cached_fee_version, StorageLoadCreditPerByte), + ) .ok_or_else(|| get_overflow_error("storage loaded cost overflow"))?; // this can't overflow let hash_node_cost = @@ -456,11 +470,17 @@ impl DriveCost for OperationCost { } /// Return the storage cost from the operation - fn storage_cost(&self, epoch: &Epoch, cached_fee_version: &BTreeMap) -> Result { + fn storage_cost( + &self, + epoch: &Epoch, + cached_fee_version: &BTreeMap, + ) -> Result { //todo: deal with epochs let OperationCost { storage_cost, .. } = self; (storage_cost.added_bytes as u64) - .checked_mul(epoch.cost_for_known_cost_item(cached_fee_version, StorageDiskUsageCreditPerByte)) + .checked_mul( + epoch.cost_for_known_cost_item(cached_fee_version, StorageDiskUsageCreditPerByte), + ) .ok_or_else(|| get_overflow_error("storage written bytes cost overflow")) } } diff --git a/packages/rs-drive/src/query/mod.rs b/packages/rs-drive/src/query/mod.rs index cef215dc0a..9d82cd14fe 100644 --- a/packages/rs-drive/src/query/mod.rs +++ b/packages/rs-drive/src/query/mod.rs @@ -1620,7 +1620,7 @@ impl<'a> DriveQuery<'a> { &block_info.epoch, drive.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; fee_result.processing_fee } else { @@ -1678,7 +1678,7 @@ impl<'a> DriveQuery<'a> { &block_info.epoch, drive.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; fee_result.processing_fee } else { @@ -1738,7 +1738,7 @@ impl<'a> DriveQuery<'a> { &block_info.epoch, drive.config.epochs_per_era, platform_version, - &cached_fee_versions + &cached_fee_versions, )?; fee_result.processing_fee } else { From 1b9ca7182caaa1e1ac18e4b108fa9fe926119462 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 27 Jun 2024 17:52:55 +0300 Subject: [PATCH 06/47] more work --- packages/rs-dpp/src/fee/default_costs/mod.rs | 6 +++++- packages/rs-drive/src/drive/open/mod.rs | 11 ++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/rs-dpp/src/fee/default_costs/mod.rs b/packages/rs-dpp/src/fee/default_costs/mod.rs index 4978943295..d33c711a42 100644 --- a/packages/rs-dpp/src/fee/default_costs/mod.rs +++ b/packages/rs-dpp/src/fee/default_costs/mod.rs @@ -160,7 +160,11 @@ impl EpochCosts for Epoch { &self, cached_fee_version: &BTreeMap, ) -> &'static FeeVersion { - // TODO: Test this + // If the exact EpochIndex is matching to a FeeVersion update + if let Some(fee_version) = cached_fee_version.get(&self.index) { + return fee_version; + } + // else return the FeeVersion at lower adjacent EpochIndex (if available, else the FeeVersion of first PlatformVersion) cached_fee_version .range(..=self.index) .next_back() diff --git a/packages/rs-drive/src/drive/open/mod.rs b/packages/rs-drive/src/drive/open/mod.rs index 014e8fca95..f1152bb86a 100644 --- a/packages/rs-drive/src/drive/open/mod.rs +++ b/packages/rs-drive/src/drive/open/mod.rs @@ -61,8 +61,7 @@ impl Drive { system_data_contracts: SystemDataContracts::load_genesis_system_contracts( platform_version, )?, - // TODO: Populate this from groveDB - cached_fee_version: parking_lot::RwLock::new(BTreeMap::new()), + cached_fee_version: parking_lot::RwLock::new(BTreeMap::default()), }, }; @@ -72,22 +71,24 @@ impl Drive { } } -/// Test doc +/// Function that populates drive.cache.cached_fee_version with the EpochIndex were FeeVersion where updated +// TODO: This function should probably be moved else where. And maybe should be a static method like Drive::fetch_current_protocol_version_with_groved? fn populate_cached_fee_version( drive: &Drive, platform_version: &PlatformVersion, ) -> Result<(), Error> { let epochs_protocol_versions = drive.get_epochs_protocol_versions(0, None, true, None, platform_version)?; - let mut write_guard = drive.cache.cached_fee_version.write(); + let mut cached_fee_versions = drive.cache.cached_fee_version.write(); + // TODO: Insert in cached_fee_versions only when the FeeVersion changes from previous Epoch for (epoch_index, protocol_version) in epochs_protocol_versions.iter() { let platform_version = PlatformVersion::get(*protocol_version).map_err(|e| { Error::Drive(DriveError::CorruptedCacheState(format!( "unable to get platform version {e}" ))) })?; - write_guard.insert(*epoch_index, &platform_version.fee_version); + cached_fee_versions.insert(*epoch_index, &platform_version.fee_version); } Ok(()) } From 26e0209f7092d3c345d9b628ed31abf671acede6 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 27 Jun 2024 18:05:08 +0300 Subject: [PATCH 07/47] more work --- .../protocol_upgrade/upgrade_protocol_version/v0/mod.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs index aafba77c5e..2f7905a524 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs @@ -37,7 +37,6 @@ impl Platform { .protocol_version; let current_block_protocol_version = platform_version.protocol_version; - // here // Protocol version can be changed only on epoch change if epoch_info.is_epoch_change_but_not_genesis() { @@ -79,6 +78,10 @@ impl Platform { .clear_version_information(Some(transaction), &platform_version.drive) .map_err(Error::Drive)?; + let mut cached_fee_version = self.drive.cache.cached_fee_version.write(); + let platform_version = PlatformVersion::get(current_block_protocol_version)?; + cached_fee_version.insert(epoch_info.current_epoch_index(), &platform_version.fee_version); + // We clean voting counter cache only on finalize block because: // 1. The voting counter global cache uses for querying of voting information in Drive queries // 2. There might be multiple rounds so on the next round we will lose all previous epoch votes From cebc0edf6b8702dcbf43923f617a387d77f76e0a Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 27 Jun 2024 18:05:20 +0300 Subject: [PATCH 08/47] fmt --- .../protocol_upgrade/upgrade_protocol_version/v0/mod.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs index 2f7905a524..a7bd5196ce 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs @@ -37,7 +37,6 @@ impl Platform { .protocol_version; let current_block_protocol_version = platform_version.protocol_version; - // Protocol version can be changed only on epoch change if epoch_info.is_epoch_change_but_not_genesis() { if current_block_protocol_version == previous_block_protocol_version { @@ -80,7 +79,10 @@ impl Platform { let mut cached_fee_version = self.drive.cache.cached_fee_version.write(); let platform_version = PlatformVersion::get(current_block_protocol_version)?; - cached_fee_version.insert(epoch_info.current_epoch_index(), &platform_version.fee_version); + cached_fee_version.insert( + epoch_info.current_epoch_index(), + &platform_version.fee_version, + ); // We clean voting counter cache only on finalize block because: // 1. The voting counter global cache uses for querying of voting information in Drive queries From ca29a8fc8d56dda7e37843048d258ba1280e9891 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 27 Jun 2024 18:14:32 +0300 Subject: [PATCH 09/47] comment --- .../protocol_upgrade/upgrade_protocol_version/v0/mod.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs index a7bd5196ce..42ba6bcab0 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs @@ -77,6 +77,7 @@ impl Platform { .clear_version_information(Some(transaction), &platform_version.drive) .map_err(Error::Drive)?; + // TODO: Insert it to the map only if the FeeVersion was updated let mut cached_fee_version = self.drive.cache.cached_fee_version.write(); let platform_version = PlatformVersion::get(current_block_protocol_version)?; cached_fee_version.insert( From a23d9dd641cd1af7563d3b31decca2745d442ae4 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 27 Jun 2024 18:34:19 +0300 Subject: [PATCH 10/47] partialeq for fee versions --- .../src/version/fee/data_contract/mod.rs | 15 +++++++++++++++ .../src/version/fee/hashing/mod.rs | 9 +++++++++ .../rs-platform-version/src/version/fee/mod.rs | 10 ++++++++++ .../src/version/fee/processing/mod.rs | 15 +++++++++++++++ .../src/version/fee/signature/mod.rs | 10 ++++++++++ .../version/fee/state_transition_min_fees/mod.rs | 11 +++++++++++ .../src/version/fee/storage/mod.rs | 10 ++++++++++ 7 files changed, 80 insertions(+) diff --git a/packages/rs-platform-version/src/version/fee/data_contract/mod.rs b/packages/rs-platform-version/src/version/fee/data_contract/mod.rs index 4c8f3eb240..e4dca73fa6 100644 --- a/packages/rs-platform-version/src/version/fee/data_contract/mod.rs +++ b/packages/rs-platform-version/src/version/fee/data_contract/mod.rs @@ -10,3 +10,18 @@ pub struct FeeDataContractValidationVersion { pub document_type_base_unique_index_fee: u64, pub document_type_unique_index_per_property_fee: u64, } + +impl PartialEq for FeeDataContractValidationVersion { + fn eq(&self, other: &Self) -> bool { + self.document_type_base_fee == other.document_type_base_fee + && self.document_type_size_fee == other.document_type_size_fee + && self.document_type_per_property_fee == other.document_type_per_property_fee + && self.document_type_base_non_unique_index_fee + == other.document_type_base_non_unique_index_fee + && self.document_type_non_unique_index_per_property_fee + == other.document_type_non_unique_index_per_property_fee + && self.document_type_base_unique_index_fee == other.document_type_base_unique_index_fee + && self.document_type_unique_index_per_property_fee + == other.document_type_unique_index_per_property_fee + } +} diff --git a/packages/rs-platform-version/src/version/fee/hashing/mod.rs b/packages/rs-platform-version/src/version/fee/hashing/mod.rs index c5b51a4e4f..e63e546e0e 100644 --- a/packages/rs-platform-version/src/version/fee/hashing/mod.rs +++ b/packages/rs-platform-version/src/version/fee/hashing/mod.rs @@ -7,3 +7,12 @@ pub struct FeeHashingVersion { pub single_sha256_base: u64, pub single_sha256_per_block: u64, } + +impl PartialEq for FeeHashingVersion { + fn eq(&self, other: &Self) -> bool { + self.double_sha256_base == other.double_sha256_base + && self.double_sha256_per_block == other.double_sha256_per_block + && self.single_sha256_base == other.single_sha256_base + && self.single_sha256_per_block == other.single_sha256_per_block + } +} diff --git a/packages/rs-platform-version/src/version/fee/mod.rs b/packages/rs-platform-version/src/version/fee/mod.rs index 0810bc85c8..2afd56681e 100644 --- a/packages/rs-platform-version/src/version/fee/mod.rs +++ b/packages/rs-platform-version/src/version/fee/mod.rs @@ -22,3 +22,13 @@ pub struct FeeVersion { pub data_contract: FeeDataContractValidationVersion, pub state_transition_min_fees: StateTransitionMinFees, } + +impl PartialEq for FeeStorageVersion { + fn eq(&self, other: &Self) -> bool { + self.storage_disk_usage_credit_per_byte == other.storage_disk_usage_credit_per_byte + && self.storage_processing_credit_per_byte == other.storage_processing_credit_per_byte + && self.storage_load_credit_per_byte == other.storage_load_credit_per_byte + && self.non_storage_load_credit_per_byte == other.non_storage_load_credit_per_byte + && self.storage_seek_cost == other.storage_seek_cost + } +} diff --git a/packages/rs-platform-version/src/version/fee/processing/mod.rs b/packages/rs-platform-version/src/version/fee/processing/mod.rs index 484048f624..e7e9051a02 100644 --- a/packages/rs-platform-version/src/version/fee/processing/mod.rs +++ b/packages/rs-platform-version/src/version/fee/processing/mod.rs @@ -9,3 +9,18 @@ pub struct FeeProcessingVersion { pub fetch_single_identity_key_processing_cost: u64, pub validate_key_structure: u64, } + +impl PartialEq for FeeProcessingVersion { + fn eq(&self, other: &Self) -> bool { + self.fetch_identity_balance_processing_cost == other.fetch_identity_balance_processing_cost + && self.fetch_identity_revision_processing_cost + == other.fetch_identity_revision_processing_cost + && self.fetch_identity_balance_and_revision_processing_cost + == other.fetch_identity_balance_and_revision_processing_cost + && self.fetch_identity_cost_per_look_up_key_by_id + == other.fetch_identity_cost_per_look_up_key_by_id + && self.fetch_single_identity_key_processing_cost + == other.fetch_single_identity_key_processing_cost + && self.validate_key_structure == other.validate_key_structure + } +} diff --git a/packages/rs-platform-version/src/version/fee/signature/mod.rs b/packages/rs-platform-version/src/version/fee/signature/mod.rs index ebfbd22984..ac98b31aa5 100644 --- a/packages/rs-platform-version/src/version/fee/signature/mod.rs +++ b/packages/rs-platform-version/src/version/fee/signature/mod.rs @@ -8,3 +8,13 @@ pub struct FeeSignatureVersion { pub verify_signature_bip13_script_hash: u64, pub verify_signature_eddsa25519_hash160: u64, } + +impl PartialEq for FeeSignatureVersion { + fn eq(&self, other: &Self) -> bool { + self.verify_signature_ecdsa_secp256k1 == other.verify_signature_ecdsa_secp256k1 + && self.verify_signature_bls12_381 == other.verify_signature_bls12_381 + && self.verify_signature_ecdsa_hash160 == other.verify_signature_ecdsa_hash160 + && self.verify_signature_bip13_script_hash == other.verify_signature_bip13_script_hash + && self.verify_signature_eddsa25519_hash160 == other.verify_signature_eddsa25519_hash160 + } +} diff --git a/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs b/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs index 692634e747..d14454aaf7 100644 --- a/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs +++ b/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs @@ -8,3 +8,14 @@ pub struct StateTransitionMinFees { pub contract_create: u64, pub contract_update: u64, } + +impl PartialEq for StateTransitionMinFees { + fn eq(&self, other: &Self) -> bool { + self.credit_transfer == other.credit_transfer + && self.credit_withdrawal == other.credit_withdrawal + && self.identity_update == other.identity_update + && self.document_batch_sub_transition == other.document_batch_sub_transition + && self.contract_create == other.contract_create + && self.contract_update == other.contract_update + } +} diff --git a/packages/rs-platform-version/src/version/fee/storage/mod.rs b/packages/rs-platform-version/src/version/fee/storage/mod.rs index 765bee47b9..6768634b21 100644 --- a/packages/rs-platform-version/src/version/fee/storage/mod.rs +++ b/packages/rs-platform-version/src/version/fee/storage/mod.rs @@ -8,3 +8,13 @@ pub struct FeeStorageVersion { pub non_storage_load_credit_per_byte: u64, pub storage_seek_cost: u64, } + +impl PartialEq for FeeStorageVersion { + fn eq(&self, other: &Self) -> bool { + self.storage_disk_usage_credit_per_byte == other.storage_disk_usage_credit_per_byte + && self.storage_processing_credit_per_byte == other.storage_processing_credit_per_byte + && self.storage_load_credit_per_byte == other.storage_load_credit_per_byte + && self.non_storage_load_credit_per_byte == other.non_storage_load_credit_per_byte + && self.storage_seek_cost == other.storage_seek_cost + } +} From 3a1a3b4ca1cb7b85e54e1e88266e8e39d6e7ebe5 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 27 Jun 2024 18:51:23 +0300 Subject: [PATCH 11/47] insert fee version only if it was changed --- .../upgrade_protocol_version/v0/mod.rs | 22 +++++++++++++------ packages/rs-drive/src/drive/open/mod.rs | 14 ++++++++++-- .../src/version/fee/mod.rs | 13 ++++++----- 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs index 42ba6bcab0..45088dd197 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs @@ -76,14 +76,22 @@ impl Platform { self.drive .clear_version_information(Some(transaction), &platform_version.drive) .map_err(Error::Drive)?; - - // TODO: Insert it to the map only if the FeeVersion was updated - let mut cached_fee_version = self.drive.cache.cached_fee_version.write(); + let platform_version = PlatformVersion::get(current_block_protocol_version)?; - cached_fee_version.insert( - epoch_info.current_epoch_index(), - &platform_version.fee_version, - ); + let mut cached_fee_version = self.drive.cache.cached_fee_version.write(); + if let Some((_, &last_fee_version)) = cached_fee_version.iter().last() { + if *last_fee_version != platform_version.fee_version { + cached_fee_version.insert( + epoch_info.current_epoch_index(), + &platform_version.fee_version, + ); + } + } else { + cached_fee_version.insert( + epoch_info.current_epoch_index(), + &platform_version.fee_version, + ); + } // We clean voting counter cache only on finalize block because: // 1. The voting counter global cache uses for querying of voting information in Drive queries diff --git a/packages/rs-drive/src/drive/open/mod.rs b/packages/rs-drive/src/drive/open/mod.rs index f1152bb86a..9795a35633 100644 --- a/packages/rs-drive/src/drive/open/mod.rs +++ b/packages/rs-drive/src/drive/open/mod.rs @@ -12,6 +12,7 @@ use platform_version::error::PlatformVersionError; use platform_version::version::PlatformVersion; use std::collections::BTreeMap; use std::path::Path; +use platform_version::version::fee::FeeVersion; impl Drive { /// Opens GroveDB database @@ -81,14 +82,23 @@ fn populate_cached_fee_version( drive.get_epochs_protocol_versions(0, None, true, None, platform_version)?; let mut cached_fee_versions = drive.cache.cached_fee_version.write(); - // TODO: Insert in cached_fee_versions only when the FeeVersion changes from previous Epoch + let mut last_fee_version_opt: Option<&FeeVersion> = None; for (epoch_index, protocol_version) in epochs_protocol_versions.iter() { let platform_version = PlatformVersion::get(*protocol_version).map_err(|e| { Error::Drive(DriveError::CorruptedCacheState(format!( "unable to get platform version {e}" ))) })?; - cached_fee_versions.insert(*epoch_index, &platform_version.fee_version); + if let Some(last_fee_version) = last_fee_version_opt { + if *last_fee_version != platform_version.fee_version { + last_fee_version_opt = Some(&platform_version.fee_version); + cached_fee_versions.insert(*epoch_index, &platform_version.fee_version); + } + } + else { + last_fee_version_opt = Some(&platform_version.fee_version); + cached_fee_versions.insert(*epoch_index, &platform_version.fee_version); + } } Ok(()) } diff --git a/packages/rs-platform-version/src/version/fee/mod.rs b/packages/rs-platform-version/src/version/fee/mod.rs index 2afd56681e..993a76cacd 100644 --- a/packages/rs-platform-version/src/version/fee/mod.rs +++ b/packages/rs-platform-version/src/version/fee/mod.rs @@ -23,12 +23,13 @@ pub struct FeeVersion { pub state_transition_min_fees: StateTransitionMinFees, } -impl PartialEq for FeeStorageVersion { +impl PartialEq for FeeVersion { fn eq(&self, other: &Self) -> bool { - self.storage_disk_usage_credit_per_byte == other.storage_disk_usage_credit_per_byte - && self.storage_processing_credit_per_byte == other.storage_processing_credit_per_byte - && self.storage_load_credit_per_byte == other.storage_load_credit_per_byte - && self.non_storage_load_credit_per_byte == other.non_storage_load_credit_per_byte - && self.storage_seek_cost == other.storage_seek_cost + self.storage == other.storage && + self.signature == other.signature && + self.hashing == other.hashing && + self.processing == other.processing && + self.data_contract == other.data_contract && + self.state_transition_min_fees == other.state_transition_min_fees } } From 0bebf1fcb53203954e8430126a154d23bca38916 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 27 Jun 2024 18:51:38 +0300 Subject: [PATCH 12/47] fmt --- packages/rs-drive/src/drive/open/mod.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/rs-drive/src/drive/open/mod.rs b/packages/rs-drive/src/drive/open/mod.rs index 9795a35633..729997d67f 100644 --- a/packages/rs-drive/src/drive/open/mod.rs +++ b/packages/rs-drive/src/drive/open/mod.rs @@ -9,10 +9,10 @@ use dpp::errors::ProtocolError; use dpp::util::deserializer::ProtocolVersion; use grovedb::GroveDb; use platform_version::error::PlatformVersionError; +use platform_version::version::fee::FeeVersion; use platform_version::version::PlatformVersion; use std::collections::BTreeMap; use std::path::Path; -use platform_version::version::fee::FeeVersion; impl Drive { /// Opens GroveDB database @@ -94,8 +94,7 @@ fn populate_cached_fee_version( last_fee_version_opt = Some(&platform_version.fee_version); cached_fee_versions.insert(*epoch_index, &platform_version.fee_version); } - } - else { + } else { last_fee_version_opt = Some(&platform_version.fee_version); cached_fee_versions.insert(*epoch_index, &platform_version.fee_version); } From 40c672468012b2404d0664a8e294815c5d3c5b3c Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 27 Jun 2024 18:51:50 +0300 Subject: [PATCH 13/47] fmt --- .../upgrade_protocol_version/v0/mod.rs | 2 +- packages/rs-platform-version/src/version/fee/mod.rs | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs index 45088dd197..9274e913b7 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs @@ -76,7 +76,7 @@ impl Platform { self.drive .clear_version_information(Some(transaction), &platform_version.drive) .map_err(Error::Drive)?; - + let platform_version = PlatformVersion::get(current_block_protocol_version)?; let mut cached_fee_version = self.drive.cache.cached_fee_version.write(); if let Some((_, &last_fee_version)) = cached_fee_version.iter().last() { diff --git a/packages/rs-platform-version/src/version/fee/mod.rs b/packages/rs-platform-version/src/version/fee/mod.rs index 993a76cacd..7de2695630 100644 --- a/packages/rs-platform-version/src/version/fee/mod.rs +++ b/packages/rs-platform-version/src/version/fee/mod.rs @@ -25,11 +25,11 @@ pub struct FeeVersion { impl PartialEq for FeeVersion { fn eq(&self, other: &Self) -> bool { - self.storage == other.storage && - self.signature == other.signature && - self.hashing == other.hashing && - self.processing == other.processing && - self.data_contract == other.data_contract && - self.state_transition_min_fees == other.state_transition_min_fees + self.storage == other.storage + && self.signature == other.signature + && self.hashing == other.hashing + && self.processing == other.processing + && self.data_contract == other.data_contract + && self.state_transition_min_fees == other.state_transition_min_fees } } From 12d3eec0386f91212b886c7e8ba66e8f000b3f33 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 27 Jun 2024 19:34:38 +0300 Subject: [PATCH 14/47] clippy fixes --- packages/rs-dpp/src/fee/default_costs/mod.rs | 1 - .../credit_pools/epochs/get_epochs_protocol_versions/mod.rs | 1 - packages/rs-drive/src/drive/open/mod.rs | 1 - 3 files changed, 3 deletions(-) diff --git a/packages/rs-dpp/src/fee/default_costs/mod.rs b/packages/rs-dpp/src/fee/default_costs/mod.rs index d33c711a42..1c5b960aa5 100644 --- a/packages/rs-dpp/src/fee/default_costs/mod.rs +++ b/packages/rs-dpp/src/fee/default_costs/mod.rs @@ -35,7 +35,6 @@ use crate::block::epoch::Epoch; use crate::block::epoch::EpochIndex; use crate::fee::Credits; -use itertools::Itertools; use platform_version::version::fee::FeeVersion; use platform_version::version::PlatformVersion; use std::collections::BTreeMap; diff --git a/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/mod.rs b/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/mod.rs index 2a2fe69be6..76a9d1b834 100644 --- a/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/mod.rs +++ b/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/mod.rs @@ -5,7 +5,6 @@ use crate::error::drive::DriveError; use crate::error::Error; use dpp::block::epoch::EpochIndex; -use dpp::block::extended_epoch_info::ExtendedEpochInfo; use dpp::util::deserializer::ProtocolVersion; use grovedb::TransactionArg; use nohash_hasher::IntMap; diff --git a/packages/rs-drive/src/drive/open/mod.rs b/packages/rs-drive/src/drive/open/mod.rs index 729997d67f..3915fbf3ec 100644 --- a/packages/rs-drive/src/drive/open/mod.rs +++ b/packages/rs-drive/src/drive/open/mod.rs @@ -8,7 +8,6 @@ use crate::error::Error; use dpp::errors::ProtocolError; use dpp::util::deserializer::ProtocolVersion; use grovedb::GroveDb; -use platform_version::error::PlatformVersionError; use platform_version::version::fee::FeeVersion; use platform_version::version::PlatformVersion; use std::collections::BTreeMap; From 818bf45bd2e737d1f2a461aeccb83482baba3298 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 27 Jun 2024 20:00:47 +0300 Subject: [PATCH 15/47] remove comment --- packages/rs-dpp/src/fee/fee_result/refunds.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/rs-dpp/src/fee/fee_result/refunds.rs b/packages/rs-dpp/src/fee/fee_result/refunds.rs index 8e93592fc2..76d2508bdc 100644 --- a/packages/rs-dpp/src/fee/fee_result/refunds.rs +++ b/packages/rs-dpp/src/fee/fee_result/refunds.rs @@ -202,8 +202,7 @@ mod tests { let bytes_per_epoch = IntMap::from_iter([(0, 31), (1, 100)]); let storage_removal = BytesPerEpochByIdentifier::from_iter([(identity_id, bytes_per_epoch)]); - - // Not accessible but this is unit test so should be ok + let fee_refunds = FeeRefunds::from_storage_removal( storage_removal, 3, From 1e924c216a3ed9d48f9aed67a40c6b0d47116587 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 27 Jun 2024 20:00:58 +0300 Subject: [PATCH 16/47] fmt --- packages/rs-dpp/src/fee/fee_result/refunds.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rs-dpp/src/fee/fee_result/refunds.rs b/packages/rs-dpp/src/fee/fee_result/refunds.rs index 76d2508bdc..936932fc51 100644 --- a/packages/rs-dpp/src/fee/fee_result/refunds.rs +++ b/packages/rs-dpp/src/fee/fee_result/refunds.rs @@ -202,7 +202,7 @@ mod tests { let bytes_per_epoch = IntMap::from_iter([(0, 31), (1, 100)]); let storage_removal = BytesPerEpochByIdentifier::from_iter([(identity_id, bytes_per_epoch)]); - + let fee_refunds = FeeRefunds::from_storage_removal( storage_removal, 3, From 5812e831c5425f7e294b4bdbd51281afdd63d2b9 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 27 Jun 2024 20:03:21 +0300 Subject: [PATCH 17/47] undo work in platform state --- .../src/platform_types/platform_state/v0/mod.rs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs b/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs index 39ffb794c2..2c22025628 100644 --- a/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs +++ b/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs @@ -2,7 +2,7 @@ use crate::error::execution::ExecutionError; use crate::error::Error; use dashcore_rpc::dashcore::{ProTxHash, QuorumHash}; use dashcore_rpc::dashcore_rpc_json::MasternodeListItem; -use dpp::block::epoch::{Epoch, EpochIndex, EPOCH_0}; +use dpp::block::epoch::{Epoch, EPOCH_0}; use dpp::block::extended_block_info::ExtendedBlockInfo; use dpp::bincode::{Decode, Encode}; @@ -58,9 +58,6 @@ pub struct PlatformStateV0 { /// current HPMN masternode list pub hpmn_masternode_list: BTreeMap, - - /// Epoch change fee versions - pub epoch_change_fee_versions: BTreeMap, } impl Debug for PlatformStateV0 { @@ -226,8 +223,6 @@ impl From for PlatformStateV0 { .into_iter() .map(|(k, v)| (ProTxHash::from_byte_array(k.to_buffer()), v.into())) .collect(), - // TODO: Check if we need to store in PlatformStateForSavingV0? - epoch_change_fee_versions: BTreeMap::new(), } } } @@ -259,8 +254,6 @@ impl PlatformStateV0 { full_masternode_list: Default::default(), hpmn_masternode_list: Default::default(), genesis_block_info: None, - // TODO: Check if we need to store in PlatformStateForSavingV0? - epoch_change_fee_versions: BTreeMap::default(), }; Ok(state) From 952bd5809fae9c87d871086fd4eeb3448a8471ea Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 27 Jun 2024 20:07:13 +0300 Subject: [PATCH 18/47] renamed variable --- .../fetch_identity_balance_with_keys/v0/mod.rs | 12 ++++++------ .../fetch_identity_with_balance/v0/mod.rs | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_balance_with_keys/v0/mod.rs b/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_balance_with_keys/v0/mod.rs index 6ebf9f1130..3c420ee17e 100644 --- a/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_balance_with_keys/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_balance_with_keys/v0/mod.rs @@ -78,12 +78,12 @@ impl Drive { transaction: TransactionArg, platform_version: &PlatformVersion, ) -> Result<(Option, FeeResult), Error> { - let read_guard = self.cache.cached_fee_version.read(); + let cached_fee_version = self.cache.cached_fee_version.read(); let balance_cost = - epoch.cost_for_known_cost_item(&read_guard, FetchIdentityBalanceProcessingCost); + epoch.cost_for_known_cost_item(&cached_fee_version, FetchIdentityBalanceProcessingCost); if !apply { - let read_guard = self.cache.cached_fee_version.read(); - let keys_cost = identity_key_request.processing_cost(epoch, &read_guard)?; + let cached_fee_version = self.cache.cached_fee_version.read(); + let keys_cost = identity_key_request.processing_cost(epoch, &cached_fee_version)?; return Ok(( None, FeeResult::new_from_processing_fee(balance_cost + keys_cost), @@ -100,8 +100,8 @@ impl Drive { return Ok((None, FeeResult::new_from_processing_fee(balance_cost))); }; - let read_guard = self.cache.cached_fee_version.read(); - let keys_cost = identity_key_request.processing_cost(epoch, &read_guard)?; + let cached_fee_version = self.cache.cached_fee_version.read(); + let keys_cost = identity_key_request.processing_cost(epoch, &cached_fee_version)?; let loaded_public_keys = self.fetch_identity_keys::( identity_key_request, diff --git a/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_with_balance/v0/mod.rs b/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_with_balance/v0/mod.rs index b6e2856485..1473465c9d 100644 --- a/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_with_balance/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_with_balance/v0/mod.rs @@ -50,9 +50,9 @@ impl Drive { transaction: TransactionArg, platform_version: &PlatformVersion, ) -> Result<(Option, FeeResult), Error> { - let read_guard = self.cache.cached_fee_version.read(); + let cached_fee_version = self.cache.cached_fee_version.read(); let balance_cost = - epoch.cost_for_known_cost_item(&read_guard, FetchIdentityBalanceProcessingCost); + epoch.cost_for_known_cost_item(&cached_fee_version, FetchIdentityBalanceProcessingCost); if !apply { return Ok((None, FeeResult::new_from_processing_fee(balance_cost))); } From e63b13864c8e85e3107868dbed06fcfe51988b1e Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Fri, 28 Jun 2024 18:04:45 +0300 Subject: [PATCH 19/47] suggestions --- packages/rs-dpp/src/fee/default_costs/mod.rs | 17 ++++++++--------- packages/rs-dpp/src/fee/fee_result/refunds.rs | 6 +++--- packages/rs-dpp/src/lib.rs | 5 +++++ packages/rs-drive/src/drive/cache.rs | 5 ++--- .../epochs/get_epochs_protocol_versions/mod.rs | 3 ++- .../get_epochs_protocol_versions/v0/mod.rs | 5 +++-- .../rs-drive/src/drive/document/delete/mod.rs | 5 ++--- .../rs-drive/src/drive/document/insert/mod.rs | 5 ++--- .../rs-drive/src/drive/document/update/mod.rs | 5 ++--- .../rs-drive/src/drive/fee/calculate_fee/mod.rs | 7 +++---- .../src/drive/fee/calculate_fee/v0/mod.rs | 7 +++---- .../src/drive/identity/key/fetch/mod.rs | 5 ++--- packages/rs-drive/src/fee/op.rs | 15 +++++++-------- 13 files changed, 44 insertions(+), 46 deletions(-) diff --git a/packages/rs-dpp/src/fee/default_costs/mod.rs b/packages/rs-dpp/src/fee/default_costs/mod.rs index 1c5b960aa5..2d079e7656 100644 --- a/packages/rs-dpp/src/fee/default_costs/mod.rs +++ b/packages/rs-dpp/src/fee/default_costs/mod.rs @@ -33,11 +33,10 @@ //! use crate::block::epoch::Epoch; -use crate::block::epoch::EpochIndex; use crate::fee::Credits; +use crate::prelude::CachedEpochIndexFeeVersions; use platform_version::version::fee::FeeVersion; use platform_version::version::PlatformVersion; -use std::collections::BTreeMap; pub mod constants; @@ -127,10 +126,10 @@ impl KnownCostItem { } } - pub fn lookup_cost_on_epoch( + pub fn lookup_cost_on_epoch( &self, - epoch: &Epoch, - cached_fee_version: &BTreeMap, + epoch: &T, + cached_fee_version: &CachedEpochIndexFeeVersions, ) -> Credits { let version = epoch.active_fee_version(cached_fee_version); self.lookup_cost(version) @@ -143,12 +142,12 @@ pub trait EpochCosts { /// This is where the base costs last changed fn active_fee_version( &self, - cached_fee_version: &BTreeMap, + cached_fee_version: &CachedEpochIndexFeeVersions, ) -> &'static FeeVersion; /// Get the cost for the known cost item fn cost_for_known_cost_item( &self, - cached_fee_version: &BTreeMap, + cached_fee_version: &CachedEpochIndexFeeVersions, cost_item: KnownCostItem, ) -> Credits; } @@ -157,7 +156,7 @@ impl EpochCosts for Epoch { /// Get the active fee version for an epoch fn active_fee_version( &self, - cached_fee_version: &BTreeMap, + cached_fee_version: &CachedEpochIndexFeeVersions, ) -> &'static FeeVersion { // If the exact EpochIndex is matching to a FeeVersion update if let Some(fee_version) = cached_fee_version.get(&self.index) { @@ -174,7 +173,7 @@ impl EpochCosts for Epoch { /// Get the cost for the known cost item fn cost_for_known_cost_item( &self, - cached_fee_version: &BTreeMap, + cached_fee_version: &CachedEpochIndexFeeVersions, cost_item: KnownCostItem, ) -> Credits { cost_item.lookup_cost_on_epoch(self, cached_fee_version) diff --git a/packages/rs-dpp/src/fee/fee_result/refunds.rs b/packages/rs-dpp/src/fee/fee_result/refunds.rs index 936932fc51..359b234228 100644 --- a/packages/rs-dpp/src/fee/fee_result/refunds.rs +++ b/packages/rs-dpp/src/fee/fee_result/refunds.rs @@ -12,9 +12,9 @@ use crate::fee::Credits; use crate::ProtocolError; use bincode::{Decode, Encode}; +use crate::prelude::CachedEpochIndexFeeVersions; use lazy_static::lazy_static; use platform_value::Identifier; -use platform_version::version::fee::FeeVersion; use platform_version::version::PlatformVersion; use serde::{Deserialize, Serialize}; use std::collections::btree_map::Iter; @@ -41,7 +41,7 @@ impl FeeRefunds { storage_removal: I, current_epoch_index: EpochIndex, epochs_per_era: u16, - cached_fee_version: &BTreeMap, + cached_fee_version: &CachedEpochIndexFeeVersions, ) -> Result where I: IntoIterator, @@ -173,7 +173,7 @@ impl FeeRefunds { } lazy_static! { - static ref EPOCH_CHANGE_FEE_VERSION_TEST: BTreeMap = + static ref EPOCH_CHANGE_FEE_VERSION_TEST: CachedEpochIndexFeeVersions = BTreeMap::from([(0, &PlatformVersion::first().fee_version)]); } diff --git a/packages/rs-dpp/src/lib.rs b/packages/rs-dpp/src/lib.rs index c9eb000abb..e8a9346533 100644 --- a/packages/rs-dpp/src/lib.rs +++ b/packages/rs-dpp/src/lib.rs @@ -55,6 +55,7 @@ pub use async_trait; pub use bls::*; pub mod prelude { + use crate::block::epoch::EpochIndex; pub use crate::data_contract::DataContract; #[cfg(feature = "extended-document")] pub use crate::document::ExtendedDocument; @@ -65,6 +66,8 @@ pub mod prelude { pub use crate::identity::IdentityPublicKey; #[cfg(feature = "validation")] pub use crate::validation::ConsensusValidationResult; + use platform_version::version::fee::FeeVersion; + use std::collections::BTreeMap; pub type BlockHeight = u64; @@ -76,6 +79,8 @@ pub mod prelude { /// UserFeeIncrease is the additional percentage of the processing fee. /// A 1 here means we pay 1% more in processing fees. A 100 means we pay 100% more. pub type UserFeeIncrease = u16; + + pub type CachedEpochIndexFeeVersions = BTreeMap; } pub use bincode; diff --git a/packages/rs-drive/src/drive/cache.rs b/packages/rs-drive/src/drive/cache.rs index fdbec68716..35a2e64f63 100644 --- a/packages/rs-drive/src/drive/cache.rs +++ b/packages/rs-drive/src/drive/cache.rs @@ -6,8 +6,7 @@ mod protocol_version; mod system_contracts; pub use data_contract::DataContractCache; -use dpp::block::epoch::EpochIndex; -use platform_version::version::fee::FeeVersion; +use dpp::prelude::CachedEpochIndexFeeVersions; pub use protocol_version::ProtocolVersionsCache; pub use system_contracts::SystemDataContracts; @@ -24,5 +23,5 @@ pub struct DriveCache { /// Versioned system data contracts pub system_data_contracts: SystemDataContracts, /// Cached Epoch changed FeeVersion - pub cached_fee_version: parking_lot::RwLock>, + pub cached_fee_version: parking_lot::RwLock, } diff --git a/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/mod.rs b/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/mod.rs index 76a9d1b834..bd8346de00 100644 --- a/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/mod.rs +++ b/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/mod.rs @@ -3,6 +3,7 @@ mod v0; use crate::drive::Drive; use crate::error::drive::DriveError; use crate::error::Error; +use std::collections::BTreeMap; use dpp::block::epoch::EpochIndex; use dpp::util::deserializer::ProtocolVersion; @@ -20,7 +21,7 @@ impl Drive { ascending: bool, transaction: TransactionArg, platform_version: &PlatformVersion, - ) -> Result, Error> { + ) -> Result, Error> { match platform_version .drive .methods diff --git a/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs b/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs index 6e8d10fc4b..2f71117c7f 100644 --- a/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs +++ b/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs @@ -7,6 +7,7 @@ use dpp::ProtocolError; use grovedb::query_result_type::{QueryResultElement, QueryResultType}; use grovedb::{Element, PathQuery, Query, SizedQuery, TransactionArg}; use nohash_hasher::IntMap; +use std::collections::BTreeMap; use crate::drive::credit_pools::pools_vec_path; use crate::error::query::QuerySyntaxError; @@ -22,7 +23,7 @@ impl Drive { ascending: bool, transaction: TransactionArg, platform_version: &PlatformVersion, - ) -> Result, Error> { + ) -> Result, Error> { if let Some(count) = count { if count > 16383 { return Err(Error::Query(QuerySyntaxError::InvalidLimit(format!( @@ -61,7 +62,7 @@ impl Drive { )? .0; - let mut map: IntMap = IntMap::default(); + let mut map: BTreeMap = BTreeMap::default(); for result_item in results.elements.into_iter() { if let QueryResultElement::PathKeyElementTrioResultItem(( diff --git a/packages/rs-drive/src/drive/document/delete/mod.rs b/packages/rs-drive/src/drive/document/delete/mod.rs index a3e5c76a03..4b30d7a144 100644 --- a/packages/rs-drive/src/drive/document/delete/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/mod.rs @@ -3,9 +3,8 @@ //! This module implements functions in Drive for deleting documents. //! -use dpp::block::epoch::EpochIndex; +use dpp::prelude::CachedEpochIndexFeeVersions; use lazy_static::lazy_static; -use platform_version::version::fee::FeeVersion; use platform_version::version::PlatformVersion; use std::collections::BTreeMap; @@ -52,7 +51,7 @@ mod delete_document_for_contract_operations; mod internal; lazy_static! { - static ref EPOCH_CHANGE_FEE_VERSION_TEST: BTreeMap = + static ref EPOCH_CHANGE_FEE_VERSION_TEST: CachedEpochIndexFeeVersions = BTreeMap::from([(0, &PlatformVersion::first().fee_version)]); } diff --git a/packages/rs-drive/src/drive/document/insert/mod.rs b/packages/rs-drive/src/drive/document/insert/mod.rs index a5c5faf084..fe0bab1925 100644 --- a/packages/rs-drive/src/drive/document/insert/mod.rs +++ b/packages/rs-drive/src/drive/document/insert/mod.rs @@ -64,19 +64,18 @@ mod add_indices_for_top_index_level_for_contract_operations; // This module contains functionality for adding a reference for an index level for contract operations mod add_reference_for_index_level_for_contract_operations; -use dpp::block::epoch::EpochIndex; #[cfg(all( feature = "fixtures-and-mocks", feature = "data-contract-cbor-conversion" ))] use dpp::data_contract::conversion::cbor::DataContractCborConversionMethodsV0; +use dpp::prelude::CachedEpochIndexFeeVersions; use lazy_static::lazy_static; -use platform_version::version::fee::FeeVersion; use platform_version::version::PlatformVersion; use std::collections::BTreeMap; lazy_static! { - static ref EPOCH_CHANGE_FEE_VERSION_TEST: BTreeMap = + static ref EPOCH_CHANGE_FEE_VERSION_TEST: CachedEpochIndexFeeVersions = BTreeMap::from([(0, &PlatformVersion::first().fee_version)]); } diff --git a/packages/rs-drive/src/drive/document/update/mod.rs b/packages/rs-drive/src/drive/document/update/mod.rs index 0021c090fe..b526a9499b 100644 --- a/packages/rs-drive/src/drive/document/update/mod.rs +++ b/packages/rs-drive/src/drive/document/update/mod.rs @@ -32,9 +32,8 @@ //! This modules implements functions in Drive relevant to updating Documents. //! -use dpp::block::epoch::EpochIndex; +use dpp::prelude::CachedEpochIndexFeeVersions; use lazy_static::lazy_static; -use platform_version::version::fee::FeeVersion; use platform_version::version::PlatformVersion; use std::collections::BTreeMap; @@ -59,7 +58,7 @@ mod internal; mod update_document_with_serialization_for_contract; lazy_static! { - static ref EPOCH_CHANGE_FEE_VERSION_TEST: BTreeMap = + static ref EPOCH_CHANGE_FEE_VERSION_TEST: CachedEpochIndexFeeVersions = BTreeMap::from([(0, &PlatformVersion::first().fee_version)]); } diff --git a/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs b/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs index 3235d9dc4f..a85412ed2a 100644 --- a/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs +++ b/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs @@ -2,12 +2,11 @@ use crate::drive::Drive; use crate::error::drive::DriveError; use crate::error::Error; use crate::fee::op::{BaseOp, LowLevelDriveOperation}; -use dpp::block::epoch::{Epoch, EpochIndex}; +use dpp::block::epoch::Epoch; use dpp::fee::fee_result::FeeResult; +use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use enum_map::EnumMap; -use platform_version::version::fee::FeeVersion; -use std::collections::BTreeMap; mod v0; @@ -37,7 +36,7 @@ impl Drive { epoch: &Epoch, epochs_per_era: u16, platform_version: &PlatformVersion, - cached_fee_version: &BTreeMap, + cached_fee_version: &CachedEpochIndexFeeVersions, ) -> Result { match platform_version.drive.methods.fees.calculate_fee { 0 => Self::calculate_fee_v0( diff --git a/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs b/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs index d0af46f3cd..928d49d5a1 100644 --- a/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs +++ b/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs @@ -2,12 +2,11 @@ use crate::drive::Drive; use crate::error::fee::FeeError; use crate::error::Error; use crate::fee::op::{BaseOp, LowLevelDriveOperation}; -use dpp::block::epoch::{Epoch, EpochIndex}; +use dpp::block::epoch::Epoch; use dpp::fee::fee_result::FeeResult; -use std::collections::BTreeMap; +use dpp::prelude::CachedEpochIndexFeeVersions; use enum_map::EnumMap; -use platform_version::version::fee::FeeVersion; impl Drive { /// Calculates fees for the given operations. Returns the storage and processing costs. @@ -17,7 +16,7 @@ impl Drive { drive_operations: Option>, epoch: &Epoch, epochs_per_era: u16, - cached_fee_version: &BTreeMap, + cached_fee_version: &CachedEpochIndexFeeVersions, ) -> Result { let mut aggregate_fee_result = FeeResult::default(); if let Some(base_operations) = base_operations { diff --git a/packages/rs-drive/src/drive/identity/key/fetch/mod.rs b/packages/rs-drive/src/drive/identity/key/fetch/mod.rs index eae378c699..c732961768 100644 --- a/packages/rs-drive/src/drive/identity/key/fetch/mod.rs +++ b/packages/rs-drive/src/drive/identity/key/fetch/mod.rs @@ -27,8 +27,7 @@ use { }; // Conditional imports for the feature "server" -use dpp::block::epoch::EpochIndex; -use platform_version::version::fee::FeeVersion; +use dpp::prelude::CachedEpochIndexFeeVersions; #[cfg(feature = "server")] use { crate::error::{drive::DriveError, fee::FeeError, identity::IdentityError, Error}, @@ -658,7 +657,7 @@ impl IdentityKeysRequest { pub fn processing_cost( &self, epoch: &Epoch, - cached_fee_version: &BTreeMap, + cached_fee_version: &CachedEpochIndexFeeVersions, ) -> Result { // Good match &self.request_type { diff --git a/packages/rs-drive/src/fee/op.rs b/packages/rs-drive/src/fee/op.rs index 1da804d3fd..2487011d87 100644 --- a/packages/rs-drive/src/fee/op.rs +++ b/packages/rs-drive/src/fee/op.rs @@ -3,7 +3,6 @@ use grovedb_costs::storage_cost::removal::Identifier; use grovedb_costs::storage_cost::removal::StorageRemovedBytes::{ BasicStorageRemoval, NoStorageRemoval, SectionedStorageRemoval, }; -use std::collections::BTreeMap; use enum_map::Enum; use grovedb::batch::key_info::KeyInfo; @@ -21,7 +20,7 @@ use crate::error::Error; use crate::fee::op::LowLevelDriveOperation::{ CalculatedCostOperation, FunctionOperation, GroveOperation, PreCalculatedFeeResult, }; -use dpp::block::epoch::{Epoch, EpochIndex}; +use dpp::block::epoch::Epoch; use dpp::fee::default_costs::EpochCosts; use dpp::fee::default_costs::KnownCostItem::{ StorageDiskUsageCreditPerByte, StorageLoadCreditPerByte, StorageProcessingCreditPerByte, @@ -29,7 +28,7 @@ use dpp::fee::default_costs::KnownCostItem::{ }; use dpp::fee::fee_result::refunds::FeeRefunds; use dpp::fee::fee_result::FeeResult; -use platform_version::version::fee::FeeVersion; +use dpp::prelude::CachedEpochIndexFeeVersions; /// Base ops #[derive(Debug, Enum)] @@ -205,7 +204,7 @@ impl LowLevelDriveOperation { drive_operation: Vec, epoch: &Epoch, epochs_per_era: u16, - cached_fee_version: &BTreeMap, + cached_fee_version: &CachedEpochIndexFeeVersions, ) -> Result, Error> { drive_operation .into_iter() @@ -412,13 +411,13 @@ pub trait DriveCost { fn ephemeral_cost( &self, epoch: &Epoch, - cached_fee_version: &BTreeMap, + cached_fee_version: &CachedEpochIndexFeeVersions, ) -> Result; /// Storage cost fn storage_cost( &self, epoch: &Epoch, - cached_fee_version: &BTreeMap, + cached_fee_version: &CachedEpochIndexFeeVersions, ) -> Result; } @@ -427,7 +426,7 @@ impl DriveCost for OperationCost { fn ephemeral_cost( &self, epoch: &Epoch, - cached_fee_version: &BTreeMap, + cached_fee_version: &CachedEpochIndexFeeVersions, ) -> Result { //todo: deal with epochs let OperationCost { @@ -473,7 +472,7 @@ impl DriveCost for OperationCost { fn storage_cost( &self, epoch: &Epoch, - cached_fee_version: &BTreeMap, + cached_fee_version: &CachedEpochIndexFeeVersions, ) -> Result { //todo: deal with epochs let OperationCost { storage_cost, .. } = self; From 9f3b13b16dec78a5bcbaad6627611ec4fc765fa3 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Fri, 28 Jun 2024 18:23:04 +0300 Subject: [PATCH 20/47] more work --- packages/rs-dpp/src/fee/fee_result/refunds.rs | 10 ++++---- .../rs-drive/src/drive/document/delete/mod.rs | 19 +++++++-------- .../rs-drive/src/drive/document/insert/mod.rs | 23 ++++++++----------- .../rs-drive/src/drive/document/update/mod.rs | 22 ++++++++---------- .../src/drive/identity/key/fetch/mod.rs | 2 +- 5 files changed, 33 insertions(+), 43 deletions(-) diff --git a/packages/rs-dpp/src/fee/fee_result/refunds.rs b/packages/rs-dpp/src/fee/fee_result/refunds.rs index 359b234228..d8d7d76ed9 100644 --- a/packages/rs-dpp/src/fee/fee_result/refunds.rs +++ b/packages/rs-dpp/src/fee/fee_result/refunds.rs @@ -172,11 +172,6 @@ impl FeeRefunds { } } -lazy_static! { - static ref EPOCH_CHANGE_FEE_VERSION_TEST: CachedEpochIndexFeeVersions = - BTreeMap::from([(0, &PlatformVersion::first().fee_version)]); -} - impl IntoIterator for FeeRefunds { type Item = ([u8; 32], CreditsPerEpoch); type IntoIter = std::collections::btree_map::IntoIter<[u8; 32], CreditsPerEpoch>; @@ -190,6 +185,11 @@ impl IntoIterator for FeeRefunds { mod tests { use super::*; + lazy_static! { + static ref EPOCH_CHANGE_FEE_VERSION_TEST: CachedEpochIndexFeeVersions = + BTreeMap::from([(0, &PlatformVersion::first().fee_version)]); + } + mod from_storage_removal { use super::*; use nohash_hasher::IntMap; diff --git a/packages/rs-drive/src/drive/document/delete/mod.rs b/packages/rs-drive/src/drive/document/delete/mod.rs index 4b30d7a144..34e53ab1a7 100644 --- a/packages/rs-drive/src/drive/document/delete/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/mod.rs @@ -3,11 +3,6 @@ //! This module implements functions in Drive for deleting documents. //! -use dpp::prelude::CachedEpochIndexFeeVersions; -use lazy_static::lazy_static; -use platform_version::version::PlatformVersion; -use std::collections::BTreeMap; - // Module: delete_document_for_contract // This module contains functionality for deleting a document associated with a given contract mod delete_document_for_contract; @@ -50,11 +45,6 @@ mod delete_document_for_contract_operations; mod internal; -lazy_static! { - static ref EPOCH_CHANGE_FEE_VERSION_TEST: CachedEpochIndexFeeVersions = - BTreeMap::from([(0, &PlatformVersion::first().fee_version)]); -} - #[cfg(feature = "server")] #[cfg(test)] mod tests { @@ -62,7 +52,9 @@ mod tests { use dpp::block::block_info::BlockInfo; use rand::Rng; + use lazy_static::lazy_static; use std::borrow::Cow; + use std::collections::BTreeMap; use std::option::Option::None; use tempfile::TempDir; @@ -81,12 +73,17 @@ mod tests { use dpp::document::Document; use dpp::fee::default_costs::EpochCosts; use dpp::fee::default_costs::KnownCostItem::StorageDiskUsageCreditPerByte; + use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::tests::json_document::{json_document_to_contract, json_document_to_document}; - use crate::drive::document::delete::EPOCH_CHANGE_FEE_VERSION_TEST; use crate::tests::helpers::setup::setup_drive_with_initial_state_structure; use dpp::version::PlatformVersion; + lazy_static! { + static ref EPOCH_CHANGE_FEE_VERSION_TEST: CachedEpochIndexFeeVersions = + BTreeMap::from([(0, &PlatformVersion::first().fee_version)]); + } + #[test] fn test_add_and_remove_family_one_document_no_transaction() { let tmp_dir = TempDir::new().unwrap(); diff --git a/packages/rs-drive/src/drive/document/insert/mod.rs b/packages/rs-drive/src/drive/document/insert/mod.rs index fe0bab1925..a386f4c615 100644 --- a/packages/rs-drive/src/drive/document/insert/mod.rs +++ b/packages/rs-drive/src/drive/document/insert/mod.rs @@ -69,23 +69,15 @@ mod add_reference_for_index_level_for_contract_operations; feature = "data-contract-cbor-conversion" ))] use dpp::data_contract::conversion::cbor::DataContractCborConversionMethodsV0; -use dpp::prelude::CachedEpochIndexFeeVersions; -use lazy_static::lazy_static; -use platform_version::version::PlatformVersion; -use std::collections::BTreeMap; - -lazy_static! { - static ref EPOCH_CHANGE_FEE_VERSION_TEST: CachedEpochIndexFeeVersions = - BTreeMap::from([(0, &PlatformVersion::first().fee_version)]); -} #[cfg(test)] mod tests { - use std::borrow::Cow; - use std::option::Option::None; - use dpp::block::block_info::BlockInfo; + use lazy_static::lazy_static; use rand::{random, Rng}; + use std::borrow::Cow; + use std::collections::BTreeMap; + use std::option::Option::None; use crate::common::setup_contract; use crate::drive::document::tests::setup_dashpay; @@ -97,17 +89,22 @@ mod tests { use dpp::data_contract::accessors::v0::DataContractV0Getters; use dpp::document::Document; - use crate::drive::document::insert::EPOCH_CHANGE_FEE_VERSION_TEST; use crate::drive::object_size_info::DocumentInfo::DocumentRefInfo; use crate::tests::helpers::setup::setup_drive_with_initial_state_structure; use dpp::document::serialization_traits::DocumentCborMethodsV0; use dpp::fee::default_costs::EpochCosts; use dpp::fee::default_costs::KnownCostItem::StorageDiskUsageCreditPerByte; use dpp::fee::fee_result::FeeResult; + use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::tests::fixtures::get_dpns_data_contract_fixture; use dpp::tests::json_document::json_document_to_document; use dpp::version::PlatformVersion; + lazy_static! { + static ref EPOCH_CHANGE_FEE_VERSION_TEST: CachedEpochIndexFeeVersions = + BTreeMap::from([(0, &PlatformVersion::first().fee_version)]); + } + #[test] fn test_add_dashpay_documents_no_transaction() { let (drive, dashpay) = setup_dashpay("add", true); diff --git a/packages/rs-drive/src/drive/document/update/mod.rs b/packages/rs-drive/src/drive/document/update/mod.rs index b526a9499b..fef3d22751 100644 --- a/packages/rs-drive/src/drive/document/update/mod.rs +++ b/packages/rs-drive/src/drive/document/update/mod.rs @@ -32,11 +32,6 @@ //! This modules implements functions in Drive relevant to updating Documents. //! -use dpp::prelude::CachedEpochIndexFeeVersions; -use lazy_static::lazy_static; -use platform_version::version::PlatformVersion; -use std::collections::BTreeMap; - // Module: add_update_multiple_documents_operations // This module contains functionality for adding operations to update multiple documents #[cfg(feature = "server")] @@ -57,20 +52,16 @@ mod update_document_for_contract_id; mod internal; mod update_document_with_serialization_for_contract; -lazy_static! { - static ref EPOCH_CHANGE_FEE_VERSION_TEST: CachedEpochIndexFeeVersions = - BTreeMap::from([(0, &PlatformVersion::first().fee_version)]); -} - #[cfg(test)] mod tests { + use dpp::data_contract::{DataContract, DataContractFactory}; use grovedb::TransactionArg; + use lazy_static::lazy_static; use std::borrow::Cow; + use std::collections::BTreeMap; use std::default::Default; use std::option::Option::None; - use dpp::data_contract::{DataContract, DataContractFactory}; - use dpp::platform_value::{platform_value, Identifier, Value}; use dpp::block::block_info::BlockInfo; @@ -88,7 +79,6 @@ mod tests { use crate::common::setup_contract; use crate::drive::document::tests::setup_dashpay; - use crate::drive::document::update::EPOCH_CHANGE_FEE_VERSION_TEST; use crate::query::DriveQuery; use crate::tests::helpers::setup::{setup_drive, setup_drive_with_initial_state_structure}; use dpp::block::epoch::Epoch; @@ -104,9 +94,15 @@ mod tests { use dpp::fee::default_costs::KnownCostItem::StorageDiskUsageCreditPerByte; use dpp::fee::fee_result::FeeResult; use dpp::platform_value; + use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::tests::json_document::json_document_to_document; use platform_version::version::PlatformVersion; + lazy_static! { + static ref EPOCH_CHANGE_FEE_VERSION_TEST: CachedEpochIndexFeeVersions = + BTreeMap::from([(0, &PlatformVersion::first().fee_version)]); + } + #[test] fn test_create_and_update_document_same_transaction() { let (drive, contract) = setup_dashpay("", true); diff --git a/packages/rs-drive/src/drive/identity/key/fetch/mod.rs b/packages/rs-drive/src/drive/identity/key/fetch/mod.rs index c732961768..7b2830aa92 100644 --- a/packages/rs-drive/src/drive/identity/key/fetch/mod.rs +++ b/packages/rs-drive/src/drive/identity/key/fetch/mod.rs @@ -27,7 +27,6 @@ use { }; // Conditional imports for the feature "server" -use dpp::prelude::CachedEpochIndexFeeVersions; #[cfg(feature = "server")] use { crate::error::{drive::DriveError, fee::FeeError, identity::IdentityError, Error}, @@ -38,6 +37,7 @@ use { Credits, }, identity::{IdentityPublicKey, SecurityLevel}, + prelude::CachedEpochIndexFeeVersions, serialization::PlatformDeserializable, version::PlatformVersion, }, From 0121c9e0568b128d1306d252446bd01af1cd37ae Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Fri, 28 Jun 2024 19:00:32 +0300 Subject: [PATCH 21/47] comments --- .../protocol_upgrade/upgrade_protocol_version/v0/mod.rs | 3 +++ .../src/drive/credit_pools/epochs/get_epochs_infos/v0/mod.rs | 1 + .../epochs/get_epochs_protocol_versions/v0/mod.rs | 1 + .../drive/credit_pools/epochs/prove_epochs_infos/v0/mod.rs | 1 + packages/rs-drive/src/drive/open/mod.rs | 4 ++++ 5 files changed, 10 insertions(+) diff --git a/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs index 9274e913b7..b41ed8bf7e 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs @@ -79,13 +79,16 @@ impl Platform { let platform_version = PlatformVersion::get(current_block_protocol_version)?; let mut cached_fee_version = self.drive.cache.cached_fee_version.write(); + // If cached_fee_version is non-empty if let Some((_, &last_fee_version)) = cached_fee_version.iter().last() { + // Insert the new (epoch_index, fee_version) only if the new fee_version is different from the last_fee_version. if *last_fee_version != platform_version.fee_version { cached_fee_version.insert( epoch_info.current_epoch_index(), &platform_version.fee_version, ); } + // In case of empty cached_fee_version, insert the new (epoch_index, fee_version) } else { cached_fee_version.insert( epoch_info.current_epoch_index(), diff --git a/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_infos/v0/mod.rs b/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_infos/v0/mod.rs index 3fa8a0c9e7..ee67b16a43 100644 --- a/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_infos/v0/mod.rs +++ b/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_infos/v0/mod.rs @@ -28,6 +28,7 @@ impl Drive { transaction: TransactionArg, platform_version: &PlatformVersion, ) -> Result, Error> { + // TODO: We should avoid magic numbers. For now we are good since count refers to the number of epochs to fetch. With 40 epochs/year, this value is way safe atm. if count > 16383 { return Err(Error::Query(QuerySyntaxError::InvalidLimit(format!( "get_epochs_infos_v0 count too high {}", diff --git a/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs b/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs index 2f71117c7f..5f06aa4782 100644 --- a/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs +++ b/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs @@ -25,6 +25,7 @@ impl Drive { platform_version: &PlatformVersion, ) -> Result, Error> { if let Some(count) = count { + // TODO: We should avoid magic numbers. For now we are good since count refers to the number of epochs to fetch. With 40 epochs/year, this value is way safe atm. if count > 16383 { return Err(Error::Query(QuerySyntaxError::InvalidLimit(format!( "get_epochs_protocol_versions_v0 count too high {}", diff --git a/packages/rs-drive/src/drive/credit_pools/epochs/prove_epochs_infos/v0/mod.rs b/packages/rs-drive/src/drive/credit_pools/epochs/prove_epochs_infos/v0/mod.rs index 0417318cb1..55f1b1da0b 100644 --- a/packages/rs-drive/src/drive/credit_pools/epochs/prove_epochs_infos/v0/mod.rs +++ b/packages/rs-drive/src/drive/credit_pools/epochs/prove_epochs_infos/v0/mod.rs @@ -25,6 +25,7 @@ impl Drive { transaction: TransactionArg, platform_version: &PlatformVersion, ) -> Result, Error> { + // TODO: We should avoid magic numbers. For now we are good since count refers to the number of epochs to fetch. With 40 epochs/year, this value is way safe atm. if count > 16383 { return Err(Error::Query(QuerySyntaxError::InvalidLimit(format!( "get_epochs_infos_v0 count too high {}", diff --git a/packages/rs-drive/src/drive/open/mod.rs b/packages/rs-drive/src/drive/open/mod.rs index 3915fbf3ec..811843b03b 100644 --- a/packages/rs-drive/src/drive/open/mod.rs +++ b/packages/rs-drive/src/drive/open/mod.rs @@ -82,18 +82,22 @@ fn populate_cached_fee_version( let mut cached_fee_versions = drive.cache.cached_fee_version.write(); let mut last_fee_version_opt: Option<&FeeVersion> = None; + // Iterate all (epoch_index, protocol_version) for (epoch_index, protocol_version) in epochs_protocol_versions.iter() { let platform_version = PlatformVersion::get(*protocol_version).map_err(|e| { Error::Drive(DriveError::CorruptedCacheState(format!( "unable to get platform version {e}" ))) })?; + // Load the corresponding PlatformVersion from the protocol_version if let Some(last_fee_version) = last_fee_version_opt { + // Insert the (epoch_index, fee_version) only if the fee_version is different from the last_fee_version. if *last_fee_version != platform_version.fee_version { last_fee_version_opt = Some(&platform_version.fee_version); cached_fee_versions.insert(*epoch_index, &platform_version.fee_version); } } else { + // If last_fee_version_opt is none, insert anyway last_fee_version_opt = Some(&platform_version.fee_version); cached_fee_versions.insert(*epoch_index, &platform_version.fee_version); } From dfca1bdd00b3902b20496fc4c064bc2e6a669875 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Sat, 29 Jun 2024 12:03:31 +0300 Subject: [PATCH 22/47] clippy --- packages/rs-dpp/src/fee/fee_result/refunds.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/rs-dpp/src/fee/fee_result/refunds.rs b/packages/rs-dpp/src/fee/fee_result/refunds.rs index d8d7d76ed9..e21850ff69 100644 --- a/packages/rs-dpp/src/fee/fee_result/refunds.rs +++ b/packages/rs-dpp/src/fee/fee_result/refunds.rs @@ -13,9 +13,7 @@ use crate::ProtocolError; use bincode::{Decode, Encode}; use crate::prelude::CachedEpochIndexFeeVersions; -use lazy_static::lazy_static; use platform_value::Identifier; -use platform_version::version::PlatformVersion; use serde::{Deserialize, Serialize}; use std::collections::btree_map::Iter; use std::collections::BTreeMap; @@ -184,6 +182,8 @@ impl IntoIterator for FeeRefunds { #[cfg(test)] mod tests { use super::*; + use lazy_static::lazy_static; + use platform_version::version::PlatformVersion; lazy_static! { static ref EPOCH_CHANGE_FEE_VERSION_TEST: CachedEpochIndexFeeVersions = From 28e42867bac4ee7005204019169bdfb484724f02 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Sat, 29 Jun 2024 12:41:45 +0300 Subject: [PATCH 23/47] more linter fixes --- packages/rs-drive/src/drive/cache.rs | 1 - .../credit_pools/epochs/get_epochs_protocol_versions/mod.rs | 1 - .../epochs/get_epochs_protocol_versions/v0/mod.rs | 1 - packages/rs-drive/src/drive/document/delete/mod.rs | 5 +---- 4 files changed, 1 insertion(+), 7 deletions(-) diff --git a/packages/rs-drive/src/drive/cache.rs b/packages/rs-drive/src/drive/cache.rs index 35a2e64f63..f4af9d1e5f 100644 --- a/packages/rs-drive/src/drive/cache.rs +++ b/packages/rs-drive/src/drive/cache.rs @@ -1,5 +1,4 @@ use dpp::identity::TimestampMillis; -use std::collections::BTreeMap; mod data_contract; mod protocol_version; diff --git a/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/mod.rs b/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/mod.rs index bd8346de00..de7a2652ab 100644 --- a/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/mod.rs +++ b/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/mod.rs @@ -8,7 +8,6 @@ use std::collections::BTreeMap; use dpp::block::epoch::EpochIndex; use dpp::util::deserializer::ProtocolVersion; use grovedb::TransactionArg; -use nohash_hasher::IntMap; use dpp::version::PlatformVersion; diff --git a/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs b/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs index 5f06aa4782..56b32f7518 100644 --- a/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs +++ b/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs @@ -6,7 +6,6 @@ use dpp::util::deserializer::ProtocolVersion; use dpp::ProtocolError; use grovedb::query_result_type::{QueryResultElement, QueryResultType}; use grovedb::{Element, PathQuery, Query, SizedQuery, TransactionArg}; -use nohash_hasher::IntMap; use std::collections::BTreeMap; use crate::drive::credit_pools::pools_vec_path; diff --git a/packages/rs-drive/src/drive/document/delete/mod.rs b/packages/rs-drive/src/drive/document/delete/mod.rs index 34e53ab1a7..5c4fbc506c 100644 --- a/packages/rs-drive/src/drive/document/delete/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/mod.rs @@ -811,7 +811,6 @@ mod tests { ) .expect("expected to insert a document successfully"); - // drive.cache let added_bytes = fee_result.storage_fee / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, @@ -848,7 +847,6 @@ mod tests { .unwrap(); assert_eq!(*removed_credits, 41881536); - // drive.cache let refund_equivalent_bytes = removed_credits.to_unsigned() / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, @@ -910,8 +908,7 @@ mod tests { platform_version, ) .expect("expected to insert a document successfully"); - - // drive.cache + let added_bytes = fee_result.storage_fee / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, From 1710dbd82751aae4bfee995dd21ab5cb44e5b6ec Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Sat, 29 Jun 2024 13:14:38 +0300 Subject: [PATCH 24/47] more suggestions --- Cargo.lock | 2 +- packages/rs-drive/Cargo.toml | 2 +- .../rs-drive/src/drive/document/delete/mod.rs | 10 ++++------ .../rs-drive/src/drive/document/insert/mod.rs | 19 ++++++++----------- .../rs-drive/src/drive/document/update/mod.rs | 8 +++----- 5 files changed, 17 insertions(+), 24 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 70957f8444..ebe72a4def 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1619,9 +1619,9 @@ dependencies = [ "integer-encoding", "intmap", "itertools 0.11.0", - "lazy_static", "moka", "nohash-hasher", + "once_cell", "parking_lot", "platform-version", "rand", diff --git a/packages/rs-drive/Cargo.toml b/packages/rs-drive/Cargo.toml index 39bf007c30..4eb4b6c7e0 100644 --- a/packages/rs-drive/Cargo.toml +++ b/packages/rs-drive/Cargo.toml @@ -49,7 +49,7 @@ grovedb = { git = "https://github.com/dashpay/grovedb", rev = "d9292aa20bd8f3bda grovedb-costs = { git = "https://github.com/dashpay/grovedb", rev = "d9292aa20bd8f3bda7c5d25d62db06ac341b0677", optional = true } grovedb-path = { git = "https://github.com/dashpay/grovedb", rev = "d9292aa20bd8f3bda7c5d25d62db06ac341b0677" } grovedb-storage = { git = "https://github.com/dashpay/grovedb", rev = "d9292aa20bd8f3bda7c5d25d62db06ac341b0677", optional = true } -lazy_static = "1.4.0" +once_cell = "1.7" [dev-dependencies] criterion = "0.3.5" diff --git a/packages/rs-drive/src/drive/document/delete/mod.rs b/packages/rs-drive/src/drive/document/delete/mod.rs index 5c4fbc506c..fffb347f3f 100644 --- a/packages/rs-drive/src/drive/document/delete/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/mod.rs @@ -52,7 +52,7 @@ mod tests { use dpp::block::block_info::BlockInfo; use rand::Rng; - use lazy_static::lazy_static; + use once_cell::sync::Lazy; use std::borrow::Cow; use std::collections::BTreeMap; use std::option::Option::None; @@ -79,10 +79,8 @@ mod tests { use crate::tests::helpers::setup::setup_drive_with_initial_state_structure; use dpp::version::PlatformVersion; - lazy_static! { - static ref EPOCH_CHANGE_FEE_VERSION_TEST: CachedEpochIndexFeeVersions = - BTreeMap::from([(0, &PlatformVersion::first().fee_version)]); - } + static EPOCH_CHANGE_FEE_VERSION_TEST: Lazy = + Lazy::new(|| BTreeMap::from([(0, &PlatformVersion::first().fee_version)])); #[test] fn test_add_and_remove_family_one_document_no_transaction() { @@ -908,7 +906,7 @@ mod tests { platform_version, ) .expect("expected to insert a document successfully"); - + let added_bytes = fee_result.storage_fee / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, diff --git a/packages/rs-drive/src/drive/document/insert/mod.rs b/packages/rs-drive/src/drive/document/insert/mod.rs index a386f4c615..e44f974107 100644 --- a/packages/rs-drive/src/drive/document/insert/mod.rs +++ b/packages/rs-drive/src/drive/document/insert/mod.rs @@ -72,18 +72,17 @@ use dpp::data_contract::conversion::cbor::DataContractCborConversionMethodsV0; #[cfg(test)] mod tests { - use dpp::block::block_info::BlockInfo; - use lazy_static::lazy_static; - use rand::{random, Rng}; - use std::borrow::Cow; - use std::collections::BTreeMap; - use std::option::Option::None; - use crate::common::setup_contract; use crate::drive::document::tests::setup_dashpay; use crate::drive::flags::StorageFlags; use crate::drive::object_size_info::{DocumentAndContractInfo, OwnedDocumentInfo}; use crate::fee::op::LowLevelDriveOperation; + use dpp::block::block_info::BlockInfo; + use once_cell::sync::Lazy; + use rand::{random, Rng}; + use std::borrow::Cow; + use std::collections::BTreeMap; + use std::option::Option::None; use dpp::block::epoch::Epoch; use dpp::data_contract::accessors::v0::DataContractV0Getters; @@ -100,10 +99,8 @@ mod tests { use dpp::tests::json_document::json_document_to_document; use dpp::version::PlatformVersion; - lazy_static! { - static ref EPOCH_CHANGE_FEE_VERSION_TEST: CachedEpochIndexFeeVersions = - BTreeMap::from([(0, &PlatformVersion::first().fee_version)]); - } + static EPOCH_CHANGE_FEE_VERSION_TEST: Lazy = + Lazy::new(|| BTreeMap::from([(0, &PlatformVersion::first().fee_version)])); #[test] fn test_add_dashpay_documents_no_transaction() { diff --git a/packages/rs-drive/src/drive/document/update/mod.rs b/packages/rs-drive/src/drive/document/update/mod.rs index fef3d22751..13babbfa6b 100644 --- a/packages/rs-drive/src/drive/document/update/mod.rs +++ b/packages/rs-drive/src/drive/document/update/mod.rs @@ -56,7 +56,6 @@ mod update_document_with_serialization_for_contract; mod tests { use dpp::data_contract::{DataContract, DataContractFactory}; use grovedb::TransactionArg; - use lazy_static::lazy_static; use std::borrow::Cow; use std::collections::BTreeMap; use std::default::Default; @@ -96,12 +95,11 @@ mod tests { use dpp::platform_value; use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::tests::json_document::json_document_to_document; + use once_cell::sync::Lazy; use platform_version::version::PlatformVersion; - lazy_static! { - static ref EPOCH_CHANGE_FEE_VERSION_TEST: CachedEpochIndexFeeVersions = - BTreeMap::from([(0, &PlatformVersion::first().fee_version)]); - } + static EPOCH_CHANGE_FEE_VERSION_TEST: Lazy = + Lazy::new(|| BTreeMap::from([(0, &PlatformVersion::first().fee_version)])); #[test] fn test_create_and_update_document_same_transaction() { From 09f3c14e19bc4c8a51e1550b347351d813a65392 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Sat, 29 Jun 2024 19:07:12 +0300 Subject: [PATCH 25/47] suggestion --- Cargo.lock | 1 + packages/rs-dpp/Cargo.toml | 1 + packages/rs-dpp/src/fee/fee_result/refunds.rs | 8 +++----- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ebe72a4def..5c9e5ddd69 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1576,6 +1576,7 @@ dependencies = [ "log", "nohash-hasher", "num_enum", + "once_cell", "platform-serialization", "platform-serialization-derive", "platform-value", diff --git a/packages/rs-dpp/Cargo.toml b/packages/rs-dpp/Cargo.toml index da94abc573..6b25f305df 100644 --- a/packages/rs-dpp/Cargo.toml +++ b/packages/rs-dpp/Cargo.toml @@ -66,6 +66,7 @@ rust_decimal_macros = "1.29.1" indexmap = { version = "2.0.2", features = ["serde"] } strum = { version = "0.25.0", features = ["derive"] } json-schema-compatibility-validator = { path = '../rs-json-schema-compatibility-validator' } +once_cell = "1.7" [dev-dependencies] test-case = { version = "2.0" } diff --git a/packages/rs-dpp/src/fee/fee_result/refunds.rs b/packages/rs-dpp/src/fee/fee_result/refunds.rs index e21850ff69..fa41f0ae55 100644 --- a/packages/rs-dpp/src/fee/fee_result/refunds.rs +++ b/packages/rs-dpp/src/fee/fee_result/refunds.rs @@ -182,13 +182,11 @@ impl IntoIterator for FeeRefunds { #[cfg(test)] mod tests { use super::*; - use lazy_static::lazy_static; + use once_cell::sync::Lazy; use platform_version::version::PlatformVersion; - lazy_static! { - static ref EPOCH_CHANGE_FEE_VERSION_TEST: CachedEpochIndexFeeVersions = - BTreeMap::from([(0, &PlatformVersion::first().fee_version)]); - } + static EPOCH_CHANGE_FEE_VERSION_TEST: Lazy = + Lazy::new(|| BTreeMap::from([(0, &PlatformVersion::first().fee_version)])); mod from_storage_removal { use super::*; From 834c88247e214ef10afdaf81d66c903b49f0954d Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Sun, 30 Jun 2024 19:51:36 +0300 Subject: [PATCH 26/47] suggestions --- Cargo.lock | 1 + packages/rs-drive/src/drive/open/mod.rs | 52 +++++++++---------- packages/rs-platform-version/Cargo.toml | 1 + .../src/version/fee/data_contract/mod.rs | 49 ++++++++++++----- .../src/version/fee/hashing/mod.rs | 21 +++++--- .../src/version/fee/mod.rs | 28 +++++++--- .../src/version/fee/processing/mod.rs | 46 +++++++++++----- .../src/version/fee/signature/mod.rs | 35 ++++++++++--- .../fee/state_transition_min_fees/mod.rs | 28 +++++++--- .../src/version/fee/storage/mod.rs | 37 ++++++++++--- 10 files changed, 212 insertions(+), 86 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a5a8495277..9393105b7a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3592,6 +3592,7 @@ dependencies = [ name = "platform-version" version = "1.0.0-dev.16" dependencies = [ + "sha2", "thiserror", ] diff --git a/packages/rs-drive/src/drive/open/mod.rs b/packages/rs-drive/src/drive/open/mod.rs index 811843b03b..304fcef125 100644 --- a/packages/rs-drive/src/drive/open/mod.rs +++ b/packages/rs-drive/src/drive/open/mod.rs @@ -65,42 +65,38 @@ impl Drive { }, }; - populate_cached_fee_version(&drive, platform_version)?; + drive.populate_cached_fee_version(platform_version)?; Ok((drive, protocol_version)) } -} -/// Function that populates drive.cache.cached_fee_version with the EpochIndex were FeeVersion where updated -// TODO: This function should probably be moved else where. And maybe should be a static method like Drive::fetch_current_protocol_version_with_groved? -fn populate_cached_fee_version( - drive: &Drive, - platform_version: &PlatformVersion, -) -> Result<(), Error> { - let epochs_protocol_versions = - drive.get_epochs_protocol_versions(0, None, true, None, platform_version)?; - let mut cached_fee_versions = drive.cache.cached_fee_version.write(); + /// Function that populates drive.cache.cached_fee_version with the EpochIndex were FeeVersion where updated + fn populate_cached_fee_version(&self, platform_version: &PlatformVersion) -> Result<(), Error> { + let epochs_protocol_versions = + self.get_epochs_protocol_versions(0, None, true, None, platform_version)?; + let mut cached_fee_versions = self.cache.cached_fee_version.write(); - let mut last_fee_version_opt: Option<&FeeVersion> = None; - // Iterate all (epoch_index, protocol_version) - for (epoch_index, protocol_version) in epochs_protocol_versions.iter() { - let platform_version = PlatformVersion::get(*protocol_version).map_err(|e| { - Error::Drive(DriveError::CorruptedCacheState(format!( - "unable to get platform version {e}" - ))) - })?; - // Load the corresponding PlatformVersion from the protocol_version - if let Some(last_fee_version) = last_fee_version_opt { - // Insert the (epoch_index, fee_version) only if the fee_version is different from the last_fee_version. - if *last_fee_version != platform_version.fee_version { + let mut last_fee_version_opt: Option<&FeeVersion> = None; + // Iterate all (epoch_index, protocol_version) + for (epoch_index, protocol_version) in epochs_protocol_versions.iter() { + let platform_version = PlatformVersion::get(*protocol_version).map_err(|e| { + Error::Drive(DriveError::CorruptedCacheState(format!( + "unable to get platform version {e}" + ))) + })?; + // Load the corresponding PlatformVersion from the protocol_version + if let Some(last_fee_version) = last_fee_version_opt { + // Insert the (epoch_index, fee_version) only if the fee_version is different from the last_fee_version. + if *last_fee_version != platform_version.fee_version { + last_fee_version_opt = Some(&platform_version.fee_version); + cached_fee_versions.insert(*epoch_index, &platform_version.fee_version); + } + } else { + // If last_fee_version_opt is none, insert anyway last_fee_version_opt = Some(&platform_version.fee_version); cached_fee_versions.insert(*epoch_index, &platform_version.fee_version); } - } else { - // If last_fee_version_opt is none, insert anyway - last_fee_version_opt = Some(&platform_version.fee_version); - cached_fee_versions.insert(*epoch_index, &platform_version.fee_version); } + Ok(()) } - Ok(()) } diff --git a/packages/rs-platform-version/Cargo.toml b/packages/rs-platform-version/Cargo.toml index e8efb74f63..efb8bd40ea 100644 --- a/packages/rs-platform-version/Cargo.toml +++ b/packages/rs-platform-version/Cargo.toml @@ -9,6 +9,7 @@ license = "MIT" [dependencies] thiserror = { version = "1.0.59" } +sha2 = "0.10.5" [features] mock-versions = [] diff --git a/packages/rs-platform-version/src/version/fee/data_contract/mod.rs b/packages/rs-platform-version/src/version/fee/data_contract/mod.rs index e4dca73fa6..a69f265fae 100644 --- a/packages/rs-platform-version/src/version/fee/data_contract/mod.rs +++ b/packages/rs-platform-version/src/version/fee/data_contract/mod.rs @@ -1,3 +1,6 @@ +use crate::version::fee::processing::FeeProcessingVersion; +use sha2::{Digest, Sha256}; + pub mod v1; #[derive(Clone, Debug, Default)] @@ -11,17 +14,39 @@ pub struct FeeDataContractValidationVersion { pub document_type_unique_index_per_property_fee: u64, } -impl PartialEq for FeeDataContractValidationVersion { - fn eq(&self, other: &Self) -> bool { - self.document_type_base_fee == other.document_type_base_fee - && self.document_type_size_fee == other.document_type_size_fee - && self.document_type_per_property_fee == other.document_type_per_property_fee - && self.document_type_base_non_unique_index_fee - == other.document_type_base_non_unique_index_fee - && self.document_type_non_unique_index_per_property_fee - == other.document_type_non_unique_index_per_property_fee - && self.document_type_base_unique_index_fee == other.document_type_base_unique_index_fee - && self.document_type_unique_index_per_property_fee - == other.document_type_unique_index_per_property_fee +impl FeeDataContractValidationVersion { + pub(crate) fn to_hash(&self) -> u64 { + let mut hasher = Sha256::new(); + Digest::update(&mut hasher, &self.document_type_base_fee.to_be_bytes()); + Digest::update(&mut hasher, &self.document_type_size_fee.to_be_bytes()); + Digest::update( + &mut hasher, + &self.document_type_per_property_fee.to_be_bytes(), + ); + Digest::update( + &mut hasher, + &self.document_type_base_non_unique_index_fee.to_be_bytes(), + ); + Digest::update( + &mut hasher, + &self + .document_type_non_unique_index_per_property_fee + .to_be_bytes(), + ); + Digest::update( + &mut hasher, + &self.document_type_base_unique_index_fee.to_be_bytes(), + ); + Digest::update( + &mut hasher, + &self + .document_type_unique_index_per_property_fee + .to_be_bytes(), + ); + + let result = hasher.finalize(); + // Use the first 8 bytes of the hash as the u64 representation + let hash_bytes: [u8; 8] = result[0..8].try_into().unwrap(); + u64::from_be_bytes(hash_bytes) } } diff --git a/packages/rs-platform-version/src/version/fee/hashing/mod.rs b/packages/rs-platform-version/src/version/fee/hashing/mod.rs index e63e546e0e..241d060c53 100644 --- a/packages/rs-platform-version/src/version/fee/hashing/mod.rs +++ b/packages/rs-platform-version/src/version/fee/hashing/mod.rs @@ -1,3 +1,6 @@ +use crate::version::fee::signature::FeeSignatureVersion; +use sha2::{Digest, Sha256}; + pub mod v1; #[derive(Clone, Debug, Default)] @@ -8,11 +11,17 @@ pub struct FeeHashingVersion { pub single_sha256_per_block: u64, } -impl PartialEq for FeeHashingVersion { - fn eq(&self, other: &Self) -> bool { - self.double_sha256_base == other.double_sha256_base - && self.double_sha256_per_block == other.double_sha256_per_block - && self.single_sha256_base == other.single_sha256_base - && self.single_sha256_per_block == other.single_sha256_per_block +impl FeeHashingVersion { + pub(crate) fn to_hash(&self) -> u64 { + let mut hasher = Sha256::new(); + Digest::update(&mut hasher, &self.double_sha256_base.to_be_bytes()); + Digest::update(&mut hasher, &self.double_sha256_per_block.to_be_bytes()); + Digest::update(&mut hasher, &self.single_sha256_base.to_be_bytes()); + Digest::update(&mut hasher, &self.single_sha256_per_block.to_be_bytes()); + + let result = hasher.finalize(); + // Use the first 8 bytes of the hash as the u64 representation + let hash_bytes: [u8; 8] = result[0..8].try_into().unwrap(); + u64::from_be_bytes(hash_bytes) } } diff --git a/packages/rs-platform-version/src/version/fee/mod.rs b/packages/rs-platform-version/src/version/fee/mod.rs index 7de2695630..d356885ecf 100644 --- a/packages/rs-platform-version/src/version/fee/mod.rs +++ b/packages/rs-platform-version/src/version/fee/mod.rs @@ -4,6 +4,7 @@ use crate::version::fee::processing::FeeProcessingVersion; use crate::version::fee::signature::FeeSignatureVersion; use crate::version::fee::state_transition_min_fees::StateTransitionMinFees; use crate::version::fee::storage::FeeStorageVersion; +use sha2::{Digest, Sha256}; mod data_contract; mod hashing; @@ -25,11 +26,26 @@ pub struct FeeVersion { impl PartialEq for FeeVersion { fn eq(&self, other: &Self) -> bool { - self.storage == other.storage - && self.signature == other.signature - && self.hashing == other.hashing - && self.processing == other.processing - && self.data_contract == other.data_contract - && self.state_transition_min_fees == other.state_transition_min_fees + self.to_hash() == other.to_hash() + } +} + +impl FeeVersion { + fn to_hash(&self) -> u64 { + let mut hasher = Sha256::new(); + Digest::update(&mut hasher, &self.storage.to_hash().to_be_bytes()); + Digest::update(&mut hasher, &self.signature.to_hash().to_be_bytes()); + Digest::update(&mut hasher, &self.hashing.to_hash().to_be_bytes()); + Digest::update(&mut hasher, &self.processing.to_hash().to_be_bytes()); + Digest::update(&mut hasher, &self.data_contract.to_hash().to_be_bytes()); + Digest::update( + &mut hasher, + &self.state_transition_min_fees.to_hash().to_be_bytes(), + ); + + let result = hasher.finalize(); + // Use the first 8 bytes of the hash as the u64 representation + let hash_bytes: [u8; 8] = result[0..8].try_into().unwrap(); + u64::from_be_bytes(hash_bytes) } } diff --git a/packages/rs-platform-version/src/version/fee/processing/mod.rs b/packages/rs-platform-version/src/version/fee/processing/mod.rs index e7e9051a02..1fcc9c5234 100644 --- a/packages/rs-platform-version/src/version/fee/processing/mod.rs +++ b/packages/rs-platform-version/src/version/fee/processing/mod.rs @@ -1,3 +1,6 @@ +use crate::version::fee::signature::FeeSignatureVersion; +use sha2::{Digest, Sha256}; + pub mod v1; #[derive(Clone, Debug, Default)] @@ -10,17 +13,36 @@ pub struct FeeProcessingVersion { pub validate_key_structure: u64, } -impl PartialEq for FeeProcessingVersion { - fn eq(&self, other: &Self) -> bool { - self.fetch_identity_balance_processing_cost == other.fetch_identity_balance_processing_cost - && self.fetch_identity_revision_processing_cost - == other.fetch_identity_revision_processing_cost - && self.fetch_identity_balance_and_revision_processing_cost - == other.fetch_identity_balance_and_revision_processing_cost - && self.fetch_identity_cost_per_look_up_key_by_id - == other.fetch_identity_cost_per_look_up_key_by_id - && self.fetch_single_identity_key_processing_cost - == other.fetch_single_identity_key_processing_cost - && self.validate_key_structure == other.validate_key_structure +impl FeeProcessingVersion { + pub(crate) fn to_hash(&self) -> u64 { + let mut hasher = Sha256::new(); + Digest::update( + &mut hasher, + &self.fetch_identity_balance_processing_cost.to_be_bytes(), + ); + Digest::update( + &mut hasher, + &self.fetch_identity_revision_processing_cost.to_be_bytes(), + ); + Digest::update( + &mut hasher, + &self + .fetch_identity_balance_and_revision_processing_cost + .to_be_bytes(), + ); + Digest::update( + &mut hasher, + &self.fetch_identity_cost_per_look_up_key_by_id.to_be_bytes(), + ); + Digest::update( + &mut hasher, + &self.fetch_single_identity_key_processing_cost.to_be_bytes(), + ); + Digest::update(&mut hasher, &self.validate_key_structure.to_be_bytes()); + + let result = hasher.finalize(); + // Use the first 8 bytes of the hash as the u64 representation + let hash_bytes: [u8; 8] = result[0..8].try_into().unwrap(); + u64::from_be_bytes(hash_bytes) } } diff --git a/packages/rs-platform-version/src/version/fee/signature/mod.rs b/packages/rs-platform-version/src/version/fee/signature/mod.rs index ac98b31aa5..e61b73ec28 100644 --- a/packages/rs-platform-version/src/version/fee/signature/mod.rs +++ b/packages/rs-platform-version/src/version/fee/signature/mod.rs @@ -1,3 +1,6 @@ +use crate::version::fee::storage::FeeStorageVersion; +use sha2::{Digest, Sha256}; + pub mod v1; #[derive(Clone, Debug, Default)] @@ -9,12 +12,30 @@ pub struct FeeSignatureVersion { pub verify_signature_eddsa25519_hash160: u64, } -impl PartialEq for FeeSignatureVersion { - fn eq(&self, other: &Self) -> bool { - self.verify_signature_ecdsa_secp256k1 == other.verify_signature_ecdsa_secp256k1 - && self.verify_signature_bls12_381 == other.verify_signature_bls12_381 - && self.verify_signature_ecdsa_hash160 == other.verify_signature_ecdsa_hash160 - && self.verify_signature_bip13_script_hash == other.verify_signature_bip13_script_hash - && self.verify_signature_eddsa25519_hash160 == other.verify_signature_eddsa25519_hash160 +impl FeeSignatureVersion { + pub(crate) fn to_hash(&self) -> u64 { + let mut hasher = Sha256::new(); + Digest::update( + &mut hasher, + &self.verify_signature_ecdsa_secp256k1.to_be_bytes(), + ); + Digest::update(&mut hasher, &self.verify_signature_bls12_381.to_be_bytes()); + Digest::update( + &mut hasher, + &self.verify_signature_ecdsa_hash160.to_be_bytes(), + ); + Digest::update( + &mut hasher, + &self.verify_signature_bip13_script_hash.to_be_bytes(), + ); + Digest::update( + &mut hasher, + &self.verify_signature_eddsa25519_hash160.to_be_bytes(), + ); + + let result = hasher.finalize(); + // Use the first 8 bytes of the hash as the u64 representation + let hash_bytes: [u8; 8] = result[0..8].try_into().unwrap(); + u64::from_be_bytes(hash_bytes) } } diff --git a/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs b/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs index d14454aaf7..7186e82ae7 100644 --- a/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs +++ b/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs @@ -1,3 +1,6 @@ +use crate::version::fee::data_contract::FeeDataContractValidationVersion; +use sha2::{Digest, Sha256}; + pub mod v1; #[derive(Clone, Debug, Default)] pub struct StateTransitionMinFees { @@ -9,13 +12,22 @@ pub struct StateTransitionMinFees { pub contract_update: u64, } -impl PartialEq for StateTransitionMinFees { - fn eq(&self, other: &Self) -> bool { - self.credit_transfer == other.credit_transfer - && self.credit_withdrawal == other.credit_withdrawal - && self.identity_update == other.identity_update - && self.document_batch_sub_transition == other.document_batch_sub_transition - && self.contract_create == other.contract_create - && self.contract_update == other.contract_update +impl StateTransitionMinFees { + pub(crate) fn to_hash(&self) -> u64 { + let mut hasher = Sha256::new(); + Digest::update(&mut hasher, &self.credit_transfer.to_be_bytes()); + Digest::update(&mut hasher, &self.credit_withdrawal.to_be_bytes()); + Digest::update(&mut hasher, &self.identity_update.to_be_bytes()); + Digest::update( + &mut hasher, + &self.document_batch_sub_transition.to_be_bytes(), + ); + Digest::update(&mut hasher, &self.contract_create.to_be_bytes()); + Digest::update(&mut hasher, &self.contract_update.to_be_bytes()); + + let result = hasher.finalize(); + // Use the first 8 bytes of the hash as the u64 representation + let hash_bytes: [u8; 8] = result[0..8].try_into().unwrap(); + u64::from_be_bytes(hash_bytes) } } diff --git a/packages/rs-platform-version/src/version/fee/storage/mod.rs b/packages/rs-platform-version/src/version/fee/storage/mod.rs index 6768634b21..6bbc282bf6 100644 --- a/packages/rs-platform-version/src/version/fee/storage/mod.rs +++ b/packages/rs-platform-version/src/version/fee/storage/mod.rs @@ -1,3 +1,8 @@ +extern crate sha2; + +use sha2::digest::Update; +use sha2::{Digest, Sha256}; + pub mod v1; #[derive(Clone, Debug, Default)] @@ -9,12 +14,30 @@ pub struct FeeStorageVersion { pub storage_seek_cost: u64, } -impl PartialEq for FeeStorageVersion { - fn eq(&self, other: &Self) -> bool { - self.storage_disk_usage_credit_per_byte == other.storage_disk_usage_credit_per_byte - && self.storage_processing_credit_per_byte == other.storage_processing_credit_per_byte - && self.storage_load_credit_per_byte == other.storage_load_credit_per_byte - && self.non_storage_load_credit_per_byte == other.non_storage_load_credit_per_byte - && self.storage_seek_cost == other.storage_seek_cost +impl FeeStorageVersion { + pub(crate) fn to_hash(&self) -> u64 { + let mut hasher = Sha256::new(); + Digest::update( + &mut hasher, + &self.storage_disk_usage_credit_per_byte.to_be_bytes(), + ); + Digest::update( + &mut hasher, + &self.storage_processing_credit_per_byte.to_be_bytes(), + ); + Digest::update( + &mut hasher, + &self.storage_load_credit_per_byte.to_be_bytes(), + ); + Digest::update( + &mut hasher, + &self.non_storage_load_credit_per_byte.to_be_bytes(), + ); + Digest::update(&mut hasher, &self.storage_seek_cost.to_be_bytes()); + + let result = hasher.finalize(); + // Use the first 8 bytes of the hash as the u64 representation + let hash_bytes: [u8; 8] = result[0..8].try_into().unwrap(); + u64::from_be_bytes(hash_bytes) } } From 3e954423fb155af44647e21cc889406a16c4d12e Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Sun, 30 Jun 2024 20:59:36 +0300 Subject: [PATCH 27/47] suggestions --- packages/rs-dpp/Cargo.toml | 2 +- packages/rs-drive/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/rs-dpp/Cargo.toml b/packages/rs-dpp/Cargo.toml index 1bd931779b..1a266ead74 100644 --- a/packages/rs-dpp/Cargo.toml +++ b/packages/rs-dpp/Cargo.toml @@ -66,7 +66,6 @@ rust_decimal_macros = "1.29.1" indexmap = { version = "2.0.2", features = ["serde"] } strum = { version = "0.25.0", features = ["derive"] } json-schema-compatibility-validator = { path = '../rs-json-schema-compatibility-validator' } -once_cell = "1.7" [dev-dependencies] test-case = { version = "2.0" } @@ -74,6 +73,7 @@ tokio = { version = "1.17", features = ["full"] } pretty_assertions = { version = "1.3.0" } dpp = { path = ".", features = ["all_features_without_client"] } assert_matches = "1.5.0" +once_cell = "1.7" [features] default = ["platform-value", "state-transitions"] diff --git a/packages/rs-drive/Cargo.toml b/packages/rs-drive/Cargo.toml index 081c3fe33f..4da605d831 100644 --- a/packages/rs-drive/Cargo.toml +++ b/packages/rs-drive/Cargo.toml @@ -49,7 +49,6 @@ grovedb = { git = "https://github.com/dashpay/grovedb", rev = "d9292aa20bd8f3bda grovedb-costs = { git = "https://github.com/dashpay/grovedb", rev = "d9292aa20bd8f3bda7c5d25d62db06ac341b0677", optional = true } grovedb-path = { git = "https://github.com/dashpay/grovedb", rev = "d9292aa20bd8f3bda7c5d25d62db06ac341b0677" } grovedb-storage = { git = "https://github.com/dashpay/grovedb", rev = "d9292aa20bd8f3bda7c5d25d62db06ac341b0677", optional = true } -once_cell = "1.7" [dev-dependencies] criterion = "0.3.5" @@ -68,6 +67,7 @@ dpp = { path = "../rs-dpp", features = [ "factories", "data-contract-json-conversion", ], default-features = false } +once_cell = "1.7" serde_json = { version = "1.0", features = ["preserve_order"] } [[bench]] From f7512b1232c51aa6c683ebe246eb188878f18bd9 Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Mon, 1 Jul 2024 03:03:33 +0700 Subject: [PATCH 28/47] new system using platform state and fixes --- packages/rs-dpp/src/fee/default_costs/mod.rs | 1 + packages/rs-dpp/src/fee/fee_result/refunds.rs | 4 +- .../v0/mod.rs | 3 + .../process_block_fees/v0/mod.rs | 2 + .../update_masternode_identities/v0/mod.rs | 2 + .../v0/mod.rs | 3 + .../v0/mod.rs | 2 + .../v0/mod.rs | 2 + .../v0/mod.rs | 3 + .../create_genesis_state/v0/mod.rs | 2 + .../execute_event/mod.rs | 3 + .../execute_event/v0/mod.rs | 5 ++ .../process_raw_state_transitions/v0/mod.rs | 7 ++ .../validate_fees_of_event/v0/mod.rs | 4 +- .../v0/mod.rs | 2 + .../v0/mod.rs | 2 + .../v0/mod.rs | 2 + packages/rs-drive-abci/src/query/mod.rs | 3 +- .../drive/batch/drive_op_batch/document.rs | 3 +- .../apply_drive_operations/mod.rs | 3 + .../apply_drive_operations/v0/mod.rs | 8 +- .../mod.rs | 3 + .../v0/mod.rs | 3 + .../src/drive/batch/drive_op_batch/mod.rs | 11 +++ .../v0/mod.rs | 2 + .../v0/mod.rs | 2 + .../src/drive/fee/calculate_fee/v0/mod.rs | 1 + .../withdrawals/transaction/index/mod.rs | 2 + .../withdrawals/transaction/queue/mod.rs | 4 + packages/rs-drive/src/fee/op.rs | 87 +++++++++---------- .../src/version/fee/hashing/mod.rs | 7 +- .../src/version/fee/hashing/v1.rs | 4 +- 32 files changed, 132 insertions(+), 60 deletions(-) diff --git a/packages/rs-dpp/src/fee/default_costs/mod.rs b/packages/rs-dpp/src/fee/default_costs/mod.rs index 2d079e7656..698bb03774 100644 --- a/packages/rs-dpp/src/fee/default_costs/mod.rs +++ b/packages/rs-dpp/src/fee/default_costs/mod.rs @@ -75,6 +75,7 @@ pub enum KnownCostItem { } impl KnownCostItem { + #[inline] pub fn lookup_cost(&self, fee_version: &FeeVersion) -> Credits { match self { KnownCostItem::StorageDiskUsageCreditPerByte => { diff --git a/packages/rs-dpp/src/fee/fee_result/refunds.rs b/packages/rs-dpp/src/fee/fee_result/refunds.rs index fa41f0ae55..ca5e8192be 100644 --- a/packages/rs-dpp/src/fee/fee_result/refunds.rs +++ b/packages/rs-dpp/src/fee/fee_result/refunds.rs @@ -39,7 +39,7 @@ impl FeeRefunds { storage_removal: I, current_epoch_index: EpochIndex, epochs_per_era: u16, - cached_fee_version: &CachedEpochIndexFeeVersions, + cached_fee_versions: &CachedEpochIndexFeeVersions, ) -> Result where I: IntoIterator, @@ -58,7 +58,7 @@ impl FeeRefunds { // TODO We should use multipliers let credits: Credits = (bytes as Credits) - .checked_mul(Epoch::new(current_epoch_index)?.cost_for_known_cost_item(cached_fee_version, StorageDiskUsageCreditPerByte)) + .checked_mul(Epoch::new(current_epoch_index)?.cost_for_known_cost_item(cached_fee_versions, StorageDiskUsageCreditPerByte)) .ok_or(ProtocolError::Overflow("storage written bytes cost overflow"))?; let (amount, _) = calculate_storage_fee_refund_amount_and_leftovers( diff --git a/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/add_process_epoch_change_operations/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/add_process_epoch_change_operations/v0/mod.rs index 3e34b5c582..9c1de25646 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/add_process_epoch_change_operations/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/add_process_epoch_change_operations/v0/mod.rs @@ -171,6 +171,7 @@ mod tests { use crate::platform_types::platform_state::PlatformState; use dpp::block::block_info::BlockInfo; use dpp::fee::epoch::CreditsPerEpoch; + use dpp::prelude::CachedEpochIndexFeeVersions; use drive::drive::defaults::INITIAL_PROTOCOL_VERSION; /// Process and validate an epoch change @@ -211,6 +212,7 @@ mod tests { &BlockInfo::default(), Some(transaction), platform_version, + &CachedEpochIndexFeeVersions::default(), ) .expect("should apply batch"); } @@ -285,6 +287,7 @@ mod tests { &BlockInfo::default(), Some(transaction), platform_version, + &CachedEpochIndexFeeVersions::default(), ) .expect("should apply batch"); diff --git a/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/v0/mod.rs index d6df6c8301..373e97a1c6 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/v0/mod.rs @@ -36,6 +36,7 @@ use std::option::Option::None; use dpp::block::epoch::Epoch; +use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use drive::drive::batch::DriveOperation; use drive::drive::Drive; @@ -180,6 +181,7 @@ impl Platform { &block_info.to_block_info(epoch_info.try_into()?), Some(transaction), platform_version, + &CachedEpochIndexFeeVersions::default(), )?; let outcome = processed_block_fees_outcome::v0::ProcessedBlockFeesOutcome { diff --git a/packages/rs-drive-abci/src/execution/platform_events/core_based_updates/update_masternode_identities/update_masternode_identities/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/core_based_updates/update_masternode_identities/update_masternode_identities/v0/mod.rs index 938804b9a4..a44cb61910 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/core_based_updates/update_masternode_identities/update_masternode_identities/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/core_based_updates/update_masternode_identities/update_masternode_identities/v0/mod.rs @@ -16,6 +16,7 @@ use drive::drive::batch::IdentityOperationType::AddNewIdentity; use drive::grovedb::Transaction; use std::collections::BTreeMap; use tracing::Level; +use dpp::prelude::CachedEpochIndexFeeVersions; impl Platform where @@ -140,6 +141,7 @@ where block_info, Some(transaction), platform_version, + &CachedEpochIndexFeeVersions::default(), )?; let height = block_info.height; diff --git a/packages/rs-drive-abci/src/execution/platform_events/fee_pool_inwards_distribution/add_distribute_block_fees_into_pools_operations/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/fee_pool_inwards_distribution/add_distribute_block_fees_into_pools_operations/v0/mod.rs index e1641df9af..239cfde5e7 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/fee_pool_inwards_distribution/add_distribute_block_fees_into_pools_operations/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/fee_pool_inwards_distribution/add_distribute_block_fees_into_pools_operations/v0/mod.rs @@ -75,6 +75,7 @@ impl Platform { mod tests { use super::*; use dpp::block::block_info::BlockInfo; + use dpp::prelude::CachedEpochIndexFeeVersions; use drive::drive::batch::grovedb_op_batch::GroveDbOpBatchV0Methods; use crate::test::helpers::setup::TestPlatformBuilder; @@ -126,6 +127,7 @@ mod tests { &BlockInfo::default(), Some(&transaction), platform_version, + &CachedEpochIndexFeeVersions::default(), ) .expect("should apply batch"); @@ -194,6 +196,7 @@ mod tests { &BlockInfo::default(), Some(&transaction), platform_version, + &CachedEpochIndexFeeVersions::default(), ) .expect("should apply batch"); diff --git a/packages/rs-drive-abci/src/execution/platform_events/fee_pool_inwards_distribution/add_distribute_storage_fee_to_epochs_operations/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/fee_pool_inwards_distribution/add_distribute_storage_fee_to_epochs_operations/v0/mod.rs index 0085d63708..d56f6d2b10 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/fee_pool_inwards_distribution/add_distribute_storage_fee_to_epochs_operations/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/fee_pool_inwards_distribution/add_distribute_storage_fee_to_epochs_operations/v0/mod.rs @@ -84,6 +84,7 @@ mod tests { perpetual_storage_epochs, CreditsPerEpoch, SignedCreditsPerEpoch, GENESIS_EPOCH_INDEX, }; use dpp::fee::Credits; + use dpp::prelude::CachedEpochIndexFeeVersions; use drive::drive::batch::grovedb_op_batch::GroveDbOpBatchV0Methods; use drive::drive::batch::DriveOperation; use drive::drive::config::DriveConfig; @@ -196,6 +197,7 @@ mod tests { &BlockInfo::default(), Some(&transaction), platform_version, + &CachedEpochIndexFeeVersions::default(), ) .expect("should apply batch"); diff --git a/packages/rs-drive-abci/src/execution/platform_events/fee_pool_outwards_distribution/add_distribute_fees_from_oldest_unpaid_epoch_pool_to_proposers_operations/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/fee_pool_outwards_distribution/add_distribute_fees_from_oldest_unpaid_epoch_pool_to_proposers_operations/v0/mod.rs index d56373613f..7d2e1dba6d 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/fee_pool_outwards_distribution/add_distribute_fees_from_oldest_unpaid_epoch_pool_to_proposers_operations/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/fee_pool_outwards_distribution/add_distribute_fees_from_oldest_unpaid_epoch_pool_to_proposers_operations/v0/mod.rs @@ -91,6 +91,7 @@ impl Platform { mod tests { use super::*; use dpp::block::block_info::BlockInfo; + use dpp::prelude::CachedEpochIndexFeeVersions; use drive::common::test_utils::identities::create_test_masternode_identities_and_add_them_as_epoch_block_proposers; @@ -203,6 +204,7 @@ mod tests { &BlockInfo::default(), Some(&transaction), platform_version, + &CachedEpochIndexFeeVersions::default(), ) .expect("should apply batch"); diff --git a/packages/rs-drive-abci/src/execution/platform_events/fee_pool_outwards_distribution/add_epoch_pool_to_proposers_payout_operations/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/fee_pool_outwards_distribution/add_epoch_pool_to_proposers_payout_operations/v0/mod.rs index 670f7dc1fe..cfc195c877 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/fee_pool_outwards_distribution/add_epoch_pool_to_proposers_payout_operations/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/fee_pool_outwards_distribution/add_epoch_pool_to_proposers_payout_operations/v0/mod.rs @@ -152,6 +152,7 @@ impl Platform { &BlockInfo::default(), Some(transaction), platform_version, + &None, )?; batch.push(DriveOperation::GroveDBOpBatch(operations)); @@ -180,6 +181,7 @@ mod tests { use drive::fee_pools::epochs::operations_factory::EpochOperations; use rust_decimal::Decimal; use rust_decimal_macros::dec; + use dpp::prelude::CachedEpochIndexFeeVersions; #[test] fn test_payout_to_proposers() { @@ -281,6 +283,7 @@ mod tests { &BlockInfo::default(), Some(&transaction), platform_version, + &CachedEpochIndexFeeVersions::default(), ) .expect("should apply batch"); diff --git a/packages/rs-drive-abci/src/execution/platform_events/initialization/create_genesis_state/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/initialization/create_genesis_state/v0/mod.rs index 73795a0aab..005a539f15 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/initialization/create_genesis_state/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/initialization/create_genesis_state/v0/mod.rs @@ -55,6 +55,7 @@ use drive::drive::object_size_info::{ use drive::query::TransactionArg; use std::borrow::Cow; use std::collections::BTreeMap; +use dpp::prelude::CachedEpochIndexFeeVersions; const DPNS_DASH_TLD_DOCUMENT_ID: [u8; 32] = [ 215, 242, 197, 63, 70, 169, 23, 171, 110, 91, 57, 162, 215, 188, 38, 11, 100, 146, 137, 69, 55, @@ -189,6 +190,7 @@ impl Platform { &block_info, transaction, platform_version, + &CachedEpochIndexFeeVersions::default(), )?; Ok(()) diff --git a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/mod.rs index 99952972dd..c30deeba24 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/mod.rs @@ -8,6 +8,7 @@ use crate::platform_types::platform::Platform; use crate::rpc::core::CoreRPCLike; use dpp::block::block_info::BlockInfo; use dpp::consensus::ConsensusError; +use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use drive::grovedb::Transaction; @@ -42,6 +43,7 @@ where block_info: &BlockInfo, transaction: &Transaction, platform_version: &PlatformVersion, + previous_fee_versions: &CachedEpochIndexFeeVersions, ) -> Result { match platform_version .drive_abci @@ -55,6 +57,7 @@ where block_info, transaction, platform_version, + previous_fee_versions, ), version => Err(Error::Execution(ExecutionError::UnknownVersionMismatch { method: "execute_event".to_string(), diff --git a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/v0/mod.rs index e7f03575d9..dd96230866 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/v0/mod.rs @@ -11,6 +11,7 @@ use crate::rpc::core::CoreRPCLike; use dpp::block::block_info::BlockInfo; use dpp::consensus::ConsensusError; use dpp::fee::fee_result::FeeResult; +use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use drive::drive::identity::update::apply_balance_change_outcome::ApplyBalanceChangeOutcomeV0Methods; use drive::grovedb::Transaction; @@ -48,6 +49,7 @@ where block_info: &BlockInfo, transaction: &Transaction, platform_version: &PlatformVersion, + previous_fee_versions: &CachedEpochIndexFeeVersions, ) -> Result { let maybe_fee_validation_result = match event { ExecutionEvent::PaidFromAssetLock { .. } | ExecutionEvent::Paid { .. } => { @@ -89,6 +91,7 @@ where block_info, Some(transaction), platform_version, + previous_fee_versions, ) .map_err(Error::Drive)?; @@ -138,6 +141,7 @@ where block_info, Some(transaction), platform_version, + &CachedEpochIndexFeeVersions::default(), ) .map_err(Error::Drive)?; @@ -162,6 +166,7 @@ where block_info, Some(transaction), platform_version, + &CachedEpochIndexFeeVersions::default(), ) .map_err(Error::Drive)?; Ok(SuccessfulFreeExecution) diff --git a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/process_raw_state_transitions/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/process_raw_state_transitions/v0/mod.rs index a9ba48da71..2ab9e501d6 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/process_raw_state_transitions/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/process_raw_state_transitions/v0/mod.rs @@ -8,6 +8,7 @@ use dpp::fee::fee_result::FeeResult; use dpp::util::hash::hash_single; use dpp::validation::ConsensusValidationResult; use std::time::Instant; +use dpp::prelude::CachedEpochIndexFeeVersions; use crate::execution::types::execution_event::ExecutionEvent; use crate::execution::types::state_transition_container::v0::{ @@ -70,6 +71,8 @@ where config: &self.config, core_rpc: &self.core_rpc, }; + + let previous_fee_versions = block_platform_state.previous_fee_versions(); let state_transition_container = self.decode_raw_state_transitions(raw_state_transitions, platform_version)?; @@ -115,6 +118,7 @@ where block_info, transaction, platform_version, + previous_fee_versions, ) .unwrap_or_else(error_to_internal_error_execution_result) }) @@ -199,6 +203,7 @@ where block_info: &BlockInfo, transaction: &Transaction, platform_version: &PlatformVersion, + previous_fee_versions: &CachedEpochIndexFeeVersions, ) -> Result> { // State Transition is invalid if !validation_result.is_valid() { @@ -252,6 +257,7 @@ where block_info, transaction, platform_version, + previous_fee_versions, ) .map_err(|error| StateTransitionAwareError { error, @@ -343,6 +349,7 @@ where block_info, transaction, platform_version, + previous_fee_versions, ) .map_err(|error| StateTransitionAwareError { error, diff --git a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/v0/mod.rs index 86b6dd890b..576f2dbb27 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/v0/mod.rs @@ -9,7 +9,7 @@ use dpp::consensus::state::identity::IdentityInsufficientBalanceError; use dpp::consensus::state::state_error::StateError; use dpp::fee::fee_result::FeeResult; -use dpp::prelude::ConsensusValidationResult; +use dpp::prelude::{CachedEpochIndexFeeVersions, ConsensusValidationResult}; use dpp::version::PlatformVersion; use drive::grovedb::TransactionArg; @@ -62,6 +62,7 @@ where block_info, transaction, platform_version, + &CachedEpochIndexFeeVersions::default(), ) .map_err(Error::Drive)?; @@ -113,6 +114,7 @@ where block_info, transaction, platform_version, + &CachedEpochIndexFeeVersions::default(), ) .map_err(Error::Drive)?; diff --git a/packages/rs-drive-abci/src/execution/platform_events/withdrawals/dequeue_and_build_unsigned_withdrawal_transactions/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/withdrawals/dequeue_and_build_unsigned_withdrawal_transactions/v0/mod.rs index 9659528dc2..15865bbf7c 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/withdrawals/dequeue_and_build_unsigned_withdrawal_transactions/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/withdrawals/dequeue_and_build_unsigned_withdrawal_transactions/v0/mod.rs @@ -25,6 +25,7 @@ use crate::{ rpc::core::CoreRPCLike, }; use dpp::errors::ProtocolError; +use dpp::prelude::CachedEpochIndexFeeVersions; use drive::drive::config::DEFAULT_QUERY_LIMIT; const WITHDRAWAL_TRANSACTIONS_QUERY_LIMIT: u16 = 16; @@ -108,6 +109,7 @@ where block_info, transaction, platform_version, + &CachedEpochIndexFeeVersions::default(), )?; Ok(UnsignedWithdrawalTxs::from_vec( diff --git a/packages/rs-drive-abci/src/execution/platform_events/withdrawals/pool_withdrawals_into_transactions_queue/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/withdrawals/pool_withdrawals_into_transactions_queue/v0/mod.rs index d65b4138f5..c4f6b9d4ca 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/withdrawals/pool_withdrawals_into_transactions_queue/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/withdrawals/pool_withdrawals_into_transactions_queue/v0/mod.rs @@ -3,6 +3,7 @@ use dpp::block::block_info::BlockInfo; use dpp::data_contract::accessors::v0::DataContractV0Getters; use dpp::document::document_methods::DocumentMethodsV0; use dpp::document::{DocumentV0Getters, DocumentV0Setters}; +use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use drive::drive::identity::withdrawals::WithdrawalTransactionIndexAndBytes; @@ -131,6 +132,7 @@ where block_info, transaction, platform_version, + &CachedEpochIndexFeeVersions::default(), )?; Ok(()) diff --git a/packages/rs-drive-abci/src/execution/platform_events/withdrawals/update_broadcasted_withdrawal_statuses/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/withdrawals/update_broadcasted_withdrawal_statuses/v0/mod.rs index 97b5a922ba..3fed4d18bb 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/withdrawals/update_broadcasted_withdrawal_statuses/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/withdrawals/update_broadcasted_withdrawal_statuses/v0/mod.rs @@ -9,6 +9,7 @@ use dpp::system_data_contracts::withdrawals_contract::v1::document_types::withdr use dpp::version::PlatformVersion; use itertools::Itertools; use std::collections::HashSet; +use dpp::prelude::CachedEpochIndexFeeVersions; use drive::drive::batch::DriveOperation; use drive::drive::config::DEFAULT_QUERY_LIMIT; @@ -155,6 +156,7 @@ where block_info, transaction.into(), platform_version, + &CachedEpochIndexFeeVersions::default(), )?; Ok(()) diff --git a/packages/rs-drive-abci/src/query/mod.rs b/packages/rs-drive-abci/src/query/mod.rs index c27ec51c7d..8a3c6c8d4c 100644 --- a/packages/rs-drive-abci/src/query/mod.rs +++ b/packages/rs-drive-abci/src/query/mod.rs @@ -30,6 +30,7 @@ mod tests { use platform_version::version::PlatformVersion; use std::borrow::Cow; use std::sync::Arc; + use dpp::prelude::CachedEpochIndexFeeVersions; pub fn setup_platform<'a>( with_genesis_state: bool, @@ -71,7 +72,7 @@ mod tests { platform .drive - .apply_drive_operations(vec![operation], true, &block_info, None, platform_version) + .apply_drive_operations(vec![operation], true, &block_info, None, platform_version, &CachedEpochIndexFeeVersions::default()) .expect("expected to apply drive operations"); } diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/document.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/document.rs index 99f5cb5388..e77005d6d4 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/document.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/document.rs @@ -12,7 +12,7 @@ use dpp::data_contract::accessors::v0::DataContractV0Getters; use dpp::data_contract::document_type::DocumentTypeRef; use dpp::data_contract::DataContract; use dpp::document::Document; -use dpp::prelude::Identifier; +use dpp::prelude::{CachedEpochIndexFeeVersions, Identifier}; use dpp::system_data_contracts::withdrawals_contract::v1::document_types::withdrawal; @@ -102,6 +102,7 @@ impl DriveLowLevelOperationConverter for DocumentOperationType<'_> { block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: &CachedEpochIndexFeeVersions, ) -> Result, Error> { match self { DocumentOperationType::AddDocument { diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/mod.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/mod.rs index b4040eb7b0..64633194bb 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/mod.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/mod.rs @@ -10,6 +10,7 @@ use dpp::block::block_info::BlockInfo; use grovedb::TransactionArg; use dpp::fee::fee_result::FeeResult; +use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; @@ -39,6 +40,7 @@ impl Drive { block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: &CachedEpochIndexFeeVersions, ) -> Result { match platform_version .drive @@ -52,6 +54,7 @@ impl Drive { block_info, transaction, platform_version, + previous_fee_versions, ), version => Err(Error::Drive(DriveError::UnknownVersionMismatch { method: "apply_drive_operations".to_string(), diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs index 033eee50f2..0d70be08d6 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs @@ -17,6 +17,7 @@ use crate::drive::batch::drive_op_batch::finalize_task::{ DriveOperationFinalizationTasks, DriveOperationFinalizeTask, }; use std::collections::HashMap; +use dpp::prelude::CachedEpochIndexFeeVersions; impl Drive { /// Applies a list of high level DriveOperations to the drive, and calculates the fee for them. @@ -43,6 +44,7 @@ impl Drive { block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: &CachedEpochIndexFeeVersions, ) -> Result { if operations.is_empty() { return Ok(FeeResult::default()); @@ -67,6 +69,7 @@ impl Drive { block_info, transaction, platform_version, + Some(previous_fee_versions), )?); } @@ -84,15 +87,14 @@ impl Drive { for task in finalize_tasks { task.execute(self, platform_version); } - - let cached_fee_versions = self.cache.cached_fee_version.read(); + Drive::calculate_fee( None, Some(cost_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + previous_fee_versions, ) } } diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/mod.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/mod.rs index d3346034dd..9aa4f611fb 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/mod.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/mod.rs @@ -9,6 +9,7 @@ use dpp::block::block_info::BlockInfo; use dpp::version::PlatformVersion; use grovedb::TransactionArg; +use dpp::prelude::CachedEpochIndexFeeVersions; impl Drive { /// Convert a batch of drive operations to a batch of grove database operations. @@ -35,6 +36,7 @@ impl Drive { block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: &Option, ) -> Result { match platform_version .drive @@ -47,6 +49,7 @@ impl Drive { block_info, transaction, platform_version, + previous_fee_versions, ), version => Err(Error::Drive(DriveError::UnknownVersionMismatch { method: "convert_drive_operations_to_grove_operations".to_string(), diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/v0/mod.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/v0/mod.rs index fa50fcc460..5c60d5b354 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/v0/mod.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/v0/mod.rs @@ -10,6 +10,7 @@ use dpp::version::PlatformVersion; use grovedb::batch::GroveDbOp; use grovedb::TransactionArg; use itertools::Itertools; +use dpp::prelude::CachedEpochIndexFeeVersions; impl Drive { /// Convert a batch of drive operations to a batch of grove database operations. @@ -36,6 +37,7 @@ impl Drive { block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: &Option, ) -> Result { let ops = drive_batch_operations .into_iter() @@ -46,6 +48,7 @@ impl Drive { block_info, transaction, platform_version, + previous_fee_versions, )?; Ok(LowLevelDriveOperation::grovedb_operations_consume( inner_drive_operations, diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/mod.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/mod.rs index a7095f2b6f..9b56cb3c31 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/mod.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/mod.rs @@ -34,6 +34,7 @@ use crate::drive::batch::drive_op_batch::finalize_task::{ }; use crate::error::drive::DriveError; use std::collections::{BTreeMap, HashMap}; +use dpp::prelude::CachedEpochIndexFeeVersions; /// A converter that will get Drive Operations from High Level Operations pub trait DriveLowLevelOperationConverter { @@ -47,6 +48,7 @@ pub trait DriveLowLevelOperationConverter { block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: &Option, ) -> Result, Error>; } @@ -88,6 +90,7 @@ impl DriveLowLevelOperationConverter for DriveOperation<'_> { block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result, Error> { match self { DriveOperation::DataContractOperation(contract_operation_type) => { @@ -271,6 +274,7 @@ mod tests { &BlockInfo::default(), Some(&db_transaction), platform_version, + &CachedEpochIndexFeeVersions::default(), ) .expect("expected to insert contract and document"); @@ -389,6 +393,7 @@ mod tests { &BlockInfo::default(), Some(&db_transaction), platform_version, + &CachedEpochIndexFeeVersions::default(), ) .expect("expected to be able to insert documents"); @@ -500,6 +505,7 @@ mod tests { &BlockInfo::default(), Some(&db_transaction), platform_version, + &CachedEpochIndexFeeVersions::default(), ) .expect("expected to be able to insert documents"); @@ -630,6 +636,7 @@ mod tests { &BlockInfo::default(), Some(&db_transaction), platform_version, + &CachedEpochIndexFeeVersions::default(), ) .expect("expected to be able to insert documents"); @@ -738,6 +745,7 @@ mod tests { &BlockInfo::default(), Some(&db_transaction), platform_version, + &CachedEpochIndexFeeVersions::default(), ) .expect("expected to be able to insert documents"); @@ -798,6 +806,7 @@ mod tests { &BlockInfo::default(), Some(&db_transaction), platform_version, + &CachedEpochIndexFeeVersions::default(), ) .expect("expected to be able to update documents"); @@ -951,6 +960,7 @@ mod tests { &BlockInfo::default(), Some(&db_transaction), platform_version, + &CachedEpochIndexFeeVersions::default(), ) .expect("expected to be able to insert documents"); @@ -1004,6 +1014,7 @@ mod tests { &BlockInfo::default(), Some(&db_transaction), platform_version, + &CachedEpochIndexFeeVersions::default(), ) .expect("expected to be able to update documents"); diff --git a/packages/rs-drive/src/drive/credit_pools/pending_epoch_refunds/methods/add_delete_pending_epoch_refunds_except_specified/v0/mod.rs b/packages/rs-drive/src/drive/credit_pools/pending_epoch_refunds/methods/add_delete_pending_epoch_refunds_except_specified/v0/mod.rs index 410a89920e..df3c849d1f 100644 --- a/packages/rs-drive/src/drive/credit_pools/pending_epoch_refunds/methods/add_delete_pending_epoch_refunds_except_specified/v0/mod.rs +++ b/packages/rs-drive/src/drive/credit_pools/pending_epoch_refunds/methods/add_delete_pending_epoch_refunds_except_specified/v0/mod.rs @@ -68,6 +68,7 @@ mod tests { use dpp::version::PlatformVersion; use grovedb::batch::Op; + use dpp::prelude::CachedEpochIndexFeeVersions; #[test] fn should_add_delete_operations_v0() { @@ -97,6 +98,7 @@ mod tests { &BlockInfo::default(), Some(&transaction), platform_version, + &CachedEpochIndexFeeVersions::default(), ) .expect("should apply batch"); diff --git a/packages/rs-drive/src/drive/credit_pools/pending_epoch_refunds/methods/fetch_and_add_pending_epoch_refunds_to_collection/v0/mod.rs b/packages/rs-drive/src/drive/credit_pools/pending_epoch_refunds/methods/fetch_and_add_pending_epoch_refunds_to_collection/v0/mod.rs index be751238ed..b054e1e731 100644 --- a/packages/rs-drive/src/drive/credit_pools/pending_epoch_refunds/methods/fetch_and_add_pending_epoch_refunds_to_collection/v0/mod.rs +++ b/packages/rs-drive/src/drive/credit_pools/pending_epoch_refunds/methods/fetch_and_add_pending_epoch_refunds_to_collection/v0/mod.rs @@ -79,6 +79,7 @@ mod tests { use crate::tests::helpers::setup::setup_drive_with_initial_state_structure; use dpp::block::block_info::BlockInfo; use dpp::fee::epoch::CreditsPerEpoch; + use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; @@ -109,6 +110,7 @@ mod tests { &BlockInfo::default(), Some(&transaction), platform_version, + &CachedEpochIndexFeeVersions::default(), ) .expect("should apply batch"); diff --git a/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs b/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs index 928d49d5a1..badf9284f1 100644 --- a/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs +++ b/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs @@ -37,6 +37,7 @@ impl Drive { drive_operations, epoch, epochs_per_era, + , cached_fee_version, )? { aggregate_fee_result.checked_add_assign(drive_fee_result)?; diff --git a/packages/rs-drive/src/drive/identity/withdrawals/transaction/index/mod.rs b/packages/rs-drive/src/drive/identity/withdrawals/transaction/index/mod.rs index d1882c72d7..2a10a1e1e6 100644 --- a/packages/rs-drive/src/drive/identity/withdrawals/transaction/index/mod.rs +++ b/packages/rs-drive/src/drive/identity/withdrawals/transaction/index/mod.rs @@ -7,6 +7,7 @@ pub mod fetch_next_withdrawal_transaction_index; mod tests { use dpp::block::block_info::BlockInfo; use dpp::block::epoch::Epoch; + use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use crate::tests::helpers::setup::setup_drive_with_initial_state_structure; @@ -45,6 +46,7 @@ mod tests { &block_info, Some(&transaction), platform_version, + &CachedEpochIndexFeeVersions::default(), ) .expect("to apply drive ops"); diff --git a/packages/rs-drive/src/drive/identity/withdrawals/transaction/queue/mod.rs b/packages/rs-drive/src/drive/identity/withdrawals/transaction/queue/mod.rs index b404dc9088..12958ced8b 100644 --- a/packages/rs-drive/src/drive/identity/withdrawals/transaction/queue/mod.rs +++ b/packages/rs-drive/src/drive/identity/withdrawals/transaction/queue/mod.rs @@ -14,6 +14,7 @@ mod tests { }; use dpp::block::block_info::BlockInfo; use dpp::block::epoch::Epoch; + use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; #[test] @@ -52,6 +53,7 @@ mod tests { &block_info, Some(&transaction), platform_version, + &CachedEpochIndexFeeVersions::default(), ) .expect("to apply batch"); @@ -73,6 +75,7 @@ mod tests { &block_info, Some(&transaction), platform_version, + &CachedEpochIndexFeeVersions::default(), ) .expect("to apply batch"); @@ -96,6 +99,7 @@ mod tests { &block_info, Some(&transaction), platform_version, + &CachedEpochIndexFeeVersions::default(), ) .expect("to apply batch"); diff --git a/packages/rs-drive/src/fee/op.rs b/packages/rs-drive/src/fee/op.rs index 2487011d87..43cb5133a8 100644 --- a/packages/rs-drive/src/fee/op.rs +++ b/packages/rs-drive/src/fee/op.rs @@ -21,6 +21,7 @@ use crate::fee::op::LowLevelDriveOperation::{ CalculatedCostOperation, FunctionOperation, GroveOperation, PreCalculatedFeeResult, }; use dpp::block::epoch::Epoch; +use dpp::fee::Credits; use dpp::fee::default_costs::EpochCosts; use dpp::fee::default_costs::KnownCostItem::{ StorageDiskUsageCreditPerByte, StorageLoadCreditPerByte, StorageProcessingCreditPerByte, @@ -29,6 +30,8 @@ use dpp::fee::default_costs::KnownCostItem::{ use dpp::fee::fee_result::refunds::FeeRefunds; use dpp::fee::fee_result::FeeResult; use dpp::prelude::CachedEpochIndexFeeVersions; +use platform_version::version::fee::FeeVersion; +use crate::error::fee::FeeError; /// Base ops #[derive(Debug, Enum)] @@ -141,13 +144,23 @@ impl HashFunction { } } - //todo: put real costs in - fn base_cost(&self, _epoch: &Epoch) -> u64 { + fn block_cost(&self, fee_version: &FeeVersion) -> u64 { match self { - HashFunction::Sha256 => 30, - HashFunction::Sha256_2 => 30, - HashFunction::Blake3 => 30, - HashFunction::Sha256RipeMD160 => 30, + HashFunction::Sha256 => fee_version.hashing.sha256_per_block, + HashFunction::Sha256_2 => fee_version.hashing.sha256_per_block, + HashFunction::Blake3 => fee_version.hashing.blake3_per_block, + HashFunction::Sha256RipeMD160 => fee_version.hashing.sha256_per_block, + } + } + + fn base_cost(&self, fee_version: &FeeVersion) -> u64 { + match self { + HashFunction::Sha256 => fee_version.hashing.single_sha256_base, + // It's normal that the base cost for a sha256 will have a single sha256 base + // But it has an extra block + HashFunction::Sha256_2 => fee_version.hashing.single_sha256_base, + HashFunction::Blake3 => fee_version.hashing.blake3_base, + HashFunction::Sha256RipeMD160 => fee_version.hashing.sha256_ripe_md160_base, } } } @@ -163,8 +176,9 @@ pub struct FunctionOp { impl FunctionOp { /// The cost of the function - fn cost(&self, epoch: &Epoch) -> u64 { - self.rounds as u64 * self.hash.base_cost(epoch) + fn cost(&self, fee_version: &FeeVersion) -> Credits { + let block_cost = (self.rounds as u64).saturating_mul(self.hash.block_cost(fee_version)); + self.hash.base_cost(fee_version).saturating_add(block_cost) } /// Create a new function operation with the following hash knowing the rounds it will take @@ -204,20 +218,23 @@ impl LowLevelDriveOperation { drive_operation: Vec, epoch: &Epoch, epochs_per_era: u16, - cached_fee_version: &CachedEpochIndexFeeVersions, + fee_version: &FeeVersion, + cached_fee_versions: &Option, ) -> Result, Error> { drive_operation .into_iter() .map(|operation| match operation { PreCalculatedFeeResult(f) => Ok(f), FunctionOperation(op) => Ok(FeeResult { - processing_fee: op.cost(epoch), + processing_fee: op.cost(fee_version), ..Default::default() }), _ => { let cost = operation.operation_cost()?; - let storage_fee = cost.storage_cost(epoch, cached_fee_version)?; - let processing_fee = cost.ephemeral_cost(epoch, cached_fee_version)?; + // There is no need for a checked multiply here because added bytes are u64 and + // storage disk usage credit per byte should never be high enough to cause an overflow + let storage_fee = cost.storage_cost.added_bytes as u64 * fee_version.storage.storage_disk_usage_credit_per_byte; + let processing_fee = cost.ephemeral_cost(fee_version)?; let (fee_refunds, removed_bytes_from_system) = match cost.storage_cost.removed_bytes { NoStorageRemoval => (FeeRefunds::default(), 0), @@ -226,6 +243,7 @@ impl LowLevelDriveOperation { (FeeRefunds::default(), amount) } SectionedStorageRemoval(mut removal_per_epoch_by_identifier) => { + let cached_fee_versions = cached_fee_versions.as_ref().ok_or(Error::Drive(DriveError::CorruptedCodeExecution("expected previous epoch index fee versions to be able to offer refunds")))?; let system_amount = removal_per_epoch_by_identifier .remove(&Identifier::default()) .map_or(0, |a| a.values().sum()); @@ -235,7 +253,7 @@ impl LowLevelDriveOperation { removal_per_epoch_by_identifier, epoch.index, epochs_per_era, - cached_fee_version, + cached_fee_versions, )?, system_amount, ) @@ -410,14 +428,7 @@ pub trait DriveCost { /// Ephemeral cost fn ephemeral_cost( &self, - epoch: &Epoch, - cached_fee_version: &CachedEpochIndexFeeVersions, - ) -> Result; - /// Storage cost - fn storage_cost( - &self, - epoch: &Epoch, - cached_fee_version: &CachedEpochIndexFeeVersions, + fee_version: &FeeVersion, ) -> Result; } @@ -425,20 +436,17 @@ impl DriveCost for OperationCost { /// Return the ephemeral cost from the operation fn ephemeral_cost( &self, - epoch: &Epoch, - cached_fee_version: &CachedEpochIndexFeeVersions, - ) -> Result { - //todo: deal with epochs + fee_version: &FeeVersion, + ) -> Result { let OperationCost { seek_count, storage_cost, storage_loaded_bytes, hash_node_calls, } = self; - let epoch_cost_for_processing_credit_per_byte = - epoch.cost_for_known_cost_item(cached_fee_version, StorageProcessingCreditPerByte); + let epoch_cost_for_processing_credit_per_byte = fee_version.storage.storage_processing_credit_per_byte; let seek_cost = (*seek_count as u64) - .checked_mul(epoch.cost_for_known_cost_item(cached_fee_version, StorageSeekCost)) + .checked_mul(fee_version.storage.storage_seek_cost) .ok_or_else(|| get_overflow_error("seek cost overflow"))?; let storage_added_bytes_ephemeral_cost = (storage_cost.added_bytes as u64) .checked_mul(epoch_cost_for_processing_credit_per_byte) @@ -453,12 +461,14 @@ impl DriveCost for OperationCost { // not accessible let storage_loaded_bytes_cost = (*storage_loaded_bytes as u64) .checked_mul( - epoch.cost_for_known_cost_item(cached_fee_version, StorageLoadCreditPerByte), + fee_version.storage.storage_load_credit_per_byte, ) .ok_or_else(|| get_overflow_error("storage loaded cost overflow"))?; + + // There is one block per hash node call + let blake3_total = fee_version.hashing.blake3_base + fee_version.hashing.blake3_per_block; // this can't overflow - let hash_node_cost = - FunctionOp::new_with_round_count(HashFunction::Blake3, *hash_node_calls).cost(epoch); + let hash_node_cost = blake3_total * (*hash_node_calls as u64); seek_cost .checked_add(storage_added_bytes_ephemeral_cost) .and_then(|c| c.checked_add(storage_replaced_bytes_ephemeral_cost)) @@ -467,19 +477,4 @@ impl DriveCost for OperationCost { .and_then(|c| c.checked_add(hash_node_cost)) .ok_or_else(|| get_overflow_error("ephemeral cost addition overflow")) } - - /// Return the storage cost from the operation - fn storage_cost( - &self, - epoch: &Epoch, - cached_fee_version: &CachedEpochIndexFeeVersions, - ) -> Result { - //todo: deal with epochs - let OperationCost { storage_cost, .. } = self; - (storage_cost.added_bytes as u64) - .checked_mul( - epoch.cost_for_known_cost_item(cached_fee_version, StorageDiskUsageCreditPerByte), - ) - .ok_or_else(|| get_overflow_error("storage written bytes cost overflow")) - } } diff --git a/packages/rs-platform-version/src/version/fee/hashing/mod.rs b/packages/rs-platform-version/src/version/fee/hashing/mod.rs index 241d060c53..4f61d69a7f 100644 --- a/packages/rs-platform-version/src/version/fee/hashing/mod.rs +++ b/packages/rs-platform-version/src/version/fee/hashing/mod.rs @@ -5,10 +5,11 @@ pub mod v1; #[derive(Clone, Debug, Default)] pub struct FeeHashingVersion { - pub double_sha256_base: u64, - pub double_sha256_per_block: u64, pub single_sha256_base: u64, - pub single_sha256_per_block: u64, + pub blake3_base: u64, + pub sha256_ripe_md160_base: u64, + pub sha256_per_block: u64, + pub blake3_per_block: u64, } impl FeeHashingVersion { diff --git a/packages/rs-platform-version/src/version/fee/hashing/v1.rs b/packages/rs-platform-version/src/version/fee/hashing/v1.rs index a29d60858e..ebce88d17d 100644 --- a/packages/rs-platform-version/src/version/fee/hashing/v1.rs +++ b/packages/rs-platform-version/src/version/fee/hashing/v1.rs @@ -1,8 +1,6 @@ use crate::version::fee::hashing::FeeHashingVersion; pub const FEE_HASHING_VERSION1: FeeHashingVersion = FeeHashingVersion { - double_sha256_base: 500, - double_sha256_per_block: 400, single_sha256_base: 100, - single_sha256_per_block: 400, + sha256_per_block: 400, }; From a099d2e528fd648f2427cb456ecf1c66bff09498 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Wed, 3 Jul 2024 23:42:11 +0300 Subject: [PATCH 29/47] more work --- Cargo.lock | 1 + packages/rs-dpp/src/fee/default_costs/mod.rs | 27 ++++---- packages/rs-dpp/src/fee/fee_result/refunds.rs | 6 +- packages/rs-dpp/src/lib.rs | 2 +- .../src/execution/check_tx/v0/mod.rs | 18 +++--- .../engine/run_block_proposal/v0/mod.rs | 5 ++ .../v0/mod.rs | 6 +- .../process_block_fees/mod.rs | 3 + .../process_block_fees/v0/mod.rs | 5 +- .../update_masternode_identities/v0/mod.rs | 6 +- .../v0/mod.rs | 6 +- .../v0/mod.rs | 4 +- .../v0/mod.rs | 4 +- .../mod.rs | 2 + .../v0/mod.rs | 7 +- .../create_genesis_state/v0/mod.rs | 3 +- .../upgrade_protocol_version/v0/mod.rs | 13 ++-- .../execute_event/mod.rs | 3 +- .../execute_event/v0/mod.rs | 8 ++- .../process_raw_state_transitions/v0/mod.rs | 16 ++--- .../validate_fees_of_event/mod.rs | 11 +++- .../validate_fees_of_event/v0/mod.rs | 5 +- .../mod.rs | 2 + .../v0/mod.rs | 4 +- .../mod.rs | 1 + .../v0/mod.rs | 4 +- .../mod.rs | 2 + .../v0/mod.rs | 4 +- .../types/execution_operation/mod.rs | 4 +- .../triggers/withdrawals/v0/mod.rs | 1 + .../state_transitions/documents_batch/mod.rs | 64 +++++++++++-------- .../state_transitions/identity_create/mod.rs | 20 +++--- .../state_transitions/identity_top_up/mod.rs | 4 +- .../src/platform_types/platform_state/mod.rs | 13 ++++ .../platform_types/platform_state/v0/mod.rs | 26 ++++++++ packages/rs-drive-abci/src/query/mod.rs | 11 +++- .../src/test/helpers/fee_pools.rs | 1 + .../tests/strategy_tests/chain_lock_update.rs | 3 +- .../tests/strategy_tests/execution.rs | 2 +- .../tests/strategy_tests/main.rs | 8 +-- .../tests/strategy_tests/strategy.rs | 8 ++- packages/rs-drive-proof-verifier/src/proof.rs | 12 ++-- .../drive/batch/drive_op_batch/contract.rs | 2 + .../drive/batch/drive_op_batch/document.rs | 2 +- .../apply_drive_operations/mod.rs | 2 +- .../apply_drive_operations/v0/mod.rs | 8 +-- .../mod.rs | 4 +- .../v0/mod.rs | 4 +- .../drive/batch/drive_op_batch/identity.rs | 3 +- .../src/drive/batch/drive_op_batch/mod.rs | 25 +++++--- .../src/drive/batch/drive_op_batch/system.rs | 2 + .../drive/batch/drive_op_batch/withdrawals.rs | 11 ++-- packages/rs-drive/src/drive/cache.rs | 3 - .../v0/mod.rs | 3 +- .../get_fetch/fetch_contract/v0/mod.rs | 6 +- .../get_contract_with_fetch_info/mod.rs | 3 +- .../get_contract_with_fetch_info/v0/mod.rs | 6 +- .../contract/insert/insert_contract/v0/mod.rs | 3 +- packages/rs-drive/src/drive/contract/mod.rs | 2 + .../contract/update/update_contract/mod.rs | 13 +++- .../contract/update/update_contract/v0/mod.rs | 5 +- .../v0/mod.rs | 3 +- .../v0/mod.rs | 3 +- .../delete_document_for_contract/mod.rs | 3 + .../delete_document_for_contract/v0/mod.rs | 5 +- .../delete_document_for_contract_id/mod.rs | 4 +- .../delete_document_for_contract_id/v0/mod.rs | 7 +- .../rs-drive/src/drive/document/delete/mod.rs | 24 ++++++- .../document/insert/add_document/v0/mod.rs | 3 +- .../insert/add_document_for_contract/mod.rs | 3 + .../add_document_for_contract/v0/mod.rs | 5 +- .../rs-drive/src/drive/document/insert/mod.rs | 29 +++++++-- .../rs-drive/src/drive/document/query/mod.rs | 18 ++---- .../document/query/query_documents/v0/mod.rs | 3 +- .../rs-drive/src/drive/document/update/mod.rs | 23 ++++++- .../update_document_for_contract/mod.rs | 3 + .../update_document_for_contract/v0/mod.rs | 5 +- .../update_document_for_contract_id/mod.rs | 3 + .../update_document_for_contract_id/v0/mod.rs | 6 +- .../mod.rs | 3 + .../v0/mod.rs | 5 +- .../src/drive/fee/calculate_fee/mod.rs | 5 +- .../src/drive/fee/calculate_fee/v0/mod.rs | 8 ++- .../src/drive/identity/balance/update.rs | 14 ++-- .../fetch_identity_contract_nonce/v0/mod.rs | 3 +- .../balance/fetch_identity_balance/v0/mod.rs | 3 +- .../v0/mod.rs | 3 +- .../fetch_full_identity/v0/mod.rs | 3 +- .../nonce/fetch_identity_nonce/v0/mod.rs | 3 +- .../fetch_identity_balance_with_keys/mod.rs | 4 -- .../v0/mod.rs | 18 ++---- .../fetch_identity_with_balance/mod.rs | 4 -- .../fetch_identity_with_balance/v0/mod.rs | 12 ++-- .../fetch_identity_revision/v0/mod.rs | 3 +- .../insert/add_new_identity/v0/mod.rs | 3 +- .../src/drive/identity/key/fetch/mod.rs | 31 ++++----- .../v0/mod.rs | 3 +- .../add_new_unique_keys_to_identity/v0/mod.rs | 3 +- .../methods/add_to_identity_balance/v0/mod.rs | 4 +- .../methods/disable_identity_keys/v0/mod.rs | 4 +- .../methods/merge_identity_nonce/v0/mod.rs | 4 +- .../remove_from_identity_balance/mod.rs | 3 + .../remove_from_identity_balance/v0/mod.rs | 6 +- .../methods/update_identity_revision/mod.rs | 4 +- .../update_identity_revision/v0/mod.rs | 7 +- .../rs-drive/src/drive/identity/update/mod.rs | 16 +++-- .../withdrawals/transaction/index/mod.rs | 4 +- .../withdrawals/transaction/queue/mod.rs | 8 +-- packages/rs-drive/src/drive/open/mod.rs | 36 ----------- packages/rs-drive/src/fee/op.rs | 35 ++++------ packages/rs-drive/src/query/mod.rs | 9 +-- packages/rs-drive/src/tests/helpers/setup.rs | 1 + .../rs-drive/tests/deterministic_root_hash.rs | 1 + packages/rs-drive/tests/query_tests.rs | 28 +++++++- .../rs-drive/tests/query_tests_history.rs | 28 +++++--- packages/rs-platform-version/Cargo.toml | 1 + .../src/version/fee/data_contract/mod.rs | 4 +- .../src/version/fee/hashing/mod.rs | 11 ++-- .../src/version/fee/hashing/v1.rs | 3 + .../src/version/fee/mod.rs | 3 +- .../src/version/fee/processing/mod.rs | 4 +- .../src/version/fee/signature/mod.rs | 4 +- .../fee/state_transition_min_fees/mod.rs | 4 +- .../src/version/fee/storage/mod.rs | 4 +- packages/rs-sdk/src/platform/fetch_many.rs | 3 +- 125 files changed, 557 insertions(+), 425 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9393105b7a..e71187a1b8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3592,6 +3592,7 @@ dependencies = [ name = "platform-version" version = "1.0.0-dev.16" dependencies = [ + "bincode 2.0.0-rc.3", "sha2", "thiserror", ] diff --git a/packages/rs-dpp/src/fee/default_costs/mod.rs b/packages/rs-dpp/src/fee/default_costs/mod.rs index 698bb03774..15a7ef55aa 100644 --- a/packages/rs-dpp/src/fee/default_costs/mod.rs +++ b/packages/rs-dpp/src/fee/default_costs/mod.rs @@ -58,10 +58,10 @@ pub enum KnownCostItem { FetchIdentityBalanceProcessingCost, /// The cost for fetching an identity key FetchSingleIdentityKeyProcessingCost, - /// The cost for a Double SHA256 operation - DoubleSHA256, /// The cost for a Single SHA256 operation SingleSHA256, + /// The cost for a Blake3 operation + Blake3, /// The cost for a EcdsaSecp256k1 signature verification VerifySignatureEcdsaSecp256k1, /// The cost for a BLS12_381 signature verification @@ -101,9 +101,9 @@ impl KnownCostItem { .processing .fetch_single_identity_key_processing_cost } - KnownCostItem::DoubleSHA256 => { - //TODO: double_sha256_base or double_sha256_per_block? - fee_version.hashing.double_sha256_base + KnownCostItem::Blake3 => { + //TODO: blake3_base or blake3_per_block? + fee_version.hashing.blake3_base } KnownCostItem::SingleSHA256 => { //TODO: single_sha256_base or single_sha256_per_block? @@ -133,7 +133,7 @@ impl KnownCostItem { cached_fee_version: &CachedEpochIndexFeeVersions, ) -> Credits { let version = epoch.active_fee_version(cached_fee_version); - self.lookup_cost(version) + self.lookup_cost(&version) } } @@ -141,10 +141,7 @@ impl KnownCostItem { pub trait EpochCosts { /// Get the closest epoch in the past that has a cost table /// This is where the base costs last changed - fn active_fee_version( - &self, - cached_fee_version: &CachedEpochIndexFeeVersions, - ) -> &'static FeeVersion; + fn active_fee_version(&self, cached_fee_version: &CachedEpochIndexFeeVersions) -> FeeVersion; /// Get the cost for the known cost item fn cost_for_known_cost_item( &self, @@ -155,20 +152,18 @@ pub trait EpochCosts { impl EpochCosts for Epoch { /// Get the active fee version for an epoch - fn active_fee_version( - &self, - cached_fee_version: &CachedEpochIndexFeeVersions, - ) -> &'static FeeVersion { + fn active_fee_version(&self, cached_fee_version: &CachedEpochIndexFeeVersions) -> FeeVersion { // If the exact EpochIndex is matching to a FeeVersion update if let Some(fee_version) = cached_fee_version.get(&self.index) { - return fee_version; + return fee_version.clone(); } // else return the FeeVersion at lower adjacent EpochIndex (if available, else the FeeVersion of first PlatformVersion) cached_fee_version .range(..=self.index) .next_back() - .map(|(_, &fee_version)| fee_version) + .map(|(_, &ref fee_version)| fee_version) .unwrap_or_else(|| &PlatformVersion::first().fee_version) + .clone() } /// Get the cost for the known cost item diff --git a/packages/rs-dpp/src/fee/fee_result/refunds.rs b/packages/rs-dpp/src/fee/fee_result/refunds.rs index ca5e8192be..20d09f324d 100644 --- a/packages/rs-dpp/src/fee/fee_result/refunds.rs +++ b/packages/rs-dpp/src/fee/fee_result/refunds.rs @@ -39,7 +39,7 @@ impl FeeRefunds { storage_removal: I, current_epoch_index: EpochIndex, epochs_per_era: u16, - cached_fee_versions: &CachedEpochIndexFeeVersions, + previous_fee_versions: &CachedEpochIndexFeeVersions, ) -> Result where I: IntoIterator, @@ -58,7 +58,7 @@ impl FeeRefunds { // TODO We should use multipliers let credits: Credits = (bytes as Credits) - .checked_mul(Epoch::new(current_epoch_index)?.cost_for_known_cost_item(cached_fee_versions, StorageDiskUsageCreditPerByte)) + .checked_mul(Epoch::new(current_epoch_index)?.cost_for_known_cost_item(previous_fee_versions, StorageDiskUsageCreditPerByte)) .ok_or(ProtocolError::Overflow("storage written bytes cost overflow"))?; let (amount, _) = calculate_storage_fee_refund_amount_and_leftovers( @@ -186,7 +186,7 @@ mod tests { use platform_version::version::PlatformVersion; static EPOCH_CHANGE_FEE_VERSION_TEST: Lazy = - Lazy::new(|| BTreeMap::from([(0, &PlatformVersion::first().fee_version)])); + Lazy::new(|| BTreeMap::from([(0, PlatformVersion::first().fee_version.clone())])); mod from_storage_removal { use super::*; diff --git a/packages/rs-dpp/src/lib.rs b/packages/rs-dpp/src/lib.rs index e8a9346533..6b43ae45b3 100644 --- a/packages/rs-dpp/src/lib.rs +++ b/packages/rs-dpp/src/lib.rs @@ -80,7 +80,7 @@ pub mod prelude { /// A 1 here means we pay 1% more in processing fees. A 100 means we pay 100% more. pub type UserFeeIncrease = u16; - pub type CachedEpochIndexFeeVersions = BTreeMap; + pub type CachedEpochIndexFeeVersions = BTreeMap; } pub use bincode; diff --git a/packages/rs-drive-abci/src/execution/check_tx/v0/mod.rs b/packages/rs-drive-abci/src/execution/check_tx/v0/mod.rs index 155cced9da..d2d3b75bec 100644 --- a/packages/rs-drive-abci/src/execution/check_tx/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/check_tx/v0/mod.rs @@ -70,6 +70,7 @@ where state_read_guard.last_block_info(), transaction, platform_ref.state.current_platform_version()?, + Some(platform_ref.state.previous_fee_versions()), ) } else { Ok(UnpaidConsensusExecutionError( @@ -185,6 +186,7 @@ where platform_state.last_block_info(), None, platform_version, + Some(platform_state.previous_fee_versions()), )?; let (estimated_fee_result, errors) = validation_result.into_data_and_errors()?; @@ -468,7 +470,7 @@ mod tests { ) .expect("expected to process state transition"); - assert_eq!(processing_result.aggregated_fees().processing_fee, 2985330); + assert_eq!(processing_result.aggregated_fees().processing_fee, 3015190); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised let check_result = platform .check_tx( @@ -663,7 +665,7 @@ mod tests { // We have one invalid paid for state transition assert_eq!(processing_result.invalid_paid_count(), 1); - assert_eq!(processing_result.aggregated_fees().processing_fee, 905460); + assert_eq!(processing_result.aggregated_fees().processing_fee, 909480); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised let check_result = platform .check_tx( @@ -808,7 +810,7 @@ mod tests { // since a fee multiplier of 100 means 100% more of 1 (gives 2) assert_eq!( processing_result.aggregated_fees().processing_fee, - 2985330 * 2 + 3015190 * 2 // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised ); let check_result = platform @@ -1052,7 +1054,7 @@ mod tests { ) .expect("expected to process state transition"); - assert_eq!(processing_result.aggregated_fees().processing_fee, 2985330); + assert_eq!(processing_result.aggregated_fees().processing_fee, 3015190); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised platform .drive @@ -1136,8 +1138,8 @@ mod tests { assert_eq!( update_processing_result.aggregated_fees().processing_fee, - 7125710 - ); + 7151210 + ); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised let check_result = platform .check_tx( @@ -1251,7 +1253,7 @@ mod tests { ) .expect("expected to process state transition"); - assert_eq!(processing_result.aggregated_fees().processing_fee, 2985330); + assert_eq!(processing_result.aggregated_fees().processing_fee, 3015190); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised platform .drive @@ -1371,7 +1373,7 @@ mod tests { // We have one invalid paid for state transition assert_eq!(processing_result.invalid_paid_count(), 1); - assert_eq!(processing_result.aggregated_fees().processing_fee, 1231130); + assert_eq!(processing_result.aggregated_fees().processing_fee, 1238780); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised let check_result = platform .check_tx( diff --git a/packages/rs-drive-abci/src/execution/engine/run_block_proposal/v0/mod.rs b/packages/rs-drive-abci/src/execution/engine/run_block_proposal/v0/mod.rs index 38939ca2a7..240d42c212 100644 --- a/packages/rs-drive-abci/src/execution/engine/run_block_proposal/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/engine/run_block_proposal/v0/mod.rs @@ -337,6 +337,11 @@ where block_fees_v0.into(), transaction, platform_version, + Some( + block_execution_context + .block_platform_state() + .previous_fee_versions(), + ), )?; tracing::debug!(block_fees = ?processed_block_fees, "block fees are processed"); diff --git a/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/add_process_epoch_change_operations/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/add_process_epoch_change_operations/v0/mod.rs index 9c1de25646..0eb18363bf 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/add_process_epoch_change_operations/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/add_process_epoch_change_operations/v0/mod.rs @@ -171,7 +171,7 @@ mod tests { use crate::platform_types::platform_state::PlatformState; use dpp::block::block_info::BlockInfo; use dpp::fee::epoch::CreditsPerEpoch; - use dpp::prelude::CachedEpochIndexFeeVersions; + use drive::drive::defaults::INITIAL_PROTOCOL_VERSION; /// Process and validate an epoch change @@ -212,7 +212,7 @@ mod tests { &BlockInfo::default(), Some(transaction), platform_version, - &CachedEpochIndexFeeVersions::default(), + None, ) .expect("should apply batch"); } @@ -287,7 +287,7 @@ mod tests { &BlockInfo::default(), Some(transaction), platform_version, - &CachedEpochIndexFeeVersions::default(), + None, ) .expect("should apply batch"); diff --git a/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/mod.rs index 7ab4cbe08d..16239eb878 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/mod.rs @@ -1,5 +1,6 @@ mod v0; +use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use drive::grovedb::Transaction; @@ -40,6 +41,7 @@ impl Platform { block_fees: BlockFees, transaction: &Transaction, platform_version: &PlatformVersion, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { match platform_version .drive_abci @@ -52,6 +54,7 @@ impl Platform { block_fees, transaction, platform_version, + previous_fee_versions, ), version => Err(Error::Execution(ExecutionError::UnknownVersionMismatch { method: "process_block_fees".to_string(), diff --git a/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/v0/mod.rs index 373e97a1c6..0b819bdc6d 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/v0/mod.rs @@ -54,6 +54,7 @@ use crate::execution::types::block_state_info::v0::{ use crate::execution::types::processed_block_fees_outcome; use crate::platform_types::epoch_info::v0::EpochInfoV0Getters; use crate::platform_types::platform::Platform; + use drive::fee_pools::epochs::operations_factory::EpochOperations; /// From the Dash Improvement Proposal: @@ -81,6 +82,7 @@ impl Platform { block_fees: BlockFees, transaction: &Transaction, platform_version: &PlatformVersion, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { let epoch_info = block_execution_context.epoch_info(); let block_info = block_execution_context.block_state_info(); @@ -181,7 +183,7 @@ impl Platform { &block_info.to_block_info(epoch_info.try_into()?), Some(transaction), platform_version, - &CachedEpochIndexFeeVersions::default(), + previous_fee_versions, )?; let outcome = processed_block_fees_outcome::v0::ProcessedBlockFeesOutcome { @@ -304,6 +306,7 @@ mod tests { block_fees.clone(), transaction, platform_version, + None, ) .expect("should process block fees"); diff --git a/packages/rs-drive-abci/src/execution/platform_events/core_based_updates/update_masternode_identities/update_masternode_identities/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/core_based_updates/update_masternode_identities/update_masternode_identities/v0/mod.rs index a44cb61910..5069def96a 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/core_based_updates/update_masternode_identities/update_masternode_identities/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/core_based_updates/update_masternode_identities/update_masternode_identities/v0/mod.rs @@ -13,10 +13,11 @@ use dpp::version::PlatformVersion; use drive::drive::batch::DriveOperation::IdentityOperation; use drive::drive::batch::IdentityOperationType::AddNewIdentity; +use crate::platform_types::platform_state::v0::PlatformStateV0Methods; + use drive::grovedb::Transaction; use std::collections::BTreeMap; use tracing::Level; -use dpp::prelude::CachedEpochIndexFeeVersions; impl Platform where @@ -135,13 +136,14 @@ where } } + let previous_fee_verions = platform_state.map(|state| state.previous_fee_versions()); self.drive.apply_drive_operations( drive_operations, true, block_info, Some(transaction), platform_version, - &CachedEpochIndexFeeVersions::default(), + previous_fee_verions, )?; let height = block_info.height; diff --git a/packages/rs-drive-abci/src/execution/platform_events/fee_pool_inwards_distribution/add_distribute_block_fees_into_pools_operations/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/fee_pool_inwards_distribution/add_distribute_block_fees_into_pools_operations/v0/mod.rs index 239cfde5e7..9c6abb7461 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/fee_pool_inwards_distribution/add_distribute_block_fees_into_pools_operations/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/fee_pool_inwards_distribution/add_distribute_block_fees_into_pools_operations/v0/mod.rs @@ -75,7 +75,7 @@ impl Platform { mod tests { use super::*; use dpp::block::block_info::BlockInfo; - use dpp::prelude::CachedEpochIndexFeeVersions; + use drive::drive::batch::grovedb_op_batch::GroveDbOpBatchV0Methods; use crate::test::helpers::setup::TestPlatformBuilder; @@ -127,7 +127,7 @@ mod tests { &BlockInfo::default(), Some(&transaction), platform_version, - &CachedEpochIndexFeeVersions::default(), + None, ) .expect("should apply batch"); @@ -196,7 +196,7 @@ mod tests { &BlockInfo::default(), Some(&transaction), platform_version, - &CachedEpochIndexFeeVersions::default(), + None, ) .expect("should apply batch"); diff --git a/packages/rs-drive-abci/src/execution/platform_events/fee_pool_inwards_distribution/add_distribute_storage_fee_to_epochs_operations/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/fee_pool_inwards_distribution/add_distribute_storage_fee_to_epochs_operations/v0/mod.rs index d56f6d2b10..bdd17a3ef3 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/fee_pool_inwards_distribution/add_distribute_storage_fee_to_epochs_operations/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/fee_pool_inwards_distribution/add_distribute_storage_fee_to_epochs_operations/v0/mod.rs @@ -84,7 +84,7 @@ mod tests { perpetual_storage_epochs, CreditsPerEpoch, SignedCreditsPerEpoch, GENESIS_EPOCH_INDEX, }; use dpp::fee::Credits; - use dpp::prelude::CachedEpochIndexFeeVersions; + use drive::drive::batch::grovedb_op_batch::GroveDbOpBatchV0Methods; use drive::drive::batch::DriveOperation; use drive::drive::config::DriveConfig; @@ -197,7 +197,7 @@ mod tests { &BlockInfo::default(), Some(&transaction), platform_version, - &CachedEpochIndexFeeVersions::default(), + None, ) .expect("should apply batch"); diff --git a/packages/rs-drive-abci/src/execution/platform_events/fee_pool_outwards_distribution/add_distribute_fees_from_oldest_unpaid_epoch_pool_to_proposers_operations/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/fee_pool_outwards_distribution/add_distribute_fees_from_oldest_unpaid_epoch_pool_to_proposers_operations/v0/mod.rs index 7d2e1dba6d..b3c2d63b32 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/fee_pool_outwards_distribution/add_distribute_fees_from_oldest_unpaid_epoch_pool_to_proposers_operations/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/fee_pool_outwards_distribution/add_distribute_fees_from_oldest_unpaid_epoch_pool_to_proposers_operations/v0/mod.rs @@ -9,6 +9,7 @@ use drive::fee_pools::epochs::operations_factory::EpochOperations; use drive::fee_pools::update_unpaid_epoch_index_operation; use crate::execution::types::unpaid_epoch::v0::UnpaidEpochV0Getters; + use drive::grovedb::Transaction; impl Platform { @@ -91,7 +92,6 @@ impl Platform { mod tests { use super::*; use dpp::block::block_info::BlockInfo; - use dpp::prelude::CachedEpochIndexFeeVersions; use drive::common::test_utils::identities::create_test_masternode_identities_and_add_them_as_epoch_block_proposers; @@ -204,7 +204,7 @@ mod tests { &BlockInfo::default(), Some(&transaction), platform_version, - &CachedEpochIndexFeeVersions::default(), + None, ) .expect("should apply batch"); diff --git a/packages/rs-drive-abci/src/execution/platform_events/fee_pool_outwards_distribution/add_epoch_pool_to_proposers_payout_operations/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/fee_pool_outwards_distribution/add_epoch_pool_to_proposers_payout_operations/mod.rs index 3c4ed23591..19699ac8f5 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/fee_pool_outwards_distribution/add_epoch_pool_to_proposers_payout_operations/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/fee_pool_outwards_distribution/add_epoch_pool_to_proposers_payout_operations/mod.rs @@ -2,7 +2,9 @@ use crate::error::execution::ExecutionError; use crate::error::Error; use crate::execution::types::unpaid_epoch::UnpaidEpoch; use crate::platform_types::platform::Platform; + use dpp::fee::Credits; + use dpp::version::PlatformVersion; use drive::drive::batch::DriveOperation; use drive::grovedb::Transaction; diff --git a/packages/rs-drive-abci/src/execution/platform_events/fee_pool_outwards_distribution/add_epoch_pool_to_proposers_payout_operations/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/fee_pool_outwards_distribution/add_epoch_pool_to_proposers_payout_operations/v0/mod.rs index cfc195c877..19e7425a7c 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/fee_pool_outwards_distribution/add_epoch_pool_to_proposers_payout_operations/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/fee_pool_outwards_distribution/add_epoch_pool_to_proposers_payout_operations/v0/mod.rs @@ -9,6 +9,7 @@ use dpp::block::epoch::Epoch; use dpp::document::DocumentV0Getters; use dpp::fee::Credits; use dpp::platform_value::btreemap_extensions::BTreeValueMapHelper; + use dpp::version::PlatformVersion; use dpp::ProtocolError; use drive::drive::batch::DriveOperation; @@ -152,7 +153,7 @@ impl Platform { &BlockInfo::default(), Some(transaction), platform_version, - &None, + None, )?; batch.push(DriveOperation::GroveDBOpBatch(operations)); @@ -175,13 +176,13 @@ mod tests { use dpp::block::block_info::BlockInfo; use dpp::identity::accessors::IdentityGettersV0; use dpp::platform_value::btreemap_extensions::BTreeValueMapHelper; + use drive::common::test_utils::identities::create_test_masternode_identities_and_add_them_as_epoch_block_proposers; use drive::drive::batch::grovedb_op_batch::GroveDbOpBatchV0Methods; use drive::drive::batch::GroveDbOpBatch; use drive::fee_pools::epochs::operations_factory::EpochOperations; use rust_decimal::Decimal; use rust_decimal_macros::dec; - use dpp::prelude::CachedEpochIndexFeeVersions; #[test] fn test_payout_to_proposers() { @@ -283,7 +284,7 @@ mod tests { &BlockInfo::default(), Some(&transaction), platform_version, - &CachedEpochIndexFeeVersions::default(), + None, ) .expect("should apply batch"); diff --git a/packages/rs-drive-abci/src/execution/platform_events/initialization/create_genesis_state/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/initialization/create_genesis_state/v0/mod.rs index 005a539f15..bc15234953 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/initialization/create_genesis_state/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/initialization/create_genesis_state/v0/mod.rs @@ -55,7 +55,6 @@ use drive::drive::object_size_info::{ use drive::query::TransactionArg; use std::borrow::Cow; use std::collections::BTreeMap; -use dpp::prelude::CachedEpochIndexFeeVersions; const DPNS_DASH_TLD_DOCUMENT_ID: [u8; 32] = [ 215, 242, 197, 63, 70, 169, 23, 171, 110, 91, 57, 162, 215, 188, 38, 11, 100, 146, 137, 69, 55, @@ -190,7 +189,7 @@ impl Platform { &block_info, transaction, platform_version, - &CachedEpochIndexFeeVersions::default(), + None, // No previous_fee_versions needed for genesis state creation )?; Ok(()) diff --git a/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs index b41ed8bf7e..0e38e0702a 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs @@ -77,22 +77,23 @@ impl Platform { .clear_version_information(Some(transaction), &platform_version.drive) .map_err(Error::Drive)?; + let previous_fee_versions_map = block_platform_state.previous_fee_versions_mut(); + let platform_version = PlatformVersion::get(current_block_protocol_version)?; - let mut cached_fee_version = self.drive.cache.cached_fee_version.write(); // If cached_fee_version is non-empty - if let Some((_, &last_fee_version)) = cached_fee_version.iter().last() { + if let Some((_, &ref last_fee_version)) = previous_fee_versions_map.iter().last() { // Insert the new (epoch_index, fee_version) only if the new fee_version is different from the last_fee_version. if *last_fee_version != platform_version.fee_version { - cached_fee_version.insert( + previous_fee_versions_map.insert( epoch_info.current_epoch_index(), - &platform_version.fee_version, + platform_version.fee_version.clone(), ); } // In case of empty cached_fee_version, insert the new (epoch_index, fee_version) } else { - cached_fee_version.insert( + previous_fee_versions_map.insert( epoch_info.current_epoch_index(), - &platform_version.fee_version, + platform_version.fee_version.clone(), ); } diff --git a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/mod.rs index c30deeba24..9236eaf871 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/mod.rs @@ -5,6 +5,7 @@ use crate::error::Error; use crate::execution::types::execution_event::ExecutionEvent; use crate::platform_types::event_execution_result::EventExecutionResult; use crate::platform_types::platform::Platform; + use crate::rpc::core::CoreRPCLike; use dpp::block::block_info::BlockInfo; use dpp::consensus::ConsensusError; @@ -43,7 +44,7 @@ where block_info: &BlockInfo, transaction: &Transaction, platform_version: &PlatformVersion, - previous_fee_versions: &CachedEpochIndexFeeVersions, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { match platform_version .drive_abci diff --git a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/v0/mod.rs index dd96230866..92ffac7dae 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/v0/mod.rs @@ -7,6 +7,7 @@ use crate::platform_types::event_execution_result::EventExecutionResult::{ UnsuccessfulPaidExecution, }; use crate::platform_types::platform::Platform; + use crate::rpc::core::CoreRPCLike; use dpp::block::block_info::BlockInfo; use dpp::consensus::ConsensusError; @@ -49,7 +50,7 @@ where block_info: &BlockInfo, transaction: &Transaction, platform_version: &PlatformVersion, - previous_fee_versions: &CachedEpochIndexFeeVersions, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { let maybe_fee_validation_result = match event { ExecutionEvent::PaidFromAssetLock { .. } | ExecutionEvent::Paid { .. } => { @@ -58,6 +59,7 @@ where block_info, Some(transaction), platform_version, + previous_fee_versions, )?) } ExecutionEvent::PaidFromAssetLockWithoutIdentity { .. } @@ -141,7 +143,7 @@ where block_info, Some(transaction), platform_version, - &CachedEpochIndexFeeVersions::default(), + previous_fee_versions, ) .map_err(Error::Drive)?; @@ -166,7 +168,7 @@ where block_info, Some(transaction), platform_version, - &CachedEpochIndexFeeVersions::default(), + previous_fee_versions, ) .map_err(Error::Drive)?; Ok(SuccessfulFreeExecution) diff --git a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/process_raw_state_transitions/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/process_raw_state_transitions/v0/mod.rs index 2ab9e501d6..4b95793331 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/process_raw_state_transitions/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/process_raw_state_transitions/v0/mod.rs @@ -5,10 +5,6 @@ use crate::rpc::core::CoreRPCLike; use dpp::block::block_info::BlockInfo; use dpp::consensus::codes::ErrorWithCode; use dpp::fee::fee_result::FeeResult; -use dpp::util::hash::hash_single; -use dpp::validation::ConsensusValidationResult; -use std::time::Instant; -use dpp::prelude::CachedEpochIndexFeeVersions; use crate::execution::types::execution_event::ExecutionEvent; use crate::execution::types::state_transition_container::v0::{ @@ -18,6 +14,12 @@ use crate::execution::types::state_transition_container::v0::{ use crate::execution::validation::state_transition::processor::process_state_transition; use crate::metrics::state_transition_execution_histogram; use crate::platform_types::event_execution_result::EventExecutionResult; +use dpp::prelude::CachedEpochIndexFeeVersions; +use dpp::util::hash::hash_single; +use dpp::validation::ConsensusValidationResult; +use std::time::Instant; + +use crate::platform_types::platform_state::v0::PlatformStateV0Methods; use crate::platform_types::state_transitions_processing_result::{ StateTransitionExecutionResult, StateTransitionsProcessingResult, }; @@ -71,8 +73,6 @@ where config: &self.config, core_rpc: &self.core_rpc, }; - - let previous_fee_versions = block_platform_state.previous_fee_versions(); let state_transition_container = self.decode_raw_state_transitions(raw_state_transitions, platform_version)?; @@ -118,7 +118,7 @@ where block_info, transaction, platform_version, - previous_fee_versions, + Some(platform_ref.state.previous_fee_versions()), ) .unwrap_or_else(error_to_internal_error_execution_result) }) @@ -203,7 +203,7 @@ where block_info: &BlockInfo, transaction: &Transaction, platform_version: &PlatformVersion, - previous_fee_versions: &CachedEpochIndexFeeVersions, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result> { // State Transition is invalid if !validation_result.is_valid() { diff --git a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/mod.rs index ff62581d7c..76f1e1a094 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/mod.rs @@ -8,7 +8,7 @@ use crate::platform_types::platform::Platform; use crate::rpc::core::CoreRPCLike; use dpp::block::block_info::BlockInfo; use dpp::fee::fee_result::FeeResult; -use dpp::prelude::ConsensusValidationResult; +use dpp::prelude::{CachedEpochIndexFeeVersions, ConsensusValidationResult}; use dpp::version::PlatformVersion; use drive::grovedb::TransactionArg; @@ -41,6 +41,7 @@ where block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result, Error> { match platform_version .drive_abci @@ -48,7 +49,13 @@ where .state_transition_processing .validate_fees_of_event { - 0 => self.validate_fees_of_event_v0(event, block_info, transaction, platform_version), + 0 => self.validate_fees_of_event_v0( + event, + block_info, + transaction, + platform_version, + previous_fee_versions, + ), version => Err(Error::Execution(ExecutionError::UnknownVersionMismatch { method: "validate_fees_of_event".to_string(), known_versions: vec![0], diff --git a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/v0/mod.rs index 576f2dbb27..79a5616ae4 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/v0/mod.rs @@ -41,6 +41,7 @@ where block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result, Error> { match event { ExecutionEvent::PaidFromAssetLock { @@ -62,7 +63,7 @@ where block_info, transaction, platform_version, - &CachedEpochIndexFeeVersions::default(), + previous_fee_versions, ) .map_err(Error::Drive)?; @@ -114,7 +115,7 @@ where block_info, transaction, platform_version, - &CachedEpochIndexFeeVersions::default(), + previous_fee_versions, ) .map_err(Error::Drive)?; diff --git a/packages/rs-drive-abci/src/execution/platform_events/withdrawals/dequeue_and_build_unsigned_withdrawal_transactions/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/withdrawals/dequeue_and_build_unsigned_withdrawal_transactions/mod.rs index b67a25a1b3..851c2081c4 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/withdrawals/dequeue_and_build_unsigned_withdrawal_transactions/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/withdrawals/dequeue_and_build_unsigned_withdrawal_transactions/mod.rs @@ -1,9 +1,11 @@ use crate::error::execution::ExecutionError; use crate::error::Error; use crate::platform_types::platform::Platform; + use crate::platform_types::withdrawal::unsigned_withdrawal_txs::v0::UnsignedWithdrawalTxs; use crate::rpc::core::CoreRPCLike; use dpp::block::block_info::BlockInfo; + use dpp::version::PlatformVersion; use drive::grovedb::TransactionArg; diff --git a/packages/rs-drive-abci/src/execution/platform_events/withdrawals/dequeue_and_build_unsigned_withdrawal_transactions/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/withdrawals/dequeue_and_build_unsigned_withdrawal_transactions/v0/mod.rs index 15865bbf7c..ab33957241 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/withdrawals/dequeue_and_build_unsigned_withdrawal_transactions/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/withdrawals/dequeue_and_build_unsigned_withdrawal_transactions/v0/mod.rs @@ -25,7 +25,7 @@ use crate::{ rpc::core::CoreRPCLike, }; use dpp::errors::ProtocolError; -use dpp::prelude::CachedEpochIndexFeeVersions; + use drive::drive::config::DEFAULT_QUERY_LIMIT; const WITHDRAWAL_TRANSACTIONS_QUERY_LIMIT: u16 = 16; @@ -109,7 +109,7 @@ where block_info, transaction, platform_version, - &CachedEpochIndexFeeVersions::default(), + None, )?; Ok(UnsignedWithdrawalTxs::from_vec( diff --git a/packages/rs-drive-abci/src/execution/platform_events/withdrawals/pool_withdrawals_into_transactions_queue/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/withdrawals/pool_withdrawals_into_transactions_queue/mod.rs index 5d79a1c601..910445fe32 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/withdrawals/pool_withdrawals_into_transactions_queue/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/withdrawals/pool_withdrawals_into_transactions_queue/mod.rs @@ -1,6 +1,7 @@ use crate::error::execution::ExecutionError; use crate::error::Error; use crate::platform_types::platform::Platform; + use crate::rpc::core::CoreRPCLike; use dpp::block::block_info::BlockInfo; use dpp::version::PlatformVersion; diff --git a/packages/rs-drive-abci/src/execution/platform_events/withdrawals/pool_withdrawals_into_transactions_queue/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/withdrawals/pool_withdrawals_into_transactions_queue/v0/mod.rs index c4f6b9d4ca..2915c929a9 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/withdrawals/pool_withdrawals_into_transactions_queue/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/withdrawals/pool_withdrawals_into_transactions_queue/v0/mod.rs @@ -3,7 +3,7 @@ use dpp::block::block_info::BlockInfo; use dpp::data_contract::accessors::v0::DataContractV0Getters; use dpp::document::document_methods::DocumentMethodsV0; use dpp::document::{DocumentV0Getters, DocumentV0Setters}; -use dpp::prelude::CachedEpochIndexFeeVersions; + use dpp::version::PlatformVersion; use drive::drive::identity::withdrawals::WithdrawalTransactionIndexAndBytes; @@ -132,7 +132,7 @@ where block_info, transaction, platform_version, - &CachedEpochIndexFeeVersions::default(), + None, )?; Ok(()) diff --git a/packages/rs-drive-abci/src/execution/platform_events/withdrawals/update_broadcasted_withdrawal_statuses/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/withdrawals/update_broadcasted_withdrawal_statuses/mod.rs index af76346763..6d5cade8e6 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/withdrawals/update_broadcasted_withdrawal_statuses/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/withdrawals/update_broadcasted_withdrawal_statuses/mod.rs @@ -1,8 +1,10 @@ use crate::error::execution::ExecutionError; use crate::error::Error; use crate::platform_types::platform::Platform; + use crate::rpc::core::CoreRPCLike; use dpp::block::block_info::BlockInfo; + use dpp::version::PlatformVersion; use drive::grovedb::Transaction; diff --git a/packages/rs-drive-abci/src/execution/platform_events/withdrawals/update_broadcasted_withdrawal_statuses/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/withdrawals/update_broadcasted_withdrawal_statuses/v0/mod.rs index 3fed4d18bb..7af1aed652 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/withdrawals/update_broadcasted_withdrawal_statuses/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/withdrawals/update_broadcasted_withdrawal_statuses/v0/mod.rs @@ -5,11 +5,11 @@ use dpp::data_contracts::withdrawals_contract::WithdrawalStatus; use dpp::document::document_methods::DocumentMethodsV0; use dpp::document::{DocumentV0Getters, DocumentV0Setters}; use dpp::platform_value::btreemap_extensions::BTreeValueMapHelper; + use dpp::system_data_contracts::withdrawals_contract::v1::document_types::withdrawal; use dpp::version::PlatformVersion; use itertools::Itertools; use std::collections::HashSet; -use dpp::prelude::CachedEpochIndexFeeVersions; use drive::drive::batch::DriveOperation; use drive::drive::config::DEFAULT_QUERY_LIMIT; @@ -156,7 +156,7 @@ where block_info, transaction.into(), platform_version, - &CachedEpochIndexFeeVersions::default(), + None, )?; Ok(()) diff --git a/packages/rs-drive-abci/src/execution/types/execution_operation/mod.rs b/packages/rs-drive-abci/src/execution/types/execution_operation/mod.rs index a3c116c04c..9eecc528ec 100644 --- a/packages/rs-drive-abci/src/execution/types/execution_operation/mod.rs +++ b/packages/rs-drive-abci/src/execution/types/execution_operation/mod.rs @@ -87,8 +87,8 @@ impl ValidationOperation { fee_result.processing_fee = fee_result .processing_fee .checked_add( - platform_version.fee_version.hashing.double_sha256_base - + platform_version.fee_version.hashing.double_sha256_per_block + platform_version.fee_version.hashing.single_sha256_base + + platform_version.fee_version.hashing.sha256_per_block * (*block_count as u64), ) .ok_or(ExecutionError::Overflow( diff --git a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/documents_batch/data_triggers/triggers/withdrawals/v0/mod.rs b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/documents_batch/data_triggers/triggers/withdrawals/v0/mod.rs index 93b86034d6..051c716a8e 100644 --- a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/documents_batch/data_triggers/triggers/withdrawals/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/documents_batch/data_triggers/triggers/withdrawals/v0/mod.rs @@ -306,6 +306,7 @@ mod tests { true, None, platform_version, + None, ) .expect("expected to insert a document successfully"); diff --git a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/documents_batch/mod.rs b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/documents_batch/mod.rs index da5d970161..a497a57a67 100644 --- a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/documents_batch/mod.rs +++ b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/documents_batch/mod.rs @@ -732,7 +732,8 @@ mod tests { assert_eq!(processing_result.valid_count(), 1); - assert_eq!(processing_result.aggregated_fees().processing_fee, 3810570); + assert_eq!(processing_result.aggregated_fees().processing_fee, 3837600); + // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised } #[test] @@ -873,7 +874,8 @@ mod tests { assert_eq!(processing_result.valid_count(), 0); - assert_eq!(processing_result.aggregated_fees().processing_fee, 102690); + assert_eq!(processing_result.aggregated_fees().processing_fee, 103200); + // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised } #[test] @@ -1052,7 +1054,7 @@ mod tests { assert_eq!(processing_result.valid_count(), 0); - assert_eq!(processing_result.aggregated_fees().processing_fee, 1253950); + assert_eq!(processing_result.aggregated_fees().processing_fee, 1261600); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised let query_sender_results = platform .drive @@ -1156,7 +1158,8 @@ mod tests { assert_eq!(processing_result.valid_count(), 0); - assert_eq!(processing_result.aggregated_fees().processing_fee, 1244470); + assert_eq!(processing_result.aggregated_fees().processing_fee, 1252800); + // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised } } @@ -1295,7 +1298,8 @@ mod tests { assert_eq!(processing_result.valid_count(), 1); - assert_eq!(processing_result.aggregated_fees().processing_fee, 5588830); + assert_eq!(processing_result.aggregated_fees().processing_fee, 5612800); + // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised } #[test] @@ -1458,7 +1462,8 @@ mod tests { assert_eq!(processing_result.valid_count(), 0); - assert_eq!(processing_result.aggregated_fees().processing_fee, 1253950); + assert_eq!(processing_result.aggregated_fees().processing_fee, 1261600); + // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised } #[test] @@ -1621,7 +1626,8 @@ mod tests { assert_eq!(processing_result.valid_count(), 1); - assert_eq!(processing_result.aggregated_fees().processing_fee, 9951520); + assert_eq!(processing_result.aggregated_fees().processing_fee, 9999800); + // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised } #[test] @@ -1765,7 +1771,8 @@ mod tests { assert_eq!(processing_result.valid_count(), 0); - assert_eq!(processing_result.aggregated_fees().processing_fee, 1507670); + assert_eq!(processing_result.aggregated_fees().processing_fee, 1516000); + // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised } #[test] @@ -1854,7 +1861,8 @@ mod tests { assert_eq!(processing_result.valid_count(), 0); - assert_eq!(processing_result.aggregated_fees().processing_fee, 1244470); + assert_eq!(processing_result.aggregated_fees().processing_fee, 1252800); + // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised } } @@ -2014,7 +2022,8 @@ mod tests { assert_eq!(processing_result.aggregated_fees().storage_fee, 0); // There is no storage fee, as there are no indexes that will change - assert_eq!(processing_result.aggregated_fees().processing_fee, 4926670); + assert_eq!(processing_result.aggregated_fees().processing_fee, 4972400); + // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised } #[test] @@ -2205,7 +2214,7 @@ mod tests { Some(14992395) ); - assert_eq!(processing_result.aggregated_fees().processing_fee, 8622720); + assert_eq!(processing_result.aggregated_fees().processing_fee, 8691400); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised let query_sender_results = platform .drive @@ -2397,7 +2406,7 @@ mod tests { assert_eq!(processing_result.valid_count(), 0); - assert_eq!(processing_result.aggregated_fees().processing_fee, 1253950); + assert_eq!(processing_result.aggregated_fees().processing_fee, 1261600); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised let query_sender_results = platform .drive @@ -2547,7 +2556,7 @@ mod tests { assert_eq!(processing_result.valid_count(), 0); - assert_eq!(processing_result.aggregated_fees().processing_fee, 25090); + assert_eq!(processing_result.aggregated_fees().processing_fee, 25600); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised let query_sender_results = platform .drive @@ -2742,7 +2751,7 @@ mod tests { assert_eq!(processing_result.valid_count(), 1); - assert_eq!(processing_result.aggregated_fees().processing_fee, 9549440); + assert_eq!(processing_result.aggregated_fees().processing_fee, 9622200); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised let query_sender_results = platform .drive @@ -2809,7 +2818,8 @@ mod tests { assert_eq!(processing_result.valid_count(), 0); - assert_eq!(processing_result.aggregated_fees().processing_fee, 1107610); + assert_eq!(processing_result.aggregated_fees().processing_fee, 1115600); + // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised } } @@ -3145,7 +3155,7 @@ mod tests { assert_eq!(processing_result.valid_count(), 1); - assert_eq!(processing_result.aggregated_fees().processing_fee, 6075290); + assert_eq!(processing_result.aggregated_fees().processing_fee, 6133600); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised let query_sender_results = platform .drive @@ -3266,11 +3276,11 @@ mod tests { .change(), &BalanceChange::RemoveFromBalance { required_removed_balance: 123579000, - desired_removed_balance: 127933560, + desired_removed_balance: 127991300, // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised } ); - let original_creation_cost = 127933560; + let original_creation_cost = 127991300; // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised platform .drive @@ -3397,7 +3407,7 @@ mod tests { None ); - assert_eq!(processing_result.aggregated_fees().processing_fee, 6075290); + assert_eq!(processing_result.aggregated_fees().processing_fee, 6133600); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised let seller_balance = platform .drive @@ -3408,8 +3418,8 @@ mod tests { // the seller should have received 0.1 and already had 0.1 minus the processing fee and storage fee assert_eq!( seller_balance, - dash_to_credits!(0.1) - 6075290 - 216000 - original_creation_cost - ); + dash_to_credits!(0.1) - original_creation_cost - 6349600 + ); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised let query_sender_results = platform .drive @@ -3503,7 +3513,7 @@ mod tests { assert_eq!(processing_result.aggregated_fees().storage_fee, 64611000); - assert_eq!(processing_result.aggregated_fees().processing_fee, 10134040); + assert_eq!(processing_result.aggregated_fees().processing_fee, 10210200); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised assert_eq!( processing_result @@ -3537,8 +3547,8 @@ mod tests { // the seller should have received 0.1 and already had 0.1 minus the processing fee and storage fee assert_eq!( seller_balance, - dash_to_credits!(0.2) - 6075290 - 216000 - original_creation_cost + 22704503 - ); + dash_to_credits!(0.2) - original_creation_cost + 16354903 + ); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised let buyers_balance = platform .drive @@ -3547,7 +3557,7 @@ mod tests { .expect("expected that purchaser exists"); // the buyer payed 0.1, but also storage and processing fees - assert_eq!(buyers_balance, dash_to_credits!(0.9) - 10134040 - 64611000); + assert_eq!(buyers_balance, dash_to_credits!(0.9) - 74821200); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised } #[test] @@ -4413,7 +4423,7 @@ mod tests { assert_eq!(processing_result.valid_count(), 1); - assert_eq!(processing_result.aggregated_fees().processing_fee, 6075290); + assert_eq!(processing_result.aggregated_fees().processing_fee, 6133600); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised let query_sender_results = platform .drive @@ -4642,7 +4652,7 @@ mod tests { assert_eq!(processing_result.valid_count(), 0); - assert_eq!(processing_result.aggregated_fees().processing_fee, 25090); + assert_eq!(processing_result.aggregated_fees().processing_fee, 25600); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised let sender_documents_sql_string = format!("select * from card where $ownerId == '{}'", identity.id()); diff --git a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/identity_create/mod.rs b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/identity_create/mod.rs index a7db42dc74..0f62e6707a 100644 --- a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/identity_create/mod.rs +++ b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/identity_create/mod.rs @@ -306,7 +306,7 @@ mod tests { assert_eq!(processing_result.valid_count(), 1); - assert_eq!(processing_result.aggregated_fees().processing_fee, 2566730); + assert_eq!(processing_result.aggregated_fees().processing_fee, 2591600); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised platform .drive @@ -321,7 +321,7 @@ mod tests { .expect("expected to get identity balance") .expect("expected there to be an identity balance for this identity"); - assert_eq!(identity_balance, 99916163270); + assert_eq!(identity_balance, 99916138400); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised } #[test] @@ -462,7 +462,7 @@ mod tests { assert_eq!(processing_result.valid_count(), 0); - assert_eq!(processing_result.aggregated_fees().processing_fee, 10013800); // 10000000 penalty + 13800 processing + assert_eq!(processing_result.aggregated_fees().processing_fee, 10013000); // 10000000 penalty + 13800 processing platform .drive @@ -524,7 +524,7 @@ mod tests { assert_eq!(processing_result.valid_count(), 1); - assert_eq!(processing_result.aggregated_fees().processing_fee, 3170170); + assert_eq!(processing_result.aggregated_fees().processing_fee, 3196400); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised platform .drive @@ -539,7 +539,7 @@ mod tests { .expect("expected to get identity balance") .expect("expected there to be an identity balance for this identity"); - assert_eq!(identity_balance, 99911297030); // The identity balance is smaller than if there hadn't been any issue + assert_eq!(identity_balance, 99911271600); // The identity balance is smaller than if there hadn't been any issue // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised } #[test] @@ -691,7 +691,7 @@ mod tests { assert_eq!(processing_result.valid_count(), 0); - assert_eq!(processing_result.aggregated_fees().processing_fee, 10013800); // 10000000 penalty + 13800 processing + assert_eq!(processing_result.aggregated_fees().processing_fee, 10013000); // 10000000 penalty + 13800 processing platform .drive @@ -916,7 +916,7 @@ mod tests { assert_eq!(processing_result.valid_count(), 0); - assert_eq!(processing_result.aggregated_fees().processing_fee, 10013800); // 10000000 penalty + 13800 processing + assert_eq!(processing_result.aggregated_fees().processing_fee, 10013000); // 10000000 penalty + 13800 processing platform .drive @@ -1129,7 +1129,7 @@ mod tests { assert_eq!(processing_result.valid_count(), 0); - assert_eq!(processing_result.aggregated_fees().processing_fee, 10013800); // 10000000 penalty + 13800 processing + assert_eq!(processing_result.aggregated_fees().processing_fee, 10013000); // 10000000 penalty + 13800 processing platform .drive @@ -1214,7 +1214,7 @@ mod tests { assert_eq!(processing_result.valid_count(), 1); - assert_eq!(processing_result.aggregated_fees().processing_fee, 3170170); + assert_eq!(processing_result.aggregated_fees().processing_fee, 3196400); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised platform .drive @@ -1229,6 +1229,6 @@ mod tests { .expect("expected to get identity balance") .expect("expected there to be an identity balance for this identity"); - assert_eq!(identity_balance, 99911297030); // The identity balance is smaller than if there hadn't been any issue + assert_eq!(identity_balance, 99911271600); // The identity balance is smaller than if there hadn't been any issue // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised } } diff --git a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/identity_top_up/mod.rs b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/identity_top_up/mod.rs index 7bfa108e72..d6b901ba88 100644 --- a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/identity_top_up/mod.rs +++ b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/identity_top_up/mod.rs @@ -225,7 +225,7 @@ mod tests { assert_eq!(processing_result.valid_count(), 1); - assert_eq!(processing_result.aggregated_fees().processing_fee, 1146640); + assert_eq!(processing_result.aggregated_fees().processing_fee, 1152700); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised platform .drive @@ -244,6 +244,6 @@ mod tests { .expect("expected to get identity balance") .expect("expected there to be an identity balance for this identity"); - assert_eq!(identity_balance, 149993048360); // about 0.5 Dash starting balance + 1 Dash asset lock top up + assert_eq!(identity_balance, 149993042300); // about 0.5 Dash starting balance + 1 Dash asset lock top up // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised } } diff --git a/packages/rs-drive-abci/src/platform_types/platform_state/mod.rs b/packages/rs-drive-abci/src/platform_types/platform_state/mod.rs index d92a5a00c8..0ab7b4b07d 100644 --- a/packages/rs-drive-abci/src/platform_types/platform_state/mod.rs +++ b/packages/rs-drive-abci/src/platform_types/platform_state/mod.rs @@ -24,6 +24,7 @@ use crate::config::PlatformConfig; use crate::error::execution::ExecutionError; use crate::platform_types::signature_verification_quorum_set::SignatureVerificationQuorumSet; use dpp::block::block_info::BlockInfo; +use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::util::hash::hash_double; use std::collections::BTreeMap; @@ -494,4 +495,16 @@ impl PlatformStateV0Methods for PlatformState { PlatformState::V0(v0) => v0.instant_lock_validating_quorums_mut(), } } + + fn previous_fee_versions(&self) -> &CachedEpochIndexFeeVersions { + match self { + PlatformState::V0(v0) => v0.previous_fee_versions(), + } + } + + fn previous_fee_versions_mut(&mut self) -> &mut CachedEpochIndexFeeVersions { + match self { + PlatformState::V0(v0) => v0.previous_fee_versions_mut(), + } + } } diff --git a/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs b/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs index 2c22025628..b672c1d181 100644 --- a/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs +++ b/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs @@ -23,6 +23,7 @@ use crate::config::PlatformConfig; use crate::platform_types::signature_verification_quorum_set::{ SignatureVerificationQuorumSet, SignatureVerificationQuorumSetForSaving, }; +use dpp::prelude::CachedEpochIndexFeeVersions; use itertools::Itertools; use std::collections::BTreeMap; use std::fmt::{Debug, Formatter}; @@ -58,6 +59,9 @@ pub struct PlatformStateV0 { /// current HPMN masternode list pub hpmn_masternode_list: BTreeMap, + + /// previous Fee Versions + pub previous_fee_versions: CachedEpochIndexFeeVersions, } impl Debug for PlatformStateV0 { @@ -143,6 +147,9 @@ pub struct PlatformStateForSavingV0 { /// current HPMN masternode list pub hpmn_masternode_list: BTreeMap, + + /// previous FeeVersions + pub previous_fee_versions: CachedEpochIndexFeeVersions, } impl TryFrom for PlatformStateForSavingV0 { @@ -189,6 +196,7 @@ impl TryFrom for PlatformStateForSavingV0 { )) }) .collect::, Error>>()?, + previous_fee_versions: value.previous_fee_versions, }) } } @@ -223,6 +231,7 @@ impl From for PlatformStateV0 { .into_iter() .map(|(k, v)| (ProTxHash::from_byte_array(k.to_buffer()), v.into())) .collect(), + previous_fee_versions: value.previous_fee_versions, } } } @@ -254,6 +263,7 @@ impl PlatformStateV0 { full_masternode_list: Default::default(), hpmn_masternode_list: Default::default(), genesis_block_info: None, + previous_fee_versions: Default::default(), }; Ok(state) @@ -390,6 +400,12 @@ pub trait PlatformStateV0Methods { fn last_committed_block_epoch_ref(&self) -> &Epoch; /// The last block id hash fn last_committed_block_id_hash(&self) -> [u8; 32]; + + /// Returns reference to the previous feeversions + fn previous_fee_versions(&self) -> &CachedEpochIndexFeeVersions; + + /// Returns a mutable reference to the previous feeversions + fn previous_fee_versions_mut(&mut self) -> &mut CachedEpochIndexFeeVersions; } impl PlatformStateV0Methods for PlatformStateV0 { @@ -676,4 +692,14 @@ impl PlatformStateV0Methods for PlatformStateV0 { .map(|block_info| *block_info.block_id_hash()) .unwrap_or_default() } + + /// Returns a reference to the previous feeversions + fn previous_fee_versions(&self) -> &CachedEpochIndexFeeVersions { + &self.previous_fee_versions + } + + /// Returns a mutable reference to the previous feeversions + fn previous_fee_versions_mut(&mut self) -> &mut CachedEpochIndexFeeVersions { + &mut self.previous_fee_versions + } } diff --git a/packages/rs-drive-abci/src/query/mod.rs b/packages/rs-drive-abci/src/query/mod.rs index 8a3c6c8d4c..69465743eb 100644 --- a/packages/rs-drive-abci/src/query/mod.rs +++ b/packages/rs-drive-abci/src/query/mod.rs @@ -25,12 +25,12 @@ mod tests { use crate::test::helpers::setup::{TempPlatform, TestPlatformBuilder}; use dpp::block::block_info::BlockInfo; use dpp::data_contract::DataContract; + use drive::drive::batch::DataContractOperationType; use drive::drive::batch::DriveOperation::DataContractOperation; use platform_version::version::PlatformVersion; use std::borrow::Cow; use std::sync::Arc; - use dpp::prelude::CachedEpochIndexFeeVersions; pub fn setup_platform<'a>( with_genesis_state: bool, @@ -72,7 +72,14 @@ mod tests { platform .drive - .apply_drive_operations(vec![operation], true, &block_info, None, platform_version, &CachedEpochIndexFeeVersions::default()) + .apply_drive_operations( + vec![operation], + true, + &block_info, + None, + platform_version, + None, + ) .expect("expected to apply drive operations"); } diff --git a/packages/rs-drive-abci/src/test/helpers/fee_pools.rs b/packages/rs-drive-abci/src/test/helpers/fee_pools.rs index 5b5fb7aebe..718f78f738 100644 --- a/packages/rs-drive-abci/src/test/helpers/fee_pools.rs +++ b/packages/rs-drive-abci/src/test/helpers/fee_pools.rs @@ -115,6 +115,7 @@ fn create_test_mn_share_document( true, transaction, platform_version, + None, ) .expect("expected to insert a document successfully"); diff --git a/packages/rs-drive-abci/tests/strategy_tests/chain_lock_update.rs b/packages/rs-drive-abci/tests/strategy_tests/chain_lock_update.rs index c406e2159d..1b688bd0f1 100644 --- a/packages/rs-drive-abci/tests/strategy_tests/chain_lock_update.rs +++ b/packages/rs-drive-abci/tests/strategy_tests/chain_lock_update.rs @@ -5,8 +5,7 @@ mod tests { use crate::strategy::CoreHeightIncrease::RandomCoreHeightIncrease; use crate::strategy::{MasternodeListChangesStrategy, NetworkStrategy}; use drive_abci::config::{ - ChainLockConfig, ExecutionConfig, InstantLockConfig, PlatformConfig, PlatformTestConfig, - ValidatorSetConfig, + ExecutionConfig, InstantLockConfig, PlatformConfig, PlatformTestConfig, }; use drive_abci::test::helpers::setup::TestPlatformBuilder; diff --git a/packages/rs-drive-abci/tests/strategy_tests/execution.rs b/packages/rs-drive-abci/tests/strategy_tests/execution.rs index 0872895875..4a29620bb2 100644 --- a/packages/rs-drive-abci/tests/strategy_tests/execution.rs +++ b/packages/rs-drive-abci/tests/strategy_tests/execution.rs @@ -51,7 +51,7 @@ pub(crate) fn run_chain_for_strategy( platform: &mut Platform, block_count: u64, strategy: NetworkStrategy, - mut config: PlatformConfig, + config: PlatformConfig, seed: u64, ) -> ChainExecutionOutcome { // TODO: Do we want to sign instant locks or just disable verification? diff --git a/packages/rs-drive-abci/tests/strategy_tests/main.rs b/packages/rs-drive-abci/tests/strategy_tests/main.rs index bef89ceca8..029ffe167b 100644 --- a/packages/rs-drive-abci/tests/strategy_tests/main.rs +++ b/packages/rs-drive-abci/tests/strategy_tests/main.rs @@ -508,7 +508,7 @@ mod tests { .expect("expected to fetch balances") .expect("expected to have an identity to get balance from"); - assert_eq!(balance, 99864825980) + assert_eq!(balance, 99864783600) // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised } #[test] @@ -1168,7 +1168,7 @@ mod tests { .unwrap() .unwrap() ), - "3beaf287fb5fb712715e688ef3cf642e3e4042270907ebd022050b06af0cb433".to_string() + "bcb5f9c0dca6df5ead16b697d367edd9bc1f4202cfc74b46cab9e108fc173e6c".to_string() ) } @@ -1878,7 +1878,7 @@ mod tests { .unwrap() .unwrap() ), - "10fbe38850d752b491305b2587468788acbd6dd130272c5a8844d0da05e3a9cf".to_string() + "73eb0e8dc04ba2bb2c87f253a7576c4cdcfb17c1eacfb33793c6407c01a7a675".to_string() ) } @@ -2007,7 +2007,7 @@ mod tests { .unwrap() .unwrap() ), - "9ed86b1ed5d0f7a981cb0ff2f3943603a095a031c463b3389bce8a6f60e2b21e".to_string() + "8e5d5194786da57143df1b7b630feab11fb5c45d7bf01259418549de5d4b870e".to_string() ) } diff --git a/packages/rs-drive-abci/tests/strategy_tests/strategy.rs b/packages/rs-drive-abci/tests/strategy_tests/strategy.rs index 43fba42224..e9ec671d57 100644 --- a/packages/rs-drive-abci/tests/strategy_tests/strategy.rs +++ b/packages/rs-drive-abci/tests/strategy_tests/strategy.rs @@ -39,7 +39,7 @@ use drive_abci::platform_types::platform::Platform; use drive_abci::rpc::core::MockCoreRPCLike; use rand::prelude::{IteratorRandom, SliceRandom, StdRng}; use rand::Rng; -use strategy_tests::{KeyMaps, Strategy}; +use strategy_tests::{Strategy}; use strategy_tests::transitions::{create_state_transitions_for_identities, create_state_transitions_for_identities_and_proofs, instant_asset_lock_proof_fixture}; use std::borrow::Cow; use std::collections::{BTreeMap, HashMap, HashSet}; @@ -60,10 +60,12 @@ use dpp::state_transition::documents_batch_transition::document_transition::{Doc use drive::drive::document::query::QueryDocumentsOutcomeV0Methods; use dpp::state_transition::data_contract_create_transition::methods::v0::DataContractCreateTransitionMethodsV0; use dpp::state_transition::documents_batch_transition::document_transition::document_transfer_transition::DocumentTransferTransitionV0; -use dpp::state_transition::identity_topup_transition::v0::IdentityTopUpTransitionV0; + use drive_abci::abci::app::FullAbciApplication; use drive_abci::config::PlatformConfig; -use drive_abci::platform_types::signature_verification_quorum_set::{QuorumConfig, Quorums, SigningQuorum}; +use drive_abci::platform_types::signature_verification_quorum_set::{ + QuorumConfig, Quorums, SigningQuorum, +}; use drive_abci::platform_types::withdrawal::unsigned_withdrawal_txs::v0::UnsignedWithdrawalTxs; use crate::strategy::CoreHeightIncrease::NoCoreHeightIncrease; diff --git a/packages/rs-drive-proof-verifier/src/proof.rs b/packages/rs-drive-proof-verifier/src/proof.rs index b9db571ae2..78dd2e3780 100644 --- a/packages/rs-drive-proof-verifier/src/proof.rs +++ b/packages/rs-drive-proof-verifier/src/proof.rs @@ -9,10 +9,10 @@ use dapi_grpc::platform::v0::{ get_identity_balance_and_revision_request, get_identity_balance_request, get_identity_by_public_key_hash_request, get_identity_contract_nonce_request, get_identity_keys_request, get_identity_nonce_request, get_identity_request, - get_path_elements_request, GetIdentitiesContractKeysRequest, GetPathElementsRequest, - GetPathElementsResponse, GetProtocolVersionUpgradeStateRequest, - GetProtocolVersionUpgradeStateResponse, GetProtocolVersionUpgradeVoteStatusRequest, - GetProtocolVersionUpgradeVoteStatusResponse, ResponseMetadata, + get_path_elements_request, GetPathElementsRequest, GetPathElementsResponse, + GetProtocolVersionUpgradeStateRequest, GetProtocolVersionUpgradeStateResponse, + GetProtocolVersionUpgradeVoteStatusRequest, GetProtocolVersionUpgradeVoteStatusResponse, + ResponseMetadata, }; use dapi_grpc::platform::{ v0::{self as platform, key_request_type, KeyRequestType as GrpcKeyType}, @@ -36,7 +36,7 @@ use dapi_grpc::platform::v0::get_identities_contract_keys_request::GetIdentities use dapi_grpc::platform::v0::get_path_elements_request::GetPathElementsRequestV0; use dpp::block::block_info::BlockInfo; use dpp::identity::identities_contract_keys::IdentitiesContractKeys; -use dpp::identity::{IdentityPublicKey, Purpose}; +use dpp::identity::Purpose; use dpp::platform_value; use drive::drive::Drive; use drive::error::proof::ProofError; @@ -1216,7 +1216,7 @@ impl FromProof for IdentitiesContrac contract_id, document_type_name, purposes, - prove, + prove: _, } = v0; let identifiers = identities_ids .into_iter() diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/contract.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/contract.rs index b74eedd04c..dafc281ab1 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/contract.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/contract.rs @@ -11,6 +11,7 @@ use crate::drive::batch::drive_op_batch::finalize_task::{ }; use crate::error::drive::DriveError; use dpp::data_contract::accessors::v0::DataContractV0Getters; +use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{EstimatedLayerInformation, TransactionArg}; @@ -55,6 +56,7 @@ impl DriveLowLevelOperationConverter for DataContractOperationType<'_> { block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, + _previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result, Error> { match self { DataContractOperationType::ApplyContractWithSerialization { diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/document.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/document.rs index e77005d6d4..5a692e2ff6 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/document.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/document.rs @@ -102,7 +102,7 @@ impl DriveLowLevelOperationConverter for DocumentOperationType<'_> { block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, - previous_fee_versions: &CachedEpochIndexFeeVersions, + _previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result, Error> { match self { DocumentOperationType::AddDocument { diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/mod.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/mod.rs index 64633194bb..c20a6cec8e 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/mod.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/mod.rs @@ -40,7 +40,7 @@ impl Drive { block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, - previous_fee_versions: &CachedEpochIndexFeeVersions, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { match platform_version .drive diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs index 0d70be08d6..82ffe16527 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs @@ -16,8 +16,8 @@ use grovedb::batch::KeyInfoPath; use crate::drive::batch::drive_op_batch::finalize_task::{ DriveOperationFinalizationTasks, DriveOperationFinalizeTask, }; -use std::collections::HashMap; use dpp::prelude::CachedEpochIndexFeeVersions; +use std::collections::HashMap; impl Drive { /// Applies a list of high level DriveOperations to the drive, and calculates the fee for them. @@ -44,7 +44,7 @@ impl Drive { block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, - previous_fee_versions: &CachedEpochIndexFeeVersions, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { if operations.is_empty() { return Ok(FeeResult::default()); @@ -69,7 +69,7 @@ impl Drive { block_info, transaction, platform_version, - Some(previous_fee_versions), + previous_fee_versions, )?); } @@ -87,7 +87,7 @@ impl Drive { for task in finalize_tasks { task.execute(self, platform_version); } - + Drive::calculate_fee( None, Some(cost_operations), diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/mod.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/mod.rs index 9aa4f611fb..c8b3cb54f4 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/mod.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/mod.rs @@ -8,8 +8,8 @@ use dpp::block::block_info::BlockInfo; use dpp::version::PlatformVersion; -use grovedb::TransactionArg; use dpp::prelude::CachedEpochIndexFeeVersions; +use grovedb::TransactionArg; impl Drive { /// Convert a batch of drive operations to a batch of grove database operations. @@ -36,7 +36,7 @@ impl Drive { block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, - previous_fee_versions: &Option, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { match platform_version .drive diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/v0/mod.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/v0/mod.rs index 5c60d5b354..e2ae0955c9 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/v0/mod.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/v0/mod.rs @@ -6,11 +6,11 @@ use crate::error::Error; use crate::fee::op::LowLevelDriveOperation; use dpp::block::block_info::BlockInfo; +use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::batch::GroveDbOp; use grovedb::TransactionArg; use itertools::Itertools; -use dpp::prelude::CachedEpochIndexFeeVersions; impl Drive { /// Convert a batch of drive operations to a batch of grove database operations. @@ -37,7 +37,7 @@ impl Drive { block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, - previous_fee_versions: &Option, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { let ops = drive_batch_operations .into_iter() diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/identity.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/identity.rs index 78416eb878..08c2e2a04d 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/identity.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/identity.rs @@ -4,7 +4,7 @@ use crate::error::Error; use crate::fee::op::LowLevelDriveOperation; use dpp::block::block_info::BlockInfo; use dpp::identity::{Identity, IdentityPublicKey, KeyID}; -use dpp::prelude::{IdentityNonce, Revision}; +use dpp::prelude::{CachedEpochIndexFeeVersions, IdentityNonce, Revision}; use crate::drive::identity::update::methods::merge_identity_nonce::MergeIdentityContractNonceResultToResult; use dpp::version::PlatformVersion; @@ -104,6 +104,7 @@ impl DriveLowLevelOperationConverter for IdentityOperationType { block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, + _previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result, Error> { match self { IdentityOperationType::AddNewIdentity { diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/mod.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/mod.rs index 9b56cb3c31..c4ec7679ea 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/mod.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/mod.rs @@ -33,8 +33,8 @@ use crate::drive::batch::drive_op_batch::finalize_task::{ DriveOperationFinalizationTasks, DriveOperationFinalizeTask, }; use crate::error::drive::DriveError; -use std::collections::{BTreeMap, HashMap}; use dpp::prelude::CachedEpochIndexFeeVersions; +use std::collections::{BTreeMap, HashMap}; /// A converter that will get Drive Operations from High Level Operations pub trait DriveLowLevelOperationConverter { @@ -48,7 +48,7 @@ pub trait DriveLowLevelOperationConverter { block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, - previous_fee_versions: &Option, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result, Error>; } @@ -100,6 +100,7 @@ impl DriveLowLevelOperationConverter for DriveOperation<'_> { block_info, transaction, platform_version, + previous_fee_versions, ) } DriveOperation::DocumentOperation(document_operation_type) => document_operation_type @@ -109,6 +110,7 @@ impl DriveLowLevelOperationConverter for DriveOperation<'_> { block_info, transaction, platform_version, + previous_fee_versions, ), DriveOperation::WithdrawalOperation(withdrawal_operation_type) => { withdrawal_operation_type.into_low_level_drive_operations( @@ -117,6 +119,7 @@ impl DriveLowLevelOperationConverter for DriveOperation<'_> { block_info, transaction, platform_version, + previous_fee_versions, ) } DriveOperation::IdentityOperation(identity_operation_type) => identity_operation_type @@ -126,6 +129,7 @@ impl DriveLowLevelOperationConverter for DriveOperation<'_> { block_info, transaction, platform_version, + previous_fee_versions, ), DriveOperation::SystemOperation(system_operation_type) => system_operation_type .into_low_level_drive_operations( @@ -134,6 +138,7 @@ impl DriveLowLevelOperationConverter for DriveOperation<'_> { block_info, transaction, platform_version, + previous_fee_versions, ), DriveOperation::GroveDBOperation(op) => Ok(vec![GroveOperation(op)]), DriveOperation::GroveDBOpBatch(operations) => Ok(operations @@ -274,7 +279,7 @@ mod tests { &BlockInfo::default(), Some(&db_transaction), platform_version, - &CachedEpochIndexFeeVersions::default(), + None, ) .expect("expected to insert contract and document"); @@ -393,7 +398,7 @@ mod tests { &BlockInfo::default(), Some(&db_transaction), platform_version, - &CachedEpochIndexFeeVersions::default(), + None, ) .expect("expected to be able to insert documents"); @@ -505,7 +510,7 @@ mod tests { &BlockInfo::default(), Some(&db_transaction), platform_version, - &CachedEpochIndexFeeVersions::default(), + None, ) .expect("expected to be able to insert documents"); @@ -636,7 +641,7 @@ mod tests { &BlockInfo::default(), Some(&db_transaction), platform_version, - &CachedEpochIndexFeeVersions::default(), + None, ) .expect("expected to be able to insert documents"); @@ -745,7 +750,7 @@ mod tests { &BlockInfo::default(), Some(&db_transaction), platform_version, - &CachedEpochIndexFeeVersions::default(), + None, ) .expect("expected to be able to insert documents"); @@ -806,7 +811,7 @@ mod tests { &BlockInfo::default(), Some(&db_transaction), platform_version, - &CachedEpochIndexFeeVersions::default(), + None, ) .expect("expected to be able to update documents"); @@ -960,7 +965,7 @@ mod tests { &BlockInfo::default(), Some(&db_transaction), platform_version, - &CachedEpochIndexFeeVersions::default(), + None, ) .expect("expected to be able to insert documents"); @@ -1014,7 +1019,7 @@ mod tests { &BlockInfo::default(), Some(&db_transaction), platform_version, - &CachedEpochIndexFeeVersions::default(), + None, ) .expect("expected to be able to update documents"); diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/system.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/system.rs index ef0d61f204..facae0b632 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/system.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/system.rs @@ -7,6 +7,7 @@ use dpp::fee::Credits; use dpp::platform_value::Bytes36; use dpp::asset_lock::reduced_asset_lock_value::AssetLockValue; +use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{EstimatedLayerInformation, TransactionArg}; @@ -45,6 +46,7 @@ impl DriveLowLevelOperationConverter for SystemOperationType { _block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, + _previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result, Error> { match self { SystemOperationType::AddToSystemCredits { amount } => drive diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/withdrawals.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/withdrawals.rs index d7ec21a09f..1f11cb3c4c 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/withdrawals.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/withdrawals.rs @@ -1,10 +1,5 @@ use std::collections::HashMap; -use dpp::block::block_info::BlockInfo; -use dpp::version::PlatformVersion; -use grovedb::Element; -use grovedb::{batch::KeyInfoPath, EstimatedLayerInformation, TransactionArg}; - use crate::drive::grove_operations::BatchDeleteApplyType; use crate::drive::identity::withdrawals::paths::{ get_withdrawal_root_path_vec, get_withdrawal_transactions_queue_path, @@ -15,6 +10,11 @@ use crate::drive::identity::withdrawals::{ }; use crate::drive::object_size_info::PathKeyElementInfo; use crate::{drive::Drive, error::Error, fee::op::LowLevelDriveOperation}; +use dpp::block::block_info::BlockInfo; +use dpp::prelude::CachedEpochIndexFeeVersions; +use dpp::version::PlatformVersion; +use grovedb::Element; +use grovedb::{batch::KeyInfoPath, EstimatedLayerInformation, TransactionArg}; use super::DriveLowLevelOperationConverter; @@ -48,6 +48,7 @@ impl DriveLowLevelOperationConverter for WithdrawalOperationType { _block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, + _previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result, Error> { match self { WithdrawalOperationType::UpdateIndexCounter { index } => { diff --git a/packages/rs-drive/src/drive/cache.rs b/packages/rs-drive/src/drive/cache.rs index f4af9d1e5f..936869cf04 100644 --- a/packages/rs-drive/src/drive/cache.rs +++ b/packages/rs-drive/src/drive/cache.rs @@ -5,7 +5,6 @@ mod protocol_version; mod system_contracts; pub use data_contract::DataContractCache; -use dpp::prelude::CachedEpochIndexFeeVersions; pub use protocol_version::ProtocolVersionsCache; pub use system_contracts::SystemDataContracts; @@ -21,6 +20,4 @@ pub struct DriveCache { pub protocol_versions_counter: parking_lot::RwLock, /// Versioned system data contracts pub system_data_contracts: SystemDataContracts, - /// Cached Epoch changed FeeVersion - pub cached_fee_version: parking_lot::RwLock, } diff --git a/packages/rs-drive/src/drive/contract/apply/apply_contract_with_serialization/v0/mod.rs b/packages/rs-drive/src/drive/contract/apply/apply_contract_with_serialization/v0/mod.rs index 83920fd6d8..617adf9344 100644 --- a/packages/rs-drive/src/drive/contract/apply/apply_contract_with_serialization/v0/mod.rs +++ b/packages/rs-drive/src/drive/contract/apply/apply_contract_with_serialization/v0/mod.rs @@ -62,14 +62,13 @@ impl Drive { )?; cost_operations.push(CalculatedCostOperation(fetch_cost)); - let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(cost_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/contract/get_fetch/fetch_contract/v0/mod.rs b/packages/rs-drive/src/drive/contract/get_fetch/fetch_contract/v0/mod.rs index 4bbca6a25c..dc1f02ee64 100644 --- a/packages/rs-drive/src/drive/contract/get_fetch/fetch_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/contract/get_fetch/fetch_contract/v0/mod.rs @@ -84,7 +84,6 @@ impl Drive { .map_err(Error::Protocol) ); let drive_operation = CalculatedCostOperation(cost.clone()); - let cached_fee_versions = self.cache.cached_fee_version.read(); let fee = if let Some(epoch) = epoch { Some(cost_return_on_error_no_add!( &cost, @@ -94,7 +93,7 @@ impl Drive { epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + None, ) )) } else { @@ -140,7 +139,6 @@ impl Drive { .map_err(Error::Protocol) ); let drive_operation = CalculatedCostOperation(cost.clone()); - let cached_fee_versions = self.cache.cached_fee_version.read(); let fee = if let Some(epoch) = epoch { Some(cost_return_on_error_no_add!( &cost, @@ -150,7 +148,7 @@ impl Drive { epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions + None, ) )) } else { diff --git a/packages/rs-drive/src/drive/contract/get_fetch/get_contract_with_fetch_info/mod.rs b/packages/rs-drive/src/drive/contract/get_fetch/get_contract_with_fetch_info/mod.rs index 7bf0855d80..3f35b41193 100644 --- a/packages/rs-drive/src/drive/contract/get_fetch/get_contract_with_fetch_info/mod.rs +++ b/packages/rs-drive/src/drive/contract/get_fetch/get_contract_with_fetch_info/mod.rs @@ -213,6 +213,7 @@ mod tests { true, Some(&transaction), platform_version, + None, ) .expect("should update contract"); @@ -276,7 +277,7 @@ mod tests { assert_eq!( result.0, Some(FeeResult { - processing_fee: 4060, + processing_fee: 4400, // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised ..Default::default() }) ); diff --git a/packages/rs-drive/src/drive/contract/get_fetch/get_contract_with_fetch_info/v0/mod.rs b/packages/rs-drive/src/drive/contract/get_fetch/get_contract_with_fetch_info/v0/mod.rs index d162f3fb5f..817bd0e217 100644 --- a/packages/rs-drive/src/drive/contract/get_fetch/get_contract_with_fetch_info/v0/mod.rs +++ b/packages/rs-drive/src/drive/contract/get_fetch/get_contract_with_fetch_info/v0/mod.rs @@ -93,7 +93,6 @@ impl Drive { &mut drive_operations, platform_version, )?; - let cached_fee_versions = self.cache.cached_fee_version.read(); let fee_result = epoch.map_or(Ok(None), |epoch| { Drive::calculate_fee( None, @@ -101,7 +100,7 @@ impl Drive { epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, ) .map(Some) })?; @@ -150,7 +149,6 @@ impl Drive { known_fee.clone() } else { // we need to calculate new fee - let cached_fee_versions = self.cache.cached_fee_version.read(); let op = vec![CalculatedCostOperation(contract_fetch_info.cost.clone())]; let fee = Drive::calculate_fee( None, @@ -158,7 +156,7 @@ impl Drive { epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, )?; let updated_contract_fetch_info = Arc::new(DataContractFetchInfo { diff --git a/packages/rs-drive/src/drive/contract/insert/insert_contract/v0/mod.rs b/packages/rs-drive/src/drive/contract/insert/insert_contract/v0/mod.rs index 6a6a96499c..7ef7a0ac9a 100644 --- a/packages/rs-drive/src/drive/contract/insert/insert_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/contract/insert/insert_contract/v0/mod.rs @@ -70,14 +70,13 @@ impl Drive { platform_version, )?; - let cached_fee_versions = self.cache.cached_fee_version.read(); Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, ) } diff --git a/packages/rs-drive/src/drive/contract/mod.rs b/packages/rs-drive/src/drive/contract/mod.rs index b0f73db3ff..ce5d64651c 100644 --- a/packages/rs-drive/src/drive/contract/mod.rs +++ b/packages/rs-drive/src/drive/contract/mod.rs @@ -292,6 +292,7 @@ mod tests { true, None, platform_version, + None, ) .expect("expected to insert a document successfully"); } @@ -494,6 +495,7 @@ mod tests { false, None, platform_version, + None, ) .expect("expected to apply contract successfully"); } diff --git a/packages/rs-drive/src/drive/contract/update/update_contract/mod.rs b/packages/rs-drive/src/drive/contract/update/update_contract/mod.rs index 9b7b67048b..d3cfd7e949 100644 --- a/packages/rs-drive/src/drive/contract/update/update_contract/mod.rs +++ b/packages/rs-drive/src/drive/contract/update/update_contract/mod.rs @@ -8,6 +8,7 @@ use dpp::block::block_info::BlockInfo; use dpp::data_contract::DataContract; use dpp::fee::fee_result::FeeResult; +use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{Element, EstimatedLayerInformation, TransactionArg}; @@ -46,6 +47,7 @@ impl Drive { apply: bool, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { match platform_version .drive @@ -54,9 +56,14 @@ impl Drive { .update .update_contract { - 0 => { - self.update_contract_v0(contract, block_info, apply, transaction, platform_version) - } + 0 => self.update_contract_v0( + contract, + block_info, + apply, + transaction, + platform_version, + previous_fee_versions, + ), version => Err(Error::Drive(DriveError::UnknownVersionMismatch { method: "update_contract".to_string(), known_versions: vec![0], diff --git a/packages/rs-drive/src/drive/contract/update/update_contract/v0/mod.rs b/packages/rs-drive/src/drive/contract/update/update_contract/v0/mod.rs index 2bea06942d..1af835e940 100644 --- a/packages/rs-drive/src/drive/contract/update/update_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/contract/update/update_contract/v0/mod.rs @@ -16,6 +16,7 @@ use dpp::fee::fee_result::FeeResult; use dpp::data_contract::document_type::methods::DocumentTypeV0Methods; use dpp::serialization::PlatformSerializableWithPlatformVersion; +use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{Element, EstimatedLayerInformation, TransactionArg}; @@ -53,6 +54,7 @@ impl Drive { apply: bool, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { if !apply { return self.insert_contract( @@ -126,14 +128,13 @@ impl Drive { .data_contracts .insert(updated_contract_fetch_info, transaction.is_some()); - let cached_fee_versions = self.cache.cached_fee_version.read(); Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + previous_fee_versions, ) } diff --git a/packages/rs-drive/src/drive/credit_pools/pending_epoch_refunds/methods/add_delete_pending_epoch_refunds_except_specified/v0/mod.rs b/packages/rs-drive/src/drive/credit_pools/pending_epoch_refunds/methods/add_delete_pending_epoch_refunds_except_specified/v0/mod.rs index df3c849d1f..68103d8d46 100644 --- a/packages/rs-drive/src/drive/credit_pools/pending_epoch_refunds/methods/add_delete_pending_epoch_refunds_except_specified/v0/mod.rs +++ b/packages/rs-drive/src/drive/credit_pools/pending_epoch_refunds/methods/add_delete_pending_epoch_refunds_except_specified/v0/mod.rs @@ -68,7 +68,6 @@ mod tests { use dpp::version::PlatformVersion; use grovedb::batch::Op; - use dpp::prelude::CachedEpochIndexFeeVersions; #[test] fn should_add_delete_operations_v0() { @@ -98,7 +97,7 @@ mod tests { &BlockInfo::default(), Some(&transaction), platform_version, - &CachedEpochIndexFeeVersions::default(), + None, ) .expect("should apply batch"); diff --git a/packages/rs-drive/src/drive/credit_pools/pending_epoch_refunds/methods/fetch_and_add_pending_epoch_refunds_to_collection/v0/mod.rs b/packages/rs-drive/src/drive/credit_pools/pending_epoch_refunds/methods/fetch_and_add_pending_epoch_refunds_to_collection/v0/mod.rs index b054e1e731..008eccb932 100644 --- a/packages/rs-drive/src/drive/credit_pools/pending_epoch_refunds/methods/fetch_and_add_pending_epoch_refunds_to_collection/v0/mod.rs +++ b/packages/rs-drive/src/drive/credit_pools/pending_epoch_refunds/methods/fetch_and_add_pending_epoch_refunds_to_collection/v0/mod.rs @@ -79,7 +79,6 @@ mod tests { use crate::tests::helpers::setup::setup_drive_with_initial_state_structure; use dpp::block::block_info::BlockInfo; use dpp::fee::epoch::CreditsPerEpoch; - use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; @@ -110,7 +109,7 @@ mod tests { &BlockInfo::default(), Some(&transaction), platform_version, - &CachedEpochIndexFeeVersions::default(), + None, ) .expect("should apply batch"); diff --git a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/mod.rs b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/mod.rs index fe1d9b0b46..edcf3fd6e4 100644 --- a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/mod.rs @@ -11,6 +11,7 @@ use dpp::fee::fee_result::FeeResult; use dpp::version::PlatformVersion; use dpp::identifier::Identifier; +use dpp::prelude::CachedEpochIndexFeeVersions; use grovedb::TransactionArg; impl Drive { @@ -38,6 +39,7 @@ impl Drive { apply: bool, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { match platform_version .drive @@ -54,6 +56,7 @@ impl Drive { apply, transaction, platform_version, + previous_fee_versions, ), version => Err(Error::Drive(DriveError::UnknownVersionMismatch { method: "delete_document_for_contract".to_string(), diff --git a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/v0/mod.rs b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/v0/mod.rs index 2ce77396f9..40fd87af58 100644 --- a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/v0/mod.rs @@ -6,6 +6,7 @@ use dpp::data_contract::DataContract; use dpp::fee::fee_result::FeeResult; use dpp::identifier::Identifier; +use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{EstimatedLayerInformation, TransactionArg}; @@ -23,6 +24,7 @@ impl Drive { apply: bool, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { let mut drive_operations: Vec = vec![]; let estimated_costs_only_with_layer_info = if apply { @@ -39,14 +41,13 @@ impl Drive { &mut drive_operations, platform_version, )?; - let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + previous_fee_versions, )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/mod.rs b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/mod.rs index 5305f991ac..52adcde583 100644 --- a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/mod.rs @@ -12,7 +12,7 @@ use crate::error::Error; use dpp::fee::fee_result::FeeResult; use dpp::identifier::Identifier; - +use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; impl Drive { @@ -41,6 +41,7 @@ impl Drive { apply: bool, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { match platform_version .drive @@ -57,6 +58,7 @@ impl Drive { apply, transaction, platform_version, + previous_fee_versions, ), version => Err(Error::Drive(DriveError::UnknownVersionMismatch { method: "delete_document_for_contract_id".to_string(), diff --git a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/v0/mod.rs b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/v0/mod.rs index f7ac840a66..6197f1aef3 100644 --- a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/v0/mod.rs @@ -14,7 +14,7 @@ use crate::fee::op::LowLevelDriveOperation; use dpp::fee::fee_result::FeeResult; use dpp::identifier::Identifier; - +use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; impl Drive { @@ -30,6 +30,7 @@ impl Drive { apply: bool, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { let mut drive_operations: Vec = vec![]; let estimated_costs_only_with_layer_info = if apply { @@ -60,15 +61,13 @@ impl Drive { &mut drive_operations, platform_version, )?; - - let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + previous_fee_versions, )?; Ok(fees) diff --git a/packages/rs-drive/src/drive/document/delete/mod.rs b/packages/rs-drive/src/drive/document/delete/mod.rs index fffb347f3f..d7e967dd30 100644 --- a/packages/rs-drive/src/drive/document/delete/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/mod.rs @@ -80,7 +80,7 @@ mod tests { use dpp::version::PlatformVersion; static EPOCH_CHANGE_FEE_VERSION_TEST: Lazy = - Lazy::new(|| BTreeMap::from([(0, &PlatformVersion::first().fee_version)])); + Lazy::new(|| BTreeMap::from([(0, PlatformVersion::first().fee_version.clone())])); #[test] fn test_add_and_remove_family_one_document_no_transaction() { @@ -132,6 +132,7 @@ mod tests { true, None, platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to insert a document successfully"); @@ -167,6 +168,7 @@ mod tests { true, None, platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to be able to delete the document"); @@ -223,6 +225,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to insert a document successfully"); @@ -266,6 +269,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to be able to delete the document"); @@ -361,6 +365,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to insert a document successfully"); @@ -395,6 +400,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to insert a document successfully"); @@ -433,6 +439,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to be able to delete the document"); @@ -471,6 +478,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to be able to delete the document"); @@ -538,6 +546,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to insert a document successfully"); @@ -568,6 +577,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to insert a document successfully"); @@ -606,6 +616,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to be able to delete the document"); @@ -636,6 +647,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to insert a document successfully"); @@ -658,6 +670,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to be able to delete the document"); @@ -677,6 +690,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to be able to delete the document"); @@ -734,6 +748,7 @@ mod tests { true, None, platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to insert a document successfully"); @@ -753,6 +768,7 @@ mod tests { true, None, platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to be able to delete the document"); } @@ -806,6 +822,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to insert a document successfully"); @@ -834,6 +851,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to be able to delete the document"); @@ -904,6 +922,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to insert a document successfully"); @@ -932,11 +951,12 @@ mod tests { false, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to be able to delete the document"); assert!(fee_result.fee_refunds.0.is_empty()); assert_eq!(fee_result.storage_fee, 0); - assert_eq!(fee_result.processing_fee, 145470580); + assert_eq!(fee_result.processing_fee, 145553200); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised } } diff --git a/packages/rs-drive/src/drive/document/insert/add_document/v0/mod.rs b/packages/rs-drive/src/drive/document/insert/add_document/v0/mod.rs index 65da7c0d67..9a3cd04a3f 100644 --- a/packages/rs-drive/src/drive/document/insert/add_document/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/insert/add_document/v0/mod.rs @@ -58,14 +58,13 @@ impl Drive { &mut drive_operations, platform_version, )?; - let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/document/insert/add_document_for_contract/mod.rs b/packages/rs-drive/src/drive/document/insert/add_document_for_contract/mod.rs index c01d6d9a81..c5fb03d9d7 100644 --- a/packages/rs-drive/src/drive/document/insert/add_document_for_contract/mod.rs +++ b/packages/rs-drive/src/drive/document/insert/add_document_for_contract/mod.rs @@ -9,6 +9,7 @@ use crate::error::Error; use dpp::block::block_info::BlockInfo; use dpp::fee::fee_result::FeeResult; +use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::TransactionArg; @@ -34,6 +35,7 @@ impl Drive { apply: bool, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { match platform_version .drive @@ -49,6 +51,7 @@ impl Drive { apply, transaction, platform_version, + previous_fee_versions, ), version => Err(Error::Drive(DriveError::UnknownVersionMismatch { method: "add_document_for_contract".to_string(), diff --git a/packages/rs-drive/src/drive/document/insert/add_document_for_contract/v0/mod.rs b/packages/rs-drive/src/drive/document/insert/add_document_for_contract/v0/mod.rs index 5727ce886d..863f582200 100644 --- a/packages/rs-drive/src/drive/document/insert/add_document_for_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/insert/add_document_for_contract/v0/mod.rs @@ -6,6 +6,7 @@ use crate::fee::op::LowLevelDriveOperation; use dpp::block::block_info::BlockInfo; use dpp::fee::fee_result::FeeResult; +use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::TransactionArg; @@ -20,6 +21,7 @@ impl Drive { apply: bool, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { let mut drive_operations: Vec = vec![]; self.add_document_for_contract_apply_and_add_to_operations( @@ -32,14 +34,13 @@ impl Drive { &mut drive_operations, platform_version, )?; - let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + previous_fee_versions, )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/document/insert/mod.rs b/packages/rs-drive/src/drive/document/insert/mod.rs index e44f974107..2e44246e99 100644 --- a/packages/rs-drive/src/drive/document/insert/mod.rs +++ b/packages/rs-drive/src/drive/document/insert/mod.rs @@ -100,7 +100,7 @@ mod tests { use dpp::version::PlatformVersion; static EPOCH_CHANGE_FEE_VERSION_TEST: Lazy = - Lazy::new(|| BTreeMap::from([(0, &PlatformVersion::first().fee_version)])); + Lazy::new(|| BTreeMap::from([(0, PlatformVersion::first().fee_version.clone())])); #[test] fn test_add_dashpay_documents_no_transaction() { @@ -140,6 +140,7 @@ mod tests { true, None, platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to insert a document successfully"); @@ -161,6 +162,7 @@ mod tests { true, None, platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect_err("expected not to be able to insert same document twice"); @@ -182,6 +184,7 @@ mod tests { true, None, platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to override a document successfully"); } @@ -233,6 +236,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to insert a document successfully"); @@ -254,6 +258,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect_err("expected not to be able to insert same document twice"); @@ -275,6 +280,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to override a document successfully"); } @@ -326,6 +332,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to insert a document successfully"); @@ -337,7 +344,7 @@ mod tests { &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte ), - processing_fee: 2317270, + processing_fee: 2356200, // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised ..Default::default() } ); @@ -390,6 +397,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to insert a document successfully"); @@ -401,7 +409,7 @@ mod tests { &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte ), - processing_fee: 1482010, + processing_fee: 1500200, // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised ..Default::default() } ); @@ -459,6 +467,7 @@ mod tests { false, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to insert a document successfully"); @@ -468,7 +477,7 @@ mod tests { StorageDiskUsageCreditPerByte, ); assert_eq!(1305, added_bytes); - assert_eq!(142936800, processing_fee); + assert_eq!(143011600, processing_fee); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised } #[test] @@ -518,6 +527,7 @@ mod tests { false, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to insert a document successfully"); @@ -539,6 +549,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to insert a document successfully"); @@ -684,6 +695,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to insert a document successfully"); @@ -695,7 +707,7 @@ mod tests { &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte ), - processing_fee: 2069390, + processing_fee: 2095400, // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised ..Default::default() } ); @@ -761,6 +773,7 @@ mod tests { true, None, platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to insert a document successfully"); @@ -782,6 +795,7 @@ mod tests { true, None, platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to insert a document successfully"); @@ -803,6 +817,7 @@ mod tests { true, None, platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to insert a document successfully"); } @@ -853,6 +868,7 @@ mod tests { true, None, platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to insert a document successfully"); @@ -874,6 +890,7 @@ mod tests { true, None, platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect_err( "expected not to be able to insert document with already existing unique index", @@ -931,6 +948,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("should create dash tld"); @@ -971,6 +989,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("should create random tld"); } diff --git a/packages/rs-drive/src/drive/document/query/mod.rs b/packages/rs-drive/src/drive/document/query/mod.rs index 713207302d..bc43483db7 100644 --- a/packages/rs-drive/src/drive/document/query/mod.rs +++ b/packages/rs-drive/src/drive/document/query/mod.rs @@ -160,14 +160,13 @@ impl Drive { protocol_version, )?; let cost = if let Some(block_info) = block_info { - let cached_fee_versions = self.cache.cached_fee_version.read(); let fee_result = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, )?; fee_result.processing_fee } else { @@ -215,14 +214,13 @@ impl Drive { protocol_version, )?; let cost = if let Some(block_info) = block_info { - let cached_fee_versions = self.cache.cached_fee_version.read(); let fee_result = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, )?; fee_result.processing_fee } else { @@ -255,14 +253,13 @@ impl Drive { protocol_version, )?; let cost = if let Some(block_info) = block_info { - let cached_fee_versions = self.cache.cached_fee_version.read(); let fee_result = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, )?; fee_result.processing_fee } else { @@ -313,14 +310,13 @@ impl Drive { protocol_version, )?; let cost = if let Some(block_info) = block_info { - let cached_fee_versions = self.cache.cached_fee_version.read(); let fee_result = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, )?; fee_result.processing_fee } else { @@ -373,14 +369,13 @@ impl Drive { protocol_version, )?; let cost = if let Some(block_info) = block_info { - let cached_fee_versions = self.cache.cached_fee_version.read(); let fee_result = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, )?; fee_result.processing_fee } else { @@ -464,14 +459,13 @@ impl Drive { platform_version, )?; let cost = if let Some(epoch) = epoch { - let cached_fee_versions = self.cache.cached_fee_version.read(); let fee_result = Drive::calculate_fee( None, Some(drive_operations), epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, )?; fee_result.processing_fee } else { diff --git a/packages/rs-drive/src/drive/document/query/query_documents/v0/mod.rs b/packages/rs-drive/src/drive/document/query/query_documents/v0/mod.rs index b76218b1ba..ab61eb9190 100644 --- a/packages/rs-drive/src/drive/document/query/query_documents/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/query/query_documents/v0/mod.rs @@ -103,14 +103,13 @@ impl Drive { }) .collect::, ProtocolError>>()?; let cost = if let Some(epoch) = epoch { - let cached_fee_versions = self.cache.cached_fee_version.read(); let fee_result = Drive::calculate_fee( None, Some(drive_operations), epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, )?; fee_result.processing_fee } else { diff --git a/packages/rs-drive/src/drive/document/update/mod.rs b/packages/rs-drive/src/drive/document/update/mod.rs index 13babbfa6b..233f0b4af0 100644 --- a/packages/rs-drive/src/drive/document/update/mod.rs +++ b/packages/rs-drive/src/drive/document/update/mod.rs @@ -99,7 +99,7 @@ mod tests { use platform_version::version::PlatformVersion; static EPOCH_CHANGE_FEE_VERSION_TEST: Lazy = - Lazy::new(|| BTreeMap::from([(0, &PlatformVersion::first().fee_version)])); + Lazy::new(|| BTreeMap::from([(0, PlatformVersion::first().fee_version.clone())])); #[test] fn test_create_and_update_document_same_transaction() { @@ -146,6 +146,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("should create alice profile"); @@ -175,6 +176,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("should update alice profile"); } @@ -222,6 +224,7 @@ mod tests { true, None, platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("should create alice profile"); @@ -263,6 +266,7 @@ mod tests { true, None, platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("should update alice profile"); @@ -318,6 +322,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("should create alice profile"); @@ -367,6 +372,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("should update alice profile"); @@ -428,6 +434,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("should create alice profile"); @@ -468,6 +475,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to delete document"); @@ -514,6 +522,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("should update alice profile"); @@ -627,6 +636,7 @@ mod tests { true, None, platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("should add document"); @@ -661,6 +671,7 @@ mod tests { StorageFlags::optional_default_as_cow(), None, platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("should update document"); @@ -682,6 +693,7 @@ mod tests { true, None, platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("should delete document"); } @@ -733,6 +745,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to insert a document successfully"); @@ -747,6 +760,7 @@ mod tests { StorageFlags::optional_default_as_cow(), Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect_err("expected not to be able to update a non mutable document"); @@ -768,6 +782,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect_err("expected not to be able to override a non mutable document"); } @@ -827,6 +842,7 @@ mod tests { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to insert a document successfully"); @@ -841,6 +857,7 @@ mod tests { StorageFlags::optional_default_as_cow(), Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to update a document with history successfully"); } @@ -1643,6 +1660,7 @@ mod tests { apply, transaction, platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to add document") } @@ -1664,6 +1682,7 @@ mod tests { true, transaction, platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to remove person") } @@ -1910,6 +1929,7 @@ mod tests { true, None, platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("should create document"); @@ -1932,6 +1952,7 @@ mod tests { storage_flags, None, platform_version, + None, ) .expect("should update document"); diff --git a/packages/rs-drive/src/drive/document/update/update_document_for_contract/mod.rs b/packages/rs-drive/src/drive/document/update/update_document_for_contract/mod.rs index ada6c71acf..85cfb58114 100644 --- a/packages/rs-drive/src/drive/document/update/update_document_for_contract/mod.rs +++ b/packages/rs-drive/src/drive/document/update/update_document_for_contract/mod.rs @@ -14,6 +14,7 @@ use dpp::fee::fee_result::FeeResult; use dpp::version::PlatformVersion; +use dpp::prelude::CachedEpochIndexFeeVersions; use grovedb::TransactionArg; use std::borrow::Cow; @@ -45,6 +46,7 @@ impl Drive { storage_flags: Option>, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { match platform_version .drive @@ -63,6 +65,7 @@ impl Drive { storage_flags, transaction, platform_version, + previous_fee_versions, ), version => Err(Error::Drive(DriveError::UnknownVersionMismatch { method: "update_document_for_contract".to_string(), diff --git a/packages/rs-drive/src/drive/document/update/update_document_for_contract/v0/mod.rs b/packages/rs-drive/src/drive/document/update/update_document_for_contract/v0/mod.rs index 24fef88512..7fde64cd74 100644 --- a/packages/rs-drive/src/drive/document/update/update_document_for_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/update/update_document_for_contract/v0/mod.rs @@ -9,6 +9,7 @@ use dpp::data_contract::document_type::DocumentTypeRef; use dpp::data_contract::DataContract; use dpp::document::Document; use dpp::fee::fee_result::FeeResult; +use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{EstimatedLayerInformation, TransactionArg}; @@ -29,6 +30,7 @@ impl Drive { storage_flags: Option>, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { let mut drive_operations: Vec = vec![]; let estimated_costs_only_with_layer_info = if apply { @@ -54,14 +56,13 @@ impl Drive { &mut drive_operations, platform_version, )?; - let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + previous_fee_versions, )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/mod.rs b/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/mod.rs index a81ac41b2b..900f2ad037 100644 --- a/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/mod.rs +++ b/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/mod.rs @@ -12,6 +12,7 @@ use dpp::fee::fee_result::FeeResult; use dpp::version::PlatformVersion; +use dpp::prelude::CachedEpochIndexFeeVersions; use grovedb::TransactionArg; use std::borrow::Cow; @@ -43,6 +44,7 @@ impl Drive { storage_flags: Option>, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { match platform_version .drive @@ -61,6 +63,7 @@ impl Drive { storage_flags, transaction, platform_version, + previous_fee_versions, ), version => Err(Error::Drive(DriveError::UnknownVersionMismatch { method: "update_document_for_contract_id".to_string(), diff --git a/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/v0/mod.rs b/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/v0/mod.rs index 461b51dae1..453700d863 100644 --- a/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/v0/mod.rs @@ -11,6 +11,7 @@ use dpp::data_contract::accessors::v0::DataContractV0Getters; use dpp::document::serialization_traits::DocumentPlatformConversionMethodsV0; use dpp::document::Document; use dpp::fee::fee_result::FeeResult; +use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{EstimatedLayerInformation, TransactionArg}; @@ -31,6 +32,7 @@ impl Drive { storage_flags: Option>, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { let mut drive_operations: Vec = vec![]; let estimated_costs_only_with_layer_info = if apply { @@ -74,15 +76,13 @@ impl Drive { &mut drive_operations, platform_version, )?; - - let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + previous_fee_versions, )?; Ok(fees) diff --git a/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/mod.rs b/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/mod.rs index 0eb574f2ee..d3c77b04b3 100644 --- a/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/mod.rs +++ b/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/mod.rs @@ -13,6 +13,7 @@ use dpp::fee::fee_result::FeeResult; use dpp::version::PlatformVersion; +use dpp::prelude::CachedEpochIndexFeeVersions; use grovedb::TransactionArg; use std::borrow::Cow; @@ -46,6 +47,7 @@ impl Drive { storage_flags: Option>, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { match platform_version .drive @@ -65,6 +67,7 @@ impl Drive { storage_flags, transaction, platform_version, + previous_fee_versions, ), version => Err(Error::Drive(DriveError::UnknownVersionMismatch { method: "update_document_with_serialization_for_contract".to_string(), diff --git a/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/v0/mod.rs b/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/v0/mod.rs index 14ce321997..55acefd99a 100644 --- a/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/v0/mod.rs @@ -10,6 +10,7 @@ use dpp::data_contract::DataContract; use dpp::document::Document; use dpp::fee::fee_result::FeeResult; +use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{EstimatedLayerInformation, TransactionArg}; @@ -31,6 +32,7 @@ impl Drive { storage_flags: Option>, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { let mut drive_operations: Vec = vec![]; let estimated_costs_only_with_layer_info = if apply { @@ -59,14 +61,13 @@ impl Drive { &mut drive_operations, platform_version, )?; - let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + previous_fee_versions, )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs b/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs index a85412ed2a..e69fed52e3 100644 --- a/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs +++ b/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs @@ -36,7 +36,7 @@ impl Drive { epoch: &Epoch, epochs_per_era: u16, platform_version: &PlatformVersion, - cached_fee_version: &CachedEpochIndexFeeVersions, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { match platform_version.drive.methods.fees.calculate_fee { 0 => Self::calculate_fee_v0( @@ -44,7 +44,8 @@ impl Drive { drive_operations, epoch, epochs_per_era, - cached_fee_version, + &platform_version.fee_version, + previous_fee_versions, ), version => Err(Error::Drive(DriveError::UnknownVersionMismatch { method: "Drive::calculate_fee".to_string(), diff --git a/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs b/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs index badf9284f1..07a0507a06 100644 --- a/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs +++ b/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs @@ -7,6 +7,7 @@ use dpp::fee::fee_result::FeeResult; use dpp::prelude::CachedEpochIndexFeeVersions; use enum_map::EnumMap; +use platform_version::version::fee::FeeVersion; impl Drive { /// Calculates fees for the given operations. Returns the storage and processing costs. @@ -16,7 +17,8 @@ impl Drive { drive_operations: Option>, epoch: &Epoch, epochs_per_era: u16, - cached_fee_version: &CachedEpochIndexFeeVersions, + fee_version: &FeeVersion, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { let mut aggregate_fee_result = FeeResult::default(); if let Some(base_operations) = base_operations { @@ -37,8 +39,8 @@ impl Drive { drive_operations, epoch, epochs_per_era, - , - cached_fee_version, + fee_version, + previous_fee_versions, )? { aggregate_fee_result.checked_add_assign(drive_fee_result)?; } diff --git a/packages/rs-drive/src/drive/identity/balance/update.rs b/packages/rs-drive/src/drive/identity/balance/update.rs index 03174ebb4b..b87b04d139 100644 --- a/packages/rs-drive/src/drive/identity/balance/update.rs +++ b/packages/rs-drive/src/drive/identity/balance/update.rs @@ -62,7 +62,7 @@ mod tests { assert_eq!( fee_result, FeeResult { - processing_fee: 517620, + processing_fee: 520000, // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised removed_bytes_from_system: 0, ..Default::default() } @@ -157,7 +157,7 @@ mod tests { fee_result, FeeResult { storage_fee: 0, - processing_fee: 1205880, + processing_fee: 1212000, // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised removed_bytes_from_system: 0, ..Default::default() } @@ -239,7 +239,7 @@ mod tests { fee_result, FeeResult { storage_fee: 0, - processing_fee: 879150, + processing_fee: 883400, // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised removed_bytes_from_system: 0, ..Default::default() } @@ -302,7 +302,7 @@ mod tests { assert_eq!( fee_result, FeeResult { - processing_fee: 9751440, + processing_fee: 9780000, // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised ..Default::default() } ); @@ -371,13 +371,14 @@ mod tests { true, Some(&db_transaction), platform_version, + None, ) .expect("expected to add to identity balance"); assert_eq!( fee_result, FeeResult { - processing_fee: 517620, + processing_fee: 520000, // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised removed_bytes_from_system: 0, ..Default::default() } @@ -429,6 +430,7 @@ mod tests { false, None, platform_version, + None, ) .expect("expected to add to identity balance"); @@ -443,7 +445,7 @@ mod tests { assert_eq!( fee_result, FeeResult { - processing_fee: 5418770, + processing_fee: 5432200, // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised ..Default::default() } ); diff --git a/packages/rs-drive/src/drive/identity/contract_info/identity_contract_nonce/fetch_identity_contract_nonce/v0/mod.rs b/packages/rs-drive/src/drive/identity/contract_info/identity_contract_nonce/fetch_identity_contract_nonce/v0/mod.rs index 874be86da4..6da40c2efd 100644 --- a/packages/rs-drive/src/drive/identity/contract_info/identity_contract_nonce/fetch_identity_contract_nonce/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/contract_info/identity_contract_nonce/fetch_identity_contract_nonce/v0/mod.rs @@ -106,14 +106,13 @@ impl Drive { &mut drive_operations, platform_version, )?; - let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, )?; Ok((value, fees)) } diff --git a/packages/rs-drive/src/drive/identity/fetch/balance/fetch_identity_balance/v0/mod.rs b/packages/rs-drive/src/drive/identity/fetch/balance/fetch_identity_balance/v0/mod.rs index 0e6277fd67..b64fc80df9 100644 --- a/packages/rs-drive/src/drive/identity/fetch/balance/fetch_identity_balance/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/fetch/balance/fetch_identity_balance/v0/mod.rs @@ -51,14 +51,13 @@ impl Drive { &mut drive_operations, platform_version, )?; - let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, )?; Ok((value, fees)) } diff --git a/packages/rs-drive/src/drive/identity/fetch/balance/fetch_identity_balance_include_debt/v0/mod.rs b/packages/rs-drive/src/drive/identity/fetch/balance/fetch_identity_balance_include_debt/v0/mod.rs index 00c7fba70a..65da1a2283 100644 --- a/packages/rs-drive/src/drive/identity/fetch/balance/fetch_identity_balance_include_debt/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/fetch/balance/fetch_identity_balance_include_debt/v0/mod.rs @@ -48,14 +48,13 @@ impl Drive { &mut drive_operations, platform_version, )?; - let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, )?; Ok((value, fees)) } diff --git a/packages/rs-drive/src/drive/identity/fetch/full_identity/fetch_full_identity/v0/mod.rs b/packages/rs-drive/src/drive/identity/fetch/full_identity/fetch_full_identity/v0/mod.rs index 81662d4b7c..65177cae1c 100644 --- a/packages/rs-drive/src/drive/identity/fetch/full_identity/fetch_full_identity/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/fetch/full_identity/fetch_full_identity/v0/mod.rs @@ -27,14 +27,13 @@ impl Drive { &mut drive_operations, platform_version, )?; - let cached_fee_versions = self.cache.cached_fee_version.read(); let fee = Drive::calculate_fee( None, Some(drive_operations), epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, )?; Ok((maybe_identity, fee)) } diff --git a/packages/rs-drive/src/drive/identity/fetch/nonce/fetch_identity_nonce/v0/mod.rs b/packages/rs-drive/src/drive/identity/fetch/nonce/fetch_identity_nonce/v0/mod.rs index 34d2598915..da803bbdd6 100644 --- a/packages/rs-drive/src/drive/identity/fetch/nonce/fetch_identity_nonce/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/fetch/nonce/fetch_identity_nonce/v0/mod.rs @@ -100,14 +100,13 @@ impl Drive { &mut drive_operations, platform_version, )?; - let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, )?; Ok((value, fees)) } diff --git a/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_balance_with_keys/mod.rs b/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_balance_with_keys/mod.rs index 00e4e65a21..6e0c95fe66 100644 --- a/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_balance_with_keys/mod.rs +++ b/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_balance_with_keys/mod.rs @@ -3,7 +3,6 @@ use crate::drive::identity::key::fetch::IdentityKeysRequest; use crate::drive::Drive; use crate::error::drive::DriveError; use crate::error::Error; -use dpp::block::epoch::Epoch; use dpp::fee::fee_result::FeeResult; use dpp::identity::PartialIdentity; use dpp::version::PlatformVersion; @@ -66,7 +65,6 @@ impl Drive { /// /// - `identity_key_request`: A request containing information about the identity whose balance and keys need to be fetched. /// - `apply`: Whether to apply the operation or just fetch an estimation. - /// - `epoch`: Current epoch for cost estimation. /// - `transaction`: A transaction argument for the database. /// - `platform_version`: The platform version being used. /// @@ -82,7 +80,6 @@ impl Drive { &self, identity_key_request: IdentityKeysRequest, apply: bool, - epoch: &Epoch, transaction: TransactionArg, platform_version: &PlatformVersion, ) -> Result<(Option, FeeResult), Error> { @@ -97,7 +94,6 @@ impl Drive { 0 => self.fetch_identity_balance_with_keys_with_cost_v0( identity_key_request, apply, - epoch, transaction, platform_version, ), diff --git a/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_balance_with_keys/v0/mod.rs b/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_balance_with_keys/v0/mod.rs index 3c420ee17e..9cdf384750 100644 --- a/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_balance_with_keys/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_balance_with_keys/v0/mod.rs @@ -5,15 +5,11 @@ use crate::drive::identity::key::fetch::{ use crate::drive::Drive; use crate::error::Error; -use dpp::block::epoch::Epoch; -use dpp::fee::default_costs::KnownCostItem::FetchIdentityBalanceProcessingCost; use dpp::fee::fee_result::FeeResult; use dpp::identifier::Identifier; use dpp::identity::PartialIdentity; use grovedb::TransactionArg; -use dpp::fee::default_costs::EpochCosts; - use dpp::version::PlatformVersion; use std::collections::{BTreeMap, BTreeSet}; @@ -74,16 +70,15 @@ impl Drive { &self, identity_key_request: IdentityKeysRequest, apply: bool, - epoch: &Epoch, transaction: TransactionArg, platform_version: &PlatformVersion, ) -> Result<(Option, FeeResult), Error> { - let cached_fee_version = self.cache.cached_fee_version.read(); - let balance_cost = - epoch.cost_for_known_cost_item(&cached_fee_version, FetchIdentityBalanceProcessingCost); + let balance_cost = platform_version + .fee_version + .processing + .fetch_identity_balance_processing_cost; if !apply { - let cached_fee_version = self.cache.cached_fee_version.read(); - let keys_cost = identity_key_request.processing_cost(epoch, &cached_fee_version)?; + let keys_cost = identity_key_request.processing_cost(platform_version)?; return Ok(( None, FeeResult::new_from_processing_fee(balance_cost + keys_cost), @@ -100,8 +95,7 @@ impl Drive { return Ok((None, FeeResult::new_from_processing_fee(balance_cost))); }; - let cached_fee_version = self.cache.cached_fee_version.read(); - let keys_cost = identity_key_request.processing_cost(epoch, &cached_fee_version)?; + let keys_cost = identity_key_request.processing_cost(platform_version)?; let loaded_public_keys = self.fetch_identity_keys::( identity_key_request, diff --git a/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_with_balance/mod.rs b/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_with_balance/mod.rs index f6ba139647..d9c96c8bd9 100644 --- a/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_with_balance/mod.rs +++ b/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_with_balance/mod.rs @@ -3,7 +3,6 @@ mod v0; use crate::drive::Drive; use crate::error::drive::DriveError; use crate::error::Error; -use dpp::block::epoch::Epoch; use dpp::fee::fee_result::FeeResult; use dpp::identity::PartialIdentity; @@ -63,7 +62,6 @@ impl Drive { /// /// - `identity_id`: A 32-byte array representing the ID of the identity. /// - `apply`: A boolean to determine if the balance should be applied or just estimated. - /// - `epoch`: The current epoch for fee calculations. /// - `transaction`: A transaction argument for the database. /// - `platform_version`: The platform version being used. /// @@ -79,7 +77,6 @@ impl Drive { &self, identity_id: [u8; 32], apply: bool, - epoch: &Epoch, transaction: TransactionArg, platform_version: &PlatformVersion, ) -> Result<(Option, FeeResult), Error> { @@ -94,7 +91,6 @@ impl Drive { 0 => self.fetch_identity_with_balance_with_cost_v0( identity_id, apply, - epoch, transaction, platform_version, ), diff --git a/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_with_balance/v0/mod.rs b/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_with_balance/v0/mod.rs index 1473465c9d..9337e68761 100644 --- a/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_with_balance/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/fetch/partial_identity/fetch_identity_with_balance/v0/mod.rs @@ -1,15 +1,11 @@ use crate::drive::Drive; use crate::error::Error; use crate::fee::op::LowLevelDriveOperation; -use dpp::block::epoch::Epoch; -use dpp::fee::default_costs::KnownCostItem::FetchIdentityBalanceProcessingCost; use dpp::fee::fee_result::FeeResult; use dpp::identifier::Identifier; use dpp::identity::PartialIdentity; use grovedb::TransactionArg; -use dpp::fee::default_costs::EpochCosts; - use dpp::version::PlatformVersion; impl Drive { @@ -46,13 +42,13 @@ impl Drive { &self, identity_id: [u8; 32], apply: bool, - epoch: &Epoch, transaction: TransactionArg, platform_version: &PlatformVersion, ) -> Result<(Option, FeeResult), Error> { - let cached_fee_version = self.cache.cached_fee_version.read(); - let balance_cost = - epoch.cost_for_known_cost_item(&cached_fee_version, FetchIdentityBalanceProcessingCost); + let balance_cost = platform_version + .fee_version + .processing + .fetch_identity_balance_processing_cost; if !apply { return Ok((None, FeeResult::new_from_processing_fee(balance_cost))); } diff --git a/packages/rs-drive/src/drive/identity/fetch/revision/fetch_identity_revision/v0/mod.rs b/packages/rs-drive/src/drive/identity/fetch/revision/fetch_identity_revision/v0/mod.rs index 06b91f37d5..fa6fa71763 100644 --- a/packages/rs-drive/src/drive/identity/fetch/revision/fetch_identity_revision/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/fetch/revision/fetch_identity_revision/v0/mod.rs @@ -100,14 +100,13 @@ impl Drive { &mut drive_operations, platform_version, )?; - let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, )?; Ok((value, fees)) } diff --git a/packages/rs-drive/src/drive/identity/insert/add_new_identity/v0/mod.rs b/packages/rs-drive/src/drive/identity/insert/add_new_identity/v0/mod.rs index 1b46f75234..a2ea6fb91f 100644 --- a/packages/rs-drive/src/drive/identity/insert/add_new_identity/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/insert/add_new_identity/v0/mod.rs @@ -45,14 +45,13 @@ impl Drive { &mut drive_operations, platform_version, )?; - let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/identity/key/fetch/mod.rs b/packages/rs-drive/src/drive/identity/key/fetch/mod.rs index 7b2830aa92..23207b3661 100644 --- a/packages/rs-drive/src/drive/identity/key/fetch/mod.rs +++ b/packages/rs-drive/src/drive/identity/key/fetch/mod.rs @@ -31,13 +31,8 @@ use { use { crate::error::{drive::DriveError, fee::FeeError, identity::IdentityError, Error}, dpp::{ - block::epoch::Epoch, - fee::{ - default_costs::{EpochCosts, KnownCostItem::FetchSingleIdentityKeyProcessingCost}, - Credits, - }, + fee::Credits, identity::{IdentityPublicKey, SecurityLevel}, - prelude::CachedEpochIndexFeeVersions, serialization::PlatformDeserializable, version::PlatformVersion, }, @@ -654,30 +649,26 @@ pub struct IdentityKeysRequest { impl IdentityKeysRequest { #[cfg(feature = "server")] /// Gets the processing cost of an identity keys request - pub fn processing_cost( - &self, - epoch: &Epoch, - cached_fee_version: &CachedEpochIndexFeeVersions, - ) -> Result { + pub fn processing_cost(&self, platform_version: &PlatformVersion) -> Result { // Good match &self.request_type { AllKeys => Err(Error::Fee(FeeError::OperationNotAllowed( "You can not get costs for requesting all keys", ))), SpecificKeys(keys) => Ok(keys.len() as u64 - * epoch.cost_for_known_cost_item( - cached_fee_version, - FetchSingleIdentityKeyProcessingCost, - )), + * platform_version + .fee_version + .processing + .fetch_single_identity_key_processing_cost), SearchKey(_search) => todo!(), ContractBoundKey(_, _, key_kind) | ContractDocumentTypeBoundKey(_, _, _, key_kind) => { match key_kind { CurrentKeyOfKindRequest => { - // not acceissble - Ok(epoch.cost_for_known_cost_item( - cached_fee_version, - FetchSingleIdentityKeyProcessingCost, - )) + // not accessible + Ok(platform_version + .fee_version + .processing + .fetch_single_identity_key_processing_cost) } AllKeysOfKindRequest => Err(Error::Fee(FeeError::OperationNotAllowed( "You can not get costs for an all keys of kind request", diff --git a/packages/rs-drive/src/drive/identity/update/methods/add_new_non_unique_keys_to_identity/v0/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/add_new_non_unique_keys_to_identity/v0/mod.rs index 97eac4555b..dfc3347ada 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/add_new_non_unique_keys_to_identity/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/add_new_non_unique_keys_to_identity/v0/mod.rs @@ -45,14 +45,13 @@ impl Drive { &mut drive_operations, &platform_version.drive, )?; - let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/identity/update/methods/add_new_unique_keys_to_identity/v0/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/add_new_unique_keys_to_identity/v0/mod.rs index 995d4c92eb..5f16a5edf8 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/add_new_unique_keys_to_identity/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/add_new_unique_keys_to_identity/v0/mod.rs @@ -45,14 +45,13 @@ impl Drive { &mut drive_operations, &platform_version.drive, )?; - let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/identity/update/methods/add_to_identity_balance/v0/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/add_to_identity_balance/v0/mod.rs index fdcd23454d..7bd3af7104 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/add_to_identity_balance/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/add_to_identity_balance/v0/mod.rs @@ -46,15 +46,13 @@ impl Drive { &mut drive_operations, &platform_version.drive, )?; - - let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, )?; Ok(fees) diff --git a/packages/rs-drive/src/drive/identity/update/methods/disable_identity_keys/v0/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/disable_identity_keys/v0/mod.rs index 86c29efe91..3928008896 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/disable_identity_keys/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/disable_identity_keys/v0/mod.rs @@ -58,15 +58,13 @@ impl Drive { &mut drive_operations, &platform_version.drive, )?; - - let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, // TODO: Does disable mean delete? Check if previous_fee_versions are required in this case )?; Ok(fees) diff --git a/packages/rs-drive/src/drive/identity/update/methods/merge_identity_nonce/v0/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/merge_identity_nonce/v0/mod.rs index 8378bb0ab3..09cea21f77 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/merge_identity_nonce/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/merge_identity_nonce/v0/mod.rs @@ -57,15 +57,13 @@ impl Drive { &mut drive_operations, &platform_version.drive, )?; - - let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, )?; Some(fees) diff --git a/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/mod.rs index afb4c69d6e..7ec811be95 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/mod.rs @@ -8,6 +8,7 @@ use dpp::block::block_info::BlockInfo; use dpp::fee::fee_result::FeeResult; use dpp::fee::Credits; +use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{EstimatedLayerInformation, TransactionArg}; @@ -36,6 +37,7 @@ impl Drive { apply: bool, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { match platform_version .drive @@ -51,6 +53,7 @@ impl Drive { apply, transaction, platform_version, + previous_fee_versions, ), version => Err(Error::Drive(DriveError::UnknownVersionMismatch { method: "remove_from_identity_balance".to_string(), diff --git a/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/v0/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/v0/mod.rs index 7d91fba262..291bb6d397 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/v0/mod.rs @@ -8,6 +8,7 @@ use dpp::block::block_info::BlockInfo; use dpp::fee::fee_result::FeeResult; use dpp::fee::Credits; +use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{EstimatedLayerInformation, TransactionArg}; @@ -23,6 +24,7 @@ impl Drive { apply: bool, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { let mut estimated_costs_only_with_layer_info = if apply { None::> @@ -46,15 +48,13 @@ impl Drive { &mut drive_operations, &platform_version.drive, )?; - - let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + previous_fee_versions, )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/mod.rs index 2adb07a9a5..d264b88940 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/mod.rs @@ -7,7 +7,7 @@ use crate::fee::op::LowLevelDriveOperation; use dpp::block::block_info::BlockInfo; use dpp::fee::fee_result::FeeResult; -use dpp::prelude::Revision; +use dpp::prelude::{CachedEpochIndexFeeVersions, Revision}; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; @@ -38,6 +38,7 @@ impl Drive { apply: bool, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { match platform_version .drive @@ -53,6 +54,7 @@ impl Drive { apply, transaction, platform_version, + previous_fee_versions, ), version => Err(Error::Drive(DriveError::UnknownVersionMismatch { method: "update_identity_revision".to_string(), diff --git a/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/v0/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/v0/mod.rs index c595031650..b06141634a 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/v0/mod.rs @@ -8,7 +8,7 @@ use grovedb::batch::KeyInfoPath; use dpp::fee::fee_result::FeeResult; -use dpp::prelude::Revision; +use dpp::prelude::{CachedEpochIndexFeeVersions, Revision}; use dpp::version::PlatformVersion; use grovedb::{EstimatedLayerInformation, TransactionArg}; @@ -27,6 +27,7 @@ impl Drive { apply: bool, transaction: TransactionArg, platform_version: &PlatformVersion, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { // TODO: In case of dry run we will get less because we replace the same bytes @@ -52,15 +53,13 @@ impl Drive { &mut drive_operations, &platform_version.drive, )?; - - let cached_fee_versions = self.cache.cached_fee_version.read(); let fees = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, self.config.epochs_per_era, platform_version, - &cached_fee_versions, + previous_fee_versions, )?; Ok(fees) diff --git a/packages/rs-drive/src/drive/identity/update/mod.rs b/packages/rs-drive/src/drive/identity/update/mod.rs index 23f4331791..f85d8a6a04 100644 --- a/packages/rs-drive/src/drive/identity/update/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/mod.rs @@ -61,7 +61,7 @@ mod tests { fee_result, FeeResult { storage_fee: 14202000, - processing_fee: 2434150, + processing_fee: 2448600, // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised ..Default::default() } ); @@ -121,7 +121,7 @@ mod tests { fee_result, FeeResult { storage_fee: 347382000, - processing_fee: 9344910, + processing_fee: 9429400, // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised ..Default::default() } ); @@ -182,7 +182,7 @@ mod tests { fee_result, FeeResult { storage_fee: 17145000, - processing_fee: 12012160, + processing_fee: 12051600, // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised ..Default::default() } ); @@ -255,7 +255,7 @@ mod tests { fee_result, FeeResult { storage_fee: 513000, - processing_fee: 1452800, + processing_fee: 1459600, // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised ..Default::default() } ); @@ -320,7 +320,7 @@ mod tests { fee_result, FeeResult { storage_fee: 486000, - processing_fee: 5432130, + processing_fee: 5451000, // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised ..Default::default() } ); @@ -418,6 +418,7 @@ mod tests { true, Some(&db_transaction), platform_version, + None, ) .expect("should update revision"); @@ -425,7 +426,7 @@ mod tests { fee_result, FeeResult { storage_fee: 0, - processing_fee: 648660, + processing_fee: 652400, // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised removed_bytes_from_system: 0, ..Default::default() } @@ -471,6 +472,7 @@ mod tests { false, None, platform_version, + None, ) .expect("should estimate the revision update"); @@ -486,7 +488,7 @@ mod tests { fee_result, FeeResult { storage_fee: 0, - processing_fee: 4217750, + processing_fee: 4232200, // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised removed_bytes_from_system: 0, ..Default::default() } diff --git a/packages/rs-drive/src/drive/identity/withdrawals/transaction/index/mod.rs b/packages/rs-drive/src/drive/identity/withdrawals/transaction/index/mod.rs index 2a10a1e1e6..3a0ccc9c37 100644 --- a/packages/rs-drive/src/drive/identity/withdrawals/transaction/index/mod.rs +++ b/packages/rs-drive/src/drive/identity/withdrawals/transaction/index/mod.rs @@ -7,7 +7,7 @@ pub mod fetch_next_withdrawal_transaction_index; mod tests { use dpp::block::block_info::BlockInfo; use dpp::block::epoch::Epoch; - use dpp::prelude::CachedEpochIndexFeeVersions; + use dpp::version::PlatformVersion; use crate::tests::helpers::setup::setup_drive_with_initial_state_structure; @@ -46,7 +46,7 @@ mod tests { &block_info, Some(&transaction), platform_version, - &CachedEpochIndexFeeVersions::default(), + None, ) .expect("to apply drive ops"); diff --git a/packages/rs-drive/src/drive/identity/withdrawals/transaction/queue/mod.rs b/packages/rs-drive/src/drive/identity/withdrawals/transaction/queue/mod.rs index 12958ced8b..02a014304a 100644 --- a/packages/rs-drive/src/drive/identity/withdrawals/transaction/queue/mod.rs +++ b/packages/rs-drive/src/drive/identity/withdrawals/transaction/queue/mod.rs @@ -14,7 +14,7 @@ mod tests { }; use dpp::block::block_info::BlockInfo; use dpp::block::epoch::Epoch; - use dpp::prelude::CachedEpochIndexFeeVersions; + use dpp::version::PlatformVersion; #[test] @@ -53,7 +53,7 @@ mod tests { &block_info, Some(&transaction), platform_version, - &CachedEpochIndexFeeVersions::default(), + None, ) .expect("to apply batch"); @@ -75,7 +75,7 @@ mod tests { &block_info, Some(&transaction), platform_version, - &CachedEpochIndexFeeVersions::default(), + None, ) .expect("to apply batch"); @@ -99,7 +99,7 @@ mod tests { &block_info, Some(&transaction), platform_version, - &CachedEpochIndexFeeVersions::default(), + None, ) .expect("to apply batch"); diff --git a/packages/rs-drive/src/drive/open/mod.rs b/packages/rs-drive/src/drive/open/mod.rs index 304fcef125..8dca4f3fc0 100644 --- a/packages/rs-drive/src/drive/open/mod.rs +++ b/packages/rs-drive/src/drive/open/mod.rs @@ -3,14 +3,11 @@ use crate::drive::cache::{DataContractCache, DriveCache, ProtocolVersionsCache}; use crate::drive::config::DriveConfig; use crate::drive::defaults::INITIAL_PROTOCOL_VERSION; use crate::drive::Drive; -use crate::error::drive::DriveError; use crate::error::Error; use dpp::errors::ProtocolError; use dpp::util::deserializer::ProtocolVersion; use grovedb::GroveDb; -use platform_version::version::fee::FeeVersion; use platform_version::version::PlatformVersion; -use std::collections::BTreeMap; use std::path::Path; impl Drive { @@ -61,42 +58,9 @@ impl Drive { system_data_contracts: SystemDataContracts::load_genesis_system_contracts( platform_version, )?, - cached_fee_version: parking_lot::RwLock::new(BTreeMap::default()), }, }; - drive.populate_cached_fee_version(platform_version)?; - Ok((drive, protocol_version)) } - - /// Function that populates drive.cache.cached_fee_version with the EpochIndex were FeeVersion where updated - fn populate_cached_fee_version(&self, platform_version: &PlatformVersion) -> Result<(), Error> { - let epochs_protocol_versions = - self.get_epochs_protocol_versions(0, None, true, None, platform_version)?; - let mut cached_fee_versions = self.cache.cached_fee_version.write(); - - let mut last_fee_version_opt: Option<&FeeVersion> = None; - // Iterate all (epoch_index, protocol_version) - for (epoch_index, protocol_version) in epochs_protocol_versions.iter() { - let platform_version = PlatformVersion::get(*protocol_version).map_err(|e| { - Error::Drive(DriveError::CorruptedCacheState(format!( - "unable to get platform version {e}" - ))) - })?; - // Load the corresponding PlatformVersion from the protocol_version - if let Some(last_fee_version) = last_fee_version_opt { - // Insert the (epoch_index, fee_version) only if the fee_version is different from the last_fee_version. - if *last_fee_version != platform_version.fee_version { - last_fee_version_opt = Some(&platform_version.fee_version); - cached_fee_versions.insert(*epoch_index, &platform_version.fee_version); - } - } else { - // If last_fee_version_opt is none, insert anyway - last_fee_version_opt = Some(&platform_version.fee_version); - cached_fee_versions.insert(*epoch_index, &platform_version.fee_version); - } - } - Ok(()) - } } diff --git a/packages/rs-drive/src/fee/op.rs b/packages/rs-drive/src/fee/op.rs index 43cb5133a8..21f215cce5 100644 --- a/packages/rs-drive/src/fee/op.rs +++ b/packages/rs-drive/src/fee/op.rs @@ -21,17 +21,11 @@ use crate::fee::op::LowLevelDriveOperation::{ CalculatedCostOperation, FunctionOperation, GroveOperation, PreCalculatedFeeResult, }; use dpp::block::epoch::Epoch; -use dpp::fee::Credits; -use dpp::fee::default_costs::EpochCosts; -use dpp::fee::default_costs::KnownCostItem::{ - StorageDiskUsageCreditPerByte, StorageLoadCreditPerByte, StorageProcessingCreditPerByte, - StorageSeekCost, -}; use dpp::fee::fee_result::refunds::FeeRefunds; use dpp::fee::fee_result::FeeResult; +use dpp::fee::Credits; use dpp::prelude::CachedEpochIndexFeeVersions; use platform_version::version::fee::FeeVersion; -use crate::error::fee::FeeError; /// Base ops #[derive(Debug, Enum)] @@ -152,7 +146,7 @@ impl HashFunction { HashFunction::Sha256RipeMD160 => fee_version.hashing.sha256_per_block, } } - + fn base_cost(&self, fee_version: &FeeVersion) -> u64 { match self { HashFunction::Sha256 => fee_version.hashing.single_sha256_base, @@ -219,7 +213,7 @@ impl LowLevelDriveOperation { epoch: &Epoch, epochs_per_era: u16, fee_version: &FeeVersion, - cached_fee_versions: &Option, + previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result, Error> { drive_operation .into_iter() @@ -243,7 +237,7 @@ impl LowLevelDriveOperation { (FeeRefunds::default(), amount) } SectionedStorageRemoval(mut removal_per_epoch_by_identifier) => { - let cached_fee_versions = cached_fee_versions.as_ref().ok_or(Error::Drive(DriveError::CorruptedCodeExecution("expected previous epoch index fee versions to be able to offer refunds")))?; + let previous_fee_versions = previous_fee_versions.ok_or(Error::Drive(DriveError::CorruptedCodeExecution("expected previous epoch index fee versions to be able to offer refunds")))?; let system_amount = removal_per_epoch_by_identifier .remove(&Identifier::default()) .map_or(0, |a| a.values().sum()); @@ -253,7 +247,7 @@ impl LowLevelDriveOperation { removal_per_epoch_by_identifier, epoch.index, epochs_per_era, - cached_fee_versions, + previous_fee_versions, )?, system_amount, ) @@ -426,25 +420,20 @@ impl LowLevelDriveOperation { /// Drive cost trait pub trait DriveCost { /// Ephemeral cost - fn ephemeral_cost( - &self, - fee_version: &FeeVersion, - ) -> Result; + fn ephemeral_cost(&self, fee_version: &FeeVersion) -> Result; } impl DriveCost for OperationCost { /// Return the ephemeral cost from the operation - fn ephemeral_cost( - &self, - fee_version: &FeeVersion, - ) -> Result { + fn ephemeral_cost(&self, fee_version: &FeeVersion) -> Result { let OperationCost { seek_count, storage_cost, storage_loaded_bytes, hash_node_calls, } = self; - let epoch_cost_for_processing_credit_per_byte = fee_version.storage.storage_processing_credit_per_byte; + let epoch_cost_for_processing_credit_per_byte = + fee_version.storage.storage_processing_credit_per_byte; let seek_cost = (*seek_count as u64) .checked_mul(fee_version.storage.storage_seek_cost) .ok_or_else(|| get_overflow_error("seek cost overflow"))?; @@ -460,11 +449,9 @@ impl DriveCost for OperationCost { .ok_or_else(|| get_overflow_error("storage written bytes cost overflow"))?; // not accessible let storage_loaded_bytes_cost = (*storage_loaded_bytes as u64) - .checked_mul( - fee_version.storage.storage_load_credit_per_byte, - ) + .checked_mul(fee_version.storage.storage_load_credit_per_byte) .ok_or_else(|| get_overflow_error("storage loaded cost overflow"))?; - + // There is one block per hash node call let blake3_total = fee_version.hashing.blake3_base + fee_version.hashing.blake3_per_block; // this can't overflow diff --git a/packages/rs-drive/src/query/mod.rs b/packages/rs-drive/src/query/mod.rs index 9d82cd14fe..96933e7004 100644 --- a/packages/rs-drive/src/query/mod.rs +++ b/packages/rs-drive/src/query/mod.rs @@ -1613,14 +1613,13 @@ impl<'a> DriveQuery<'a> { platform_version, )?; let cost = if let Some(block_info) = block_info { - let cached_fee_versions = drive.cache.cached_fee_version.read(); let fee_result = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, drive.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, )?; fee_result.processing_fee } else { @@ -1671,14 +1670,13 @@ impl<'a> DriveQuery<'a> { platform_version, )?; let cost = if let Some(block_info) = block_info { - let cached_fee_versions = drive.cache.cached_fee_version.read(); let fee_result = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, drive.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, )?; fee_result.processing_fee } else { @@ -1731,14 +1729,13 @@ impl<'a> DriveQuery<'a> { platform_version, )?; let cost = if let Some(block_info) = block_info { - let cached_fee_versions = drive.cache.cached_fee_version.read(); let fee_result = Drive::calculate_fee( None, Some(drive_operations), &block_info.epoch, drive.config.epochs_per_era, platform_version, - &cached_fee_versions, + None, )?; fee_result.processing_fee } else { diff --git a/packages/rs-drive/src/tests/helpers/setup.rs b/packages/rs-drive/src/tests/helpers/setup.rs index 7eaacc586f..1bd134045a 100644 --- a/packages/rs-drive/src/tests/helpers/setup.rs +++ b/packages/rs-drive/src/tests/helpers/setup.rs @@ -128,6 +128,7 @@ pub fn setup_document( true, transaction, platform_version, + None, ) .unwrap(); } diff --git a/packages/rs-drive/tests/deterministic_root_hash.rs b/packages/rs-drive/tests/deterministic_root_hash.rs index fa6ecc9091..b70d573cc8 100644 --- a/packages/rs-drive/tests/deterministic_root_hash.rs +++ b/packages/rs-drive/tests/deterministic_root_hash.rs @@ -168,6 +168,7 @@ pub fn add_domains_to_contract( true, transaction, platform_version, + None, ) .expect("document should be inserted"); } diff --git a/packages/rs-drive/tests/query_tests.rs b/packages/rs-drive/tests/query_tests.rs index 9a0e033391..831ed32ee9 100644 --- a/packages/rs-drive/tests/query_tests.rs +++ b/packages/rs-drive/tests/query_tests.rs @@ -67,6 +67,7 @@ use serde::{Deserialize, Serialize}; use serde_json::json; #[cfg(feature = "server")] use std::borrow::Cow; +use std::collections::BTreeMap; #[cfg(feature = "server")] use std::collections::HashMap; #[cfg(feature = "server")] @@ -97,9 +98,10 @@ use dpp::document::serialization_traits::{ use dpp::document::{DocumentV0Getters, DocumentV0Setters}; use dpp::identity::TimestampMillis; use dpp::platform_value; - +use dpp::prelude::CachedEpochIndexFeeVersions; #[cfg(feature = "server")] use dpp::prelude::DataContract; +use once_cell::sync::Lazy; use dpp::tests::json_document::json_document_to_contract; #[cfg(feature = "server")] @@ -272,6 +274,7 @@ pub fn setup_family_tests(count: u32, seed: u64) -> (Drive, DataContract) { true, Some(&db_transaction), platform_version, + None, ) .expect("document should be inserted"); } @@ -340,6 +343,7 @@ pub fn setup_family_tests_with_nulls(count: u32, seed: u64) -> (Drive, DataContr true, Some(&db_transaction), platform_version, + None, ) .expect("document should be inserted"); } @@ -409,6 +413,7 @@ pub fn setup_family_tests_only_first_name_index(count: u32, seed: u64) -> (Drive true, Some(&db_transaction), platform_version, + None, ) .expect("document should be inserted"); } @@ -653,6 +658,7 @@ pub fn add_domains_to_contract( true, transaction, platform_version, + None, ) .expect("document should be inserted"); } @@ -823,6 +829,7 @@ pub fn setup_dpns_test_with_data(path: &str) -> (Drive, DataContract) { true, Some(&db_transaction), platform_version, + None, ) .expect("expected to insert a document successfully"); } @@ -872,6 +879,7 @@ fn test_query_many() { true, Some(&db_transaction), platform_version, + None, ) .expect("document should be inserted"); } @@ -1858,6 +1866,7 @@ fn test_family_basic_queries() { true, Some(&db_transaction), platform_version, + None, ) .expect("document should be inserted"); @@ -1902,6 +1911,7 @@ fn test_family_basic_queries() { true, Some(&db_transaction), platform_version, + None, ) .expect("document should be inserted"); @@ -2318,6 +2328,9 @@ fn test_family_person_update() { let platform_version = PlatformVersion::latest(); + let EPOCH_CHANGE_FEE_VERSION_TEST: Lazy = + Lazy::new(|| BTreeMap::from([(0, PlatformVersion::first().fee_version.clone())])); + let db_transaction = drive.grove.start_transaction(); let mut rng = rand::rngs::StdRng::seed_from_u64(84594); @@ -2364,6 +2377,7 @@ fn test_family_person_update() { true, Some(&db_transaction), platform_version, + None, ) .expect("document should be inserted"); @@ -2392,6 +2406,7 @@ fn test_family_person_update() { None, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to override document"); assert!(fee.storage_fee > 0); @@ -2885,6 +2900,9 @@ fn test_family_with_nulls_query() { let platform_version = PlatformVersion::latest(); + let EPOCH_CHANGE_FEE_VERSION_TEST: Lazy = + Lazy::new(|| BTreeMap::from([(0, PlatformVersion::first().fee_version.clone())])); + let db_transaction = drive.grove.start_transaction(); let root_hash = drive @@ -2989,6 +3007,7 @@ fn test_family_with_nulls_query() { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to be able to delete the document"); } @@ -4132,6 +4151,7 @@ fn test_dpns_query_start_at_with_null_id() { true, Some(&db_transaction), platform_version, + None, ) .expect("document should be inserted"); @@ -4174,6 +4194,7 @@ fn test_dpns_query_start_at_with_null_id() { true, Some(&db_transaction), platform_version, + None, ) .expect("document should be inserted"); @@ -4332,6 +4353,7 @@ fn test_dpns_query_start_after_with_null_id() { true, Some(&db_transaction), platform_version, + None, ) .expect("document should be inserted"); @@ -4375,6 +4397,7 @@ fn test_dpns_query_start_after_with_null_id() { true, Some(&db_transaction), platform_version, + None, ) .expect("document should be inserted"); @@ -4537,6 +4560,7 @@ fn test_dpns_query_start_after_with_null_id_desc() { true, Some(&db_transaction), platform_version, + None, ) .expect("document should be inserted"); @@ -4580,6 +4604,7 @@ fn test_dpns_query_start_after_with_null_id_desc() { true, Some(&db_transaction), platform_version, + None, ) .expect("document should be inserted"); @@ -5007,6 +5032,7 @@ fn test_query_documents_by_created_at() { true, None, platform_version, + None, ) .expect("should add document"); diff --git a/packages/rs-drive/tests/query_tests_history.rs b/packages/rs-drive/tests/query_tests_history.rs index d89480eb01..a1edd19701 100644 --- a/packages/rs-drive/tests/query_tests_history.rs +++ b/packages/rs-drive/tests/query_tests_history.rs @@ -30,19 +30,11 @@ //! Query Tests History //! -#[cfg(feature = "server")] -use std::borrow::Cow; -#[cfg(feature = "server")] -use std::collections::{BTreeMap, HashMap}; -#[cfg(feature = "server")] -use std::fmt::{Debug, Formatter}; -#[cfg(feature = "server")] -use std::option::Option::None; - #[cfg(feature = "server")] use dpp::document::Document; #[cfg(feature = "server")] use dpp::util::cbor_serializer; +use once_cell::sync::Lazy; #[cfg(feature = "server")] use rand::seq::SliceRandom; #[cfg(feature = "server")] @@ -51,6 +43,14 @@ use rand::{Rng, SeedableRng}; use serde::{Deserialize, Serialize}; #[cfg(feature = "server")] use serde_json::json; +#[cfg(feature = "server")] +use std::borrow::Cow; +#[cfg(feature = "server")] +use std::collections::{BTreeMap, HashMap}; +#[cfg(feature = "server")] +use std::fmt::{Debug, Formatter}; +#[cfg(feature = "server")] +use std::option::Option::None; #[cfg(feature = "server")] use drive::common; @@ -83,6 +83,7 @@ use dpp::document::serialization_traits::{ DocumentCborMethodsV0, DocumentPlatformConversionMethodsV0, }; use dpp::document::DocumentV0Getters; +use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::tests::json_document::json_document_to_contract; use dpp::version::PlatformVersion; use drive::drive::batch::grovedb_op_batch::GroveDbOpBatchV0Methods; @@ -191,6 +192,9 @@ pub fn setup( let platform_version = PlatformVersion::latest(); + let EPOCH_CHANGE_FEE_VERSION_TEST: Lazy = + Lazy::new(|| BTreeMap::from([(0, PlatformVersion::first().fee_version.clone())])); + let drive = setup_drive(Some(drive_config)); let db_transaction = drive.grove.start_transaction(); @@ -254,6 +258,7 @@ pub fn setup( true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("expected to add document"); } @@ -281,6 +286,9 @@ fn test_query_historical() { let platform_version = PlatformVersion::latest(); + let EPOCH_CHANGE_FEE_VERSION_TEST: Lazy = + Lazy::new(|| BTreeMap::from([(0, PlatformVersion::first().fee_version.clone())])); + let db_transaction = drive.grove.start_transaction(); let root_hash = drive @@ -1131,6 +1139,7 @@ fn test_query_historical() { true, Some(&db_transaction), platform_version, + Some(&EPOCH_CHANGE_FEE_VERSION_TEST), ) .expect("document should be inserted"); @@ -1176,6 +1185,7 @@ fn test_query_historical() { true, Some(&db_transaction), platform_version, + None, ) .expect("document should be inserted"); diff --git a/packages/rs-platform-version/Cargo.toml b/packages/rs-platform-version/Cargo.toml index efb8bd40ea..bf971108c1 100644 --- a/packages/rs-platform-version/Cargo.toml +++ b/packages/rs-platform-version/Cargo.toml @@ -10,6 +10,7 @@ license = "MIT" [dependencies] thiserror = { version = "1.0.59" } sha2 = "0.10.5" +bincode = { version = "2.0.0-rc.3", features = ["serde"] } [features] mock-versions = [] diff --git a/packages/rs-platform-version/src/version/fee/data_contract/mod.rs b/packages/rs-platform-version/src/version/fee/data_contract/mod.rs index a69f265fae..57218b51d1 100644 --- a/packages/rs-platform-version/src/version/fee/data_contract/mod.rs +++ b/packages/rs-platform-version/src/version/fee/data_contract/mod.rs @@ -1,9 +1,9 @@ -use crate::version::fee::processing::FeeProcessingVersion; +use bincode::{Decode, Encode}; use sha2::{Digest, Sha256}; pub mod v1; -#[derive(Clone, Debug, Default)] +#[derive(Clone, Debug, Encode, Decode, Default)] pub struct FeeDataContractValidationVersion { pub document_type_base_fee: u64, pub document_type_size_fee: u64, diff --git a/packages/rs-platform-version/src/version/fee/hashing/mod.rs b/packages/rs-platform-version/src/version/fee/hashing/mod.rs index 4f61d69a7f..85a2195d6d 100644 --- a/packages/rs-platform-version/src/version/fee/hashing/mod.rs +++ b/packages/rs-platform-version/src/version/fee/hashing/mod.rs @@ -1,9 +1,9 @@ -use crate::version::fee::signature::FeeSignatureVersion; +use bincode::{Decode, Encode}; use sha2::{Digest, Sha256}; pub mod v1; -#[derive(Clone, Debug, Default)] +#[derive(Clone, Debug, Encode, Decode, Default)] pub struct FeeHashingVersion { pub single_sha256_base: u64, pub blake3_base: u64, @@ -15,10 +15,11 @@ pub struct FeeHashingVersion { impl FeeHashingVersion { pub(crate) fn to_hash(&self) -> u64 { let mut hasher = Sha256::new(); - Digest::update(&mut hasher, &self.double_sha256_base.to_be_bytes()); - Digest::update(&mut hasher, &self.double_sha256_per_block.to_be_bytes()); Digest::update(&mut hasher, &self.single_sha256_base.to_be_bytes()); - Digest::update(&mut hasher, &self.single_sha256_per_block.to_be_bytes()); + Digest::update(&mut hasher, &self.blake3_base.to_be_bytes()); + Digest::update(&mut hasher, &self.sha256_ripe_md160_base.to_be_bytes()); + Digest::update(&mut hasher, &self.sha256_per_block.to_be_bytes()); + Digest::update(&mut hasher, &self.blake3_per_block.to_be_bytes()); let result = hasher.finalize(); // Use the first 8 bytes of the hash as the u64 representation diff --git a/packages/rs-platform-version/src/version/fee/hashing/v1.rs b/packages/rs-platform-version/src/version/fee/hashing/v1.rs index ebce88d17d..78c5f4533f 100644 --- a/packages/rs-platform-version/src/version/fee/hashing/v1.rs +++ b/packages/rs-platform-version/src/version/fee/hashing/v1.rs @@ -2,5 +2,8 @@ use crate::version::fee::hashing::FeeHashingVersion; pub const FEE_HASHING_VERSION1: FeeHashingVersion = FeeHashingVersion { single_sha256_base: 100, + blake3_base: 100, // TODO: Check this value + sha256_ripe_md160_base: 100, // TODO: Check this value sha256_per_block: 400, + blake3_per_block: 100, // TODO: Check this value }; diff --git a/packages/rs-platform-version/src/version/fee/mod.rs b/packages/rs-platform-version/src/version/fee/mod.rs index d356885ecf..8a59374c8f 100644 --- a/packages/rs-platform-version/src/version/fee/mod.rs +++ b/packages/rs-platform-version/src/version/fee/mod.rs @@ -4,6 +4,7 @@ use crate::version::fee::processing::FeeProcessingVersion; use crate::version::fee::signature::FeeSignatureVersion; use crate::version::fee::state_transition_min_fees::StateTransitionMinFees; use crate::version::fee::storage::FeeStorageVersion; +use bincode::{Decode, Encode}; use sha2::{Digest, Sha256}; mod data_contract; @@ -14,7 +15,7 @@ pub mod state_transition_min_fees; pub mod storage; pub mod v1; -#[derive(Clone, Debug, Default)] +#[derive(Clone, Debug, Encode, Decode, Default)] pub struct FeeVersion { pub storage: FeeStorageVersion, pub signature: FeeSignatureVersion, diff --git a/packages/rs-platform-version/src/version/fee/processing/mod.rs b/packages/rs-platform-version/src/version/fee/processing/mod.rs index 1fcc9c5234..06002ea77c 100644 --- a/packages/rs-platform-version/src/version/fee/processing/mod.rs +++ b/packages/rs-platform-version/src/version/fee/processing/mod.rs @@ -1,9 +1,9 @@ -use crate::version::fee::signature::FeeSignatureVersion; +use bincode::{Decode, Encode}; use sha2::{Digest, Sha256}; pub mod v1; -#[derive(Clone, Debug, Default)] +#[derive(Clone, Debug, Encode, Decode, Default)] pub struct FeeProcessingVersion { pub fetch_identity_balance_processing_cost: u64, pub fetch_identity_revision_processing_cost: u64, diff --git a/packages/rs-platform-version/src/version/fee/signature/mod.rs b/packages/rs-platform-version/src/version/fee/signature/mod.rs index e61b73ec28..7856182782 100644 --- a/packages/rs-platform-version/src/version/fee/signature/mod.rs +++ b/packages/rs-platform-version/src/version/fee/signature/mod.rs @@ -1,9 +1,9 @@ -use crate::version::fee::storage::FeeStorageVersion; +use bincode::{Decode, Encode}; use sha2::{Digest, Sha256}; pub mod v1; -#[derive(Clone, Debug, Default)] +#[derive(Clone, Debug, Encode, Decode, Default)] pub struct FeeSignatureVersion { pub verify_signature_ecdsa_secp256k1: u64, pub verify_signature_bls12_381: u64, diff --git a/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs b/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs index 7186e82ae7..98ce0da65c 100644 --- a/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs +++ b/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs @@ -1,8 +1,8 @@ -use crate::version::fee::data_contract::FeeDataContractValidationVersion; +use bincode::{Decode, Encode}; use sha2::{Digest, Sha256}; pub mod v1; -#[derive(Clone, Debug, Default)] +#[derive(Clone, Debug, Encode, Decode, Default)] pub struct StateTransitionMinFees { pub credit_transfer: u64, pub credit_withdrawal: u64, diff --git a/packages/rs-platform-version/src/version/fee/storage/mod.rs b/packages/rs-platform-version/src/version/fee/storage/mod.rs index 6bbc282bf6..24e61606f6 100644 --- a/packages/rs-platform-version/src/version/fee/storage/mod.rs +++ b/packages/rs-platform-version/src/version/fee/storage/mod.rs @@ -1,11 +1,11 @@ extern crate sha2; -use sha2::digest::Update; +use bincode::{Decode, Encode}; use sha2::{Digest, Sha256}; pub mod v1; -#[derive(Clone, Debug, Default)] +#[derive(Clone, Debug, Encode, Decode, Default)] pub struct FeeStorageVersion { pub storage_disk_usage_credit_per_byte: u64, pub storage_processing_credit_per_byte: u64, diff --git a/packages/rs-sdk/src/platform/fetch_many.rs b/packages/rs-sdk/src/platform/fetch_many.rs index aa1db58d35..8bca2343b4 100644 --- a/packages/rs-sdk/src/platform/fetch_many.rs +++ b/packages/rs-sdk/src/platform/fetch_many.rs @@ -12,8 +12,7 @@ use crate::{ Sdk, }; use dapi_grpc::platform::v0::{ - GetDataContractsRequest, GetDocumentsResponse, GetEpochsInfoRequest, - GetIdentitiesContractKeysRequest, GetIdentityKeysRequest, + GetDataContractsRequest, GetDocumentsResponse, GetEpochsInfoRequest, GetIdentityKeysRequest, GetProtocolVersionUpgradeStateRequest, GetProtocolVersionUpgradeVoteStatusRequest, }; use dashcore_rpc::dashcore::ProTxHash; From 83fa45ddb5020885a9cbf615eb89791dac39e866 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 4 Jul 2024 12:52:13 +0300 Subject: [PATCH 30/47] suggestion --- packages/rs-dpp/src/fee/default_costs/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rs-dpp/src/fee/default_costs/mod.rs b/packages/rs-dpp/src/fee/default_costs/mod.rs index 15a7ef55aa..07b423467a 100644 --- a/packages/rs-dpp/src/fee/default_costs/mod.rs +++ b/packages/rs-dpp/src/fee/default_costs/mod.rs @@ -161,7 +161,7 @@ impl EpochCosts for Epoch { cached_fee_version .range(..=self.index) .next_back() - .map(|(_, &ref fee_version)| fee_version) + .map(|(_, fee_version)| fee_version) .unwrap_or_else(|| &PlatformVersion::first().fee_version) .clone() } From 7da6121af3739322a7fe7a27f3d133b778ed6f4e Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 4 Jul 2024 14:26:57 +0300 Subject: [PATCH 31/47] suggestion --- .../src/execution/engine/run_block_proposal/v0/mod.rs | 8 +++----- .../block_fee_processing/process_block_fees/mod.rs | 2 +- .../block_fee_processing/process_block_fees/v0/mod.rs | 9 ++++++--- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/rs-drive-abci/src/execution/engine/run_block_proposal/v0/mod.rs b/packages/rs-drive-abci/src/execution/engine/run_block_proposal/v0/mod.rs index 240d42c212..e4d04627ac 100644 --- a/packages/rs-drive-abci/src/execution/engine/run_block_proposal/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/engine/run_block_proposal/v0/mod.rs @@ -337,11 +337,9 @@ where block_fees_v0.into(), transaction, platform_version, - Some( - block_execution_context - .block_platform_state() - .previous_fee_versions(), - ), + block_execution_context + .block_platform_state() + .previous_fee_versions(), )?; tracing::debug!(block_fees = ?processed_block_fees, "block fees are processed"); diff --git a/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/mod.rs index 16239eb878..8c1318da2c 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/mod.rs @@ -41,7 +41,7 @@ impl Platform { block_fees: BlockFees, transaction: &Transaction, platform_version: &PlatformVersion, - previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, + previous_fee_versions: &CachedEpochIndexFeeVersions, ) -> Result { match platform_version .drive_abci diff --git a/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/v0/mod.rs index 0b819bdc6d..3b482ffb38 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/v0/mod.rs @@ -82,7 +82,7 @@ impl Platform { block_fees: BlockFees, transaction: &Transaction, platform_version: &PlatformVersion, - previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, + previous_fee_versions: &CachedEpochIndexFeeVersions, ) -> Result { let epoch_info = block_execution_context.epoch_info(); let block_info = block_execution_context.block_state_info(); @@ -183,7 +183,7 @@ impl Platform { &block_info.to_block_info(epoch_info.try_into()?), Some(transaction), platform_version, - previous_fee_versions, + Some(previous_fee_versions), )?; let outcome = processed_block_fees_outcome::v0::ProcessedBlockFeesOutcome { @@ -240,6 +240,7 @@ mod tests { use crate::platform_types::platform_state::PlatformState; use dpp::fee::epoch::{perpetual_storage_epochs, CreditsPerEpoch, GENESIS_EPOCH_INDEX}; use drive::drive::defaults::INITIAL_PROTOCOL_VERSION; + use crate::platform_types::platform_state::v0::PlatformStateV0Methods; /// Process and validate block fees pub fn process_and_validate_block_fees( @@ -300,13 +301,15 @@ mod tests { proposer_results: None, }; + let block_execution_context_clone = block_execution_context.clone(); + let previous_fee_versions = block_execution_context_clone.block_platform_state().previous_fee_versions(); let storage_fee_distribution_outcome = platform .process_block_fees_v0( &block_execution_context.into(), block_fees.clone(), transaction, platform_version, - None, + previous_fee_versions, ) .expect("should process block fees"); From 6c440dd844050e0fbbb667f5859cfbcb5ad09b75 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 4 Jul 2024 14:31:12 +0300 Subject: [PATCH 32/47] suggestion --- .../protocol_upgrade/upgrade_protocol_version/v0/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs index 0e38e0702a..78149b4103 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/protocol_upgrade/upgrade_protocol_version/v0/mod.rs @@ -81,7 +81,7 @@ impl Platform { let platform_version = PlatformVersion::get(current_block_protocol_version)?; // If cached_fee_version is non-empty - if let Some((_, &ref last_fee_version)) = previous_fee_versions_map.iter().last() { + if let Some((_, last_fee_version)) = previous_fee_versions_map.iter().last() { // Insert the new (epoch_index, fee_version) only if the new fee_version is different from the last_fee_version. if *last_fee_version != platform_version.fee_version { previous_fee_versions_map.insert( From 86228f3e2fb741e8e89c24a223d21286553503a6 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 4 Jul 2024 15:26:24 +0300 Subject: [PATCH 33/47] suggestion --- .../rs-drive-abci/src/execution/check_tx/v0/mod.rs | 2 +- .../state_transition_processing/execute_event/mod.rs | 2 +- .../execute_event/v0/mod.rs | 10 +++++----- .../process_raw_state_transitions/v0/mod.rs | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/rs-drive-abci/src/execution/check_tx/v0/mod.rs b/packages/rs-drive-abci/src/execution/check_tx/v0/mod.rs index d2d3b75bec..947fc5d7a0 100644 --- a/packages/rs-drive-abci/src/execution/check_tx/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/check_tx/v0/mod.rs @@ -70,7 +70,7 @@ where state_read_guard.last_block_info(), transaction, platform_ref.state.current_platform_version()?, - Some(platform_ref.state.previous_fee_versions()), + platform_ref.state.previous_fee_versions(), ) } else { Ok(UnpaidConsensusExecutionError( diff --git a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/mod.rs index 9236eaf871..539e1882a7 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/mod.rs @@ -44,7 +44,7 @@ where block_info: &BlockInfo, transaction: &Transaction, platform_version: &PlatformVersion, - previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, + previous_fee_versions: &CachedEpochIndexFeeVersions, ) -> Result { match platform_version .drive_abci diff --git a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/v0/mod.rs index 92ffac7dae..218e9c6e3a 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/v0/mod.rs @@ -50,7 +50,7 @@ where block_info: &BlockInfo, transaction: &Transaction, platform_version: &PlatformVersion, - previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, + previous_fee_versions: &CachedEpochIndexFeeVersions, ) -> Result { let maybe_fee_validation_result = match event { ExecutionEvent::PaidFromAssetLock { .. } | ExecutionEvent::Paid { .. } => { @@ -59,7 +59,7 @@ where block_info, Some(transaction), platform_version, - previous_fee_versions, + Some(previous_fee_versions), )?) } ExecutionEvent::PaidFromAssetLockWithoutIdentity { .. } @@ -93,7 +93,7 @@ where block_info, Some(transaction), platform_version, - previous_fee_versions, + Some(previous_fee_versions), ) .map_err(Error::Drive)?; @@ -143,7 +143,7 @@ where block_info, Some(transaction), platform_version, - previous_fee_versions, + Some(previous_fee_versions), ) .map_err(Error::Drive)?; @@ -168,7 +168,7 @@ where block_info, Some(transaction), platform_version, - previous_fee_versions, + Some(previous_fee_versions), ) .map_err(Error::Drive)?; Ok(SuccessfulFreeExecution) diff --git a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/process_raw_state_transitions/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/process_raw_state_transitions/v0/mod.rs index 4b95793331..54d95ecf9c 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/process_raw_state_transitions/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/process_raw_state_transitions/v0/mod.rs @@ -118,7 +118,7 @@ where block_info, transaction, platform_version, - Some(platform_ref.state.previous_fee_versions()), + platform_ref.state.previous_fee_versions(), ) .unwrap_or_else(error_to_internal_error_execution_result) }) @@ -203,7 +203,7 @@ where block_info: &BlockInfo, transaction: &Transaction, platform_version: &PlatformVersion, - previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, + previous_fee_versions: &CachedEpochIndexFeeVersions, ) -> Result> { // State Transition is invalid if !validation_result.is_valid() { From e79449ea2a311fb374a844644b75e342af402f87 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 4 Jul 2024 15:34:33 +0300 Subject: [PATCH 34/47] suggestion --- packages/rs-drive-abci/src/execution/check_tx/v0/mod.rs | 2 +- .../state_transition_processing/execute_event/v0/mod.rs | 2 +- .../validate_fees_of_event/mod.rs | 2 +- .../validate_fees_of_event/v0/mod.rs | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/rs-drive-abci/src/execution/check_tx/v0/mod.rs b/packages/rs-drive-abci/src/execution/check_tx/v0/mod.rs index 947fc5d7a0..494f1415e3 100644 --- a/packages/rs-drive-abci/src/execution/check_tx/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/check_tx/v0/mod.rs @@ -186,7 +186,7 @@ where platform_state.last_block_info(), None, platform_version, - Some(platform_state.previous_fee_versions()), + platform_state.previous_fee_versions(), )?; let (estimated_fee_result, errors) = validation_result.into_data_and_errors()?; diff --git a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/v0/mod.rs index 218e9c6e3a..26812de3f1 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/v0/mod.rs @@ -59,7 +59,7 @@ where block_info, Some(transaction), platform_version, - Some(previous_fee_versions), + previous_fee_versions, )?) } ExecutionEvent::PaidFromAssetLockWithoutIdentity { .. } diff --git a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/mod.rs index 76f1e1a094..fcac3af275 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/mod.rs @@ -41,7 +41,7 @@ where block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, - previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, + previous_fee_versions: &CachedEpochIndexFeeVersions, ) -> Result, Error> { match platform_version .drive_abci diff --git a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/v0/mod.rs index 79a5616ae4..c455cd86e3 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/v0/mod.rs @@ -41,7 +41,7 @@ where block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, - previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, + previous_fee_versions: &CachedEpochIndexFeeVersions, ) -> Result, Error> { match event { ExecutionEvent::PaidFromAssetLock { @@ -63,7 +63,7 @@ where block_info, transaction, platform_version, - previous_fee_versions, + Some(previous_fee_versions), ) .map_err(Error::Drive)?; @@ -115,7 +115,7 @@ where block_info, transaction, platform_version, - previous_fee_versions, + Some(previous_fee_versions), ) .map_err(Error::Drive)?; From 2d6b7b91fd219ef8650bf4a61a053538e6980a2b Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 4 Jul 2024 15:35:50 +0300 Subject: [PATCH 35/47] suggestion --- packages/rs-drive-proof-verifier/src/proof.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rs-drive-proof-verifier/src/proof.rs b/packages/rs-drive-proof-verifier/src/proof.rs index 78dd2e3780..94ede79e54 100644 --- a/packages/rs-drive-proof-verifier/src/proof.rs +++ b/packages/rs-drive-proof-verifier/src/proof.rs @@ -1216,7 +1216,7 @@ impl FromProof for IdentitiesContrac contract_id, document_type_name, purposes, - prove: _, + .. } = v0; let identifiers = identities_ids .into_iter() From e1a0c5601bbf235b61180694400a186e09e1bdef Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 4 Jul 2024 16:01:15 +0300 Subject: [PATCH 36/47] suggestion --- .../v0/mod.rs | 1 - .../rs-drive/src/drive/batch/drive_op_batch/contract.rs | 1 - .../rs-drive/src/drive/batch/drive_op_batch/document.rs | 1 - .../drive_methods/apply_drive_operations/v0/mod.rs | 1 - .../convert_drive_operations_to_grove_operations/mod.rs | 2 -- .../convert_drive_operations_to_grove_operations/v0/mod.rs | 2 -- .../rs-drive/src/drive/batch/drive_op_batch/identity.rs | 1 - packages/rs-drive/src/drive/batch/drive_op_batch/mod.rs | 7 ------- packages/rs-drive/src/drive/batch/drive_op_batch/system.rs | 1 - .../rs-drive/src/drive/batch/drive_op_batch/withdrawals.rs | 1 - 10 files changed, 18 deletions(-) diff --git a/packages/rs-drive-abci/src/execution/platform_events/fee_pool_outwards_distribution/add_epoch_pool_to_proposers_payout_operations/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/fee_pool_outwards_distribution/add_epoch_pool_to_proposers_payout_operations/v0/mod.rs index 19e7425a7c..1dc1fbeec1 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/fee_pool_outwards_distribution/add_epoch_pool_to_proposers_payout_operations/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/fee_pool_outwards_distribution/add_epoch_pool_to_proposers_payout_operations/v0/mod.rs @@ -153,7 +153,6 @@ impl Platform { &BlockInfo::default(), Some(transaction), platform_version, - None, )?; batch.push(DriveOperation::GroveDBOpBatch(operations)); diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/contract.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/contract.rs index dafc281ab1..71e1063056 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/contract.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/contract.rs @@ -56,7 +56,6 @@ impl DriveLowLevelOperationConverter for DataContractOperationType<'_> { block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, - _previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result, Error> { match self { DataContractOperationType::ApplyContractWithSerialization { diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/document.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/document.rs index 5a692e2ff6..0638e71eae 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/document.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/document.rs @@ -102,7 +102,6 @@ impl DriveLowLevelOperationConverter for DocumentOperationType<'_> { block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, - _previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result, Error> { match self { DocumentOperationType::AddDocument { diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs index 82ffe16527..9d9d5b191f 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs @@ -69,7 +69,6 @@ impl Drive { block_info, transaction, platform_version, - previous_fee_versions, )?); } diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/mod.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/mod.rs index c8b3cb54f4..fbef12132a 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/mod.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/mod.rs @@ -36,7 +36,6 @@ impl Drive { block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, - previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { match platform_version .drive @@ -49,7 +48,6 @@ impl Drive { block_info, transaction, platform_version, - previous_fee_versions, ), version => Err(Error::Drive(DriveError::UnknownVersionMismatch { method: "convert_drive_operations_to_grove_operations".to_string(), diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/v0/mod.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/v0/mod.rs index e2ae0955c9..2bf5b5a239 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/v0/mod.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/v0/mod.rs @@ -37,7 +37,6 @@ impl Drive { block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, - previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result { let ops = drive_batch_operations .into_iter() @@ -48,7 +47,6 @@ impl Drive { block_info, transaction, platform_version, - previous_fee_versions, )?; Ok(LowLevelDriveOperation::grovedb_operations_consume( inner_drive_operations, diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/identity.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/identity.rs index 08c2e2a04d..1ac431862a 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/identity.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/identity.rs @@ -104,7 +104,6 @@ impl DriveLowLevelOperationConverter for IdentityOperationType { block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, - _previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result, Error> { match self { IdentityOperationType::AddNewIdentity { diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/mod.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/mod.rs index c4ec7679ea..6ad8543689 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/mod.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/mod.rs @@ -48,7 +48,6 @@ pub trait DriveLowLevelOperationConverter { block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, - previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result, Error>; } @@ -90,7 +89,6 @@ impl DriveLowLevelOperationConverter for DriveOperation<'_> { block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, - previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result, Error> { match self { DriveOperation::DataContractOperation(contract_operation_type) => { @@ -100,7 +98,6 @@ impl DriveLowLevelOperationConverter for DriveOperation<'_> { block_info, transaction, platform_version, - previous_fee_versions, ) } DriveOperation::DocumentOperation(document_operation_type) => document_operation_type @@ -110,7 +107,6 @@ impl DriveLowLevelOperationConverter for DriveOperation<'_> { block_info, transaction, platform_version, - previous_fee_versions, ), DriveOperation::WithdrawalOperation(withdrawal_operation_type) => { withdrawal_operation_type.into_low_level_drive_operations( @@ -119,7 +115,6 @@ impl DriveLowLevelOperationConverter for DriveOperation<'_> { block_info, transaction, platform_version, - previous_fee_versions, ) } DriveOperation::IdentityOperation(identity_operation_type) => identity_operation_type @@ -129,7 +124,6 @@ impl DriveLowLevelOperationConverter for DriveOperation<'_> { block_info, transaction, platform_version, - previous_fee_versions, ), DriveOperation::SystemOperation(system_operation_type) => system_operation_type .into_low_level_drive_operations( @@ -138,7 +132,6 @@ impl DriveLowLevelOperationConverter for DriveOperation<'_> { block_info, transaction, platform_version, - previous_fee_versions, ), DriveOperation::GroveDBOperation(op) => Ok(vec![GroveOperation(op)]), DriveOperation::GroveDBOpBatch(operations) => Ok(operations diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/system.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/system.rs index facae0b632..2296c3cdb2 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/system.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/system.rs @@ -46,7 +46,6 @@ impl DriveLowLevelOperationConverter for SystemOperationType { _block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, - _previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result, Error> { match self { SystemOperationType::AddToSystemCredits { amount } => drive diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/withdrawals.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/withdrawals.rs index 1f11cb3c4c..e989a56297 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/withdrawals.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/withdrawals.rs @@ -48,7 +48,6 @@ impl DriveLowLevelOperationConverter for WithdrawalOperationType { _block_info: &BlockInfo, transaction: TransactionArg, platform_version: &PlatformVersion, - _previous_fee_versions: Option<&CachedEpochIndexFeeVersions>, ) -> Result, Error> { match self { WithdrawalOperationType::UpdateIndexCounter { index } => { From ed7d1b643c8e2f56f5a0a5a47264ee6811df942a Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 4 Jul 2024 16:37:07 +0300 Subject: [PATCH 37/47] restored partialeq instead of hashing --- Cargo.lock | 1 - packages/rs-platform-version/Cargo.toml | 1 - .../src/version/fee/data_contract/mod.rs | 47 +++++-------------- .../src/version/fee/hashing/mod.rs | 29 +++++------- .../src/version/fee/mod.rs | 28 +++-------- .../src/version/fee/processing/mod.rs | 44 +++++------------ .../src/version/fee/signature/mod.rs | 33 +++---------- .../fee/state_transition_min_fees/mod.rs | 26 ++++------ .../src/version/fee/storage/mod.rs | 35 +++----------- 9 files changed, 63 insertions(+), 181 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e71187a1b8..bd015ee006 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3593,7 +3593,6 @@ name = "platform-version" version = "1.0.0-dev.16" dependencies = [ "bincode 2.0.0-rc.3", - "sha2", "thiserror", ] diff --git a/packages/rs-platform-version/Cargo.toml b/packages/rs-platform-version/Cargo.toml index bf971108c1..5c42528ef3 100644 --- a/packages/rs-platform-version/Cargo.toml +++ b/packages/rs-platform-version/Cargo.toml @@ -9,7 +9,6 @@ license = "MIT" [dependencies] thiserror = { version = "1.0.59" } -sha2 = "0.10.5" bincode = { version = "2.0.0-rc.3", features = ["serde"] } [features] diff --git a/packages/rs-platform-version/src/version/fee/data_contract/mod.rs b/packages/rs-platform-version/src/version/fee/data_contract/mod.rs index 57218b51d1..4871499a40 100644 --- a/packages/rs-platform-version/src/version/fee/data_contract/mod.rs +++ b/packages/rs-platform-version/src/version/fee/data_contract/mod.rs @@ -1,5 +1,4 @@ use bincode::{Decode, Encode}; -use sha2::{Digest, Sha256}; pub mod v1; @@ -14,39 +13,17 @@ pub struct FeeDataContractValidationVersion { pub document_type_unique_index_per_property_fee: u64, } -impl FeeDataContractValidationVersion { - pub(crate) fn to_hash(&self) -> u64 { - let mut hasher = Sha256::new(); - Digest::update(&mut hasher, &self.document_type_base_fee.to_be_bytes()); - Digest::update(&mut hasher, &self.document_type_size_fee.to_be_bytes()); - Digest::update( - &mut hasher, - &self.document_type_per_property_fee.to_be_bytes(), - ); - Digest::update( - &mut hasher, - &self.document_type_base_non_unique_index_fee.to_be_bytes(), - ); - Digest::update( - &mut hasher, - &self - .document_type_non_unique_index_per_property_fee - .to_be_bytes(), - ); - Digest::update( - &mut hasher, - &self.document_type_base_unique_index_fee.to_be_bytes(), - ); - Digest::update( - &mut hasher, - &self - .document_type_unique_index_per_property_fee - .to_be_bytes(), - ); - - let result = hasher.finalize(); - // Use the first 8 bytes of the hash as the u64 representation - let hash_bytes: [u8; 8] = result[0..8].try_into().unwrap(); - u64::from_be_bytes(hash_bytes) +impl PartialEq for FeeDataContractValidationVersion { + fn eq(&self, other: &Self) -> bool { + self.document_type_base_fee == other.document_type_base_fee + && self.document_type_size_fee == other.document_type_size_fee + && self.document_type_per_property_fee == other.document_type_per_property_fee + && self.document_type_base_non_unique_index_fee + == other.document_type_base_non_unique_index_fee + && self.document_type_non_unique_index_per_property_fee + == other.document_type_non_unique_index_per_property_fee + && self.document_type_base_unique_index_fee == other.document_type_base_unique_index_fee + && self.document_type_unique_index_per_property_fee + == other.document_type_unique_index_per_property_fee } } diff --git a/packages/rs-platform-version/src/version/fee/hashing/mod.rs b/packages/rs-platform-version/src/version/fee/hashing/mod.rs index 85a2195d6d..ff4340d7f7 100644 --- a/packages/rs-platform-version/src/version/fee/hashing/mod.rs +++ b/packages/rs-platform-version/src/version/fee/hashing/mod.rs @@ -1,29 +1,22 @@ use bincode::{Decode, Encode}; -use sha2::{Digest, Sha256}; pub mod v1; #[derive(Clone, Debug, Encode, Decode, Default)] pub struct FeeHashingVersion { - pub single_sha256_base: u64, pub blake3_base: u64, - pub sha256_ripe_md160_base: u64, - pub sha256_per_block: u64, pub blake3_per_block: u64, -} - -impl FeeHashingVersion { - pub(crate) fn to_hash(&self) -> u64 { - let mut hasher = Sha256::new(); - Digest::update(&mut hasher, &self.single_sha256_base.to_be_bytes()); - Digest::update(&mut hasher, &self.blake3_base.to_be_bytes()); - Digest::update(&mut hasher, &self.sha256_ripe_md160_base.to_be_bytes()); - Digest::update(&mut hasher, &self.sha256_per_block.to_be_bytes()); - Digest::update(&mut hasher, &self.blake3_per_block.to_be_bytes()); + pub sha256_per_block: u64, + pub sha256_ripe_md160_base: u64, + pub single_sha256_base: u64, - let result = hasher.finalize(); - // Use the first 8 bytes of the hash as the u64 representation - let hash_bytes: [u8; 8] = result[0..8].try_into().unwrap(); - u64::from_be_bytes(hash_bytes) +} +impl PartialEq for FeeHashingVersion { + fn eq(&self, other: &Self) -> bool { + self.blake3_base == other.blake3_base + && self.blake3_per_block == other.blake3_per_block + && self.sha256_per_block == other.sha256_per_block + && self.sha256_ripe_md160_base == other.sha256_ripe_md160_base + && self.single_sha256_base == other.single_sha256_base } } diff --git a/packages/rs-platform-version/src/version/fee/mod.rs b/packages/rs-platform-version/src/version/fee/mod.rs index 8a59374c8f..041ed607bc 100644 --- a/packages/rs-platform-version/src/version/fee/mod.rs +++ b/packages/rs-platform-version/src/version/fee/mod.rs @@ -5,7 +5,6 @@ use crate::version::fee::signature::FeeSignatureVersion; use crate::version::fee::state_transition_min_fees::StateTransitionMinFees; use crate::version::fee::storage::FeeStorageVersion; use bincode::{Decode, Encode}; -use sha2::{Digest, Sha256}; mod data_contract; mod hashing; @@ -27,26 +26,11 @@ pub struct FeeVersion { impl PartialEq for FeeVersion { fn eq(&self, other: &Self) -> bool { - self.to_hash() == other.to_hash() - } -} - -impl FeeVersion { - fn to_hash(&self) -> u64 { - let mut hasher = Sha256::new(); - Digest::update(&mut hasher, &self.storage.to_hash().to_be_bytes()); - Digest::update(&mut hasher, &self.signature.to_hash().to_be_bytes()); - Digest::update(&mut hasher, &self.hashing.to_hash().to_be_bytes()); - Digest::update(&mut hasher, &self.processing.to_hash().to_be_bytes()); - Digest::update(&mut hasher, &self.data_contract.to_hash().to_be_bytes()); - Digest::update( - &mut hasher, - &self.state_transition_min_fees.to_hash().to_be_bytes(), - ); - - let result = hasher.finalize(); - // Use the first 8 bytes of the hash as the u64 representation - let hash_bytes: [u8; 8] = result[0..8].try_into().unwrap(); - u64::from_be_bytes(hash_bytes) + self.storage == other.storage + && self.signature == other.signature + && self.hashing == other.hashing + && self.processing == other.processing + && self.data_contract == other.data_contract + && self.state_transition_min_fees == other.state_transition_min_fees } } diff --git a/packages/rs-platform-version/src/version/fee/processing/mod.rs b/packages/rs-platform-version/src/version/fee/processing/mod.rs index 06002ea77c..ca5542843a 100644 --- a/packages/rs-platform-version/src/version/fee/processing/mod.rs +++ b/packages/rs-platform-version/src/version/fee/processing/mod.rs @@ -1,5 +1,4 @@ use bincode::{Decode, Encode}; -use sha2::{Digest, Sha256}; pub mod v1; @@ -13,36 +12,17 @@ pub struct FeeProcessingVersion { pub validate_key_structure: u64, } -impl FeeProcessingVersion { - pub(crate) fn to_hash(&self) -> u64 { - let mut hasher = Sha256::new(); - Digest::update( - &mut hasher, - &self.fetch_identity_balance_processing_cost.to_be_bytes(), - ); - Digest::update( - &mut hasher, - &self.fetch_identity_revision_processing_cost.to_be_bytes(), - ); - Digest::update( - &mut hasher, - &self - .fetch_identity_balance_and_revision_processing_cost - .to_be_bytes(), - ); - Digest::update( - &mut hasher, - &self.fetch_identity_cost_per_look_up_key_by_id.to_be_bytes(), - ); - Digest::update( - &mut hasher, - &self.fetch_single_identity_key_processing_cost.to_be_bytes(), - ); - Digest::update(&mut hasher, &self.validate_key_structure.to_be_bytes()); - - let result = hasher.finalize(); - // Use the first 8 bytes of the hash as the u64 representation - let hash_bytes: [u8; 8] = result[0..8].try_into().unwrap(); - u64::from_be_bytes(hash_bytes) +impl PartialEq for FeeProcessingVersion { + fn eq(&self, other: &Self) -> bool { + self.fetch_identity_balance_processing_cost == other.fetch_identity_balance_processing_cost + && self.fetch_identity_revision_processing_cost + == other.fetch_identity_revision_processing_cost + && self.fetch_identity_balance_and_revision_processing_cost + == other.fetch_identity_balance_and_revision_processing_cost + && self.fetch_identity_cost_per_look_up_key_by_id + == other.fetch_identity_cost_per_look_up_key_by_id + && self.fetch_single_identity_key_processing_cost + == other.fetch_single_identity_key_processing_cost + && self.validate_key_structure == other.validate_key_structure } } diff --git a/packages/rs-platform-version/src/version/fee/signature/mod.rs b/packages/rs-platform-version/src/version/fee/signature/mod.rs index 7856182782..7870889c2e 100644 --- a/packages/rs-platform-version/src/version/fee/signature/mod.rs +++ b/packages/rs-platform-version/src/version/fee/signature/mod.rs @@ -1,5 +1,4 @@ use bincode::{Decode, Encode}; -use sha2::{Digest, Sha256}; pub mod v1; @@ -12,30 +11,12 @@ pub struct FeeSignatureVersion { pub verify_signature_eddsa25519_hash160: u64, } -impl FeeSignatureVersion { - pub(crate) fn to_hash(&self) -> u64 { - let mut hasher = Sha256::new(); - Digest::update( - &mut hasher, - &self.verify_signature_ecdsa_secp256k1.to_be_bytes(), - ); - Digest::update(&mut hasher, &self.verify_signature_bls12_381.to_be_bytes()); - Digest::update( - &mut hasher, - &self.verify_signature_ecdsa_hash160.to_be_bytes(), - ); - Digest::update( - &mut hasher, - &self.verify_signature_bip13_script_hash.to_be_bytes(), - ); - Digest::update( - &mut hasher, - &self.verify_signature_eddsa25519_hash160.to_be_bytes(), - ); - - let result = hasher.finalize(); - // Use the first 8 bytes of the hash as the u64 representation - let hash_bytes: [u8; 8] = result[0..8].try_into().unwrap(); - u64::from_be_bytes(hash_bytes) +impl PartialEq for FeeSignatureVersion { + fn eq(&self, other: &Self) -> bool { + self.verify_signature_ecdsa_secp256k1 == other.verify_signature_ecdsa_secp256k1 + && self.verify_signature_bls12_381 == other.verify_signature_bls12_381 + && self.verify_signature_ecdsa_hash160 == other.verify_signature_ecdsa_hash160 + && self.verify_signature_bip13_script_hash == other.verify_signature_bip13_script_hash + && self.verify_signature_eddsa25519_hash160 == other.verify_signature_eddsa25519_hash160 } } diff --git a/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs b/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs index 98ce0da65c..a35b769bff 100644 --- a/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs +++ b/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs @@ -1,5 +1,4 @@ use bincode::{Decode, Encode}; -use sha2::{Digest, Sha256}; pub mod v1; #[derive(Clone, Debug, Encode, Decode, Default)] @@ -12,22 +11,13 @@ pub struct StateTransitionMinFees { pub contract_update: u64, } -impl StateTransitionMinFees { - pub(crate) fn to_hash(&self) -> u64 { - let mut hasher = Sha256::new(); - Digest::update(&mut hasher, &self.credit_transfer.to_be_bytes()); - Digest::update(&mut hasher, &self.credit_withdrawal.to_be_bytes()); - Digest::update(&mut hasher, &self.identity_update.to_be_bytes()); - Digest::update( - &mut hasher, - &self.document_batch_sub_transition.to_be_bytes(), - ); - Digest::update(&mut hasher, &self.contract_create.to_be_bytes()); - Digest::update(&mut hasher, &self.contract_update.to_be_bytes()); - - let result = hasher.finalize(); - // Use the first 8 bytes of the hash as the u64 representation - let hash_bytes: [u8; 8] = result[0..8].try_into().unwrap(); - u64::from_be_bytes(hash_bytes) +impl PartialEq for StateTransitionMinFees { + fn eq(&self, other: &Self) -> bool { + self.credit_transfer == other.credit_transfer + && self.credit_withdrawal == other.credit_withdrawal + && self.identity_update == other.identity_update + && self.document_batch_sub_transition == other.document_batch_sub_transition + && self.contract_create == other.contract_create + && self.contract_update == other.contract_update } } diff --git a/packages/rs-platform-version/src/version/fee/storage/mod.rs b/packages/rs-platform-version/src/version/fee/storage/mod.rs index 24e61606f6..ae8c30f237 100644 --- a/packages/rs-platform-version/src/version/fee/storage/mod.rs +++ b/packages/rs-platform-version/src/version/fee/storage/mod.rs @@ -1,7 +1,4 @@ -extern crate sha2; - use bincode::{Decode, Encode}; -use sha2::{Digest, Sha256}; pub mod v1; @@ -14,30 +11,12 @@ pub struct FeeStorageVersion { pub storage_seek_cost: u64, } -impl FeeStorageVersion { - pub(crate) fn to_hash(&self) -> u64 { - let mut hasher = Sha256::new(); - Digest::update( - &mut hasher, - &self.storage_disk_usage_credit_per_byte.to_be_bytes(), - ); - Digest::update( - &mut hasher, - &self.storage_processing_credit_per_byte.to_be_bytes(), - ); - Digest::update( - &mut hasher, - &self.storage_load_credit_per_byte.to_be_bytes(), - ); - Digest::update( - &mut hasher, - &self.non_storage_load_credit_per_byte.to_be_bytes(), - ); - Digest::update(&mut hasher, &self.storage_seek_cost.to_be_bytes()); - - let result = hasher.finalize(); - // Use the first 8 bytes of the hash as the u64 representation - let hash_bytes: [u8; 8] = result[0..8].try_into().unwrap(); - u64::from_be_bytes(hash_bytes) +impl PartialEq for FeeStorageVersion { + fn eq(&self, other: &Self) -> bool { + self.storage_disk_usage_credit_per_byte == other.storage_disk_usage_credit_per_byte + && self.storage_processing_credit_per_byte == other.storage_processing_credit_per_byte + && self.storage_load_credit_per_byte == other.storage_load_credit_per_byte + && self.non_storage_load_credit_per_byte == other.non_storage_load_credit_per_byte + && self.storage_seek_cost == other.storage_seek_cost } } From 199cfb7b13ad3f5fa846c41c361637b1860f0be5 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 4 Jul 2024 17:09:59 +0300 Subject: [PATCH 38/47] tests --- .../src/version/fee/data_contract/mod.rs | 32 +++++++++++++++++++ .../src/version/fee/hashing/mod.rs | 28 ++++++++++++++++ .../src/version/fee/processing/mod.rs | 30 +++++++++++++++++ .../src/version/fee/signature/mod.rs | 28 ++++++++++++++++ .../fee/state_transition_min_fees/mod.rs | 30 +++++++++++++++++ .../src/version/fee/storage/mod.rs | 28 ++++++++++++++++ 6 files changed, 176 insertions(+) diff --git a/packages/rs-platform-version/src/version/fee/data_contract/mod.rs b/packages/rs-platform-version/src/version/fee/data_contract/mod.rs index 4871499a40..548deb929f 100644 --- a/packages/rs-platform-version/src/version/fee/data_contract/mod.rs +++ b/packages/rs-platform-version/src/version/fee/data_contract/mod.rs @@ -27,3 +27,35 @@ impl PartialEq for FeeDataContractValidationVersion { == other.document_type_unique_index_per_property_fee } } + +#[cfg(test)] +mod tests { + use super::FeeDataContractValidationVersion; + + #[test] + // If this test failed, then a new field was added in FeeDataContractValidationVersion. And the corresponding eq needs to be updated as well + fn test_fee_data_contract_validation_fees_version_equality() { + let version1 = FeeDataContractValidationVersion { + document_type_base_fee: 1, + document_type_size_fee: 2, + document_type_per_property_fee: 3, + document_type_base_non_unique_index_fee: 4, + document_type_non_unique_index_per_property_fee: 5, + document_type_base_unique_index_fee: 6, + document_type_unique_index_per_property_fee: 7, + }; + + let version2 = FeeDataContractValidationVersion { + document_type_base_fee: 1, + document_type_size_fee: 2, + document_type_per_property_fee: 3, + document_type_base_non_unique_index_fee: 4, + document_type_non_unique_index_per_property_fee: 5, + document_type_base_unique_index_fee: 6, + document_type_unique_index_per_property_fee: 7, + }; + + // This assertion will check if all fields are considered in the equality comparison + assert_eq!(version1, version2, "FeeDataContractValidationVersion equality test failed. If a field was added or removed, update the Eq implementation."); + } +} diff --git a/packages/rs-platform-version/src/version/fee/hashing/mod.rs b/packages/rs-platform-version/src/version/fee/hashing/mod.rs index ff4340d7f7..8759aee4e6 100644 --- a/packages/rs-platform-version/src/version/fee/hashing/mod.rs +++ b/packages/rs-platform-version/src/version/fee/hashing/mod.rs @@ -20,3 +20,31 @@ impl PartialEq for FeeHashingVersion { && self.single_sha256_base == other.single_sha256_base } } + +#[cfg(test)] +mod tests { + use super::FeeHashingVersion; + + #[test] + // If this test failed, then a new field was added in FeeHashingVersion. And the corresponding eq needs to be updated as well + fn test_fee_hashing_version_equality() { + let version1 = FeeHashingVersion { + single_sha256_base: 1, + blake3_base: 2, + sha256_ripe_md160_base: 3, + sha256_per_block: 4, + blake3_per_block: 5, + }; + + let version2 = FeeHashingVersion { + single_sha256_base: 1, + blake3_base: 2, + sha256_ripe_md160_base: 3, + sha256_per_block: 4, + blake3_per_block: 5, + }; + + // This assertion will check if all fields are considered in the equality comparison + assert_eq!(version1, version2, "FeeHashingVersion equality test failed. If a field was added or removed, update the Eq implementation."); + } +} diff --git a/packages/rs-platform-version/src/version/fee/processing/mod.rs b/packages/rs-platform-version/src/version/fee/processing/mod.rs index ca5542843a..c7d93b8714 100644 --- a/packages/rs-platform-version/src/version/fee/processing/mod.rs +++ b/packages/rs-platform-version/src/version/fee/processing/mod.rs @@ -26,3 +26,33 @@ impl PartialEq for FeeProcessingVersion { && self.validate_key_structure == other.validate_key_structure } } + +#[cfg(test)] +mod tests { + use super::FeeProcessingVersion; + + #[test] + // If this test failed, then a new field was added in FeeProcessingVersion. And the corresponding eq needs to be updated as well + fn test_fee_processing_version_equality() { + let version1 = FeeProcessingVersion { + fetch_identity_balance_processing_cost: 1, + fetch_identity_revision_processing_cost: 2, + fetch_identity_balance_and_revision_processing_cost: 3, + fetch_identity_cost_per_look_up_key_by_id: 4, + fetch_single_identity_key_processing_cost: 5, + validate_key_structure: 6, + }; + + let version2 = FeeProcessingVersion { + fetch_identity_balance_processing_cost: 1, + fetch_identity_revision_processing_cost: 2, + fetch_identity_balance_and_revision_processing_cost: 3, + fetch_identity_cost_per_look_up_key_by_id: 4, + fetch_single_identity_key_processing_cost: 5, + validate_key_structure: 6, + }; + + // This assertion will check if all fields are considered in the equality comparison + assert_eq!(version1, version2, "FeeProcessingVersion equality test failed. If a field was added or removed, update the Eq implementation."); + } +} diff --git a/packages/rs-platform-version/src/version/fee/signature/mod.rs b/packages/rs-platform-version/src/version/fee/signature/mod.rs index 7870889c2e..f6d472d370 100644 --- a/packages/rs-platform-version/src/version/fee/signature/mod.rs +++ b/packages/rs-platform-version/src/version/fee/signature/mod.rs @@ -20,3 +20,31 @@ impl PartialEq for FeeSignatureVersion { && self.verify_signature_eddsa25519_hash160 == other.verify_signature_eddsa25519_hash160 } } + +#[cfg(test)] +mod tests { + use super::FeeSignatureVersion; + + #[test] + // If this test failed, then a new field was added in FeeSignatureVersion. And the corresponding eq needs to be updated as well + fn test_fee_signature_version_equality() { + let version1 = FeeSignatureVersion { + verify_signature_ecdsa_secp256k1: 1, + verify_signature_bls12_381: 2, + verify_signature_ecdsa_hash160: 3, + verify_signature_bip13_script_hash: 4, + verify_signature_eddsa25519_hash160: 5, + }; + + let version2 = FeeSignatureVersion { + verify_signature_ecdsa_secp256k1: 1, + verify_signature_bls12_381: 2, + verify_signature_ecdsa_hash160: 3, + verify_signature_bip13_script_hash: 4, + verify_signature_eddsa25519_hash160: 5, + }; + + // This assertion will check if all fields are considered in the equality comparison + assert_eq!(version1, version2, "FeeSignatureVersion equality test failed. If a field was added or removed, update the Eq implementation."); + } +} \ No newline at end of file diff --git a/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs b/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs index a35b769bff..e73dbd0cec 100644 --- a/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs +++ b/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs @@ -21,3 +21,33 @@ impl PartialEq for StateTransitionMinFees { && self.contract_update == other.contract_update } } + +#[cfg(test)] +mod tests { + use super::StateTransitionMinFees; + + #[test] + // If this test failed, then a new field was added in StateTransitionMinFees. And the corresponding eq needs to be updated as well + fn test_fee_state_transition_min_fees_version_equality() { + let version1 = StateTransitionMinFees { + credit_transfer: 1, + credit_withdrawal: 2, + identity_update: 3, + document_batch_sub_transition: 4, + contract_create: 5, + contract_update: 6, + }; + + let version2 = StateTransitionMinFees { + credit_transfer: 1, + credit_withdrawal: 2, + identity_update: 3, + document_batch_sub_transition: 4, + contract_create: 5, + contract_update: 6, + }; + + // This assertion will check if all fields are considered in the equality comparison + assert_eq!(version1, version2, "StateTransitionMinFees equality test failed. If a field was added or removed, update the Eq implementation."); + } +} diff --git a/packages/rs-platform-version/src/version/fee/storage/mod.rs b/packages/rs-platform-version/src/version/fee/storage/mod.rs index ae8c30f237..ce4ce3b90c 100644 --- a/packages/rs-platform-version/src/version/fee/storage/mod.rs +++ b/packages/rs-platform-version/src/version/fee/storage/mod.rs @@ -20,3 +20,31 @@ impl PartialEq for FeeStorageVersion { && self.storage_seek_cost == other.storage_seek_cost } } + +#[cfg(test)] +mod tests { + use super::FeeStorageVersion; + + #[test] + // If this test failed, then a new field was added in FeeProcessingVersion. And the corresponding eq needs to be updated as well + fn test_fee_storage_version_equality() { + let version1 = FeeStorageVersion { + storage_disk_usage_credit_per_byte: 1, + storage_processing_credit_per_byte: 2, + storage_load_credit_per_byte: 3, + non_storage_load_credit_per_byte: 4, + storage_seek_cost: 5, + }; + + let version2 = FeeStorageVersion { + storage_disk_usage_credit_per_byte: 1, + storage_processing_credit_per_byte: 2, + storage_load_credit_per_byte: 3, + non_storage_load_credit_per_byte: 4, + storage_seek_cost: 5, + }; + + // This assertion will check if all fields are considered in the equality comparison + assert_eq!(version1, version2, "FeeStorageVersion equality test failed. If a field was added or removed, update the Eq implementation."); + } +} \ No newline at end of file From 33ab2990e50efddf2ec7fb199fcef82ec6e4c2bb Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 4 Jul 2024 17:17:25 +0300 Subject: [PATCH 39/47] clippy + fmt --- .../block_fee_processing/process_block_fees/v0/mod.rs | 6 ++++-- .../rs-drive/src/drive/batch/drive_op_batch/contract.rs | 2 +- .../rs-drive/src/drive/batch/drive_op_batch/document.rs | 2 +- .../convert_drive_operations_to_grove_operations/mod.rs | 1 - .../convert_drive_operations_to_grove_operations/v0/mod.rs | 1 - .../rs-drive/src/drive/batch/drive_op_batch/identity.rs | 2 +- packages/rs-drive/src/drive/batch/drive_op_batch/mod.rs | 2 +- packages/rs-drive/src/drive/batch/drive_op_batch/system.rs | 2 +- .../rs-drive/src/drive/batch/drive_op_batch/withdrawals.rs | 2 +- packages/rs-platform-version/src/version/fee/hashing/mod.rs | 1 - .../rs-platform-version/src/version/fee/signature/mod.rs | 2 +- packages/rs-platform-version/src/version/fee/storage/mod.rs | 2 +- 12 files changed, 12 insertions(+), 13 deletions(-) diff --git a/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/v0/mod.rs index 3b482ffb38..986460807e 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/v0/mod.rs @@ -237,10 +237,10 @@ mod tests { use crate::execution::types::block_state_info::v0::BlockStateInfoV0; use crate::platform_types::epoch_info::v0::EpochInfoV0; use crate::platform_types::epoch_info::EpochInfo; + use crate::platform_types::platform_state::v0::PlatformStateV0Methods; use crate::platform_types::platform_state::PlatformState; use dpp::fee::epoch::{perpetual_storage_epochs, CreditsPerEpoch, GENESIS_EPOCH_INDEX}; use drive::drive::defaults::INITIAL_PROTOCOL_VERSION; - use crate::platform_types::platform_state::v0::PlatformStateV0Methods; /// Process and validate block fees pub fn process_and_validate_block_fees( @@ -302,7 +302,9 @@ mod tests { }; let block_execution_context_clone = block_execution_context.clone(); - let previous_fee_versions = block_execution_context_clone.block_platform_state().previous_fee_versions(); + let previous_fee_versions = block_execution_context_clone + .block_platform_state() + .previous_fee_versions(); let storage_fee_distribution_outcome = platform .process_block_fees_v0( &block_execution_context.into(), diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/contract.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/contract.rs index 71e1063056..c3baa30f2f 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/contract.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/contract.rs @@ -11,7 +11,7 @@ use crate::drive::batch::drive_op_batch::finalize_task::{ }; use crate::error::drive::DriveError; use dpp::data_contract::accessors::v0::DataContractV0Getters; -use dpp::prelude::CachedEpochIndexFeeVersions; + use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{EstimatedLayerInformation, TransactionArg}; diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/document.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/document.rs index 0638e71eae..99f5cb5388 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/document.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/document.rs @@ -12,7 +12,7 @@ use dpp::data_contract::accessors::v0::DataContractV0Getters; use dpp::data_contract::document_type::DocumentTypeRef; use dpp::data_contract::DataContract; use dpp::document::Document; -use dpp::prelude::{CachedEpochIndexFeeVersions, Identifier}; +use dpp::prelude::Identifier; use dpp::system_data_contracts::withdrawals_contract::v1::document_types::withdrawal; diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/mod.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/mod.rs index fbef12132a..d3346034dd 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/mod.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/mod.rs @@ -8,7 +8,6 @@ use dpp::block::block_info::BlockInfo; use dpp::version::PlatformVersion; -use dpp::prelude::CachedEpochIndexFeeVersions; use grovedb::TransactionArg; impl Drive { diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/v0/mod.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/v0/mod.rs index 2bf5b5a239..fa50fcc460 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/v0/mod.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/convert_drive_operations_to_grove_operations/v0/mod.rs @@ -6,7 +6,6 @@ use crate::error::Error; use crate::fee::op::LowLevelDriveOperation; use dpp::block::block_info::BlockInfo; -use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::batch::GroveDbOp; use grovedb::TransactionArg; diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/identity.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/identity.rs index 1ac431862a..78416eb878 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/identity.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/identity.rs @@ -4,7 +4,7 @@ use crate::error::Error; use crate::fee::op::LowLevelDriveOperation; use dpp::block::block_info::BlockInfo; use dpp::identity::{Identity, IdentityPublicKey, KeyID}; -use dpp::prelude::{CachedEpochIndexFeeVersions, IdentityNonce, Revision}; +use dpp::prelude::{IdentityNonce, Revision}; use crate::drive::identity::update::methods::merge_identity_nonce::MergeIdentityContractNonceResultToResult; use dpp::version::PlatformVersion; diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/mod.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/mod.rs index 6ad8543689..e8c817ca02 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/mod.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/mod.rs @@ -33,7 +33,7 @@ use crate::drive::batch::drive_op_batch::finalize_task::{ DriveOperationFinalizationTasks, DriveOperationFinalizeTask, }; use crate::error::drive::DriveError; -use dpp::prelude::CachedEpochIndexFeeVersions; + use std::collections::{BTreeMap, HashMap}; /// A converter that will get Drive Operations from High Level Operations diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/system.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/system.rs index 2296c3cdb2..f2ac99ba67 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/system.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/system.rs @@ -7,7 +7,7 @@ use dpp::fee::Credits; use dpp::platform_value::Bytes36; use dpp::asset_lock::reduced_asset_lock_value::AssetLockValue; -use dpp::prelude::CachedEpochIndexFeeVersions; + use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{EstimatedLayerInformation, TransactionArg}; diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/withdrawals.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/withdrawals.rs index e989a56297..cc1569f0b4 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/withdrawals.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/withdrawals.rs @@ -11,7 +11,7 @@ use crate::drive::identity::withdrawals::{ use crate::drive::object_size_info::PathKeyElementInfo; use crate::{drive::Drive, error::Error, fee::op::LowLevelDriveOperation}; use dpp::block::block_info::BlockInfo; -use dpp::prelude::CachedEpochIndexFeeVersions; + use dpp::version::PlatformVersion; use grovedb::Element; use grovedb::{batch::KeyInfoPath, EstimatedLayerInformation, TransactionArg}; diff --git a/packages/rs-platform-version/src/version/fee/hashing/mod.rs b/packages/rs-platform-version/src/version/fee/hashing/mod.rs index 8759aee4e6..a5ec109ef8 100644 --- a/packages/rs-platform-version/src/version/fee/hashing/mod.rs +++ b/packages/rs-platform-version/src/version/fee/hashing/mod.rs @@ -9,7 +9,6 @@ pub struct FeeHashingVersion { pub sha256_per_block: u64, pub sha256_ripe_md160_base: u64, pub single_sha256_base: u64, - } impl PartialEq for FeeHashingVersion { fn eq(&self, other: &Self) -> bool { diff --git a/packages/rs-platform-version/src/version/fee/signature/mod.rs b/packages/rs-platform-version/src/version/fee/signature/mod.rs index f6d472d370..06a872dad0 100644 --- a/packages/rs-platform-version/src/version/fee/signature/mod.rs +++ b/packages/rs-platform-version/src/version/fee/signature/mod.rs @@ -47,4 +47,4 @@ mod tests { // This assertion will check if all fields are considered in the equality comparison assert_eq!(version1, version2, "FeeSignatureVersion equality test failed. If a field was added or removed, update the Eq implementation."); } -} \ No newline at end of file +} diff --git a/packages/rs-platform-version/src/version/fee/storage/mod.rs b/packages/rs-platform-version/src/version/fee/storage/mod.rs index ce4ce3b90c..5ba6a1cc90 100644 --- a/packages/rs-platform-version/src/version/fee/storage/mod.rs +++ b/packages/rs-platform-version/src/version/fee/storage/mod.rs @@ -47,4 +47,4 @@ mod tests { // This assertion will check if all fields are considered in the equality comparison assert_eq!(version1, version2, "FeeStorageVersion equality test failed. If a field was added or removed, update the Eq implementation."); } -} \ No newline at end of file +} From 1ef064e79ceff0f99a62683b76208dbe4f0ec248 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 4 Jul 2024 17:45:03 +0300 Subject: [PATCH 40/47] None previous_fee_versions when overwrite (insert) is false --- .../rs-drive/src/drive/document/delete/mod.rs | 18 +++++------ .../rs-drive/src/drive/document/insert/mod.rs | 30 +++++++++---------- .../rs-drive/src/drive/document/update/mod.rs | 8 ++--- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/packages/rs-drive/src/drive/document/delete/mod.rs b/packages/rs-drive/src/drive/document/delete/mod.rs index d7e967dd30..457635d6a1 100644 --- a/packages/rs-drive/src/drive/document/delete/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/mod.rs @@ -132,7 +132,7 @@ mod tests { true, None, platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect("expected to insert a document successfully"); @@ -225,7 +225,7 @@ mod tests { true, Some(&db_transaction), platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect("expected to insert a document successfully"); @@ -365,7 +365,7 @@ mod tests { true, Some(&db_transaction), platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect("expected to insert a document successfully"); @@ -400,7 +400,7 @@ mod tests { true, Some(&db_transaction), platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect("expected to insert a document successfully"); @@ -546,7 +546,7 @@ mod tests { true, Some(&db_transaction), platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect("expected to insert a document successfully"); @@ -577,7 +577,7 @@ mod tests { true, Some(&db_transaction), platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect("expected to insert a document successfully"); @@ -647,7 +647,7 @@ mod tests { true, Some(&db_transaction), platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect("expected to insert a document successfully"); @@ -822,7 +822,7 @@ mod tests { true, Some(&db_transaction), platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect("expected to insert a document successfully"); @@ -922,7 +922,7 @@ mod tests { true, Some(&db_transaction), platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect("expected to insert a document successfully"); diff --git a/packages/rs-drive/src/drive/document/insert/mod.rs b/packages/rs-drive/src/drive/document/insert/mod.rs index 2e44246e99..79222c4308 100644 --- a/packages/rs-drive/src/drive/document/insert/mod.rs +++ b/packages/rs-drive/src/drive/document/insert/mod.rs @@ -140,7 +140,7 @@ mod tests { true, None, platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect("expected to insert a document successfully"); @@ -162,7 +162,7 @@ mod tests { true, None, platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect_err("expected not to be able to insert same document twice"); @@ -236,7 +236,7 @@ mod tests { true, Some(&db_transaction), platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect("expected to insert a document successfully"); @@ -258,7 +258,7 @@ mod tests { true, Some(&db_transaction), platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect_err("expected not to be able to insert same document twice"); @@ -332,7 +332,7 @@ mod tests { true, Some(&db_transaction), platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect("expected to insert a document successfully"); @@ -397,7 +397,7 @@ mod tests { true, Some(&db_transaction), platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect("expected to insert a document successfully"); @@ -467,7 +467,7 @@ mod tests { false, Some(&db_transaction), platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect("expected to insert a document successfully"); @@ -527,7 +527,7 @@ mod tests { false, Some(&db_transaction), platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect("expected to insert a document successfully"); @@ -549,7 +549,7 @@ mod tests { true, Some(&db_transaction), platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect("expected to insert a document successfully"); @@ -695,7 +695,7 @@ mod tests { true, Some(&db_transaction), platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect("expected to insert a document successfully"); @@ -773,7 +773,7 @@ mod tests { true, None, platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect("expected to insert a document successfully"); @@ -795,7 +795,7 @@ mod tests { true, None, platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect("expected to insert a document successfully"); @@ -817,7 +817,7 @@ mod tests { true, None, platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect("expected to insert a document successfully"); } @@ -868,7 +868,7 @@ mod tests { true, None, platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect("expected to insert a document successfully"); @@ -890,7 +890,7 @@ mod tests { true, None, platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect_err( "expected not to be able to insert document with already existing unique index", diff --git a/packages/rs-drive/src/drive/document/update/mod.rs b/packages/rs-drive/src/drive/document/update/mod.rs index 233f0b4af0..c24d684c36 100644 --- a/packages/rs-drive/src/drive/document/update/mod.rs +++ b/packages/rs-drive/src/drive/document/update/mod.rs @@ -636,7 +636,7 @@ mod tests { true, None, platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect("should add document"); @@ -745,7 +745,7 @@ mod tests { true, Some(&db_transaction), platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect("expected to insert a document successfully"); @@ -842,7 +842,7 @@ mod tests { true, Some(&db_transaction), platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect("expected to insert a document successfully"); @@ -1929,7 +1929,7 @@ mod tests { true, None, platform_version, - Some(&EPOCH_CHANGE_FEE_VERSION_TEST), + None, ) .expect("should create document"); From d915afd99474b587d3021d7c912cd58255a031a1 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Thu, 4 Jul 2024 21:19:27 +0300 Subject: [PATCH 41/47] fmt --- packages/rs-drive/src/drive/document/insert/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rs-drive/src/drive/document/insert/mod.rs b/packages/rs-drive/src/drive/document/insert/mod.rs index 79222c4308..b1ee261832 100644 --- a/packages/rs-drive/src/drive/document/insert/mod.rs +++ b/packages/rs-drive/src/drive/document/insert/mod.rs @@ -773,7 +773,7 @@ mod tests { true, None, platform_version, - None, + None, ) .expect("expected to insert a document successfully"); From 53d1c91ee822db5fb47838e3a16a3e8cfe48f095 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Fri, 5 Jul 2024 10:35:27 +0300 Subject: [PATCH 42/47] added test for FeeVersion --- .../src/version/fee/mod.rs | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) diff --git a/packages/rs-platform-version/src/version/fee/mod.rs b/packages/rs-platform-version/src/version/fee/mod.rs index 041ed607bc..f6c4ee4156 100644 --- a/packages/rs-platform-version/src/version/fee/mod.rs +++ b/packages/rs-platform-version/src/version/fee/mod.rs @@ -34,3 +34,121 @@ impl PartialEq for FeeVersion { && self.state_transition_min_fees == other.state_transition_min_fees } } + + +#[cfg(test)] +mod tests { + use crate::version::fee::data_contract::FeeDataContractValidationVersion; + use crate::version::fee::hashing::FeeHashingVersion; + use crate::version::fee::processing::FeeProcessingVersion; + use crate::version::fee::signature::FeeSignatureVersion; + use crate::version::fee::state_transition_min_fees::StateTransitionMinFees; + use crate::version::fee::storage::FeeStorageVersion; + use super::FeeVersion; + + #[test] + // If this test failed, then a new field was added in FeeVersion. And the corresponding eq needs to be updated as well + fn test_fee_version_equality() { + let version1 = FeeVersion { + storage: FeeStorageVersion { + storage_disk_usage_credit_per_byte: 1, + storage_processing_credit_per_byte: 2, + storage_load_credit_per_byte: 3, + non_storage_load_credit_per_byte: 4, + storage_seek_cost: 5, + }, + signature: FeeSignatureVersion { + verify_signature_ecdsa_secp256k1: 1, + verify_signature_bls12_381: 2, + verify_signature_ecdsa_hash160: 3, + verify_signature_bip13_script_hash: 4, + verify_signature_eddsa25519_hash160: 5, + }, + hashing: FeeHashingVersion { + single_sha256_base: 1, + blake3_base: 2, + sha256_ripe_md160_base: 3, + sha256_per_block: 4, + blake3_per_block: 5, + }, + processing:FeeProcessingVersion { + fetch_identity_balance_processing_cost: 1, + fetch_identity_revision_processing_cost: 2, + fetch_identity_balance_and_revision_processing_cost: 3, + fetch_identity_cost_per_look_up_key_by_id: 4, + fetch_single_identity_key_processing_cost: 5, + validate_key_structure: 6, + }, + data_contract: FeeDataContractValidationVersion { + document_type_base_fee: 1, + document_type_size_fee: 2, + document_type_per_property_fee: 3, + document_type_base_non_unique_index_fee: 4, + document_type_non_unique_index_per_property_fee: 5, + document_type_base_unique_index_fee: 6, + document_type_unique_index_per_property_fee: 7, + }, + state_transition_min_fees: StateTransitionMinFees { + credit_transfer: 1, + credit_withdrawal: 2, + identity_update: 3, + document_batch_sub_transition: 4, + contract_create: 5, + contract_update: 6, + } + }; + + let version2 = FeeVersion { + storage: FeeStorageVersion { + storage_disk_usage_credit_per_byte: 1, + storage_processing_credit_per_byte: 2, + storage_load_credit_per_byte: 3, + non_storage_load_credit_per_byte: 4, + storage_seek_cost: 5, + }, + signature: FeeSignatureVersion { + verify_signature_ecdsa_secp256k1: 1, + verify_signature_bls12_381: 2, + verify_signature_ecdsa_hash160: 3, + verify_signature_bip13_script_hash: 4, + verify_signature_eddsa25519_hash160: 5, + }, + hashing: FeeHashingVersion { + single_sha256_base: 1, + blake3_base: 2, + sha256_ripe_md160_base: 3, + sha256_per_block: 4, + blake3_per_block: 5, + }, + processing:FeeProcessingVersion { + fetch_identity_balance_processing_cost: 1, + fetch_identity_revision_processing_cost: 2, + fetch_identity_balance_and_revision_processing_cost: 3, + fetch_identity_cost_per_look_up_key_by_id: 4, + fetch_single_identity_key_processing_cost: 5, + validate_key_structure: 6, + }, + data_contract: FeeDataContractValidationVersion { + document_type_base_fee: 1, + document_type_size_fee: 2, + document_type_per_property_fee: 3, + document_type_base_non_unique_index_fee: 4, + document_type_non_unique_index_per_property_fee: 5, + document_type_base_unique_index_fee: 6, + document_type_unique_index_per_property_fee: 7, + }, + state_transition_min_fees: StateTransitionMinFees { + credit_transfer: 1, + credit_withdrawal: 2, + identity_update: 3, + document_batch_sub_transition: 4, + contract_create: 5, + contract_update: 6, + } + }; + + // This assertion will check if all fields are considered in the equality comparison + assert_eq!(version1, version2, "FeeVersion equality test failed. If a field was added or removed, update the Eq implementation."); + } +} + From a079258cb163f80c0989b886bf3c2c11bb1e92a7 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Fri, 12 Jul 2024 14:04:16 +0300 Subject: [PATCH 43/47] conflict resolutions --- .../src/execution/check_tx/v0/mod.rs | 2 +- .../execute_event/v0/mod.rs | 1 + .../voting/award_document_to_winner/v0/mod.rs | 1 + .../types/execution_operation/mod.rs | 2 +- .../state/v0/fetch_contender.rs | 1 + .../state_transitions/identity_create/mod.rs | 12 +++--- .../state_transitions/identity_top_up/mod.rs | 4 +- .../platform_types/platform_state/v0/mod.rs | 1 + .../tests/strategy_tests/main.rs | 8 ++-- .../rs-drive/src/drive/document/delete/mod.rs | 2 +- .../rs-drive/src/drive/document/insert/mod.rs | 6 +-- .../add_contested_document/v0/mod.rs | 1 + .../v0/mod.rs | 1 + .../drive/document/insert_contested/mod.rs | 2 + .../v0/mod.rs | 1 + .../fetch/single_balance/v0/mod.rs | 1 + .../v0/mod.rs | 1 + .../v0/mod.rs | 1 + ..._resource_votes_given_by_identity_query.rs | 2 + .../query/vote_poll_contestant_votes_query.rs | 2 + .../src/query/vote_poll_vote_state_query.rs | 2 + .../vote_polls_by_document_type_query.rs | 1 + .../src/query/vote_polls_by_end_date_query.rs | 2 + .../src/version/fee/mod.rs | 19 +++++++++- .../src/version/fee/processing/mod.rs | 2 + .../fee/state_transition_min_fees/mod.rs | 2 + .../fee/vote_resolution_fund_fees/mod.rs | 37 ++++++++++++++++++- 27 files changed, 94 insertions(+), 23 deletions(-) diff --git a/packages/rs-drive-abci/src/execution/check_tx/v0/mod.rs b/packages/rs-drive-abci/src/execution/check_tx/v0/mod.rs index 2cccc5d9e9..2f6c46e88a 100644 --- a/packages/rs-drive-abci/src/execution/check_tx/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/check_tx/v0/mod.rs @@ -178,7 +178,7 @@ where platform_ref.state.last_block_info(), None, platform_version, - platform_state.previous_fee_versions(), + platform_ref.state.previous_fee_versions(), )?; let (estimated_fee_result, errors) = validation_result.into_data_and_errors()?; diff --git a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/v0/mod.rs index 1ae0217fa0..39560de69c 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/v0/mod.rs @@ -173,6 +173,7 @@ where block_info, Some(transaction), platform_version, + Some(previous_fee_versions), ) .map_err(Error::Drive)?; diff --git a/packages/rs-drive-abci/src/execution/platform_events/voting/award_document_to_winner/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/voting/award_document_to_winner/v0/mod.rs index c6e9698c0d..03abd09cd6 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/voting/award_document_to_winner/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/voting/award_document_to_winner/v0/mod.rs @@ -48,6 +48,7 @@ where true, transaction, platform_version, + None, )?; Ok(()) } diff --git a/packages/rs-drive-abci/src/execution/types/execution_operation/mod.rs b/packages/rs-drive-abci/src/execution/types/execution_operation/mod.rs index af99dc577f..4024224e2e 100644 --- a/packages/rs-drive-abci/src/execution/types/execution_operation/mod.rs +++ b/packages/rs-drive-abci/src/execution/types/execution_operation/mod.rs @@ -106,7 +106,7 @@ impl ValidationOperation { .processing_fee .checked_add( platform_version.fee_version.hashing.single_sha256_base - + platform_version.fee_version.hashing.single_sha256_per_block + + platform_version.fee_version.hashing.sha256_per_block * (*block_count as u64), ) .ok_or(ExecutionError::Overflow( diff --git a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/documents_batch/state/v0/fetch_contender.rs b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/documents_batch/state/v0/fetch_contender.rs index afafbe85b1..8398f39b98 100644 --- a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/documents_batch/state/v0/fetch_contender.rs +++ b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/documents_batch/state/v0/fetch_contender.rs @@ -39,6 +39,7 @@ pub(crate) fn fetch_contender( &block_info.epoch, drive.config.epochs_per_era, platform_version, + None, )?; match result.contenders.pop() { None => Ok((None, fee)), diff --git a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/identity_create/mod.rs b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/identity_create/mod.rs index 0f62e6707a..32ad5e8de8 100644 --- a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/identity_create/mod.rs +++ b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/identity_create/mod.rs @@ -306,7 +306,7 @@ mod tests { assert_eq!(processing_result.valid_count(), 1); - assert_eq!(processing_result.aggregated_fees().processing_fee, 2591600); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised + assert_eq!(processing_result.aggregated_fees().processing_fee, 2658800); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised platform .drive @@ -321,7 +321,7 @@ mod tests { .expect("expected to get identity balance") .expect("expected there to be an identity balance for this identity"); - assert_eq!(identity_balance, 99916138400); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised + assert_eq!(identity_balance, 99916071200); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised } #[test] @@ -524,7 +524,7 @@ mod tests { assert_eq!(processing_result.valid_count(), 1); - assert_eq!(processing_result.aggregated_fees().processing_fee, 3196400); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised + assert_eq!(processing_result.aggregated_fees().processing_fee, 3263600); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised platform .drive @@ -539,7 +539,7 @@ mod tests { .expect("expected to get identity balance") .expect("expected there to be an identity balance for this identity"); - assert_eq!(identity_balance, 99911271600); // The identity balance is smaller than if there hadn't been any issue // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised + assert_eq!(identity_balance, 99911204400); // The identity balance is smaller than if there hadn't been any issue // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised } #[test] @@ -1214,7 +1214,7 @@ mod tests { assert_eq!(processing_result.valid_count(), 1); - assert_eq!(processing_result.aggregated_fees().processing_fee, 3196400); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised + assert_eq!(processing_result.aggregated_fees().processing_fee, 3263600); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised platform .drive @@ -1229,6 +1229,6 @@ mod tests { .expect("expected to get identity balance") .expect("expected there to be an identity balance for this identity"); - assert_eq!(identity_balance, 99911271600); // The identity balance is smaller than if there hadn't been any issue // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised + assert_eq!(identity_balance, 99911204400); // The identity balance is smaller than if there hadn't been any issue // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised } } diff --git a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/identity_top_up/mod.rs b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/identity_top_up/mod.rs index d6b901ba88..0efe7ffd38 100644 --- a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/identity_top_up/mod.rs +++ b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/identity_top_up/mod.rs @@ -225,7 +225,7 @@ mod tests { assert_eq!(processing_result.valid_count(), 1); - assert_eq!(processing_result.aggregated_fees().processing_fee, 1152700); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised + assert_eq!(processing_result.aggregated_fees().processing_fee, 1219900); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised platform .drive @@ -244,6 +244,6 @@ mod tests { .expect("expected to get identity balance") .expect("expected there to be an identity balance for this identity"); - assert_eq!(identity_balance, 149993042300); // about 0.5 Dash starting balance + 1 Dash asset lock top up // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised + assert_eq!(identity_balance, 149992975100); // about 0.5 Dash starting balance + 1 Dash asset lock top up // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised } } diff --git a/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs b/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs index 41706fede7..57deee8770 100644 --- a/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs +++ b/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs @@ -736,6 +736,7 @@ impl PlatformStateV0Methods for PlatformStateV0 { /// Returns a mutable reference to the previous feeversions fn previous_fee_versions_mut(&mut self) -> &mut CachedEpochIndexFeeVersions { &mut self.previous_fee_versions + } fn full_masternode_list_changes(&self, previous: &PlatformStateV0) -> MasternodeListChanges { let mut new_masternodes = Vec::new(); diff --git a/packages/rs-drive-abci/tests/strategy_tests/main.rs b/packages/rs-drive-abci/tests/strategy_tests/main.rs index 14e0799c04..c20a2963d3 100644 --- a/packages/rs-drive-abci/tests/strategy_tests/main.rs +++ b/packages/rs-drive-abci/tests/strategy_tests/main.rs @@ -526,7 +526,7 @@ mod tests { .expect("expected to fetch balances") .expect("expected to have an identity to get balance from"); - assert_eq!(balance, 99864783600) // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised + assert_eq!(balance, 99864716400) // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised } #[test] @@ -1193,7 +1193,7 @@ mod tests { .unwrap() .unwrap() ), - "00b8bd1457467c08672b399a007f6d68102386413c5cbae53424a1c6cf3cb4ab".to_string() + "8183eede440c002da02009166bef1e624afdb796852c755fa9abb7c22526c6bf".to_string() ) } @@ -1914,7 +1914,7 @@ mod tests { .unwrap() .unwrap() ), - "75e4622f3c99e1f1efdd3bbd913587bb238791e967244a5e17fe942ec9cf6cb5".to_string() + "10aa07e5e7c2fbe521a8ddd937be9cb68e9abe0f69bac4fef1442d447a1b7c6a".to_string() ) } @@ -2049,7 +2049,7 @@ mod tests { .unwrap() .unwrap() ), - "539fc39067fcf0f7cb0e4fa3589d71376393e24c7046f51bd6410e2c2e3b7944".to_string() + "2ca45a7e73e8f7126b2192bb738c619746acdbef84ef3c3e1a1131be69e44f40".to_string() ) } diff --git a/packages/rs-drive/src/drive/document/delete/mod.rs b/packages/rs-drive/src/drive/document/delete/mod.rs index 457635d6a1..5a4a70c3be 100644 --- a/packages/rs-drive/src/drive/document/delete/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/mod.rs @@ -957,6 +957,6 @@ mod tests { assert!(fee_result.fee_refunds.0.is_empty()); assert_eq!(fee_result.storage_fee, 0); - assert_eq!(fee_result.processing_fee, 145553200); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised + assert_eq!(fee_result.processing_fee, 145463600); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised } } diff --git a/packages/rs-drive/src/drive/document/insert/mod.rs b/packages/rs-drive/src/drive/document/insert/mod.rs index f2013380f9..3833d10cc3 100644 --- a/packages/rs-drive/src/drive/document/insert/mod.rs +++ b/packages/rs-drive/src/drive/document/insert/mod.rs @@ -83,12 +83,8 @@ mod tests { use crate::drive::flags::StorageFlags; use crate::drive::object_size_info::{DocumentAndContractInfo, OwnedDocumentInfo}; use crate::fee::op::LowLevelDriveOperation; - use dpp::block::block_info::BlockInfo; use once_cell::sync::Lazy; - use rand::{random, Rng}; - use std::borrow::Cow; use std::collections::BTreeMap; - use std::option::Option::None; use dpp::block::epoch::Epoch; use dpp::data_contract::accessors::v0::DataContractV0Getters; @@ -482,7 +478,7 @@ mod tests { StorageDiskUsageCreditPerByte, ); assert_eq!(1305, added_bytes); - assert_eq!(143011600, processing_fee); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised + assert_eq!(144859600, processing_fee); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised } #[test] diff --git a/packages/rs-drive/src/drive/document/insert_contested/add_contested_document/v0/mod.rs b/packages/rs-drive/src/drive/document/insert_contested/add_contested_document/v0/mod.rs index c1ed51f720..327f8d4d88 100644 --- a/packages/rs-drive/src/drive/document/insert_contested/add_contested_document/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/insert_contested/add_contested_document/v0/mod.rs @@ -74,6 +74,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, + None, )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/document/insert_contested/add_contested_document_for_contract/v0/mod.rs b/packages/rs-drive/src/drive/document/insert_contested/add_contested_document_for_contract/v0/mod.rs index 2de89935b6..1ce148b2bf 100644 --- a/packages/rs-drive/src/drive/document/insert_contested/add_contested_document_for_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/insert_contested/add_contested_document_for_contract/v0/mod.rs @@ -44,6 +44,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, + None, )?; Ok(fees) } diff --git a/packages/rs-drive/src/drive/document/insert_contested/mod.rs b/packages/rs-drive/src/drive/document/insert_contested/mod.rs index 966c82ebc7..95165ed115 100644 --- a/packages/rs-drive/src/drive/document/insert_contested/mod.rs +++ b/packages/rs-drive/src/drive/document/insert_contested/mod.rs @@ -104,6 +104,7 @@ mod tests { true, None, platform_version, + None, ) .expect("expected to insert a document successfully"); @@ -125,6 +126,7 @@ mod tests { true, None, platform_version, + None, ) .expect_err( "expected not to be able to insert document with already existing unique index", diff --git a/packages/rs-drive/src/drive/document/query/query_contested_documents_vote_state/v0/mod.rs b/packages/rs-drive/src/drive/document/query/query_contested_documents_vote_state/v0/mod.rs index e6a996bf62..05f3d2f467 100644 --- a/packages/rs-drive/src/drive/document/query/query_contested_documents_vote_state/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/query/query_contested_documents_vote_state/v0/mod.rs @@ -81,6 +81,7 @@ impl Drive { epoch, self.config.epochs_per_era, platform_version, + None, )?; fee_result.processing_fee } else { diff --git a/packages/rs-drive/src/drive/prefunded_specialized_balances/fetch/single_balance/v0/mod.rs b/packages/rs-drive/src/drive/prefunded_specialized_balances/fetch/single_balance/v0/mod.rs index 9ed5965c45..6b1850aa27 100644 --- a/packages/rs-drive/src/drive/prefunded_specialized_balances/fetch/single_balance/v0/mod.rs +++ b/packages/rs-drive/src/drive/prefunded_specialized_balances/fetch/single_balance/v0/mod.rs @@ -56,6 +56,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, + None, )?; Ok((value, fees)) } diff --git a/packages/rs-drive/src/drive/votes/fetch/fetch_contested_document_vote_poll_stored_info/v0/mod.rs b/packages/rs-drive/src/drive/votes/fetch/fetch_contested_document_vote_poll_stored_info/v0/mod.rs index a571a7996a..f0fbad7183 100644 --- a/packages/rs-drive/src/drive/votes/fetch/fetch_contested_document_vote_poll_stored_info/v0/mod.rs +++ b/packages/rs-drive/src/drive/votes/fetch/fetch_contested_document_vote_poll_stored_info/v0/mod.rs @@ -45,6 +45,7 @@ impl Drive { epoch, self.config.epochs_per_era, platform_version, + None, ) }) .transpose()?; diff --git a/packages/rs-drive/src/drive/votes/insert/contested_resource/individual_vote/register_contested_resource_identity_vote/v0/mod.rs b/packages/rs-drive/src/drive/votes/insert/contested_resource/individual_vote/register_contested_resource_identity_vote/v0/mod.rs index 5e0fe3ac00..b3f39261ee 100644 --- a/packages/rs-drive/src/drive/votes/insert/contested_resource/individual_vote/register_contested_resource_identity_vote/v0/mod.rs +++ b/packages/rs-drive/src/drive/votes/insert/contested_resource/individual_vote/register_contested_resource_identity_vote/v0/mod.rs @@ -56,6 +56,7 @@ impl Drive { &block_info.epoch, self.config.epochs_per_era, platform_version, + None, )?; Ok(fees) } diff --git a/packages/rs-drive/src/query/contested_resource_votes_given_by_identity_query.rs b/packages/rs-drive/src/query/contested_resource_votes_given_by_identity_query.rs index d8a63c1da3..91902ba299 100644 --- a/packages/rs-drive/src/query/contested_resource_votes_given_by_identity_query.rs +++ b/packages/rs-drive/src/query/contested_resource_votes_given_by_identity_query.rs @@ -62,6 +62,7 @@ impl ContestedResourceVotesGivenByIdentityQuery { &block_info.epoch, drive.config.epochs_per_era, platform_version, + None, )?; fee_result.processing_fee } else { @@ -113,6 +114,7 @@ impl ContestedResourceVotesGivenByIdentityQuery { &block_info.epoch, drive.config.epochs_per_era, platform_version, + None, )?; fee_result.processing_fee } else { diff --git a/packages/rs-drive/src/query/vote_poll_contestant_votes_query.rs b/packages/rs-drive/src/query/vote_poll_contestant_votes_query.rs index ff65c1fd06..656f6fe6dc 100644 --- a/packages/rs-drive/src/query/vote_poll_contestant_votes_query.rs +++ b/packages/rs-drive/src/query/vote_poll_contestant_votes_query.rs @@ -137,6 +137,7 @@ impl ContestedDocumentVotePollVotesDriveQuery { &block_info.epoch, drive.config.epochs_per_era, platform_version, + None, )?; fee_result.processing_fee } else { @@ -183,6 +184,7 @@ impl ContestedDocumentVotePollVotesDriveQuery { &block_info.epoch, drive.config.epochs_per_era, platform_version, + None, )?; fee_result.processing_fee } else { diff --git a/packages/rs-drive/src/query/vote_poll_vote_state_query.rs b/packages/rs-drive/src/query/vote_poll_vote_state_query.rs index 71e49a1cf4..f78f30dde4 100644 --- a/packages/rs-drive/src/query/vote_poll_vote_state_query.rs +++ b/packages/rs-drive/src/query/vote_poll_vote_state_query.rs @@ -291,6 +291,7 @@ impl ContestedDocumentVotePollDriveQuery { &block_info.epoch, drive.config.epochs_per_era, platform_version, + None, )?; fee_result.processing_fee } else { @@ -338,6 +339,7 @@ impl ContestedDocumentVotePollDriveQuery { &block_info.epoch, drive.config.epochs_per_era, platform_version, + None, )?; fee_result.processing_fee } else { diff --git a/packages/rs-drive/src/query/vote_polls_by_document_type_query.rs b/packages/rs-drive/src/query/vote_polls_by_document_type_query.rs index e82599f304..161a269ca3 100644 --- a/packages/rs-drive/src/query/vote_polls_by_document_type_query.rs +++ b/packages/rs-drive/src/query/vote_polls_by_document_type_query.rs @@ -238,6 +238,7 @@ impl VotePollsByDocumentTypeQuery { &block_info.epoch, drive.config.epochs_per_era, platform_version, + None, )?; fee_result.processing_fee } else { diff --git a/packages/rs-drive/src/query/vote_polls_by_end_date_query.rs b/packages/rs-drive/src/query/vote_polls_by_end_date_query.rs index 3d08ce0a26..b20d892c47 100644 --- a/packages/rs-drive/src/query/vote_polls_by_end_date_query.rs +++ b/packages/rs-drive/src/query/vote_polls_by_end_date_query.rs @@ -205,6 +205,7 @@ impl VotePollsByEndDateDriveQuery { &block_info.epoch, drive.config.epochs_per_era, platform_version, + None, )?; fee_result.processing_fee } else { @@ -249,6 +250,7 @@ impl VotePollsByEndDateDriveQuery { &block_info.epoch, drive.config.epochs_per_era, platform_version, + None, )?; fee_result.processing_fee } else { diff --git a/packages/rs-platform-version/src/version/fee/mod.rs b/packages/rs-platform-version/src/version/fee/mod.rs index bd8e8609f8..a86fb2fe95 100644 --- a/packages/rs-platform-version/src/version/fee/mod.rs +++ b/packages/rs-platform-version/src/version/fee/mod.rs @@ -47,6 +47,7 @@ mod tests { use crate::version::fee::signature::FeeSignatureVersion; use crate::version::fee::state_transition_min_fees::StateTransitionMinFees; use crate::version::fee::storage::FeeStorageVersion; + use crate::version::fee::vote_resolution_fund_fees::VoteResolutionFundFees; use super::FeeVersion; #[test] @@ -81,6 +82,7 @@ mod tests { fetch_identity_cost_per_look_up_key_by_id: 4, fetch_single_identity_key_processing_cost: 5, validate_key_structure: 6, + fetch_prefunded_specialized_balance_processing_cost: 7, }, data_contract: FeeDataContractValidationVersion { document_type_base_fee: 1, @@ -98,7 +100,13 @@ mod tests { document_batch_sub_transition: 4, contract_create: 5, contract_update: 6, - } + masternode_vote: 7, + }, + vote_resolution_fund_fees: VoteResolutionFundFees { + contested_document_vote_resolution_fund_required_amount: 1, + contested_document_vote_resolution_unlock_fund_required_amount: 2, + contested_document_single_vote_cost: 3, + }, }; let version2 = FeeVersion { @@ -130,6 +138,7 @@ mod tests { fetch_identity_cost_per_look_up_key_by_id: 4, fetch_single_identity_key_processing_cost: 5, validate_key_structure: 6, + fetch_prefunded_specialized_balance_processing_cost: 7, }, data_contract: FeeDataContractValidationVersion { document_type_base_fee: 1, @@ -147,7 +156,13 @@ mod tests { document_batch_sub_transition: 4, contract_create: 5, contract_update: 6, - } + masternode_vote: 7, + }, + vote_resolution_fund_fees: VoteResolutionFundFees { + contested_document_vote_resolution_fund_required_amount: 1, + contested_document_vote_resolution_unlock_fund_required_amount: 2, + contested_document_single_vote_cost: 3, + }, }; // This assertion will check if all fields are considered in the equality comparison diff --git a/packages/rs-platform-version/src/version/fee/processing/mod.rs b/packages/rs-platform-version/src/version/fee/processing/mod.rs index 5e2ca19351..f08d888ea0 100644 --- a/packages/rs-platform-version/src/version/fee/processing/mod.rs +++ b/packages/rs-platform-version/src/version/fee/processing/mod.rs @@ -42,6 +42,7 @@ mod tests { fetch_identity_cost_per_look_up_key_by_id: 4, fetch_single_identity_key_processing_cost: 5, validate_key_structure: 6, + fetch_prefunded_specialized_balance_processing_cost: 7, }; let version2 = FeeProcessingVersion { @@ -51,6 +52,7 @@ mod tests { fetch_identity_cost_per_look_up_key_by_id: 4, fetch_single_identity_key_processing_cost: 5, validate_key_structure: 6, + fetch_prefunded_specialized_balance_processing_cost: 7, }; // This assertion will check if all fields are considered in the equality comparison diff --git a/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs b/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs index c7b8aaaae9..ee8a16a2b0 100644 --- a/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs +++ b/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs @@ -37,6 +37,7 @@ mod tests { document_batch_sub_transition: 4, contract_create: 5, contract_update: 6, + masternode_vote: 7, }; let version2 = StateTransitionMinFees { @@ -46,6 +47,7 @@ mod tests { document_batch_sub_transition: 4, contract_create: 5, contract_update: 6, + masternode_vote: 7, }; // This assertion will check if all fields are considered in the equality comparison diff --git a/packages/rs-platform-version/src/version/fee/vote_resolution_fund_fees/mod.rs b/packages/rs-platform-version/src/version/fee/vote_resolution_fund_fees/mod.rs index 280202ef35..0aff7208f9 100644 --- a/packages/rs-platform-version/src/version/fee/vote_resolution_fund_fees/mod.rs +++ b/packages/rs-platform-version/src/version/fee/vote_resolution_fund_fees/mod.rs @@ -1,5 +1,8 @@ +use bincode::{Decode, Encode}; +use crate::version::fee::storage::FeeStorageVersion; + pub mod v1; -#[derive(Clone, Debug, Default)] +#[derive(Clone, Debug, Encode, Decode, Default)] pub struct VoteResolutionFundFees { /// This is the amount that will be deducted from an identity and used to pay for voting pub contested_document_vote_resolution_fund_required_amount: u64, @@ -8,3 +11,35 @@ pub struct VoteResolutionFundFees { /// This is the amount that a single vote will cost pub contested_document_single_vote_cost: u64, } + +impl PartialEq for VoteResolutionFundFees { + fn eq(&self, other: &Self) -> bool { + self.contested_document_vote_resolution_fund_required_amount == other.contested_document_vote_resolution_fund_required_amount + && self.contested_document_vote_resolution_unlock_fund_required_amount == other.contested_document_vote_resolution_unlock_fund_required_amount + && self.contested_document_single_vote_cost == other.contested_document_single_vote_cost + } +} + +#[cfg(test)] +mod tests { + use super::VoteResolutionFundFees; + + #[test] + // If this test failed, then a new field was added in VoteResolutionFundFees. And the corresponding eq needs to be updated as well + fn test_fee_storage_version_equality() { + let version1 = VoteResolutionFundFees { + contested_document_vote_resolution_fund_required_amount: 1, + contested_document_vote_resolution_unlock_fund_required_amount: 2, + contested_document_single_vote_cost: 3, + }; + + let version2 = VoteResolutionFundFees { + contested_document_vote_resolution_fund_required_amount: 1, + contested_document_vote_resolution_unlock_fund_required_amount: 2, + contested_document_single_vote_cost: 3, + }; + + // This assertion will check if all fields are considered in the equality comparison + assert_eq!(version1, version2, "VoteResolutionFundFees equality test failed. If a field was added or removed, update the Eq implementation."); + } +} From 91f8952d5481912b94b4cf9fdda97e65d2bff7a1 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Fri, 12 Jul 2024 15:47:56 +0300 Subject: [PATCH 44/47] suggestions --- packages/rs-dpp/src/fee/default_costs/mod.rs | 6 ++++-- packages/rs-dpp/src/fee/fee_result/refunds.rs | 3 +-- packages/rs-dpp/src/lib.rs | 4 ---- .../process_block_fees/mod.rs | 2 +- .../process_block_fees/v0/mod.rs | 2 +- .../execute_event/mod.rs | 2 +- .../execute_event/v0/mod.rs | 2 +- .../process_raw_state_transitions/v0/mod.rs | 3 +-- .../validate_fees_of_event/mod.rs | 3 ++- .../validate_fees_of_event/v0/mod.rs | 3 ++- .../src/platform_types/platform_state/mod.rs | 2 +- .../src/platform_types/platform_state/v0/mod.rs | 2 +- .../drive_methods/apply_drive_operations/mod.rs | 3 +-- .../apply_drive_operations/v0/mod.rs | 2 +- .../contract/update/update_contract/mod.rs | 2 +- .../contract/update/update_contract/v0/mod.rs | 2 +- .../epochs/get_epochs_infos/v0/mod.rs | 2 +- .../get_epochs_protocol_versions/v0/mod.rs | 2 +- .../epochs/prove_epochs_infos/v0/mod.rs | 2 +- .../delete/delete_document_for_contract/mod.rs | 2 +- .../delete_document_for_contract/v0/mod.rs | 2 +- .../delete_document_for_contract_id/mod.rs | 3 +-- .../delete_document_for_contract_id/v0/mod.rs | 3 +-- .../rs-drive/src/drive/document/delete/mod.rs | 3 +-- .../insert/add_document_for_contract/mod.rs | 2 +- .../insert/add_document_for_contract/v0/mod.rs | 2 +- .../rs-drive/src/drive/document/insert/mod.rs | 5 +---- .../rs-drive/src/drive/document/update/mod.rs | 3 +-- .../update/update_document_for_contract/mod.rs | 2 +- .../update_document_for_contract/v0/mod.rs | 2 +- .../update_document_for_contract_id/mod.rs | 2 +- .../update_document_for_contract_id/v0/mod.rs | 2 +- .../mod.rs | 2 +- .../v0/mod.rs | 2 +- .../rs-drive/src/drive/fee/calculate_fee/mod.rs | 2 +- .../src/drive/fee/calculate_fee/v0/mod.rs | 2 +- .../src/drive/identity/key/fetch/mod.rs | 1 - .../methods/remove_from_identity_balance/mod.rs | 2 +- .../remove_from_identity_balance/v0/mod.rs | 2 +- .../methods/update_identity_revision/mod.rs | 3 ++- .../methods/update_identity_revision/v0/mod.rs | 3 ++- packages/rs-drive/src/fee/op.rs | 2 +- packages/rs-drive/tests/query_tests.rs | 3 +-- packages/rs-drive/tests/query_tests_history.rs | 2 +- packages/rs-platform-version/Cargo.toml | 2 +- .../src/version/fee/data_contract/mod.rs | 17 +---------------- .../src/version/fee/hashing/mod.rs | 11 +---------- .../rs-platform-version/src/version/fee/mod.rs | 13 +------------ .../src/version/fee/processing/mod.rs | 17 +---------------- .../src/version/fee/signature/mod.rs | 12 +----------- .../fee/state_transition_min_fees/mod.rs | 13 +------------ .../src/version/fee/storage/mod.rs | 12 +----------- .../fee/vote_resolution_fund_fees/mod.rs | 10 +--------- 53 files changed, 58 insertions(+), 157 deletions(-) diff --git a/packages/rs-dpp/src/fee/default_costs/mod.rs b/packages/rs-dpp/src/fee/default_costs/mod.rs index 07b423467a..c6c2ecc651 100644 --- a/packages/rs-dpp/src/fee/default_costs/mod.rs +++ b/packages/rs-dpp/src/fee/default_costs/mod.rs @@ -32,14 +32,16 @@ //! Fee costs for Known Platform operations //! -use crate::block::epoch::Epoch; +use std::collections::BTreeMap; +use crate::block::epoch::{Epoch, EpochIndex}; use crate::fee::Credits; -use crate::prelude::CachedEpochIndexFeeVersions; use platform_version::version::fee::FeeVersion; use platform_version::version::PlatformVersion; pub mod constants; +pub type CachedEpochIndexFeeVersions = BTreeMap; + /// A Known Cost Item is an item that changes costs depending on the Epoch #[derive(Eq, PartialEq, Copy, Clone, Hash)] pub enum KnownCostItem { diff --git a/packages/rs-dpp/src/fee/fee_result/refunds.rs b/packages/rs-dpp/src/fee/fee_result/refunds.rs index 20d09f324d..750bd368c3 100644 --- a/packages/rs-dpp/src/fee/fee_result/refunds.rs +++ b/packages/rs-dpp/src/fee/fee_result/refunds.rs @@ -4,7 +4,7 @@ //! use crate::block::epoch::{Epoch, EpochIndex}; -use crate::fee::default_costs::EpochCosts; +use crate::fee::default_costs::{CachedEpochIndexFeeVersions, EpochCosts}; use crate::fee::default_costs::KnownCostItem::StorageDiskUsageCreditPerByte; use crate::fee::epoch::distribution::calculate_storage_fee_refund_amount_and_leftovers; use crate::fee::epoch::{BytesPerEpoch, CreditsPerEpoch}; @@ -12,7 +12,6 @@ use crate::fee::Credits; use crate::ProtocolError; use bincode::{Decode, Encode}; -use crate::prelude::CachedEpochIndexFeeVersions; use platform_value::Identifier; use serde::{Deserialize, Serialize}; use std::collections::btree_map::Iter; diff --git a/packages/rs-dpp/src/lib.rs b/packages/rs-dpp/src/lib.rs index 91f9ef6199..58ff59ff40 100644 --- a/packages/rs-dpp/src/lib.rs +++ b/packages/rs-dpp/src/lib.rs @@ -68,8 +68,6 @@ pub mod prelude { pub use crate::identity::IdentityPublicKey; #[cfg(feature = "validation")] pub use crate::validation::ConsensusValidationResult; - use platform_version::version::fee::FeeVersion; - use std::collections::BTreeMap; pub type BlockHeight = u64; @@ -83,8 +81,6 @@ pub mod prelude { /// UserFeeIncrease is the additional percentage of the processing fee. /// A 1 here means we pay 1% more in processing fees. A 100 means we pay 100% more. pub type UserFeeIncrease = u16; - - pub type CachedEpochIndexFeeVersions = BTreeMap; } pub use bincode; diff --git a/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/mod.rs index 8c1318da2c..ac29ae5cdf 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/mod.rs @@ -1,6 +1,6 @@ mod v0; -use dpp::prelude::CachedEpochIndexFeeVersions; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use drive::grovedb::Transaction; diff --git a/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/v0/mod.rs index 986460807e..01581e4e25 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/block_fee_processing/process_block_fees/v0/mod.rs @@ -36,7 +36,7 @@ use std::option::Option::None; use dpp::block::epoch::Epoch; -use dpp::prelude::CachedEpochIndexFeeVersions; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use drive::drive::batch::DriveOperation; use drive::drive::Drive; diff --git a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/mod.rs index 539e1882a7..e2aa2dab96 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/mod.rs @@ -9,7 +9,7 @@ use crate::platform_types::platform::Platform; use crate::rpc::core::CoreRPCLike; use dpp::block::block_info::BlockInfo; use dpp::consensus::ConsensusError; -use dpp::prelude::CachedEpochIndexFeeVersions; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use drive::grovedb::Transaction; diff --git a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/v0/mod.rs index 39560de69c..26afe3f245 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/execute_event/v0/mod.rs @@ -11,8 +11,8 @@ use crate::platform_types::platform::Platform; use crate::rpc::core::CoreRPCLike; use dpp::block::block_info::BlockInfo; use dpp::consensus::ConsensusError; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use dpp::fee::fee_result::FeeResult; -use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use drive::drive::identity::update::apply_balance_change_outcome::ApplyBalanceChangeOutcomeV0Methods; use drive::grovedb::Transaction; diff --git a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/process_raw_state_transitions/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/process_raw_state_transitions/v0/mod.rs index b12fc6a4c3..6ebd3054ed 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/process_raw_state_transitions/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/process_raw_state_transitions/v0/mod.rs @@ -14,11 +14,10 @@ use crate::execution::types::state_transition_container::v0::{ use crate::execution::validation::state_transition::processor::process_state_transition; use crate::metrics::state_transition_execution_histogram; use crate::platform_types::event_execution_result::EventExecutionResult; -use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::util::hash::hash_single; use dpp::validation::ConsensusValidationResult; use std::time::Instant; - +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use crate::platform_types::platform_state::v0::PlatformStateV0Methods; use crate::platform_types::state_transitions_processing_result::{ StateTransitionExecutionResult, StateTransitionsProcessingResult, diff --git a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/mod.rs index fcac3af275..b3dff47371 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/mod.rs @@ -7,8 +7,9 @@ use crate::platform_types::platform::Platform; use crate::rpc::core::CoreRPCLike; use dpp::block::block_info::BlockInfo; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use dpp::fee::fee_result::FeeResult; -use dpp::prelude::{CachedEpochIndexFeeVersions, ConsensusValidationResult}; +use dpp::prelude::ConsensusValidationResult; use dpp::version::PlatformVersion; use drive::grovedb::TransactionArg; diff --git a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/v0/mod.rs index 3cfb5e17a1..04e8f0f503 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/validate_fees_of_event/v0/mod.rs @@ -7,9 +7,10 @@ use crate::rpc::core::CoreRPCLike; use dpp::block::block_info::BlockInfo; use dpp::consensus::state::identity::IdentityInsufficientBalanceError; use dpp::consensus::state::state_error::StateError; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use dpp::fee::fee_result::FeeResult; -use dpp::prelude::{CachedEpochIndexFeeVersions, ConsensusValidationResult}; +use dpp::prelude::ConsensusValidationResult; use dpp::version::PlatformVersion; use drive::grovedb::TransactionArg; diff --git a/packages/rs-drive-abci/src/platform_types/platform_state/mod.rs b/packages/rs-drive-abci/src/platform_types/platform_state/mod.rs index aca71d30d9..ec5d8c197e 100644 --- a/packages/rs-drive-abci/src/platform_types/platform_state/mod.rs +++ b/packages/rs-drive-abci/src/platform_types/platform_state/mod.rs @@ -24,9 +24,9 @@ use crate::config::PlatformConfig; use crate::error::execution::ExecutionError; use crate::platform_types::signature_verification_quorum_set::SignatureVerificationQuorumSet; use dpp::block::block_info::BlockInfo; -use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::util::hash::hash_double; use std::collections::BTreeMap; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; /// Platform state #[derive(Clone, Debug, From)] diff --git a/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs b/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs index 57deee8770..51af1c4d57 100644 --- a/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs +++ b/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs @@ -23,10 +23,10 @@ use crate::config::PlatformConfig; use crate::platform_types::signature_verification_quorum_set::{ SignatureVerificationQuorumSet, SignatureVerificationQuorumSetForSaving, }; -use dpp::prelude::CachedEpochIndexFeeVersions; use itertools::Itertools; use std::collections::BTreeMap; use std::fmt::{Debug, Formatter}; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; /// Platform state #[derive(Clone)] diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/mod.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/mod.rs index c20a6cec8e..8c9c7cea30 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/mod.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/mod.rs @@ -8,9 +8,8 @@ use crate::error::{drive::DriveError, Error}; use dpp::block::block_info::BlockInfo; use grovedb::TransactionArg; - +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use dpp::fee::fee_result::FeeResult; -use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs index 9d9d5b191f..9d2b2977cf 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs @@ -16,8 +16,8 @@ use grovedb::batch::KeyInfoPath; use crate::drive::batch::drive_op_batch::finalize_task::{ DriveOperationFinalizationTasks, DriveOperationFinalizeTask, }; -use dpp::prelude::CachedEpochIndexFeeVersions; use std::collections::HashMap; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Applies a list of high level DriveOperations to the drive, and calculates the fee for them. diff --git a/packages/rs-drive/src/drive/contract/update/update_contract/mod.rs b/packages/rs-drive/src/drive/contract/update/update_contract/mod.rs index d3cfd7e949..135fa3a6fb 100644 --- a/packages/rs-drive/src/drive/contract/update/update_contract/mod.rs +++ b/packages/rs-drive/src/drive/contract/update/update_contract/mod.rs @@ -8,11 +8,11 @@ use dpp::block::block_info::BlockInfo; use dpp::data_contract::DataContract; use dpp::fee::fee_result::FeeResult; -use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{Element, EstimatedLayerInformation, TransactionArg}; use std::collections::HashMap; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Updates a data contract. diff --git a/packages/rs-drive/src/drive/contract/update/update_contract/v0/mod.rs b/packages/rs-drive/src/drive/contract/update/update_contract/v0/mod.rs index 3730afa748..9a9d780e44 100644 --- a/packages/rs-drive/src/drive/contract/update/update_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/contract/update/update_contract/v0/mod.rs @@ -16,11 +16,11 @@ use dpp::fee::fee_result::FeeResult; use dpp::data_contract::document_type::methods::DocumentTypeV0Methods; use dpp::serialization::PlatformSerializableWithPlatformVersion; -use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{Element, EstimatedLayerInformation, TransactionArg}; use std::collections::{HashMap, HashSet}; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Updates a data contract. diff --git a/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_infos/v0/mod.rs b/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_infos/v0/mod.rs index ee67b16a43..d9d4eb4ef5 100644 --- a/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_infos/v0/mod.rs +++ b/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_infos/v0/mod.rs @@ -28,7 +28,7 @@ impl Drive { transaction: TransactionArg, platform_version: &PlatformVersion, ) -> Result, Error> { - // TODO: We should avoid magic numbers. For now we are good since count refers to the number of epochs to fetch. With 40 epochs/year, this value is way safe atm. + // TODO: We should avoid magic numbers. For now we are good since count refers to the number of epochs to fetch and 16383 is large enough. if count > 16383 { return Err(Error::Query(QuerySyntaxError::InvalidLimit(format!( "get_epochs_infos_v0 count too high {}", diff --git a/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs b/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs index 56b32f7518..420924fe8d 100644 --- a/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs +++ b/packages/rs-drive/src/drive/credit_pools/epochs/get_epochs_protocol_versions/v0/mod.rs @@ -24,7 +24,7 @@ impl Drive { platform_version: &PlatformVersion, ) -> Result, Error> { if let Some(count) = count { - // TODO: We should avoid magic numbers. For now we are good since count refers to the number of epochs to fetch. With 40 epochs/year, this value is way safe atm. + // TODO: We should avoid magic numbers. For now we are good since count refers to the number of epochs to fetch and 16383 is large enough. if count > 16383 { return Err(Error::Query(QuerySyntaxError::InvalidLimit(format!( "get_epochs_protocol_versions_v0 count too high {}", diff --git a/packages/rs-drive/src/drive/credit_pools/epochs/prove_epochs_infos/v0/mod.rs b/packages/rs-drive/src/drive/credit_pools/epochs/prove_epochs_infos/v0/mod.rs index 08928672f1..9fa275c9ee 100644 --- a/packages/rs-drive/src/drive/credit_pools/epochs/prove_epochs_infos/v0/mod.rs +++ b/packages/rs-drive/src/drive/credit_pools/epochs/prove_epochs_infos/v0/mod.rs @@ -25,7 +25,7 @@ impl Drive { transaction: TransactionArg, platform_version: &PlatformVersion, ) -> Result, Error> { - // TODO: We should avoid magic numbers. For now we are good since count refers to the number of epochs to fetch. With 40 epochs/year, this value is way safe atm. + // TODO: We should avoid magic numbers. For now we are good since count refers to the number of epochs to fetch and 16383 is large enough. if count > 16383 { return Err(Error::Query(QuerySyntaxError::InvalidLimit(format!( "get_epochs_infos_v0 count too high {}", diff --git a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/mod.rs b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/mod.rs index edcf3fd6e4..7ca62bbd4d 100644 --- a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/mod.rs @@ -11,8 +11,8 @@ use dpp::fee::fee_result::FeeResult; use dpp::version::PlatformVersion; use dpp::identifier::Identifier; -use dpp::prelude::CachedEpochIndexFeeVersions; use grovedb::TransactionArg; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Deletes a document and returns the associated fee. diff --git a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/v0/mod.rs b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/v0/mod.rs index 40fd87af58..85dc0d4c7b 100644 --- a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/v0/mod.rs @@ -6,11 +6,11 @@ use dpp::data_contract::DataContract; use dpp::fee::fee_result::FeeResult; use dpp::identifier::Identifier; -use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{EstimatedLayerInformation, TransactionArg}; use std::collections::HashMap; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Deletes a document and returns the associated fee. diff --git a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/mod.rs b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/mod.rs index 52adcde583..42093efd90 100644 --- a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/mod.rs @@ -3,7 +3,7 @@ mod v0; use grovedb::TransactionArg; use dpp::block::block_info::BlockInfo; - +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use crate::drive::Drive; use crate::error::drive::DriveError; @@ -12,7 +12,6 @@ use crate::error::Error; use dpp::fee::fee_result::FeeResult; use dpp::identifier::Identifier; -use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; impl Drive { diff --git a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/v0/mod.rs b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/v0/mod.rs index 6197f1aef3..0dc596f3bc 100644 --- a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/v0/mod.rs @@ -5,7 +5,7 @@ use grovedb::{EstimatedLayerInformation, TransactionArg}; use std::collections::HashMap; use dpp::block::block_info::BlockInfo; - +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use crate::drive::Drive; use crate::error::document::DocumentError; @@ -14,7 +14,6 @@ use crate::fee::op::LowLevelDriveOperation; use dpp::fee::fee_result::FeeResult; use dpp::identifier::Identifier; -use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; impl Drive { diff --git a/packages/rs-drive/src/drive/document/delete/mod.rs b/packages/rs-drive/src/drive/document/delete/mod.rs index 5a4a70c3be..10d5326d35 100644 --- a/packages/rs-drive/src/drive/document/delete/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/mod.rs @@ -71,9 +71,8 @@ mod tests { use dpp::data_contract::accessors::v0::DataContractV0Getters; use dpp::document::serialization_traits::DocumentPlatformConversionMethodsV0; use dpp::document::Document; - use dpp::fee::default_costs::EpochCosts; + use dpp::fee::default_costs::{CachedEpochIndexFeeVersions, EpochCosts}; use dpp::fee::default_costs::KnownCostItem::StorageDiskUsageCreditPerByte; - use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::tests::json_document::{json_document_to_contract, json_document_to_document}; use crate::tests::helpers::setup::setup_drive_with_initial_state_structure; diff --git a/packages/rs-drive/src/drive/document/insert/add_document_for_contract/mod.rs b/packages/rs-drive/src/drive/document/insert/add_document_for_contract/mod.rs index c5fb03d9d7..920c97615d 100644 --- a/packages/rs-drive/src/drive/document/insert/add_document_for_contract/mod.rs +++ b/packages/rs-drive/src/drive/document/insert/add_document_for_contract/mod.rs @@ -9,9 +9,9 @@ use crate::error::Error; use dpp::block::block_info::BlockInfo; use dpp::fee::fee_result::FeeResult; -use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::TransactionArg; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Adds a document to a contract. diff --git a/packages/rs-drive/src/drive/document/insert/add_document_for_contract/v0/mod.rs b/packages/rs-drive/src/drive/document/insert/add_document_for_contract/v0/mod.rs index 863f582200..a3659aacfb 100644 --- a/packages/rs-drive/src/drive/document/insert/add_document_for_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/insert/add_document_for_contract/v0/mod.rs @@ -6,9 +6,9 @@ use crate::fee::op::LowLevelDriveOperation; use dpp::block::block_info::BlockInfo; use dpp::fee::fee_result::FeeResult; -use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::TransactionArg; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Adds a document to a contract. diff --git a/packages/rs-drive/src/drive/document/insert/mod.rs b/packages/rs-drive/src/drive/document/insert/mod.rs index 3833d10cc3..94da680939 100644 --- a/packages/rs-drive/src/drive/document/insert/mod.rs +++ b/packages/rs-drive/src/drive/document/insert/mod.rs @@ -91,12 +91,9 @@ mod tests { use crate::drive::object_size_info::DocumentInfo::DocumentRefInfo; use crate::tests::helpers::setup::setup_drive_with_initial_state_structure; - use dpp::fee::default_costs::EpochCosts; + use dpp::fee::default_costs::{CachedEpochIndexFeeVersions, EpochCosts}; use dpp::fee::default_costs::KnownCostItem::StorageDiskUsageCreditPerByte; use dpp::fee::fee_result::FeeResult; - use dpp::prelude::CachedEpochIndexFeeVersions; - use dpp::platform_value::{platform_value, BinaryData, Identifier}; - use dpp::tests::fixtures::get_dpns_data_contract_fixture; use dpp::tests::json_document::json_document_to_document; use dpp::version::PlatformVersion; diff --git a/packages/rs-drive/src/drive/document/update/mod.rs b/packages/rs-drive/src/drive/document/update/mod.rs index c24d684c36..e9235abe60 100644 --- a/packages/rs-drive/src/drive/document/update/mod.rs +++ b/packages/rs-drive/src/drive/document/update/mod.rs @@ -89,11 +89,10 @@ mod tests { }; use dpp::document::specialized_document_factory::SpecializedDocumentFactory; use dpp::document::{Document, DocumentV0Getters, DocumentV0Setters}; - use dpp::fee::default_costs::EpochCosts; + use dpp::fee::default_costs::{CachedEpochIndexFeeVersions, EpochCosts}; use dpp::fee::default_costs::KnownCostItem::StorageDiskUsageCreditPerByte; use dpp::fee::fee_result::FeeResult; use dpp::platform_value; - use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::tests::json_document::json_document_to_document; use once_cell::sync::Lazy; use platform_version::version::PlatformVersion; diff --git a/packages/rs-drive/src/drive/document/update/update_document_for_contract/mod.rs b/packages/rs-drive/src/drive/document/update/update_document_for_contract/mod.rs index 85cfb58114..f0d16e627a 100644 --- a/packages/rs-drive/src/drive/document/update/update_document_for_contract/mod.rs +++ b/packages/rs-drive/src/drive/document/update/update_document_for_contract/mod.rs @@ -14,9 +14,9 @@ use dpp::fee::fee_result::FeeResult; use dpp::version::PlatformVersion; -use dpp::prelude::CachedEpochIndexFeeVersions; use grovedb::TransactionArg; use std::borrow::Cow; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Updates a document and returns the associated fee. diff --git a/packages/rs-drive/src/drive/document/update/update_document_for_contract/v0/mod.rs b/packages/rs-drive/src/drive/document/update/update_document_for_contract/v0/mod.rs index 7fde64cd74..ec3cc6c052 100644 --- a/packages/rs-drive/src/drive/document/update/update_document_for_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/update/update_document_for_contract/v0/mod.rs @@ -9,12 +9,12 @@ use dpp::data_contract::document_type::DocumentTypeRef; use dpp::data_contract::DataContract; use dpp::document::Document; use dpp::fee::fee_result::FeeResult; -use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{EstimatedLayerInformation, TransactionArg}; use std::borrow::Cow; use std::collections::HashMap; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Updates a document and returns the associated fee. diff --git a/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/mod.rs b/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/mod.rs index 900f2ad037..e9b3603e3a 100644 --- a/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/mod.rs +++ b/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/mod.rs @@ -12,9 +12,9 @@ use dpp::fee::fee_result::FeeResult; use dpp::version::PlatformVersion; -use dpp::prelude::CachedEpochIndexFeeVersions; use grovedb::TransactionArg; use std::borrow::Cow; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Updates a serialized document given a contract id and returns the associated fee. diff --git a/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/v0/mod.rs b/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/v0/mod.rs index 453700d863..1c23467cf0 100644 --- a/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/v0/mod.rs @@ -11,12 +11,12 @@ use dpp::data_contract::accessors::v0::DataContractV0Getters; use dpp::document::serialization_traits::DocumentPlatformConversionMethodsV0; use dpp::document::Document; use dpp::fee::fee_result::FeeResult; -use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{EstimatedLayerInformation, TransactionArg}; use std::borrow::Cow; use std::collections::HashMap; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Updates a serialized document given a contract id and returns the associated fee. diff --git a/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/mod.rs b/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/mod.rs index d3c77b04b3..85366ddd45 100644 --- a/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/mod.rs +++ b/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/mod.rs @@ -13,9 +13,9 @@ use dpp::fee::fee_result::FeeResult; use dpp::version::PlatformVersion; -use dpp::prelude::CachedEpochIndexFeeVersions; use grovedb::TransactionArg; use std::borrow::Cow; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Updates a document and returns the associated fee. diff --git a/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/v0/mod.rs b/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/v0/mod.rs index 55acefd99a..83167354e8 100644 --- a/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/v0/mod.rs @@ -10,12 +10,12 @@ use dpp::data_contract::DataContract; use dpp::document::Document; use dpp::fee::fee_result::FeeResult; -use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{EstimatedLayerInformation, TransactionArg}; use std::borrow::Cow; use std::collections::HashMap; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Updates a document and returns the associated fee. diff --git a/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs b/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs index e69fed52e3..2981970c6d 100644 --- a/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs +++ b/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs @@ -4,9 +4,9 @@ use crate::error::Error; use crate::fee::op::{BaseOp, LowLevelDriveOperation}; use dpp::block::epoch::Epoch; use dpp::fee::fee_result::FeeResult; -use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use enum_map::EnumMap; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; mod v0; diff --git a/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs b/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs index 07a0507a06..f36970380c 100644 --- a/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs +++ b/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs @@ -5,8 +5,8 @@ use crate::fee::op::{BaseOp, LowLevelDriveOperation}; use dpp::block::epoch::Epoch; use dpp::fee::fee_result::FeeResult; -use dpp::prelude::CachedEpochIndexFeeVersions; use enum_map::EnumMap; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use platform_version::version::fee::FeeVersion; impl Drive { diff --git a/packages/rs-drive/src/drive/identity/key/fetch/mod.rs b/packages/rs-drive/src/drive/identity/key/fetch/mod.rs index 23207b3661..b734ed0efa 100644 --- a/packages/rs-drive/src/drive/identity/key/fetch/mod.rs +++ b/packages/rs-drive/src/drive/identity/key/fetch/mod.rs @@ -650,7 +650,6 @@ impl IdentityKeysRequest { #[cfg(feature = "server")] /// Gets the processing cost of an identity keys request pub fn processing_cost(&self, platform_version: &PlatformVersion) -> Result { - // Good match &self.request_type { AllKeys => Err(Error::Fee(FeeError::OperationNotAllowed( "You can not get costs for requesting all keys", diff --git a/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/mod.rs index 7ec811be95..bd642a7e00 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/mod.rs @@ -8,11 +8,11 @@ use dpp::block::block_info::BlockInfo; use dpp::fee::fee_result::FeeResult; use dpp::fee::Credits; -use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{EstimatedLayerInformation, TransactionArg}; use std::collections::HashMap; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// The operations for removing a certain amount of credits from an identity's balance. This function is version controlled. diff --git a/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/v0/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/v0/mod.rs index 291bb6d397..76cf34f9ca 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/v0/mod.rs @@ -8,11 +8,11 @@ use dpp::block::block_info::BlockInfo; use dpp::fee::fee_result::FeeResult; use dpp::fee::Credits; -use dpp::prelude::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{EstimatedLayerInformation, TransactionArg}; use std::collections::HashMap; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Balances are stored in the balance tree under the identity's id diff --git a/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/mod.rs index d264b88940..86bd6d16c0 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/mod.rs @@ -7,13 +7,14 @@ use crate::fee::op::LowLevelDriveOperation; use dpp::block::block_info::BlockInfo; use dpp::fee::fee_result::FeeResult; -use dpp::prelude::{CachedEpochIndexFeeVersions, Revision}; +use dpp::prelude::Revision; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{EstimatedLayerInformation, TransactionArg}; use std::collections::HashMap; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Updates the revision for a specific identity. This function is version controlled. diff --git a/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/v0/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/v0/mod.rs index b06141634a..ab3e5552d6 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/v0/mod.rs @@ -8,12 +8,13 @@ use grovedb::batch::KeyInfoPath; use dpp::fee::fee_result::FeeResult; -use dpp::prelude::{CachedEpochIndexFeeVersions, Revision}; +use dpp::prelude::Revision; use dpp::version::PlatformVersion; use grovedb::{EstimatedLayerInformation, TransactionArg}; use std::collections::HashMap; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { //todo: this should probably not exist diff --git a/packages/rs-drive/src/fee/op.rs b/packages/rs-drive/src/fee/op.rs index 0896cb4f0d..abefc105c6 100644 --- a/packages/rs-drive/src/fee/op.rs +++ b/packages/rs-drive/src/fee/op.rs @@ -25,7 +25,7 @@ use dpp::block::epoch::Epoch; use dpp::fee::fee_result::refunds::FeeRefunds; use dpp::fee::fee_result::FeeResult; use dpp::fee::Credits; -use dpp::prelude::CachedEpochIndexFeeVersions; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use platform_version::version::fee::FeeVersion; /// Base ops diff --git a/packages/rs-drive/tests/query_tests.rs b/packages/rs-drive/tests/query_tests.rs index ba43a47379..88b0dc183d 100644 --- a/packages/rs-drive/tests/query_tests.rs +++ b/packages/rs-drive/tests/query_tests.rs @@ -69,11 +69,10 @@ use dpp::document::serialization_traits::{ use dpp::document::{DocumentV0Getters, DocumentV0Setters}; use dpp::identity::TimestampMillis; use dpp::platform_value; -use dpp::prelude::CachedEpochIndexFeeVersions; #[cfg(feature = "server")] use dpp::prelude::DataContract; use once_cell::sync::Lazy; - +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use dpp::tests::json_document::json_document_to_contract; #[cfg(feature = "server")] use dpp::util::cbor_serializer; diff --git a/packages/rs-drive/tests/query_tests_history.rs b/packages/rs-drive/tests/query_tests_history.rs index 6efdc20f04..3747237028 100644 --- a/packages/rs-drive/tests/query_tests_history.rs +++ b/packages/rs-drive/tests/query_tests_history.rs @@ -83,7 +83,7 @@ use dpp::document::serialization_traits::{ DocumentCborMethodsV0, DocumentPlatformConversionMethodsV0, }; use dpp::document::DocumentV0Getters; -use dpp::prelude::CachedEpochIndexFeeVersions; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use dpp::tests::json_document::json_document_to_contract; use dpp::version::PlatformVersion; use drive::drive::batch::grovedb_op_batch::GroveDbOpBatchV0Methods; diff --git a/packages/rs-platform-version/Cargo.toml b/packages/rs-platform-version/Cargo.toml index 5470c990a6..9b8c66d48b 100644 --- a/packages/rs-platform-version/Cargo.toml +++ b/packages/rs-platform-version/Cargo.toml @@ -9,7 +9,7 @@ license = "MIT" [dependencies] thiserror = { version = "1.0.59" } -bincode = { version = "2.0.0-rc.3", features = ["serde"] } +bincode = { version = "2.0.0-rc.3"} versioned-feature-core = { git = "https://github.com/dashpay/versioned-feature-core", version = "1.0.0" } grovedb-version = { git = "https://github.com/dashpay/grovedb", rev = "8ada131a1079c763e83d2b11ab1f6abbd5d82e06"} diff --git a/packages/rs-platform-version/src/version/fee/data_contract/mod.rs b/packages/rs-platform-version/src/version/fee/data_contract/mod.rs index 548deb929f..88894894f5 100644 --- a/packages/rs-platform-version/src/version/fee/data_contract/mod.rs +++ b/packages/rs-platform-version/src/version/fee/data_contract/mod.rs @@ -2,7 +2,7 @@ use bincode::{Decode, Encode}; pub mod v1; -#[derive(Clone, Debug, Encode, Decode, Default)] +#[derive(Clone, Debug, Encode, Decode, Default, PartialEq, Eq)] pub struct FeeDataContractValidationVersion { pub document_type_base_fee: u64, pub document_type_size_fee: u64, @@ -13,21 +13,6 @@ pub struct FeeDataContractValidationVersion { pub document_type_unique_index_per_property_fee: u64, } -impl PartialEq for FeeDataContractValidationVersion { - fn eq(&self, other: &Self) -> bool { - self.document_type_base_fee == other.document_type_base_fee - && self.document_type_size_fee == other.document_type_size_fee - && self.document_type_per_property_fee == other.document_type_per_property_fee - && self.document_type_base_non_unique_index_fee - == other.document_type_base_non_unique_index_fee - && self.document_type_non_unique_index_per_property_fee - == other.document_type_non_unique_index_per_property_fee - && self.document_type_base_unique_index_fee == other.document_type_base_unique_index_fee - && self.document_type_unique_index_per_property_fee - == other.document_type_unique_index_per_property_fee - } -} - #[cfg(test)] mod tests { use super::FeeDataContractValidationVersion; diff --git a/packages/rs-platform-version/src/version/fee/hashing/mod.rs b/packages/rs-platform-version/src/version/fee/hashing/mod.rs index a5ec109ef8..2d40315601 100644 --- a/packages/rs-platform-version/src/version/fee/hashing/mod.rs +++ b/packages/rs-platform-version/src/version/fee/hashing/mod.rs @@ -2,7 +2,7 @@ use bincode::{Decode, Encode}; pub mod v1; -#[derive(Clone, Debug, Encode, Decode, Default)] +#[derive(Clone, Debug, Encode, Decode, Default, PartialEq, Eq)] pub struct FeeHashingVersion { pub blake3_base: u64, pub blake3_per_block: u64, @@ -10,15 +10,6 @@ pub struct FeeHashingVersion { pub sha256_ripe_md160_base: u64, pub single_sha256_base: u64, } -impl PartialEq for FeeHashingVersion { - fn eq(&self, other: &Self) -> bool { - self.blake3_base == other.blake3_base - && self.blake3_per_block == other.blake3_per_block - && self.sha256_per_block == other.sha256_per_block - && self.sha256_ripe_md160_base == other.sha256_ripe_md160_base - && self.single_sha256_base == other.single_sha256_base - } -} #[cfg(test)] mod tests { diff --git a/packages/rs-platform-version/src/version/fee/mod.rs b/packages/rs-platform-version/src/version/fee/mod.rs index a86fb2fe95..509699b4a7 100644 --- a/packages/rs-platform-version/src/version/fee/mod.rs +++ b/packages/rs-platform-version/src/version/fee/mod.rs @@ -16,7 +16,7 @@ pub mod storage; pub mod v1; pub mod vote_resolution_fund_fees; -#[derive(Clone, Debug, Encode, Decode, Default)] +#[derive(Clone, Debug, Encode, Decode, Default, PartialEq, Eq)] pub struct FeeVersion { pub storage: FeeStorageVersion, pub signature: FeeSignatureVersion, @@ -27,17 +27,6 @@ pub struct FeeVersion { pub vote_resolution_fund_fees: VoteResolutionFundFees, } -impl PartialEq for FeeVersion { - fn eq(&self, other: &Self) -> bool { - self.storage == other.storage - && self.signature == other.signature - && self.hashing == other.hashing - && self.processing == other.processing - && self.data_contract == other.data_contract - && self.state_transition_min_fees == other.state_transition_min_fees - } -} - #[cfg(test)] mod tests { diff --git a/packages/rs-platform-version/src/version/fee/processing/mod.rs b/packages/rs-platform-version/src/version/fee/processing/mod.rs index f08d888ea0..0427cd0916 100644 --- a/packages/rs-platform-version/src/version/fee/processing/mod.rs +++ b/packages/rs-platform-version/src/version/fee/processing/mod.rs @@ -2,7 +2,7 @@ use bincode::{Decode, Encode}; pub mod v1; -#[derive(Clone, Debug, Encode, Decode, Default)] +#[derive(Clone, Debug, Encode, Decode, Default, PartialEq, Eq)] pub struct FeeProcessingVersion { pub fetch_identity_balance_processing_cost: u64, pub fetch_identity_revision_processing_cost: u64, @@ -13,21 +13,6 @@ pub struct FeeProcessingVersion { pub validate_key_structure: u64, } -impl PartialEq for FeeProcessingVersion { - fn eq(&self, other: &Self) -> bool { - self.fetch_identity_balance_processing_cost == other.fetch_identity_balance_processing_cost - && self.fetch_identity_revision_processing_cost - == other.fetch_identity_revision_processing_cost - && self.fetch_identity_balance_and_revision_processing_cost - == other.fetch_identity_balance_and_revision_processing_cost - && self.fetch_identity_cost_per_look_up_key_by_id - == other.fetch_identity_cost_per_look_up_key_by_id - && self.fetch_single_identity_key_processing_cost - == other.fetch_single_identity_key_processing_cost - && self.validate_key_structure == other.validate_key_structure - } -} - #[cfg(test)] mod tests { use super::FeeProcessingVersion; diff --git a/packages/rs-platform-version/src/version/fee/signature/mod.rs b/packages/rs-platform-version/src/version/fee/signature/mod.rs index 06a872dad0..6a667bd574 100644 --- a/packages/rs-platform-version/src/version/fee/signature/mod.rs +++ b/packages/rs-platform-version/src/version/fee/signature/mod.rs @@ -2,7 +2,7 @@ use bincode::{Decode, Encode}; pub mod v1; -#[derive(Clone, Debug, Encode, Decode, Default)] +#[derive(Clone, Debug, Encode, Decode, Default, PartialEq, Eq)] pub struct FeeSignatureVersion { pub verify_signature_ecdsa_secp256k1: u64, pub verify_signature_bls12_381: u64, @@ -11,16 +11,6 @@ pub struct FeeSignatureVersion { pub verify_signature_eddsa25519_hash160: u64, } -impl PartialEq for FeeSignatureVersion { - fn eq(&self, other: &Self) -> bool { - self.verify_signature_ecdsa_secp256k1 == other.verify_signature_ecdsa_secp256k1 - && self.verify_signature_bls12_381 == other.verify_signature_bls12_381 - && self.verify_signature_ecdsa_hash160 == other.verify_signature_ecdsa_hash160 - && self.verify_signature_bip13_script_hash == other.verify_signature_bip13_script_hash - && self.verify_signature_eddsa25519_hash160 == other.verify_signature_eddsa25519_hash160 - } -} - #[cfg(test)] mod tests { use super::FeeSignatureVersion; diff --git a/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs b/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs index ee8a16a2b0..2b099d7143 100644 --- a/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs +++ b/packages/rs-platform-version/src/version/fee/state_transition_min_fees/mod.rs @@ -1,7 +1,7 @@ use bincode::{Decode, Encode}; pub mod v1; -#[derive(Clone, Debug, Encode, Decode, Default)] +#[derive(Clone, Debug, Encode, Decode, Default, PartialEq, Eq)] pub struct StateTransitionMinFees { pub credit_transfer: u64, pub credit_withdrawal: u64, @@ -12,17 +12,6 @@ pub struct StateTransitionMinFees { pub masternode_vote: u64, } -impl PartialEq for StateTransitionMinFees { - fn eq(&self, other: &Self) -> bool { - self.credit_transfer == other.credit_transfer - && self.credit_withdrawal == other.credit_withdrawal - && self.identity_update == other.identity_update - && self.document_batch_sub_transition == other.document_batch_sub_transition - && self.contract_create == other.contract_create - && self.contract_update == other.contract_update - } -} - #[cfg(test)] mod tests { use super::StateTransitionMinFees; diff --git a/packages/rs-platform-version/src/version/fee/storage/mod.rs b/packages/rs-platform-version/src/version/fee/storage/mod.rs index 5ba6a1cc90..f6121321ba 100644 --- a/packages/rs-platform-version/src/version/fee/storage/mod.rs +++ b/packages/rs-platform-version/src/version/fee/storage/mod.rs @@ -2,7 +2,7 @@ use bincode::{Decode, Encode}; pub mod v1; -#[derive(Clone, Debug, Encode, Decode, Default)] +#[derive(Clone, Debug, Encode, Decode, Default, PartialEq, Eq)] pub struct FeeStorageVersion { pub storage_disk_usage_credit_per_byte: u64, pub storage_processing_credit_per_byte: u64, @@ -11,16 +11,6 @@ pub struct FeeStorageVersion { pub storage_seek_cost: u64, } -impl PartialEq for FeeStorageVersion { - fn eq(&self, other: &Self) -> bool { - self.storage_disk_usage_credit_per_byte == other.storage_disk_usage_credit_per_byte - && self.storage_processing_credit_per_byte == other.storage_processing_credit_per_byte - && self.storage_load_credit_per_byte == other.storage_load_credit_per_byte - && self.non_storage_load_credit_per_byte == other.non_storage_load_credit_per_byte - && self.storage_seek_cost == other.storage_seek_cost - } -} - #[cfg(test)] mod tests { use super::FeeStorageVersion; diff --git a/packages/rs-platform-version/src/version/fee/vote_resolution_fund_fees/mod.rs b/packages/rs-platform-version/src/version/fee/vote_resolution_fund_fees/mod.rs index 0aff7208f9..c363855f8d 100644 --- a/packages/rs-platform-version/src/version/fee/vote_resolution_fund_fees/mod.rs +++ b/packages/rs-platform-version/src/version/fee/vote_resolution_fund_fees/mod.rs @@ -2,7 +2,7 @@ use bincode::{Decode, Encode}; use crate::version::fee::storage::FeeStorageVersion; pub mod v1; -#[derive(Clone, Debug, Encode, Decode, Default)] +#[derive(Clone, Debug, Encode, Decode, Default, PartialEq, Eq)] pub struct VoteResolutionFundFees { /// This is the amount that will be deducted from an identity and used to pay for voting pub contested_document_vote_resolution_fund_required_amount: u64, @@ -12,14 +12,6 @@ pub struct VoteResolutionFundFees { pub contested_document_single_vote_cost: u64, } -impl PartialEq for VoteResolutionFundFees { - fn eq(&self, other: &Self) -> bool { - self.contested_document_vote_resolution_fund_required_amount == other.contested_document_vote_resolution_fund_required_amount - && self.contested_document_vote_resolution_unlock_fund_required_amount == other.contested_document_vote_resolution_unlock_fund_required_amount - && self.contested_document_single_vote_cost == other.contested_document_single_vote_cost - } -} - #[cfg(test)] mod tests { use super::VoteResolutionFundFees; From 86394d49fe3e11adf1a71acc72db2458b0433826 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Fri, 12 Jul 2024 16:32:23 +0300 Subject: [PATCH 45/47] more work --- packages/rs-dpp/src/fee/default_costs/mod.rs | 15 ++++++++------- packages/rs-dpp/src/fee/fee_result/refunds.rs | 2 +- .../rs-drive/src/drive/document/delete/mod.rs | 3 +++ .../rs-drive/src/drive/document/insert/mod.rs | 10 +++++++--- .../rs-drive/src/drive/document/update/mod.rs | 11 +++++++++++ 5 files changed, 30 insertions(+), 11 deletions(-) diff --git a/packages/rs-dpp/src/fee/default_costs/mod.rs b/packages/rs-dpp/src/fee/default_costs/mod.rs index c6c2ecc651..6875935e23 100644 --- a/packages/rs-dpp/src/fee/default_costs/mod.rs +++ b/packages/rs-dpp/src/fee/default_costs/mod.rs @@ -78,7 +78,7 @@ pub enum KnownCostItem { impl KnownCostItem { #[inline] - pub fn lookup_cost(&self, fee_version: &FeeVersion) -> Credits { + pub fn lookup_cost(&self, fee_version: &FeeVersion, size: Option) -> Credits { match self { KnownCostItem::StorageDiskUsageCreditPerByte => { fee_version.storage.storage_disk_usage_credit_per_byte @@ -104,12 +104,10 @@ impl KnownCostItem { .fetch_single_identity_key_processing_cost } KnownCostItem::Blake3 => { - //TODO: blake3_base or blake3_per_block? - fee_version.hashing.blake3_base + fee_version.hashing.blake3_base + fee_version.hashing.blake3_per_block * size.unwrap_or(0) as u64 } KnownCostItem::SingleSHA256 => { - //TODO: single_sha256_base or single_sha256_per_block? - fee_version.hashing.single_sha256_base + fee_version.hashing.single_sha256_base + fee_version.hashing.sha256_per_block * size.unwrap_or(0) as u64 } KnownCostItem::VerifySignatureEcdsaSecp256k1 => { fee_version.signature.verify_signature_ecdsa_secp256k1 @@ -133,9 +131,10 @@ impl KnownCostItem { &self, epoch: &T, cached_fee_version: &CachedEpochIndexFeeVersions, + size: Option, ) -> Credits { let version = epoch.active_fee_version(cached_fee_version); - self.lookup_cost(&version) + self.lookup_cost(&version, size) } } @@ -149,6 +148,7 @@ pub trait EpochCosts { &self, cached_fee_version: &CachedEpochIndexFeeVersions, cost_item: KnownCostItem, + size: Option, ) -> Credits; } @@ -173,7 +173,8 @@ impl EpochCosts for Epoch { &self, cached_fee_version: &CachedEpochIndexFeeVersions, cost_item: KnownCostItem, + size: Option, ) -> Credits { - cost_item.lookup_cost_on_epoch(self, cached_fee_version) + cost_item.lookup_cost_on_epoch(self, cached_fee_version, size) } } diff --git a/packages/rs-dpp/src/fee/fee_result/refunds.rs b/packages/rs-dpp/src/fee/fee_result/refunds.rs index 750bd368c3..b4e3ab5048 100644 --- a/packages/rs-dpp/src/fee/fee_result/refunds.rs +++ b/packages/rs-dpp/src/fee/fee_result/refunds.rs @@ -57,7 +57,7 @@ impl FeeRefunds { // TODO We should use multipliers let credits: Credits = (bytes as Credits) - .checked_mul(Epoch::new(current_epoch_index)?.cost_for_known_cost_item(previous_fee_versions, StorageDiskUsageCreditPerByte)) + .checked_mul(Epoch::new(current_epoch_index)?.cost_for_known_cost_item(previous_fee_versions, StorageDiskUsageCreditPerByte, None)) .ok_or(ProtocolError::Overflow("storage written bytes cost overflow"))?; let (amount, _) = calculate_storage_fee_refund_amount_and_leftovers( diff --git a/packages/rs-drive/src/drive/document/delete/mod.rs b/packages/rs-drive/src/drive/document/delete/mod.rs index 10d5326d35..0fc54c52b2 100644 --- a/packages/rs-drive/src/drive/document/delete/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/mod.rs @@ -829,6 +829,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, + None ); // We added 1559 bytes assert_eq!(added_bytes, 1559); @@ -866,6 +867,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, + None ); assert!(added_bytes > refund_equivalent_bytes); @@ -929,6 +931,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, + None ); // We added 1558 bytes assert_eq!(added_bytes, 1559); diff --git a/packages/rs-drive/src/drive/document/insert/mod.rs b/packages/rs-drive/src/drive/document/insert/mod.rs index 94da680939..20bf9edf20 100644 --- a/packages/rs-drive/src/drive/document/insert/mod.rs +++ b/packages/rs-drive/src/drive/document/insert/mod.rs @@ -340,7 +340,8 @@ mod tests { storage_fee: 3058 * Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, - StorageDiskUsageCreditPerByte + StorageDiskUsageCreditPerByte, + None ), processing_fee: 2356200, // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised ..Default::default() @@ -405,7 +406,8 @@ mod tests { storage_fee: 1305 * Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, - StorageDiskUsageCreditPerByte + StorageDiskUsageCreditPerByte, + None ), processing_fee: 1500200, // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised ..Default::default() @@ -473,6 +475,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, + None ); assert_eq!(1305, added_bytes); assert_eq!(144859600, processing_fee); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised @@ -703,7 +706,8 @@ mod tests { storage_fee: 1761 * Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, - StorageDiskUsageCreditPerByte + StorageDiskUsageCreditPerByte, + None ), processing_fee: 2095400, // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised ..Default::default() diff --git a/packages/rs-drive/src/drive/document/update/mod.rs b/packages/rs-drive/src/drive/document/update/mod.rs index e9235abe60..acada22ccc 100644 --- a/packages/rs-drive/src/drive/document/update/mod.rs +++ b/packages/rs-drive/src/drive/document/update/mod.rs @@ -941,6 +941,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, + None ); let expected_added_bytes = if using_history { //Explanation for 1237 @@ -1109,6 +1110,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, + None ); assert!(expected_added_bytes > refund_equivalent_bytes); @@ -1129,6 +1131,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, + None ); assert_eq!(original_bytes, expected_added_bytes); @@ -1150,6 +1153,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, + None ); let expected_added_bytes = if using_history { 313 } else { 1 }; @@ -1222,6 +1226,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, + None ); let expected_added_bytes = if using_history { 1238 } else { 962 }; assert_eq!(original_bytes, expected_added_bytes); @@ -1248,6 +1253,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, + None ); assert!(expected_added_bytes > refund_equivalent_bytes); @@ -1268,6 +1274,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, + None ); assert_eq!(original_bytes, expected_added_bytes); @@ -1289,6 +1296,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, + None ); let removed_credits = update_fees @@ -1308,6 +1316,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, + None, ); assert!(expected_added_bytes > refund_equivalent_bytes); @@ -1421,6 +1430,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, + None, ); let expected_added_bytes = if using_history { //Explanation for 1237 @@ -1581,6 +1591,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, + None, ); let expected_added_bytes = if using_history { 1239 } else { 963 }; From 3a9e940fde098128eca998b44c82139efcd17107 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Fri, 12 Jul 2024 16:33:40 +0300 Subject: [PATCH 46/47] fmt --- packages/rs-dpp/src/fee/default_costs/mod.rs | 8 +++++--- packages/rs-dpp/src/fee/fee_result/refunds.rs | 2 +- packages/rs-dpp/src/lib.rs | 2 +- .../process_raw_state_transitions/v0/mod.rs | 8 ++++---- .../src/platform_types/platform_state/mod.rs | 2 +- .../platform_types/platform_state/v0/mod.rs | 2 +- packages/rs-drive-proof-verifier/src/proof.rs | 12 ++++++------ .../apply_drive_operations/mod.rs | 2 +- .../apply_drive_operations/v0/mod.rs | 2 +- .../contract/update/update_contract/mod.rs | 2 +- .../contract/update/update_contract/v0/mod.rs | 2 +- .../delete/delete_document_for_contract/mod.rs | 2 +- .../delete_document_for_contract/v0/mod.rs | 2 +- .../delete_document_for_contract_id/mod.rs | 2 +- .../delete_document_for_contract_id/v0/mod.rs | 4 ++-- .../rs-drive/src/drive/document/delete/mod.rs | 8 ++++---- .../insert/add_document_for_contract/mod.rs | 2 +- .../insert/add_document_for_contract/v0/mod.rs | 2 +- .../rs-drive/src/drive/document/insert/mod.rs | 4 ++-- .../rs-drive/src/drive/document/update/mod.rs | 18 +++++++++--------- .../update/update_document_for_contract/mod.rs | 2 +- .../update_document_for_contract/v0/mod.rs | 2 +- .../update_document_for_contract_id/mod.rs | 2 +- .../update_document_for_contract_id/v0/mod.rs | 2 +- .../mod.rs | 2 +- .../v0/mod.rs | 2 +- .../src/drive/fee/calculate_fee/mod.rs | 2 +- .../src/drive/fee/calculate_fee/v0/mod.rs | 2 +- .../remove_from_identity_balance/mod.rs | 2 +- .../remove_from_identity_balance/v0/mod.rs | 2 +- .../methods/update_identity_revision/mod.rs | 2 +- .../methods/update_identity_revision/v0/mod.rs | 2 +- packages/rs-drive/src/fee/op.rs | 2 +- packages/rs-drive/tests/query_tests.rs | 4 ++-- .../rs-platform-version/src/version/fee/mod.rs | 10 ++++------ .../fee/vote_resolution_fund_fees/mod.rs | 1 - 36 files changed, 64 insertions(+), 65 deletions(-) diff --git a/packages/rs-dpp/src/fee/default_costs/mod.rs b/packages/rs-dpp/src/fee/default_costs/mod.rs index 6875935e23..5a7ff91abc 100644 --- a/packages/rs-dpp/src/fee/default_costs/mod.rs +++ b/packages/rs-dpp/src/fee/default_costs/mod.rs @@ -32,11 +32,11 @@ //! Fee costs for Known Platform operations //! -use std::collections::BTreeMap; use crate::block::epoch::{Epoch, EpochIndex}; use crate::fee::Credits; use platform_version::version::fee::FeeVersion; use platform_version::version::PlatformVersion; +use std::collections::BTreeMap; pub mod constants; @@ -104,10 +104,12 @@ impl KnownCostItem { .fetch_single_identity_key_processing_cost } KnownCostItem::Blake3 => { - fee_version.hashing.blake3_base + fee_version.hashing.blake3_per_block * size.unwrap_or(0) as u64 + fee_version.hashing.blake3_base + + fee_version.hashing.blake3_per_block * size.unwrap_or(0) as u64 } KnownCostItem::SingleSHA256 => { - fee_version.hashing.single_sha256_base + fee_version.hashing.sha256_per_block * size.unwrap_or(0) as u64 + fee_version.hashing.single_sha256_base + + fee_version.hashing.sha256_per_block * size.unwrap_or(0) as u64 } KnownCostItem::VerifySignatureEcdsaSecp256k1 => { fee_version.signature.verify_signature_ecdsa_secp256k1 diff --git a/packages/rs-dpp/src/fee/fee_result/refunds.rs b/packages/rs-dpp/src/fee/fee_result/refunds.rs index b4e3ab5048..7a24ced289 100644 --- a/packages/rs-dpp/src/fee/fee_result/refunds.rs +++ b/packages/rs-dpp/src/fee/fee_result/refunds.rs @@ -4,8 +4,8 @@ //! use crate::block::epoch::{Epoch, EpochIndex}; -use crate::fee::default_costs::{CachedEpochIndexFeeVersions, EpochCosts}; use crate::fee::default_costs::KnownCostItem::StorageDiskUsageCreditPerByte; +use crate::fee::default_costs::{CachedEpochIndexFeeVersions, EpochCosts}; use crate::fee::epoch::distribution::calculate_storage_fee_refund_amount_and_leftovers; use crate::fee::epoch::{BytesPerEpoch, CreditsPerEpoch}; use crate::fee::Credits; diff --git a/packages/rs-dpp/src/lib.rs b/packages/rs-dpp/src/lib.rs index 58ff59ff40..e0318774ce 100644 --- a/packages/rs-dpp/src/lib.rs +++ b/packages/rs-dpp/src/lib.rs @@ -57,7 +57,7 @@ pub use async_trait; pub use bls::*; pub mod prelude { - use crate::block::epoch::EpochIndex; + pub use crate::data_contract::DataContract; #[cfg(feature = "extended-document")] pub use crate::document::ExtendedDocument; diff --git a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/process_raw_state_transitions/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/process_raw_state_transitions/v0/mod.rs index 6ebd3054ed..67330b5539 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/process_raw_state_transitions/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/process_raw_state_transitions/v0/mod.rs @@ -14,16 +14,16 @@ use crate::execution::types::state_transition_container::v0::{ use crate::execution::validation::state_transition::processor::process_state_transition; use crate::metrics::state_transition_execution_histogram; use crate::platform_types::event_execution_result::EventExecutionResult; -use dpp::util::hash::hash_single; -use dpp::validation::ConsensusValidationResult; -use std::time::Instant; -use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use crate::platform_types::platform_state::v0::PlatformStateV0Methods; use crate::platform_types::state_transitions_processing_result::{ StateTransitionExecutionResult, StateTransitionsProcessingResult, }; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; +use dpp::util::hash::hash_single; +use dpp::validation::ConsensusValidationResult; use dpp::version::PlatformVersion; use drive::grovedb::Transaction; +use std::time::Instant; #[derive(Debug)] struct StateTransitionAwareError<'t> { diff --git a/packages/rs-drive-abci/src/platform_types/platform_state/mod.rs b/packages/rs-drive-abci/src/platform_types/platform_state/mod.rs index ec5d8c197e..942d632f58 100644 --- a/packages/rs-drive-abci/src/platform_types/platform_state/mod.rs +++ b/packages/rs-drive-abci/src/platform_types/platform_state/mod.rs @@ -24,9 +24,9 @@ use crate::config::PlatformConfig; use crate::error::execution::ExecutionError; use crate::platform_types::signature_verification_quorum_set::SignatureVerificationQuorumSet; use dpp::block::block_info::BlockInfo; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use dpp::util::hash::hash_double; use std::collections::BTreeMap; -use dpp::fee::default_costs::CachedEpochIndexFeeVersions; /// Platform state #[derive(Clone, Debug, From)] diff --git a/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs b/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs index 51af1c4d57..555bcbe96f 100644 --- a/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs +++ b/packages/rs-drive-abci/src/platform_types/platform_state/v0/mod.rs @@ -23,10 +23,10 @@ use crate::config::PlatformConfig; use crate::platform_types::signature_verification_quorum_set::{ SignatureVerificationQuorumSet, SignatureVerificationQuorumSetForSaving, }; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use itertools::Itertools; use std::collections::BTreeMap; use std::fmt::{Debug, Formatter}; -use dpp::fee::default_costs::CachedEpochIndexFeeVersions; /// Platform state #[derive(Clone)] diff --git a/packages/rs-drive-proof-verifier/src/proof.rs b/packages/rs-drive-proof-verifier/src/proof.rs index 21574a6e2e..63d76226da 100644 --- a/packages/rs-drive-proof-verifier/src/proof.rs +++ b/packages/rs-drive-proof-verifier/src/proof.rs @@ -2,6 +2,8 @@ use crate::from_request::TryFromRequest; use crate::provider::DataContractProvider; use crate::{types, types::*, ContextProvider, Error}; use dapi_grpc::platform::v0::get_identities_contract_keys_request::GetIdentitiesContractKeysRequestV0; +use dapi_grpc::platform::v0::get_identities_contract_keys_request::GetIdentitiesContractKeysRequestV0; +use dapi_grpc::platform::v0::get_path_elements_request::GetPathElementsRequestV0; use dapi_grpc::platform::v0::get_path_elements_request::GetPathElementsRequestV0; use dapi_grpc::platform::v0::get_protocol_version_upgrade_vote_status_request::{ self, GetProtocolVersionUpgradeVoteStatusRequestV0, @@ -24,13 +26,17 @@ use dapi_grpc::platform::{ VersionedGrpcResponse, }; use dpp::block::block_info::BlockInfo; +use dpp::block::block_info::BlockInfo; use dpp::block::epoch::{EpochIndex, MAX_EPOCH}; use dpp::block::extended_epoch_info::ExtendedEpochInfo; use dpp::dashcore::hashes::Hash; use dpp::dashcore::ProTxHash; use dpp::document::{Document, DocumentV0Getters}; use dpp::identity::identities_contract_keys::IdentitiesContractKeys; +use dpp::identity::identities_contract_keys::IdentitiesContractKeys; +use dpp::identity::Purpose; use dpp::identity::Purpose; +use dpp::platform_value; use dpp::platform_value::{self}; use dpp::prelude::{DataContract, Identifier, Identity}; use dpp::serialization::PlatformDeserializable; @@ -41,12 +47,6 @@ use dpp::voting::votes::Vote; use drive::drive::identity::key::fetch::{ IdentityKeysRequest, KeyKindRequestType, KeyRequestType, PurposeU8, SecurityLevelU8, }; -use dapi_grpc::platform::v0::get_identities_contract_keys_request::GetIdentitiesContractKeysRequestV0; -use dapi_grpc::platform::v0::get_path_elements_request::GetPathElementsRequestV0; -use dpp::block::block_info::BlockInfo; -use dpp::identity::identities_contract_keys::IdentitiesContractKeys; -use dpp::identity::Purpose; -use dpp::platform_value; use drive::drive::Drive; use drive::error::proof::ProofError; use drive::query::contested_resource_votes_given_by_identity_query::ContestedResourceVotesGivenByIdentityQuery; diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/mod.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/mod.rs index 8c9c7cea30..c4a00b0457 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/mod.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/mod.rs @@ -7,9 +7,9 @@ use crate::error::{drive::DriveError, Error}; use dpp::block::block_info::BlockInfo; -use grovedb::TransactionArg; use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use dpp::fee::fee_result::FeeResult; +use grovedb::TransactionArg; use dpp::version::PlatformVersion; diff --git a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs index 9d2b2977cf..acf9ebf3cb 100644 --- a/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs +++ b/packages/rs-drive/src/drive/batch/drive_op_batch/drive_methods/apply_drive_operations/v0/mod.rs @@ -16,8 +16,8 @@ use grovedb::batch::KeyInfoPath; use crate::drive::batch::drive_op_batch::finalize_task::{ DriveOperationFinalizationTasks, DriveOperationFinalizeTask, }; -use std::collections::HashMap; use dpp::fee::default_costs::CachedEpochIndexFeeVersions; +use std::collections::HashMap; impl Drive { /// Applies a list of high level DriveOperations to the drive, and calculates the fee for them. diff --git a/packages/rs-drive/src/drive/contract/update/update_contract/mod.rs b/packages/rs-drive/src/drive/contract/update/update_contract/mod.rs index 135fa3a6fb..7f39ab6bf8 100644 --- a/packages/rs-drive/src/drive/contract/update/update_contract/mod.rs +++ b/packages/rs-drive/src/drive/contract/update/update_contract/mod.rs @@ -8,11 +8,11 @@ use dpp::block::block_info::BlockInfo; use dpp::data_contract::DataContract; use dpp::fee::fee_result::FeeResult; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{Element, EstimatedLayerInformation, TransactionArg}; use std::collections::HashMap; -use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Updates a data contract. diff --git a/packages/rs-drive/src/drive/contract/update/update_contract/v0/mod.rs b/packages/rs-drive/src/drive/contract/update/update_contract/v0/mod.rs index 9a9d780e44..017a3d7993 100644 --- a/packages/rs-drive/src/drive/contract/update/update_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/contract/update/update_contract/v0/mod.rs @@ -16,11 +16,11 @@ use dpp::fee::fee_result::FeeResult; use dpp::data_contract::document_type::methods::DocumentTypeV0Methods; use dpp::serialization::PlatformSerializableWithPlatformVersion; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{Element, EstimatedLayerInformation, TransactionArg}; use std::collections::{HashMap, HashSet}; -use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Updates a data contract. diff --git a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/mod.rs b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/mod.rs index 7ca62bbd4d..9aa5ecc8a6 100644 --- a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/mod.rs @@ -10,9 +10,9 @@ use dpp::fee::fee_result::FeeResult; use dpp::version::PlatformVersion; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use dpp::identifier::Identifier; use grovedb::TransactionArg; -use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Deletes a document and returns the associated fee. diff --git a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/v0/mod.rs b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/v0/mod.rs index 85dc0d4c7b..d15faeebb2 100644 --- a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract/v0/mod.rs @@ -5,12 +5,12 @@ use dpp::block::block_info::BlockInfo; use dpp::data_contract::DataContract; use dpp::fee::fee_result::FeeResult; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use dpp::identifier::Identifier; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{EstimatedLayerInformation, TransactionArg}; use std::collections::HashMap; -use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Deletes a document and returns the associated fee. diff --git a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/mod.rs b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/mod.rs index 42093efd90..7d13b03033 100644 --- a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/mod.rs @@ -2,9 +2,9 @@ mod v0; use grovedb::TransactionArg; +use crate::drive::Drive; use dpp::block::block_info::BlockInfo; use dpp::fee::default_costs::CachedEpochIndexFeeVersions; -use crate::drive::Drive; use crate::error::drive::DriveError; diff --git a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/v0/mod.rs b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/v0/mod.rs index 0dc596f3bc..08e82357de 100644 --- a/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/delete_document_for_contract_id/v0/mod.rs @@ -4,10 +4,10 @@ use grovedb::{EstimatedLayerInformation, TransactionArg}; use std::collections::HashMap; -use dpp::block::block_info::BlockInfo; -use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use crate::drive::Drive; use crate::error::document::DocumentError; +use dpp::block::block_info::BlockInfo; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use crate::error::Error; use crate::fee::op::LowLevelDriveOperation; diff --git a/packages/rs-drive/src/drive/document/delete/mod.rs b/packages/rs-drive/src/drive/document/delete/mod.rs index 0fc54c52b2..a270a6d462 100644 --- a/packages/rs-drive/src/drive/document/delete/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/mod.rs @@ -71,8 +71,8 @@ mod tests { use dpp::data_contract::accessors::v0::DataContractV0Getters; use dpp::document::serialization_traits::DocumentPlatformConversionMethodsV0; use dpp::document::Document; - use dpp::fee::default_costs::{CachedEpochIndexFeeVersions, EpochCosts}; use dpp::fee::default_costs::KnownCostItem::StorageDiskUsageCreditPerByte; + use dpp::fee::default_costs::{CachedEpochIndexFeeVersions, EpochCosts}; use dpp::tests::json_document::{json_document_to_contract, json_document_to_document}; use crate::tests::helpers::setup::setup_drive_with_initial_state_structure; @@ -829,7 +829,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None + None, ); // We added 1559 bytes assert_eq!(added_bytes, 1559); @@ -867,7 +867,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None + None, ); assert!(added_bytes > refund_equivalent_bytes); @@ -931,7 +931,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None + None, ); // We added 1558 bytes assert_eq!(added_bytes, 1559); diff --git a/packages/rs-drive/src/drive/document/insert/add_document_for_contract/mod.rs b/packages/rs-drive/src/drive/document/insert/add_document_for_contract/mod.rs index 920c97615d..f589456b3e 100644 --- a/packages/rs-drive/src/drive/document/insert/add_document_for_contract/mod.rs +++ b/packages/rs-drive/src/drive/document/insert/add_document_for_contract/mod.rs @@ -9,9 +9,9 @@ use crate::error::Error; use dpp::block::block_info::BlockInfo; use dpp::fee::fee_result::FeeResult; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::TransactionArg; -use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Adds a document to a contract. diff --git a/packages/rs-drive/src/drive/document/insert/add_document_for_contract/v0/mod.rs b/packages/rs-drive/src/drive/document/insert/add_document_for_contract/v0/mod.rs index a3659aacfb..e1c52bf315 100644 --- a/packages/rs-drive/src/drive/document/insert/add_document_for_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/insert/add_document_for_contract/v0/mod.rs @@ -6,9 +6,9 @@ use crate::fee::op::LowLevelDriveOperation; use dpp::block::block_info::BlockInfo; use dpp::fee::fee_result::FeeResult; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::TransactionArg; -use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Adds a document to a contract. diff --git a/packages/rs-drive/src/drive/document/insert/mod.rs b/packages/rs-drive/src/drive/document/insert/mod.rs index 20bf9edf20..ac60dd9b84 100644 --- a/packages/rs-drive/src/drive/document/insert/mod.rs +++ b/packages/rs-drive/src/drive/document/insert/mod.rs @@ -91,8 +91,8 @@ mod tests { use crate::drive::object_size_info::DocumentInfo::DocumentRefInfo; use crate::tests::helpers::setup::setup_drive_with_initial_state_structure; - use dpp::fee::default_costs::{CachedEpochIndexFeeVersions, EpochCosts}; use dpp::fee::default_costs::KnownCostItem::StorageDiskUsageCreditPerByte; + use dpp::fee::default_costs::{CachedEpochIndexFeeVersions, EpochCosts}; use dpp::fee::fee_result::FeeResult; use dpp::tests::json_document::json_document_to_document; use dpp::version::PlatformVersion; @@ -475,7 +475,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None + None, ); assert_eq!(1305, added_bytes); assert_eq!(144859600, processing_fee); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised diff --git a/packages/rs-drive/src/drive/document/update/mod.rs b/packages/rs-drive/src/drive/document/update/mod.rs index acada22ccc..37850288ba 100644 --- a/packages/rs-drive/src/drive/document/update/mod.rs +++ b/packages/rs-drive/src/drive/document/update/mod.rs @@ -89,8 +89,8 @@ mod tests { }; use dpp::document::specialized_document_factory::SpecializedDocumentFactory; use dpp::document::{Document, DocumentV0Getters, DocumentV0Setters}; - use dpp::fee::default_costs::{CachedEpochIndexFeeVersions, EpochCosts}; use dpp::fee::default_costs::KnownCostItem::StorageDiskUsageCreditPerByte; + use dpp::fee::default_costs::{CachedEpochIndexFeeVersions, EpochCosts}; use dpp::fee::fee_result::FeeResult; use dpp::platform_value; use dpp::tests::json_document::json_document_to_document; @@ -941,7 +941,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None + None, ); let expected_added_bytes = if using_history { //Explanation for 1237 @@ -1110,7 +1110,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None + None, ); assert!(expected_added_bytes > refund_equivalent_bytes); @@ -1131,7 +1131,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None + None, ); assert_eq!(original_bytes, expected_added_bytes); @@ -1153,7 +1153,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None + None, ); let expected_added_bytes = if using_history { 313 } else { 1 }; @@ -1226,7 +1226,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None + None, ); let expected_added_bytes = if using_history { 1238 } else { 962 }; assert_eq!(original_bytes, expected_added_bytes); @@ -1253,7 +1253,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None + None, ); assert!(expected_added_bytes > refund_equivalent_bytes); @@ -1274,7 +1274,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None + None, ); assert_eq!(original_bytes, expected_added_bytes); @@ -1296,7 +1296,7 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None + None, ); let removed_credits = update_fees diff --git a/packages/rs-drive/src/drive/document/update/update_document_for_contract/mod.rs b/packages/rs-drive/src/drive/document/update/update_document_for_contract/mod.rs index f0d16e627a..e8d8810c74 100644 --- a/packages/rs-drive/src/drive/document/update/update_document_for_contract/mod.rs +++ b/packages/rs-drive/src/drive/document/update/update_document_for_contract/mod.rs @@ -14,9 +14,9 @@ use dpp::fee::fee_result::FeeResult; use dpp::version::PlatformVersion; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use grovedb::TransactionArg; use std::borrow::Cow; -use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Updates a document and returns the associated fee. diff --git a/packages/rs-drive/src/drive/document/update/update_document_for_contract/v0/mod.rs b/packages/rs-drive/src/drive/document/update/update_document_for_contract/v0/mod.rs index ec3cc6c052..1e1389151a 100644 --- a/packages/rs-drive/src/drive/document/update/update_document_for_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/update/update_document_for_contract/v0/mod.rs @@ -8,13 +8,13 @@ use dpp::block::block_info::BlockInfo; use dpp::data_contract::document_type::DocumentTypeRef; use dpp::data_contract::DataContract; use dpp::document::Document; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use dpp::fee::fee_result::FeeResult; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{EstimatedLayerInformation, TransactionArg}; use std::borrow::Cow; use std::collections::HashMap; -use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Updates a document and returns the associated fee. diff --git a/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/mod.rs b/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/mod.rs index e9b3603e3a..93a9141560 100644 --- a/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/mod.rs +++ b/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/mod.rs @@ -12,9 +12,9 @@ use dpp::fee::fee_result::FeeResult; use dpp::version::PlatformVersion; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use grovedb::TransactionArg; use std::borrow::Cow; -use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Updates a serialized document given a contract id and returns the associated fee. diff --git a/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/v0/mod.rs b/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/v0/mod.rs index 1c23467cf0..3467dab072 100644 --- a/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/update/update_document_for_contract_id/v0/mod.rs @@ -10,13 +10,13 @@ use dpp::data_contract::accessors::v0::DataContractV0Getters; use dpp::document::serialization_traits::DocumentPlatformConversionMethodsV0; use dpp::document::Document; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use dpp::fee::fee_result::FeeResult; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{EstimatedLayerInformation, TransactionArg}; use std::borrow::Cow; use std::collections::HashMap; -use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Updates a serialized document given a contract id and returns the associated fee. diff --git a/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/mod.rs b/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/mod.rs index 85366ddd45..b531cb2beb 100644 --- a/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/mod.rs +++ b/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/mod.rs @@ -13,9 +13,9 @@ use dpp::fee::fee_result::FeeResult; use dpp::version::PlatformVersion; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use grovedb::TransactionArg; use std::borrow::Cow; -use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Updates a document and returns the associated fee. diff --git a/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/v0/mod.rs b/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/v0/mod.rs index 83167354e8..55b9bb1894 100644 --- a/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/v0/mod.rs +++ b/packages/rs-drive/src/drive/document/update/update_document_with_serialization_for_contract/v0/mod.rs @@ -10,12 +10,12 @@ use dpp::data_contract::DataContract; use dpp::document::Document; use dpp::fee::fee_result::FeeResult; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{EstimatedLayerInformation, TransactionArg}; use std::borrow::Cow; use std::collections::HashMap; -use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Updates a document and returns the associated fee. diff --git a/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs b/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs index 2981970c6d..cd4cb51657 100644 --- a/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs +++ b/packages/rs-drive/src/drive/fee/calculate_fee/mod.rs @@ -3,10 +3,10 @@ use crate::error::drive::DriveError; use crate::error::Error; use crate::fee::op::{BaseOp, LowLevelDriveOperation}; use dpp::block::epoch::Epoch; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use dpp::fee::fee_result::FeeResult; use dpp::version::PlatformVersion; use enum_map::EnumMap; -use dpp::fee::default_costs::CachedEpochIndexFeeVersions; mod v0; diff --git a/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs b/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs index f36970380c..508729fcfe 100644 --- a/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs +++ b/packages/rs-drive/src/drive/fee/calculate_fee/v0/mod.rs @@ -5,8 +5,8 @@ use crate::fee::op::{BaseOp, LowLevelDriveOperation}; use dpp::block::epoch::Epoch; use dpp::fee::fee_result::FeeResult; -use enum_map::EnumMap; use dpp::fee::default_costs::CachedEpochIndexFeeVersions; +use enum_map::EnumMap; use platform_version::version::fee::FeeVersion; impl Drive { diff --git a/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/mod.rs index bd642a7e00..5c551a2741 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/mod.rs @@ -8,11 +8,11 @@ use dpp::block::block_info::BlockInfo; use dpp::fee::fee_result::FeeResult; use dpp::fee::Credits; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{EstimatedLayerInformation, TransactionArg}; use std::collections::HashMap; -use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// The operations for removing a certain amount of credits from an identity's balance. This function is version controlled. diff --git a/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/v0/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/v0/mod.rs index 76cf34f9ca..9740837f1d 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/remove_from_identity_balance/v0/mod.rs @@ -8,11 +8,11 @@ use dpp::block::block_info::BlockInfo; use dpp::fee::fee_result::FeeResult; use dpp::fee::Credits; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{EstimatedLayerInformation, TransactionArg}; use std::collections::HashMap; -use dpp::fee::default_costs::CachedEpochIndexFeeVersions; impl Drive { /// Balances are stored in the balance tree under the identity's id diff --git a/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/mod.rs index 86bd6d16c0..200fb75735 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/mod.rs @@ -13,8 +13,8 @@ use dpp::version::PlatformVersion; use grovedb::batch::KeyInfoPath; use grovedb::{EstimatedLayerInformation, TransactionArg}; -use std::collections::HashMap; use dpp::fee::default_costs::CachedEpochIndexFeeVersions; +use std::collections::HashMap; impl Drive { /// Updates the revision for a specific identity. This function is version controlled. diff --git a/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/v0/mod.rs b/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/v0/mod.rs index ab3e5552d6..1427d07d25 100644 --- a/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/v0/mod.rs +++ b/packages/rs-drive/src/drive/identity/update/methods/update_identity_revision/v0/mod.rs @@ -13,8 +13,8 @@ use dpp::prelude::Revision; use dpp::version::PlatformVersion; use grovedb::{EstimatedLayerInformation, TransactionArg}; -use std::collections::HashMap; use dpp::fee::default_costs::CachedEpochIndexFeeVersions; +use std::collections::HashMap; impl Drive { //todo: this should probably not exist diff --git a/packages/rs-drive/src/fee/op.rs b/packages/rs-drive/src/fee/op.rs index abefc105c6..a90ffe7192 100644 --- a/packages/rs-drive/src/fee/op.rs +++ b/packages/rs-drive/src/fee/op.rs @@ -22,10 +22,10 @@ use crate::fee::op::LowLevelDriveOperation::{ CalculatedCostOperation, FunctionOperation, GroveOperation, PreCalculatedFeeResult, }; use dpp::block::epoch::Epoch; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use dpp::fee::fee_result::refunds::FeeRefunds; use dpp::fee::fee_result::FeeResult; use dpp::fee::Credits; -use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use platform_version::version::fee::FeeVersion; /// Base ops diff --git a/packages/rs-drive/tests/query_tests.rs b/packages/rs-drive/tests/query_tests.rs index 88b0dc183d..5fd6be2396 100644 --- a/packages/rs-drive/tests/query_tests.rs +++ b/packages/rs-drive/tests/query_tests.rs @@ -67,15 +67,15 @@ use dpp::document::serialization_traits::{ DocumentCborMethodsV0, DocumentPlatformConversionMethodsV0, DocumentPlatformValueMethodsV0, }; use dpp::document::{DocumentV0Getters, DocumentV0Setters}; +use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use dpp::identity::TimestampMillis; use dpp::platform_value; #[cfg(feature = "server")] use dpp::prelude::DataContract; -use once_cell::sync::Lazy; -use dpp::fee::default_costs::CachedEpochIndexFeeVersions; use dpp::tests::json_document::json_document_to_contract; #[cfg(feature = "server")] use dpp::util::cbor_serializer; +use once_cell::sync::Lazy; use dpp::version::PlatformVersion; diff --git a/packages/rs-platform-version/src/version/fee/mod.rs b/packages/rs-platform-version/src/version/fee/mod.rs index 509699b4a7..aa83c46416 100644 --- a/packages/rs-platform-version/src/version/fee/mod.rs +++ b/packages/rs-platform-version/src/version/fee/mod.rs @@ -4,8 +4,8 @@ use crate::version::fee::processing::FeeProcessingVersion; use crate::version::fee::signature::FeeSignatureVersion; use crate::version::fee::state_transition_min_fees::StateTransitionMinFees; use crate::version::fee::storage::FeeStorageVersion; -use bincode::{Decode, Encode}; use crate::version::fee::vote_resolution_fund_fees::VoteResolutionFundFees; +use bincode::{Decode, Encode}; mod data_contract; mod hashing; @@ -27,9 +27,9 @@ pub struct FeeVersion { pub vote_resolution_fund_fees: VoteResolutionFundFees, } - #[cfg(test)] mod tests { + use super::FeeVersion; use crate::version::fee::data_contract::FeeDataContractValidationVersion; use crate::version::fee::hashing::FeeHashingVersion; use crate::version::fee::processing::FeeProcessingVersion; @@ -37,7 +37,6 @@ mod tests { use crate::version::fee::state_transition_min_fees::StateTransitionMinFees; use crate::version::fee::storage::FeeStorageVersion; use crate::version::fee::vote_resolution_fund_fees::VoteResolutionFundFees; - use super::FeeVersion; #[test] // If this test failed, then a new field was added in FeeVersion. And the corresponding eq needs to be updated as well @@ -64,7 +63,7 @@ mod tests { sha256_per_block: 4, blake3_per_block: 5, }, - processing:FeeProcessingVersion { + processing: FeeProcessingVersion { fetch_identity_balance_processing_cost: 1, fetch_identity_revision_processing_cost: 2, fetch_identity_balance_and_revision_processing_cost: 3, @@ -120,7 +119,7 @@ mod tests { sha256_per_block: 4, blake3_per_block: 5, }, - processing:FeeProcessingVersion { + processing: FeeProcessingVersion { fetch_identity_balance_processing_cost: 1, fetch_identity_revision_processing_cost: 2, fetch_identity_balance_and_revision_processing_cost: 3, @@ -158,4 +157,3 @@ mod tests { assert_eq!(version1, version2, "FeeVersion equality test failed. If a field was added or removed, update the Eq implementation."); } } - diff --git a/packages/rs-platform-version/src/version/fee/vote_resolution_fund_fees/mod.rs b/packages/rs-platform-version/src/version/fee/vote_resolution_fund_fees/mod.rs index c363855f8d..ba594961d4 100644 --- a/packages/rs-platform-version/src/version/fee/vote_resolution_fund_fees/mod.rs +++ b/packages/rs-platform-version/src/version/fee/vote_resolution_fund_fees/mod.rs @@ -1,5 +1,4 @@ use bincode::{Decode, Encode}; -use crate::version::fee::storage::FeeStorageVersion; pub mod v1; #[derive(Clone, Debug, Encode, Decode, Default, PartialEq, Eq)] From 4c383bc4260f9be98cf13e80dcd50fddd658467a Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Fri, 12 Jul 2024 18:47:13 +0300 Subject: [PATCH 47/47] refactoring --- packages/rs-dpp/src/fee/default_costs/mod.rs | 25 ++++++++----------- packages/rs-dpp/src/fee/fee_result/refunds.rs | 2 +- .../rs-drive/src/drive/document/delete/mod.rs | 3 --- .../rs-drive/src/drive/document/insert/mod.rs | 4 --- .../rs-drive/src/drive/document/update/mod.rs | 11 -------- 5 files changed, 12 insertions(+), 33 deletions(-) diff --git a/packages/rs-dpp/src/fee/default_costs/mod.rs b/packages/rs-dpp/src/fee/default_costs/mod.rs index 5a7ff91abc..9af68bb143 100644 --- a/packages/rs-dpp/src/fee/default_costs/mod.rs +++ b/packages/rs-dpp/src/fee/default_costs/mod.rs @@ -60,10 +60,10 @@ pub enum KnownCostItem { FetchIdentityBalanceProcessingCost, /// The cost for fetching an identity key FetchSingleIdentityKeyProcessingCost, - /// The cost for a Single SHA256 operation - SingleSHA256, - /// The cost for a Blake3 operation - Blake3, + /// The cost for a Single SHA256 operation, with a specific size + SingleSHA256(usize), + /// The cost for a Blake3 operation, with a specific size + Blake3(usize), /// The cost for a EcdsaSecp256k1 signature verification VerifySignatureEcdsaSecp256k1, /// The cost for a BLS12_381 signature verification @@ -78,7 +78,7 @@ pub enum KnownCostItem { impl KnownCostItem { #[inline] - pub fn lookup_cost(&self, fee_version: &FeeVersion, size: Option) -> Credits { + pub fn lookup_cost(&self, fee_version: &FeeVersion) -> Credits { match self { KnownCostItem::StorageDiskUsageCreditPerByte => { fee_version.storage.storage_disk_usage_credit_per_byte @@ -103,13 +103,13 @@ impl KnownCostItem { .processing .fetch_single_identity_key_processing_cost } - KnownCostItem::Blake3 => { + KnownCostItem::Blake3(size) => { fee_version.hashing.blake3_base - + fee_version.hashing.blake3_per_block * size.unwrap_or(0) as u64 + + fee_version.hashing.blake3_per_block * *size as u64 } - KnownCostItem::SingleSHA256 => { + KnownCostItem::SingleSHA256(size) => { fee_version.hashing.single_sha256_base - + fee_version.hashing.sha256_per_block * size.unwrap_or(0) as u64 + + fee_version.hashing.sha256_per_block * *size as u64 } KnownCostItem::VerifySignatureEcdsaSecp256k1 => { fee_version.signature.verify_signature_ecdsa_secp256k1 @@ -133,10 +133,9 @@ impl KnownCostItem { &self, epoch: &T, cached_fee_version: &CachedEpochIndexFeeVersions, - size: Option, ) -> Credits { let version = epoch.active_fee_version(cached_fee_version); - self.lookup_cost(&version, size) + self.lookup_cost(&version) } } @@ -150,7 +149,6 @@ pub trait EpochCosts { &self, cached_fee_version: &CachedEpochIndexFeeVersions, cost_item: KnownCostItem, - size: Option, ) -> Credits; } @@ -175,8 +173,7 @@ impl EpochCosts for Epoch { &self, cached_fee_version: &CachedEpochIndexFeeVersions, cost_item: KnownCostItem, - size: Option, ) -> Credits { - cost_item.lookup_cost_on_epoch(self, cached_fee_version, size) + cost_item.lookup_cost_on_epoch(self, cached_fee_version) } } diff --git a/packages/rs-dpp/src/fee/fee_result/refunds.rs b/packages/rs-dpp/src/fee/fee_result/refunds.rs index 7a24ced289..b1ea624bfc 100644 --- a/packages/rs-dpp/src/fee/fee_result/refunds.rs +++ b/packages/rs-dpp/src/fee/fee_result/refunds.rs @@ -57,7 +57,7 @@ impl FeeRefunds { // TODO We should use multipliers let credits: Credits = (bytes as Credits) - .checked_mul(Epoch::new(current_epoch_index)?.cost_for_known_cost_item(previous_fee_versions, StorageDiskUsageCreditPerByte, None)) + .checked_mul(Epoch::new(current_epoch_index)?.cost_for_known_cost_item(previous_fee_versions, StorageDiskUsageCreditPerByte)) .ok_or(ProtocolError::Overflow("storage written bytes cost overflow"))?; let (amount, _) = calculate_storage_fee_refund_amount_and_leftovers( diff --git a/packages/rs-drive/src/drive/document/delete/mod.rs b/packages/rs-drive/src/drive/document/delete/mod.rs index a270a6d462..462f225385 100644 --- a/packages/rs-drive/src/drive/document/delete/mod.rs +++ b/packages/rs-drive/src/drive/document/delete/mod.rs @@ -829,7 +829,6 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None, ); // We added 1559 bytes assert_eq!(added_bytes, 1559); @@ -867,7 +866,6 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None, ); assert!(added_bytes > refund_equivalent_bytes); @@ -931,7 +929,6 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None, ); // We added 1558 bytes assert_eq!(added_bytes, 1559); diff --git a/packages/rs-drive/src/drive/document/insert/mod.rs b/packages/rs-drive/src/drive/document/insert/mod.rs index ac60dd9b84..11f95238fe 100644 --- a/packages/rs-drive/src/drive/document/insert/mod.rs +++ b/packages/rs-drive/src/drive/document/insert/mod.rs @@ -341,7 +341,6 @@ mod tests { * Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None ), processing_fee: 2356200, // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised ..Default::default() @@ -407,7 +406,6 @@ mod tests { * Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None ), processing_fee: 1500200, // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised ..Default::default() @@ -475,7 +473,6 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None, ); assert_eq!(1305, added_bytes); assert_eq!(144859600, processing_fee); // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised @@ -707,7 +704,6 @@ mod tests { * Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None ), processing_fee: 2095400, // TODO: Readjust this test when FeeHashingVersion blake3_base, sha256_ripe_md160_base, blake3_per_block values are finalised ..Default::default() diff --git a/packages/rs-drive/src/drive/document/update/mod.rs b/packages/rs-drive/src/drive/document/update/mod.rs index 37850288ba..d232f03be1 100644 --- a/packages/rs-drive/src/drive/document/update/mod.rs +++ b/packages/rs-drive/src/drive/document/update/mod.rs @@ -941,7 +941,6 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None, ); let expected_added_bytes = if using_history { //Explanation for 1237 @@ -1110,7 +1109,6 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None, ); assert!(expected_added_bytes > refund_equivalent_bytes); @@ -1131,7 +1129,6 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None, ); assert_eq!(original_bytes, expected_added_bytes); @@ -1153,7 +1150,6 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None, ); let expected_added_bytes = if using_history { 313 } else { 1 }; @@ -1226,7 +1222,6 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None, ); let expected_added_bytes = if using_history { 1238 } else { 962 }; assert_eq!(original_bytes, expected_added_bytes); @@ -1253,7 +1248,6 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None, ); assert!(expected_added_bytes > refund_equivalent_bytes); @@ -1274,7 +1268,6 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None, ); assert_eq!(original_bytes, expected_added_bytes); @@ -1296,7 +1289,6 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None, ); let removed_credits = update_fees @@ -1316,7 +1308,6 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None, ); assert!(expected_added_bytes > refund_equivalent_bytes); @@ -1430,7 +1421,6 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None, ); let expected_added_bytes = if using_history { //Explanation for 1237 @@ -1591,7 +1581,6 @@ mod tests { / Epoch::new(0).unwrap().cost_for_known_cost_item( &EPOCH_CHANGE_FEE_VERSION_TEST, StorageDiskUsageCreditPerByte, - None, ); let expected_added_bytes = if using_history { 1239 } else { 963 };