From 23c8363d53fe8580f636a7f820c54b994d1b96f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Rodriguez?= Date: Fri, 28 Jun 2024 21:37:17 -0300 Subject: [PATCH] add missing SetFeesMode instruction in xtokens (#1006) --- xtokens/src/lib.rs | 50 +++++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 18 deletions(-) diff --git a/xtokens/src/lib.rs b/xtokens/src/lib.rs index 38aa0a0f8..17634956f 100644 --- a/xtokens/src/lib.rs +++ b/xtokens/src/lib.rs @@ -703,14 +703,17 @@ pub mod module { recipient: Location, dest_weight_limit: WeightLimit, ) -> Result, DispatchError> { - Ok(Xcm(vec![TransferReserveAsset { - assets: assets.clone(), - dest: dest.clone(), - xcm: Xcm(vec![ - Self::buy_execution(fee, &dest, dest_weight_limit)?, - Self::deposit_asset(recipient, assets.len() as u32), - ]), - }])) + Ok(Xcm(vec![ + SetFeesMode { jit_withdraw: true }, + TransferReserveAsset { + assets: assets.clone(), + dest: dest.clone(), + xcm: Xcm(vec![ + Self::buy_execution(fee, &dest, dest_weight_limit)?, + Self::deposit_asset(recipient, assets.len() as u32), + ]), + }, + ])) } fn transfer_to_reserve( @@ -722,6 +725,7 @@ pub mod module { ) -> Result, DispatchError> { Ok(Xcm(vec![ WithdrawAsset(assets.clone()), + SetFeesMode { jit_withdraw: true }, InitiateReserveWithdraw { assets: All.into(), reserve: reserve.clone(), @@ -753,6 +757,7 @@ pub mod module { if !use_teleport { Ok(Xcm(vec![ WithdrawAsset(assets), + SetFeesMode { jit_withdraw: true }, InitiateReserveWithdraw { assets: All.into(), reserve: reserve.clone(), @@ -772,6 +777,7 @@ pub mod module { } else { Ok(Xcm(vec![ WithdrawAsset(assets), + SetFeesMode { jit_withdraw: true }, InitiateReserveWithdraw { assets: All.into(), reserve: reserve.clone(), @@ -873,13 +879,17 @@ pub mod module { Pallet::::transfer_kind(T::ReserveProvider::reserve(&asset), &dest) { let mut msg = match transfer_kind { - SelfReserveAsset => Xcm(vec![TransferReserveAsset { - assets: vec![asset].into(), - dest, - xcm: Xcm(vec![]), - }]), + SelfReserveAsset => Xcm(vec![ + SetFeesMode { jit_withdraw: true }, + TransferReserveAsset { + assets: vec![asset].into(), + dest, + xcm: Xcm(vec![]), + }, + ]), ToReserve | ToNonReserve => Xcm(vec![ WithdrawAsset(Assets::from(asset)), + SetFeesMode { jit_withdraw: true }, InitiateReserveWithdraw { assets: All.into(), // `dest` is always (equal to) `reserve` in both cases @@ -936,13 +946,17 @@ pub mod module { let reserve_location = Pallet::::get_reserve_location(&assets, fee_item); if let Ok((transfer_kind, dest, _, reserve)) = Pallet::::transfer_kind(reserve_location, &dest) { let mut msg = match transfer_kind { - SelfReserveAsset => Xcm(vec![TransferReserveAsset { - assets, - dest, - xcm: Xcm(vec![]), - }]), + SelfReserveAsset => Xcm(vec![ + SetFeesMode { jit_withdraw: true }, + TransferReserveAsset { + assets, + dest, + xcm: Xcm(vec![]), + }, + ]), ToReserve | ToNonReserve => Xcm(vec![ WithdrawAsset(assets), + SetFeesMode { jit_withdraw: true }, InitiateReserveWithdraw { assets: All.into(), // `dest` is always (equal to) `reserve` in both cases