mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-30 05:51:02 +00:00
More decl_error! migrations (#4427)
* Update assets to `decl_error` * Update aura to `decl_error` * Update authority discovery to `decl_error` * Update collective to `decl_error` * Update evm to `decl_error!` * Fix error with replace * Revert "Update authority discovery to `decl_error`" This reverts commit 26e8f3c56656963d847e984c6f2c8e1f88014899. * Revert "Update aura to `decl_error`" This reverts commit 8f17c44ca8375a4a755710aaab7ad4d9522c4376. * Update democracy to `decl_error` * Update finality-tracker to `decl_error` * Update grandpa to `decl_error` * `assert` to `ensure` in dispatchable function
This commit is contained in:
committed by
Gavin Wood
parent
9550c845f3
commit
57c19bcf4e
@@ -31,10 +31,12 @@
|
||||
pub use sp_finality_grandpa as fg_primitives;
|
||||
|
||||
use sp_std::prelude::*;
|
||||
use codec::{self as codec, Encode, Decode, Error};
|
||||
use frame_support::{decl_event, decl_storage, decl_module, dispatch, storage};
|
||||
use codec::{self as codec, Encode, Decode};
|
||||
use frame_support::{decl_event, decl_storage, decl_module, decl_error, storage};
|
||||
use sp_runtime::{
|
||||
generic::{DigestItem, OpaqueDigestItemId}, traits::Zero, Perbill,
|
||||
generic::{DigestItem, OpaqueDigestItemId},
|
||||
traits::{Zero, ModuleDispatchError},
|
||||
Perbill,
|
||||
};
|
||||
use sp_staking::{
|
||||
SessionIndex,
|
||||
@@ -82,7 +84,7 @@ pub struct StoredPendingChange<N> {
|
||||
}
|
||||
|
||||
impl<N: Decode> Decode for StoredPendingChange<N> {
|
||||
fn decode<I: codec::Input>(value: &mut I) -> core::result::Result<Self, Error> {
|
||||
fn decode<I: codec::Input>(value: &mut I) -> core::result::Result<Self, codec::Error> {
|
||||
let old = OldStoredPendingChange::decode(value)?;
|
||||
let forced = <Option<N>>::decode(value).unwrap_or(None);
|
||||
|
||||
@@ -123,7 +125,7 @@ pub enum StoredState<N> {
|
||||
},
|
||||
}
|
||||
|
||||
decl_event!(
|
||||
decl_event! {
|
||||
pub enum Event {
|
||||
/// New authority set has been applied.
|
||||
NewAuthorities(AuthorityList),
|
||||
@@ -132,7 +134,22 @@ decl_event!(
|
||||
/// Current authority set has been resumed.
|
||||
Resumed,
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
decl_error! {
|
||||
pub enum Error {
|
||||
/// Attempt to signal GRANDPA pause when the authority set isn't live
|
||||
/// (either paused or already pending pause).
|
||||
PauseFailed,
|
||||
/// Attempt to signal GRANDPA resume when the authority set isn't paused
|
||||
/// (either live or already pending resume).
|
||||
ResumeFailed,
|
||||
/// Attempt to signal GRANDPA change with one already pending.
|
||||
ChangePending,
|
||||
/// Cannot signal forced change so soon after last.
|
||||
TooSoon,
|
||||
}
|
||||
}
|
||||
|
||||
decl_storage! {
|
||||
trait Store for Module<T: Trait> as GrandpaFinality {
|
||||
@@ -170,11 +187,13 @@ decl_storage! {
|
||||
|
||||
decl_module! {
|
||||
pub struct Module<T: Trait> for enum Call where origin: T::Origin {
|
||||
type Error = Error;
|
||||
|
||||
fn deposit_event() = default;
|
||||
|
||||
/// Report some misbehavior.
|
||||
fn report_misbehavior(origin, _report: Vec<u8>) {
|
||||
ensure_signed(origin)?;
|
||||
ensure_signed(origin).map_err(|e| e.as_str())?;
|
||||
// FIXME: https://github.com/paritytech/substrate/issues/1112
|
||||
}
|
||||
|
||||
@@ -264,7 +283,7 @@ impl<T: Trait> Module<T> {
|
||||
|
||||
/// Schedule GRANDPA to pause starting in the given number of blocks.
|
||||
/// Cannot be done when already paused.
|
||||
pub fn schedule_pause(in_blocks: T::BlockNumber) -> dispatch::Result {
|
||||
pub fn schedule_pause(in_blocks: T::BlockNumber) -> Result<(), Error> {
|
||||
if let StoredState::Live = <State<T>>::get() {
|
||||
let scheduled_at = <frame_system::Module<T>>::block_number();
|
||||
<State<T>>::put(StoredState::PendingPause {
|
||||
@@ -274,13 +293,12 @@ impl<T: Trait> Module<T> {
|
||||
|
||||
Ok(())
|
||||
} else {
|
||||
Err("Attempt to signal GRANDPA pause when the authority set isn't live \
|
||||
(either paused or already pending pause).")
|
||||
Err(Error::PauseFailed)
|
||||
}
|
||||
}
|
||||
|
||||
/// Schedule a resume of GRANDPA after pausing.
|
||||
pub fn schedule_resume(in_blocks: T::BlockNumber) -> dispatch::Result {
|
||||
pub fn schedule_resume(in_blocks: T::BlockNumber) -> Result<(), Error> {
|
||||
if let StoredState::Paused = <State<T>>::get() {
|
||||
let scheduled_at = <frame_system::Module<T>>::block_number();
|
||||
<State<T>>::put(StoredState::PendingResume {
|
||||
@@ -290,8 +308,7 @@ impl<T: Trait> Module<T> {
|
||||
|
||||
Ok(())
|
||||
} else {
|
||||
Err("Attempt to signal GRANDPA resume when the authority set isn't paused \
|
||||
(either live or already pending resume).")
|
||||
Err(Error::ResumeFailed)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -313,13 +330,13 @@ impl<T: Trait> Module<T> {
|
||||
next_authorities: AuthorityList,
|
||||
in_blocks: T::BlockNumber,
|
||||
forced: Option<T::BlockNumber>,
|
||||
) -> dispatch::Result {
|
||||
) -> Result<(), Error> {
|
||||
if !<PendingChange<T>>::exists() {
|
||||
let scheduled_at = <frame_system::Module<T>>::block_number();
|
||||
|
||||
if let Some(_) = forced {
|
||||
if Self::next_forced().map_or(false, |next| next > scheduled_at) {
|
||||
return Err("Cannot signal forced change so soon after last.");
|
||||
return Err(Error::TooSoon);
|
||||
}
|
||||
|
||||
// only allow the next forced change when twice the window has passed since
|
||||
@@ -336,7 +353,7 @@ impl<T: Trait> Module<T> {
|
||||
|
||||
Ok(())
|
||||
} else {
|
||||
Err("Attempt to signal GRANDPA change with one already pending.")
|
||||
Err(Error::ChangePending)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user