difftreelog
fix benchmarks rft, fix some warnings
in: master
2 files changed
pallets/nonfungible/src/benchmarking.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/benchmarking.rs
+++ b/pallets/nonfungible/src/benchmarking.rs
@@ -228,7 +228,7 @@
owner: sub; collection: collection(owner); owner: cross_from_sub;
operator: cross_sub;
};
- }: {<Pallet<T>>::set_allowance_for_all(&collection, &owner, &operator, true)}
+ }: {<Pallet<T>>::set_allowance_for_all(&collection, &owner, &operator, true)?}
allowance_for_all {
bench_init!{
pallets/refungible/src/benchmarking.rsdiffbeforeafterboth1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617use super::*;18use crate::{Pallet, Config, RefungibleHandle};1920use core::convert::TryInto;21use core::iter::IntoIterator;22use frame_benchmarking::{benchmarks, account};23use pallet_common::{24 bench_init,25 benchmarking::{create_collection_raw, property_key, property_value, create_data},26};27use sp_core::H160;28use sp_std::prelude::*;29use up_data_structs::{30 CollectionMode, MAX_ITEMS_PER_BATCH, MAX_PROPERTIES_PER_ITEM, CUSTOM_DATA_LIMIT,31 budget::Unlimited,32};3334const SEED: u32 = 1;3536fn create_max_item_data<CrossAccountId: Ord>(37 users: impl IntoIterator<Item = (CrossAccountId, u128)>,38) -> CreateItemData<CrossAccountId> {39 CreateItemData {40 users: users41 .into_iter()42 .collect::<BTreeMap<_, _>>()43 .try_into()44 .unwrap(),45 properties: Default::default(),46 }47}4849fn create_max_item<T: Config>(50 collection: &RefungibleHandle<T>,51 sender: &T::CrossAccountId,52 users: impl IntoIterator<Item = (T::CrossAccountId, u128)>,53) -> Result<TokenId, DispatchError> {54 let data: CreateItemData<T::CrossAccountId> = create_max_item_data(users);55 <Pallet<T>>::create_item(&collection, sender, data, &Unlimited)?;56 Ok(TokenId(<TokensMinted<T>>::get(&collection.id)))57}5859fn create_collection<T: Config>(60 owner: T::CrossAccountId,61) -> Result<RefungibleHandle<T>, DispatchError> {62 create_collection_raw(63 owner,64 CollectionMode::ReFungible,65 |owner: T::CrossAccountId, data| {66 <Pallet<T>>::init_collection(owner.clone(), owner, data, Default::default())67 },68 RefungibleHandle::cast,69 )70}7172benchmarks! {73 create_item {74 bench_init!{75 owner: sub; collection: collection(owner);76 sender: cross_from_sub(owner); to: cross_sub;77 };78 }: {create_max_item(&collection, &sender, [(to.clone(), 200)])?}7980 create_multiple_items {81 let b in 0..MAX_ITEMS_PER_BATCH;82 bench_init!{83 owner: sub; collection: collection(owner);84 sender: cross_from_sub(owner); to: cross_sub;85 };86 let data = (0..b).map(|_| create_max_item_data([(to.clone(), 200)])).collect();87 }: {<Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?}8889 create_multiple_items_ex_multiple_items {90 let b in 0..MAX_ITEMS_PER_BATCH;91 bench_init!{92 owner: sub; collection: collection(owner);93 sender: cross_from_sub(owner);94 };95 let data = (0..b).map(|t| {96 bench_init!(to: cross_sub(t););97 create_max_item_data([(to, 200)])98 }).collect();99 }: {<Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?}100101 create_multiple_items_ex_multiple_owners {102 let b in 0..MAX_ITEMS_PER_BATCH;103 bench_init!{104 owner: sub; collection: collection(owner);105 sender: cross_from_sub(owner);106 };107 let data = vec![create_max_item_data((0..b).map(|u| {108 bench_init!(to: cross_sub(u););109 (to, 200)110 }))].try_into().unwrap();111 }: {<Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?}112113 // Other user left, token data is kept114 burn_item_partial {115 bench_init!{116 owner: sub; collection: collection(owner);117 sender: cross_from_sub(owner); burner: cross_sub; another_owner: cross_sub;118 };119 let item = create_max_item(&collection, &sender, [(burner.clone(), 200), (another_owner, 200)])?;120 }: {<Pallet<T>>::burn(&collection, &burner, item, 200)?}121 // No users remaining, token is destroyed122 burn_item_fully {123 bench_init!{124 owner: sub; collection: collection(owner);125 sender: cross_from_sub(owner); burner: cross_sub; another_owner: cross_sub;126 };127 let item = create_max_item(&collection, &sender, [(burner.clone(), 200)])?;128 }: {<Pallet<T>>::burn(&collection, &burner, item, 200)?}129130 transfer_normal {131 bench_init!{132 owner: sub; collection: collection(owner);133 sender: cross_from_sub(owner); receiver: cross_sub;134 };135 let item = create_max_item(&collection, &sender, [(sender.clone(), 200), (receiver.clone(), 200)])?;136 }: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 100, &Unlimited)?}137 // Target account is created138 transfer_creating {139 bench_init!{140 owner: sub; collection: collection(owner);141 sender: cross_from_sub(owner); receiver: cross_sub;142 };143 let item = create_max_item(&collection, &sender, [(sender.clone(), 200)])?;144 }: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 100, &Unlimited)?}145 // Source account is destroyed146 transfer_removing {147 bench_init!{148 owner: sub; collection: collection(owner);149 sender: cross_from_sub(owner); receiver: cross_sub;150 };151 let item = create_max_item(&collection, &sender, [(sender.clone(), 200), (receiver.clone(), 200)])?;152 }: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 200, &Unlimited)?}153 // Source account destroyed, target created154 transfer_creating_removing {155 bench_init!{156 owner: sub; collection: collection(owner);157 sender: cross_from_sub(owner); receiver: cross_sub;158 };159 let item = create_max_item(&collection, &sender, [(sender.clone(), 200)])?;160 }: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 200, &Unlimited)?}161162 approve {163 bench_init!{164 owner: sub; collection: collection(owner);165 owner: cross_from_sub; sender: cross_sub; spender: cross_sub;166 };167 let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;168 }: {<Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?}169170 transfer_from_normal {171 bench_init!{172 owner: sub; collection: collection(owner);173 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;174 };175 let item = create_max_item(&collection, &owner, [(sender.clone(), 200), (receiver.clone(), 200)])?;176 <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?;177 }: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 100, &Unlimited)?}178 // Target account is created179 transfer_from_creating {180 bench_init!{181 owner: sub; collection: collection(owner);182 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;183 };184 let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;185 <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?;186 }: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 100, &Unlimited)?}187 // Source account is destroyed188 transfer_from_removing {189 bench_init!{190 owner: sub; collection: collection(owner);191 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;192 };193 let item = create_max_item(&collection, &owner, [(sender.clone(), 200), (receiver.clone(), 200)])?;194 <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 200)?;195 }: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 200, &Unlimited)?}196 // Source account destroyed, target created197 transfer_from_creating_removing {198 bench_init!{199 owner: sub; collection: collection(owner);200 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;201 };202 let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;203 <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 200)?;204 }: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 200, &Unlimited)?}205206 // Both source account and token is destroyed207 burn_from {208 bench_init!{209 owner: sub; collection: collection(owner);210 owner: cross_from_sub; sender: cross_sub; burner: cross_sub;211 };212 let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;213 <Pallet<T>>::set_allowance(&collection, &sender, &burner, item, 200)?;214 }: {<Pallet<T>>::burn_from(&collection, &burner, &sender, item, 200, &Unlimited)?}215216 set_token_property_permissions {217 let b in 0..MAX_PROPERTIES_PER_ITEM;218 bench_init!{219 owner: sub; collection: collection(owner);220 owner: cross_from_sub;221 };222 let perms = (0..b).map(|k| PropertyKeyPermission {223 key: property_key(k as usize),224 permission: PropertyPermission {225 mutable: false,226 collection_admin: false,227 token_owner: false,228 },229 }).collect::<Vec<_>>();230 }: {<Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?}231232 set_token_properties {233 let b in 0..MAX_PROPERTIES_PER_ITEM;234 bench_init!{235 owner: sub; collection: collection(owner);236 owner: cross_from_sub;237 };238 let perms = (0..b).map(|k| PropertyKeyPermission {239 key: property_key(k as usize),240 permission: PropertyPermission {241 mutable: false,242 collection_admin: true,243 token_owner: true,244 },245 }).collect::<Vec<_>>();246 <Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;247 let props = (0..b).map(|k| Property {248 key: property_key(k as usize),249 value: property_value(),250 }).collect::<Vec<_>>();251 let item = create_max_item(&collection, &owner, [(owner.clone(), 200)])?;252 }: {<Pallet<T>>::set_token_properties(&collection, &owner, item, props.into_iter(), false, &Unlimited)?}253254 delete_token_properties {255 let b in 0..MAX_PROPERTIES_PER_ITEM;256 bench_init!{257 owner: sub; collection: collection(owner);258 owner: cross_from_sub;259 };260 let perms = (0..b).map(|k| PropertyKeyPermission {261 key: property_key(k as usize),262 permission: PropertyPermission {263 mutable: true,264 collection_admin: true,265 token_owner: true,266 },267 }).collect::<Vec<_>>();268 <Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;269 let props = (0..b).map(|k| Property {270 key: property_key(k as usize),271 value: property_value(),272 }).collect::<Vec<_>>();273 let item = create_max_item(&collection, &owner, [(owner.clone(), 200)])?;274 <Pallet<T>>::set_token_properties(&collection, &owner, item, props.into_iter(), false, &Unlimited)?;275 let to_delete = (0..b).map(|k| property_key(k as usize)).collect::<Vec<_>>();276 }: {<Pallet<T>>::delete_token_properties(&collection, &owner, item, to_delete.into_iter(), &Unlimited)?}277278 repartition_item {279 bench_init!{280 owner: sub; collection: collection(owner);281 sender: cross_from_sub(owner); owner: cross_sub;282 };283 let item = create_max_item(&collection, &sender, [(owner.clone(), 100)])?;284 }: {<Pallet<T>>::repartition(&collection, &owner, item, 200)?}285286 token_owner {287 bench_init!{288 owner: sub; collection: collection(owner);289 sender: cross_from_sub(owner); owner: cross_sub;290 };291 let item = create_max_item(&collection, &sender, [(owner.clone(), 100)])?;292 }: {<Pallet<T>>::token_owner(collection.id, item)}293294 set_allowance_for_all {295 bench_init!{296 owner: sub; collection: collection(owner); owner: cross_from_sub;297 operator: cross_sub;298 };299 }: {<Pallet<T>>::set_allowance_for_all(&collection, &owner, &operator, true)}300301 allowance_for_all {302 bench_init!{303 owner: sub; collection: collection(owner); owner: cross_from_sub;304 operator: cross_sub;305 };306 }: {<Pallet<T>>::allowance_for_all(&collection, &owner, &operator)}307308 repair_item {309 bench_init!{310 owner: sub; collection: collection(owner);311 owner: cross_from_sub;312 };313 let item = create_max_item(&collection, &owner, [(owner.clone(), 100)])?;314 }: {<Pallet<T>>::repair_item(&collection, item)?}315}1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617use super::*;18use crate::{Pallet, Config, RefungibleHandle};1920use core::convert::TryInto;21use core::iter::IntoIterator;22use frame_benchmarking::{benchmarks, account};23use pallet_common::{24 bench_init,25 benchmarking::{create_collection_raw, property_key, property_value},26};27use sp_std::prelude::*;28use up_data_structs::{CollectionMode, MAX_ITEMS_PER_BATCH, MAX_PROPERTIES_PER_ITEM, budget::Unlimited};2930const SEED: u32 = 1;3132fn create_max_item_data<T: Config>(33 users: impl IntoIterator<Item = (T::CrossAccountId, u128)>,34) -> CreateItemData<T> {35 CreateItemData::<T> {36 users: users37 .into_iter()38 .collect::<BTreeMap<_, _>>()39 .try_into()40 .unwrap(),41 properties: Default::default(),42 }43}4445fn create_max_item<T: Config>(46 collection: &RefungibleHandle<T>,47 sender: &T::CrossAccountId,48 users: impl IntoIterator<Item = (T::CrossAccountId, u128)>,49) -> Result<TokenId, DispatchError> {50 let data: CreateItemData<T> = create_max_item_data::<T>(users);51 <Pallet<T>>::create_item(&collection, sender, data, &Unlimited)?;52 Ok(TokenId(<TokensMinted<T>>::get(&collection.id)))53}5455fn create_collection<T: Config>(56 owner: T::CrossAccountId,57) -> Result<RefungibleHandle<T>, DispatchError> {58 create_collection_raw(59 owner,60 CollectionMode::ReFungible,61 |owner: T::CrossAccountId, data| {62 <Pallet<T>>::init_collection(owner.clone(), owner, data, Default::default())63 },64 RefungibleHandle::cast,65 )66}6768benchmarks! {69 create_item {70 bench_init!{71 owner: sub; collection: collection(owner);72 sender: cross_from_sub(owner); to: cross_sub;73 };74 }: {create_max_item(&collection, &sender, [(to.clone(), 200)])?}7576 create_multiple_items {77 let b in 0..MAX_ITEMS_PER_BATCH;78 bench_init!{79 owner: sub; collection: collection(owner);80 sender: cross_from_sub(owner); to: cross_sub;81 };82 let data = (0..b).map(|_| create_max_item_data::<T>([(to.clone(), 200)])).collect();83 }: {<Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?}8485 create_multiple_items_ex_multiple_items {86 let b in 0..MAX_ITEMS_PER_BATCH;87 bench_init!{88 owner: sub; collection: collection(owner);89 sender: cross_from_sub(owner);90 };91 let data = (0..b).map(|t| {92 bench_init!(to: cross_sub(t););93 create_max_item_data::<T>([(to, 200)])94 }).collect();95 }: {<Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?}9697 create_multiple_items_ex_multiple_owners {98 let b in 0..MAX_ITEMS_PER_BATCH;99 bench_init!{100 owner: sub; collection: collection(owner);101 sender: cross_from_sub(owner);102 };103 let data = vec![create_max_item_data::<T>((0..b).map(|u| {104 bench_init!(to: cross_sub(u););105 (to, 200)106 }))].try_into().unwrap();107 }: {<Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?}108109 // Other user left, token data is kept110 burn_item_partial {111 bench_init!{112 owner: sub; collection: collection(owner);113 sender: cross_from_sub(owner); burner: cross_sub; another_owner: cross_sub;114 };115 let item = create_max_item(&collection, &sender, [(burner.clone(), 200), (another_owner, 200)])?;116 }: {<Pallet<T>>::burn(&collection, &burner, item, 200)?}117 // No users remaining, token is destroyed118 burn_item_fully {119 bench_init!{120 owner: sub; collection: collection(owner);121 sender: cross_from_sub(owner); burner: cross_sub; another_owner: cross_sub;122 };123 let item = create_max_item(&collection, &sender, [(burner.clone(), 200)])?;124 }: {<Pallet<T>>::burn(&collection, &burner, item, 200)?}125126 transfer_normal {127 bench_init!{128 owner: sub; collection: collection(owner);129 sender: cross_from_sub(owner); receiver: cross_sub;130 };131 let item = create_max_item(&collection, &sender, [(sender.clone(), 200), (receiver.clone(), 200)])?;132 }: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 100, &Unlimited)?}133 // Target account is created134 transfer_creating {135 bench_init!{136 owner: sub; collection: collection(owner);137 sender: cross_from_sub(owner); receiver: cross_sub;138 };139 let item = create_max_item(&collection, &sender, [(sender.clone(), 200)])?;140 }: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 100, &Unlimited)?}141 // Source account is destroyed142 transfer_removing {143 bench_init!{144 owner: sub; collection: collection(owner);145 sender: cross_from_sub(owner); receiver: cross_sub;146 };147 let item = create_max_item(&collection, &sender, [(sender.clone(), 200), (receiver.clone(), 200)])?;148 }: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 200, &Unlimited)?}149 // Source account destroyed, target created150 transfer_creating_removing {151 bench_init!{152 owner: sub; collection: collection(owner);153 sender: cross_from_sub(owner); receiver: cross_sub;154 };155 let item = create_max_item(&collection, &sender, [(sender.clone(), 200)])?;156 }: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 200, &Unlimited)?}157158 approve {159 bench_init!{160 owner: sub; collection: collection(owner);161 owner: cross_from_sub; sender: cross_sub; spender: cross_sub;162 };163 let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;164 }: {<Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?}165166 transfer_from_normal {167 bench_init!{168 owner: sub; collection: collection(owner);169 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;170 };171 let item = create_max_item(&collection, &owner, [(sender.clone(), 200), (receiver.clone(), 200)])?;172 <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?;173 }: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 100, &Unlimited)?}174 // Target account is created175 transfer_from_creating {176 bench_init!{177 owner: sub; collection: collection(owner);178 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;179 };180 let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;181 <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?;182 }: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 100, &Unlimited)?}183 // Source account is destroyed184 transfer_from_removing {185 bench_init!{186 owner: sub; collection: collection(owner);187 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;188 };189 let item = create_max_item(&collection, &owner, [(sender.clone(), 200), (receiver.clone(), 200)])?;190 <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 200)?;191 }: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 200, &Unlimited)?}192 // Source account destroyed, target created193 transfer_from_creating_removing {194 bench_init!{195 owner: sub; collection: collection(owner);196 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;197 };198 let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;199 <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 200)?;200 }: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 200, &Unlimited)?}201202 // Both source account and token is destroyed203 burn_from {204 bench_init!{205 owner: sub; collection: collection(owner);206 owner: cross_from_sub; sender: cross_sub; burner: cross_sub;207 };208 let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;209 <Pallet<T>>::set_allowance(&collection, &sender, &burner, item, 200)?;210 }: {<Pallet<T>>::burn_from(&collection, &burner, &sender, item, 200, &Unlimited)?}211212 set_token_property_permissions {213 let b in 0..MAX_PROPERTIES_PER_ITEM;214 bench_init!{215 owner: sub; collection: collection(owner);216 owner: cross_from_sub;217 };218 let perms = (0..b).map(|k| PropertyKeyPermission {219 key: property_key(k as usize),220 permission: PropertyPermission {221 mutable: false,222 collection_admin: false,223 token_owner: false,224 },225 }).collect::<Vec<_>>();226 }: {<Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?}227228 set_token_properties {229 let b in 0..MAX_PROPERTIES_PER_ITEM;230 bench_init!{231 owner: sub; collection: collection(owner);232 owner: cross_from_sub;233 };234 let perms = (0..b).map(|k| PropertyKeyPermission {235 key: property_key(k as usize),236 permission: PropertyPermission {237 mutable: false,238 collection_admin: true,239 token_owner: true,240 },241 }).collect::<Vec<_>>();242 <Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;243 let props = (0..b).map(|k| Property {244 key: property_key(k as usize),245 value: property_value(),246 }).collect::<Vec<_>>();247 let item = create_max_item(&collection, &owner, [(owner.clone(), 200)])?;248 }: {<Pallet<T>>::set_token_properties(&collection, &owner, item, props.into_iter(), false, &Unlimited)?}249250 delete_token_properties {251 let b in 0..MAX_PROPERTIES_PER_ITEM;252 bench_init!{253 owner: sub; collection: collection(owner);254 owner: cross_from_sub;255 };256 let perms = (0..b).map(|k| PropertyKeyPermission {257 key: property_key(k as usize),258 permission: PropertyPermission {259 mutable: true,260 collection_admin: true,261 token_owner: true,262 },263 }).collect::<Vec<_>>();264 <Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;265 let props = (0..b).map(|k| Property {266 key: property_key(k as usize),267 value: property_value(),268 }).collect::<Vec<_>>();269 let item = create_max_item(&collection, &owner, [(owner.clone(), 200)])?;270 <Pallet<T>>::set_token_properties(&collection, &owner, item, props.into_iter(), false, &Unlimited)?;271 let to_delete = (0..b).map(|k| property_key(k as usize)).collect::<Vec<_>>();272 }: {<Pallet<T>>::delete_token_properties(&collection, &owner, item, to_delete.into_iter(), &Unlimited)?}273274 repartition_item {275 bench_init!{276 owner: sub; collection: collection(owner);277 sender: cross_from_sub(owner); owner: cross_sub;278 };279 let item = create_max_item(&collection, &sender, [(owner.clone(), 100)])?;280 }: {<Pallet<T>>::repartition(&collection, &owner, item, 200)?}281282 token_owner {283 bench_init!{284 owner: sub; collection: collection(owner);285 sender: cross_from_sub(owner); owner: cross_sub;286 };287 let item = create_max_item(&collection, &sender, [(owner.clone(), 100)])?;288 }: {<Pallet<T>>::token_owner(collection.id, item)}289290 set_allowance_for_all {291 bench_init!{292 owner: sub; collection: collection(owner); owner: cross_from_sub;293 operator: cross_sub;294 };295 }: {<Pallet<T>>::set_allowance_for_all(&collection, &owner, &operator, true)?}296297 allowance_for_all {298 bench_init!{299 owner: sub; collection: collection(owner); owner: cross_from_sub;300 operator: cross_sub;301 };302 }: {<Pallet<T>>::allowance_for_all(&collection, &owner, &operator)}303304 repair_item {305 bench_init!{306 owner: sub; collection: collection(owner);307 owner: cross_from_sub;308 };309 let item = create_max_item(&collection, &owner, [(owner.clone(), 100)])?;310 }: {<Pallet<T>>::repair_item(&collection, item)?}311}