mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-31 02:51:01 +00:00
Avoid duplicate function definitions
Avoid duplicate function definitions for: - ensure_owner_or_root() - ensure_not_halted() - set_owner() - set_operating_mode() / set_operational() Signed-off-by: Serban Iorga <serban@parity.io>
This commit is contained in:
committed by
Bastian Köcher
parent
a97dedb50f
commit
ff342fafa9
@@ -37,12 +37,12 @@
|
||||
#![allow(clippy::large_enum_variant)]
|
||||
|
||||
use bp_header_chain::{justification::GrandpaJustification, InitializationData};
|
||||
use bp_runtime::{BlockNumberOf, Chain, HashOf, HasherOf, HeaderOf};
|
||||
use bp_runtime::{BlockNumberOf, Chain, HashOf, HasherOf, HeaderOf, OwnedBridgeModule};
|
||||
use finality_grandpa::voter_set::VoterSet;
|
||||
use frame_support::{ensure, fail};
|
||||
use frame_system::{ensure_signed, RawOrigin};
|
||||
use frame_system::ensure_signed;
|
||||
use sp_finality_grandpa::{ConsensusLog, GRANDPA_ENGINE_ID};
|
||||
use sp_runtime::traits::{BadOrigin, Header as HeaderT, Zero};
|
||||
use sp_runtime::traits::{Header as HeaderT, Zero};
|
||||
use sp_std::{boxed::Box, convert::TryInto};
|
||||
|
||||
mod extension;
|
||||
@@ -117,6 +117,18 @@ pub mod pallet {
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Config<I>, I: 'static> OwnedBridgeModule<T> for Pallet<T, I> {
|
||||
const LOG_TARGET: &'static str = "runtime::bridge-grandpa";
|
||||
const OPERATING_MODE_KEY: &'static str = "IsHalted";
|
||||
type OwnerStorage = PalletOwner<T, I>;
|
||||
type OperatingMode = bool;
|
||||
type OperatingModeStorage = IsHalted<T, I>;
|
||||
|
||||
fn is_halted() -> bool {
|
||||
Self::OperatingModeStorage::get()
|
||||
}
|
||||
}
|
||||
|
||||
#[pallet::call]
|
||||
impl<T: Config<I>, I: 'static> Pallet<T, I> {
|
||||
/// Verify a target header is finalized according to the given finality proof.
|
||||
@@ -135,7 +147,7 @@ pub mod pallet {
|
||||
finality_target: Box<BridgedHeader<T, I>>,
|
||||
justification: GrandpaJustification<BridgedHeader<T, I>>,
|
||||
) -> DispatchResultWithPostInfo {
|
||||
ensure_operational::<T, I>()?;
|
||||
Self::ensure_not_halted().map_err(Error::<T, I>::BridgeModule)?;
|
||||
let _ = ensure_signed(origin)?;
|
||||
|
||||
ensure!(Self::request_count() < T::MaxRequests::get(), <Error<T, I>>::TooManyRequests);
|
||||
@@ -198,7 +210,7 @@ pub mod pallet {
|
||||
origin: OriginFor<T>,
|
||||
init_data: super::InitializationData<BridgedHeader<T, I>>,
|
||||
) -> DispatchResultWithPostInfo {
|
||||
ensure_owner_or_root::<T, I>(origin)?;
|
||||
Self::ensure_owner_or_root(origin)?;
|
||||
|
||||
let init_allowed = !<BestFinalized<T, I>>::exists();
|
||||
ensure!(init_allowed, <Error<T, I>>::AlreadyInitialized);
|
||||
@@ -217,43 +229,16 @@ pub mod pallet {
|
||||
///
|
||||
/// May only be called either by root, or by `PalletOwner`.
|
||||
#[pallet::weight((T::DbWeight::get().reads_writes(1, 1), DispatchClass::Operational))]
|
||||
pub fn set_owner(
|
||||
origin: OriginFor<T>,
|
||||
new_owner: Option<T::AccountId>,
|
||||
) -> DispatchResultWithPostInfo {
|
||||
ensure_owner_or_root::<T, I>(origin)?;
|
||||
match new_owner {
|
||||
Some(new_owner) => {
|
||||
PalletOwner::<T, I>::put(&new_owner);
|
||||
log::info!(target: "runtime::bridge-grandpa", "Setting pallet Owner to: {:?}", new_owner);
|
||||
},
|
||||
None => {
|
||||
PalletOwner::<T, I>::kill();
|
||||
log::info!(target: "runtime::bridge-grandpa", "Removed Owner of pallet.");
|
||||
},
|
||||
}
|
||||
|
||||
Ok(().into())
|
||||
pub fn set_owner(origin: OriginFor<T>, new_owner: Option<T::AccountId>) -> DispatchResult {
|
||||
<Self as OwnedBridgeModule<_>>::set_owner(origin, new_owner)
|
||||
}
|
||||
|
||||
/// Halt or resume all pallet operations.
|
||||
///
|
||||
/// May only be called either by root, or by `PalletOwner`.
|
||||
#[pallet::weight((T::DbWeight::get().reads_writes(1, 1), DispatchClass::Operational))]
|
||||
pub fn set_operational(
|
||||
origin: OriginFor<T>,
|
||||
operational: bool,
|
||||
) -> DispatchResultWithPostInfo {
|
||||
ensure_owner_or_root::<T, I>(origin)?;
|
||||
<IsHalted<T, I>>::put(!operational);
|
||||
|
||||
if operational {
|
||||
log::info!(target: "runtime::bridge-grandpa", "Resuming pallet operations.");
|
||||
} else {
|
||||
log::warn!(target: "runtime::bridge-grandpa", "Stopping pallet operations.");
|
||||
}
|
||||
|
||||
Ok(().into())
|
||||
pub fn set_operational(origin: OriginFor<T>, operational: bool) -> DispatchResult {
|
||||
Self::set_operating_mode(origin, !operational)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -310,7 +295,7 @@ pub mod pallet {
|
||||
|
||||
/// If true, all pallet transactions are failed immediately.
|
||||
#[pallet::storage]
|
||||
pub(super) type IsHalted<T: Config<I>, I: 'static = ()> = StorageValue<_, bool, ValueQuery>;
|
||||
pub type IsHalted<T: Config<I>, I: 'static = ()> = StorageValue<_, bool, ValueQuery>;
|
||||
|
||||
#[pallet::genesis_config]
|
||||
pub struct GenesisConfig<T: Config<I>, I: 'static = ()> {
|
||||
@@ -364,10 +349,10 @@ pub mod pallet {
|
||||
NotInitialized,
|
||||
/// The pallet has already been initialized.
|
||||
AlreadyInitialized,
|
||||
/// All pallet operations are halted.
|
||||
Halted,
|
||||
/// The storage proof doesn't contains storage root. So it is invalid for given header.
|
||||
StorageRootMismatch,
|
||||
/// Error generated by the `OwnedBridgeModule` trait.
|
||||
BridgeModule(bp_runtime::OwnedBridgeModuleError),
|
||||
}
|
||||
|
||||
/// Check the given header for a GRANDPA scheduled authority set change. If a change
|
||||
@@ -513,26 +498,6 @@ pub mod pallet {
|
||||
insert_header::<T, I>(header, hash);
|
||||
}
|
||||
}
|
||||
|
||||
/// Ensure that the origin is either root, or `PalletOwner`.
|
||||
fn ensure_owner_or_root<T: Config<I>, I: 'static>(origin: T::Origin) -> Result<(), BadOrigin> {
|
||||
match origin.into() {
|
||||
Ok(RawOrigin::Root) => Ok(()),
|
||||
Ok(RawOrigin::Signed(ref signer))
|
||||
if Some(signer) == <PalletOwner<T, I>>::get().as_ref() =>
|
||||
Ok(()),
|
||||
_ => Err(BadOrigin),
|
||||
}
|
||||
}
|
||||
|
||||
/// Ensure that the pallet is in operational mode (not halted).
|
||||
fn ensure_operational<T: Config<I>, I: 'static>() -> Result<(), Error<T, I>> {
|
||||
if <IsHalted<T, I>>::get() {
|
||||
Err(<Error<T, I>>::Halted)
|
||||
} else {
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Config<I>, I: 'static> Pallet<T, I> {
|
||||
@@ -799,7 +764,10 @@ mod tests {
|
||||
initialize_substrate_bridge();
|
||||
|
||||
assert_ok!(Pallet::<TestRuntime>::set_operational(Origin::root(), false));
|
||||
assert_noop!(submit_finality_proof(1), Error::<TestRuntime>::Halted);
|
||||
assert_noop!(
|
||||
submit_finality_proof(1),
|
||||
Error::<TestRuntime>::BridgeModule(bp_runtime::OwnedBridgeModuleError::Halted)
|
||||
);
|
||||
|
||||
assert_ok!(Pallet::<TestRuntime>::set_operational(Origin::root(), true));
|
||||
assert_ok!(submit_finality_proof(1));
|
||||
|
||||
Reference in New Issue
Block a user