From 6d849468b4d8078eafc9f044c8521aefcf7e10da Mon Sep 17 00:00:00 2001 From: Shaun Wang <spxwang@gmail.com> Date: Fri, 12 Mar 2021 14:46:13 +1300 Subject: [PATCH] Use MultiLocation as xtokens transfer dest type. (#396) * Use MultiLocation as xtokens transfer dest type. * Make clippy happy. --- xtokens/src/lib.rs | 63 +++++++++++----------------------------------- 1 file changed, 14 insertions(+), 49 deletions(-) diff --git a/xtokens/src/lib.rs b/xtokens/src/lib.rs index e045c35..94f1ea3 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::*; @@ -89,19 +90,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 +157,7 @@ pub mod module { origin: OriginFor<T>, 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 +167,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 +192,6 @@ pub mod module { who, para_id, dest, - dest_network, amount, )), Err(err) => Self::deposit_event(Event::<T>::TransferToParachainFailed( @@ -217,7 +199,6 @@ pub mod module { who, para_id, dest, - dest_network, amount, err, )), @@ -228,12 +209,7 @@ pub mod module { } impl<T: Config> Pallet<T> { - 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 +220,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 +238,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 +251,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 +263,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. -- GitLab