From 2f8a220cd1132069d71f6653b4e959e6cd78207c Mon Sep 17 00:00:00 2001 From: str-mv Date: Fri, 23 Oct 2020 09:00:19 +0000 Subject: [PATCH] Weights added --- --- /dev/null +++ b/pallets/nft/src/benchmarking.rs @@ -0,0 +1,279 @@ +#[cfg(feature = "runtime-benchmarks")] +// mod benchmarking { + use super::*; + use sp_std::prelude::*; + use frame_system::RawOrigin; + // use frame_support::{ensure, traits::OnFinalize}; + use frame_benchmarking::{benchmarks, account, whitelisted_caller}; // , TrackedStorageKey, + use crate::Module as Nft; + + const SEED: u32 = 1; + + benchmarks! { + + _ {} + + create_collection { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT(2000); + let caller: T::AccountId = account("caller", 0, SEED); + }: create_collection(RawOrigin::Signed(caller.clone()), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode) + verify { + assert_eq!(Nft::::collection(2).owner, caller); + } + + destroy_collection { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT(2000); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + }: destroy_collection(RawOrigin::Signed(caller.clone()), 2) + + add_to_white_list { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT(2000); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + let whitelist_account: T::AccountId = account("admin", 0, SEED); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + }: add_to_white_list(RawOrigin::Signed(caller.clone()), 2, whitelist_account) + + remove_from_white_list { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT(2000); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + let whitelist_account: T::AccountId = account("admin", 0, SEED); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + Nft::::add_to_white_list(RawOrigin::Signed(caller.clone()).into(), 2, whitelist_account.clone())?; + }: remove_from_white_list(RawOrigin::Signed(caller.clone()), 2, whitelist_account) + + set_public_access_mode { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT(2000); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + }: set_public_access_mode(RawOrigin::Signed(caller.clone()), 2, AccessMode::WhiteList) + + set_mint_permission { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT(2000); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + }: set_mint_permission(RawOrigin::Signed(caller.clone()), 2, true) + + change_collection_owner { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT(2000); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + let new_owner: T::AccountId = account("admin", 0, SEED); + }: change_collection_owner(RawOrigin::Signed(caller.clone()), 2, new_owner) + + add_collection_admin { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT(2000); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + let new_admin: T::AccountId = account("admin", 0, SEED); + }: add_collection_admin(RawOrigin::Signed(caller.clone()), 2, new_admin) + + remove_collection_admin { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT(2000); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + let new_admin: T::AccountId = account("admin", 0, SEED); + Nft::::add_collection_admin(RawOrigin::Signed(caller.clone()).into(), 2, new_admin.clone())?; + }: remove_collection_admin(RawOrigin::Signed(caller.clone()), 2, new_admin) + + set_collection_sponsor { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT(2000); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + }: set_collection_sponsor(RawOrigin::Signed(caller.clone()), 2, caller.clone()) + + confirm_sponsorship { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT(2000); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + Nft::::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone())?; + }: confirm_sponsorship(RawOrigin::Signed(caller.clone()), 2) + + remove_collection_sponsor { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT(2000); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + Nft::::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone())?; + Nft::::confirm_sponsorship(RawOrigin::Signed(caller.clone()).into(), 2)?; + }: remove_collection_sponsor(RawOrigin::Signed(caller.clone()), 2) + + // nft item + create_item_nft { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT(2000); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + + }: create_item(RawOrigin::Signed(caller.clone()), 2, [1, 2, 3].to_vec(), caller.clone()) + + // fungible item + create_item_fungible { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::Fungible(3); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + + }: create_item(RawOrigin::Signed(caller.clone()), 2, [].to_vec(), caller.clone()) + + // refungible item + create_item_refungible { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::ReFungible(3, 3); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + + }: create_item(RawOrigin::Signed(caller.clone()), 2, [1,2,3].to_vec(), caller.clone()) + + burn_item { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT(2000); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, [1, 2, 3].to_vec(), caller.clone())?; + + }: burn_item(RawOrigin::Signed(caller.clone()), 2, 1) + + transfer_nft { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT(2000); + let recipient: T::AccountId = account("recipient", 0, SEED); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, [1, 2, 3].to_vec(), caller.clone())?; + + }: transfer(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1, 1) + + transfer_fungible { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::Fungible(3); + let recipient: T::AccountId = account("recipient", 0, SEED); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, [].to_vec(), caller.clone())?; + + }: transfer(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1, 1) + + transfer_refungible { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::ReFungible(3,3); + let recipient: T::AccountId = account("recipient", 0, SEED); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, [1,2,3].to_vec(), caller.clone())?; + + }: transfer(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1, 1) + + approve { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::ReFungible(3,3); + let recipient: T::AccountId = account("recipient", 0, SEED); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, [1,2,3].to_vec(), caller.clone())?; + + }: approve(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1) + + // Nft + transfer_from_nft { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT(300); + let recipient: T::AccountId = account("recipient", 0, SEED); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, [1,2,3].to_vec(), caller.clone())?; + Nft::::approve(RawOrigin::Signed(caller.clone()).into(), recipient.clone(), 2, 1)?; + + }: transfer_from(RawOrigin::Signed(caller.clone()), caller.clone(), recipient.clone(), 2, 1, 1) + + // Fungible + transfer_from_fungible { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::Fungible(3); + let recipient: T::AccountId = account("recipient", 0, SEED); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, [].to_vec(), caller.clone())?; + Nft::::approve(RawOrigin::Signed(caller.clone()).into(), recipient.clone(), 2, 1)?; + + }: transfer_from(RawOrigin::Signed(caller.clone()), caller.clone(), recipient.clone(), 2, 1, 1) + + // ReFungible + transfer_from_refungible { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::ReFungible(3,3); + let recipient: T::AccountId = account("recipient", 0, SEED); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, [1,2,3].to_vec(), caller.clone())?; + Nft::::approve(RawOrigin::Signed(caller.clone()).into(), recipient.clone(), 2, 1)?; + + }: transfer_from(RawOrigin::Signed(caller.clone()), caller.clone(), recipient.clone(), 2, 1, 1) + + set_offchain_schema { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::ReFungible(3,3); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + + }: set_offchain_schema(RawOrigin::Signed(caller.clone()), 2, [1,2,3].to_vec()) + } \ No newline at end of file --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -22,6 +22,7 @@ }, IsSubType, StorageValue, }; +// use frame_support::weights::{Weight, constants::RocksDbWeight as DbWeight}; use frame_system::{self as system, ensure_signed, ensure_root}; use sp_runtime::sp_std::prelude::Vec; @@ -184,49 +185,9 @@ pub trait Trait: system::Trait { type Event: From> + Into<::Event>; } - #[cfg(feature = "runtime-benchmarks")] -mod benchmarking { - use super::*; - use sp_std::prelude::*; - use frame_system::RawOrigin; - // use frame_support::{ensure, traits::OnFinalize}; - use frame_benchmarking::{benchmarks, account}; // , TrackedStorageKey, whitelisted_caller - use crate::Module as Nft; - - const SEED: u32 = 1; - - benchmarks! { - - _ {} - - create_collection { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::NFT(2000); - let caller: T::AccountId = account("caller", 0, SEED); - }: create_collection(RawOrigin::Signed(caller.clone()), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode) - verify { - assert_eq!(Nft::::collection(2).owner, caller); - } - } - - #[cfg(test)] - mod tests { - use super::*; - use crate::tests_composite::{ExtBuilder, Test}; - use frame_support::assert_ok; - - #[test] - fn create_collection() { - ExtBuilder::default().build().execute_with(|| { - assert_ok!(test_benchmark_create_collection::()); - }); - } - } -} +mod benchmarking; // #endregion @@ -365,7 +326,10 @@ /// /// * mode: [CollectionMode] collection type and type dependent data. // returns collection ID - #[weight = 0] + #[weight = + (70_000_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(7 as Weight)) + .saturating_add(RocksDbWeight::get().writes(5 as Weight))] pub fn create_collection(origin, collection_name: Vec, collection_description: Vec, @@ -461,7 +425,10 @@ /// # Arguments /// /// * collection_id: collection to destroy. - #[weight = 0] + #[weight = + (90_000_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(2 as Weight)) + .saturating_add(RocksDbWeight::get().writes(5 as Weight))] pub fn destroy_collection(origin, collection_id: u64) -> DispatchResult { let sender = ensure_signed(origin)?; @@ -508,7 +475,10 @@ /// * collection_id. /// /// * address. - #[weight = 0] + #[weight = + (30_000_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(3 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight))] pub fn add_to_white_list(origin, collection_id: u64, address: T::AccountId) -> DispatchResult{ let sender = ensure_signed(origin)?; @@ -543,7 +513,10 @@ /// * collection_id. /// /// * address. - #[weight = 0] + #[weight = + (35_000_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(3 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight))] pub fn remove_from_white_list(origin, collection_id: u64, address: T::AccountId) -> DispatchResult{ let sender = ensure_signed(origin)?; @@ -572,7 +545,10 @@ /// * collection_id. /// /// * mode: [AccessMode] - #[weight = 0] + #[weight = + (27_000_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(1 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight))] pub fn set_public_access_mode(origin, collection_id: u64, mode: AccessMode) -> DispatchResult { let sender = ensure_signed(origin)?; @@ -598,7 +574,10 @@ /// * collection_id. /// /// * mint_permission: Boolean parameter. If True, allows minting to Anyone with conditions above. - #[weight = 0] + #[weight = + (27_000_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(1 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight))] pub fn set_mint_permission(origin, collection_id: u64, mint_permission: bool) -> DispatchResult { let sender = ensure_signed(origin)?; @@ -622,7 +601,10 @@ /// * collection_id. /// /// * new_owner. - #[weight = 0] + #[weight = + (27_000_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(1 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight))] pub fn change_collection_owner(origin, collection_id: u64, new_owner: T::AccountId) -> DispatchResult { let sender = ensure_signed(origin)?; @@ -647,7 +629,10 @@ /// * collection_id: ID of the Collection to add admin for. /// /// * new_admin_id: Address of new admin to add. - #[weight = 0] + #[weight = + (32_000_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(3 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight))] pub fn add_collection_admin(origin, collection_id: u64, new_admin_id: T::AccountId) -> DispatchResult { let sender = ensure_signed(origin)?; @@ -681,7 +666,10 @@ /// * collection_id: ID of the Collection to remove admin for. /// /// * account_id: Address of admin to remove. - #[weight = 0] + #[weight = + (50_000_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(2 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight))] pub fn remove_collection_admin(origin, collection_id: u64, account_id: T::AccountId) -> DispatchResult { let sender = ensure_signed(origin)?; @@ -706,7 +694,10 @@ /// * collection_id. /// /// * new_sponsor. - #[weight = 0] + #[weight = + (32_000_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(2 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight))] pub fn set_collection_sponsor(origin, collection_id: u64, new_sponsor: T::AccountId) -> DispatchResult { let sender = ensure_signed(origin)?; @@ -728,7 +719,10 @@ /// # Arguments /// /// * collection_id. - #[weight = 0] + #[weight = + (22_000_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(1 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight))] pub fn confirm_sponsorship(origin, collection_id: u64) -> DispatchResult { let sender = ensure_signed(origin)?; @@ -753,7 +747,10 @@ /// # Arguments /// /// * collection_id. - #[weight = 0] + #[weight = + (24_000_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(1 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight))] pub fn remove_collection_sponsor(origin, collection_id: u64) -> DispatchResult { let sender = ensure_signed(origin)?; @@ -786,7 +783,10 @@ /// * properties: Array of bytes that contains NFT properties. Since NFT Module is agnostic of properties meaning, it is treated purely as an array of bytes. /// /// * owner: Address, initial owner of the NFT. - #[weight = 0] + #[weight = + (130_000_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(10 as Weight)) + .saturating_add(RocksDbWeight::get().writes(8 as Weight))] pub fn create_item(origin, collection_id: u64, properties: Vec, owner: T::AccountId) -> DispatchResult { let sender = ensure_signed(origin)?; @@ -869,7 +869,10 @@ /// * collection_id: ID of the collection. /// /// * item_id: ID of NFT to burn. - #[weight = 0] + #[weight = + (170_000_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(9 as Weight)) + .saturating_add(RocksDbWeight::get().writes(7 as Weight))] pub fn burn_item(origin, collection_id: u64, item_id: u64) -> DispatchResult { let sender = ensure_signed(origin)?; @@ -922,7 +925,10 @@ /// * Non-Fungible Mode: Ignored /// * Fungible Mode: Must specify transferred amount /// * Re-Fungible Mode: Must specify transferred portion (between 0 and 1) - #[weight = 0] + #[weight = + (125_000_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(7 as Weight)) + .saturating_add(RocksDbWeight::get().writes(7 as Weight))] pub fn transfer(origin, recipient: T::AccountId, collection_id: u64, item_id: u64, value: u64) -> DispatchResult { let sender = ensure_signed(origin)?; @@ -964,7 +970,10 @@ /// * collection_id. /// /// * item_id: ID of the item. - #[weight = 0] + #[weight = + (45_000_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(3 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight))] pub fn approve(origin, approved: T::AccountId, collection_id: u64, item_id: u64) -> DispatchResult { let sender = ensure_signed(origin)?; @@ -1022,7 +1031,10 @@ /// * item_id: ID of the item. /// /// * value: Amount to transfer. - #[weight = 0] + #[weight = + (150_000_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(9 as Weight)) + .saturating_add(RocksDbWeight::get().writes(8 as Weight))] pub fn transfer_from(origin, from: T::AccountId, recipient: T::AccountId, collection_id: u64, item_id: u64, value: u64 ) -> DispatchResult { let sender = ensure_signed(origin)?; @@ -1032,8 +1044,11 @@ if >::contains_key(collection_id, (item_id, from.clone())) { let list_itm = >::get(collection_id, (item_id, from.clone())); let opt_item = list_itm.iter().find(|i| i.approved == sender.clone()); - appoved_transfer = opt_item.is_some(); - ensure!(opt_item.unwrap().amount >= value, "Requested value more than approved"); + if opt_item.is_some() + { + appoved_transfer = true; + ensure!(opt_item.unwrap().amount >= value, "Requested value more than approved"); + } } // Transfer permissions check @@ -1091,7 +1106,10 @@ /// * collection_id. /// /// * schema: String representing the offchain data schema. - #[weight = 0] + #[weight = + (33_000_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(2 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight))] pub fn set_offchain_schema( origin, collection_id: u64, --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -528,16 +528,16 @@ use frame_benchmarking::{Benchmarking, BenchmarkBatch, add_benchmark, TrackedStorageKey}; let whitelist: Vec = vec![ - // Block Number - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac").to_vec().into(), - // Total Issuance - hex_literal::hex!("c2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80").to_vec().into(), - // Execution Phase - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a").to_vec().into(), - // Event Count - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850").to_vec().into(), - // System Events - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7").to_vec().into(), + // Alice account + hex_literal::hex!("d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d").to_vec().into(), + // // Total Issuance + // hex_literal::hex!("c2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80").to_vec().into(), + // // Execution Phase + // hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a").to_vec().into(), + // // Event Count + // hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850").to_vec().into(), + // // System Events + // hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7").to_vec().into(), ]; let mut batches = Vec::::new(); -- gitstuff