git.delta.rocks / unique-network / refs/commits / 4a5e4b087a97

difftreelog

Merge branch 'master' of github.com:usetech-llc/nft_parachain

Greg Zaitsev2020-05-28parents: #f2aa62c #bb1c5f7.patch.diff
in: master

2 files changed

modifiedpallets/nft/src/lib.rsdiffbeforeafterboth
72 /// Balance owner per collection map72 /// Balance owner per collection map
73 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;
7474
75 /// 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);
325325
326326 // reset approved list
327 let itm: Vec<T::AccountId> = Vec::new();
328 <ApprovedList<T>>::insert((collection_id, item_id), itm);
327329
328 Ok(())330 Ok(())
329 }331 }
332
333 #[weight = frame_support::weights::SimpleDispatchInfo::default()]
334 pub fn approve(origin, approved: T::AccountId, collection_id: u64, item_id: u64) -> DispatchResult {
335
336 let sender = ensure_signed(origin)?;
337 ensure!(<Collection<T>>::contains_key(collection_id), "This collection does not exist");
338
339 let target_collection = <Collection<T>>::get(collection_id);
340 let is_owner = sender == target_collection.owner;
341
342 ensure!(<ItemList<T>>::contains_key((collection_id, item_id)), "Item does not exists");
343 let item = <ItemList<T>>::get((collection_id, item_id));
344
345 if !is_owner
346 {
347 // check if item owner
348 if item.owner != sender
349 {
350 let no_perm_mes = "You do not have permissions to modify this collection";
351
352 ensure!(<AdminList<T>>::contains_key(collection_id), no_perm_mes);
353 ensure!(<AdminList<T>>::get(collection_id).contains(&sender), no_perm_mes);
354 }
355 }
356
357 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());
362
363 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 }
372
373 Ok(())
374 }
375
376 #[weight = frame_support::weights::SimpleDispatchInfo::default()]
377 pub fn transfer_from(origin, collection_id: u64, item_id: u64, new_owner: T::AccountId) -> DispatchResult {
378
379 // let sender = ensure_signed(origin)?;
380 // ensure!(<Collection<T>>::contains_key(collection_id), "This collection does not exist");
381
382 // let target_collection = <Collection<T>>::get(collection_id);
383 // let is_owner = sender == target_collection.owner;
384
385 // ensure!(<ItemList<T>>::contains_key((collection_id, item_id)), "Item does not exists");
386 // let mut item = <ItemList<T>>::get((collection_id, item_id));
387
388 // if !is_owner
389 // {
390 // let no_perm_mes = "You do not have permissions to modify this collection";
391
392 // // check if item owner
393 // 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 // }
398
399 // 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);
402
403 // }
404
405
406 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);
410
411 Self::transfer(origin, collection_id, item_id, new_owner);
412
413 Ok(())
414 }
330 }415 }
331}416}
modifiedpallets/nft/src/tests.rsdiffbeforeafterboth
185 });185 });
186}186}
187187
188#[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);
195
196 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));
199
200 assert_eq!(TemplateModule::collection(1).owner, 1);
201 assert_eq!(TemplateModule::collection(2).owner, 2);
202 assert_eq!(TemplateModule::collection(3).owner, 3);
203
204 // create item
205 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,1,1].to_vec()));
206
207 // approve
208 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));
209 assert_eq!(TemplateModule::approved((1,1)).contains(&2), true);
210
211 });
212}
213
214#[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);
221
222 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));
225
226 assert_eq!(TemplateModule::collection(1).owner, 1);
227 assert_eq!(TemplateModule::collection(2).owner, 2);
228 assert_eq!(TemplateModule::collection(3).owner, 3);
229
230 // create item
231 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,1,1].to_vec()));
232
233 // approve
234 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));
235 assert_eq!(TemplateModule::approved((1,1)).contains(&2), true);
236
237 });
238}
239
240#[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);
247
248 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));
251
252 assert_eq!(TemplateModule::collection(1).owner, 1);
253 assert_eq!(TemplateModule::collection(2).owner, 2);
254 assert_eq!(TemplateModule::collection(3).owner, 3);
255
256 // create item
257 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,1,1].to_vec()));
258
259 // approve
260 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));
261 assert_ok!(TemplateModule::transfer_from(origin1.clone(), 1, 1, 2));
262
263 });
264}