Skip to content

Commit 6d84946

Browse files
authored
Use MultiLocation as xtokens transfer dest type. (#396)
* Use MultiLocation as xtokens transfer dest type. * Make clippy happy.
1 parent 1479ea3 commit 6d84946

File tree

1 file changed

+14
-49
lines changed

1 file changed

+14
-49
lines changed

xtokens/src/lib.rs

+14-49
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#![cfg_attr(not(feature = "std"), no_std)]
22
#![allow(clippy::from_over_into)]
33
#![allow(clippy::unused_unit)]
4+
#![allow(clippy::large_enum_variant)]
45

56
pub use module::*;
67

@@ -89,19 +90,11 @@ pub mod module {
8990

9091
/// Transferred to parachain. \[x_currency_id, src, para_id, dest,
9192
/// dest_network, amount\]
92-
TransferredToParachain(XCurrencyId, T::AccountId, ParaId, T::AccountId, NetworkId, T::Balance),
93+
TransferredToParachain(XCurrencyId, T::AccountId, ParaId, MultiLocation, T::Balance),
9394

9495
/// Transfer to parachain failed. \[x_currency_id, src, para_id, dest,
9596
/// dest_network, amount, error\]
96-
TransferToParachainFailed(
97-
XCurrencyId,
98-
T::AccountId,
99-
ParaId,
100-
T::AccountId,
101-
NetworkId,
102-
T::Balance,
103-
XcmError,
104-
),
97+
TransferToParachainFailed(XCurrencyId, T::AccountId, ParaId, MultiLocation, T::Balance, XcmError),
10598
}
10699

107100
#[pallet::error]
@@ -164,8 +157,7 @@ pub mod module {
164157
origin: OriginFor<T>,
165158
x_currency_id: XCurrencyId,
166159
para_id: ParaId,
167-
dest: T::AccountId,
168-
dest_network: NetworkId,
160+
dest: MultiLocation,
169161
amount: T::Balance,
170162
) -> DispatchResultWithPostInfo {
171163
let who = ensure_signed(origin)?;
@@ -175,25 +167,16 @@ pub mod module {
175167
}
176168

177169
let xcm = match x_currency_id.chain_id {
178-
ChainId::RelayChain => {
179-
Self::transfer_relay_chain_tokens_to_parachain(para_id, &dest, dest_network.clone(), amount)
180-
}
170+
ChainId::RelayChain => Self::transfer_relay_chain_tokens_to_parachain(para_id, dest.clone(), amount),
181171
ChainId::ParaChain(reserve_chain) => {
182172
if T::ParaId::get() == reserve_chain {
183-
Self::transfer_owned_tokens_to_parachain(
184-
x_currency_id.clone(),
185-
para_id,
186-
&dest,
187-
dest_network.clone(),
188-
amount,
189-
)
173+
Self::transfer_owned_tokens_to_parachain(x_currency_id.clone(), para_id, dest.clone(), amount)
190174
} else {
191175
Self::transfer_non_owned_tokens_to_parachain(
192176
reserve_chain,
193177
x_currency_id.clone(),
194178
para_id,
195-
&dest,
196-
dest_network.clone(),
179+
dest.clone(),
197180
amount,
198181
)
199182
}
@@ -209,15 +192,13 @@ pub mod module {
209192
who,
210193
para_id,
211194
dest,
212-
dest_network,
213195
amount,
214196
)),
215197
Err(err) => Self::deposit_event(Event::<T>::TransferToParachainFailed(
216198
x_currency_id,
217199
who,
218200
para_id,
219201
dest,
220-
dest_network,
221202
amount,
222203
err,
223204
)),
@@ -228,12 +209,7 @@ pub mod module {
228209
}
229210

230211
impl<T: Config> Pallet<T> {
231-
fn transfer_relay_chain_tokens_to_parachain(
232-
para_id: ParaId,
233-
dest: &T::AccountId,
234-
dest_network: NetworkId,
235-
amount: T::Balance,
236-
) -> Xcm {
212+
fn transfer_relay_chain_tokens_to_parachain(para_id: ParaId, dest: MultiLocation, amount: T::Balance) -> Xcm {
237213
Xcm::WithdrawAsset {
238214
assets: vec![MultiAsset::ConcreteFungible {
239215
id: MultiLocation::X1(Junction::Parent),
@@ -244,14 +220,11 @@ pub mod module {
244220
reserve: MultiLocation::X1(Junction::Parent),
245221
effects: vec![Order::DepositReserveAsset {
246222
assets: vec![MultiAsset::All],
247-
// `dest` is children parachain(of parent).
223+
// Reserve asset deposit dest is children parachain(of parent).
248224
dest: MultiLocation::X1(Junction::Parachain { id: para_id.into() }),
249225
effects: vec![Order::DepositAsset {
250226
assets: vec![MultiAsset::All],
251-
dest: MultiLocation::X1(Junction::AccountId32 {
252-
network: dest_network,
253-
id: T::AccountId32Convert::convert(dest.clone()),
254-
}),
227+
dest,
255228
}],
256229
}],
257230
}],
@@ -265,8 +238,7 @@ pub mod module {
265238
fn transfer_owned_tokens_to_parachain(
266239
x_currency_id: XCurrencyId,
267240
para_id: ParaId,
268-
dest: &T::AccountId,
269-
dest_network: NetworkId,
241+
dest: MultiLocation,
270242
amount: T::Balance,
271243
) -> Xcm {
272244
Xcm::WithdrawAsset {
@@ -279,10 +251,7 @@ pub mod module {
279251
dest: MultiLocation::X2(Junction::Parent, Junction::Parachain { id: para_id.into() }),
280252
effects: vec![Order::DepositAsset {
281253
assets: vec![MultiAsset::All],
282-
dest: MultiLocation::X1(Junction::AccountId32 {
283-
network: dest_network,
284-
id: T::AccountId32Convert::convert(dest.clone()),
285-
}),
254+
dest,
286255
}],
287256
}],
288257
}
@@ -294,16 +263,12 @@ pub mod module {
294263
reserve_chain: ParaId,
295264
x_currency_id: XCurrencyId,
296265
para_id: ParaId,
297-
dest: &T::AccountId,
298-
dest_network: NetworkId,
266+
dest: MultiLocation,
299267
amount: T::Balance,
300268
) -> Xcm {
301269
let deposit_to_dest = Order::DepositAsset {
302270
assets: vec![MultiAsset::All],
303-
dest: MultiLocation::X1(Junction::AccountId32 {
304-
network: dest_network,
305-
id: T::AccountId32Convert::convert(dest.clone()),
306-
}),
271+
dest,
307272
};
308273
// If transfer to reserve chain, deposit to `dest` on reserve chain,
309274
// else deposit reserve asset.

0 commit comments

Comments
 (0)