1#[cfg(feature = "runtime-benchmarks")]23 use super::*;4 use sp_std::prelude::*;5 use frame_system::RawOrigin;6 7 use frame_benchmarking::{benchmarks, account, whitelisted_caller}; 8 use crate::Module as Nft;910 const SEED: u32 = 1;1112 benchmarks! {1314 _ {}1516 create_collection {17 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();18 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();19 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();20 let mode: CollectionMode = CollectionMode::NFT(2000);21 let caller: T::AccountId = account("caller", 0, SEED);22 }: create_collection(RawOrigin::Signed(caller.clone()), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode)23 verify {24 assert_eq!(Nft::<T>::collection(2).owner, caller);25 }2627 destroy_collection {28 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();29 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();30 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();31 let mode: CollectionMode = CollectionMode::NFT(2000);32 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());33 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;34 }: destroy_collection(RawOrigin::Signed(caller.clone()), 2)3536 add_to_white_list {37 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();38 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();39 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();40 let mode: CollectionMode = CollectionMode::NFT(2000);41 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());42 let whitelist_account: T::AccountId = account("admin", 0, SEED);43 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;44 }: add_to_white_list(RawOrigin::Signed(caller.clone()), 2, whitelist_account)4546 remove_from_white_list {47 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();48 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();49 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();50 let mode: CollectionMode = CollectionMode::NFT(2000);51 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());52 let whitelist_account: T::AccountId = account("admin", 0, SEED);53 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;54 Nft::<T>::add_to_white_list(RawOrigin::Signed(caller.clone()).into(), 2, whitelist_account.clone())?;55 }: remove_from_white_list(RawOrigin::Signed(caller.clone()), 2, whitelist_account)5657 set_public_access_mode {58 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();59 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();60 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();61 let mode: CollectionMode = CollectionMode::NFT(2000);62 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());63 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;64 }: set_public_access_mode(RawOrigin::Signed(caller.clone()), 2, AccessMode::WhiteList)6566 set_mint_permission {67 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();68 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();69 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();70 let mode: CollectionMode = CollectionMode::NFT(2000);71 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());72 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;73 }: set_mint_permission(RawOrigin::Signed(caller.clone()), 2, true)7475 change_collection_owner {76 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();77 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();78 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();79 let mode: CollectionMode = CollectionMode::NFT(2000);80 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());81 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;82 let new_owner: T::AccountId = account("admin", 0, SEED);83 }: change_collection_owner(RawOrigin::Signed(caller.clone()), 2, new_owner)8485 add_collection_admin {86 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();87 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();88 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();89 let mode: CollectionMode = CollectionMode::NFT(2000);90 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());91 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;92 let new_admin: T::AccountId = account("admin", 0, SEED);93 }: add_collection_admin(RawOrigin::Signed(caller.clone()), 2, new_admin)9495 remove_collection_admin {96 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();97 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();98 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();99 let mode: CollectionMode = CollectionMode::NFT(2000);100 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());101 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;102 let new_admin: T::AccountId = account("admin", 0, SEED);103 Nft::<T>::add_collection_admin(RawOrigin::Signed(caller.clone()).into(), 2, new_admin.clone())?;104 }: remove_collection_admin(RawOrigin::Signed(caller.clone()), 2, new_admin)105106 set_collection_sponsor {107 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();108 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();109 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();110 let mode: CollectionMode = CollectionMode::NFT(2000);111 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());112 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;113 }: set_collection_sponsor(RawOrigin::Signed(caller.clone()), 2, caller.clone())114115 confirm_sponsorship {116 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();117 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();118 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();119 let mode: CollectionMode = CollectionMode::NFT(2000);120 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());121 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;122 Nft::<T>::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone())?;123 }: confirm_sponsorship(RawOrigin::Signed(caller.clone()), 2)124125 remove_collection_sponsor {126 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();127 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();128 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();129 let mode: CollectionMode = CollectionMode::NFT(2000);130 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());131 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;132 Nft::<T>::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone())?;133 Nft::<T>::confirm_sponsorship(RawOrigin::Signed(caller.clone()).into(), 2)?;134 }: remove_collection_sponsor(RawOrigin::Signed(caller.clone()), 2)135136 137 create_item_nft {138 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();139 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();140 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();141 let mode: CollectionMode = CollectionMode::NFT(2000);142 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());143 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;144145 }: create_item(RawOrigin::Signed(caller.clone()), 2, [1,2,3].to_vec(), caller.clone())146147 #[extra]148 create_item_nft_large {149 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();150 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();151 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();152 let mode: CollectionMode = CollectionMode::NFT(2000);153 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());154 let mut item_large: Vec<u8> = Vec::new(); 155 for i in 0..1998 {156 item_large.push(10);157 }158 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;159160 }: create_item(RawOrigin::Signed(caller.clone()), 2, item_large, caller.clone())161162 163 create_item_fungible {164 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();165 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();166 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();167 let mode: CollectionMode = CollectionMode::Fungible(3);168 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());169 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;170171 }: create_item(RawOrigin::Signed(caller.clone()), 2, [].to_vec(), caller.clone())172173 174 create_item_refungible {175 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();176 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();177 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();178 let mode: CollectionMode = CollectionMode::ReFungible(3, 3);179 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());180 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;181182 }: create_item(RawOrigin::Signed(caller.clone()), 2, [1,2,3].to_vec(), caller.clone())183184 burn_item {185 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();186 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();187 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();188 let mode: CollectionMode = CollectionMode::NFT(2000);189 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());190 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;191 Nft::<T>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, [1, 2, 3].to_vec(), caller.clone())?;192193 }: burn_item(RawOrigin::Signed(caller.clone()), 2, 1)194195 transfer_nft {196 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();197 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();198 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();199 let mode: CollectionMode = CollectionMode::NFT(2000);200 let recipient: T::AccountId = account("recipient", 0, SEED);201 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());202 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;203 Nft::<T>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, [1, 2, 3].to_vec(), caller.clone())?;204205 }: transfer(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1, 1)206 207 transfer_fungible {208 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();209 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();210 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();211 let mode: CollectionMode = CollectionMode::Fungible(3);212 let recipient: T::AccountId = account("recipient", 0, SEED);213 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());214 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;215 Nft::<T>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, [].to_vec(), caller.clone())?;216217 }: transfer(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1, 1)218219 transfer_refungible {220 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();221 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();222 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();223 let mode: CollectionMode = CollectionMode::ReFungible(3,3);224 let recipient: T::AccountId = account("recipient", 0, SEED);225 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());226 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;227 Nft::<T>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, [1,2,3].to_vec(), caller.clone())?;228229 }: transfer(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1, 1)230231 approve {232 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();233 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();234 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();235 let mode: CollectionMode = CollectionMode::ReFungible(3,3);236 let recipient: T::AccountId = account("recipient", 0, SEED);237 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());238 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;239 Nft::<T>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, [1,2,3].to_vec(), caller.clone())?;240241 }: approve(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1)242243 244 transfer_from_nft {245 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();246 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();247 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();248 let mode: CollectionMode = CollectionMode::NFT(300);249 let recipient: T::AccountId = account("recipient", 0, SEED);250 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());251 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;252 Nft::<T>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, [1,2,3].to_vec(), caller.clone())?;253 Nft::<T>::approve(RawOrigin::Signed(caller.clone()).into(), recipient.clone(), 2, 1)?;254255 }: transfer_from(RawOrigin::Signed(caller.clone()), caller.clone(), recipient.clone(), 2, 1, 1)256257 258 transfer_from_fungible {259 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();260 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();261 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();262 let mode: CollectionMode = CollectionMode::Fungible(3);263 let recipient: T::AccountId = account("recipient", 0, SEED);264 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());265 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;266 Nft::<T>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, [].to_vec(), caller.clone())?;267 Nft::<T>::approve(RawOrigin::Signed(caller.clone()).into(), recipient.clone(), 2, 1)?;268269 }: transfer_from(RawOrigin::Signed(caller.clone()), caller.clone(), recipient.clone(), 2, 1, 1)270271 272 transfer_from_refungible {273 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();274 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();275 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();276 let mode: CollectionMode = CollectionMode::ReFungible(3,3);277 let recipient: T::AccountId = account("recipient", 0, SEED);278 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());279 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;280 Nft::<T>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, [1,2,3].to_vec(), caller.clone())?;281 Nft::<T>::approve(RawOrigin::Signed(caller.clone()).into(), recipient.clone(), 2, 1)?;282283 }: transfer_from(RawOrigin::Signed(caller.clone()), caller.clone(), recipient.clone(), 2, 1, 1)284285 set_offchain_schema {286 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();287 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();288 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();289 let mode: CollectionMode = CollectionMode::ReFungible(3,3);290 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());291 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;292293 }: set_offchain_schema(RawOrigin::Signed(caller.clone()), 2, [1,2,3].to_vec())294 }