mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-14 12:11:09 +00:00
Allow pallet in construct_runtime to have fixed index (#6969)
* implement index for pallet + some tests * add test and doc * remove deprecated and document behavior * update internal doc * Apply suggestions from code review Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com> * address review * use index for all module, break construct_runtime * fix line length * implement migration helper funciton in scheduler * fix start at index 0 * Update frame/scheduler/src/lib.rs Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com> * Update frame/support/procedural/src/lib.rs Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com> * bump frame-metadata crate * factorize * avoid some unwrap and remove nightly join * Update frame/support/src/event.rs Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com> * fix test * add test and improve error message * factorize test * keep iterator, and use slice instead of vec * refactor to avoid to have expects * small refactor * Test something * Make sure we update the `Cargo.lock` * Apply suggestions from code review Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com> * return 2 error * Apply suggestions from code review Co-authored-by: Alexander Popiak <alexander.popiak@parity.io> * Update frame/scheduler/src/lib.rs Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * fix typo * Revert "fix typo" This reverts commit f2de8f2db34e8ac72bc9c34437c60dca3fa4ac22. * Revert "Update frame/scheduler/src/lib.rs" This reverts commit 6feb4605c6f784b64591e229de7a6fec6dbffb4b. Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com> Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com> Co-authored-by: Bastian Köcher <git@kchr.de> Co-authored-by: Alexander Popiak <alexander.popiak@parity.io> Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
86594727d9
commit
98951b33a9
@@ -438,6 +438,25 @@ impl<T: Trait> Module<T> {
|
||||
}
|
||||
}
|
||||
|
||||
/// Helper to migrate scheduler when the pallet origin type has changed.
|
||||
pub fn migrate_origin<OldOrigin: Into<T::PalletsOrigin> + codec::Decode>() {
|
||||
Agenda::<T>::translate::<
|
||||
Vec<Option<Scheduled<<T as Trait>::Call, T::BlockNumber, OldOrigin, T::AccountId>>>, _
|
||||
>(|_, agenda| Some(
|
||||
agenda
|
||||
.into_iter()
|
||||
.map(|schedule| schedule.map(|schedule| Scheduled {
|
||||
maybe_id: schedule.maybe_id,
|
||||
priority: schedule.priority,
|
||||
call: schedule.call,
|
||||
maybe_periodic: schedule.maybe_periodic,
|
||||
origin: schedule.origin.into(),
|
||||
_phantom: Default::default(),
|
||||
}))
|
||||
.collect::<Vec<_>>()
|
||||
));
|
||||
}
|
||||
|
||||
fn do_schedule(
|
||||
when: DispatchTime<T::BlockNumber>,
|
||||
maybe_periodic: Option<schedule::Period<T::BlockNumber>>,
|
||||
@@ -632,6 +651,7 @@ mod tests {
|
||||
traits::{BlakeTwo256, IdentityLookup},
|
||||
};
|
||||
use frame_system::{EnsureOneOf, EnsureRoot, EnsureSignedBy};
|
||||
use substrate_test_utils::assert_eq_uvec;
|
||||
use crate as scheduler;
|
||||
|
||||
mod logger {
|
||||
@@ -1161,8 +1181,6 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn migration_to_v2_works() {
|
||||
use substrate_test_utils::assert_eq_uvec;
|
||||
|
||||
new_test_ext().execute_with(|| {
|
||||
for i in 0..3u64 {
|
||||
let k = i.twox_64_concat();
|
||||
@@ -1264,4 +1282,118 @@ mod tests {
|
||||
assert_eq!(StorageVersion::get(), Releases::V2);
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_migrate_origin() {
|
||||
new_test_ext().execute_with(|| {
|
||||
for i in 0..3u64 {
|
||||
let k = i.twox_64_concat();
|
||||
let old: Vec<Option<Scheduled<_, _, u32, u64>>> = vec![
|
||||
Some(Scheduled {
|
||||
maybe_id: None,
|
||||
priority: i as u8 + 10,
|
||||
call: Call::Logger(logger::Call::log(96, 100)),
|
||||
origin: 3u32,
|
||||
maybe_periodic: None,
|
||||
_phantom: Default::default(),
|
||||
}),
|
||||
None,
|
||||
Some(Scheduled {
|
||||
maybe_id: Some(b"test".to_vec()),
|
||||
priority: 123,
|
||||
origin: 2u32,
|
||||
call: Call::Logger(logger::Call::log(69, 1000)),
|
||||
maybe_periodic: Some((456u64, 10)),
|
||||
_phantom: Default::default(),
|
||||
}),
|
||||
];
|
||||
frame_support::migration::put_storage_value(
|
||||
b"Scheduler",
|
||||
b"Agenda",
|
||||
&k,
|
||||
old,
|
||||
);
|
||||
}
|
||||
|
||||
impl Into<OriginCaller> for u32 {
|
||||
fn into(self) -> OriginCaller {
|
||||
match self {
|
||||
3u32 => system::RawOrigin::Root.into(),
|
||||
2u32 => system::RawOrigin::None.into(),
|
||||
_ => unreachable!("test make no use of it"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Scheduler::migrate_origin::<u32>();
|
||||
|
||||
assert_eq_uvec!(Agenda::<Test>::iter().collect::<Vec<_>>(), vec![
|
||||
(
|
||||
0,
|
||||
vec![
|
||||
Some(ScheduledV2::<_, _, OriginCaller, u64> {
|
||||
maybe_id: None,
|
||||
priority: 10,
|
||||
call: Call::Logger(logger::Call::log(96, 100)),
|
||||
maybe_periodic: None,
|
||||
origin: system::RawOrigin::Root.into(),
|
||||
_phantom: PhantomData::<u64>::default(),
|
||||
}),
|
||||
None,
|
||||
Some(ScheduledV2 {
|
||||
maybe_id: Some(b"test".to_vec()),
|
||||
priority: 123,
|
||||
call: Call::Logger(logger::Call::log(69, 1000)),
|
||||
maybe_periodic: Some((456u64, 10)),
|
||||
origin: system::RawOrigin::None.into(),
|
||||
_phantom: PhantomData::<u64>::default(),
|
||||
}),
|
||||
]),
|
||||
(
|
||||
1,
|
||||
vec![
|
||||
Some(ScheduledV2 {
|
||||
maybe_id: None,
|
||||
priority: 11,
|
||||
call: Call::Logger(logger::Call::log(96, 100)),
|
||||
maybe_periodic: None,
|
||||
origin: system::RawOrigin::Root.into(),
|
||||
_phantom: PhantomData::<u64>::default(),
|
||||
}),
|
||||
None,
|
||||
Some(ScheduledV2 {
|
||||
maybe_id: Some(b"test".to_vec()),
|
||||
priority: 123,
|
||||
call: Call::Logger(logger::Call::log(69, 1000)),
|
||||
maybe_periodic: Some((456u64, 10)),
|
||||
origin: system::RawOrigin::None.into(),
|
||||
_phantom: PhantomData::<u64>::default(),
|
||||
}),
|
||||
]
|
||||
),
|
||||
(
|
||||
2,
|
||||
vec![
|
||||
Some(ScheduledV2 {
|
||||
maybe_id: None,
|
||||
priority: 12,
|
||||
call: Call::Logger(logger::Call::log(96, 100)),
|
||||
maybe_periodic: None,
|
||||
origin: system::RawOrigin::Root.into(),
|
||||
_phantom: PhantomData::<u64>::default(),
|
||||
}),
|
||||
None,
|
||||
Some(ScheduledV2 {
|
||||
maybe_id: Some(b"test".to_vec()),
|
||||
priority: 123,
|
||||
call: Call::Logger(logger::Call::log(69, 1000)),
|
||||
maybe_periodic: Some((456u64, 10)),
|
||||
origin: system::RawOrigin::None.into(),
|
||||
_phantom: PhantomData::<u64>::default(),
|
||||
}),
|
||||
]
|
||||
)
|
||||
]);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user