git.delta.rocks / unique-network / refs/commits / 5d685ed956a0

difftreelog

feat implement owner control limitation

Yaroslav Bolyukin2021-02-19parent: #a09692c.patch.diff
in: master

1 file changed

modifiedpallets/nft/src/lib.rsdiffbeforeafterboth
382 AccountTokenLimitExceeded,382 AccountTokenLimitExceeded,
383 /// Collection limit bounds per collection exceeded383 /// Collection limit bounds per collection exceeded
384 CollectionLimitBoundsExceeded,384 CollectionLimitBoundsExceeded,
385 /// Tried to enable permissions which are only permitted to be disabled
386 OwnerPermissionsCantBeReturned,
385 /// Schema data size limit bound exceeded387 /// Schema data size limit bound exceeded
386 SchemaDataLimitExceeded,388 SchemaDataLimitExceeded,
387 /// Maximum refungibility exceeded389 /// Maximum refungibility exceeded
624 let sender = ensure_signed(origin)?;626 let sender = ensure_signed(origin)?;
625 Self::check_owner_permissions(collection_id, sender)?;627 Self::check_owner_permissions(collection_id, sender)?;
628
629 let mut target_collection = <Collection<T>>::get(collection_id);
630 if !target_collection.limits.owner_can_destroy {
631 fail!(Error::<T>::NoPermission);
632 }
626633
627 <AddressTokens<T>>::remove_prefix(collection_id);634 <AddressTokens<T>>::remove_prefix(collection_id);
628 <Allowances<T>>::remove_prefix(collection_id);635 <Allowances<T>>::remove_prefix(collection_id);
1009 let target_collection = <Collection<T>>::get(collection_id);1016 let target_collection = <Collection<T>>::get(collection_id);
1010 ensure!(Self::is_item_owner(sender.clone(), collection_id, item_id) ||1017 ensure!(
1018 Self::is_item_owner(sender.clone(), collection_id, item_id) ||
1019 (
1020 target_collection.limits.owner_can_transfer &&
1011 Self::is_owner_or_admin_permissions(collection_id, sender.clone()),1021 Self::is_owner_or_admin_permissions(collection_id, sender.clone())
1022 ),
1012 Error::<T>::NoPermission);1023 Error::<T>::NoPermission
1024 );
10131025
1085 let target_collection = <Collection<T>>::get(collection_id);1097 let target_collection = <Collection<T>>::get(collection_id);
1086 ensure!(Self::is_item_owner(sender.clone(), collection_id, item_id) ||1098 ensure!(
1099 Self::is_item_owner(sender.clone(), collection_id, item_id) ||
1100 (
1101 target_collection.limits.owner_can_transfer &&
1087 Self::is_owner_or_admin_permissions(collection_id, sender.clone()),1102 Self::is_owner_or_admin_permissions(collection_id, sender.clone())
1103 ),
1088 Error::<T>::NoPermission);1104 Error::<T>::NoPermission
1105 );
10891106
1143 // Transfer permissions check 1160 // Transfer permissions check
1144 ensure!(appoved_transfer || Self::is_owner_or_admin_permissions(collection_id, sender.clone()),1161 ensure!(
1162 appoved_transfer ||
1163 (
1164 target_collection.limits.owner_can_transfer &&
1165 Self::is_owner_or_admin_permissions(collection_id, sender.clone())
1166 ),
1145 Error::<T>::NoPermission);1167 Error::<T>::NoPermission
1168 );
11461169
1527 limits.token_limit <= chain_limits.account_token_ownership_limit, 1550 limits.token_limit <= chain_limits.account_token_ownership_limit,
1528 Error::<T>::AccountTokenLimitExceeded);1551 Error::<T>::AccountTokenLimitExceeded);
1552
1553 ensure!(
1554 (climits.owner_can_transfer || !limits.owner_can_transfer) &&
1555 (climits.owner_can_destroy || !limits.owner_can_destroy),
1556 Error::<T>::OwnerPermissionsCantBeReturned,
1557 );
15291558
1530 target_collection.limits = limits;1559 target_collection.limits = limits;
1531 <Collection<T>>::insert(collection_id, target_collection);1560 <Collection<T>>::insert(collection_id, target_collection);