Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
9144de8
add general logic and try-state check
jessechejieh Apr 1, 2026
6104822
solution 1.2
jessechejieh Apr 6, 2026
b00c904
migration unit test
jessechejieh Apr 17, 2026
0454019
add migration to westend
jessechejieh Apr 18, 2026
4130974
OrderKey
jessechejieh Jun 12, 2026
c67e66c
Merge branch 'master' into OrdPay
jessechejieh Jun 12, 2026
fb5c377
Update from github-actions[bot] running command 'bench --pallet palle…
github-actions[bot] Jun 12, 2026
04238eb
order bug fix
muharem Jun 25, 2026
b2eaa46
fix migration
muharem Jun 25, 2026
022b2a1
Merge pull request #2 from paritytech/muharem-ordered-payout
jessechejieh Jun 27, 2026
7aac659
fix full-queue rotation deadlock and equal-order-key demotion ordering
jessechejieh Jun 29, 2026
f5945d3
include benchmark doc change
jessechejieh Jun 29, 2026
9c940e1
Merge branch 'master' into OrdPay
jessechejieh Jun 29, 2026
0623714
Update from github-actions[bot] running command 'bench --pallet palle…
github-actions[bot] Jun 29, 2026
e691040
propagate feature runtime wide
jessechejieh Jun 29, 2026
e92c3e3
Update from github-actions[bot] running command 'fmt'
github-actions[bot] Jun 29, 2026
49509a8
revert westend, no pallet_treasury
jessechejieh Jun 29, 2026
91fa022
zeroed order expiration
jessechejieh Jun 29, 2026
ed82a0a
Update from github-actions[bot] running command 'bench --runtime asse…
github-actions[bot] Jun 29, 2026
891a223
Versioned Migration
jessechejieh Jul 11, 2026
c96d3a9
Merge branch 'master' into OrdPay
jessechejieh Jul 11, 2026
6cf3218
Update from github-actions[bot] running command 'fmt'
github-actions[bot] Jul 11, 2026
503cdfd
Merge branch 'master' into OrdPay
jessechejieh Jul 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,8 @@ parameter_types! {
pub const MaxPeerInHeartbeats: u32 = 10_000;
pub const MaxBalance: Balance = Balance::max_value();
pub TreasuryAccount: AccountId = Treasury::account_id();
pub const MaxQueuedSpends: u32 = 100;
pub const OrderExpirationPeriod: BlockNumber = 2 * DAYS;
}

