difftreelog
NFTPAR-56
in: master
3 files changed
pallets/nft/src/lib.rsdiffbeforeafterboth24pub struct CollectionType<AccountId> {24pub struct CollectionType<AccountId> {25 pub owner: AccountId,25 pub owner: AccountId,26 pub next_item_id: u64,26 pub next_item_id: u64,27 pub name: Vec<u16>, // 64 include null escape char28 pub description: Vec<u16>, // 256 include null escape char29 pub token_trefix: Vec<u8>, // 16 include null escape char27 pub custom_data_size: u32,30 pub custom_data_size: u32,28}31}293279 where82 where80 AccountId = <T as system::Trait>::AccountId,83 AccountId = <T as system::Trait>::AccountId,81 {84 {82 Created(u32, AccountId),85 Created(u64, AccountId),86 ItemCreated(u64),87 ItemDestroyed(u64, u64),83 }88 }84);89);859092 // this is needed only if you are using events in your pallet97 // this is needed only if you are using events in your pallet93 fn deposit_event() = default;98 fn deposit_event() = default;9495 // Initializing events96 // this is needed only if you are using events in your module97 // fn deposit_event<T>() = default;989999 // Create collection of NFT with given parameters100 // Create collection of NFT with given parameters100 //101 //107 // returns collection ID108 // returns collection ID108 #[weight = 0]109 #[weight = 0]109 pub fn create_collection(origin, custom_data_sz: u32) -> DispatchResult {110 pub fn create_collection( origin, 111 collection_name: Vec<u16>, 112 collection_description: Vec<u16>, 113 token_prefix: Vec<u8>, 114 custom_data_sz: u32) -> DispatchResult {115110 // Anyone can create a collection116 // Anyone can create a collection111 let who = ensure_signed(origin)?;117 let who = ensure_signed(origin)?;118119 // check params 120 let mut name = collection_name.to_vec();121 name.push(0);122 ensure!(name.len() <= 64, "Collection name can not be longer than 63 char");123124 let mut description = collection_description.to_vec();125 description.push(0);126 ensure!(name.len() <= 256, "Collection description can not be longer than 255 char");127128 let mut token_trefix = token_prefix.to_vec();129 token_trefix.push(0);130 ensure!(token_trefix.len() <= 16, "Token prefix can not be longer than 15 char");112131113 // Generate next collection ID132 // Generate next collection ID114 let next_id = NextCollectionID::get();133 let next_id = NextCollectionID::get();117136118 // Create new collection137 // Create new collection119 let new_collection = CollectionType {138 let new_collection = CollectionType {120 owner: who,139 owner: who.clone(),140 name: name,141 description: description,142 token_trefix: token_trefix,121 next_item_id: next_id,143 next_item_id: next_id,122 custom_data_size: custom_data_sz,144 custom_data_size: custom_data_sz,123 };145 };124146125 // Add new collection to map147 // Add new collection to map126 <Collection<T>>::insert(next_id, new_collection);148 <Collection<T>>::insert(next_id, new_collection);149150 // call event151 Self::deposit_event(RawEvent::Created(next_id, who.clone()));127152128 Ok(())153 Ok(())129 }154 }252 <ItemListIndex>::insert(collection_id, current_index);277 <ItemListIndex>::insert(collection_id, current_index);253 <ItemList<T>>::insert((collection_id, current_index), new_item);278 <ItemList<T>>::insert((collection_id, current_index), new_item);279280 // call event281 Self::deposit_event(RawEvent::ItemCreated(collection_id));254282255 Ok(())283 Ok(())256 }284 }286 let new_balance = <Balance<T>>::get((collection_id, item.owner.clone())) - 1;314 let new_balance = <Balance<T>>::get((collection_id, item.owner.clone())) - 1;287 <Balance<T>>::insert((collection_id, item.owner.clone()), new_balance);315 <Balance<T>>::insert((collection_id, item.owner.clone()), new_balance);316317 // call event318 Self::deposit_event(RawEvent::ItemDestroyed(collection_id, item_id));288319289 Ok(())320 Ok(())290 }321 }pallets/nft/src/mock.rsdiffbeforeafterboth30 pub const MaximumBlockWeight: Weight = 1024;30 pub const MaximumBlockWeight: Weight = 1024;31 pub const MaximumBlockLength: u32 = 2 * 1024;31 pub const MaximumBlockLength: u32 = 2 * 1024;32 pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75);32 pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75);33 pub MaximumExtrinsicWeight: Weight = 10 * WEIGHT_PER_SECOND;33 pub const MaximumExtrinsicWeight: Weight = 10 * WEIGHT_PER_SECOND;34}34}353536impl system::Trait for Test {36impl system::Trait for Test {pallets/nft/src/tests.rsdiffbeforeafterboth5#[test]5#[test]6fn create_collection_test() {6fn create_collection_test() {7 new_test_ext().execute_with(|| {7 new_test_ext().execute_with(|| {89 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();10 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();11 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();128 let size = 1024;13 let size = 1024;9 let origin1 = Origin::signed(1);14 let origin1 = Origin::signed(1);10 assert_ok!(TemplateModule::create_collection(origin1.clone(), size));15 assert_ok!(TemplateModule::create_collection(origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));11 assert_eq!(TemplateModule::collection(1).owner, 1);16 assert_eq!(TemplateModule::collection(1).owner, 1);12 });17 });13}18}141915#[test]20#[test]16fn change_collection_owner() {21fn change_collection_owner() {17 new_test_ext().execute_with(|| {22 new_test_ext().execute_with(|| {2324 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();25 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();26 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2718 let size = 1024;28 let size = 1024;19 let origin1 = Origin::signed(1);29 let origin1 = Origin::signed(1);203021 assert_ok!(TemplateModule::create_collection(origin1.clone(), size));31 assert_ok!(TemplateModule::create_collection(origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));22 assert_ok!(TemplateModule::change_collection_owner(32 assert_ok!(TemplateModule::change_collection_owner(23 origin1.clone(),33 origin1.clone(),24 1,34 1,31#[test]41#[test]32fn destroy_collection() {42fn destroy_collection() {33 new_test_ext().execute_with(|| {43 new_test_ext().execute_with(|| {4445 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();46 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();47 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();34 let size = 1024;48 let size = 1024;35 let origin1 = Origin::signed(1);49 let origin1 = Origin::signed(1);365037 assert_ok!(TemplateModule::create_collection(origin1.clone(), size));51 assert_ok!(TemplateModule::create_collection(origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));38 assert_ok!(TemplateModule::destroy_collection(origin1.clone(), 1));52 assert_ok!(TemplateModule::destroy_collection(origin1.clone(), 1));39 });53 });40}54}415542#[test]56#[test]43fn create_item() {57fn create_item() {44 new_test_ext().execute_with(|| {58 new_test_ext().execute_with(|| {5960 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();61 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();62 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();6345 let size = 1024;64 let size = 1024;46 let origin1 = Origin::signed(1);65 let origin1 = Origin::signed(1);47 let origin2 = Origin::signed(2);66 let origin2 = Origin::signed(2);486749 assert_ok!(TemplateModule::create_collection(origin1.clone(), size));68 assert_ok!(TemplateModule::create_collection(origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));50 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));69 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));51 assert_ok!(TemplateModule::create_item(70 assert_ok!(TemplateModule::create_item(52 origin2.clone(),71 origin2.clone(),62#[test]81#[test]63fn burn_item() {82fn burn_item() {64 new_test_ext().execute_with(|| {83 new_test_ext().execute_with(|| {8485 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();86 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();87 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();8865 let size = 1024;89 let size = 1024;66 let origin1 = Origin::signed(1);90 let origin1 = Origin::signed(1);67 let origin2 = Origin::signed(2);91 let origin2 = Origin::signed(2);689269 assert_ok!(TemplateModule::create_collection(origin1.clone(), size));93 assert_ok!(TemplateModule::create_collection(origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));70 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));94 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));71 assert_ok!(TemplateModule::create_item(95 assert_ok!(TemplateModule::create_item(72 origin2.clone(),96 origin2.clone(),91#[test]115#[test]92fn add_collection_admin() {116fn add_collection_admin() {93 new_test_ext().execute_with(|| {117 new_test_ext().execute_with(|| {118119 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();120 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();121 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();12294 let size = 1024;123 let size = 1024;95 let origin1 = Origin::signed(1);124 let origin1 = Origin::signed(1);96 let origin2 = Origin::signed(2);125 let origin2 = Origin::signed(2);97 let origin3 = Origin::signed(3);126 let origin3 = Origin::signed(3);9812799 assert_ok!(TemplateModule::create_collection(origin1.clone(), size));128 assert_ok!(TemplateModule::create_collection(origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));100 assert_ok!(TemplateModule::create_collection(origin2.clone(), size));129 assert_ok!(TemplateModule::create_collection(origin2.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));101 assert_ok!(TemplateModule::create_collection(origin3.clone(), size));130 assert_ok!(TemplateModule::create_collection(origin3.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));102131103 assert_eq!(TemplateModule::collection(1).owner, 1);132 assert_eq!(TemplateModule::collection(1).owner, 1);104 assert_eq!(TemplateModule::collection(2).owner, 2);133 assert_eq!(TemplateModule::collection(2).owner, 2);116#[test]145#[test]117fn remove_collection_admin() {146fn remove_collection_admin() {118 new_test_ext().execute_with(|| {147 new_test_ext().execute_with(|| {148149 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();150 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();151 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();152119 let size = 1024;153 let size = 1024;120 let origin1 = Origin::signed(1);154 let origin1 = Origin::signed(1);121 let origin2 = Origin::signed(2);155 let origin2 = Origin::signed(2);122 let origin3 = Origin::signed(3);156 let origin3 = Origin::signed(3);123157124 assert_ok!(TemplateModule::create_collection(origin1.clone(), size));158 assert_ok!(TemplateModule::create_collection(origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));125 assert_ok!(TemplateModule::create_collection(origin2.clone(), size));159 assert_ok!(TemplateModule::create_collection(origin2.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));126 assert_ok!(TemplateModule::create_collection(origin3.clone(), size));160 assert_ok!(TemplateModule::create_collection(origin3.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));127161128 assert_eq!(TemplateModule::collection(1).owner, 1);162 assert_eq!(TemplateModule::collection(1).owner, 1);129 assert_eq!(TemplateModule::collection(2).owner, 2);163 assert_eq!(TemplateModule::collection(2).owner, 2);149#[test]183#[test]150fn balance_of() {184fn balance_of() {151 new_test_ext().execute_with(|| {185 new_test_ext().execute_with(|| {186187 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();188 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();189 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();190152 let size = 1024;191 let size = 1024;153 let origin1 = Origin::signed(1);192 let origin1 = Origin::signed(1);154 let origin2 = Origin::signed(2);193 let origin2 = Origin::signed(2);155 let origin3 = Origin::signed(3);194 let origin3 = Origin::signed(3);156195157 assert_ok!(TemplateModule::create_collection(origin1.clone(), size));196 assert_ok!(TemplateModule::create_collection(origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));158 assert_ok!(TemplateModule::create_collection(origin2.clone(), size));197 assert_ok!(TemplateModule::create_collection(origin2.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));159 assert_ok!(TemplateModule::create_collection(origin3.clone(), size));198 assert_ok!(TemplateModule::create_collection(origin3.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));160199161 assert_eq!(TemplateModule::collection(1).owner, 1);200 assert_eq!(TemplateModule::collection(1).owner, 1);162 assert_eq!(TemplateModule::collection(2).owner, 2);201 assert_eq!(TemplateModule::collection(2).owner, 2);181#[test]220#[test]182fn transfer() {221fn transfer() {183 new_test_ext().execute_with(|| {222 new_test_ext().execute_with(|| {223224 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();225 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();226 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();227184 let size = 1024;228 let size = 1024;185 let origin1 = Origin::signed(1);229 let origin1 = Origin::signed(1);186 let origin2 = Origin::signed(2);230 let origin2 = Origin::signed(2);187 let origin3 = Origin::signed(3);231 let origin3 = Origin::signed(3);188232189 assert_ok!(TemplateModule::create_collection(origin1.clone(), size));233 assert_ok!(TemplateModule::create_collection(origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));190 assert_ok!(TemplateModule::create_collection(origin2.clone(), size));234 assert_ok!(TemplateModule::create_collection(origin2.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));191 assert_ok!(TemplateModule::create_collection(origin3.clone(), size));235 assert_ok!(TemplateModule::create_collection(origin3.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));192236193 assert_eq!(TemplateModule::collection(1).owner, 1);237 assert_eq!(TemplateModule::collection(1).owner, 1);194 assert_eq!(TemplateModule::collection(2).owner, 2);238 assert_eq!(TemplateModule::collection(2).owner, 2);214#[test]258#[test]215fn approve() {259fn approve() {216 new_test_ext().execute_with(|| {260 new_test_ext().execute_with(|| {261262 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();263 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();264 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();265217 let size = 1024;266 let size = 1024;218 let origin1 = Origin::signed(1);267 let origin1 = Origin::signed(1);219 let origin2 = Origin::signed(2);268 let origin2 = Origin::signed(2);220 let origin3 = Origin::signed(3);269 let origin3 = Origin::signed(3);221270222 assert_ok!(TemplateModule::create_collection(origin1.clone(), size));271 assert_ok!(TemplateModule::create_collection(origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));223 assert_ok!(TemplateModule::create_collection(origin2.clone(), size));272 assert_ok!(TemplateModule::create_collection(origin2.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));224 assert_ok!(TemplateModule::create_collection(origin3.clone(), size));273 assert_ok!(TemplateModule::create_collection(origin3.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));225274226 assert_eq!(TemplateModule::collection(1).owner, 1);275 assert_eq!(TemplateModule::collection(1).owner, 1);227 assert_eq!(TemplateModule::collection(2).owner, 2);276 assert_eq!(TemplateModule::collection(2).owner, 2);243#[test]292#[test]244fn get_approved() {293fn get_approved() {245 new_test_ext().execute_with(|| {294 new_test_ext().execute_with(|| {295296 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();297 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();298 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();299246 let size = 1024;300 let size = 1024;247 let origin1 = Origin::signed(1);301 let origin1 = Origin::signed(1);248 let origin2 = Origin::signed(2);302 let origin2 = Origin::signed(2);249 let origin3 = Origin::signed(3);303 let origin3 = Origin::signed(3);250304251 assert_ok!(TemplateModule::create_collection(origin1.clone(), size));305 assert_ok!(TemplateModule::create_collection(origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));252 assert_ok!(TemplateModule::create_collection(origin2.clone(), size));306 assert_ok!(TemplateModule::create_collection(origin2.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));253 assert_ok!(TemplateModule::create_collection(origin3.clone(), size));307 assert_ok!(TemplateModule::create_collection(origin3.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));254308255 assert_eq!(TemplateModule::collection(1).owner, 1);309 assert_eq!(TemplateModule::collection(1).owner, 1);256 assert_eq!(TemplateModule::collection(2).owner, 2);310 assert_eq!(TemplateModule::collection(2).owner, 2);272#[test]326#[test]273fn transfer_from() {327fn transfer_from() {274 new_test_ext().execute_with(|| {328 new_test_ext().execute_with(|| {329330 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();331 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();332 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();333275 let size = 1024;334 let size = 1024;276 let origin1 = Origin::signed(1);335 let origin1 = Origin::signed(1);277 let origin2 = Origin::signed(2);336 let origin2 = Origin::signed(2);278 let origin3 = Origin::signed(3);337 let origin3 = Origin::signed(3);279338280 assert_ok!(TemplateModule::create_collection(origin1.clone(), size));339 assert_ok!(TemplateModule::create_collection(origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));281 assert_ok!(TemplateModule::create_collection(origin2.clone(), size));340 assert_ok!(TemplateModule::create_collection(origin2.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));282 assert_ok!(TemplateModule::create_collection(origin3.clone(), size));341 assert_ok!(TemplateModule::create_collection(origin3.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));283342284 assert_eq!(TemplateModule::collection(1).owner, 1);343 assert_eq!(TemplateModule::collection(1).owner, 1);285 assert_eq!(TemplateModule::collection(2).owner, 2);344 assert_eq!(TemplateModule::collection(2).owner, 2);301#[test]360#[test]302fn index_list() {361fn index_list() {303 new_test_ext().execute_with(|| {362 new_test_ext().execute_with(|| {363364 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();365 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();366 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();367304 let size = 1024;368 let size = 1024;305 let origin1 = Origin::signed(1);369 let origin1 = Origin::signed(1);306 let origin2 = Origin::signed(2);370 let origin2 = Origin::signed(2);307 let origin3 = Origin::signed(3);371 let origin3 = Origin::signed(3);308372309 assert_ok!(TemplateModule::create_collection(origin1.clone(), size));373 assert_ok!(TemplateModule::create_collection(origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));310 assert_ok!(TemplateModule::create_collection(origin2.clone(), size));374 assert_ok!(TemplateModule::create_collection(origin2.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));311 assert_ok!(TemplateModule::create_collection(origin3.clone(), size));375 assert_ok!(TemplateModule::create_collection(origin3.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), size));312376313 assert_eq!(TemplateModule::collection(1).owner, 1);377 assert_eq!(TemplateModule::collection(1).owner, 1);314 assert_eq!(TemplateModule::collection(2).owner, 2);378 assert_eq!(TemplateModule::collection(2).owner, 2);