mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-15 22:01:04 +00:00
pallet-uniques: decrement total_deposit when clearing collection metadata (#3976)
Decrements `total_deposit` when collection metadata is cleared in `pallet-nfts` and `pallet-uniques`.
This commit is contained in:
@@ -1399,7 +1399,7 @@ pub mod pallet {
|
||||
.map(|_| None)
|
||||
.or_else(|origin| ensure_signed(origin).map(Some))?;
|
||||
|
||||
let details =
|
||||
let mut details =
|
||||
Collection::<T, I>::get(&collection).ok_or(Error::<T, I>::UnknownCollection)?;
|
||||
if let Some(check_owner) = &maybe_check_owner {
|
||||
ensure!(check_owner == &details.owner, Error::<T, I>::NoPermission);
|
||||
@@ -1411,6 +1411,8 @@ pub mod pallet {
|
||||
|
||||
let deposit = metadata.take().ok_or(Error::<T, I>::UnknownCollection)?.deposit;
|
||||
T::Currency::unreserve(&details.owner, deposit);
|
||||
details.total_deposit.saturating_reduce(deposit);
|
||||
Collection::<T, I>::insert(&collection, details);
|
||||
Self::deposit_event(Event::CollectionMetadataCleared { collection });
|
||||
Ok(())
|
||||
})
|
||||
|
||||
@@ -1062,3 +1062,41 @@ fn buy_item_should_work() {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn clear_collection_metadata_works() {
|
||||
new_test_ext().execute_with(|| {
|
||||
// Start with an account with 100 balance, 10 of which are reserved
|
||||
Balances::make_free_balance_be(&1, 100);
|
||||
Balances::reserve(&1, 10).unwrap();
|
||||
|
||||
// Create a Unique which increases total_deposit by 2
|
||||
assert_ok!(Uniques::create(RuntimeOrigin::signed(1), 0, 123));
|
||||
assert_eq!(Collection::<Test>::get(0).unwrap().total_deposit, 2);
|
||||
assert_eq!(Balances::reserved_balance(&1), 12);
|
||||
|
||||
// Set collection metadata which increases total_deposit by 10
|
||||
assert_ok!(Uniques::set_collection_metadata(
|
||||
RuntimeOrigin::signed(1),
|
||||
0,
|
||||
bvec![0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
false
|
||||
));
|
||||
assert_eq!(Collection::<Test>::get(0).unwrap().total_deposit, 12);
|
||||
assert_eq!(Balances::reserved_balance(&1), 22);
|
||||
|
||||
// Clearing collection metadata reduces total_deposit by the expected amount
|
||||
assert_ok!(Uniques::clear_collection_metadata(RuntimeOrigin::signed(1), 0));
|
||||
assert_eq!(Collection::<Test>::get(0).unwrap().total_deposit, 2);
|
||||
assert_eq!(Balances::reserved_balance(&1), 12);
|
||||
|
||||
// Destroying the collection removes it from storage
|
||||
assert_ok!(Uniques::destroy(
|
||||
RuntimeOrigin::signed(1),
|
||||
0,
|
||||
DestroyWitness { items: 0, item_metadatas: 0, attributes: 0 }
|
||||
));
|
||||
assert_eq!(Collection::<Test>::get(0), None);
|
||||
assert_eq!(Balances::reserved_balance(&1), 10);
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user