Skip to content

Commit 55d5276

Browse files
authored
send_as_sovereign as versioned xcm (#652)
* send_as_sovereign as versioned xcm * format * format * cargo fmt * cargo fmt
1 parent d69f226 commit 55d5276

File tree

3 files changed

+21
-14
lines changed

3 files changed

+21
-14
lines changed

benchmarking/src/lib.rs

-1
Original file line numberDiff line numberDiff line change
@@ -657,7 +657,6 @@ macro_rules! benchmark_backend {
657657
// Every variant must implement [`BenchmarkingSetup`].
658658
//
659659
// ```nocompile
660-
//
661660
// struct Transfer;
662661
// impl BenchmarkingSetup for Transfer { ... }
663662
//

xcm/src/lib.rs

+15-7
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@
55

66
use frame_support::{pallet_prelude::*, traits::EnsureOrigin};
77
use frame_system::pallet_prelude::*;
8-
use sp_std::boxed::Box;
9-
10-
use xcm::latest::prelude::*;
8+
use sp_std::{
9+
boxed::Box,
10+
convert::{TryFrom, TryInto},
11+
};
12+
use xcm::{latest::prelude::*, VersionedMultiLocation, VersionedXcm};
1113

1214
pub use module::*;
1315

@@ -43,6 +45,9 @@ pub mod module {
4345
/// The message and destination was recognized as being reachable but
4446
/// the operation could not be completed.
4547
SendFailure,
48+
/// The version of the `Versioned` value used is not able to be
49+
/// interpreted.
50+
BadVersion,
4651
}
4752

4853
#[pallet::call]
@@ -51,15 +56,18 @@ pub mod module {
5156
#[pallet::weight(100_000_000)]
5257
pub fn send_as_sovereign(
5358
origin: OriginFor<T>,
54-
dest: Box<MultiLocation>,
55-
message: Box<Xcm<()>>,
59+
dest: Box<VersionedMultiLocation>,
60+
message: Box<VersionedXcm<()>>,
5661
) -> DispatchResult {
5762
let _ = T::SovereignOrigin::ensure_origin(origin)?;
58-
pallet_xcm::Pallet::<T>::send_xcm(Here, *dest.clone(), *message.clone()).map_err(|e| match e {
63+
let dest = MultiLocation::try_from(*dest).map_err(|()| Error::<T>::BadVersion)?;
64+
let message: Xcm<()> = (*message).try_into().map_err(|()| Error::<T>::BadVersion)?;
65+
66+
pallet_xcm::Pallet::<T>::send_xcm(Here, dest.clone(), message.clone()).map_err(|e| match e {
5967
SendError::CannotReachDestination(..) => Error::<T>::Unreachable,
6068
_ => Error::<T>::SendFailure,
6169
})?;
62-
Self::deposit_event(Event::Sent(*dest, *message));
70+
Self::deposit_event(Event::Sent(dest, message));
6371
Ok(())
6472
}
6573
}

xtokens/src/tests.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -369,8 +369,8 @@ fn send_as_sovereign() {
369369
let assets: MultiAsset = (Here, 1_000_000_000_000).into();
370370
assert_ok!(para::OrmlXcm::send_as_sovereign(
371371
para::Origin::root(),
372-
Box::new(MultiLocation::parent()),
373-
Box::new(Xcm(vec![
372+
Box::new(Parent.into()),
373+
Box::new(VersionedXcm::from(Xcm(vec![
374374
WithdrawAsset(assets.clone().into()),
375375
BuyExecution {
376376
fees: assets,
@@ -381,7 +381,7 @@ fn send_as_sovereign() {
381381
require_weight_at_most: 1_000_000_000,
382382
call: call.encode().into(),
383383
}
384-
]))
384+
])))
385385
));
386386
});
387387

@@ -412,8 +412,8 @@ fn send_as_sovereign_fails_if_bad_origin() {
412412
assert_err!(
413413
para::OrmlXcm::send_as_sovereign(
414414
para::Origin::signed(ALICE),
415-
Box::new(MultiLocation::parent()),
416-
Box::new(Xcm(vec![
415+
Box::new(Parent.into()),
416+
Box::new(VersionedXcm::from(Xcm(vec![
417417
WithdrawAsset(assets.clone().into()),
418418
BuyExecution {
419419
fees: assets,
@@ -424,7 +424,7 @@ fn send_as_sovereign_fails_if_bad_origin() {
424424
require_weight_at_most: 1_000_000_000,
425425
call: call.encode().into(),
426426
}
427-
]))
427+
])))
428428
),
429429
DispatchError::BadOrigin,
430430
);

0 commit comments

Comments
 (0)