From 40455c4cbe68dcce307d33cfe4cb2b344ead966f Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 25 Jan 2023 09:11:25 +0000 Subject: [PATCH] Merge pull request #854 from UniqueNetwork/fix/createItemWeight --- --- a/Cargo.lock +++ b/Cargo.lock @@ -5783,7 +5783,7 @@ [[package]] name = "pallet-common" -version = "0.1.12" +version = "0.1.13" dependencies = [ "ethereum 0.14.0", "evm-coder", @@ -6340,7 +6340,7 @@ [[package]] name = "pallet-nonfungible" -version = "0.1.12" +version = "0.1.13" dependencies = [ "evm-coder", "frame-benchmarking", @@ -6499,7 +6499,7 @@ [[package]] name = "pallet-refungible" -version = "0.2.11" +version = "0.2.12" dependencies = [ "evm-coder", "frame-benchmarking", --- a/pallets/common/CHANGELOG.md +++ b/pallets/common/CHANGELOG.md @@ -4,6 +4,12 @@ +## [0.1.13] - 2023-01-20 + +### Changed + +- Behavior of the `CommonWeightInfo::create_item` method. + ## [0.1.12] - 2022-11-16 ### Changed --- a/pallets/common/Cargo.toml +++ b/pallets/common/Cargo.toml @@ -2,7 +2,7 @@ edition = "2021" license = "GPLv3" name = "pallet-common" -version = "0.1.12" +version = "0.1.13" [dependencies] codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.1.2" } --- a/pallets/common/src/lib.rs +++ b/pallets/common/src/lib.rs @@ -53,7 +53,10 @@ #![cfg_attr(not(feature = "std"), no_std)] extern crate alloc; -use core::ops::{Deref, DerefMut}; +use core::{ + ops::{Deref, DerefMut}, + slice::from_ref, +}; use pallet_evm_coder_substrate::{SubstrateRecorder, WithRecorder}; use sp_std::vec::Vec; use pallet_evm::{account::CrossAccountId, Pallet as PalletEvm}; @@ -1780,7 +1783,9 @@ /// Return weights for various worst-case operations. pub trait CommonWeightInfo { /// Weight of item creation. - fn create_item() -> Weight; + fn create_item(data: &CreateItemData) -> Weight { + Self::create_multiple_items(from_ref(data)) + } /// Weight of items creation. fn create_multiple_items(amount: &[CreateItemData]) -> Weight; --- a/pallets/fungible/src/common.rs +++ b/pallets/fungible/src/common.rs @@ -36,13 +36,9 @@ pub struct CommonWeights(PhantomData); impl CommonWeightInfo for CommonWeights { - fn create_item() -> Weight { - >::create_item() - } - fn create_multiple_items(_data: &[CreateItemData]) -> Weight { // All items minted for the same user, so it works same as create_item - Self::create_item() + >::create_item() } fn create_multiple_items_ex(data: &CreateItemExData) -> Weight { @@ -134,10 +130,10 @@ data: up_data_structs::CreateItemData, nesting_budget: &dyn Budget, ) -> DispatchResultWithPostInfo { - match data { - up_data_structs::CreateItemData::Fungible(data) => with_weight( - >::create_item(self, &sender, (to, data.value), nesting_budget), - >::create_item(), + match &data { + up_data_structs::CreateItemData::Fungible(fungible_data) => with_weight( + >::create_item(self, &sender, (to, fungible_data.value), nesting_budget), + >::create_item(&data), ), _ => fail!(>::NotFungibleDataUsedToMintFungibleCollectionToken), } @@ -151,8 +147,8 @@ nesting_budget: &dyn Budget, ) -> DispatchResultWithPostInfo { let mut sum: u128 = 0; - for data in data { - match data { + for data in &data { + match &data { up_data_structs::CreateItemData::Fungible(data) => { sum = sum .checked_add(data.value) @@ -164,7 +160,7 @@ with_weight( >::create_item(self, &sender, (to, sum), nesting_budget), - >::create_item(), + >::create_multiple_items(&data), ) } --- a/pallets/nonfungible/CHANGELOG.md +++ b/pallets/nonfungible/CHANGELOG.md @@ -4,6 +4,12 @@ +## [0.1.13] - 2023-01-20 + +### Fixed + +- The weight of properties when creating an item. + ## [0.1.12] - 2022-12-16 ### Added --- a/pallets/nonfungible/Cargo.toml +++ b/pallets/nonfungible/Cargo.toml @@ -2,7 +2,7 @@ edition = "2021" license = "GPLv3" name = "pallet-nonfungible" -version = "0.1.12" +version = "0.1.13" [dependencies] codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.1.2" } --- a/pallets/nonfungible/src/common.rs +++ b/pallets/nonfungible/src/common.rs @@ -35,10 +35,6 @@ pub struct CommonWeights(PhantomData); impl CommonWeightInfo for CommonWeights { - fn create_item() -> Weight { - >::create_item() - } - fn create_multiple_items_ex(data: &CreateItemExData) -> Weight { match data { CreateItemExData::NFT(t) => { @@ -159,6 +155,7 @@ data: up_data_structs::CreateItemData, nesting_budget: &dyn Budget, ) -> DispatchResultWithPostInfo { + let weight = >::create_item(&data); with_weight( >::create_item( self, @@ -166,7 +163,7 @@ map_create_data::(data, &to)?, nesting_budget, ), - >::create_item(), + weight, ) } --- a/pallets/nonfungible/src/erc.rs +++ b/pallets/nonfungible/src/erc.rs @@ -590,7 +590,7 @@ /// @param tokenUri Token URI that would be stored in the NFT properties /// @return uint256 The id of the newly minted token #[solidity(rename_selector = "mintWithTokenURI")] - #[weight(>::create_item())] + #[weight(>::create_item() + >::set_token_properties(1))] fn mint_with_token_uri( &mut self, caller: Caller, @@ -612,7 +612,7 @@ /// @param tokenId ID of the minted NFT /// @param tokenUri Token URI that would be stored in the NFT properties #[solidity(hide, rename_selector = "mintWithTokenURI")] - #[weight(>::create_item())] + #[weight(>::create_item() + >::set_token_properties(1))] fn mint_with_token_uri_check_id( &mut self, caller: Caller, @@ -943,7 +943,7 @@ /// @param to The new owner /// @param tokens array of pairs of token ID and token URI for minted tokens #[solidity(hide, rename_selector = "mintBulkWithTokenURI")] - #[weight(>::create_multiple_items(tokens.len() as u32))] + #[weight(>::create_multiple_items(tokens.len() as u32) + >::set_token_properties(tokens.len() as u32))] fn mint_bulk_with_token_uri( &mut self, caller: Caller, @@ -994,7 +994,7 @@ /// @param to The new owner crossAccountId /// @param properties Properties of minted token /// @return uint256 The id of the newly minted token - #[weight(>::create_item())] + #[weight(>::create_item() + >::set_token_properties(properties.len() as u32))] fn mint_cross( &mut self, caller: Caller, --- a/pallets/refungible/CHANGELOG.md +++ b/pallets/refungible/CHANGELOG.md @@ -4,6 +4,12 @@ +## [0.2.12] - 2023-01-20 + +### Fixed + +- The weight of properties when creating an item. + ## [0.2.11] - 2022-12-16 ### Added --- a/pallets/refungible/Cargo.toml +++ b/pallets/refungible/Cargo.toml @@ -2,7 +2,7 @@ edition = "2021" license = "GPLv3" name = "pallet-refungible" -version = "0.2.11" +version = "0.2.12" [dependencies] codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.1.2" } --- a/pallets/refungible/src/common.rs +++ b/pallets/refungible/src/common.rs @@ -55,10 +55,6 @@ pub struct CommonWeights(PhantomData); impl CommonWeightInfo for CommonWeights { - fn create_item() -> Weight { - >::create_item() - } - fn create_multiple_items(data: &[up_data_structs::CreateItemData]) -> Weight { >::create_multiple_items(data.len() as u32).saturating_add( data.iter() @@ -193,6 +189,7 @@ data: up_data_structs::CreateItemData, nesting_budget: &dyn Budget, ) -> DispatchResultWithPostInfo { + let weight = >::create_item(&data); with_weight( >::create_item( self, @@ -200,7 +197,7 @@ map_create_data::(data, &to)?, nesting_budget, ), - >::create_item(), + weight, ) } --- a/pallets/refungible/src/erc.rs +++ b/pallets/refungible/src/erc.rs @@ -629,7 +629,7 @@ /// @param tokenUri Token URI that would be stored in the NFT properties /// @return uint256 The id of the newly minted token #[solidity(rename_selector = "mintWithTokenURI")] - #[weight(>::create_item())] + #[weight(>::create_item() + >::set_token_properties(1))] fn mint_with_token_uri( &mut self, caller: Caller, @@ -651,7 +651,7 @@ /// @param tokenId ID of the minted RFT /// @param tokenUri Token URI that would be stored in the RFT properties #[solidity(hide, rename_selector = "mintWithTokenURI")] - #[weight(>::create_item())] + #[weight(>::create_item() + >::set_token_properties(1))] fn mint_with_token_uri_check_id( &mut self, caller: Caller, @@ -994,7 +994,7 @@ /// @param to The new owner /// @param tokens array of pairs of token ID and token URI for minted tokens #[solidity(hide, rename_selector = "mintBulkWithTokenURI")] - #[weight(>::create_multiple_items(tokens.len() as u32))] + #[weight(>::create_multiple_items(tokens.len() as u32) + >::set_token_properties(tokens.len() as u32))] fn mint_bulk_with_token_uri( &mut self, caller: Caller, @@ -1051,7 +1051,7 @@ /// @param to The new owner crossAccountId /// @param properties Properties of minted token /// @return uint256 The id of the newly minted token - #[weight(>::create_item())] + #[weight(>::create_item() + >::set_token_properties(properties.len() as u32))] fn mint_cross( &mut self, caller: Caller, --- a/pallets/unique/src/lib.rs +++ b/pallets/unique/src/lib.rs @@ -518,7 +518,7 @@ /// * `collection_id`: ID of the collection to which an item would belong. /// * `owner`: Address of the initial owner of the item. /// * `data`: Token data describing the item to store on chain. - #[weight = T::CommonWeightInfo::create_item()] + #[weight = T::CommonWeightInfo::create_item(&data)] pub fn create_item(origin, collection_id: CollectionId, owner: T::CrossAccountId, data: CreateItemData) -> DispatchResultWithPostInfo { let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let budget = budget::Value::new(NESTING_BUDGET); --- a/runtime/common/weights.rs +++ b/runtime/common/weights.rs @@ -57,8 +57,8 @@ where T: CommonWeightConfigs, { - fn create_item() -> Weight { - dispatch_weight::() + max_weight_of!(create_item()) + fn create_item(data: &CreateItemData) -> Weight { + dispatch_weight::() + max_weight_of!(create_item(data)) } fn create_multiple_items(data: &[CreateItemData]) -> Weight { -- gitstuff