// Copyright 2020 Parity Technologies (UK) Ltd. // This file is part of Polkadot. // Polkadot is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // Polkadot is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . //! Runtime modules for parachains code. //! //! It is crucial to include all the modules from this crate in the runtime, in //! particular the `Initializer` module, as it is responsible for initializing the state //! of the other modules. #![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; pub mod initializer; pub mod paras; pub mod scheduler; pub mod validity; pub mod runtime_api_impl; mod util; #[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(o: OuterOrigin) -> result::Result where OuterOrigin: Into> { match o.into() { Ok(Origin::Parachain(id)) => Ok(id), _ => Err(BadOrigin), } }