Vesting pallet - make WithdrawReasons configurable (#12109)

* Vesting pallet - make WithdrawReasons configurable

* Update `pallet-vesting` README

Co-authored-by: parity-processbot <>
This commit is contained in:
Leszek Wiesner
2022-10-09 11:22:43 +02:00
committed by GitHub
parent 4a6c7aaf5b
commit 0b77060986
4 changed files with 20 additions and 6 deletions
+10 -3
View File
@@ -24,7 +24,8 @@
//!
//! A simple pallet providing a means of placing a linear curve on an account's locked balance. This
//! pallet ensures that there is a lock in place preventing the balance to drop below the *unvested*
//! amount for any reason other than transaction fee payment.
//! amount for any reason other than the ones specified in `UnvestedFundsAllowedWithdrawReasons`
//! configuration value.
//!
//! As the amount vested increases over time, the amount unvested reduces. However, locks remain in
//! place and explicit action is needed on behalf of the user to ensure that the amount locked is
@@ -170,6 +171,10 @@ pub mod pallet {
/// Weight information for extrinsics in this pallet.
type WeightInfo: WeightInfo;
/// Reasons that determine under which conditions the balance may drop below
/// the unvested amount.
type UnvestedFundsAllowedWithdrawReasons: Get<WithdrawReasons>;
/// Maximum number of vesting schedules an account may have at a given moment.
const MAX_VESTING_SCHEDULES: u32;
}
@@ -249,7 +254,9 @@ pub mod pallet {
Vesting::<T>::try_append(who, vesting_info)
.expect("Too many vesting schedules at genesis.");
let reasons = WithdrawReasons::TRANSFER | WithdrawReasons::RESERVE;
let reasons =
WithdrawReasons::except(T::UnvestedFundsAllowedWithdrawReasons::get());
T::Currency::set_lock(VESTING_ID, who, locked, reasons);
}
}
@@ -569,7 +576,7 @@ impl<T: Config> Pallet<T> {
T::Currency::remove_lock(VESTING_ID, who);
Self::deposit_event(Event::<T>::VestingCompleted { account: who.clone() });
} else {
let reasons = WithdrawReasons::TRANSFER | WithdrawReasons::RESERVE;
let reasons = WithdrawReasons::except(T::UnvestedFundsAllowedWithdrawReasons::get());
T::Currency::set_lock(VESTING_ID, who, total_locked_now, reasons);
Self::deposit_event(Event::<T>::VestingUpdated {
account: who.clone(),
+4 -1
View File
@@ -17,7 +17,7 @@
use frame_support::{
parameter_types,
traits::{ConstU32, ConstU64, GenesisBuild},
traits::{ConstU32, ConstU64, GenesisBuild, WithdrawReasons},
};
use sp_core::H256;
use sp_runtime::{
@@ -87,6 +87,8 @@ impl pallet_balances::Config for Test {
}
parameter_types! {
pub const MinVestedTransfer: u64 = 256 * 2;
pub UnvestedFundsAllowedWithdrawReasons: WithdrawReasons =
WithdrawReasons::except(WithdrawReasons::TRANSFER | WithdrawReasons::RESERVE);
pub static ExistentialDeposit: u64 = 0;
}
impl Config for Test {
@@ -96,6 +98,7 @@ impl Config for Test {
const MAX_VESTING_SCHEDULES: u32 = 3;
type MinVestedTransfer = MinVestedTransfer;
type WeightInfo = ();
type UnvestedFundsAllowedWithdrawReasons = UnvestedFundsAllowedWithdrawReasons;
}
pub struct ExtBuilder {