// Copyright 2021 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 . //! XCM sender for relay chain. use parity_scale_codec::Encode; use runtime_parachains::{configuration, dmp}; use sp_std::marker::PhantomData; use xcm::opaque::{ v0::{Error, Junction, MultiLocation, Result, SendXcm, Xcm}, VersionedXcm, }; /// XCM sender for relay chain. It only sends downward message. pub struct ChildParachainRouter(PhantomData); impl SendXcm for ChildParachainRouter { fn send_xcm(dest: MultiLocation, msg: Xcm) -> Result { match dest { MultiLocation::X1(Junction::Parachain(id)) => { // Downward message passing. let config = >::config(); >::queue_downward_message( &config, id.into(), VersionedXcm::from(msg).encode(), ) .map_err(Into::::into)?; Ok(()) }, d => Err(Error::CannotReachDestination(d, msg)), } } }