diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index 2f0efcaa56740..1e476f358876c 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -828,6 +828,7 @@ impl pallet_referenda::TracksInfo for TracksInfo { } } } +pallet_referenda::impl_tracksinfo_get!(TracksInfo, Balance, BlockNumber); impl pallet_referenda::Config for Runtime { type WeightInfo = pallet_referenda::weights::SubstrateWeight; diff --git a/frame/referenda/src/lib.rs b/frame/referenda/src/lib.rs index 92e5ecf5e539b..a2a5aae4e617b 100644 --- a/frame/referenda/src/lib.rs +++ b/frame/referenda/src/lib.rs @@ -72,7 +72,7 @@ use frame_support::{ v2::{Anon as ScheduleAnon, Named as ScheduleNamed}, DispatchTime, MaybeHashed, }, - Currency, Get, LockIdentifier, OnUnbalanced, OriginTrait, PollStatus, Polling, + Currency, LockIdentifier, OnUnbalanced, OriginTrait, PollStatus, Polling, ReservableCurrency, VoteTally, }, BoundedVec, @@ -108,6 +108,30 @@ mod tests; #[cfg(feature = "runtime-benchmarks")] pub mod benchmarking; +pub use frame_support::traits::Get; +pub use sp_std::vec::Vec; + +#[macro_export] +macro_rules! impl_tracksinfo_get { + ($tracksinfo:ty, $balance:ty, $blocknumber:ty) => { + impl + $crate::Get< + $crate::Vec<( + <$tracksinfo as $crate::TracksInfo<$balance, $blocknumber>>::Id, + $crate::TrackInfo<$balance, $blocknumber>, + )>, + > for $tracksinfo + { + fn get() -> $crate::Vec<( + <$tracksinfo as $crate::TracksInfo<$balance, $blocknumber>>::Id, + $crate::TrackInfo<$balance, $blocknumber>, + )> { + <$tracksinfo as $crate::TracksInfo<$balance, $blocknumber>>::tracks().to_vec() + } + } + }; +} + const ASSEMBLY_ID: LockIdentifier = *b"assembly"; #[frame_support::pallet] @@ -184,11 +208,17 @@ pub mod pallet { // The other stuff. /// Information concerning the different referendum tracks. - type Tracks: TracksInfo< - BalanceOf, - Self::BlockNumber, - Origin = ::PalletsOrigin, - >; + #[pallet::constant] + type Tracks: Get< + Vec<( + , Self::BlockNumber>>::Id, + TrackInfo, Self::BlockNumber>, + )>, + > + TracksInfo< + BalanceOf, + Self::BlockNumber, + Origin = ::PalletsOrigin, + >; } /// The next free referendum index, aka the number of referenda started so far. diff --git a/frame/referenda/src/mock.rs b/frame/referenda/src/mock.rs index e046b29898e7b..70ca304eed3cb 100644 --- a/frame/referenda/src/mock.rs +++ b/frame/referenda/src/mock.rs @@ -210,6 +210,7 @@ impl TracksInfo for TestTracksInfo { } } } +impl_tracksinfo_get!(TestTracksInfo, u64, u64); impl Config for Test { type WeightInfo = ();