mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-27 11:38:01 +00:00
Various minor fixes (#13945)
* Fix: Incorrect implementation of can_reserve check * Fix: Incorrect migration of consumer counting for existing accounts with frozen amounts * Fix: Inconsistent implementation between assets can_deposit and new_account * Fixes * Fixes * Another fix * Update tests.rs * Update fungible_tests.rs * Use `can_accrue_consumers` in the body of `can_inc_consumer` --------- Co-authored-by: Keith Yeung <kungfukeith11@gmail.com> Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> Co-authored-by: parity-processbot <>
This commit is contained in:
@@ -490,7 +490,9 @@ where
|
||||
return true
|
||||
}
|
||||
Self::account(who).free.checked_sub(&value).map_or(false, |new_balance| {
|
||||
Self::ensure_can_withdraw(who, value, WithdrawReasons::RESERVE, new_balance).is_ok()
|
||||
new_balance >= T::ExistentialDeposit::get() &&
|
||||
Self::ensure_can_withdraw(who, value, WithdrawReasons::RESERVE, new_balance)
|
||||
.is_ok()
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -788,7 +788,7 @@ pub mod pallet {
|
||||
return false
|
||||
}
|
||||
a.flags.set_new_logic();
|
||||
if !a.reserved.is_zero() || !a.frozen.is_zero() {
|
||||
if !a.reserved.is_zero() && a.frozen.is_zero() {
|
||||
if system::Pallet::<T>::providers(who) == 0 {
|
||||
// Gah!! We have no provider refs :(
|
||||
// This shouldn't practically happen, but we need a failsafe anyway: let's give
|
||||
|
||||
@@ -1180,6 +1180,16 @@ fn named_reserve_should_work() {
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn reserve_must_succeed_if_can_reserve_does() {
|
||||
ExtBuilder::default().build_and_execute_with(|| {
|
||||
let _ = Balances::deposit_creating(&1, 1);
|
||||
let _ = Balances::deposit_creating(&2, 2);
|
||||
assert!(Balances::can_reserve(&1, 1) == Balances::reserve(&1, 1).is_ok());
|
||||
assert!(Balances::can_reserve(&2, 1) == Balances::reserve(&2, 1).is_ok());
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn reserved_named_to_yourself_should_work() {
|
||||
ExtBuilder::default().build_and_execute_with(|| {
|
||||
|
||||
@@ -398,6 +398,31 @@ fn unholding_frees_hold_slot() {
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn sufficients_work_properly_with_reference_counting() {
|
||||
ExtBuilder::default()
|
||||
.existential_deposit(1)
|
||||
.monied(true)
|
||||
.build_and_execute_with(|| {
|
||||
// Only run PoC when the system pallet is enabled, since the underlying bug is in the
|
||||
// system pallet it won't work with BalancesAccountStore
|
||||
if UseSystem::get() {
|
||||
// Start with a balance of 100
|
||||
<Balances as fungible::Mutate<_>>::set_balance(&1, 100);
|
||||
// Emulate a sufficient, in reality this could be reached by transferring a
|
||||
// sufficient asset to the account
|
||||
System::inc_sufficients(&1);
|
||||
// Spend the same balance multiple times
|
||||
assert_ok!(<Balances as fungible::Mutate<_>>::transfer(&1, &1337, 100, Expendable));
|
||||
assert_eq!(Balances::free_balance(&1), 0);
|
||||
assert_noop!(
|
||||
<Balances as fungible::Mutate<_>>::transfer(&1, &1337, 100, Expendable),
|
||||
TokenError::FundsUnavailable
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn emit_events_with_changing_freezes() {
|
||||
ExtBuilder::default().build_and_execute_with(|| {
|
||||
|
||||
Reference in New Issue
Block a user