git.delta.rocks / unique-network / refs/commits / 13e91d34e4ba

difftreelog

source

runtime/common/config/pallets/scheduler.rs3.0 KiBsourcehistory
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617use core::cmp::Ordering;1819use frame_support::{20	parameter_types,21	traits::{EnsureOrigin, PrivilegeCmp},22	weights::Weight,23};24use frame_system::{EnsureRoot, RawOrigin};25use pallet_unique_scheduler_v2::ScheduledEnsureOriginSuccess;26use parity_scale_codec::Decode;27use sp_runtime::Perbill;28use up_common::types::AccountId;2930use crate::{31	runtime_common::{config::substrate::RuntimeBlockWeights, scheduler::SchedulerPaymentExecutor},32	OriginCaller, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin,33};3435parameter_types! {36	pub MaximumSchedulerWeight: Weight = Perbill::from_percent(50) *37		RuntimeBlockWeights::get().max_block;38	pub const MaxScheduledPerBlock: u32 = 50;3940	pub const NoPreimagePostponement: Option<u32> = Some(10);41	pub const Preimage: Option<u32> = Some(10);42}4344pub struct EnsureSignedOrRoot<AccountId>(sp_std::marker::PhantomData<AccountId>);45impl<O: Into<Result<RawOrigin<AccountId>, O>> + From<RawOrigin<AccountId>>, AccountId: Decode>46	EnsureOrigin<O> for EnsureSignedOrRoot<AccountId>47{48	type Success = ScheduledEnsureOriginSuccess<AccountId>;49	fn try_origin(o: O) -> Result<Self::Success, O> {50		o.into().and_then(|o| match o {51			RawOrigin::Root => Ok(ScheduledEnsureOriginSuccess::Root),52			RawOrigin::Signed(who) => Ok(ScheduledEnsureOriginSuccess::Signed(who)),53			r => Err(O::from(r)),54		})55	}56}5758pub struct EqualOrRootOnly;59impl PrivilegeCmp<OriginCaller> for EqualOrRootOnly {60	fn cmp_privilege(left: &OriginCaller, right: &OriginCaller) -> Option<Ordering> {61		use RawOrigin::*;6263		let left = left.clone().try_into().ok()?;64		let right = right.clone().try_into().ok()?;6566		match (left, right) {67			(Root, Root) => Some(Ordering::Equal),68			(Root, _) => Some(Ordering::Greater),69			(_, Root) => Some(Ordering::Less),70			lr @ _ => (lr.0 == lr.1).then(|| Ordering::Equal),71		}72	}73}7475impl pallet_unique_scheduler_v2::Config for Runtime {76	type RuntimeEvent = RuntimeEvent;77	type RuntimeOrigin = RuntimeOrigin;78	type PalletsOrigin = OriginCaller;79	type RuntimeCall = RuntimeCall;80	type MaximumWeight = MaximumSchedulerWeight;81	type ScheduleOrigin = EnsureSignedOrRoot<AccountId>;82	type OriginPrivilegeCmp = EqualOrRootOnly;83	type MaxScheduledPerBlock = MaxScheduledPerBlock;84	type WeightInfo = ();85	type Preimages = ();86	type CallExecutor = SchedulerPaymentExecutor;87	type PrioritySetOrigin = EnsureRoot<AccountId>;88}