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: enhance reserve_transfer_assets to support remote reserves #1672

Merged
Merged
Show file tree
Hide file tree
Changes from 56 commits
Commits
Show all changes
115 commits
Select commit Hold shift + click to select a range
43ef694
asset-hubs runtimes: add xcm reserve transfer tests
acatangiu Sep 5, 2023
945b34c
pallet-xcm: filter assets teleports based on XcmExecutor configuration
acatangiu Sep 21, 2023
ce215a1
xcm: MultiLocation: add .chain_location() helper function
acatangiu Sep 20, 2023
a5fd746
pallet-xcm: enchance reserve_transfer_assets() to support various res…
acatangiu Sep 25, 2023
c581d76
use correct fees beneficiary on assets reserve chain
acatangiu Sep 25, 2023
fe52d48
build dest-reserve and remote-reserve XCM programs
acatangiu Sep 26, 2023
5d847e3
deduplicate teleport and reserve transfer tests
acatangiu Sep 26, 2023
026a779
add test cases plan
acatangiu Sep 26, 2023
4465c65
add pallet-assets to mock test runtime
acatangiu Sep 26, 2023
2392dd9
fix add assets to mock pallet-xcm runtime
acatangiu Sep 26, 2023
67daafe
add test for asset-reserve and fee-reserve both at destination
acatangiu Sep 27, 2023
88b3024
add test for asset-reserve and fee-reserve both at remote chain
acatangiu Sep 27, 2023
513e15a
add test for asset-reserve at destination while fee-reserve is local
acatangiu Sep 27, 2023
19eec17
add test for asset local-reserve while fee-reserve is destination
acatangiu Sep 27, 2023
1687c53
add test for asset local-reserve while fee-reserve is remote chain
acatangiu Sep 27, 2023
abf029d
refactor tests using better naming and conceptual examples
acatangiu Sep 27, 2023
576c770
add test for asset destination-reserve while fee-reserve is remote chain
acatangiu Sep 28, 2023
280c4b1
fix some typos
acatangiu Sep 28, 2023
bab8fc2
deduplicate code for do_teleport_assets()
acatangiu Sep 28, 2023
f7a4a2e
add test for asset local-reserve while teleporting fees
acatangiu Sep 28, 2023
f88de5e
add test for asset destination-reserve while teleporting fees
acatangiu Sep 28, 2023
f7abb0a
fix cases when asset reserve is remote, add test remote-asset and tel…
acatangiu Sep 28, 2023
7b920ec
add test for transfer asset remote reserve and fee local reserve
acatangiu Sep 28, 2023
3130566
add test for transfer asset remote reserve and fee destination reserve
acatangiu Sep 28, 2023
1b17e84
disallow teleportable assets in reserve-transfer, add regression test
acatangiu Sep 29, 2023
84e213a
asset-hubs: fix emulated tests and deduplicate code
acatangiu Sep 29, 2023
ce00c28
asset-hubs: use non-system para IDs in tests where non-system paras a…
acatangiu Sep 29, 2023
1dfcd01
pallet-xcm: refactor newly added tests
acatangiu Sep 29, 2023
24f9b72
Merge branch 'master' of github.com:paritytech/polkadot-sdk into pall…
acatangiu Oct 10, 2023
022ef71
pallet-xcm: fix benchmarks
acatangiu Oct 10, 2023
9827c3b
fix pallet-xcm benchmarks for all runtimes
acatangiu Oct 10, 2023
23588a8
address review comments
acatangiu Oct 11, 2023
931e093
expose TransferType through XcmExecutor::traits::AssetTransferSupport…
acatangiu Oct 11, 2023
bf39726
Merge branch 'master' of github.com:paritytech/polkadot-sdk into pall…
acatangiu Oct 11, 2023
8ac30aa
Merge branch 'master' of github.com:paritytech/polkadot-sdk into pall…
acatangiu Oct 13, 2023
09badd6
allow transfer for non-fungible assets too
acatangiu Oct 13, 2023
648ba8a
Merge branch 'master' of github.com:paritytech/polkadot-sdk into pall…
acatangiu Oct 19, 2023
f8e8b4a
fix merge damage
acatangiu Oct 20, 2023
71bd4b3
fmt
acatangiu Oct 23, 2023
4ab90f7
pallet-xcm: split asset transfer tests to own file
acatangiu Oct 23, 2023
3070994
address review comments
acatangiu Oct 23, 2023
f045c73
pallet-xcm: disallow combining remote reserves with other xfer types
acatangiu Oct 23, 2023
fe93ef4
Merge branch 'master' of github.com:paritytech/polkadot-sdk into pall…
acatangiu Oct 23, 2023
d1a9709
xcm-barriers: allow SetFeesMode in BuyExecution barrier and fix tests
acatangiu Oct 23, 2023
50d844f
verify assets and beneficiary in over-bridge test
acatangiu Oct 24, 2023
0bf64e6
fix AHs tests
acatangiu Oct 24, 2023
c711961
AHs: fix emulated tests
acatangiu Oct 24, 2023
67929a5
AHs: include delivery-fee checking in tests
acatangiu Oct 24, 2023
dd46f23
fix runtime-benchmarks for AHRococo
acatangiu Oct 24, 2023
e8cbcb9
fix clippy
acatangiu Oct 24, 2023
d725103
withdraw fees before buyexecution - still broken because of executor …
acatangiu Oct 25, 2023
3d97f19
pallet-xcm: uses single custom XCM to send both fees and assets
acatangiu Oct 25, 2023
ac3773e
pallet-xcm: handle teleport checking account when custom burn+teleport
acatangiu Oct 25, 2023
cb6f53a
fixes plus tests
acatangiu Oct 25, 2023
560d788
fix pallet-xcm tests
acatangiu Oct 25, 2023
3bc2d73
fix AHs tests
acatangiu Oct 25, 2023
f838cd5
Merge branch 'master' of github.com:paritytech/polkadot-sdk into pall…
acatangiu Oct 26, 2023
bd60203
remove unused SetFeesMode instruction
acatangiu Oct 26, 2023
2e71447
Merge branch 'master' of github.com:paritytech/polkadot-sdk into pall…
acatangiu Oct 27, 2023
371ac2d
pallet-xcm: fix broken reserve_transfer_assets benchmark
acatangiu Oct 26, 2023
9b58ff0
try add pallet-assets for benchmarking to rococo
acatangiu Oct 27, 2023
942977e
Revert "try add pallet-assets for benchmarking to rococo"
acatangiu Oct 27, 2023
3b9965b
pallet-xcm benchmarking: most chains do not have pallet-assets, use p…
acatangiu Oct 27, 2023
adcd688
pallet-xcm: fix teleport_assets benchmark
acatangiu Oct 27, 2023
eca0c3e
fix runtimes benchmarks for pallet-xcm
acatangiu Oct 27, 2023
b648df2
AHs simplify test_cases_over_bridge
acatangiu Oct 27, 2023
da7d8ff
runtimes: add dedicated benchmarking config for pallet-xcm
acatangiu Oct 27, 2023
8d85faa
AHs benchmarks: fix transfer to sibling parachain
acatangiu Oct 28, 2023
37552fd
Update polkadot/xcm/xcm-executor/src/traits/asset_transfer.rs
acatangiu Oct 30, 2023
6714d39
Update polkadot/xcm/pallet-xcm/src/lib.rs
acatangiu Oct 30, 2023
a79ed78
Merge branch 'master' into pallet-xcm-fully-support-reserve-transfers
acatangiu Oct 30, 2023
7a61129
fmt
acatangiu Oct 30, 2023
0f76530
Update polkadot/xcm/xcm-builder/src/barriers.rs
acatangiu Oct 31, 2023
9d3f2dd
Update polkadot/xcm/pallet-xcm/src/lib.rs
acatangiu Oct 31, 2023
9feb4b0
Update polkadot/xcm/pallet-xcm/src/lib.rs
acatangiu Oct 31, 2023
0a38b70
Update polkadot/xcm/pallet-xcm/src/lib.rs
acatangiu Oct 31, 2023
02447d0
fmt
acatangiu Oct 31, 2023
84e3e29
Merge branch 'master' of github.com:paritytech/polkadot-sdk into pall…
acatangiu Oct 31, 2023
b67cb0f
xcm-emulator: configure penpal for asset transfers and enhance existi…
acatangiu Nov 1, 2023
ec87ce6
xcm-emulator: add relay to penpal native transfer test
acatangiu Nov 1, 2023
da3c12e
xcm-emulator: add ah to penpal native asset transfer test
acatangiu Nov 1, 2023
ac9bf49
xcm: MultiLocation::chain_location() takes nonmut reference
acatangiu Nov 1, 2023
e85e339
pallet-xcm: benchmarks: enforce single asset transfer at the api level
acatangiu Nov 1, 2023
9f7538d
xcm-executor: rename AssetTransferSupport to XcmAssetTransfer
acatangiu Nov 1, 2023
45279cc
clippy
acatangiu Nov 1, 2023
59cf104
Merge branch 'master' of github.com:paritytech/polkadot-sdk into pall…
acatangiu Nov 1, 2023
e9c7205
Merge branch 'master' of github.com:paritytech/polkadot-sdk into pall…
acatangiu Nov 2, 2023
6ba36f8
AssetHub tests: account for Westend higher delivery fees
acatangiu Nov 2, 2023
7728527
fix merge damage
acatangiu Nov 2, 2023
a4089c8
Added withdraw reserve to scripts
bkontur Nov 2, 2023
44e1918
bridge-hub-westend-runtime: fix benchmarks
acatangiu Nov 2, 2023
a59ccf3
xcm-emulator: add ah to penpal multiple mixed assets transfer test
acatangiu Nov 3, 2023
27c7cea
Merge branch 'master' of github.com:paritytech/polkadot-sdk into pall…
acatangiu Nov 3, 2023
582c616
fix merge damage
acatangiu Nov 3, 2023
94aaffd
remove limited from test names, all transfers use limited method now
acatangiu Nov 3, 2023
fe2cb6a
barriers: allow withdrawing multiple assets in AllowTopLevelPaidExecu…
acatangiu Nov 5, 2023
2ebefc0
pallet-xcm: add trace logs
acatangiu Nov 6, 2023
839af41
Merge branch 'master' of github.com:paritytech/polkadot-sdk into pall…
acatangiu Nov 6, 2023
56c52f1
fix runtime-benchmarks
acatangiu Nov 6, 2023
669e109
Merge branch 'master' into pallet-xcm-fully-support-reserve-transfers
acatangiu Nov 6, 2023
ba91cd6
pallet-xcm: fix tests
acatangiu Nov 6, 2023
8951238
xcm-emulator: remove unused pallet import
acatangiu Nov 7, 2023
dd2a06f
xcm-barrier: enforce MAX_ASSETS_FOR_BUY_EXECUTION
acatangiu Nov 7, 2023
6d67ea1
rename some variables and fns
acatangiu Nov 7, 2023
db1e826
add explicit incomplete local execution error
acatangiu Nov 7, 2023
54d7465
rename fns
acatangiu Nov 7, 2023
39e7b66
pallet-xcm: fix pallet extrinsic default weights
acatangiu Nov 7, 2023
ceddec5
pallet-xcm: also buy execution as part of custom fee handling
acatangiu Nov 8, 2023
7f78c73
pallet-xcm: fix lossy fees math
acatangiu Nov 8, 2023
45131b1
Merge branch 'master' of github.com:paritytech/polkadot-sdk into pall…
acatangiu Nov 8, 2023
cb8226d
fix merge damage
acatangiu Nov 8, 2023
d0c8944
Merge branch 'master' of github.com:paritytech/polkadot-sdk into pall…
acatangiu Nov 8, 2023
c5522e4
fix merge damage
acatangiu Nov 8, 2023
9827904
Merge branch 'master' of github.com:paritytech/polkadot-sdk into pall…
acatangiu Nov 13, 2023
0cc32e3
fix merge damage
acatangiu Nov 13, 2023
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
2 changes: 2 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion cumulus/pallets/xcmp-queue/src/bridging.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,9 @@ impl<SiblingBridgeHubParaId: Get<ParaId>, Runtime: crate::Config>
let sibling_bridge_hub_id: ParaId = SiblingBridgeHubParaId::get();

