git.delta.rocks / unique-network / refs/commits / 863293844686

difftreelog

CollectionLimits additional checks added

str-mv2020-12-15parent: #14dd08a.patch.diff
in: master

1 file changed

modifiedpallets/nft/src/lib.rsdiffbeforeafterboth
10501050
1051 let sender = ensure_signed(origin)?;1051 let sender = ensure_signed(origin)?;
1052
1053 // Transfer permissions check
1054 let target_collection = <Collection<T>>::get(collection_id);1052 let target_collection = <Collection<T>>::get(collection_id);
1053
1054 // Limits check
1055 Self::is_correct_transfer(collection_id, &target_collection, &recipient)?;
1056
1057 // Transfer permissions check
1055 ensure!(Self::is_item_owner(sender.clone(), collection_id, item_id) ||1058 ensure!(Self::is_item_owner(sender.clone(), collection_id, item_id) ||
1056 Self::is_owner_or_admin_permissions(collection_id, sender.clone()),1059 Self::is_owner_or_admin_permissions(collection_id, sender.clone()),
1057 Error::<T>::NoPermission);1060 Error::<T>::NoPermission);
1162 }1165 }
1163 }1166 }
11641167
1165 // Transfer permissions check
1166 let target_collection = <Collection<T>>::get(collection_id);1168 let target_collection = <Collection<T>>::get(collection_id);
1169
1170 // Limits check
1171 Self::is_correct_transfer(collection_id, &target_collection, &recipient)?;
1172
1173 // Transfer permissions check
1167 ensure!(appoved_transfer || Self::is_owner_or_admin_permissions(collection_id, sender.clone()),1174 ensure!(appoved_transfer || Self::is_owner_or_admin_permissions(collection_id, sender.clone()),
1168 Error::<T>::NoPermission);1175 Error::<T>::NoPermission);
11691176
1424 Self::check_owner_permissions(collection_id, sender.clone())?;1431 Self::check_owner_permissions(collection_id, sender.clone())?;
1425
1426 let mut target_collection = <Collection<T>>::get(collection_id);1432 let mut target_collection = <Collection<T>>::get(collection_id);
1433 let chain_limits = ChainLimit::get();
1427 target_collection.limits = limits;1434 let climits = target_collection.limits;
1435
1436 // token_limit check prev
1437 ensure!(climits.token_limit > limits.token_limit &&
1438 climits.token_limit <= chain_limits.account_token_ownership_limit,
1439 Error::<T>::AccountTokenLimitExceeded);
1440
1441 target_collection.limits = limits;
1428 <Collection<T>>::insert(collection_id, target_collection);1442 <Collection<T>>::insert(collection_id, target_collection);
14291443
1430 Ok(())1444 Ok(())
14341448
1435impl<T: Trait> Module<T> {1449impl<T: Trait> Module<T> {
1450
1451 fn is_correct_transfer(collection_id: CollectionId, collection: &CollectionType<T::AccountId>, recipient: &T::AccountId) -> DispatchResult {
1452
1453 if !Self::is_owner_or_admin_permissions(collection_id, recipient.clone()) {
1454
1455 // check token limit and account token limit
1456 let account_items: u32 = <AddressTokens<T>>::get(collection_id, recipient).len() as u32;
1457 ensure!(collection.limits.account_token_ownership_limit > account_items, Error::<T>::AccountTokenLimitExceeded);
1458 }
1459
1460 Ok(())
1461 }
14361462
1437 fn can_create_items_in_collection(collection_id: CollectionId, collection: &CollectionType<T::AccountId>, sender: &T::AccountId, owner: &T::AccountId) -> DispatchResult {1463 fn can_create_items_in_collection(collection_id: CollectionId, collection: &CollectionType<T::AccountId>, sender: &T::AccountId, owner: &T::AccountId) -> DispatchResult {
14381464
1439 if !Self::is_owner_or_admin_permissions(collection_id, sender.clone()) {1465 if !Self::is_owner_or_admin_permissions(collection_id, sender.clone()) {
14401466
1441 // check token limit and account token limit1467 // check token limit and account token limit
1442 let total_items: u32 = ItemListIndex::get(collection_id);1468 let total_items: u32 = ItemListIndex::get(collection_id);
1443 let account_items: u32 = <AddressTokens<T>>::get(collection_id, owner.clone()).len() as u32;1469 let account_items: u32 = <AddressTokens<T>>::get(collection_id, owner).len() as u32;
1444 ensure!(collection.limits.token_limit > total_items, Error::<T>::CollectionTokenLimitExceeded);1470 ensure!(collection.limits.token_limit > total_items, Error::<T>::CollectionTokenLimitExceeded);
1445 ensure!(collection.limits.account_token_ownership_limit > account_items, Error::<T>::AccountTokenLimitExceeded);1471 ensure!(collection.limits.account_token_ownership_limit > account_items, Error::<T>::AccountTokenLimitExceeded);
1446 ensure!(collection.mint_mode == true, Error::<T>::PublicMintingNotAllowed);1472 ensure!(collection.mint_mode == true, Error::<T>::PublicMintingNotAllowed);