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

difftreelog

fix verify amount of created items in bulk mint

Yaroslav Bolyukin2021-03-05parent: #a842c5d.patch.diff
in: master

1 file changed

modifiedpallets/nft/src/lib.rsdiffbeforeafterboth
967967
968 let target_collection = <Collection<T>>::get(collection_id);968 let target_collection = <Collection<T>>::get(collection_id);
969969
970 Self::can_create_items_in_collection(collection_id, &target_collection, &sender, &owner)?;970 Self::can_create_items_in_collection(collection_id, &target_collection, &sender, &owner, 1)?;
971 Self::validate_create_item_args(&target_collection, &data)?;971 Self::validate_create_item_args(&target_collection, &data)?;
972 Self::create_item_no_validation(collection_id, owner, data)?;972 Self::create_item_no_validation(collection_id, owner, data)?;
973973
1003 Self::collection_exists(collection_id)?;1003 Self::collection_exists(collection_id)?;
1004 let target_collection = <Collection<T>>::get(collection_id);1004 let target_collection = <Collection<T>>::get(collection_id);
10051005
1006 Self::can_create_items_in_collection(collection_id, &target_collection, &sender, &owner)?;1006 Self::can_create_items_in_collection(collection_id, &target_collection, &sender, &owner, items_data.len() as u32)?;
10071007
1008 for data in &items_data {1008 for data in &items_data {
1009 Self::validate_create_item_args(&target_collection, data)?;1009 Self::validate_create_item_args(&target_collection, data)?;
1640 Ok(())1640 Ok(())
1641 }1641 }
16421642
1643 fn can_create_items_in_collection(collection_id: CollectionId, collection: &CollectionType<T::AccountId>, sender: &T::AccountId, owner: &T::AccountId) -> DispatchResult {1643 fn can_create_items_in_collection(collection_id: CollectionId, collection: &CollectionType<T::AccountId>, sender: &T::AccountId, owner: &T::AccountId, amount: u32) -> DispatchResult {
16441644
1645 // check token limit and account token limit1645 // check token limit and account token limit
1646 let total_items: u32 = ItemListIndex::get(collection_id);1646 let total_items: u32 = ItemListIndex::get(collection_id)
1647 .checked_add(amount)
1648 .ok_or(Error::<T>::CollectionTokenLimitExceeded)?;
1647 let account_items: u32 = <AddressTokens<T>>::get(collection_id, owner).len() as u32;1649 let account_items: u32 = (<AddressTokens<T>>::get(collection_id, owner).len() as u32)
1650 .checked_add(amount)
1651 .ok_or(Error::<T>::AccountTokenLimitExceeded)?;
1648 ensure!(collection.limits.token_limit > total_items, Error::<T>::CollectionTokenLimitExceeded);1652 ensure!(collection.limits.token_limit >= total_items, Error::<T>::CollectionTokenLimitExceeded);
1649 ensure!(collection.limits.account_token_ownership_limit > account_items, Error::<T>::AccountTokenLimitExceeded);1653 ensure!(collection.limits.account_token_ownership_limit >= account_items, Error::<T>::AccountTokenLimitExceeded);
16501654
1651 if !Self::is_owner_or_admin_permissions(collection_id, sender.clone()) {1655 if !Self::is_owner_or_admin_permissions(collection_id, sender.clone()) {
1652 ensure!(collection.mint_mode == true, Error::<T>::PublicMintingNotAllowed);1656 ensure!(collection.mint_mode == true, Error::<T>::PublicMintingNotAllowed);