pub type TreasurySpender = EitherOf<EnsureRootWithSuccess<AccountId, MaxBalance>, Spender>;
Expand Down Expand Up @@ -153,6 +155,8 @@ impl pallet_treasury::Config for Runtime {
type BalanceConverter = TreasuryBalanceConverter;
type PayoutPeriod = PayoutSpendPeriod;
type BlockNumberProvider = RelaychainDataProvider<Runtime>;
type MaxQueuedSpends = MaxQueuedSpends;
type OrderExpirationPeriod = OrderExpirationPeriod;
#[cfg(feature = "runtime-benchmarks")]
type BenchmarkHelper = parachains_common::pay::benchmarks::LocalPayArguments<
xcm_config::TrustBackedAssetsPalletIndex,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2001,6 +2001,8 @@ pub type Migrations = (
Runtime,
TrappedBalanceMember,
>,
// unreleased
pallet_treasury::migration::MigrateToOrderedPayouts<Runtime>,
// permanent
pallet_xcm::migration::MigrateToLatestXcmVersion<Runtime>,
cumulus_pallet_aura_ext::migration::MigrateV0ToV1<Runtime>,
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -335,6 +335,8 @@ impl pallet_treasury::Config<FellowshipTreasuryInstance> for Runtime {
AssetRate,
>;
type PayoutPeriod = ConstU32<{ 30 * DAYS }>;
type MaxQueuedSpends = ConstU32<100>;
type OrderExpirationPeriod = ConstU32<{ 3 * DAYS }>;
#[cfg(feature = "runtime-benchmarks")]
type BenchmarkHelper = polkadot_runtime_common::impls::benchmarks::TreasuryArguments<
sp_core::ConstU8<1>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -871,6 +871,11 @@ type Migrations = (
pallet_session::migrations::v1::InitOffenceSeverity<Runtime>,
>,
cumulus_pallet_parachain_system::migration::Migration<Runtime>,
// unreleased
pallet_treasury::migration::MigrateToOrderedPayouts<
Runtime,
fellowship::FellowshipTreasuryInstance,
>,
);

// Helpers for the core fellowship pallet v1->v2 storage migration.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@
//! Autogenerated weights for `pallet_treasury`
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 32.0.0
//! DATE: 2025-02-21, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! DATE: 2026-06-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! WORST CASE MAP SIZE: `1000000`
//! HOSTNAME: `e0f303704c84`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz`
//! HOSTNAME: `1807571685ea`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz`
//! WASM-EXECUTION: `Compiled`, CHAIN: `None`, DB CACHE: 1024

// Executed Command:
Expand Down Expand Up @@ -58,10 +58,10 @@ impl<T: frame_system::Config> pallet_treasury::WeightInfo for WeightInfo<T> {
/// Proof: `FellowshipTreasury::Proposals` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`)
fn spend_local() -> Weight {
// Proof Size summary in bytes:
// Measured: `76`
// Measured: `109`
// Estimated: `1887`
// Minimum execution time: 12_879_000 picoseconds.
Weight::from_parts(13_346_000, 0)
// Minimum execution time: 12_453_000 picoseconds.
Weight::from_parts(13_366_000, 0)
.saturating_add(Weight::from_parts(0, 1887))
.saturating_add(T::DbWeight::get().reads(2))
.saturating_add(T::DbWeight::get().writes(3))
Expand All @@ -70,10 +70,10 @@ impl<T: frame_system::Config> pallet_treasury::WeightInfo for WeightInfo<T> {
/// Proof: `FellowshipTreasury::Approvals` (`max_values`: Some(1), `max_size`: Some(402), added: 897, mode: `MaxEncodedLen`)
fn remove_approval() -> Weight {
// Proof Size summary in bytes:
// Measured: `161`
// Measured: `194`
// Estimated: `1887`
// Minimum execution time: 6_978_000 picoseconds.
Weight::from_parts(7_278_000, 0)
// Minimum execution time: 6_619_000 picoseconds.
Weight::from_parts(7_219_000, 0)
.saturating_add(Weight::from_parts(0, 1887))
.saturating_add(T::DbWeight::get().reads(1))
.saturating_add(T::DbWeight::get().writes(1))
Expand All @@ -87,13 +87,13 @@ impl<T: frame_system::Config> pallet_treasury::WeightInfo for WeightInfo<T> {
/// The range of component `p` is `[0, 99]`.
fn on_initialize_proposals(p: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `280 + p * (1 ±0)`
// Measured: `313 + p * (1 ±0)`
// Estimated: `3593`
// Minimum execution time: 13_758_000 picoseconds.
Weight::from_parts(17_033_109, 0)
// Minimum execution time: 13_437_000 picoseconds.
Weight::from_parts(16_723_316, 0)
.saturating_add(Weight::from_parts(0, 3593))
// Standard Error: 1_091
.saturating_add(Weight::from_parts(70_962, 0).saturating_mul(p.into()))
// Standard Error: 398
.saturating_add(Weight::from_parts(66_219, 0).saturating_mul(p.into()))
.saturating_add(T::DbWeight::get().reads(3))
.saturating_add(T::DbWeight::get().writes(2))
}
Expand All @@ -103,20 +103,26 @@ impl<T: frame_system::Config> pallet_treasury::WeightInfo for WeightInfo<T> {
/// Proof: `AssetRate::ConversionRateToNative` (`max_values`: None, `max_size`: Some(1238), added: 3713, mode: `MaxEncodedLen`)
/// Storage: `FellowshipTreasury::SpendCount` (r:1 w:1)
/// Proof: `FellowshipTreasury::SpendCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `FellowshipTreasury::NextPayout` (r:1 w:1)
/// Proof: `FellowshipTreasury::NextPayout` (`max_values`: None, `max_size`: Some(1226), added: 3701, mode: `MaxEncodedLen`)
/// Storage: `FellowshipTreasury::PayoutQueue` (r:1 w:1)
/// Proof: `FellowshipTreasury::PayoutQueue` (`max_values`: None, `max_size`: Some(2016), added: 4491, mode: `MaxEncodedLen`)
/// Storage: `FellowshipTreasury::Spends` (r:0 w:1)
/// Proof: `FellowshipTreasury::Spends` (`max_values`: None, `max_size`: Some(1853), added: 4328, mode: `MaxEncodedLen`)
fn spend() -> Weight {
// Proof Size summary in bytes:
// Measured: `219`
// Estimated: `4703`
// Minimum execution time: 24_150_000 picoseconds.
Weight::from_parts(24_739_000, 0)
.saturating_add(Weight::from_parts(0, 4703))
.saturating_add(T::DbWeight::get().reads(3))
.saturating_add(T::DbWeight::get().writes(2))
// Measured: `1147`
// Estimated: `5481`
// Minimum execution time: 37_925_000 picoseconds.
Weight::from_parts(39_956_000, 0)
.saturating_add(Weight::from_parts(0, 5481))
.saturating_add(T::DbWeight::get().reads(5))
.saturating_add(T::DbWeight::get().writes(4))
}
/// Storage: `FellowshipTreasury::Spends` (r:1 w:1)
/// Proof: `FellowshipTreasury::Spends` (`max_values`: None, `max_size`: Some(1853), added: 4328, mode: `MaxEncodedLen`)
/// Storage: `FellowshipTreasury::NextPayout` (r:1 w:0)
/// Proof: `FellowshipTreasury::NextPayout` (`max_values`: None, `max_size`: Some(1226), added: 3701, mode: `MaxEncodedLen`)
/// Storage: `ParachainInfo::ParachainId` (r:1 w:0)
/// Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `PolkadotXcm::QueryCounter` (r:1 w:1)
Expand All @@ -125,48 +131,72 @@ impl<T: frame_system::Config> pallet_treasury::WeightInfo for WeightInfo<T> {
/// Proof: `XcmpQueue::DeliveryFeeFactor` (`max_values`: None, `max_size`: Some(28), added: 2503, mode: `MaxEncodedLen`)
/// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0)
/// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`)
/// Storage: `XcmpQueue::OutboundXcmpStatus` (r:1 w:1)
/// Proof: `XcmpQueue::OutboundXcmpStatus` (`max_values`: Some(1), `max_size`: Some(2306), added: 2801, mode: `MaxEncodedLen`)
/// Storage: `ParachainSystem::RelevantMessagingState` (r:1 w:0)
/// Proof: `ParachainSystem::RelevantMessagingState` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
/// Storage: `XcmpQueue::OutboundXcmpStatus` (r:1 w:1)
/// Proof: `XcmpQueue::OutboundXcmpStatus` (`max_values`: Some(1), `max_size`: Some(1282), added: 1777, mode: `MaxEncodedLen`)
/// Storage: `XcmpQueue::OutboundXcmpMessages` (r:0 w:1)
/// Proof: `XcmpQueue::OutboundXcmpMessages` (`max_values`: None, `max_size`: Some(105506), added: 107981, mode: `MaxEncodedLen`)
/// Storage: `PolkadotXcm::Queries` (r:0 w:1)
/// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`)
fn payout() -> Weight {
// Proof Size summary in bytes:
// Measured: `559`
// Measured: `568`
// Estimated: `5318`
// Minimum execution time: 59_146_000 picoseconds.
Weight::from_parts(62_110_000, 0)
// Minimum execution time: 61_546_000 picoseconds.
Weight::from_parts(65_150_000, 0)
.saturating_add(Weight::from_parts(0, 5318))
.saturating_add(T::DbWeight::get().reads(7))
.saturating_add(T::DbWeight::get().reads(8))
.saturating_add(T::DbWeight::get().writes(5))
}
/// Storage: `FellowshipTreasury::Spends` (r:1 w:1)
/// Proof: `FellowshipTreasury::Spends` (`max_values`: None, `max_size`: Some(1853), added: 4328, mode: `MaxEncodedLen`)
/// Storage: `FellowshipTreasury::NextPayout` (r:1 w:1)
/// Proof: `FellowshipTreasury::NextPayout` (`max_values`: None, `max_size`: Some(1226), added: 3701, mode: `MaxEncodedLen`)
/// Storage: `PolkadotXcm::Queries` (r:1 w:1)
/// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`)
/// Storage: `FellowshipTreasury::PayoutQueue` (r:1 w:1)
/// Proof: `FellowshipTreasury::PayoutQueue` (`max_values`: None, `max_size`: Some(2016), added: 4491, mode: `MaxEncodedLen`)
fn check_status() -> Weight {
// Proof Size summary in bytes:
// Measured: `240`
// Estimated: `5318`
// Minimum execution time: 25_460_000 picoseconds.
Weight::from_parts(26_237_000, 0)
.saturating_add(Weight::from_parts(0, 5318))
.saturating_add(T::DbWeight::get().reads(2))
// Measured: `1176`
// Estimated: `5481`
// Minimum execution time: 40_938_000 picoseconds.
Weight::from_parts(43_298_000, 0)
.saturating_add(Weight::from_parts(0, 5481))
.saturating_add(T::DbWeight::get().reads(4))
.saturating_add(T::DbWeight::get().writes(4))
}
/// Storage: `FellowshipTreasury::Spends` (r:1 w:0)
/// Proof: `FellowshipTreasury::Spends` (`max_values`: None, `max_size`: Some(1853), added: 4328, mode: `MaxEncodedLen`)
/// Storage: `FellowshipTreasury::NextPayout` (r:1 w:1)
/// Proof: `FellowshipTreasury::NextPayout` (`max_values`: None, `max_size`: Some(1226), added: 3701, mode: `MaxEncodedLen`)
/// Storage: `FellowshipTreasury::PayoutQueue` (r:1 w:1)
/// Proof: `FellowshipTreasury::PayoutQueue` (`max_values`: None, `max_size`: Some(2016), added: 4491, mode: `MaxEncodedLen`)
fn check_status_rotation() -> Weight {
// Proof Size summary in bytes:
// Measured: `1140`
// Estimated: `5481`
// Minimum execution time: 30_501_000 picoseconds.
Weight::from_parts(32_604_000, 0)
.saturating_add(Weight::from_parts(0, 5481))
.saturating_add(T::DbWeight::get().reads(3))
.saturating_add(T::DbWeight::get().writes(2))
}
/// Storage: `FellowshipTreasury::Spends` (r:1 w:1)
/// Proof: `FellowshipTreasury::Spends` (`max_values`: None, `max_size`: Some(1853), added: 4328, mode: `MaxEncodedLen`)
/// Storage: `FellowshipTreasury::NextPayout` (r:1 w:1)
/// Proof: `FellowshipTreasury::NextPayout` (`max_values`: None, `max_size`: Some(1226), added: 3701, mode: `MaxEncodedLen`)
/// Storage: `FellowshipTreasury::PayoutQueue` (r:1 w:1)
/// Proof: `FellowshipTreasury::PayoutQueue` (`max_values`: None, `max_size`: Some(2016), added: 4491, mode: `MaxEncodedLen`)
fn void_spend() -> Weight {
// Proof Size summary in bytes:
// Measured: `212`
// Estimated: `5318`
// Minimum execution time: 15_357_000 picoseconds.
Weight::from_parts(15_787_000, 0)
.saturating_add(Weight::from_parts(0, 5318))
.saturating_add(T::DbWeight::get().reads(1))
.saturating_add(T::DbWeight::get().writes(1))
// Measured: `1148`
// Estimated: `5481`
// Minimum execution time: 28_370_000 picoseconds.
Weight::from_parts(30_215_000, 0)
.saturating_add(Weight::from_parts(0, 5481))
.saturating_add(T::DbWeight::get().reads(3))
.saturating_add(T::DbWeight::get().writes(3))
}
}
2 changes: 2 additions & 0 deletions polkadot/runtime/common/src/impls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -400,6 +400,8 @@ mod tests {
type BalanceConverter = UnityAssetBalanceConversion;
type PayoutPeriod = ConstU64<0>;
type BlockNumberProvider = System;
type MaxQueuedSpends = frame_support::traits::ConstU32<100>;
type OrderExpirationPeriod = ConstU64<10>;
#[cfg(feature = "runtime-benchmarks")]
type BenchmarkHelper = ();
}
Expand Down
9 changes: 8 additions & 1 deletion polkadot/runtime/rococo/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -512,6 +512,7 @@ impl pallet_session::historical::Config for Runtime {
parameter_types! {
pub const SessionsPerEra: SessionIndex = 6;
pub const BondingDuration: sp_staking::EraIndex = 28;

}

parameter_types! {
Expand All @@ -532,6 +533,8 @@ parameter_types! {
pub const MaxKeys: u32 = 10_000;
pub const MaxPeerInHeartbeats: u32 = 10_000;
pub const MaxBalance: Balance = Balance::max_value();
pub const MaxQueuedSpends: u32 = 100;
pub const OrderExpirationPeriod: BlockNumber = 2 * DAYS;
}

impl pallet_treasury::Config for Runtime {
Expand Down Expand Up @@ -570,6 +573,8 @@ impl pallet_treasury::Config for Runtime {
>;
type PayoutPeriod = PayoutSpendPeriod;
type BlockNumberProvider = System;
type MaxQueuedSpends = MaxQueuedSpends;
type OrderExpirationPeriod = OrderExpirationPeriod;
#[cfg(feature = "runtime-benchmarks")]
type BenchmarkHelper = polkadot_runtime_common::impls::benchmarks::TreasuryArguments;
}
Expand Down Expand Up @@ -1755,7 +1760,7 @@ pub mod migrations {
pallet_elections_phragmen::migrations::unlock_and_unreserve_all_funds::UnlockAndUnreserveAllFunds<UnlockConfig>,
pallet_democracy::migrations::unlock_and_unreserve_all_funds::UnlockAndUnreserveAllFunds<UnlockConfig>,
pallet_tips::migrations::unreserve_deposits::UnreserveDeposits<UnlockConfig, ()>,
pallet_treasury::migration::cleanup_proposals::Migration<Runtime, (), BalanceUnreserveWeight>,
pallet_treasury::migration::CleanupProposalsMigration<Runtime, (), BalanceUnreserveWeight>,

// Delete all Gov v1 pallet storage key/values.

Expand All @@ -1781,6 +1786,8 @@ pub mod migrations {
parachains_configuration::migration::v13::MigrateToV13<Runtime>,
parachains_shared::migration::MigrateToV2<Runtime>,

pallet_treasury::migration::MigrateToOrderedPayouts<Runtime>,

// permanent
pallet_xcm::migration::MigrateToLatestXcmVersion<Runtime>,
parachains_inclusion::migration::MigrateToV1<Runtime>,
Expand Down
11 changes: 10 additions & 1 deletion polkadot/runtime/rococo/src/weights/pallet_treasury.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 32.0.0
//! DATE: 2025-02-22, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! WORST CASE MAP SIZE: `1000000`
//! HOSTNAME: `d3a9aad6f7a3`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz`
//! WASM-EXECUTION: `Compiled`, CHAIN: `None`, DB CACHE: 1024

// Executed Command:
Expand Down Expand Up @@ -152,6 +151,16 @@ impl<T: frame_system::Config> pallet_treasury::WeightInfo for WeightInfo<T> {
.saturating_add(T::DbWeight::get().reads(2))
.saturating_add(T::DbWeight::get().writes(2))
}
fn check_status_rotation() -> Weight {
// Proof Size summary in bytes:
// Measured: `305`
// Estimated: `5318`
// Minimum execution time: 25_238_000 picoseconds.
Weight::from_parts(25_654_000, 0)
.saturating_add(Weight::from_parts(0, 5318))
.saturating_add(T::DbWeight::get().reads(2))
.saturating_add(T::DbWeight::get().writes(2))
}
/// Storage: `Treasury::Spends` (r:1 w:1)
/// Proof: `Treasury::Spends` (`max_values`: None, `max_size`: Some(1853), added: 4328, mode: `MaxEncodedLen`)
fn void_spend() -> Weight {
Expand Down
56 changes: 56 additions & 0 deletions prdoc/pr_11603.prdoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
title: 'pallet-treasury: Ordered Payouts'
doc:
- audience: Runtime Dev
description: |-
Implements ordered spend payouts (Solution 1.2 of https://github.com/paritytech/polkadot-sdk/issues/11100)
for `pallet-treasury`. Spends are now paid out in order per asset kind, preventing smaller,
later-approved spends from draining the treasury before earlier-approved spends can be paid.

Two new storage items are introduced: `NextPayout`, holding the spend currently at the head of
the payout order for each asset kind together with its order expiration block, and
`PayoutQueue`, a bounded vector of `(spend_index, order_key)` entries per asset kind sorted by
order key. The order key is `max(now, valid_from)` for newly inserted spends, so a later
approval never overtakes an already-mature spend, and the block number of the rotation for
spends rotated to the back after their order expired.

No new extrinsics are added; ordering is enforced transparently through the existing calls:

- `spend` inserts the approved spend into the payout queue for its asset kind, or sets it as
`NextPayout` if there is none, with an order expiration of
`max(now, valid_from) + OrderExpirationPeriod`.
- `payout` only succeeds for the spend designated as `NextPayout` for its asset kind and fails
with the new `NotNextPayout` error otherwise.
- `check_status` additionally rotates an expired head back into the queue (emitting the new
`PayoutQueueRotated` event) and promotes the next entry on removal of a paid-out or expired
spend.
- `void_spend` also removes the spend from the payout order and promotes the next entry.

Runtimes adopting this need to configure two new `Config` items: `MaxQueuedSpends` (bounds the
queue per asset kind; spends fail with the new `QueueFull` error once reached) and
`OrderExpirationPeriod` (how long a spend may block the head of the order before it can be
rotated). A `MigrateToOrderedPayouts` migration is provided to populate the payout order from
the existing `Spends` storage; it is a `VersionedMigration` bumping the pallet storage version
from 0 to 1.
crates:
- name: pallet-treasury
bump: major
- name: rococo-runtime
bump: minor
- name: asset-hub-westend-runtime
bump: minor
- name: collectives-westend-runtime
bump: minor
- name: kitchensink-runtime
bump: minor
- name: pallet-staking-async-parachain-runtime
bump: minor
- name: pallet-staking-async-rc-runtime
bump: minor
- name: polkadot-runtime-common
bump: none
- name: pallet-bounties
bump: none
- name: pallet-child-bounties
bump: none
- name: pallet-tips
bump: none
5 changes: 5 additions & 0 deletions substrate/bin/node/runtime/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1328,6 +1328,8 @@ parameter_types! {
pub const MaxApprovals: u32 = 100;
pub const MaxBalance: Balance = Balance::max_value();
pub const SpendPayoutPeriod: BlockNumber = 30 * DAYS;
pub const MaxQueuedSpends: u32 = 100;
pub const OrderExpirationPeriod: BlockNumber = 10 * HOURS;
}

impl pallet_treasury::Config for Runtime {
Expand All @@ -1352,6 +1354,8 @@ impl pallet_treasury::Config for Runtime {
type BalanceConverter = AssetRate;
type PayoutPeriod = SpendPayoutPeriod;
type BlockNumberProvider = System;
type MaxQueuedSpends = MaxQueuedSpends;
type OrderExpirationPeriod = OrderExpirationPeriod;
#[cfg(feature = "runtime-benchmarks")]
type BenchmarkHelper = PalletTreasuryArguments;
}
Expand Down Expand Up @@ -3026,6 +3030,7 @@ type Migrations = (
pallet_alliance::migration::Migration<Runtime>,
pallet_contracts::Migration<Runtime>,
pallet_identity::migration::versioned::V0ToV1<Runtime, IDENTITY_MIGRATION_KEY_LIMIT>,
pallet_treasury::migration::MigrateToOrderedPayouts<Runtime>,
);

type EventRecord = frame_system::EventRecord<
Expand Down
Loading
Loading