difftreelog
Merge branch 'master' of github.com:usetech-llc/nft_parachain
in: master
2 files changed
pallets/nft/src/lib.rsdiffbeforeafterboth72 /// Balance owner per collection map72 /// Balance owner per collection map73 pub Balance get(balance_count): map hasher(blake2_128_concat) (u64, T::AccountId) => u64;73 pub Balance get(balance_count): map hasher(blake2_128_concat) (u64, T::AccountId) => u64;747475 /// Item double map (collection)75 pub ApprovedList get(approved): map hasher(blake2_128_concat) (u64, u64) => Vec<T::AccountId>;76 pub ItemList get(item_id): map hasher(blake2_128_concat) (u64, u64) => NftItemType<T::AccountId>;76 pub ItemList get(item_id): map hasher(blake2_128_concat) (u64, u64) => NftItemType<T::AccountId>;77 pub ItemListIndex get(item_index): map hasher(blake2_128_concat) u64 => u64;77 pub ItemListIndex get(item_index): map hasher(blake2_128_concat) u64 => u64;78 }78 }323 item.owner = new_owner;323 item.owner = new_owner;324 <ItemList<T>>::insert((collection_id, item_id), item);324 <ItemList<T>>::insert((collection_id, item_id), item);325325326326 // reset approved list327 let itm: Vec<T::AccountId> = Vec::new();328 <ApprovedList<T>>::insert((collection_id, item_id), itm);327329328 Ok(())330 Ok(())329 }331 }332333 #[weight = frame_support::weights::SimpleDispatchInfo::default()]334 pub fn approve(origin, approved: T::AccountId, collection_id: u64, item_id: u64) -> DispatchResult {335336 let sender = ensure_signed(origin)?;337 ensure!(<Collection<T>>::contains_key(collection_id), "This collection does not exist");338339 let target_collection = <Collection<T>>::get(collection_id);340 let is_owner = sender == target_collection.owner;341342 ensure!(<ItemList<T>>::contains_key((collection_id, item_id)), "Item does not exists");343 let item = <ItemList<T>>::get((collection_id, item_id));344345 if !is_owner 346 {347 // check if item owner348 if item.owner != sender 349 {350 let no_perm_mes = "You do not have permissions to modify this collection";351352 ensure!(<AdminList<T>>::contains_key(collection_id), no_perm_mes);353 ensure!(<AdminList<T>>::get(collection_id).contains(&sender), no_perm_mes);354 }355 }356357 let list_exists = <ApprovedList<T>>::contains_key((collection_id, item_id));358 if list_exists {359 360 let mut list = <ApprovedList<T>>::get((collection_id, item_id));361 let item_contains = list.contains(&approved.clone());362363 if !item_contains {364 list.push(approved.clone());365 } 366 } else {367 368 let mut itm = Vec::new();369 itm.push(approved.clone());370 <ApprovedList<T>>::insert((collection_id, item_id), itm);371 }372373 Ok(())374 }375376 #[weight = frame_support::weights::SimpleDispatchInfo::default()]377 pub fn transfer_from(origin, collection_id: u64, item_id: u64, new_owner: T::AccountId) -> DispatchResult {378379 // let sender = ensure_signed(origin)?;380 // ensure!(<Collection<T>>::contains_key(collection_id), "This collection does not exist");381382 // let target_collection = <Collection<T>>::get(collection_id);383 // let is_owner = sender == target_collection.owner;384385 // ensure!(<ItemList<T>>::contains_key((collection_id, item_id)), "Item does not exists");386 // let mut item = <ItemList<T>>::get((collection_id, item_id));387388 // if !is_owner 389 // {390 // let no_perm_mes = "You do not have permissions to modify this collection";391392 // // check if item owner393 // if item.owner != sender 394 // {395 // ensure!(<AdminList<T>>::contains_key(collection_id), no_perm_mes);396 // ensure!(<AdminList<T>>::get(collection_id).contains(&sender), no_perm_mes);397 // }398399 // ensure!(<ApprovedList<T>>::contains_key((collection_id, item_id)), no_perm_mes);400 // let list_itm = <ApprovedList<T>>::get((collection_id, item_id));401 // ensure!(list_itm.contains(&new_owner.clone()), no_perm_mes);402403 // }404405406 let no_perm_mes = "You do not have permissions to modify this collection";407 ensure!(<ApprovedList<T>>::contains_key((collection_id, item_id)), no_perm_mes);408 let list_itm = <ApprovedList<T>>::get((collection_id, item_id));409 ensure!(list_itm.contains(&new_owner.clone()), no_perm_mes);410411 Self::transfer(origin, collection_id, item_id, new_owner);412413 Ok(())414 }330 }415 }331}416}pallets/nft/src/tests.rsdiffbeforeafterboth185 });185 });186}186}187187188#[test]189fn approve() {190 new_test_ext().execute_with(|| {191 let size = 1024;192 let origin1 = Origin::signed(1);193 let origin2 = Origin::signed(2);194 let origin3 = Origin::signed(3);195196 assert_ok!(TemplateModule::create_collection(origin1.clone(), size));197 assert_ok!(TemplateModule::create_collection(origin2.clone(), size));198 assert_ok!(TemplateModule::create_collection(origin3.clone(), size));199200 assert_eq!(TemplateModule::collection(1).owner, 1);201 assert_eq!(TemplateModule::collection(2).owner, 2);202 assert_eq!(TemplateModule::collection(3).owner, 3);203204 // create item205 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,1,1].to_vec()));206207 // approve208 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));209 assert_eq!(TemplateModule::approved((1,1)).contains(&2), true);210211 });212}213214#[test]215fn get_approved() {216 new_test_ext().execute_with(|| {217 let size = 1024;218 let origin1 = Origin::signed(1);219 let origin2 = Origin::signed(2);220 let origin3 = Origin::signed(3);221222 assert_ok!(TemplateModule::create_collection(origin1.clone(), size));223 assert_ok!(TemplateModule::create_collection(origin2.clone(), size));224 assert_ok!(TemplateModule::create_collection(origin3.clone(), size));225226 assert_eq!(TemplateModule::collection(1).owner, 1);227 assert_eq!(TemplateModule::collection(2).owner, 2);228 assert_eq!(TemplateModule::collection(3).owner, 3);229230 // create item231 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,1,1].to_vec()));232233 // approve234 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));235 assert_eq!(TemplateModule::approved((1,1)).contains(&2), true);236237 });238}239240#[test]241fn transfer_from() {242 new_test_ext().execute_with(|| {243 let size = 1024;244 let origin1 = Origin::signed(1);245 let origin2 = Origin::signed(2);246 let origin3 = Origin::signed(3);247248 assert_ok!(TemplateModule::create_collection(origin1.clone(), size));249 assert_ok!(TemplateModule::create_collection(origin2.clone(), size));250 assert_ok!(TemplateModule::create_collection(origin3.clone(), size));251252 assert_eq!(TemplateModule::collection(1).owner, 1);253 assert_eq!(TemplateModule::collection(2).owner, 2);254 assert_eq!(TemplateModule::collection(3).owner, 3);255256 // create item257 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,1,1].to_vec()));258259 // approve260 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));261 assert_ok!(TemplateModule::transfer_from(origin1.clone(), 1, 1, 2));262263 });264}