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:
Shawn Tabrizi
2019-12-18 10:50:21 +01:00
committed by Gavin Wood
parent 9550c845f3
commit 57c19bcf4e
6 changed files with 323 additions and 194 deletions
+33 -16
View File
@@ -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)
}
}