// let's find the channel's state with the sibling parachain,
let Some((outbound_state, queued_pages)) = pallet::Pallet::<Runtime>::outbound_channel_state(sibling_bridge_hub_id) else {
let Some((outbound_state, queued_pages)) =
pallet::Pallet::<Runtime>::outbound_channel_state(sibling_bridge_hub_id)
else {
return false
};
// suspended channel => it is congested
Expand Down
22 changes: 14 additions & 8 deletions cumulus/pallets/xcmp-queue/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -410,9 +410,11 @@ fn verify_fee_factor_increase_and_decrease() {
assert_eq!(DeliveryFeeFactor::<Test>::get(sibling_para_id), initial);

// Sending the message right now is cheap
let (_, delivery_fees) = validate_send::<XcmpQueue>(destination, xcm.clone())
.expect("message can be sent; qed");
let Fungible(delivery_fee_amount) = delivery_fees.inner()[0].fun else { unreachable!("asset is fungible; qed"); };
let (_, delivery_fees) =
validate_send::<XcmpQueue>(destination, xcm.clone()).expect("message can be sent; qed");
let Fungible(delivery_fee_amount) = delivery_fees.inner()[0].fun else {
unreachable!("asset is fungible; qed");
};
assert_eq!(delivery_fee_amount, 402_000_000);

let smaller_xcm = Xcm(vec![ClearOrigin; 30]);
Expand All @@ -422,19 +424,23 @@ fn verify_fee_factor_increase_and_decrease() {
assert_ok!(send_xcm::<XcmpQueue>(destination, xcm.clone())); // Size 520
assert_eq!(DeliveryFeeFactor::<Test>::get(sibling_para_id), FixedU128::from_float(1.05));

for _ in 0..12 { // We finish at size 929
for _ in 0..12 {
// We finish at size 929
assert_ok!(send_xcm::<XcmpQueue>(destination, smaller_xcm.clone()));
}
assert!(DeliveryFeeFactor::<Test>::get(sibling_para_id) > FixedU128::from_float(1.88));

// Sending the message right now is expensive
let (_, delivery_fees) = validate_send::<XcmpQueue>(destination, xcm.clone())
.expect("message can be sent; qed");
let Fungible(delivery_fee_amount) = delivery_fees.inner()[0].fun else { unreachable!("asset is fungible; qed"); };
let (_, delivery_fees) =
validate_send::<XcmpQueue>(destination, xcm.clone()).expect("message can be sent; qed");
let Fungible(delivery_fee_amount) = delivery_fees.inner()[0].fun else {
unreachable!("asset is fungible; qed");
};
assert_eq!(delivery_fee_amount, 758_030_955);

// Fee factor only decreases in `take_outbound_messages`
for _ in 0..5 { // We take 5 100 byte pages
for _ in 0..5 {
// We take 5 100 byte pages
XcmpQueue::take_outbound_messages(1);
}
assert!(DeliveryFeeFactor::<Test>::get(sibling_para_id) < FixedU128::from_float(1.72));
Expand Down
15 changes: 13 additions & 2 deletions cumulus/parachain-template/runtime/src/xcm_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,13 @@ pub type XcmRouter = WithUniqueTopic<(
#[cfg(feature = "runtime-benchmarks")]
parameter_types! {
pub ReachableDest: Option<MultiLocation> = Some(Parent.into());
// Teleports are disabled
pub TeleportableAssets: Option<(MultiAssets, MultiLocation)> = None;
// We can reserve transfer relay/native token between us and Relay.
pub ReserveTransferableAssets: Option<(MultiAssets, MultiLocation)> = Some((
MultiAsset { fun: Fungible(10), id: Concrete(Parent.into()) }.into(),
Parent.into(),
));
}

impl pallet_xcm::Config for Runtime {
Expand Down Expand Up @@ -180,11 +187,15 @@ impl pallet_xcm::Config for Runtime {
type SovereignAccountOf = LocationToAccountId;
type MaxLockers = ConstU32<8>;
type WeightInfo = pallet_xcm::TestWeightInfo;
#[cfg(feature = "runtime-benchmarks")]
type ReachableDest = ReachableDest;
type AdminOrigin = EnsureRoot<AccountId>;
type MaxRemoteLockConsumers = ConstU32<0>;
type RemoteLockConsumerIdentifier = ();
#[cfg(feature = "runtime-benchmarks")]
type ReachableDest = ReachableDest;
#[cfg(feature = "runtime-benchmarks")]
type TeleportableAssets = TeleportableAssets;
#[cfg(feature = "runtime-benchmarks")]
type ReserveTransferableAssets = ReserveTransferableAssets;
}

impl cumulus_pallet_xcm::Config for Runtime {
Expand Down
Loading
Loading