diff --git a/benchmarking/src/lib.rs b/benchmarking/src/lib.rs index bef64a653..5d147af06 100644 --- a/benchmarking/src/lib.rs +++ b/benchmarking/src/lib.rs @@ -657,7 +657,6 @@ macro_rules! benchmark_backend { // Every variant must implement [`BenchmarkingSetup`]. // // ```nocompile -// // struct Transfer; // impl BenchmarkingSetup for Transfer { ... } // diff --git a/xcm/src/lib.rs b/xcm/src/lib.rs index b886094ba..1334ef9ea 100644 --- a/xcm/src/lib.rs +++ b/xcm/src/lib.rs @@ -5,9 +5,11 @@ use frame_support::{pallet_prelude::*, traits::EnsureOrigin}; use frame_system::pallet_prelude::*; -use sp_std::boxed::Box; - -use xcm::latest::prelude::*; +use sp_std::{ + boxed::Box, + convert::{TryFrom, TryInto}, +}; +use xcm::{latest::prelude::*, VersionedMultiLocation, VersionedXcm}; pub use module::*; @@ -43,6 +45,9 @@ pub mod module { /// The message and destination was recognized as being reachable but /// the operation could not be completed. SendFailure, + /// The version of the `Versioned` value used is not able to be + /// interpreted. + BadVersion, } #[pallet::call] @@ -51,15 +56,18 @@ pub mod module { #[pallet::weight(100_000_000)] pub fn send_as_sovereign( origin: OriginFor, - dest: Box, - message: Box>, + dest: Box, + message: Box>, ) -> DispatchResult { let _ = T::SovereignOrigin::ensure_origin(origin)?; - pallet_xcm::Pallet::::send_xcm(Here, *dest.clone(), *message.clone()).map_err(|e| match e { + let dest = MultiLocation::try_from(*dest).map_err(|()| Error::::BadVersion)?; + let message: Xcm<()> = (*message).try_into().map_err(|()| Error::::BadVersion)?; + + pallet_xcm::Pallet::::send_xcm(Here, dest.clone(), message.clone()).map_err(|e| match e { SendError::CannotReachDestination(..) => Error::::Unreachable, _ => Error::::SendFailure, })?; - Self::deposit_event(Event::Sent(*dest, *message)); + Self::deposit_event(Event::Sent(dest, message)); Ok(()) } } diff --git a/xtokens/src/tests.rs b/xtokens/src/tests.rs index ba2540dfd..74a927d92 100644 --- a/xtokens/src/tests.rs +++ b/xtokens/src/tests.rs @@ -369,8 +369,8 @@ fn send_as_sovereign() { let assets: MultiAsset = (Here, 1_000_000_000_000).into(); assert_ok!(para::OrmlXcm::send_as_sovereign( para::Origin::root(), - Box::new(MultiLocation::parent()), - Box::new(Xcm(vec![ + Box::new(Parent.into()), + Box::new(VersionedXcm::from(Xcm(vec![ WithdrawAsset(assets.clone().into()), BuyExecution { fees: assets, @@ -381,7 +381,7 @@ fn send_as_sovereign() { require_weight_at_most: 1_000_000_000, call: call.encode().into(), } - ])) + ]))) )); }); @@ -412,8 +412,8 @@ fn send_as_sovereign_fails_if_bad_origin() { assert_err!( para::OrmlXcm::send_as_sovereign( para::Origin::signed(ALICE), - Box::new(MultiLocation::parent()), - Box::new(Xcm(vec![ + Box::new(Parent.into()), + Box::new(VersionedXcm::from(Xcm(vec![ WithdrawAsset(assets.clone().into()), BuyExecution { fees: assets, @@ -424,7 +424,7 @@ fn send_as_sovereign_fails_if_bad_origin() { require_weight_at_most: 1_000_000_000, call: call.encode().into(), } - ])) + ]))) ), DispatchError::BadOrigin, );