From bd85b3c7d31ebd3881939d0f3bfa4d26fb89494f Mon Sep 17 00:00:00 2001 From: Fedor Sakharov <fedor.sakharov@gmail.com> Date: Wed, 5 Aug 2020 22:24:20 +0300 Subject: [PATCH] Add an Origin to parachains v1 (#1542) --- polkadot/runtime/parachains/src/lib.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/polkadot/runtime/parachains/src/lib.rs b/polkadot/runtime/parachains/src/lib.rs index 5abc2fa32ca..b41968b480f 100644 --- a/polkadot/runtime/parachains/src/lib.rs +++ b/polkadot/runtime/parachains/src/lib.rs @@ -23,6 +23,11 @@ #![cfg_attr(not(feature = "std"), no_std)] +use sp_std::result; +use sp_runtime::traits::BadOrigin; +use primitives::v1::Id as ParaId; +use codec::{Decode, Encode}; + pub mod configuration; pub mod inclusion; pub mod inclusion_inherent; @@ -35,3 +40,22 @@ pub mod runtime_api_impl; #[cfg(test)] mod mock; + +/// Origin for the parachains. +#[derive(PartialEq, Eq, Clone, Encode, Decode)] +#[cfg_attr(feature = "std", derive(Debug))] +pub enum Origin { + /// It comes from a parachain. + Parachain(ParaId), +} + +/// Ensure that the origin `o` represents a parachain. +/// Returns `Ok` with the parachain ID that effected the extrinsic or an `Err` otherwise. +pub fn ensure_parachain<OuterOrigin>(o: OuterOrigin) -> result::Result<ParaId, BadOrigin> + where OuterOrigin: Into<result::Result<Origin, OuterOrigin>> +{ + match o.into() { + Ok(Origin::Parachain(id)) => Ok(id), + _ => Err(BadOrigin), + } +} -- GitLab