Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -515,35 +515,86 @@ fn relay_to_para_reserve_transfer_assets(t: RelayToParaTest) -> DispatchResult {
unimplemented!("Destination is not a parachain?")
};

type Runtime = <Rococo as Chain>::Runtime;
let remote_fee_id: AssetId = t
.args
.assets
.clone()
.into_inner()
.get(t.args.fee_asset_item as usize)
.ok_or(pallet_xcm::Error::<Runtime>::Empty)?
.clone()
.id;

Dmp::make_parachain_reachable(para_id);
<Rococo as RococoPallet>::XcmPallet::limited_reserve_transfer_assets(
<Rococo as RococoPallet>::XcmPallet::transfer_assets_using_type_and_then(
t.signed_origin,
bx!(t.args.dest.into()),
bx!(t.args.beneficiary.into()),
bx!(t.args.assets.into()),
t.args.fee_asset_item,
bx!(TransferType::LocalReserve),
bx!(remote_fee_id.into()),
bx!(TransferType::LocalReserve),
bx!(VersionedXcm::from(
Xcm::<()>::builder_unsafe()
.deposit_asset(AllCounted(1), t.args.beneficiary)
.build()
)),
t.args.weight_limit,
)
}

fn para_to_relay_reserve_transfer_assets(t: ParaToRelayTest) -> DispatchResult {
<PenpalA as PenpalAPallet>::PolkadotXcm::limited_reserve_transfer_assets(
type Runtime = <PenpalA as Chain>::Runtime;
let remote_fee_id: AssetId = t
.args
.assets
.clone()
.into_inner()
.get(t.args.fee_asset_item as usize)
.ok_or(pallet_xcm::Error::<Runtime>::Empty)?
.clone()
.id;

<PenpalA as PenpalAPallet>::PolkadotXcm::transfer_assets_using_type_and_then(
t.signed_origin,
bx!(t.args.dest.into()),
bx!(t.args.beneficiary.into()),
bx!(t.args.assets.into()),
t.args.fee_asset_item,
bx!(TransferType::DestinationReserve),
bx!(remote_fee_id.into()),
bx!(TransferType::DestinationReserve),
bx!(VersionedXcm::from(
Xcm::<()>::builder_unsafe()
.deposit_asset(AllCounted(1), t.args.beneficiary)
.build()
)),
t.args.weight_limit,
)
}

fn system_para_to_para_reserve_transfer_assets(t: SystemParaToParaTest) -> DispatchResult {
<AssetHubRococo as AssetHubRococoPallet>::PolkadotXcm::limited_reserve_transfer_assets(
type Runtime = <AssetHubRococo as Chain>::Runtime;
let remote_fee_id: AssetId = t
.args
.assets
.clone()
.into_inner()
.get(t.args.fee_asset_item as usize)
.ok_or(pallet_xcm::Error::<Runtime>::Empty)?
.clone()
.id;

<AssetHubRococo as AssetHubRococoPallet>::PolkadotXcm::transfer_assets_using_type_and_then(
t.signed_origin,
bx!(t.args.dest.into()),
bx!(t.args.beneficiary.into()),
bx!(t.args.assets.into()),
t.args.fee_asset_item,
bx!(TransferType::LocalReserve),
bx!(remote_fee_id.into()),
bx!(TransferType::LocalReserve),
bx!(VersionedXcm::from(
Xcm::<()>::builder_unsafe()
.deposit_asset(AllCounted(2), t.args.beneficiary)
.build()
)),
t.args.weight_limit,
)
}
Expand All @@ -562,12 +613,29 @@ fn para_to_para_through_asset_hub_limited_reserve_transfer_assets(
}

fn para_to_system_para_reserve_transfer_assets(t: ParaToSystemParaTest) -> DispatchResult {
<PenpalA as PenpalAPallet>::PolkadotXcm::limited_reserve_transfer_assets(
type Runtime = <PenpalA as Chain>::Runtime;
let remote_fee_id: AssetId = t
.args
.assets
.clone()
.into_inner()
.get(t.args.fee_asset_item as usize)
.ok_or(pallet_xcm::Error::<Runtime>::Empty)?
.clone()
.id;

<PenpalA as PenpalAPallet>::PolkadotXcm::transfer_assets_using_type_and_then(
t.signed_origin,
bx!(t.args.dest.into()),
bx!(t.args.beneficiary.into()),
bx!(t.args.assets.into()),
t.args.fee_asset_item,
bx!(TransferType::DestinationReserve),
bx!(remote_fee_id.into()),
bx!(TransferType::DestinationReserve),
bx!(VersionedXcm::from(
Xcm::<()>::builder_unsafe()
.deposit_asset(AllCounted(2), t.args.beneficiary)
.build()
)),
t.args.weight_limit,
)
}
Expand All @@ -579,15 +647,34 @@ fn para_to_para_through_relay_limited_reserve_transfer_assets(
unimplemented!("Destination is not a parachain?")
};

type Runtime = <PenpalA as Chain>::Runtime;
let remote_fee_id: AssetId = t
.args
.assets
.clone()
.into_inner()
.get(t.args.fee_asset_item as usize)
.ok_or(pallet_xcm::Error::<Runtime>::Empty)?
.clone()
.id;

let relay_location = VersionedLocation::from(Location::parent());

Rococo::ext_wrapper(|| {
Dmp::make_parachain_reachable(para_id);
});
<PenpalA as PenpalAPallet>::PolkadotXcm::limited_reserve_transfer_assets(
<PenpalA as PenpalAPallet>::PolkadotXcm::transfer_assets_using_type_and_then(
t.signed_origin,
bx!(t.args.dest.into()),
bx!(t.args.beneficiary.into()),
bx!(t.args.assets.into()),
t.args.fee_asset_item,
bx!(TransferType::RemoteReserve(relay_location.clone())),
bx!(remote_fee_id.into()),
bx!(TransferType::RemoteReserve(relay_location)),
bx!(VersionedXcm::from(
Xcm::<()>::builder_unsafe()
.deposit_asset(AllCounted(1), t.args.beneficiary)
.build()
)),
t.args.weight_limit,
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -526,46 +526,114 @@ fn relay_to_para_reserve_transfer_assets(t: RelayToParaTest) -> DispatchResult {
unimplemented!("Destination is not a parachain?")
};

type Runtime = <Westend as Chain>::Runtime;
let remote_fee_id: AssetId = t
.args
.assets
.clone()
.into_inner()
.get(t.args.fee_asset_item as usize)
.ok_or(pallet_xcm::Error::<Runtime>::Empty)?
.clone()
.id;

Dmp::make_parachain_reachable(para_id);
<Westend as WestendPallet>::XcmPallet::limited_reserve_transfer_assets(
<Westend as WestendPallet>::XcmPallet::transfer_assets_using_type_and_then(
t.signed_origin,
bx!(t.args.dest.into()),
bx!(t.args.beneficiary.into()),
bx!(t.args.assets.into()),
t.args.fee_asset_item,
bx!(TransferType::LocalReserve),
bx!(remote_fee_id.into()),
bx!(TransferType::LocalReserve),
bx!(VersionedXcm::from(
Xcm::<()>::builder_unsafe()
.deposit_asset(AllCounted(1), t.args.beneficiary)
.build()
)),
t.args.weight_limit,
)
}

fn para_to_relay_reserve_transfer_assets(t: ParaToRelayTest) -> DispatchResult {
<PenpalA as PenpalAPallet>::PolkadotXcm::limited_reserve_transfer_assets(
type Runtime = <PenpalA as Chain>::Runtime;
let remote_fee_id: AssetId = t
.args
.assets
.clone()
.into_inner()
.get(t.args.fee_asset_item as usize)
.ok_or(pallet_xcm::Error::<Runtime>::Empty)?
.clone()
.id;

<PenpalA as PenpalAPallet>::PolkadotXcm::transfer_assets_using_type_and_then(
t.signed_origin,
bx!(t.args.dest.into()),
bx!(t.args.beneficiary.into()),
bx!(t.args.assets.into()),
t.args.fee_asset_item,
bx!(TransferType::DestinationReserve),
bx!(remote_fee_id.into()),
bx!(TransferType::DestinationReserve),
bx!(VersionedXcm::from(
Xcm::<()>::builder_unsafe()
.deposit_asset(AllCounted(1), t.args.beneficiary)
.build()
)),
t.args.weight_limit,
)
}

fn system_para_to_para_reserve_transfer_assets(t: SystemParaToParaTest) -> DispatchResult {
<AssetHubWestend as AssetHubWestendPallet>::PolkadotXcm::limited_reserve_transfer_assets(
type Runtime = <AssetHubWestend as Chain>::Runtime;
let remote_fee_id: AssetId = t
.args
.assets
.clone()
.into_inner()
.get(t.args.fee_asset_item as usize)
.ok_or(pallet_xcm::Error::<Runtime>::Empty)?
.clone()
.id;

<AssetHubWestend as AssetHubWestendPallet>::PolkadotXcm::transfer_assets_using_type_and_then(
t.signed_origin,
bx!(t.args.dest.into()),
bx!(t.args.beneficiary.into()),
bx!(t.args.assets.into()),
t.args.fee_asset_item,
bx!(TransferType::LocalReserve),
bx!(remote_fee_id.into()),
bx!(TransferType::LocalReserve),
bx!(VersionedXcm::from(
Xcm::<()>::builder_unsafe()
.deposit_asset(AllCounted(2), t.args.beneficiary)
.build()
)),
t.args.weight_limit,
)
}

fn para_to_system_para_reserve_transfer_assets(t: ParaToSystemParaTest) -> DispatchResult {
<PenpalA as PenpalAPallet>::PolkadotXcm::limited_reserve_transfer_assets(
type Runtime = <PenpalA as Chain>::Runtime;
let remote_fee_id: AssetId = t
.args
.assets
.clone()
.into_inner()
.get(t.args.fee_asset_item as usize)
.ok_or(pallet_xcm::Error::<Runtime>::Empty)?
.clone()
.id;

<PenpalA as PenpalAPallet>::PolkadotXcm::transfer_assets_using_type_and_then(
t.signed_origin,
bx!(t.args.dest.into()),
bx!(t.args.beneficiary.into()),
bx!(t.args.assets.into()),
t.args.fee_asset_item,
bx!(TransferType::DestinationReserve),
bx!(remote_fee_id.into()),
bx!(TransferType::DestinationReserve),
bx!(VersionedXcm::from(
Xcm::<()>::builder_unsafe()
.deposit_asset(AllCounted(2), t.args.beneficiary)
.build()
)),
t.args.weight_limit,
)
}
Expand All @@ -577,15 +645,34 @@ fn para_to_para_through_relay_limited_reserve_transfer_assets(
unimplemented!("Destination is not a parachain?")
};

type Runtime = <PenpalA as Chain>::Runtime;
let remote_fee_id: AssetId = t
.args
.assets
.clone()
.into_inner()
.get(t.args.fee_asset_item as usize)
.ok_or(pallet_xcm::Error::<Runtime>::Empty)?
.clone()
.id;

let relay_location = VersionedLocation::from(Location::parent());

Westend::ext_wrapper(|| {
Dmp::make_parachain_reachable(para_id);
});
<PenpalA as PenpalAPallet>::PolkadotXcm::limited_reserve_transfer_assets(
<PenpalA as PenpalAPallet>::PolkadotXcm::transfer_assets_using_type_and_then(
t.signed_origin,
bx!(t.args.dest.into()),
bx!(t.args.beneficiary.into()),
bx!(t.args.assets.into()),
t.args.fee_asset_item,
bx!(TransferType::RemoteReserve(relay_location.clone())),
bx!(remote_fee_id.into()),
bx!(TransferType::RemoteReserve(relay_location)),
bx!(VersionedXcm::from(
Xcm::<()>::builder_unsafe()
.deposit_asset(AllCounted(1), t.args.beneficiary)
.build()
)),
t.args.weight_limit,
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,8 @@ fn send_roc_from_asset_hub_rococo_to_asset_hub_westend() {
let destination = asset_hub_westend_location();
let assets: Assets = (roc_at_asset_hub_rococo.clone(), amount).into();
let fee_idx = 0;
assert_ok!(send_assets_from_asset_hub_rococo(destination, assets, fee_idx));
let transfer_type = TransferType::LocalReserve;
assert_ok!(send_assets_from_asset_hub_rococo(destination, assets, fee_idx, transfer_type));
});

// verify expected events on final destination
Expand Down Expand Up @@ -210,7 +211,8 @@ fn send_back_wnds_usdt_and_weth_from_asset_hub_rococo_to_asset_hub_westend() {
let destination = asset_hub_westend_location();
let assets: Assets = (wnd_at_asset_hub_rococo.clone(), amount_to_send).into();
let fee_idx = 0;
assert_ok!(send_assets_from_asset_hub_rococo(destination, assets, fee_idx));
let transfer_type = TransferType::DestinationReserve;
assert_ok!(send_assets_from_asset_hub_rococo(destination, assets, fee_idx, transfer_type));
});

AssetHubWestend::execute_with(|| {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -173,19 +173,36 @@ pub(crate) fn send_assets_from_asset_hub_rococo(
destination: Location,
assets: Assets,
fee_idx: u32,
// For knowing what reserve to pick.
// We only allow using the same transfer type for assets and fees right now.
// And only `LocalReserve` or `DestinationReserve`.
transfer_type: TransferType,
) -> DispatchResult {
let signed_origin =
<AssetHubRococo as Chain>::RuntimeOrigin::signed(AssetHubRococoSender::get());
let beneficiary: Location =
AccountId32Junction { network: None, id: AssetHubWestendReceiver::get().into() }.into();

type Runtime = <AssetHubRococo as Chain>::Runtime;
let remote_fee_id: AssetId = assets
.clone()
.into_inner()
.get(fee_idx as usize)
.ok_or(pallet_xcm::Error::<Runtime>::Empty)?
.clone()
.id;

AssetHubRococo::execute_with(|| {
<AssetHubRococo as AssetHubRococoPallet>::PolkadotXcm::limited_reserve_transfer_assets(
<AssetHubRococo as AssetHubRococoPallet>::PolkadotXcm::transfer_assets_using_type_and_then(
signed_origin,
bx!(destination.into()),
bx!(beneficiary.into()),
bx!(assets.into()),
fee_idx,
bx!(transfer_type.clone()),
bx!(remote_fee_id.into()),
bx!(transfer_type),
bx!(VersionedXcm::from(
Xcm::<()>::builder_unsafe().deposit_asset(AllCounted(1), beneficiary).build()
)),
WeightLimit::Unlimited,
)
})
Expand Down
Loading