From 6f46882633dcebf233b879449820cb64841f0ec4 Mon Sep 17 00:00:00 2001 From: Bryan Chen Date: Mon, 6 Jan 2025 15:48:50 +1300 Subject: [PATCH 1/2] allow use reserved balances for staking --- substrate/frame/staking/src/asset.rs | 2 +- substrate/frame/staking/src/tests.rs | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/substrate/frame/staking/src/asset.rs b/substrate/frame/staking/src/asset.rs index 23368b1f8fca..b939987ae72b 100644 --- a/substrate/frame/staking/src/asset.rs +++ b/substrate/frame/staking/src/asset.rs @@ -41,7 +41,7 @@ pub fn total_balance(who: &T::AccountId) -> BalanceOf { /// /// This includes balance free to stake along with any balance that is already staked. pub fn stakeable_balance(who: &T::AccountId) -> BalanceOf { - T::Currency::free_balance(who) + T::Currency::total_balance(who) } /// Balance of `who` that is currently at stake. diff --git a/substrate/frame/staking/src/tests.rs b/substrate/frame/staking/src/tests.rs index 6c2335e1aac8..662b7f155648 100644 --- a/substrate/frame/staking/src/tests.rs +++ b/substrate/frame/staking/src/tests.rs @@ -8718,6 +8718,33 @@ fn do_not_reenable_higher_offenders_mock() { }); } +#[test] +fn can_stake_reserve_balances() { + use frame_support::traits::{ + fungible::Inspect, + tokens::{Fortitude, Preservation}, + }; + + ExtBuilder::default().build_and_execute(|| { + // account 1 have 10 tokens + + // reserve 5 + let _ = Balances::reserve(&1, 5); + + // check transferable balance = 10 - 5 - ED = 4 + assert_eq!(Balances::reducible_balance(&1, Preservation::Expendable, Fortitude::Polite), 4); + + // stake all tokens + assert_ok!(Staking::bond(RuntimeOrigin::signed(1), 10, RewardDestination::Staked)); + + // all 10 is staked + assert_eq!(Staking::ledger(1.into()).unwrap().active, 10); + + // check transferable balance + assert_eq!(Balances::reducible_balance(&1, Preservation::Expendable, Fortitude::Polite), 0); + }); +} + #[cfg(all(feature = "try-runtime", test))] mod migration_tests { use super::*; From 1125d859b4e3695c5876263eed7a6bd5ace73f48 Mon Sep 17 00:00:00 2001 From: Bryan Chen Date: Mon, 6 Jan 2025 15:59:10 +1300 Subject: [PATCH 2/2] add prdoc --- prdoc/pr_7047.prdoc | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 prdoc/pr_7047.prdoc diff --git a/prdoc/pr_7047.prdoc b/prdoc/pr_7047.prdoc new file mode 100644 index 000000000000..5fd57827958f --- /dev/null +++ b/prdoc/pr_7047.prdoc @@ -0,0 +1,13 @@ +title: Allow use reserved balances for staking +doc: +- audience: + - Runtime Dev + - Runtime User + description: |- + Allow reserved balances to be used for staking. + + Previously there is an inconsistency that reserved balances cannot be used for staking, but can be transferred out if staked balances is greater than reserved amount. Effectively allow reserved balances to be used for staking. + +crates: +- name: pallet-staking + bump: minor