From c2620abd215d146cdc55d851c9fd839b2bec2d6d Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Mon, 30 Aug 2021 14:47:27 +0000 Subject: [PATCH] feat: nft benchmarking --- --- a/Makefile +++ b/Makefile @@ -10,5 +10,9 @@ bench-evm-migration: make _bench PALLET=evm-migration +.PHONY: bench-nft +bench-nft: + make _bench PALLET=nft + .PHONY: bench -bench: bench-evm-migration +bench: bench-evm-migration bench-nft --- a/pallets/nft/src/benchmarking.rs +++ b/pallets/nft/src/benchmarking.rs @@ -1,419 +1,309 @@ #![cfg(feature = "runtime-benchmarks")] use super::*; -use crate::Module as Nft; - -use sp_std::prelude::*; +use crate::Pallet; use frame_system::RawOrigin; -use frame_benchmarking::{benchmarks, account, whitelisted_caller}; // , TrackedStorageKey, +use frame_benchmarking::{benchmarks, account}; +use nft_data_structs::*; +use core::convert::TryInto; +use sp_runtime::DispatchError; const SEED: u32 = 1; -/* + +fn create_data(size: usize) -> Vec { + (0..size).map(|v| (v & 0xff) as u8).collect() +} +fn create_u16_data(size: usize) -> Vec { + (0..size).map(|v| (v & 0xffff) as u16).collect() +} + fn default_nft_data() -> CreateItemData { - CreateItemData::NFT(CreateNftData { const_data: vec![1, 2, 3], variable_data: vec![3, 2, 1] }) + CreateItemData::NFT(CreateNftData { + const_data: create_data(CUSTOM_DATA_LIMIT as usize).try_into().unwrap(), + variable_data: create_data(CUSTOM_DATA_LIMIT as usize).try_into().unwrap(), + }) +} + +fn default_fungible_data() -> CreateItemData { + CreateItemData::Fungible(CreateFungibleData { value: 1000 }) } -fn default_fungible_data () -> CreateItemData { - CreateItemData::Fungible(CreateFungibleData { }) +fn default_re_fungible_data() -> CreateItemData { + CreateItemData::ReFungible(CreateReFungibleData { + const_data: create_data(CUSTOM_DATA_LIMIT as usize).try_into().unwrap(), + variable_data: create_data(CUSTOM_DATA_LIMIT as usize).try_into().unwrap(), + pieces: 1000, + }) } -fn default_re_fungible_data () -> CreateItemData { - CreateItemData::ReFungible(CreateReFungibleData { const_data: vec![1, 2, 3], variable_data: vec![3, 2, 1] }) +fn create_collection_helper( + owner: T::AccountId, + mode: CollectionMode, +) -> Result { + T::Currency::deposit_creating(&owner, T::CollectionCreationPrice::get()); + let col_name = create_u16_data(MAX_COLLECTION_NAME_LENGTH) + .try_into() + .unwrap(); + let col_desc = create_u16_data(MAX_COLLECTION_DESCRIPTION_LENGTH) + .try_into() + .unwrap(); + let token_prefix = create_data(MAX_TOKEN_PREFIX_LENGTH).try_into().unwrap(); + >::create_collection( + RawOrigin::Signed(owner).into(), + col_name, + col_desc, + token_prefix, + mode, + )?; + Ok(CreatedCollectionCount::get()) +} +fn create_nft_collection(owner: T::AccountId) -> Result { + create_collection_helper::(owner, CollectionMode::NFT) +} +fn create_fungible_collection( + owner: T::AccountId, +) -> Result { + create_collection_helper::(owner, CollectionMode::Fungible(0)) +} +fn create_refungible_collection( + owner: T::AccountId, +) -> Result { + create_collection_helper::(owner, CollectionMode::ReFungible) } -*/ 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 col_name: Vec = create_u16_data(MAX_COLLECTION_NAME_LENGTH); + let col_desc: Vec = create_u16_data(MAX_COLLECTION_DESCRIPTION_LENGTH); + let token_prefix: Vec = create_data(MAX_TOKEN_PREFIX_LENGTH); let mode: CollectionMode = CollectionMode::NFT; let caller: T::AccountId = account("caller", 0, SEED); - }: _(RawOrigin::Signed(caller.clone()), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode) -/* + T::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get()); + }: _(RawOrigin::Signed(caller.clone()), col_name.clone(), col_desc.clone(), token_prefix.clone(), mode) verify { - assert_eq!(Nft::::collection_id(2).owner, caller); + assert_eq!(>::collection_id(2).unwrap().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; - 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())?; - }: _(RawOrigin::Signed(caller.clone()), 2) + let caller: T::AccountId = account("caller", 0, SEED); + let collection = create_nft_collection::(caller.clone())?; + }: _(RawOrigin::Signed(caller.clone()), collection) 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; - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + let caller: T::AccountId = account("caller", 0, SEED); 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) + let collection = create_nft_collection::(caller.clone())?; + }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(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; - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + let caller: T::AccountId = account("caller", 0, SEED); 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) + let collection = create_nft_collection::(caller.clone())?; + >::add_to_white_list(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(whitelist_account.clone()))?; + }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(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; - 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) + let caller: T::AccountId = account("caller", 0, SEED); + let collection = create_nft_collection::(caller.clone())?; + }: _(RawOrigin::Signed(caller.clone()), collection, 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; - 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) + let caller: T::AccountId = account("caller", 0, SEED); + let collection = create_nft_collection::(caller.clone())?; + }: _(RawOrigin::Signed(caller.clone()), collection, 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; - 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 caller: T::AccountId = account("caller", 0, SEED); + let collection = create_nft_collection::(caller.clone())?; let new_owner: T::AccountId = account("admin", 0, SEED); - }: change_collection_owner(RawOrigin::Signed(caller.clone()), 2, new_owner) + }: _(RawOrigin::Signed(caller.clone()), collection, 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; - 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 caller: T::AccountId = account("caller", 0, SEED); + let collection = create_nft_collection::(caller.clone())?; let new_admin: T::AccountId = account("admin", 0, SEED); - }: add_collection_admin(RawOrigin::Signed(caller.clone()), 2, new_admin) + }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(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; - 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 caller: T::AccountId = account("caller", 0, SEED); + let collection = create_nft_collection::(caller.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) + >::add_collection_admin(RawOrigin::Signed(caller.clone()).into(), 2, T::CrossAccountId::from_sub(new_admin.clone()))?; + }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(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; - 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()) + let caller: T::AccountId = account("caller", 0, SEED); + let collection = create_nft_collection::(caller.clone())?; + }: _(RawOrigin::Signed(caller.clone()), collection, 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; - 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) + let caller: T::AccountId = account("caller", 0, SEED); + let collection = create_nft_collection::(caller.clone())?; + >::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone())?; + }: _(RawOrigin::Signed(caller.clone()), collection) 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; - 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) + let caller: T::AccountId = account("caller", 0, SEED); + let collection = create_nft_collection::(caller.clone())?; + >::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone())?; + >::confirm_sponsorship(RawOrigin::Signed(caller.clone()).into(), 2)?; + }: _(RawOrigin::Signed(caller.clone()), collection) // 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; - 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 data = default_nft_data(); - - }: create_item(RawOrigin::Signed(caller.clone()), 2, caller.clone(), data) - - #[extra] - create_item_nft_large { - 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; - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - let mut nft_data = CreateNftData { - const_data: vec![], - variable_data: vec![] - }; - for i in 0..1998 { - nft_data.const_data.push(10); - nft_data.variable_data.push(10); - } - let data = CreateItemData::NFT(nft_data); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + let b in 0..(CUSTOM_DATA_LIMIT * 2); - }: create_item(RawOrigin::Signed(caller.clone()), 2, caller.clone(), data) + let caller: T::AccountId = account("caller", 0, SEED); + let collection = create_nft_collection::(caller.clone())?; + let data = CreateItemData::NFT(CreateNftData { + const_data: create_data(b.min(CUSTOM_DATA_LIMIT) as usize).try_into().unwrap(), + variable_data: create_data(b.saturating_sub(CUSTOM_DATA_LIMIT) as usize).try_into().unwrap(), + }); + }: create_item(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(caller.clone()), data) // 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())?; - let data = default_fungible_data(); - - }: create_item(RawOrigin::Signed(caller.clone()), 2, caller.clone(), data) + let caller: T::AccountId = account("caller", 0, SEED); + let collection = create_fungible_collection::(caller.clone())?; + let data = CreateItemData::Fungible(CreateFungibleData { + value: 1000, + }); + }: create_item(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(caller.clone()), data) // 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); - 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 data = default_re_fungible_data(); + let b in 0..(CUSTOM_DATA_LIMIT * 2); - }: create_item(RawOrigin::Signed(caller.clone()), 2, caller.clone(), data) + let caller: T::AccountId = account("caller", 0, SEED); + let collection = create_refungible_collection::(caller.clone())?; + let data = CreateItemData::ReFungible(CreateReFungibleData { + const_data: create_data(b.min(CUSTOM_DATA_LIMIT) as usize).try_into().unwrap(), + variable_data: create_data(b.saturating_sub(CUSTOM_DATA_LIMIT) as usize).try_into().unwrap(), + pieces: 1000, + }); + }: create_item(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(caller.clone()), data) - 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; - 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())?; + burn_item_nft { + let caller: T::AccountId = account("caller", 0, SEED); + let collection = create_nft_collection::(caller.clone())?; let data = default_nft_data(); - Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; - - }: burn_item(RawOrigin::Signed(caller.clone()), 2, 1) + >::create_item(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(caller.clone()), data)?; + }: burn_item(RawOrigin::Signed(caller.clone()), collection, 1, 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; + let caller: T::AccountId = account("caller", 0, SEED); + let collection = create_nft_collection::(caller.clone())?; 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())?; let data = default_nft_data(); - Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; - - }: transfer(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1, 1) + >::create_item(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(caller.clone()), data)?; + }: transfer(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), collection, 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 caller: T::AccountId = account("caller", 0, SEED); + let collection = create_fungible_collection::(caller.clone())?; 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())?; let data = default_fungible_data(); - Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; + >::create_item(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(caller.clone()), data)?; + }: transfer(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), collection, 1, 1) - }: 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); + let caller: T::AccountId = account("caller", 0, SEED); + let collection = create_refungible_collection::(caller.clone())?; 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())?; let data = default_re_fungible_data(); - Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; + >::create_item(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(caller.clone()), data)?; + }: transfer(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), collection, 1, 1) - }: 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); + approve_nft { + let caller: T::AccountId = account("caller", 0, SEED); + let collection = create_nft_collection::(caller.clone())?; 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())?; - let data = default_re_fungible_data(); - Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; - - }: approve(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1) + let data = default_nft_data(); + >::create_item(RawOrigin::Signed(caller.clone()).into(), 2, T::CrossAccountId::from_sub(caller.clone()), data)?; + }: approve(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), collection, 1, 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; + let caller: T::AccountId = account("caller", 0, SEED); + let collection = create_nft_collection::(caller.clone())?; 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())?; let data = default_nft_data(); - Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; - Nft::::approve(RawOrigin::Signed(caller.clone()).into(), recipient.clone(), 2, 1)?; - - }: transfer_from(RawOrigin::Signed(caller.clone()), caller.clone(), recipient.clone(), 2, 1, 1) + >::create_item(RawOrigin::Signed(caller.clone()).into(), 2, T::CrossAccountId::from_sub(caller.clone()), data)?; + >::approve(RawOrigin::Signed(caller.clone()).into(), T::CrossAccountId::from_sub(recipient.clone()), 2, 1, 1)?; + }: transfer_from(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(caller.clone()), T::CrossAccountId::from_sub(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 caller: T::AccountId = account("caller", 0, SEED); + let collection = create_fungible_collection::(caller.clone())?; 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())?; let data = default_fungible_data(); - Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; - Nft::::approve(RawOrigin::Signed(caller.clone()).into(), recipient.clone(), 2, 1)?; + >::create_item(RawOrigin::Signed(caller.clone()).into(), 2, T::CrossAccountId::from_sub(caller.clone()), data)?; + >::approve(RawOrigin::Signed(caller.clone()).into(), T::CrossAccountId::from_sub(recipient.clone()), 2, 1, 1)?; + }: transfer_from(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), 2, 1, 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); + let caller: T::AccountId = account("caller", 0, SEED); + let collection = create_refungible_collection::(caller.clone())?; 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())?; let data = default_re_fungible_data(); - Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; - Nft::::approve(RawOrigin::Signed(caller.clone()).into(), recipient.clone(), 2, 1)?; - - }: transfer_from(RawOrigin::Signed(caller.clone()), caller.clone(), recipient.clone(), 2, 1, 1) - - enable_contract_sponsoring { - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + >::create_item(RawOrigin::Signed(caller.clone()).into(), 2, T::CrossAccountId::from_sub(caller.clone()), data)?; + >::approve(RawOrigin::Signed(caller.clone()).into(), T::CrossAccountId::from_sub(recipient.clone()), 2, 1, 1)?; + }: transfer_from(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), 2, 1, 1) - }: enable_contract_sponsoring(RawOrigin::Signed(caller.clone()), caller.clone(), true) - 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); - 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 b in 0..OFFCHAIN_SCHEMA_LIMIT; - }: set_offchain_schema(RawOrigin::Signed(caller.clone()), 2, [1,2,3].to_vec()) + let caller: T::AccountId = account("caller", 0, SEED); + let collection = create_nft_collection::(caller.clone())?; + let data = create_data(b as usize); + }: set_offchain_schema(RawOrigin::Signed(caller.clone()), collection, data) set_const_on_chain_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); - 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_const_on_chain_schema(RawOrigin::Signed(caller.clone()), 2, [1,2,3].to_vec()) + let b in 0..CONST_ON_CHAIN_SCHEMA_LIMIT; + + let caller: T::AccountId = account("caller", 0, SEED); + let collection = create_nft_collection::(caller.clone())?; + let data = create_data(b as usize); + }: set_const_on_chain_schema(RawOrigin::Signed(caller.clone()), collection, data) set_variable_on_chain_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); - 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_variable_on_chain_schema(RawOrigin::Signed(caller.clone()), 2, [1,2,3].to_vec()) + let b in 0..VARIABLE_ON_CHAIN_SCHEMA_LIMIT; - set_variable_meta_data { - 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; - 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 data = default_nft_data(); - Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; + let caller: T::AccountId = account("caller", 0, SEED); + let collection = create_nft_collection::(caller.clone())?; + let data = create_data(b as usize); + }: set_variable_on_chain_schema(RawOrigin::Signed(caller.clone()), 2, data) - }: set_variable_meta_data(RawOrigin::Signed(caller.clone()), 2, 1, [1, 2, 3].to_vec()) + set_variable_meta_data_nft { + let b in 0..CUSTOM_DATA_LIMIT; + let caller: T::AccountId = account("caller", 0, SEED); + let collection = create_nft_collection::(caller.clone())?; + let data = default_nft_data(); + >::create_item(RawOrigin::Signed(caller.clone()).into(), 2, T::CrossAccountId::from_sub(caller.clone()), data)?; + let data = create_data(b as usize); + }: set_variable_meta_data(RawOrigin::Signed(caller.clone()), collection, 1, data) + set_schema_version { - 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; - 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 caller: T::AccountId = account("caller", 0, SEED); + let collection = create_nft_collection::(caller.clone())?; }: set_schema_version(RawOrigin::Signed(caller.clone()), 2, SchemaVersion::Unique) - - set_chain_limits { - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - let limits = ChainLimits { - collection_numbers_limit: 0, - account_token_ownership_limit: 0, - collections_admins_limit: 0, - custom_data_limit: 0, - nft_sponsor_transfer_timeout: 0, - fungible_sponsor_transfer_timeout: 0, - refungible_sponsor_transfer_timeout: 0 - }; - }: set_chain_limits(RawOrigin::Signed(caller.clone()), limits) - set_contract_sponsoring_rate_limit { - 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; - 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 block_number: T::BlockNumber = 0.into(); - }: set_contract_sponsoring_rate_limit(RawOrigin::Signed(caller.clone()), caller.clone(), block_number) - set_collection_limits{ - 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; - 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 caller: T::AccountId = account("caller", 0, SEED); + let collection = create_nft_collection::(caller.clone())?; let cl = CollectionLimits { account_token_ownership_limit: 0, sponsored_data_size: 0, - token_limit: 0, - sponsor_transfer_timeout: 0 + token_limit: 1, + sponsor_transfer_timeout: 0, + owner_can_destroy: true, + owner_can_transfer: true, + sponsored_data_rate_limit: None, }; - }: set_collection_limits(RawOrigin::Signed(caller.clone()), 2, cl) - - add_to_contract_white_list{ - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - }: add_to_contract_white_list(RawOrigin::Signed(caller.clone()), caller.clone(), caller.clone()) - - remove_from_contract_white_list{ - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::add_to_contract_white_list(RawOrigin::Signed(caller.clone()).into(), caller.clone(), caller.clone())?; - }: remove_from_contract_white_list(RawOrigin::Signed(caller.clone()), caller.clone(), caller.clone()) - - toggle_contract_white_list{ - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - }: toggle_contract_white_list(RawOrigin::Signed(caller.clone()), caller.clone(), true) -*/ } --- a/pallets/nft/src/default_weights.rs +++ /dev/null @@ -1,150 +0,0 @@ -use frame_support::weights::{Weight, constants::RocksDbWeight as DbWeight}; - -impl crate::WeightInfo for () { - fn create_collection() -> Weight { - 70_000_000_u64 - .saturating_add(DbWeight::get().reads(7_u64)) - .saturating_add(DbWeight::get().writes(5_u64)) - } - fn destroy_collection() -> Weight { - 90_000_000_u64 - .saturating_add(DbWeight::get().reads(2_u64)) - .saturating_add(DbWeight::get().writes(5_u64)) - } - fn add_to_white_list() -> Weight { - 30_000_000_u64 - .saturating_add(DbWeight::get().reads(3_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn remove_from_white_list() -> Weight { - 35_000_000_u64 - .saturating_add(DbWeight::get().reads(3_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn set_public_access_mode() -> Weight { - 27_000_000_u64 - .saturating_add(DbWeight::get().reads(1_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn set_mint_permission() -> Weight { - 27_000_000_u64 - .saturating_add(DbWeight::get().reads(1_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn change_collection_owner() -> Weight { - 27_000_000_u64 - .saturating_add(DbWeight::get().reads(1_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn add_collection_admin() -> Weight { - 32_000_000_u64 - .saturating_add(DbWeight::get().reads(3_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn remove_collection_admin() -> Weight { - 50_000_000_u64 - .saturating_add(DbWeight::get().reads(2_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn set_collection_sponsor() -> Weight { - 32_000_000_u64 - .saturating_add(DbWeight::get().reads(2_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn confirm_sponsorship() -> Weight { - 22_000_000_u64 - .saturating_add(DbWeight::get().reads(1_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn remove_collection_sponsor() -> Weight { - 24_000_000_u64 - .saturating_add(DbWeight::get().reads(1_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn create_item(s: usize) -> Weight { - 130_000_000_u64 - .saturating_add(2135_u64.saturating_mul(s as Weight).saturating_mul(500_u64)) // 500 is temporary multiplier, fee for storage - .saturating_add(DbWeight::get().reads(10_u64)) - .saturating_add(DbWeight::get().writes(8_u64)) - } - fn burn_item() -> Weight { - 170_000_000_u64 - .saturating_add(DbWeight::get().reads(9_u64)) - .saturating_add(DbWeight::get().writes(7_u64)) - } - fn transfer() -> Weight { - 125_000_000_u64 - .saturating_add(DbWeight::get().reads(7_u64)) - .saturating_add(DbWeight::get().writes(7_u64)) - } - fn approve() -> Weight { - 45_000_000_u64 - .saturating_add(DbWeight::get().reads(3_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn transfer_from() -> Weight { - 150_000_000_u64 - .saturating_add(DbWeight::get().reads(9_u64)) - .saturating_add(DbWeight::get().writes(8_u64)) - } - fn set_offchain_schema() -> Weight { - 33_000_000_u64 - .saturating_add(DbWeight::get().reads(2_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn set_const_on_chain_schema() -> Weight { - 11_100_000_u64 - .saturating_add(DbWeight::get().reads(2_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn set_variable_on_chain_schema() -> Weight { - 11_100_000_u64 - .saturating_add(DbWeight::get().reads(2_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn set_variable_meta_data() -> Weight { - 17_500_000_u64 - .saturating_add(DbWeight::get().reads(2_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn enable_contract_sponsoring() -> Weight { - 13_000_000_u64 - .saturating_add(DbWeight::get().reads(1_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn set_schema_version() -> Weight { - 8_500_000_u64 - .saturating_add(DbWeight::get().reads(2_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn set_contract_sponsoring_rate_limit() -> Weight { - 3_500_000_u64 - .saturating_add(DbWeight::get().reads(0_u64)) - .saturating_add(DbWeight::get().writes(2_u64)) - } - fn set_variable_meta_data_sponsoring_rate_limit() -> Weight { - 3_500_000_u64 - .saturating_add(DbWeight::get().reads(2_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn toggle_contract_white_list() -> Weight { - 3_000_000_u64 - .saturating_add(DbWeight::get().reads(0_u64)) - .saturating_add(DbWeight::get().writes(2_u64)) - } - fn add_to_contract_white_list() -> Weight { - 3_000_000_u64 - .saturating_add(DbWeight::get().reads(0_u64)) - .saturating_add(DbWeight::get().writes(2_u64)) - } - fn remove_from_contract_white_list() -> Weight { - 3_200_000_u64 - .saturating_add(DbWeight::get().reads(0_u64)) - .saturating_add(DbWeight::get().writes(2_u64)) - } - fn set_collection_limits() -> Weight { - 8_900_000_u64 - .saturating_add(DbWeight::get().reads(2_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } -} --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -40,8 +40,9 @@ MAX_DECIMAL_POINTS, MAX_SPONSOR_TIMEOUT, MAX_TOKEN_OWNERSHIP, MAX_REFUNGIBLE_PIECES, CUSTOM_DATA_LIMIT, COLLECTION_NUMBER_LIMIT, ACCOUNT_TOKEN_OWNERSHIP_LIMIT, VARIABLE_ON_CHAIN_SCHEMA_LIMIT, CONST_ON_CHAIN_SCHEMA_LIMIT, COLLECTION_ADMINS_LIMIT, - OFFCHAIN_SCHEMA_LIMIT, AccessMode, Collection, CreateItemData, CollectionLimits, CollectionId, - CollectionMode, TokenId, SchemaVersion, SponsorshipState, Ownership, NftItemType, + OFFCHAIN_SCHEMA_LIMIT, MAX_TOKEN_PREFIX_LENGTH, MAX_COLLECTION_NAME_LENGTH, + MAX_COLLECTION_DESCRIPTION_LENGTH, AccessMode, Collection, CreateItemData, CollectionLimits, + CollectionId, CollectionMode, TokenId, SchemaVersion, SponsorshipState, Ownership, NftItemType, FungibleItemType, ReFungibleItemType, }; @@ -51,7 +52,6 @@ #[cfg(test)] mod tests; -mod default_weights; mod eth; mod sponsorship; pub use sponsorship::NftSponsorshipHandler; @@ -63,38 +63,8 @@ #[cfg(feature = "runtime-benchmarks")] mod benchmarking; - -pub trait WeightInfo { - fn create_collection() -> Weight; - fn destroy_collection() -> Weight; - fn add_to_white_list() -> Weight; - fn remove_from_white_list() -> Weight; - fn set_public_access_mode() -> Weight; - fn set_mint_permission() -> Weight; - fn change_collection_owner() -> Weight; - fn add_collection_admin() -> Weight; - fn remove_collection_admin() -> Weight; - fn set_collection_sponsor() -> Weight; - fn confirm_sponsorship() -> Weight; - fn remove_collection_sponsor() -> Weight; - fn create_item(s: usize) -> Weight; - fn burn_item() -> Weight; - fn transfer() -> Weight; - fn approve() -> Weight; - fn transfer_from() -> Weight; - fn set_offchain_schema() -> Weight; - fn set_const_on_chain_schema() -> Weight; - fn set_variable_on_chain_schema() -> Weight; - fn set_variable_meta_data() -> Weight; - fn enable_contract_sponsoring() -> Weight; - fn set_schema_version() -> Weight; - fn set_contract_sponsoring_rate_limit() -> Weight; - fn set_variable_meta_data_sponsoring_rate_limit() -> Weight; - fn toggle_contract_white_list() -> Weight; - fn add_to_contract_white_list() -> Weight; - fn remove_from_contract_white_list() -> Weight; - fn set_collection_limits() -> Weight; -} +pub mod weights; +use weights::WeightInfo; decl_error! { /// Error for non-fungible-token module. @@ -246,6 +216,39 @@ type TreasuryAccountId: Get; } +type SelfWeightOf = ::WeightInfo; + +trait WeightInfoHelpers: WeightInfo { + fn transfer() -> Weight { + Self::transfer_nft() + .max(Self::transfer_fungible()) + .max(Self::transfer_refungible()) + } + fn transfer_from() -> Weight { + Self::transfer_from_nft() + .max(Self::transfer_from_fungible()) + .max(Self::transfer_from_refungible()) + } + fn approve() -> Weight { + // TODO: refungible, fungible + Self::approve_nft() + } + fn set_variable_meta_data(data: u32) -> Weight { + // TODO: refungible + Self::set_variable_meta_data_nft(data) + } + fn create_item(data: u32) -> Weight { + Self::create_item_nft(data) + .max(Self::create_item_fungible()) + .max(Self::create_item_refungible(data)) + } + fn burn_item() -> Weight { + // TODO: refungible, fungible + Self::burn_item_nft() + } +} +impl WeightInfoHelpers for T {} + // # Used definitions // // ## User control levels @@ -455,7 +458,7 @@ /// /// * mode: [CollectionMode] collection type and type dependent data. // returns collection ID - #[weight = ::WeightInfo::create_collection()] + #[weight = >::create_collection()] #[transactional] pub fn create_collection(origin, collection_name: Vec, @@ -492,9 +495,9 @@ // check params ensure!(decimal_points <= MAX_DECIMAL_POINTS, Error::::CollectionDecimalPointLimitExceeded); - ensure!(collection_name.len() <= 64, Error::::CollectionNameLimitExceeded); - ensure!(collection_description.len() <= 256, Error::::CollectionDescriptionLimitExceeded); - ensure!(token_prefix.len() <= 16, Error::::CollectionTokenPrefixLimitExceeded); + ensure!(collection_name.len() <= MAX_COLLECTION_NAME_LENGTH, Error::::CollectionNameLimitExceeded); + ensure!(collection_description.len() <= MAX_COLLECTION_DESCRIPTION_LENGTH, Error::::CollectionDescriptionLimitExceeded); + ensure!(token_prefix.len() <= MAX_TOKEN_PREFIX_LENGTH, Error::::CollectionTokenPrefixLimitExceeded); // Generate next collection ID let next_id = created_count @@ -545,7 +548,7 @@ /// # Arguments /// /// * collection_id: collection to destroy. - #[weight = ::WeightInfo::destroy_collection()] + #[weight = >::destroy_collection()] #[transactional] pub fn destroy_collection(origin, collection_id: CollectionId) -> DispatchResult { @@ -593,7 +596,7 @@ /// * collection_id. /// /// * address. - #[weight = ::WeightInfo::add_to_white_list()] + #[weight = >::add_to_white_list()] #[transactional] pub fn add_to_white_list(origin, collection_id: CollectionId, address: T::CrossAccountId) -> DispatchResult{ @@ -622,7 +625,7 @@ /// * collection_id. /// /// * address. - #[weight = ::WeightInfo::remove_from_white_list()] + #[weight = >::remove_from_white_list()] #[transactional] pub fn remove_from_white_list(origin, collection_id: CollectionId, address: T::CrossAccountId) -> DispatchResult{ @@ -650,7 +653,7 @@ /// * collection_id. /// /// * mode: [AccessMode] - #[weight = ::WeightInfo::set_public_access_mode()] + #[weight = >::set_public_access_mode()] #[transactional] pub fn set_public_access_mode(origin, collection_id: CollectionId, mode: AccessMode) -> DispatchResult { @@ -675,7 +678,7 @@ /// * collection_id. /// /// * mint_permission: Boolean parameter. If True, allows minting to Anyone with conditions above. - #[weight = ::WeightInfo::set_mint_permission()] + #[weight = >::set_mint_permission()] #[transactional] pub fn set_mint_permission(origin, collection_id: CollectionId, mint_permission: bool) -> DispatchResult { @@ -698,7 +701,7 @@ /// * collection_id. /// /// * new_owner. - #[weight = ::WeightInfo::change_collection_owner()] + #[weight = >::change_collection_owner()] #[transactional] pub fn change_collection_owner(origin, collection_id: CollectionId, new_owner: T::AccountId) -> DispatchResult { @@ -722,7 +725,7 @@ /// * collection_id: ID of the Collection to add admin for. /// /// * new_admin_id: Address of new admin to add. - #[weight = ::WeightInfo::add_collection_admin()] + #[weight = >::add_collection_admin()] #[transactional] pub fn add_collection_admin(origin, collection_id: CollectionId, new_admin_id: T::CrossAccountId) -> DispatchResult { let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); @@ -753,7 +756,7 @@ /// * collection_id: ID of the Collection to remove admin for. /// /// * account_id: Address of admin to remove. - #[weight = ::WeightInfo::remove_collection_admin()] + #[weight = >::remove_collection_admin()] #[transactional] pub fn remove_collection_admin(origin, collection_id: CollectionId, account_id: T::CrossAccountId) -> DispatchResult { let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); @@ -777,7 +780,7 @@ /// * collection_id. /// /// * new_sponsor. - #[weight = ::WeightInfo::set_collection_sponsor()] + #[weight = >::set_collection_sponsor()] #[transactional] pub fn set_collection_sponsor(origin, collection_id: CollectionId, new_sponsor: T::AccountId) -> DispatchResult { let sender = ensure_signed(origin)?; @@ -795,7 +798,7 @@ /// # Arguments /// /// * collection_id. - #[weight = ::WeightInfo::confirm_sponsorship()] + #[weight = >::confirm_sponsorship()] #[transactional] pub fn confirm_sponsorship(origin, collection_id: CollectionId) -> DispatchResult { let sender = ensure_signed(origin)?; @@ -819,7 +822,7 @@ /// # Arguments /// /// * collection_id. - #[weight = ::WeightInfo::remove_collection_sponsor()] + #[weight = >::remove_collection_sponsor()] #[transactional] pub fn remove_collection_sponsor(origin, collection_id: CollectionId) -> DispatchResult { let sender = ensure_signed(origin)?; @@ -855,7 +858,7 @@ // .saturating_add(RocksDbWeight::get().reads(10 as Weight)) // .saturating_add(RocksDbWeight::get().writes(8 as Weight))] - #[weight = ::WeightInfo::create_item(data.data_size())] + #[weight = >::create_item(data.data_size() as u32)] #[transactional] pub fn create_item(origin, collection_id: CollectionId, owner: T::CrossAccountId, data: CreateItemData) -> DispatchResult { let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); @@ -884,8 +887,8 @@ /// * itemsData: Array items properties. Each property is an array of bytes itself, see [create_item]. /// /// * owner: Address, initial owner of the NFT. - #[weight = ::WeightInfo::create_item(items_data.iter() - .map(|data| { data.data_size() }) + #[weight = >::create_item(items_data.iter() + .map(|data| { data.data_size() as u32 }) .sum())] #[transactional] pub fn create_multiple_items(origin, collection_id: CollectionId, owner: T::CrossAccountId, items_data: Vec) -> DispatchResult { @@ -912,7 +915,7 @@ /// * collection_id: ID of the collection. /// /// * value: New flag value. - #[weight = ::WeightInfo::burn_item()] + #[weight = >::burn_item()] #[transactional] pub fn set_transfers_enabled_flag(origin, collection_id: CollectionId, value: bool) -> DispatchResult { @@ -938,7 +941,7 @@ /// * collection_id: ID of the collection. /// /// * item_id: ID of NFT to burn. - #[weight = ::WeightInfo::burn_item()] + #[weight = >::burn_item()] #[transactional] pub fn burn_item(origin, collection_id: CollectionId, item_id: TokenId, value: u128) -> DispatchResult { @@ -973,7 +976,7 @@ /// * Non-Fungible Mode: Ignored /// * Fungible Mode: Must specify transferred amount /// * Re-Fungible Mode: Must specify transferred portion (between 0 and 1) - #[weight = ::WeightInfo::transfer()] + #[weight = >::transfer()] #[transactional] pub fn transfer(origin, recipient: T::CrossAccountId, collection_id: CollectionId, item_id: TokenId, value: u128) -> DispatchResult { let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); @@ -999,7 +1002,7 @@ /// * collection_id. /// /// * item_id: ID of the item. - #[weight = ::WeightInfo::approve()] + #[weight = >::approve()] #[transactional] pub fn approve(origin, spender: T::CrossAccountId, collection_id: CollectionId, item_id: TokenId, amount: u128) -> DispatchResult { let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); @@ -1029,7 +1032,7 @@ /// * item_id: ID of the item. /// /// * value: Amount to transfer. - #[weight = ::WeightInfo::transfer_from()] + #[weight = >::transfer_from()] #[transactional] pub fn transfer_from(origin, from: T::CrossAccountId, recipient: T::CrossAccountId, collection_id: CollectionId, item_id: TokenId, value: u128 ) -> DispatchResult { let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); @@ -1064,7 +1067,7 @@ /// * collection_id. /// /// * schema: String representing the offchain data schema. - #[weight = ::WeightInfo::set_variable_meta_data()] + #[weight = >::set_variable_meta_data(data.len() as u32)] #[transactional] pub fn set_variable_meta_data ( origin, @@ -1095,7 +1098,7 @@ /// * collection_id. /// /// * schema: SchemaVersion: enum - #[weight = ::WeightInfo::set_schema_version()] + #[weight = >::set_schema_version()] #[transactional] pub fn set_schema_version( origin, @@ -1121,7 +1124,7 @@ /// * collection_id. /// /// * schema: String representing the offchain data schema. - #[weight = ::WeightInfo::set_offchain_schema()] + #[weight = >::set_offchain_schema(schema.len() as u32)] #[transactional] pub fn set_offchain_schema( origin, @@ -1151,7 +1154,7 @@ /// * collection_id. /// /// * schema: String representing the const on-chain data schema. - #[weight = ::WeightInfo::set_const_on_chain_schema()] + #[weight = >::set_const_on_chain_schema(schema.len() as u32)] #[transactional] pub fn set_const_on_chain_schema ( origin, @@ -1181,7 +1184,7 @@ /// * collection_id. /// /// * schema: String representing the variable on-chain data schema. - #[weight = ::WeightInfo::set_const_on_chain_schema()] + #[weight = >::set_const_on_chain_schema(schema.len() as u32)] #[transactional] pub fn set_variable_on_chain_schema ( origin, @@ -1199,7 +1202,7 @@ target_collection.save() } - #[weight = ::WeightInfo::set_collection_limits()] + #[weight = >::set_collection_limits()] #[transactional] pub fn set_collection_limits( origin, --- /dev/null +++ b/pallets/nft/src/weights.rs @@ -0,0 +1,362 @@ +// Template adopted from https://github.com/paritytech/substrate/blob/master/.maintain/frame-weight-template.hbs + +//! Autogenerated weights for pallet_nft +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 3.0.0 +//! DATE: 2021-08-30, STEPS: `[50, ]`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 128 + +// Executed Command: +// target/release/nft +// benchmark +// --pallet +// pallet-nft +// --wasm-execution +// compiled +// --extrinsic +// * +// --template +// .maintain/frame-weight-template.hbs +// --steps=50 +// --repeat=20 +// --output=./pallets/nft/src/weights.rs + + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; +use sp_std::marker::PhantomData; + +/// Weight functions needed for pallet_nft. +pub trait WeightInfo { + fn create_collection() -> Weight; + fn destroy_collection() -> Weight; + fn add_to_white_list() -> Weight; + fn remove_from_white_list() -> Weight; + fn set_public_access_mode() -> Weight; + fn set_mint_permission() -> Weight; + fn change_collection_owner() -> Weight; + fn add_collection_admin() -> Weight; + fn remove_collection_admin() -> Weight; + fn set_collection_sponsor() -> Weight; + fn confirm_sponsorship() -> Weight; + fn remove_collection_sponsor() -> Weight; + fn create_item_nft(b: u32, ) -> Weight; + fn create_item_fungible() -> Weight; + fn create_item_refungible(b: u32, ) -> Weight; + fn burn_item_nft() -> Weight; + fn transfer_nft() -> Weight; + fn transfer_fungible() -> Weight; + fn transfer_refungible() -> Weight; + fn approve_nft() -> Weight; + fn transfer_from_nft() -> Weight; + fn transfer_from_fungible() -> Weight; + fn transfer_from_refungible() -> Weight; + fn set_offchain_schema(b: u32, ) -> Weight; + fn set_const_on_chain_schema(b: u32, ) -> Weight; + fn set_variable_on_chain_schema(b: u32, ) -> Weight; + fn set_variable_meta_data_nft(b: u32, ) -> Weight; + fn set_schema_version() -> Weight; + fn set_collection_limits() -> Weight; +} + +/// Weights for pallet_nft using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl WeightInfo for SubstrateWeight { + fn create_collection() -> Weight { + (25_851_000 as Weight) + .saturating_add(T::DbWeight::get().reads(8 as Weight)) + .saturating_add(T::DbWeight::get().writes(6 as Weight)) + } + fn destroy_collection() -> Weight { + (28_737_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(4 as Weight)) + } + fn add_to_white_list() -> Weight { + (6_237_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn remove_from_white_list() -> Weight { + (6_252_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn set_public_access_mode() -> Weight { + (6_691_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn set_mint_permission() -> Weight { + (6_630_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn change_collection_owner() -> Weight { + (6_521_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn add_collection_admin() -> Weight { + (8_057_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn remove_collection_admin() -> Weight { + (8_307_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn set_collection_sponsor() -> Weight { + (6_484_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn confirm_sponsorship() -> Weight { + (6_530_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn remove_collection_sponsor() -> Weight { + (6_733_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn create_item_nft(_b: u32, ) -> Weight { + (167_909_000 as Weight) + .saturating_add(T::DbWeight::get().reads(11 as Weight)) + .saturating_add(T::DbWeight::get().writes(8 as Weight)) + } + fn create_item_fungible() -> Weight { + (22_331_000 as Weight) + .saturating_add(T::DbWeight::get().reads(9 as Weight)) + .saturating_add(T::DbWeight::get().writes(4 as Weight)) + } + fn create_item_refungible(_b: u32, ) -> Weight { + (26_293_000 as Weight) + .saturating_add(T::DbWeight::get().reads(9 as Weight)) + .saturating_add(T::DbWeight::get().writes(7 as Weight)) + } + fn burn_item_nft() -> Weight { + (32_237_000 as Weight) + .saturating_add(T::DbWeight::get().reads(9 as Weight)) + .saturating_add(T::DbWeight::get().writes(7 as Weight)) + } + fn transfer_nft() -> Weight { + (192_578_000 as Weight) + .saturating_add(T::DbWeight::get().reads(14 as Weight)) + .saturating_add(T::DbWeight::get().writes(10 as Weight)) + } + fn transfer_fungible() -> Weight { + (170_749_000 as Weight) + .saturating_add(T::DbWeight::get().reads(11 as Weight)) + .saturating_add(T::DbWeight::get().writes(7 as Weight)) + } + fn transfer_refungible() -> Weight { + (35_949_000 as Weight) + .saturating_add(T::DbWeight::get().reads(10 as Weight)) + .saturating_add(T::DbWeight::get().writes(7 as Weight)) + } + fn approve_nft() -> Weight { + (169_825_000 as Weight) + .saturating_add(T::DbWeight::get().reads(9 as Weight)) + .saturating_add(T::DbWeight::get().writes(4 as Weight)) + } + fn transfer_from_nft() -> Weight { + (197_912_000 as Weight) + .saturating_add(T::DbWeight::get().reads(15 as Weight)) + .saturating_add(T::DbWeight::get().writes(11 as Weight)) + } + fn transfer_from_fungible() -> Weight { + (183_789_000 as Weight) + .saturating_add(T::DbWeight::get().reads(12 as Weight)) + .saturating_add(T::DbWeight::get().writes(8 as Weight)) + } + fn transfer_from_refungible() -> Weight { + (37_149_000 as Weight) + .saturating_add(T::DbWeight::get().reads(11 as Weight)) + .saturating_add(T::DbWeight::get().writes(8 as Weight)) + } + fn set_offchain_schema(_b: u32, ) -> Weight { + (6_435_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn set_const_on_chain_schema(_b: u32, ) -> Weight { + (6_646_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn set_variable_on_chain_schema(_b: u32, ) -> Weight { + (6_542_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn set_variable_meta_data_nft(_b: u32, ) -> Weight { + (14_697_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn set_schema_version() -> Weight { + (6_566_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + fn set_collection_limits() -> Weight { + (6_349_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } +} + +// For backwards compatibility and tests +impl WeightInfo for () { + fn create_collection() -> Weight { + (25_851_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(8 as Weight)) + .saturating_add(RocksDbWeight::get().writes(6 as Weight)) + } + fn destroy_collection() -> Weight { + (28_737_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(2 as Weight)) + .saturating_add(RocksDbWeight::get().writes(4 as Weight)) + } + fn add_to_white_list() -> Weight { + (6_237_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(1 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + } + fn remove_from_white_list() -> Weight { + (6_252_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(1 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + } + fn set_public_access_mode() -> Weight { + (6_691_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(1 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + } + fn set_mint_permission() -> Weight { + (6_630_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(1 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + } + fn change_collection_owner() -> Weight { + (6_521_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(1 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + } + fn add_collection_admin() -> Weight { + (8_057_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(2 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + } + fn remove_collection_admin() -> Weight { + (8_307_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(2 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + } + fn set_collection_sponsor() -> Weight { + (6_484_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(1 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + } + fn confirm_sponsorship() -> Weight { + (6_530_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(1 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + } + fn remove_collection_sponsor() -> Weight { + (6_733_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(1 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + } + fn create_item_nft(_b: u32, ) -> Weight { + (167_909_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(11 as Weight)) + .saturating_add(RocksDbWeight::get().writes(8 as Weight)) + } + fn create_item_fungible() -> Weight { + (22_331_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(9 as Weight)) + .saturating_add(RocksDbWeight::get().writes(4 as Weight)) + } + fn create_item_refungible(_b: u32, ) -> Weight { + (26_293_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(9 as Weight)) + .saturating_add(RocksDbWeight::get().writes(7 as Weight)) + } + fn burn_item_nft() -> Weight { + (32_237_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(9 as Weight)) + .saturating_add(RocksDbWeight::get().writes(7 as Weight)) + } + fn transfer_nft() -> Weight { + (192_578_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(14 as Weight)) + .saturating_add(RocksDbWeight::get().writes(10 as Weight)) + } + fn transfer_fungible() -> Weight { + (170_749_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(11 as Weight)) + .saturating_add(RocksDbWeight::get().writes(7 as Weight)) + } + fn transfer_refungible() -> Weight { + (35_949_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(10 as Weight)) + .saturating_add(RocksDbWeight::get().writes(7 as Weight)) + } + fn approve_nft() -> Weight { + (169_825_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(9 as Weight)) + .saturating_add(RocksDbWeight::get().writes(4 as Weight)) + } + fn transfer_from_nft() -> Weight { + (197_912_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(15 as Weight)) + .saturating_add(RocksDbWeight::get().writes(11 as Weight)) + } + fn transfer_from_fungible() -> Weight { + (183_789_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(12 as Weight)) + .saturating_add(RocksDbWeight::get().writes(8 as Weight)) + } + fn transfer_from_refungible() -> Weight { + (37_149_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(11 as Weight)) + .saturating_add(RocksDbWeight::get().writes(8 as Weight)) + } + fn set_offchain_schema(_b: u32, ) -> Weight { + (6_435_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(1 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + } + fn set_const_on_chain_schema(_b: u32, ) -> Weight { + (6_646_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(1 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + } + fn set_variable_on_chain_schema(_b: u32, ) -> Weight { + (6_542_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(1 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + } + fn set_variable_meta_data_nft(_b: u32, ) -> Weight { + (14_697_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(2 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + } + fn set_schema_version() -> Weight { + (6_566_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(1 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + } + fn set_collection_limits() -> Weight { + (6_349_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(1 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + } +} \ No newline at end of file --- a/primitives/nft/src/lib.rs +++ b/primitives/nft/src/lib.rs @@ -55,6 +55,10 @@ pub const VARIABLE_ON_CHAIN_SCHEMA_LIMIT: u32 = 1024; pub const CONST_ON_CHAIN_SCHEMA_LIMIT: u32 = 1024; +pub const MAX_COLLECTION_NAME_LENGTH: usize = 64; +pub const MAX_COLLECTION_DESCRIPTION_LENGTH: usize = 256; +pub const MAX_TOKEN_PREFIX_LENGTH: usize = 16; + /// How much items can be created per single /// create_many call pub const MAX_ITEMS_PER_BATCH: u32 = 200; --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -119,8 +119,6 @@ /// Digest item type. pub type DigestItem = generic::DigestItem; -mod nft_weights; - /// Opaque types. These are used by the CLI to instantiate machinery that don't need to know /// the specifics of the runtime. They can then be made to be agnostic over specific formats /// of data like extrinsics, allowing for them to continue syncing the network through upgrades @@ -695,7 +693,7 @@ /// Used for the pallet nft in `./nft.rs` impl pallet_nft::Config for Runtime { type Event = Event; - type WeightInfo = nft_weights::WeightInfo; + type WeightInfo = pallet_nft::weights::SubstrateWeight; type EvmBackwardsAddressMapping = pallet_nft::MapBackwardsAddressTruncated; type EvmAddressMapping = HashedAddressMapping; --- a/runtime/src/nft_weights.rs +++ /dev/null @@ -1,156 +0,0 @@ -// -// This file is subject to the terms and conditions defined in -// file 'LICENSE', which is part of this source code package. -// - -use frame_support::weights::{Weight, constants::RocksDbWeight as DbWeight}; - -pub struct WeightInfo; -impl pallet_nft::WeightInfo for WeightInfo { - fn create_collection() -> Weight { - 70_000_000_u64 - .saturating_add(DbWeight::get().reads(7_u64)) - .saturating_add(DbWeight::get().writes(5_u64)) - } - fn destroy_collection() -> Weight { - 90_000_000_u64 - .saturating_add(DbWeight::get().reads(2_u64)) - .saturating_add(DbWeight::get().writes(5_u64)) - } - fn add_to_white_list() -> Weight { - 30_000_000_u64 - .saturating_add(DbWeight::get().reads(3_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn remove_from_white_list() -> Weight { - 35_000_000_u64 - .saturating_add(DbWeight::get().reads(3_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn set_public_access_mode() -> Weight { - 27_000_000_u64 - .saturating_add(DbWeight::get().reads(1_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn set_mint_permission() -> Weight { - 27_000_000_u64 - .saturating_add(DbWeight::get().reads(1_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn change_collection_owner() -> Weight { - 27_000_000_u64 - .saturating_add(DbWeight::get().reads(1_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn add_collection_admin() -> Weight { - 32_000_000_u64 - .saturating_add(DbWeight::get().reads(3_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn remove_collection_admin() -> Weight { - 50_000_000_u64 - .saturating_add(DbWeight::get().reads(2_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn set_collection_sponsor() -> Weight { - 32_000_000_u64 - .saturating_add(DbWeight::get().reads(2_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn confirm_sponsorship() -> Weight { - 22_000_000_u64 - .saturating_add(DbWeight::get().reads(1_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn remove_collection_sponsor() -> Weight { - 24_000_000_u64 - .saturating_add(DbWeight::get().reads(1_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn create_item(s: usize) -> Weight { - 130_000_000_u64 - .saturating_add(2135_u64.saturating_mul(s as Weight).saturating_mul(500_u64)) // 500 is temparary multiplier, fee for storage - .saturating_add(DbWeight::get().reads(10_u64)) - .saturating_add(DbWeight::get().writes(8_u64)) - } - fn burn_item() -> Weight { - 170_000_000_u64 - .saturating_add(DbWeight::get().reads(9_u64)) - .saturating_add(DbWeight::get().writes(7_u64)) - } - fn transfer() -> Weight { - 125_000_000_u64 - .saturating_add(DbWeight::get().reads(7_u64)) - .saturating_add(DbWeight::get().writes(7_u64)) - } - fn approve() -> Weight { - 45_000_000_u64 - .saturating_add(DbWeight::get().reads(3_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn transfer_from() -> Weight { - 150_000_000_u64 - .saturating_add(DbWeight::get().reads(9_u64)) - .saturating_add(DbWeight::get().writes(8_u64)) - } - fn set_offchain_schema() -> Weight { - 33_000_000_u64 - .saturating_add(DbWeight::get().reads(2_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn set_const_on_chain_schema() -> Weight { - 11_100_000_u64 - .saturating_add(DbWeight::get().reads(2_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn set_variable_on_chain_schema() -> Weight { - 11_100_000_u64 - .saturating_add(DbWeight::get().reads(2_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn set_variable_meta_data() -> Weight { - 17_500_000_u64 - .saturating_add(DbWeight::get().reads(2_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn enable_contract_sponsoring() -> Weight { - 13_000_000_u64 - .saturating_add(DbWeight::get().reads(1_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn set_schema_version() -> Weight { - 8_500_000_u64 - .saturating_add(DbWeight::get().reads(2_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } - fn set_contract_sponsoring_rate_limit() -> Weight { - 3_500_000_u64 - .saturating_add(DbWeight::get().reads(0_u64)) - .saturating_add(DbWeight::get().writes(2_u64)) - } - fn set_variable_meta_data_sponsoring_rate_limit() -> Weight { - 3_500_000_u64 - .saturating_add(DbWeight::get().reads(1_u64)) - .saturating_add(DbWeight::get().writes(2_u64)) - } - fn toggle_contract_white_list() -> Weight { - 3_000_000_u64 - .saturating_add(DbWeight::get().reads(0_u64)) - .saturating_add(DbWeight::get().writes(2_u64)) - } - fn add_to_contract_white_list() -> Weight { - 3_000_000_u64 - .saturating_add(DbWeight::get().reads(0_u64)) - .saturating_add(DbWeight::get().writes(2_u64)) - } - fn remove_from_contract_white_list() -> Weight { - 3_200_000_u64 - .saturating_add(DbWeight::get().reads(0_u64)) - .saturating_add(DbWeight::get().writes(2_u64)) - } - fn set_collection_limits() -> Weight { - 8_900_000_u64 - .saturating_add(DbWeight::get().reads(2_u64)) - .saturating_add(DbWeight::get().writes(1_u64)) - } -} -- gitstuff