Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pallet-xcm: add new extrinsic for asset transfers using explicit XCM transfer types #3695

Merged
merged 37 commits into from
Apr 12, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
dda9308
pallet-xcm: deprecate unlimited_* weight extrinsics
acatangiu Mar 13, 2024
1db1cae
pallet-xcm: remove extrinsics guessed weight and rely on runtime benc…
acatangiu Mar 13, 2024
f5e1dfb
pallet-xcm: add new extrinsic for asset transfers using explicit reserve
acatangiu Mar 13, 2024
547eeee
add more trace logging to XCM transport
acatangiu Mar 13, 2024
c7ee1af
minor style fix
acatangiu Mar 13, 2024
ed77fde
integration-tests: add scenario for parachain sending asset over brid…
acatangiu Mar 13, 2024
a7a44c9
make penpal UniversalLocation configurable
acatangiu Mar 14, 2024
ffa6250
penpal: charge XCM delivery fees for accurate real-world testing
acatangiu Mar 22, 2024
4afba95
integration-tests: fix tests for penpal charging delivery fees
acatangiu Mar 22, 2024
210cdd2
Merge branch 'master' of github.com:paritytech/polkadot-sdk into tran…
acatangiu Mar 23, 2024
c918bea
fix test
acatangiu Mar 23, 2024
3db344b
add prdoc
acatangiu Mar 25, 2024
10d2c40
fix clippy
acatangiu Mar 25, 2024
5b48155
Merge branch 'master' of github.com:paritytech/polkadot-sdk into tran…
acatangiu Mar 27, 2024
dbe453d
add test for westend->rococo direction
acatangiu Mar 27, 2024
42e4041
nit
acatangiu Mar 27, 2024
e794df3
Merge branch 'master' of github.com:paritytech/polkadot-sdk into tran…
acatangiu Apr 1, 2024
81dc911
pallet-xcm: specify explicit transfer type
acatangiu Apr 3, 2024
e1dbf7a
add more tests
acatangiu Apr 3, 2024
ef83eab
fix prdoc
acatangiu Apr 4, 2024
a2b8708
Merge branch 'master' of github.com:paritytech/polkadot-sdk into tran…
acatangiu Apr 4, 2024
4250692
refactor tests
acatangiu Apr 4, 2024
888d403
even more tests
acatangiu Apr 4, 2024
1c86e6e
another test
acatangiu Apr 4, 2024
b82d0b9
add teleport test as well
acatangiu Apr 4, 2024
f4e88da
rename xt and update docs
acatangiu Apr 4, 2024
4f2381c
fix weights
acatangiu Apr 4, 2024
36af01f
add tests to westend
acatangiu Apr 4, 2024
bd9233a
Merge branch 'master' of github.com:paritytech/polkadot-sdk into tran…
acatangiu Apr 4, 2024
9c7bd39
remove leftover comment
acatangiu Apr 4, 2024
adf5128
Apply suggestions from code review
acatangiu Apr 11, 2024
1347f0b
fix logs
acatangiu Apr 11, 2024
e3acff2
fix api
acatangiu Apr 11, 2024
4a44194
Merge branch 'master' into transfer-using-explicit-reserve
acatangiu Apr 11, 2024
0d407eb
Update polkadot/xcm/pallet-xcm/src/lib.rs
acatangiu Apr 12, 2024
22093d0
".git/.scripts/commands/fmt/fmt.sh"
Apr 12, 2024
a673792
Merge branch 'master' into transfer-using-explicit-reserve
acatangiu Apr 12, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
add more tests
  • Loading branch information
