mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-25 19:57:56 +00:00
pallet-xcm: fix weights for all XTs and deprecate unlimited weight ones (#3927)
Fix "double-weights" for extrinsics, use only the ones benchmarked in the runtime. Deprecate extrinsics that don't specify WeightLimit, remove their usage across the repo. --------- Signed-off-by: Adrian Catangiu <adrian@parity.io> Co-authored-by: command-bot <>
This commit is contained in:
-143
@@ -245,16 +245,6 @@ fn relay_limited_teleport_assets(t: RelayToSystemParaTest) -> DispatchResult {
|
||||
)
|
||||
}
|
||||
|
||||
fn relay_teleport_assets(t: RelayToSystemParaTest) -> DispatchResult {
|
||||
<Rococo as RococoPallet>::XcmPallet::teleport_assets(
|
||||
t.signed_origin,
|
||||
bx!(t.args.dest.into()),
|
||||
bx!(t.args.beneficiary.into()),
|
||||
bx!(t.args.assets.into()),
|
||||
t.args.fee_asset_item,
|
||||
)
|
||||
}
|
||||
|
||||
fn system_para_limited_teleport_assets(t: SystemParaToRelayTest) -> DispatchResult {
|
||||
<AssetHubRococo as AssetHubRococoPallet>::PolkadotXcm::limited_teleport_assets(
|
||||
t.signed_origin,
|
||||
@@ -266,16 +256,6 @@ fn system_para_limited_teleport_assets(t: SystemParaToRelayTest) -> DispatchResu
|
||||
)
|
||||
}
|
||||
|
||||
fn system_para_teleport_assets(t: SystemParaToRelayTest) -> DispatchResult {
|
||||
<AssetHubRococo as AssetHubRococoPallet>::PolkadotXcm::teleport_assets(
|
||||
t.signed_origin,
|
||||
bx!(t.args.dest.into()),
|
||||
bx!(t.args.beneficiary.into()),
|
||||
bx!(t.args.assets.into()),
|
||||
t.args.fee_asset_item,
|
||||
)
|
||||
}
|
||||
|
||||
fn para_to_system_para_transfer_assets(t: ParaToSystemParaTest) -> DispatchResult {
|
||||
<PenpalA as PenpalAPallet>::PolkadotXcm::transfer_assets(
|
||||
t.signed_origin,
|
||||
@@ -421,129 +401,6 @@ fn limited_teleport_native_assets_from_system_para_to_relay_fails() {
|
||||
assert_eq!(receiver_balance_after, receiver_balance_before);
|
||||
}
|
||||
|
||||
/// Teleport of native asset from Relay Chain to the System Parachain should work
|
||||
#[test]
|
||||
fn teleport_native_assets_from_relay_to_system_para_works() {
|
||||
// Init values for Relay Chain
|
||||
let amount_to_send: Balance = ROCOCO_ED * 1000;
|
||||
let dest = Rococo::child_location_of(AssetHubRococo::para_id());
|
||||
let beneficiary_id = AssetHubRococoReceiver::get();
|
||||
let test_args = TestContext {
|
||||
sender: RococoSender::get(),
|
||||
receiver: AssetHubRococoReceiver::get(),
|
||||
args: TestArgs::new_relay(dest, beneficiary_id, amount_to_send),
|
||||
};
|
||||
|
||||
let mut test = RelayToSystemParaTest::new(test_args);
|
||||
|
||||
let sender_balance_before = test.sender.balance;
|
||||
let receiver_balance_before = test.receiver.balance;
|
||||
|
||||
test.set_assertion::<Rococo>(relay_origin_assertions);
|
||||
test.set_assertion::<AssetHubRococo>(para_dest_assertions);
|
||||
test.set_dispatchable::<Rococo>(relay_teleport_assets);
|
||||
test.assert();
|
||||
|
||||
let delivery_fees = Rococo::execute_with(|| {
|
||||
xcm_helpers::teleport_assets_delivery_fees::<
|
||||
<RococoXcmConfig as xcm_executor::Config>::XcmSender,
|
||||
>(test.args.assets.clone(), 0, test.args.weight_limit, test.args.beneficiary, test.args.dest)
|
||||
});
|
||||
|
||||
let sender_balance_after = test.sender.balance;
|
||||
let receiver_balance_after = test.receiver.balance;
|
||||
|
||||
// Sender's balance is reduced
|
||||
assert_eq!(sender_balance_before - amount_to_send - delivery_fees, sender_balance_after);
|
||||
// Receiver's balance is increased
|
||||
assert!(receiver_balance_after > receiver_balance_before);
|
||||
}
|
||||
|
||||
/// Teleport of native asset from System Parachains to the Relay Chain
|
||||
/// should work when there is enough balance in Relay Chain's `CheckAccount`
|
||||
#[test]
|
||||
fn teleport_native_assets_back_from_system_para_to_relay_works() {
|
||||
// Dependency - Relay Chain's `CheckAccount` should have enough balance
|
||||
teleport_native_assets_from_relay_to_system_para_works();
|
||||
|
||||
// Init values for Relay Chain
|
||||
let amount_to_send: Balance = ASSET_HUB_ROCOCO_ED * 1000;
|
||||
let destination = AssetHubRococo::parent_location();
|
||||
let beneficiary_id = RococoReceiver::get();
|
||||
let assets = (Parent, amount_to_send).into();
|
||||
|
||||
let test_args = TestContext {
|
||||
sender: AssetHubRococoSender::get(),
|
||||
receiver: RococoReceiver::get(),
|
||||
args: TestArgs::new_para(destination, beneficiary_id, amount_to_send, assets, None, 0),
|
||||
};
|
||||
|
||||
let mut test = SystemParaToRelayTest::new(test_args);
|
||||
|
||||
let sender_balance_before = test.sender.balance;
|
||||
let receiver_balance_before = test.receiver.balance;
|
||||
|
||||
test.set_assertion::<AssetHubRococo>(para_origin_assertions);
|
||||
test.set_assertion::<Rococo>(relay_dest_assertions);
|
||||
test.set_dispatchable::<AssetHubRococo>(system_para_teleport_assets);
|
||||
test.assert();
|
||||
|
||||
let sender_balance_after = test.sender.balance;
|
||||
let receiver_balance_after = test.receiver.balance;
|
||||
|
||||
let delivery_fees = AssetHubRococo::execute_with(|| {
|
||||
xcm_helpers::teleport_assets_delivery_fees::<
|
||||
<AssetHubRococoXcmConfig as xcm_executor::Config>::XcmSender,
|
||||
>(test.args.assets.clone(), 0, test.args.weight_limit, test.args.beneficiary, test.args.dest)
|
||||
});
|
||||
|
||||
// Sender's balance is reduced
|
||||
assert_eq!(sender_balance_before - amount_to_send - delivery_fees, sender_balance_after);
|
||||
// Receiver's balance is increased
|
||||
assert!(receiver_balance_after > receiver_balance_before);
|
||||
}
|
||||
|
||||
/// Teleport of native asset from System Parachain to Relay Chain
|
||||
/// shouldn't work when there is not enough balance in Relay Chain's `CheckAccount`
|
||||
#[test]
|
||||
fn teleport_native_assets_from_system_para_to_relay_fails() {
|
||||
// Init values for Relay Chain
|
||||
let amount_to_send: Balance = ASSET_HUB_ROCOCO_ED * 1000;
|
||||
let destination = AssetHubRococo::parent_location();
|
||||
let beneficiary_id = RococoReceiver::get();
|
||||
let assets = (Parent, amount_to_send).into();
|
||||
|
||||
let test_args = TestContext {
|
||||
sender: AssetHubRococoSender::get(),
|
||||
receiver: RococoReceiver::get(),
|
||||
args: TestArgs::new_para(destination, beneficiary_id, amount_to_send, assets, None, 0),
|
||||
};
|
||||
|
||||
let mut test = SystemParaToRelayTest::new(test_args);
|
||||
|
||||
let sender_balance_before = test.sender.balance;
|
||||
let receiver_balance_before = test.receiver.balance;
|
||||
|
||||
test.set_assertion::<AssetHubRococo>(para_origin_assertions);
|
||||
test.set_assertion::<Rococo>(relay_dest_assertions_fail);
|
||||
test.set_dispatchable::<AssetHubRococo>(system_para_teleport_assets);
|
||||
test.assert();
|
||||
|
||||
let delivery_fees = AssetHubRococo::execute_with(|| {
|
||||
xcm_helpers::teleport_assets_delivery_fees::<
|
||||
<AssetHubRococoXcmConfig as xcm_executor::Config>::XcmSender,
|
||||
>(test.args.assets.clone(), 0, test.args.weight_limit, test.args.beneficiary, test.args.dest)
|
||||
});
|
||||
|
||||
let sender_balance_after = test.sender.balance;
|
||||
let receiver_balance_after = test.receiver.balance;
|
||||
|
||||
// Sender's balance is reduced
|
||||
assert_eq!(sender_balance_before - amount_to_send - delivery_fees, sender_balance_after);
|
||||
// Receiver's balance does not change
|
||||
assert_eq!(receiver_balance_after, receiver_balance_before);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn teleport_to_other_system_parachains_works() {
|
||||
let amount = ASSET_HUB_ROCOCO_ED * 100;
|
||||
|
||||
-143
@@ -245,16 +245,6 @@ fn relay_limited_teleport_assets(t: RelayToSystemParaTest) -> DispatchResult {
|
||||
)
|
||||
}
|
||||
|
||||
fn relay_teleport_assets(t: RelayToSystemParaTest) -> DispatchResult {
|
||||
<Westend as WestendPallet>::XcmPallet::teleport_assets(
|
||||
t.signed_origin,
|
||||
bx!(t.args.dest.into()),
|
||||
bx!(t.args.beneficiary.into()),
|
||||
bx!(t.args.assets.into()),
|
||||
t.args.fee_asset_item,
|
||||
)
|
||||
}
|
||||
|
||||
fn system_para_limited_teleport_assets(t: SystemParaToRelayTest) -> DispatchResult {
|
||||
<AssetHubWestend as AssetHubWestendPallet>::PolkadotXcm::limited_teleport_assets(
|
||||
t.signed_origin,
|
||||
@@ -266,16 +256,6 @@ fn system_para_limited_teleport_assets(t: SystemParaToRelayTest) -> DispatchResu
|
||||
)
|
||||
}
|
||||
|
||||
fn system_para_teleport_assets(t: SystemParaToRelayTest) -> DispatchResult {
|
||||
<AssetHubWestend as AssetHubWestendPallet>::PolkadotXcm::teleport_assets(
|
||||
t.signed_origin,
|
||||
bx!(t.args.dest.into()),
|
||||
bx!(t.args.beneficiary.into()),
|
||||
bx!(t.args.assets.into()),
|
||||
t.args.fee_asset_item,
|
||||
)
|
||||
}
|
||||
|
||||
fn para_to_system_para_transfer_assets(t: ParaToSystemParaTest) -> DispatchResult {
|
||||
<PenpalA as PenpalAPallet>::PolkadotXcm::transfer_assets(
|
||||
t.signed_origin,
|
||||
@@ -421,129 +401,6 @@ fn limited_teleport_native_assets_from_system_para_to_relay_fails() {
|
||||
assert_eq!(receiver_balance_after, receiver_balance_before);
|
||||
}
|
||||
|
||||
/// Teleport of native asset from Relay Chain to the System Parachain should work
|
||||
#[test]
|
||||
fn teleport_native_assets_from_relay_to_system_para_works() {
|
||||
// Init values for Relay Chain
|
||||
let amount_to_send: Balance = WESTEND_ED * 1000;
|
||||
let dest = Westend::child_location_of(AssetHubWestend::para_id());
|
||||
let beneficiary_id = AssetHubWestendReceiver::get();
|
||||
let test_args = TestContext {
|
||||
sender: WestendSender::get(),
|
||||
receiver: AssetHubWestendReceiver::get(),
|
||||
args: TestArgs::new_relay(dest, beneficiary_id, amount_to_send),
|
||||
};
|
||||
|
||||
let mut test = RelayToSystemParaTest::new(test_args);
|
||||
|
||||
let sender_balance_before = test.sender.balance;
|
||||
let receiver_balance_before = test.receiver.balance;
|
||||
|
||||
test.set_assertion::<Westend>(relay_origin_assertions);
|
||||
test.set_assertion::<AssetHubWestend>(para_dest_assertions);
|
||||
test.set_dispatchable::<Westend>(relay_teleport_assets);
|
||||
test.assert();
|
||||
|
||||
let delivery_fees = Westend::execute_with(|| {
|
||||
xcm_helpers::teleport_assets_delivery_fees::<
|
||||
<WestendXcmConfig as xcm_executor::Config>::XcmSender,
|
||||
>(test.args.assets.clone(), 0, test.args.weight_limit, test.args.beneficiary, test.args.dest)
|
||||
});
|
||||
|
||||
let sender_balance_after = test.sender.balance;
|
||||
let receiver_balance_after = test.receiver.balance;
|
||||
|
||||
// Sender's balance is reduced
|
||||
assert_eq!(sender_balance_before - amount_to_send - delivery_fees, sender_balance_after);
|
||||
// Receiver's balance is increased
|
||||
assert!(receiver_balance_after > receiver_balance_before);
|
||||
}
|
||||
|
||||
/// Teleport of native asset from System Parachains to the Relay Chain
|
||||
/// should work when there is enough balance in Relay Chain's `CheckAccount`
|
||||
#[test]
|
||||
fn teleport_native_assets_back_from_system_para_to_relay_works() {
|
||||
// Dependency - Relay Chain's `CheckAccount` should have enough balance
|
||||
teleport_native_assets_from_relay_to_system_para_works();
|
||||
|
||||
// Init values for Relay Chain
|
||||
let amount_to_send: Balance = ASSET_HUB_WESTEND_ED * 1000;
|
||||
let destination = AssetHubWestend::parent_location();
|
||||
let beneficiary_id = WestendReceiver::get();
|
||||
let assets = (Parent, amount_to_send).into();
|
||||
|
||||
let test_args = TestContext {
|
||||
sender: AssetHubWestendSender::get(),
|
||||
receiver: WestendReceiver::get(),
|
||||
args: TestArgs::new_para(destination, beneficiary_id, amount_to_send, assets, None, 0),
|
||||
};
|
||||
|
||||
let mut test = SystemParaToRelayTest::new(test_args);
|
||||
|
||||
let sender_balance_before = test.sender.balance;
|
||||
let receiver_balance_before = test.receiver.balance;
|
||||
|
||||
test.set_assertion::<AssetHubWestend>(para_origin_assertions);
|
||||
test.set_assertion::<Westend>(relay_dest_assertions);
|
||||
test.set_dispatchable::<AssetHubWestend>(system_para_teleport_assets);
|
||||
test.assert();
|
||||
|
||||
let sender_balance_after = test.sender.balance;
|
||||
let receiver_balance_after = test.receiver.balance;
|
||||
|
||||
let delivery_fees = AssetHubWestend::execute_with(|| {
|
||||
xcm_helpers::teleport_assets_delivery_fees::<
|
||||
<AssetHubWestendXcmConfig as xcm_executor::Config>::XcmSender,
|
||||
>(test.args.assets.clone(), 0, test.args.weight_limit, test.args.beneficiary, test.args.dest)
|
||||
});
|
||||
|
||||
// Sender's balance is reduced
|
||||
assert_eq!(sender_balance_before - amount_to_send - delivery_fees, sender_balance_after);
|
||||
// Receiver's balance is increased
|
||||
assert!(receiver_balance_after > receiver_balance_before);
|
||||
}
|
||||
|
||||
/// Teleport of native asset from System Parachain to Relay Chain
|
||||
/// shouldn't work when there is not enough balance in Relay Chain's `CheckAccount`
|
||||
#[test]
|
||||
fn teleport_native_assets_from_system_para_to_relay_fails() {
|
||||
// Init values for Relay Chain
|
||||
let amount_to_send: Balance = ASSET_HUB_WESTEND_ED * 1000;
|
||||
let destination = AssetHubWestend::parent_location();
|
||||
let beneficiary_id = WestendReceiver::get();
|
||||
let assets = (Parent, amount_to_send).into();
|
||||
|
||||
let test_args = TestContext {
|
||||
sender: AssetHubWestendSender::get(),
|
||||
receiver: WestendReceiver::get(),
|
||||
args: TestArgs::new_para(destination, beneficiary_id, amount_to_send, assets, None, 0),
|
||||
};
|
||||
|
||||
let mut test = SystemParaToRelayTest::new(test_args);
|
||||
|
||||
let sender_balance_before = test.sender.balance;
|
||||
let receiver_balance_before = test.receiver.balance;
|
||||
|
||||
test.set_assertion::<AssetHubWestend>(para_origin_assertions);
|
||||
test.set_assertion::<Westend>(relay_dest_assertions_fail);
|
||||
test.set_dispatchable::<AssetHubWestend>(system_para_teleport_assets);
|
||||
test.assert();
|
||||
|
||||
let delivery_fees = AssetHubWestend::execute_with(|| {
|
||||
xcm_helpers::teleport_assets_delivery_fees::<
|
||||
<AssetHubWestendXcmConfig as xcm_executor::Config>::XcmSender,
|
||||
>(test.args.assets.clone(), 0, test.args.weight_limit, test.args.beneficiary, test.args.dest)
|
||||
});
|
||||
|
||||
let sender_balance_after = test.sender.balance;
|
||||
let receiver_balance_after = test.receiver.balance;
|
||||
|
||||
// Sender's balance is reduced
|
||||
assert_eq!(sender_balance_before - amount_to_send - delivery_fees, sender_balance_after);
|
||||
// Receiver's balance does not change
|
||||
assert_eq!(receiver_balance_after, receiver_balance_before);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn teleport_to_other_system_parachains_works() {
|
||||
let amount = ASSET_HUB_WESTEND_ED * 100;
|
||||
|
||||
+2
-1
@@ -458,12 +458,13 @@ fn send_weth_asset_from_asset_hub_to_ethereum() {
|
||||
AssetHubRococoReceiver::get(),
|
||||
);
|
||||
// Send the Weth back to Ethereum
|
||||
<AssetHubRococo as AssetHubRococoPallet>::PolkadotXcm::reserve_transfer_assets(
|
||||
<AssetHubRococo as AssetHubRococoPallet>::PolkadotXcm::limited_reserve_transfer_assets(
|
||||
RuntimeOrigin::signed(AssetHubRococoReceiver::get()),
|
||||
Box::new(destination),
|
||||
Box::new(beneficiary),
|
||||
Box::new(multi_assets),
|
||||
0,
|
||||
Unlimited,
|
||||
)
|
||||
.unwrap();
|
||||
let free_balance_after = <AssetHubRococo as AssetHubRococoPallet>::Balances::free_balance(
|
||||
|
||||
@@ -17,9 +17,9 @@
|
||||
//! Autogenerated weights for `pallet_xcm`
|
||||
//!
|
||||
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 32.0.0
|
||||
//! DATE: 2024-03-21, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
|
||||
//! DATE: 2024-04-01, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
|
||||
//! WORST CASE MAP SIZE: `1000000`
|
||||
//! HOSTNAME: `runner-h2rr8wx7-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz`
|
||||
//! HOSTNAME: `runner-f3xfxtob-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz`
|
||||
//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("asset-hub-westend-dev")`, DB CACHE: 1024
|
||||
|
||||
// Executed Command:
|
||||
@@ -64,8 +64,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `145`
|
||||
// Estimated: `3610`
|
||||
// Minimum execution time: 21_722_000 picoseconds.
|
||||
Weight::from_parts(22_253_000, 0)
|
||||
// Minimum execution time: 21_050_000 picoseconds.
|
||||
Weight::from_parts(21_834_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 3610))
|
||||
.saturating_add(T::DbWeight::get().reads(6))
|
||||
.saturating_add(T::DbWeight::get().writes(2))
|
||||
@@ -86,8 +86,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `145`
|
||||
// Estimated: `3610`
|
||||
// Minimum execution time: 21_694_000 picoseconds.
|
||||
Weight::from_parts(22_326_000, 0)
|
||||
// Minimum execution time: 21_164_000 picoseconds.
|
||||
Weight::from_parts(21_656_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 3610))
|
||||
.saturating_add(T::DbWeight::get().reads(6))
|
||||
.saturating_add(T::DbWeight::get().writes(2))
|
||||
@@ -112,8 +112,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `145`
|
||||
// Estimated: `3610`
|
||||
// Minimum execution time: 94_422_000 picoseconds.
|
||||
Weight::from_parts(96_997_000, 0)
|
||||
// Minimum execution time: 92_497_000 picoseconds.
|
||||
Weight::from_parts(95_473_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 3610))
|
||||
.saturating_add(T::DbWeight::get().reads(8))
|
||||
.saturating_add(T::DbWeight::get().writes(3))
|
||||
@@ -140,8 +140,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `367`
|
||||
// Estimated: `6196`
|
||||
// Minimum execution time: 123_368_000 picoseconds.
|
||||
Weight::from_parts(125_798_000, 0)
|
||||
// Minimum execution time: 120_059_000 picoseconds.
|
||||
Weight::from_parts(122_894_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 6196))
|
||||
.saturating_add(T::DbWeight::get().reads(9))
|
||||
.saturating_add(T::DbWeight::get().writes(5))
|
||||
@@ -170,8 +170,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `496`
|
||||
// Estimated: `6208`
|
||||
// Minimum execution time: 142_033_000 picoseconds.
|
||||
Weight::from_parts(145_702_000, 0)
|
||||
// Minimum execution time: 141_977_000 picoseconds.
|
||||
Weight::from_parts(145_981_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 6208))
|
||||
.saturating_add(T::DbWeight::get().reads(12))
|
||||
.saturating_add(T::DbWeight::get().writes(7))
|
||||
@@ -180,16 +180,16 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 7_558_000 picoseconds.
|
||||
Weight::from_parts(7_916_000, 0)
|
||||
// Minimum execution time: 7_426_000 picoseconds.
|
||||
Weight::from_parts(7_791_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 0))
|
||||
}
|
||||
fn execute_blob() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 7_978_000 picoseconds.
|
||||
Weight::from_parts(8_210_000, 0)
|
||||
// Minimum execution time: 7_585_000 picoseconds.
|
||||
Weight::from_parts(7_897_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 0))
|
||||
}
|
||||
/// Storage: `PolkadotXcm::SupportedVersion` (r:0 w:1)
|
||||
@@ -198,8 +198,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 6_439_000 picoseconds.
|
||||
Weight::from_parts(6_711_000, 0)
|
||||
// Minimum execution time: 6_224_000 picoseconds.
|
||||
Weight::from_parts(6_793_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 0))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
@@ -209,8 +209,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 1_982_000 picoseconds.
|
||||
Weight::from_parts(2_260_000, 0)
|
||||
// Minimum execution time: 1_812_000 picoseconds.
|
||||
Weight::from_parts(2_008_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 0))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
@@ -236,8 +236,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `145`
|
||||
// Estimated: `3610`
|
||||
// Minimum execution time: 27_120_000 picoseconds.
|
||||
Weight::from_parts(28_048_000, 0)
|
||||
// Minimum execution time: 26_586_000 picoseconds.
|
||||
Weight::from_parts(27_181_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 3610))
|
||||
.saturating_add(T::DbWeight::get().reads(8))
|
||||
.saturating_add(T::DbWeight::get().writes(5))
|
||||
@@ -262,8 +262,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `363`
|
||||
// Estimated: `3828`
|
||||
// Minimum execution time: 29_354_000 picoseconds.
|
||||
Weight::from_parts(30_205_000, 0)
|
||||
// Minimum execution time: 28_295_000 picoseconds.
|
||||
Weight::from_parts(29_280_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 3828))
|
||||
.saturating_add(T::DbWeight::get().reads(7))
|
||||
.saturating_add(T::DbWeight::get().writes(4))
|
||||
@@ -274,8 +274,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `0`
|
||||
// Estimated: `0`
|
||||
// Minimum execution time: 1_926_000 picoseconds.
|
||||
Weight::from_parts(2_013_000, 0)
|
||||
// Minimum execution time: 1_803_000 picoseconds.
|
||||
Weight::from_parts(1_876_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 0))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
@@ -285,8 +285,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `159`
|
||||
// Estimated: `13524`
|
||||
// Minimum execution time: 18_611_000 picoseconds.
|
||||
Weight::from_parts(19_120_000, 0)
|
||||
// Minimum execution time: 18_946_000 picoseconds.
|
||||
Weight::from_parts(19_456_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 13524))
|
||||
.saturating_add(T::DbWeight::get().reads(5))
|
||||
.saturating_add(T::DbWeight::get().writes(2))
|
||||
@@ -297,8 +297,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `163`
|
||||
// Estimated: `13528`
|
||||
// Minimum execution time: 18_373_000 picoseconds.
|
||||
Weight::from_parts(18_945_000, 0)
|
||||
// Minimum execution time: 19_080_000 picoseconds.
|
||||
Weight::from_parts(19_498_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 13528))
|
||||
.saturating_add(T::DbWeight::get().reads(5))
|
||||
.saturating_add(T::DbWeight::get().writes(2))
|
||||
@@ -309,8 +309,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `173`
|
||||
// Estimated: `16013`
|
||||
// Minimum execution time: 20_459_000 picoseconds.
|
||||
Weight::from_parts(20_951_000, 0)
|
||||
// Minimum execution time: 20_637_000 picoseconds.
|
||||
Weight::from_parts(21_388_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 16013))
|
||||
.saturating_add(T::DbWeight::get().reads(6))
|
||||
}
|
||||
@@ -332,8 +332,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `212`
|
||||
// Estimated: `6152`
|
||||
// Minimum execution time: 26_003_000 picoseconds.
|
||||
Weight::from_parts(26_678_000, 0)
|
||||
// Minimum execution time: 25_701_000 picoseconds.
|
||||
Weight::from_parts(26_269_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 6152))
|
||||
.saturating_add(T::DbWeight::get().reads(8))
|
||||
.saturating_add(T::DbWeight::get().writes(3))
|
||||
@@ -344,8 +344,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `206`
|
||||
// Estimated: `11096`
|
||||
// Minimum execution time: 11_557_000 picoseconds.
|
||||
Weight::from_parts(11_868_000, 0)
|
||||
// Minimum execution time: 11_949_000 picoseconds.
|
||||
Weight::from_parts(12_249_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 11096))
|
||||
.saturating_add(T::DbWeight::get().reads(4))
|
||||
}
|
||||
@@ -355,8 +355,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `170`
|
||||
// Estimated: `13535`
|
||||
// Minimum execution time: 18_710_000 picoseconds.
|
||||
Weight::from_parts(19_240_000, 0)
|
||||
// Minimum execution time: 19_278_000 picoseconds.
|
||||
Weight::from_parts(19_538_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 13535))
|
||||
.saturating_add(T::DbWeight::get().reads(5))
|
||||
.saturating_add(T::DbWeight::get().writes(2))
|
||||
@@ -379,8 +379,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `212`
|
||||
// Estimated: `13577`
|
||||
// Minimum execution time: 34_393_000 picoseconds.
|
||||
Weight::from_parts(35_138_000, 0)
|
||||
// Minimum execution time: 35_098_000 picoseconds.
|
||||
Weight::from_parts(35_871_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 13577))
|
||||
.saturating_add(T::DbWeight::get().reads(11))
|
||||
.saturating_add(T::DbWeight::get().writes(4))
|
||||
@@ -393,8 +393,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `103`
|
||||
// Estimated: `1588`
|
||||
// Minimum execution time: 4_043_000 picoseconds.
|
||||
Weight::from_parts(4_216_000, 0)
|
||||
// Minimum execution time: 3_862_000 picoseconds.
|
||||
Weight::from_parts(4_082_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 1588))
|
||||
.saturating_add(T::DbWeight::get().reads(1))
|
||||
.saturating_add(T::DbWeight::get().writes(2))
|
||||
@@ -405,8 +405,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `7740`
|
||||
// Estimated: `11205`
|
||||
// Minimum execution time: 25_410_000 picoseconds.
|
||||
Weight::from_parts(26_019_000, 0)
|
||||
// Minimum execution time: 25_423_000 picoseconds.
|
||||
Weight::from_parts(25_872_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 11205))
|
||||
.saturating_add(T::DbWeight::get().reads(1))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
@@ -417,8 +417,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `160`
|
||||
// Estimated: `3625`
|
||||
// Minimum execution time: 38_850_000 picoseconds.
|
||||
Weight::from_parts(39_593_000, 0)
|
||||
// Minimum execution time: 37_148_000 picoseconds.
|
||||
Weight::from_parts(37_709_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 3625))
|
||||
.saturating_add(T::DbWeight::get().reads(1))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
|
||||
@@ -425,12 +425,13 @@ impl<
|
||||
}
|
||||
|
||||
// do teleport
|
||||
<pallet_xcm::Pallet<Runtime>>::teleport_assets(
|
||||
<pallet_xcm::Pallet<Runtime>>::limited_teleport_assets(
|
||||
origin,
|
||||
Box::new(dest.into()),
|
||||
Box::new(beneficiary.into()),
|
||||
Box::new((AssetId(asset), amount).into()),
|
||||
0,
|
||||
Unlimited,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,11 +54,12 @@ fn sanity_check_teleport_assets_weight() {
|
||||
// Usually when XCM runs into an issue, it will return a weight of `Weight::MAX`,
|
||||
// so this test will certainly ensure that this problem does not occur.
|
||||
use frame_support::dispatch::GetDispatchInfo;
|
||||
let weight = pallet_xcm::Call::<Runtime>::teleport_assets {
|
||||
let weight = pallet_xcm::Call::<Runtime>::limited_teleport_assets {
|
||||
dest: Box::new(Here.into()),
|
||||
beneficiary: Box::new(Here.into()),
|
||||
assets: Box::new((Here, 200_000).into()),
|
||||
fee_asset_item: 0,
|
||||
weight_limit: Unlimited,
|
||||
}
|
||||
.get_dispatch_info()
|
||||
.weight;
|
||||
|
||||
@@ -940,13 +940,12 @@ pub mod pallet {
|
||||
}
|
||||
}
|
||||
|
||||
#[pallet::call]
|
||||
#[pallet::call(weight(<T as Config>::WeightInfo))]
|
||||
impl<T: Config> Pallet<T> {
|
||||
/// WARNING: DEPRECATED. `send` will be removed after June 2024. Use `send_blob` instead.
|
||||
#[allow(deprecated)]
|
||||
#[deprecated(note = "`send` will be removed after June 2024. Use `send_blob` instead.")]
|
||||
#[pallet::call_index(0)]
|
||||
#[pallet::weight(T::WeightInfo::send())]
|
||||
pub fn send(
|
||||
origin: OriginFor<T>,
|
||||
dest: Box<VersionedLocation>,
|
||||
@@ -976,23 +975,10 @@ pub mod pallet {
|
||||
/// - `fee_asset_item`: The index into `assets` of the item which should be used to pay
|
||||
/// fees.
|
||||
#[pallet::call_index(1)]
|
||||
#[pallet::weight({
|
||||
let maybe_assets: Result<Assets, ()> = (*assets.clone()).try_into();
|
||||
let maybe_dest: Result<Location, ()> = (*dest.clone()).try_into();
|
||||
match (maybe_assets, maybe_dest) {
|
||||
(Ok(assets), Ok(dest)) => {
|
||||
use sp_std::vec;
|
||||
let count = assets.len() as u32;
|
||||
let mut message = Xcm(vec![
|
||||
WithdrawAsset(assets),
|
||||
SetFeesMode { jit_withdraw: true },
|
||||
InitiateTeleport { assets: Wild(AllCounted(count)), dest, xcm: Xcm(vec![]) },
|
||||
]);
|
||||
T::Weigher::weight(&mut message).map_or(Weight::MAX, |w| T::WeightInfo::teleport_assets().saturating_add(w))
|
||||
}
|
||||
_ => Weight::MAX,
|
||||
}
|
||||
})]
|
||||
#[allow(deprecated)]
|
||||
#[deprecated(
|
||||
note = "This extrinsic uses `WeightLimit::Unlimited`, please migrate to `limited_teleport_assets` or `transfer_assets`"
|
||||
)]
|
||||
pub fn teleport_assets(
|
||||
origin: OriginFor<T>,
|
||||
dest: Box<VersionedLocation>,
|
||||
@@ -1034,23 +1020,10 @@ pub mod pallet {
|
||||
/// - `fee_asset_item`: The index into `assets` of the item which should be used to pay
|
||||
/// fees.
|
||||
#[pallet::call_index(2)]
|
||||
#[pallet::weight({
|
||||
let maybe_assets: Result<Assets, ()> = (*assets.clone()).try_into();
|
||||
let maybe_dest: Result<Location, ()> = (*dest.clone()).try_into();
|
||||
match (maybe_assets, maybe_dest) {
|
||||
(Ok(assets), Ok(dest)) => {
|
||||
use sp_std::vec;
|
||||
// heaviest version of locally executed XCM program: equivalent in weight to
|
||||
// transfer assets to SA, reanchor them, extend XCM program, and send onward XCM
|
||||
let mut message = Xcm(vec![
|
||||
SetFeesMode { jit_withdraw: true },
|
||||
TransferReserveAsset { assets, dest, xcm: Xcm(vec![]) }
|
||||
]);
|
||||
T::Weigher::weight(&mut message).map_or(Weight::MAX, |w| T::WeightInfo::reserve_transfer_assets().saturating_add(w))
|
||||
}
|
||||
_ => Weight::MAX,
|
||||
}
|
||||
})]
|
||||
#[allow(deprecated)]
|
||||
#[deprecated(
|
||||
note = "This extrinsic uses `WeightLimit::Unlimited`, please migrate to `limited_reserve_transfer_assets` or `transfer_assets`"
|
||||
)]
|
||||
pub fn reserve_transfer_assets(
|
||||
origin: OriginFor<T>,
|
||||
dest: Box<VersionedLocation>,
|
||||
@@ -1102,7 +1075,6 @@ pub mod pallet {
|
||||
/// - `location`: The destination that is being described.
|
||||
/// - `xcm_version`: The latest version of XCM that `location` supports.
|
||||
#[pallet::call_index(4)]
|
||||
#[pallet::weight(T::WeightInfo::force_xcm_version())]
|
||||
pub fn force_xcm_version(
|
||||
origin: OriginFor<T>,
|
||||
location: Box<Location>,
|
||||
@@ -1121,7 +1093,6 @@ pub mod pallet {
|
||||
/// - `origin`: Must be an origin specified by AdminOrigin.
|
||||
/// - `maybe_xcm_version`: The default XCM encoding version, or `None` to disable.
|
||||
#[pallet::call_index(5)]
|
||||
#[pallet::weight(T::WeightInfo::force_default_xcm_version())]
|
||||
pub fn force_default_xcm_version(
|
||||
origin: OriginFor<T>,
|
||||
maybe_xcm_version: Option<XcmVersion>,
|
||||
@@ -1136,7 +1107,6 @@ pub mod pallet {
|
||||
/// - `origin`: Must be an origin specified by AdminOrigin.
|
||||
/// - `location`: The location to which we should subscribe for XCM version notifications.
|
||||
#[pallet::call_index(6)]
|
||||
#[pallet::weight(T::WeightInfo::force_subscribe_version_notify())]
|
||||
pub fn force_subscribe_version_notify(
|
||||
origin: OriginFor<T>,
|
||||
location: Box<VersionedLocation>,
|
||||
@@ -1160,7 +1130,6 @@ pub mod pallet {
|
||||
/// - `location`: The location to which we are currently subscribed for XCM version
|
||||
/// notifications which we no longer desire.
|
||||
#[pallet::call_index(7)]
|
||||
#[pallet::weight(T::WeightInfo::force_unsubscribe_version_notify())]
|
||||
pub fn force_unsubscribe_version_notify(
|
||||
origin: OriginFor<T>,
|
||||
location: Box<VersionedLocation>,
|
||||
@@ -1193,7 +1162,7 @@ pub mod pallet {
|
||||
///
|
||||
/// Fee payment on the destination side is made from the asset in the `assets` vector of
|
||||
/// index `fee_asset_item`, up to enough to pay for `weight_limit` of weight. If more weight
|
||||
/// is needed than `weight_limit`, then the operation will fail and the assets send may be
|
||||
/// is needed than `weight_limit`, then the operation will fail and the sent assets may be
|
||||
/// at risk.
|
||||
///
|
||||
/// - `origin`: Must be capable of withdrawing the `assets` and executing XCM.
|
||||
@@ -1208,23 +1177,7 @@ pub mod pallet {
|
||||
/// fees.
|
||||
/// - `weight_limit`: The remote-side weight limit, if any, for the XCM fee purchase.
|
||||
#[pallet::call_index(8)]
|
||||
#[pallet::weight({
|
||||
let maybe_assets: Result<Assets, ()> = (*assets.clone()).try_into();
|
||||
let maybe_dest: Result<Location, ()> = (*dest.clone()).try_into();
|
||||
match (maybe_assets, maybe_dest) {
|
||||
(Ok(assets), Ok(dest)) => {
|
||||
use sp_std::vec;
|
||||
// heaviest version of locally executed XCM program: equivalent in weight to
|
||||
// transfer assets to SA, reanchor them, extend XCM program, and send onward XCM
|
||||
let mut message = Xcm(vec![
|
||||
SetFeesMode { jit_withdraw: true },
|
||||
TransferReserveAsset { assets, dest, xcm: Xcm(vec![]) }
|
||||
]);
|
||||
T::Weigher::weight(&mut message).map_or(Weight::MAX, |w| T::WeightInfo::reserve_transfer_assets().saturating_add(w))
|
||||
}
|
||||
_ => Weight::MAX,
|
||||
}
|
||||
})]
|
||||
#[pallet::weight(T::WeightInfo::reserve_transfer_assets())]
|
||||
pub fn limited_reserve_transfer_assets(
|
||||
origin: OriginFor<T>,
|
||||
dest: Box<VersionedLocation>,
|
||||
@@ -1247,7 +1200,7 @@ pub mod pallet {
|
||||
///
|
||||
/// Fee payment on the destination side is made from the asset in the `assets` vector of
|
||||
/// index `fee_asset_item`, up to enough to pay for `weight_limit` of weight. If more weight
|
||||
/// is needed than `weight_limit`, then the operation will fail and the assets send may be
|
||||
/// is needed than `weight_limit`, then the operation will fail and the sent assets may be
|
||||
/// at risk.
|
||||
///
|
||||
/// - `origin`: Must be capable of withdrawing the `assets` and executing XCM.
|
||||
@@ -1262,23 +1215,7 @@ pub mod pallet {
|
||||
/// fees.
|
||||
/// - `weight_limit`: The remote-side weight limit, if any, for the XCM fee purchase.
|
||||
#[pallet::call_index(9)]
|
||||
#[pallet::weight({
|
||||
let maybe_assets: Result<Assets, ()> = (*assets.clone()).try_into();
|
||||
let maybe_dest: Result<Location, ()> = (*dest.clone()).try_into();
|
||||
match (maybe_assets, maybe_dest) {
|
||||
(Ok(assets), Ok(dest)) => {
|
||||
use sp_std::vec;
|
||||
let count = assets.len() as u32;
|
||||
let mut message = Xcm(vec![
|
||||
WithdrawAsset(assets),
|
||||
SetFeesMode { jit_withdraw: true },
|
||||
InitiateTeleport { assets: Wild(AllCounted(count)), dest, xcm: Xcm(vec![]) },
|
||||
]);
|
||||
T::Weigher::weight(&mut message).map_or(Weight::MAX, |w| T::WeightInfo::teleport_assets().saturating_add(w))
|
||||
}
|
||||
_ => Weight::MAX,
|
||||
}
|
||||
})]
|
||||
#[pallet::weight(T::WeightInfo::teleport_assets())]
|
||||
pub fn limited_teleport_assets(
|
||||
origin: OriginFor<T>,
|
||||
dest: Box<VersionedLocation>,
|
||||
@@ -1302,7 +1239,6 @@ pub mod pallet {
|
||||
/// - `origin`: Must be an origin specified by AdminOrigin.
|
||||
/// - `suspended`: `true` to suspend, `false` to resume.
|
||||
#[pallet::call_index(10)]
|
||||
#[pallet::weight(T::WeightInfo::force_suspension())]
|
||||
pub fn force_suspension(origin: OriginFor<T>, suspended: bool) -> DispatchResult {
|
||||
T::AdminOrigin::ensure_origin(origin)?;
|
||||
XcmExecutionSuspended::<T>::set(suspended);
|
||||
@@ -1315,7 +1251,7 @@ pub mod pallet {
|
||||
/// Fee payment on the destination side is made from the asset in the `assets` vector of
|
||||
/// index `fee_asset_item` (hence referred to as `fees`), up to enough to pay for
|
||||
/// `weight_limit` of weight. If more weight is needed than `weight_limit`, then the
|
||||
/// operation will fail and the assets sent may be at risk.
|
||||
/// operation will fail and the sent assets may be at risk.
|
||||
///
|
||||
/// `assets` (excluding `fees`) must have same reserve location or otherwise be teleportable
|
||||
/// to `dest`, no limitations imposed on `fees`.
|
||||
@@ -1343,26 +1279,6 @@ pub mod pallet {
|
||||
/// fees.
|
||||
/// - `weight_limit`: The remote-side weight limit, if any, for the XCM fee purchase.
|
||||
#[pallet::call_index(11)]
|
||||
#[pallet::weight({
|
||||
let maybe_assets: Result<Assets, ()> = (*assets.clone()).try_into();
|
||||
let maybe_dest: Result<Location, ()> = (*dest.clone()).try_into();
|
||||
match (maybe_assets, maybe_dest) {
|
||||
(Ok(assets), Ok(dest)) => {
|
||||
use sp_std::vec;
|
||||
// heaviest version of locally executed XCM program: equivalent in weight to withdrawing fees,
|
||||
// burning them, transferring rest of assets to SA, reanchoring them, extending XCM program,
|
||||
// and sending onward XCM
|
||||
let mut message = Xcm(vec![
|
||||
SetFeesMode { jit_withdraw: true },
|
||||
WithdrawAsset(assets.clone()),
|
||||
BurnAsset(assets.clone()),
|
||||
TransferReserveAsset { assets, dest, xcm: Xcm(vec![]) }
|
||||
]);
|
||||
T::Weigher::weight(&mut message).map_or(Weight::MAX, |w| T::WeightInfo::transfer_assets().saturating_add(w))
|
||||
}
|
||||
_ => Weight::MAX,
|
||||
}
|
||||
})]
|
||||
pub fn transfer_assets(
|
||||
origin: OriginFor<T>,
|
||||
dest: Box<VersionedLocation>,
|
||||
@@ -1452,22 +1368,6 @@ pub mod pallet {
|
||||
/// was the latest when they were trapped.
|
||||
/// - `beneficiary`: The location/account where the claimed assets will be deposited.
|
||||
#[pallet::call_index(12)]
|
||||
#[pallet::weight({
|
||||
let assets_version = assets.identify_version();
|
||||
let maybe_assets: Result<Assets, ()> = (*assets.clone()).try_into();
|
||||
let maybe_beneficiary: Result<Location, ()> = (*beneficiary.clone()).try_into();
|
||||
match (maybe_assets, maybe_beneficiary) {
|
||||
(Ok(assets), Ok(beneficiary)) => {
|
||||
let ticket: Location = GeneralIndex(assets_version as u128).into();
|
||||
let mut message = Xcm(vec![
|
||||
ClaimAsset { assets: assets.clone(), ticket },
|
||||
DepositAsset { assets: AllCounted(assets.len() as u32).into(), beneficiary },
|
||||
]);
|
||||
T::Weigher::weight(&mut message).map_or(Weight::MAX, |w| T::WeightInfo::claim_assets().saturating_add(w))
|
||||
}
|
||||
_ => Weight::MAX
|
||||
}
|
||||
})]
|
||||
pub fn claim_assets(
|
||||
origin: OriginFor<T>,
|
||||
assets: Box<VersionedAssets>,
|
||||
@@ -1514,7 +1414,7 @@ pub mod pallet {
|
||||
///
|
||||
/// The message is passed in encoded. It needs to be decodable as a [`VersionedXcm`].
|
||||
#[pallet::call_index(13)]
|
||||
#[pallet::weight(T::WeightInfo::execute_blob())]
|
||||
#[pallet::weight(max_weight.saturating_add(T::WeightInfo::execute_blob()))]
|
||||
pub fn execute_blob(
|
||||
origin: OriginFor<T>,
|
||||
encoded_message: BoundedVec<u8, MaxXcmEncodedSize>,
|
||||
@@ -1535,7 +1435,6 @@ pub mod pallet {
|
||||
///
|
||||
/// The message is passed in encoded. It needs to be decodable as a [`VersionedXcm`].
|
||||
#[pallet::call_index(14)]
|
||||
#[pallet::weight(T::WeightInfo::send_blob())]
|
||||
pub fn send_blob(
|
||||
origin: OriginFor<T>,
|
||||
dest: Box<VersionedLocation>,
|
||||
|
||||
@@ -31,13 +31,17 @@ use sp_runtime::{traits::AccountIdConversion, DispatchError, ModuleError};
|
||||
use xcm::prelude::*;
|
||||
use xcm_executor::traits::ConvertLocation;
|
||||
|
||||
// Helper function to deduplicate testing different teleport types.
|
||||
fn do_test_and_verify_teleport_assets<Call: FnOnce()>(
|
||||
origin_location: Location,
|
||||
expected_beneficiary: Location,
|
||||
call: Call,
|
||||
expected_weight_limit: WeightLimit,
|
||||
) {
|
||||
/// Test `limited_teleport_assets`
|
||||
///
|
||||
/// Asserts that the sender's balance is decreased as a result of execution of
|
||||
/// local effects.
|
||||
#[test]
|
||||
fn limited_teleport_assets_works() {
|
||||
let origin_location: Location = AccountId32 { network: None, id: ALICE.into() }.into();
|
||||
let expected_beneficiary: Location = AccountId32 { network: None, id: BOB.into() }.into();
|
||||
let weight_limit = WeightLimit::Limited(Weight::from_parts(5000, 5000));
|
||||
let expected_weight_limit = weight_limit.clone();
|
||||
|
||||
let balances = vec![
|
||||
(ALICE, INITIAL_BALANCE),
|
||||
(ParaId::from(OTHER_PARA_ID).into_account_truncating(), INITIAL_BALANCE),
|
||||
@@ -47,7 +51,14 @@ fn do_test_and_verify_teleport_assets<Call: FnOnce()>(
|
||||
let weight = BaseXcmWeight::get() * 2;
|
||||
assert_eq!(Balances::total_balance(&ALICE), INITIAL_BALANCE);
|
||||
// call extrinsic
|
||||
call();
|
||||
assert_ok!(XcmPallet::limited_teleport_assets(
|
||||
RuntimeOrigin::signed(ALICE),
|
||||
Box::new(RelayLocation::get().into()),
|
||||
Box::new(expected_beneficiary.clone().into()),
|
||||
Box::new((Here, SEND_AMOUNT).into()),
|
||||
0,
|
||||
weight_limit,
|
||||
));
|
||||
assert_eq!(Balances::total_balance(&ALICE), INITIAL_BALANCE - SEND_AMOUNT);
|
||||
assert_eq!(
|
||||
sent_xcm(),
|
||||
@@ -88,57 +99,6 @@ fn do_test_and_verify_teleport_assets<Call: FnOnce()>(
|
||||
});
|
||||
}
|
||||
|
||||
/// Test `teleport_assets`
|
||||
///
|
||||
/// Asserts that the sender's balance is decreased as a result of execution of
|
||||
/// local effects.
|
||||
#[test]
|
||||
fn teleport_assets_works() {
|
||||
let origin_location: Location = AccountId32 { network: None, id: ALICE.into() }.into();
|
||||
let beneficiary: Location = AccountId32 { network: None, id: BOB.into() }.into();
|
||||
do_test_and_verify_teleport_assets(
|
||||
origin_location.clone(),
|
||||
beneficiary.clone(),
|
||||
|| {
|
||||
assert_ok!(XcmPallet::teleport_assets(
|
||||
RuntimeOrigin::signed(ALICE),
|
||||
Box::new(RelayLocation::get().into()),
|
||||
Box::new(beneficiary.into()),
|
||||
Box::new((Here, SEND_AMOUNT).into()),
|
||||
0,
|
||||
));
|
||||
},
|
||||
Unlimited,
|
||||
);
|
||||
}
|
||||
|
||||
/// Test `limited_teleport_assets`
|
||||
///
|
||||
/// Asserts that the sender's balance is decreased as a result of execution of
|
||||
/// local effects.
|
||||
#[test]
|
||||
fn limited_teleport_assets_works() {
|
||||
let origin_location: Location = AccountId32 { network: None, id: ALICE.into() }.into();
|
||||
let beneficiary: Location = AccountId32 { network: None, id: BOB.into() }.into();
|
||||
let weight_limit = WeightLimit::Limited(Weight::from_parts(5000, 5000));
|
||||
let expected_weight_limit = weight_limit.clone();
|
||||
do_test_and_verify_teleport_assets(
|
||||
origin_location.clone(),
|
||||
beneficiary.clone(),
|
||||
|| {
|
||||
assert_ok!(XcmPallet::limited_teleport_assets(
|
||||
RuntimeOrigin::signed(ALICE),
|
||||
Box::new(RelayLocation::get().into()),
|
||||
Box::new(beneficiary.into()),
|
||||
Box::new((Here, SEND_AMOUNT).into()),
|
||||
0,
|
||||
weight_limit,
|
||||
));
|
||||
},
|
||||
expected_weight_limit,
|
||||
);
|
||||
}
|
||||
|
||||
/// `limited_teleport_assets` should fail for filtered assets
|
||||
#[test]
|
||||
fn limited_teleport_filtered_assets_disallowed() {
|
||||
@@ -184,12 +144,13 @@ fn reserve_transfer_assets_with_paid_router_works() {
|
||||
let dest: Location =
|
||||
Junction::AccountId32 { network: None, id: user_account.clone().into() }.into();
|
||||
assert_eq!(Balances::total_balance(&user_account), INITIAL_BALANCE);
|
||||
assert_ok!(XcmPallet::reserve_transfer_assets(
|
||||
assert_ok!(XcmPallet::limited_reserve_transfer_assets(
|
||||
RuntimeOrigin::signed(user_account.clone()),
|
||||
Box::new(Parachain(paid_para_id).into()),
|
||||
Box::new(dest.clone().into()),
|
||||
Box::new((Here, SEND_AMOUNT).into()),
|
||||
0,
|
||||
Unlimited,
|
||||
));
|
||||
|
||||
// XCM_FEES_NOT_WAIVED_USER_ACCOUNT spent amount
|
||||
|
||||
@@ -250,12 +250,13 @@ mod tests {
|
||||
let withdraw_amount = 123;
|
||||
|
||||
Relay::execute_with(|| {
|
||||
assert_ok!(RelayChainPalletXcm::reserve_transfer_assets(
|
||||
assert_ok!(RelayChainPalletXcm::limited_reserve_transfer_assets(
|
||||
relay_chain::RuntimeOrigin::signed(ALICE),
|
||||
Box::new(Parachain(1).into()),
|
||||
Box::new(AccountId32 { network: None, id: ALICE.into() }.into()),
|
||||
Box::new((Here, withdraw_amount).into()),
|
||||
0,
|
||||
Unlimited,
|
||||
));
|
||||
assert_eq!(
|
||||
relay_chain::Balances::free_balance(&child_account_id(1)),
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
title: "pallet-xcm: deprecate transfer extrinsics without weight limit"
|
||||
|
||||
doc:
|
||||
- audience: Runtime Dev
|
||||
description: |
|
||||
pallet-xcm's extrinsics `teleport_assets` and `reserve_transfer_assets` have been
|
||||
marked as deprecated. Please change their usage to the `limited_teleport_assets`
|
||||
and `limited_reserve_transfer_assets`, respectively; or use the generic/flexible
|
||||
`transfer_assets` extrinsic.
|
||||
|
||||
crates:
|
||||
- name: pallet-xcm
|
||||
bump: minor
|
||||
Reference in New Issue
Block a user