From 57fed084b15ba8dd78e88049f8f0cab5f256a9fa Mon Sep 17 00:00:00 2001 From: Shaopeng Wang Date: Fri, 12 Mar 2021 14:24:50 +1300 Subject: [PATCH 1/2] Use MultiLocation as xtokens transfer dest type. --- xtokens/src/lib.rs | 62 ++++++++++------------------------------------ 1 file changed, 13 insertions(+), 49 deletions(-) diff --git a/xtokens/src/lib.rs b/xtokens/src/lib.rs index e045c3529..131619127 100644 --- a/xtokens/src/lib.rs +++ b/xtokens/src/lib.rs @@ -89,19 +89,11 @@ pub mod module { /// Transferred to parachain. \[x_currency_id, src, para_id, dest, /// dest_network, amount\] - TransferredToParachain(XCurrencyId, T::AccountId, ParaId, T::AccountId, NetworkId, T::Balance), + TransferredToParachain(XCurrencyId, T::AccountId, ParaId, MultiLocation, T::Balance), /// Transfer to parachain failed. \[x_currency_id, src, para_id, dest, /// dest_network, amount, error\] - TransferToParachainFailed( - XCurrencyId, - T::AccountId, - ParaId, - T::AccountId, - NetworkId, - T::Balance, - XcmError, - ), + TransferToParachainFailed(XCurrencyId, T::AccountId, ParaId, MultiLocation, T::Balance, XcmError), } #[pallet::error] @@ -164,8 +156,7 @@ pub mod module { origin: OriginFor, x_currency_id: XCurrencyId, para_id: ParaId, - dest: T::AccountId, - dest_network: NetworkId, + dest: MultiLocation, amount: T::Balance, ) -> DispatchResultWithPostInfo { let who = ensure_signed(origin)?; @@ -175,25 +166,16 @@ pub mod module { } let xcm = match x_currency_id.chain_id { - ChainId::RelayChain => { - Self::transfer_relay_chain_tokens_to_parachain(para_id, &dest, dest_network.clone(), amount) - } + ChainId::RelayChain => Self::transfer_relay_chain_tokens_to_parachain(para_id, dest.clone(), amount), ChainId::ParaChain(reserve_chain) => { if T::ParaId::get() == reserve_chain { - Self::transfer_owned_tokens_to_parachain( - x_currency_id.clone(), - para_id, - &dest, - dest_network.clone(), - amount, - ) + Self::transfer_owned_tokens_to_parachain(x_currency_id.clone(), para_id, dest.clone(), amount) } else { Self::transfer_non_owned_tokens_to_parachain( reserve_chain, x_currency_id.clone(), para_id, - &dest, - dest_network.clone(), + dest.clone(), amount, ) } @@ -209,7 +191,6 @@ pub mod module { who, para_id, dest, - dest_network, amount, )), Err(err) => Self::deposit_event(Event::::TransferToParachainFailed( @@ -217,7 +198,6 @@ pub mod module { who, para_id, dest, - dest_network, amount, err, )), @@ -228,12 +208,7 @@ pub mod module { } impl Pallet { - fn transfer_relay_chain_tokens_to_parachain( - para_id: ParaId, - dest: &T::AccountId, - dest_network: NetworkId, - amount: T::Balance, - ) -> Xcm { + fn transfer_relay_chain_tokens_to_parachain(para_id: ParaId, dest: MultiLocation, amount: T::Balance) -> Xcm { Xcm::WithdrawAsset { assets: vec![MultiAsset::ConcreteFungible { id: MultiLocation::X1(Junction::Parent), @@ -244,14 +219,11 @@ pub mod module { reserve: MultiLocation::X1(Junction::Parent), effects: vec![Order::DepositReserveAsset { assets: vec![MultiAsset::All], - // `dest` is children parachain(of parent). + // Reserve asset deposit dest is children parachain(of parent). dest: MultiLocation::X1(Junction::Parachain { id: para_id.into() }), effects: vec![Order::DepositAsset { assets: vec![MultiAsset::All], - dest: MultiLocation::X1(Junction::AccountId32 { - network: dest_network, - id: T::AccountId32Convert::convert(dest.clone()), - }), + dest, }], }], }], @@ -265,8 +237,7 @@ pub mod module { fn transfer_owned_tokens_to_parachain( x_currency_id: XCurrencyId, para_id: ParaId, - dest: &T::AccountId, - dest_network: NetworkId, + dest: MultiLocation, amount: T::Balance, ) -> Xcm { Xcm::WithdrawAsset { @@ -279,10 +250,7 @@ pub mod module { dest: MultiLocation::X2(Junction::Parent, Junction::Parachain { id: para_id.into() }), effects: vec![Order::DepositAsset { assets: vec![MultiAsset::All], - dest: MultiLocation::X1(Junction::AccountId32 { - network: dest_network, - id: T::AccountId32Convert::convert(dest.clone()), - }), + dest, }], }], } @@ -294,16 +262,12 @@ pub mod module { reserve_chain: ParaId, x_currency_id: XCurrencyId, para_id: ParaId, - dest: &T::AccountId, - dest_network: NetworkId, + dest: MultiLocation, amount: T::Balance, ) -> Xcm { let deposit_to_dest = Order::DepositAsset { assets: vec![MultiAsset::All], - dest: MultiLocation::X1(Junction::AccountId32 { - network: dest_network, - id: T::AccountId32Convert::convert(dest.clone()), - }), + dest, }; // If transfer to reserve chain, deposit to `dest` on reserve chain, // else deposit reserve asset. From ad5f27256e0e3978a70d1b01974e212d86ede4ed Mon Sep 17 00:00:00 2001 From: Shaopeng Wang Date: Fri, 12 Mar 2021 14:38:09 +1300 Subject: [PATCH 2/2] Make clippy happy. --- xtokens/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/xtokens/src/lib.rs b/xtokens/src/lib.rs index 131619127..94f1ea3e8 100644 --- a/xtokens/src/lib.rs +++ b/xtokens/src/lib.rs @@ -1,6 +1,7 @@ #![cfg_attr(not(feature = "std"), no_std)] #![allow(clippy::from_over_into)] #![allow(clippy::unused_unit)] +#![allow(clippy::large_enum_variant)] pub use module::*;