Fix fungible unbalanced trait (#12569)

* Fix fungible unbalanced trait

* Add simple decrease_balance test

Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

* Fix decrease_balance_at_most

* Fix decrease_balance_at_most in fungibles

* Rename free_balanceto balance_on_free

* Use reducible_balance instead of balance_on_free

Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
This commit is contained in:
zjb0807
2022-11-02 22:56:48 +13:00
committed by GitHub
parent 73a65711e8
commit a5d876f79a
4 changed files with 175 additions and 11 deletions
+159 -1
View File
@@ -24,7 +24,7 @@ macro_rules! decl_tests {
($test:ty, $ext_builder:ty, $existential_deposit:expr) => {
use crate::*;
use sp_runtime::{ArithmeticError, FixedPointNumber, traits::{SignedExtension, BadOrigin}};
use sp_runtime::{ArithmeticError, TokenError, FixedPointNumber, traits::{SignedExtension, BadOrigin}};
use frame_support::{
assert_noop, assert_storage_noop, assert_ok, assert_err,
traits::{
@@ -1298,5 +1298,163 @@ macro_rules! decl_tests {
assert_eq!(Balances::reserved_balance(&1337), 42);
});
}
#[test]
fn fungible_unbalanced_trait_set_balance_works() {
<$ext_builder>::default().build().execute_with(|| {
assert_eq!(<Balances as fungible::Inspect<_>>::balance(&1337), 0);
assert_ok!(<Balances as fungible::Unbalanced<_>>::set_balance(&1337, 100));
assert_eq!(<Balances as fungible::Inspect<_>>::balance(&1337), 100);
assert_ok!(Balances::reserve(&1337, 60));
assert_eq!(Balances::free_balance(1337) , 40);
assert_eq!(Balances::reserved_balance(1337), 60);
assert_noop!(<Balances as fungible::Unbalanced<_>>::set_balance(&1337, 0), ArithmeticError::Underflow);
assert_ok!(<Balances as fungible::Unbalanced<_>>::set_balance(&1337, 60));
assert_eq!(Balances::free_balance(1337) , 0);
assert_eq!(Balances::reserved_balance(1337), 60);
});
}
#[test]
fn fungible_unbalanced_trait_set_total_issuance_works() {
<$ext_builder>::default().build().execute_with(|| {
assert_eq!(<Balances as fungible::Inspect<_>>::total_issuance(), 0);
<Balances as fungible::Unbalanced<_>>::set_total_issuance(100);
assert_eq!(<Balances as fungible::Inspect<_>>::total_issuance(), 100);
});
}
#[test]
fn fungible_unbalanced_trait_decrease_balance_simple_works() {
<$ext_builder>::default().build().execute_with(|| {
// An Account that starts at 100
assert_ok!(<Balances as fungible::Unbalanced<_>>::set_balance(&1337, 100));
// and reserves 50
assert_ok!(Balances::reserve(&1337, 50));
// and is decreased by 20
assert_ok!(<Balances as fungible::Unbalanced<_>>::decrease_balance(&1337, 20));
// should end up at 80.
assert_eq!(<Balances as fungible::Inspect<_>>::balance(&1337), 80);
});
}
#[test]
fn fungible_unbalanced_trait_decrease_balance_works() {
<$ext_builder>::default().build().execute_with(|| {
assert_ok!(<Balances as fungible::Unbalanced<_>>::set_balance(&1337, 100));
assert_eq!(<Balances as fungible::Inspect<_>>::balance(&1337), 100);
assert_noop!(
<Balances as fungible::Unbalanced<_>>::decrease_balance(&1337, 101),
TokenError::NoFunds
);
assert_eq!(
<Balances as fungible::Unbalanced<_>>::decrease_balance(&1337, 100),
Ok(100)
);
assert_eq!(<Balances as fungible::Inspect<_>>::balance(&1337), 0);
// free: 40, reserved: 60
assert_ok!(<Balances as fungible::Unbalanced<_>>::set_balance(&1337, 100));
assert_ok!(Balances::reserve(&1337, 60));
assert_eq!(Balances::free_balance(1337) , 40);
assert_eq!(Balances::reserved_balance(1337), 60);
assert_noop!(
<Balances as fungible::Unbalanced<_>>::decrease_balance(&1337, 41),
TokenError::NoFunds
);
assert_eq!(
<Balances as fungible::Unbalanced<_>>::decrease_balance(&1337, 40),
Ok(40)
);
assert_eq!(<Balances as fungible::Inspect<_>>::balance(&1337), 60);
assert_eq!(Balances::free_balance(1337), 0);
assert_eq!(Balances::reserved_balance(1337), 60);
});
}
#[test]
fn fungible_unbalanced_trait_decrease_balance_at_most_works() {
<$ext_builder>::default().build().execute_with(|| {
assert_ok!(<Balances as fungible::Unbalanced<_>>::set_balance(&1337, 100));
assert_eq!(<Balances as fungible::Inspect<_>>::balance(&1337), 100);
assert_eq!(
<Balances as fungible::Unbalanced<_>>::decrease_balance_at_most(&1337, 101),
100
);
assert_eq!(<Balances as fungible::Inspect<_>>::balance(&1337), 0);
assert_ok!(<Balances as fungible::Unbalanced<_>>::set_balance(&1337, 100));
assert_eq!(
<Balances as fungible::Unbalanced<_>>::decrease_balance_at_most(&1337, 100),
100
);
assert_eq!(<Balances as fungible::Inspect<_>>::balance(&1337), 0);
// free: 40, reserved: 60
assert_ok!(<Balances as fungible::Unbalanced<_>>::set_balance(&1337, 100));
assert_ok!(Balances::reserve(&1337, 60));
assert_eq!(Balances::free_balance(1337) , 40);
assert_eq!(Balances::reserved_balance(1337), 60);
assert_eq!(
<Balances as fungible::Unbalanced<_>>::decrease_balance_at_most(&1337, 0),
0
);
assert_eq!(Balances::free_balance(1337) , 40);
assert_eq!(Balances::reserved_balance(1337), 60);
assert_eq!(
<Balances as fungible::Unbalanced<_>>::decrease_balance_at_most(&1337, 10),
10
);
assert_eq!(Balances::free_balance(1337), 30);
assert_eq!(
<Balances as fungible::Unbalanced<_>>::decrease_balance_at_most(&1337, 200),
30
);
assert_eq!(<Balances as fungible::Inspect<_>>::balance(&1337), 60);
assert_eq!(Balances::free_balance(1337), 0);
assert_eq!(Balances::reserved_balance(1337), 60);
});
}
#[test]
fn fungible_unbalanced_trait_increase_balance_works() {
<$ext_builder>::default().build().execute_with(|| {
assert_noop!(
<Balances as fungible::Unbalanced<_>>::increase_balance(&1337, 0),
TokenError::BelowMinimum
);
assert_eq!(
<Balances as fungible::Unbalanced<_>>::increase_balance(&1337, 1),
Ok(1)
);
assert_noop!(
<Balances as fungible::Unbalanced<_>>::increase_balance(&1337, u64::MAX),
ArithmeticError::Overflow
);
});
}
#[test]
fn fungible_unbalanced_trait_increase_balance_at_most_works() {
<$ext_builder>::default().build().execute_with(|| {
assert_eq!(
<Balances as fungible::Unbalanced<_>>::increase_balance_at_most(&1337, 0),
0
);
assert_eq!(
<Balances as fungible::Unbalanced<_>>::increase_balance_at_most(&1337, 1),
1
);
assert_eq!(
<Balances as fungible::Unbalanced<_>>::increase_balance_at_most(&1337, u64::MAX),
u64::MAX - 1
);
});
}
}
}