acatangiu committed Apr 3, 2024
commit e1dbf7a4f48d5783a7ecb3fa91bc58c6220a81f0
Original file line number Diff line number Diff line change
Expand Up @@ -80,15 +80,14 @@ pub fn genesis(para_id: u32) -> Storage {
assets: vec![
// Relay Native asset representation
(
Location::try_from(RelayLocation::get()).expect("conversion works"),
Location::try_from(RelayLocation::get()).unwrap(),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if we mange to merge this: #4037 before, most of this try_from/expect stuff will go away

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

either way someone will be fixing conflicts so I don't see it as an advantage to do 4037 before 😆

PenpalAssetOwner::get(),
true,
ED,
),
// Sufficient AssetHub asset representation
(
Location::try_from(LocalReservableFromAssetHub::get())
.expect("conversion works"),
Location::try_from(LocalReservableFromAssetHub::get()).unwrap(),
PenpalAssetOwner::get(),
true,
ED,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ mod imports {
pub type SystemParaToParaTest = Test<AssetHubRococo, PenpalA>;
pub type ParaToSystemParaTest = Test<PenpalA, AssetHubRococo>;
pub type ParaToParaThroughRelayTest = Test<PenpalA, PenpalB, Rococo>;
pub type ParaToParaThroughAHTest = Test<PenpalA, PenpalB, AssetHubRococo>;
}

#[cfg(test)]
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -112,10 +112,9 @@ fn swap_locally_on_chain_using_local_assets() {

#[test]
fn swap_locally_on_chain_using_foreign_assets() {
let asset_native =
Box::new(v3::Location::try_from(RelayLocation::get()).expect("conversion works"));
let asset_native = Box::new(v3::Location::try_from(RelayLocation::get()).unwrap());
let asset_location_on_penpal =
v3::Location::try_from(PenpalLocalTeleportableToAssetHub::get()).expect("conversion works");
v3::Location::try_from(PenpalLocalTeleportableToAssetHub::get()).unwrap();
let foreign_asset_at_asset_hub_rococo =
v3::Location::new(1, [v3::Junction::Parachain(PenpalA::para_id().into())])
.appended_with(asset_location_on_penpal)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,7 @@ fn para_dest_assertions(t: RelayToSystemParaTest) {

fn penpal_to_ah_foreign_assets_sender_assertions(t: ParaToSystemParaTest) {
type RuntimeEvent = <PenpalA as Chain>::RuntimeEvent;
let system_para_native_asset_location =
v3::Location::try_from(RelayLocation::get()).expect("conversion works");
let system_para_native_asset_location = v3::Location::try_from(RelayLocation::get()).unwrap();
let expected_asset_id = t.args.asset_id.unwrap();
let (_, expected_asset_amount) =
non_fee_asset(&t.args.assets, t.args.fee_asset_item as usize).unwrap();
Expand Down Expand Up @@ -204,8 +203,7 @@ fn ah_to_penpal_foreign_assets_receiver_assertions(t: SystemParaToParaTest) {
let (_, expected_asset_amount) =
non_fee_asset(&t.args.assets, t.args.fee_asset_item as usize).unwrap();
let checking_account = <PenpalA as PenpalAPallet>::PolkadotXcm::check_account();
let system_para_native_asset_location =
v3::Location::try_from(RelayLocation::get()).expect("conversion works");
let system_para_native_asset_location = v3::Location::try_from(RelayLocation::get()).unwrap();

PenpalA::assert_xcmp_queue_success(None);

Expand Down Expand Up @@ -421,15 +419,14 @@ fn bidirectional_teleport_foreign_assets_between_para_and_asset_hub() {
// Init values for Parachain
let fee_amount_to_send: Balance = ASSET_HUB_ROCOCO_ED * 10000;
let asset_location_on_penpal =
v3::Location::try_from(PenpalLocalTeleportableToAssetHub::get()).expect("conversion works");
v3::Location::try_from(PenpalLocalTeleportableToAssetHub::get()).unwrap();
let asset_id_on_penpal = match asset_location_on_penpal.last() {
Some(v3::Junction::GeneralIndex(id)) => *id as u32,
_ => unreachable!(),
};
let asset_amount_to_send = ASSET_HUB_ROCOCO_ED * 1000;
let asset_owner = PenpalAssetOwner::get();
let system_para_native_asset_location =
v3::Location::try_from(RelayLocation::get()).expect("conversion works");
let system_para_native_asset_location = v3::Location::try_from(RelayLocation::get()).unwrap();
let sender = PenpalASender::get();
let penpal_check_account = <PenpalA as PenpalAPallet>::PolkadotXcm::check_account();
let ah_as_seen_by_penpal = PenpalA::sibling_location_of(AssetHubRococo::para_id());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ fn para_to_relay_sender_assertions(t: ParaToRelayTest) {
RuntimeEvent::ForeignAssets(
pallet_assets::Event::Burned { asset_id, owner, balance, .. }
) => {
asset_id: *asset_id == v3::Location::try_from(RelayLocation::get()).expect("conversion works"),
asset_id: *asset_id == v3::Location::try_from(RelayLocation::get()).unwrap(),
owner: *owner == t.sender.account_id,
balance: *balance == t.args.amount,
},
Expand Down Expand Up @@ -87,8 +87,7 @@ fn system_para_to_para_sender_assertions(t: SystemParaToParaTest) {

fn system_para_to_para_receiver_assertions(t: SystemParaToParaTest) {
type RuntimeEvent = <PenpalA as Chain>::RuntimeEvent;
let system_para_native_asset_location =
v3::Location::try_from(RelayLocation::get()).expect("conversion works");
let system_para_native_asset_location = v3::Location::try_from(RelayLocation::get()).unwrap();

PenpalA::assert_xcmp_queue_success(None);

Expand All @@ -113,7 +112,7 @@ fn para_to_system_para_sender_assertions(t: ParaToSystemParaTest) {
RuntimeEvent::ForeignAssets(
pallet_assets::Event::Burned { asset_id, owner, balance, .. }
) => {
asset_id: *asset_id == v3::Location::try_from(RelayLocation::get()).expect("conversion works"),
asset_id: *asset_id == v3::Location::try_from(RelayLocation::get()).unwrap(),
owner: *owner == t.sender.account_id,
balance: *balance == t.args.amount,
},
Expand Down Expand Up @@ -212,10 +211,9 @@ fn system_para_to_para_assets_sender_assertions(t: SystemParaToParaTest) {

fn para_to_system_para_assets_sender_assertions(t: ParaToSystemParaTest) {
type RuntimeEvent = <PenpalA as Chain>::RuntimeEvent;
let system_para_native_asset_location =
v3::Location::try_from(RelayLocation::get()).expect("conversion works");
let system_para_native_asset_location = v3::Location::try_from(RelayLocation::get()).unwrap();
let reservable_asset_location =
v3::Location::try_from(PenpalLocalReservableFromAssetHub::get()).expect("conversion works");
v3::Location::try_from(PenpalLocalReservableFromAssetHub::get()).unwrap();
PenpalA::assert_xcm_pallet_attempted_complete(Some(Weight::from_parts(864_610_000, 8799)));
assert_expected_events!(
PenpalA,
Expand Down Expand Up @@ -246,13 +244,13 @@ fn para_to_system_para_assets_sender_assertions(t: ParaToSystemParaTest) {
fn system_para_to_para_assets_receiver_assertions(t: SystemParaToParaTest) {
type RuntimeEvent = <PenpalA as Chain>::RuntimeEvent;
let system_para_asset_location =
v3::Location::try_from(PenpalLocalReservableFromAssetHub::get()).expect("conversion works");
v3::Location::try_from(PenpalLocalReservableFromAssetHub::get()).unwrap();
PenpalA::assert_xcmp_queue_success(None);
assert_expected_events!(
PenpalA,
vec![
RuntimeEvent::ForeignAssets(pallet_assets::Event::Issued { asset_id, owner, .. }) => {
asset_id: *asset_id == v3::Location::try_from(RelayLocation::get()).expect("conversion works"),
asset_id: *asset_id == v3::Location::try_from(RelayLocation::get()).unwrap(),
owner: *owner == t.receiver.account_id,
},
RuntimeEvent::ForeignAssets(pallet_assets::Event::Issued { asset_id, owner, amount }) => {
Expand Down Expand Up @@ -304,7 +302,7 @@ fn relay_to_para_assets_receiver_assertions(t: RelayToParaTest) {
PenpalA,
vec![
RuntimeEvent::ForeignAssets(pallet_assets::Event::Issued { asset_id, owner, .. }) => {
asset_id: *asset_id == v3::Location::try_from(RelayLocation::get()).expect("conversion works"),
asset_id: *asset_id == v3::Location::try_from(RelayLocation::get()).unwrap(),
owner: *owner == t.receiver.account_id,
},
RuntimeEvent::MessageQueue(
Expand All @@ -317,8 +315,7 @@ fn relay_to_para_assets_receiver_assertions(t: RelayToParaTest) {
fn para_to_para_through_relay_sender_assertions(t: ParaToParaThroughRelayTest) {
type RuntimeEvent = <PenpalA as Chain>::RuntimeEvent;

let relay_asset_location =
v3::Location::try_from(RelayLocation::get()).expect("conversion works");
let relay_asset_location = v3::Location::try_from(RelayLocation::get()).unwrap();

PenpalA::assert_xcm_pallet_attempted_complete(None);
// XCM sent to relay reserve
Expand Down Expand Up @@ -371,8 +368,7 @@ fn para_to_para_relay_hop_assertions(t: ParaToParaThroughRelayTest) {

fn para_to_para_through_relay_receiver_assertions(t: ParaToParaThroughRelayTest) {
type RuntimeEvent = <PenpalB as Chain>::RuntimeEvent;
let relay_asset_location =
v3::Location::try_from(RelayLocation::get()).expect("conversion works");
let relay_asset_location = v3::Location::try_from(RelayLocation::get()).unwrap();

PenpalB::assert_xcmp_queue_success(None);

Expand Down Expand Up @@ -526,8 +522,7 @@ fn reserve_transfer_native_asset_from_relay_to_para() {
let amount_to_send: Balance = WESTEND_ED * 1000;

// Init values fot Parachain
let relay_native_asset_location =
v3::Location::try_from(RelayLocation::get()).expect("conversion works");
let relay_native_asset_location = v3::Location::try_from(RelayLocation::get()).unwrap();
let receiver = PenpalAReceiver::get();

// Init Test
Expand Down Expand Up @@ -577,8 +572,7 @@ fn reserve_transfer_native_asset_from_para_to_relay() {
let amount_to_send: Balance = WESTEND_ED * 1000;
let assets: Assets = (Parent, amount_to_send).into();
let asset_owner = PenpalAssetOwner::get();
let relay_native_asset_location =
v3::Location::try_from(RelayLocation::get()).expect("conversion works");
let relay_native_asset_location = v3::Location::try_from(RelayLocation::get()).unwrap();

// fund Parachain's sender account
PenpalA::mint_foreign_asset(
Expand Down Expand Up @@ -654,8 +648,7 @@ fn reserve_transfer_native_asset_from_system_para_to_para() {
let assets: Assets = (Parent, amount_to_send).into();

// Init values for Parachain
let system_para_native_asset_location =
v3::Location::try_from(RelayLocation::get()).expect("conversion works");
let system_para_native_asset_location = v3::Location::try_from(RelayLocation::get()).unwrap();
let receiver = PenpalAReceiver::get();

// Init Test
Expand Down Expand Up @@ -711,8 +704,7 @@ fn reserve_transfer_native_asset_from_para_to_system_para() {
let sender = PenpalASender::get();
let amount_to_send: Balance = ASSET_HUB_WESTEND_ED * 1000;
let assets: Assets = (Parent, amount_to_send).into();
let system_para_native_asset_location =
v3::Location::try_from(RelayLocation::get()).expect("conversion works");
let system_para_native_asset_location = v3::Location::try_from(RelayLocation::get()).unwrap();
let asset_owner = PenpalAssetOwner::get();

// fund Parachain's sender account
Expand Down Expand Up @@ -818,10 +810,9 @@ fn reserve_transfer_assets_from_system_para_to_para() {

// Init values for Parachain
let receiver = PenpalAReceiver::get();
let system_para_native_asset_location =
v3::Location::try_from(RelayLocation::get()).expect("conversion works");
let system_para_native_asset_location = v3::Location::try_from(RelayLocation::get()).unwrap();
let system_para_foreign_asset_location =
v3::Location::try_from(PenpalLocalReservableFromAssetHub::get()).expect("conversion works");
v3::Location::try_from(PenpalLocalReservableFromAssetHub::get()).unwrap();

// Init Test
let para_test_args = TestContext {
Expand Down Expand Up @@ -906,10 +897,9 @@ fn reserve_transfer_assets_from_para_to_system_para() {
let penpal_asset_owner = PenpalAssetOwner::get();
let penpal_asset_owner_signer = <PenpalA as Chain>::RuntimeOrigin::signed(penpal_asset_owner);
let asset_location_on_penpal =
v3::Location::try_from(PenpalLocalReservableFromAssetHub::get()).expect("conversion works");
v3::Location::try_from(PenpalLocalReservableFromAssetHub::get()).unwrap();
let asset_location_on_penpal_latest: Location = asset_location_on_penpal.try_into().unwrap();
let system_asset_location_on_penpal =
v3::Location::try_from(RelayLocation::get()).expect("conversion works");
let system_asset_location_on_penpal = v3::Location::try_from(RelayLocation::get()).unwrap();
let assets: Assets = vec![
(Parent, fee_amount_to_send).into(),
(asset_location_on_penpal_latest, asset_amount_to_send).into(),
Expand Down Expand Up @@ -940,10 +930,9 @@ fn reserve_transfer_assets_from_para_to_system_para() {
let penpal_location_as_seen_by_ahr = AssetHubWestend::sibling_location_of(PenpalA::para_id());
let sov_penpal_on_ahr =
AssetHubWestend::sovereign_account_id_of(penpal_location_as_seen_by_ahr);
let system_para_native_asset_location =
v3::Location::try_from(RelayLocation::get()).expect("conversion works");
let system_para_native_asset_location = v3::Location::try_from(RelayLocation::get()).unwrap();
let system_para_foreign_asset_location =
v3::Location::try_from(PenpalLocalReservableFromAssetHub::get()).expect("conversion works");
v3::Location::try_from(PenpalLocalReservableFromAssetHub::get()).unwrap();
let ah_asset_owner = AssetHubWestendAssetOwner::get();
let ah_asset_owner_signer = <AssetHubWestend as Chain>::RuntimeOrigin::signed(ah_asset_owner);

Expand Down Expand Up @@ -1031,15 +1020,14 @@ fn reserve_transfer_assets_from_para_to_system_para() {
/// Reserve Transfers of native asset from Parachain to Parachain (through Relay reserve) should
/// work
#[test]
fn reserve_transfer_native_asset_from_para_to_para_trough_relay() {
fn reserve_transfer_native_asset_from_para_to_para_through_relay() {
// Init values for Parachain Origin
let destination = PenpalA::sibling_location_of(PenpalB::para_id());
let sender = PenpalASender::get();
let amount_to_send: Balance = WESTEND_ED * 10000;
let asset_owner = PenpalAssetOwner::get();
let assets = (Parent, amount_to_send).into();
let relay_native_asset_location =
v3::Location::try_from(RelayLocation::get()).expect("conversion works");
let relay_native_asset_location = v3::Location::try_from(RelayLocation::get()).unwrap();
let sender_as_seen_by_relay = Westend::child_location_of(PenpalA::para_id());
let sov_of_sender_on_relay = Westend::sovereign_account_id_of(sender_as_seen_by_relay);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,8 +111,7 @@ fn swap_locally_on_chain_using_local_assets() {

#[test]
fn swap_locally_on_chain_using_foreign_assets() {
let asset_native =
Box::new(v3::Location::try_from(RelayLocation::get()).expect("conversion works"));
let asset_native = Box::new(v3::Location::try_from(RelayLocation::get()).unwrap());
let asset_location_on_penpal =
v3::Location::try_from(PenpalLocalTeleportableToAssetHub::get()).expect("conversion_works");
let foreign_asset_at_asset_hub_westend =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,7 @@ fn para_dest_assertions(t: RelayToSystemParaTest) {

fn penpal_to_ah_foreign_assets_sender_assertions(t: ParaToSystemParaTest) {
type RuntimeEvent = <PenpalA as Chain>::RuntimeEvent;
let system_para_native_asset_location =
v3::Location::try_from(RelayLocation::get()).expect("conversion works");
let system_para_native_asset_location = v3::Location::try_from(RelayLocation::get()).unwrap();
let expected_asset_id = t.args.asset_id.unwrap();
let (_, expected_asset_amount) =
non_fee_asset(&t.args.assets, t.args.fee_asset_item as usize).unwrap();
Expand Down Expand Up @@ -204,8 +203,7 @@ fn ah_to_penpal_foreign_assets_receiver_assertions(t: SystemParaToParaTest) {
let (_, expected_asset_amount) =
non_fee_asset(&t.args.assets, t.args.fee_asset_item as usize).unwrap();
let checking_account = <PenpalA as PenpalAPallet>::PolkadotXcm::check_account();
let system_para_native_asset_location =
v3::Location::try_from(RelayLocation::get()).expect("conversion works");
let system_para_native_asset_location = v3::Location::try_from(RelayLocation::get()).unwrap();

PenpalA::assert_xcmp_queue_success(None);

Expand Down Expand Up @@ -421,15 +419,14 @@ fn bidirectional_teleport_foreign_assets_between_para_and_asset_hub() {
// Init values for Parachain
let fee_amount_to_send: Balance = ASSET_HUB_WESTEND_ED * 100;
let asset_location_on_penpal =
v3::Location::try_from(PenpalLocalTeleportableToAssetHub::get()).expect("conversion works");
v3::Location::try_from(PenpalLocalTeleportableToAssetHub::get()).unwrap();
let asset_id_on_penpal = match asset_location_on_penpal.last() {
Some(v3::Junction::GeneralIndex(id)) => *id as u32,
_ => unreachable!(),
};
let asset_amount_to_send = ASSET_HUB_WESTEND_ED * 100;
let asset_owner = PenpalAssetOwner::get();
let system_para_native_asset_location =
v3::Location::try_from(RelayLocation::get()).expect("conversion works");
let system_para_native_asset_location = v3::Location::try_from(RelayLocation::get()).unwrap();
let sender = PenpalASender::get();
let penpal_check_account = <PenpalA as PenpalAPallet>::PolkadotXcm::check_account();
let ah_as_seen_by_penpal = PenpalA::sibling_location_of(AssetHubWestend::para_id());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
// limitations under the License.

use crate::tests::*;
use xcm_executor::traits::TransferType;

fn send_asset_from_asset_hub_rococo_to_asset_hub_westend(id: Location, amount: u128) {
let destination = asset_hub_westend_location();
Expand Down Expand Up @@ -58,16 +59,17 @@ fn send_asset_from_penpal_rococo_through_local_asset_hub_to_westend_asset_hub(
let signed_origin = <PenpalA as Chain>::RuntimeOrigin::signed(PenpalASender::get());
let beneficiary: Location =
AccountId32Junction { network: None, id: AssetHubWestendReceiver::get().into() }.into();
let fees: Asset = (id, transfer_amount).into();
let assets: Assets = fees.clone().into();
let fees: Asset = (id.clone(), transfer_amount).into();
let assets: Assets = vec![fees.clone()].into();

<PenpalA as PenpalAPallet>::PolkadotXcm::transfer_assets_using_reserve(
signed_origin,
bx!(destination.into()),
bx!(beneficiary.into()),
bx!(assets.into()),
bx!(assets.clone().into()),
bx!(TransferType::RemoteReserve(local_asset_hub.clone().into())),
bx!(fees.into()),
bx!(local_asset_hub.into()),
bx!(TransferType::RemoteReserve(local_asset_hub.into())),
WeightLimit::Unlimited,
)
}));
Expand Down Expand Up @@ -210,7 +212,7 @@ fn send_wnds_from_asset_hub_rococo_to_asset_hub_westend() {
let prefund_amount = 10_000_000_000_000u128;
let wnd_at_asset_hub_rococo =
v3::Location::new(2, [v3::Junction::GlobalConsensus(v3::NetworkId::Westend)]);
let owner: AccountId = AssetHubWestend::account_id_of(ALICE);
let owner: AccountId = AssetHubRococo::account_id_of(ALICE);
AssetHubRococo::force_create_foreign_asset(
wnd_at_asset_hub_rococo,
owner,
Expand Down Expand Up @@ -303,49 +305,6 @@ fn send_rocs_from_penpal_rococo_through_asset_hub_rococo_to_asset_hub_westend()
AssetHubWestend::para_id(),
);

AssetHubWestend::execute_with(|| {
type RuntimeEvent = <AssetHubWestend as Chain>::RuntimeEvent;

// setup a pool to pay xcm fees with `roc_at_asset_hub_westend` tokens
assert_ok!(<AssetHubWestend as AssetHubWestendPallet>::ForeignAssets::mint(
<AssetHubWestend as Chain>::RuntimeOrigin::signed(AssetHubWestendSender::get()),
roc_at_asset_hub_westend.into(),
AssetHubWestendSender::get().into(),
3_000_000_000_000,
));

assert_ok!(<AssetHubWestend as AssetHubWestendPallet>::AssetConversion::create_pool(
<AssetHubWestend as Chain>::RuntimeOrigin::signed(AssetHubWestendSender::get()),
Box::new(xcm::v3::Parent.into()),
Box::new(roc_at_asset_hub_westend),
));

assert_expected_events!(
AssetHubWestend,
vec![
RuntimeEvent::AssetConversion(pallet_asset_conversion::Event::PoolCreated { .. }) => {},
]
);

assert_ok!(<AssetHubWestend as AssetHubWestendPallet>::AssetConversion::add_liquidity(
<AssetHubWestend as Chain>::RuntimeOrigin::signed(AssetHubWestendSender::get()),
Box::new(xcm::v3::Parent.into()),
Box::new(roc_at_asset_hub_westend),
1_000_000_000_000,
2_000_000_000_000,
1,
1,
AssetHubWestendSender::get().into()
));

assert_expected_events!(
AssetHubWestend,
vec![
RuntimeEvent::AssetConversion(pallet_asset_conversion::Event::LiquidityAdded {..}) => {},
]
);
});

let amount = ASSET_HUB_ROCOCO_ED * 10_000_000;
let penpal_location = AssetHubRococo::sibling_location_of(PenpalA::para_id());
let sov_penpal_on_ahr = AssetHubRococo::sovereign_account_id_of(penpal_location);
Expand Down