mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-31 01:41:03 +00:00
Implement AliasOrigin processing in XCVM (#7245)
* Implement AliasOrigin processing in XCVM * add builder types and first test * switch to more general builder types * clone target for RemovePrefixAccountId32 * change builder types * change AliasForeignAccountId32 and add test for AliasCase * add Aliasers type to xcm configs * add benchmark * benchmark fix * add benchmark function for runtimes * fix alias_origin result types * fix benchmark test * add runtime-benchmarks feature in pallet-xcm-benchmarks * fmt * remove AliasCase, add test and fmt * address feedback * ".git/.scripts/commands/bench/bench.sh" xcm kusama pallet_xcm_benchmarks::generic * ".git/.scripts/commands/bench/bench.sh" xcm westend pallet_xcm_benchmarks::generic * ".git/.scripts/commands/bench/bench.sh" xcm rococo pallet_xcm_benchmarks::generic * address feedback * lock * ".git/.scripts/commands/bench/bench.sh" xcm kusama pallet_xcm_benchmarks::generic * ".git/.scripts/commands/bench/bench.sh" xcm westend pallet_xcm_benchmarks::generic * ".git/.scripts/commands/bench/bench.sh" xcm rococo pallet_xcm_benchmarks::generic * change doc * fmt --------- Co-authored-by: Just van Stam <just.van.stam@gmail.com> Co-authored-by: Just van Stam <vstam1@users.noreply.github.com> Co-authored-by: command-bot <>
This commit is contained in:
@@ -159,6 +159,7 @@ impl xcm_executor::Config for XcmConfig {
|
||||
type UniversalAliases = Nothing;
|
||||
type CallDispatcher = RuntimeCall;
|
||||
type SafeCallFilter = Everything;
|
||||
type Aliasers = Nothing;
|
||||
}
|
||||
|
||||
impl crate::Config for Test {
|
||||
|
||||
@@ -634,6 +634,19 @@ benchmarks! {
|
||||
executor.bench_process(xcm)?;
|
||||
}
|
||||
|
||||
alias_origin {
|
||||
let (origin, target) = T::alias_origin().map_err(|_| BenchmarkError::Skip)?;
|
||||
|
||||
let mut executor = new_executor::<T>(origin);
|
||||
|
||||
let instruction = Instruction::AliasOrigin(target.clone());
|
||||
let xcm = Xcm(vec![instruction]);
|
||||
}: {
|
||||
executor.bench_process(xcm)?;
|
||||
} verify {
|
||||
assert_eq!(executor.origin(), &Some(target));
|
||||
}
|
||||
|
||||
impl_benchmark_test_suite!(
|
||||
Pallet,
|
||||
crate::generic::mock::new_test_ext(),
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
use crate::{generic, mock::*, *};
|
||||
use codec::Decode;
|
||||
use frame_support::{
|
||||
parameter_types,
|
||||
match_types, parameter_types,
|
||||
traits::{Everything, OriginTrait},
|
||||
weights::Weight,
|
||||
};
|
||||
@@ -33,7 +33,7 @@ use xcm_builder::{
|
||||
Assets, TestAssetExchanger, TestAssetLocker, TestAssetTrap, TestSubscriptionService,
|
||||
TestUniversalAliases,
|
||||
},
|
||||
AllowUnpaidExecutionFrom,
|
||||
AliasForeignAccountId32, AllowUnpaidExecutionFrom,
|
||||
};
|
||||
use xcm_executor::traits::ConvertOrigin;
|
||||
|
||||
@@ -105,6 +105,13 @@ parameter_types! {
|
||||
pub const MaxAssetsIntoHolding: u32 = 64;
|
||||
}
|
||||
|
||||
match_types! {
|
||||
pub type OnlyParachains: impl Contains<MultiLocation> = {
|
||||
MultiLocation { parents: 0, interior: X1(Parachain(_)) }
|
||||
};
|
||||
}
|
||||
|
||||
type Aliasers = AliasForeignAccountId32<OnlyParachains>;
|
||||
pub struct XcmConfig;
|
||||
impl xcm_executor::Config for XcmConfig {
|
||||
type RuntimeCall = RuntimeCall;
|
||||
@@ -131,6 +138,7 @@ impl xcm_executor::Config for XcmConfig {
|
||||
type UniversalAliases = TestUniversalAliases;
|
||||
type CallDispatcher = RuntimeCall;
|
||||
type SafeCallFilter = Everything;
|
||||
type Aliasers = Aliasers;
|
||||
}
|
||||
|
||||
impl crate::Config for Test {
|
||||
@@ -191,6 +199,13 @@ impl generic::Config for Test {
|
||||
// No MessageExporter in tests
|
||||
Err(BenchmarkError::Skip)
|
||||
}
|
||||
|
||||
fn alias_origin() -> Result<(MultiLocation, MultiLocation), BenchmarkError> {
|
||||
let origin: MultiLocation =
|
||||
(Parachain(1), AccountId32 { network: None, id: [0; 32] }).into();
|
||||
let target: MultiLocation = AccountId32 { network: None, id: [0; 32] }.into();
|
||||
Ok((origin, target))
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "runtime-benchmarks")]
|
||||
|
||||
@@ -80,6 +80,11 @@ pub mod pallet {
|
||||
/// If set to `Err`, benchmarks which rely on `export_message` will be skipped.
|
||||
fn export_message_origin_and_destination(
|
||||
) -> Result<(MultiLocation, NetworkId, InteriorMultiLocation), BenchmarkError>;
|
||||
|
||||
/// A `(MultiLocation, MultiLocation)` that is one of the `Aliasers` configured by the XCM executor.
|
||||
///
|
||||
/// If set to `Err`, benchmarks which rely on a universal alias will be skipped.
|
||||
fn alias_origin() -> Result<(MultiLocation, MultiLocation), BenchmarkError>;
|
||||
}
|
||||
|
||||
#[pallet::pallet]
|
||||
|
||||
Reference in New Issue
Block a user