mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-09 20:11:09 +00:00
BREAKING - Try-runtime: Use proper error types (#13993)
* Try-state: DispatchResult as return type * try_state for the rest of the pallets * pre_upgrade * post_upgrade * try_runtime_upgrade * fixes * bags-list fix * fix * update test * warning fix * ... * final fixes 🤞 * warning.. * frame-support * warnings * Update frame/staking/src/migrations.rs Co-authored-by: Liam Aharon <liam.aharon@hotmail.com> * fix * fix warning * nit fix * merge fixes * small fix * should be good now * missed these ones * introduce TryRuntimeError and TryRuntimeResult * fixes * fix * removed TryRuntimeResult & made some fixes * fix testsg * tests passing * unnecessary imports * Update frame/assets/src/migration.rs Co-authored-by: Keith Yeung <kungfukeith11@gmail.com> --------- Co-authored-by: Liam Aharon <liam.aharon@hotmail.com> Co-authored-by: Keith Yeung <kungfukeith11@gmail.com>
This commit is contained in:
@@ -115,6 +115,9 @@ use sp_runtime::{
|
||||
};
|
||||
use sp_std::{cmp::Ordering, prelude::*};
|
||||
|
||||
#[cfg(any(feature = "try-runtime", test))]
|
||||
use sp_runtime::TryRuntimeError;
|
||||
|
||||
mod benchmarking;
|
||||
pub mod weights;
|
||||
pub use weights::WeightInfo;
|
||||
@@ -327,7 +330,7 @@ pub mod pallet {
|
||||
}
|
||||
|
||||
#[cfg(feature = "try-runtime")]
|
||||
fn try_state(_n: T::BlockNumber) -> Result<(), &'static str> {
|
||||
fn try_state(_n: T::BlockNumber) -> Result<(), TryRuntimeError> {
|
||||
Self::do_try_state()
|
||||
}
|
||||
}
|
||||
@@ -1193,7 +1196,7 @@ impl<T: Config> ContainsLengthBound for Pallet<T> {
|
||||
|
||||
#[cfg(any(feature = "try-runtime", test))]
|
||||
impl<T: Config> Pallet<T> {
|
||||
fn do_try_state() -> Result<(), &'static str> {
|
||||
fn do_try_state() -> Result<(), TryRuntimeError> {
|
||||
Self::try_state_members()?;
|
||||
Self::try_state_runners_up()?;
|
||||
Self::try_state_candidates()?;
|
||||
@@ -1204,20 +1207,20 @@ impl<T: Config> Pallet<T> {
|
||||
|
||||
/// [`Members`] state checks. Invariants:
|
||||
/// - Members are always sorted based on account ID.
|
||||
fn try_state_members() -> Result<(), &'static str> {
|
||||
fn try_state_members() -> Result<(), TryRuntimeError> {
|
||||
let mut members = Members::<T>::get().clone();
|
||||
members.sort_by_key(|m| m.who.clone());
|
||||
|
||||
if Members::<T>::get() == members {
|
||||
Ok(())
|
||||
} else {
|
||||
Err("try_state checks: Members must be always sorted by account ID")
|
||||
Err("try_state checks: Members must be always sorted by account ID".into())
|
||||
}
|
||||
}
|
||||
|
||||
// [`RunnersUp`] state checks. Invariants:
|
||||
// - Elements are sorted based on weight (worst to best).
|
||||
fn try_state_runners_up() -> Result<(), &'static str> {
|
||||
fn try_state_runners_up() -> Result<(), TryRuntimeError> {
|
||||
let mut sorted = RunnersUp::<T>::get();
|
||||
// worst stake first
|
||||
sorted.sort_by(|a, b| a.stake.cmp(&b.stake));
|
||||
@@ -1225,27 +1228,28 @@ impl<T: Config> Pallet<T> {
|
||||
if RunnersUp::<T>::get() == sorted {
|
||||
Ok(())
|
||||
} else {
|
||||
Err("try_state checks: Runners Up must always be sorted by stake (worst to best)")
|
||||
Err("try_state checks: Runners Up must always be sorted by stake (worst to best)"
|
||||
.into())
|
||||
}
|
||||
}
|
||||
|
||||
// [`Candidates`] state checks. Invariants:
|
||||
// - Always sorted based on account ID.
|
||||
fn try_state_candidates() -> Result<(), &'static str> {
|
||||
fn try_state_candidates() -> Result<(), TryRuntimeError> {
|
||||
let mut candidates = Candidates::<T>::get().clone();
|
||||
candidates.sort_by_key(|(c, _)| c.clone());
|
||||
|
||||
if Candidates::<T>::get() == candidates {
|
||||
Ok(())
|
||||
} else {
|
||||
Err("try_state checks: Candidates must be always sorted by account ID")
|
||||
Err("try_state checks: Candidates must be always sorted by account ID".into())
|
||||
}
|
||||
}
|
||||
// [`Candidates`] and [`RunnersUp`] state checks. Invariants:
|
||||
// - Candidates and runners-ups sets are disjoint.
|
||||
fn try_state_candidates_runners_up_disjoint() -> Result<(), &'static str> {
|
||||
fn try_state_candidates_runners_up_disjoint() -> Result<(), TryRuntimeError> {
|
||||
match Self::intersects(&Self::candidates_ids(), &Self::runners_up_ids()) {
|
||||
true => Err("Candidates and runners up sets should always be disjoint"),
|
||||
true => Err("Candidates and runners up sets should always be disjoint".into()),
|
||||
false => Ok(()),
|
||||
}
|
||||
}
|
||||
@@ -1253,11 +1257,12 @@ impl<T: Config> Pallet<T> {
|
||||
// [`Members`], [`Candidates`] and [`RunnersUp`] state checks. Invariants:
|
||||
// - Members and candidates sets are disjoint;
|
||||
// - Members and runners-ups sets are disjoint.
|
||||
fn try_state_members_disjoint() -> Result<(), &'static str> {
|
||||
fn try_state_members_disjoint() -> Result<(), TryRuntimeError> {
|
||||
match Self::intersects(&Pallet::<T>::members_ids(), &Self::candidates_ids()) &&
|
||||
Self::intersects(&Pallet::<T>::members_ids(), &Self::runners_up_ids())
|
||||
{
|
||||
true => Err("Members set should be disjoint from candidates and runners-up sets"),
|
||||
true =>
|
||||
Err("Members set should be disjoint from candidates and runners-up sets".into()),
|
||||
false => Ok(()),
|
||||
}
|
||||
}
|
||||
@@ -1265,14 +1270,14 @@ impl<T: Config> Pallet<T> {
|
||||
// [`Members`], [`RunnersUp`] and approval stake state checks. Invariants:
|
||||
// - Selected members should have approval stake;
|
||||
// - Selected RunnersUp should have approval stake.
|
||||
fn try_state_members_approval_stake() -> Result<(), &'static str> {
|
||||
fn try_state_members_approval_stake() -> Result<(), TryRuntimeError> {
|
||||
match Members::<T>::get()
|
||||
.iter()
|
||||
.chain(RunnersUp::<T>::get().iter())
|
||||
.all(|s| s.stake != BalanceOf::<T>::zero())
|
||||
{
|
||||
true => Ok(()),
|
||||
false => Err("Members and RunnersUp must have approval stake"),
|
||||
false => Err("Members and RunnersUp must have approval stake".into()),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user