Remove xcm::v3 from assets-common nits (#4037)

This PR mainly removes `xcm::v3` stuff from `assets-common` to make it
more generic and facilitate the transition to newer XCM versions. Some
of the implementations here used hard-coded `xcm::v3::Location`, but now
it's up to the runtime to configure according to its needs.

Additional/consequent changes:
- `penpal` runtime uses now `xcm::latest::Location` for `pallet_assets`
as `AssetId`, because we don't care about migrations here
- it pretty much simplify xcm-emulator integration tests, where we don't
need now a lots of boilerplate conversions:
      ```
      v3::Location::try_from(...).expect("conversion works")`
      ```
- xcm-emulator tests
- split macro `impl_assets_helpers_for_parachain` to the
`impl_assets_helpers_for_parachain` and
`impl_foreign_assets_helpers_for_parachain` (avoids using hard-coded
`xcm::v3::Location`)
This commit is contained in:
Branislav Kontur
2024-04-12 23:24:09 +02:00
committed by GitHub
parent b28ba4ae96
commit 5601f2865b
35 changed files with 654 additions and 549 deletions
@@ -18,6 +18,8 @@
//! `InteriorLocation` types.
use frame_support::traits::{Contains, Get};
use sp_runtime::traits::MaybeEquivalence;
use sp_std::marker::PhantomData;
use xcm::latest::{InteriorLocation, Location, NetworkId};
/// An implementation of `Contains` that checks for `Location` or
@@ -51,3 +53,18 @@ impl<T: Get<NetworkId>> Contains<InteriorLocation> for StartsWithExplicitGlobalC
matches!(location.global_consensus(), Ok(requested_network) if requested_network.eq(&T::get()))
}
}
/// An adapter implementation of `MaybeEquivalence` which can convert between the latest `Location`
/// and other versions that implement `TryInto<Location>` and `TryFrom<Location>`.
pub struct WithLatestLocationConverter<Target>(PhantomData<Target>);
impl<Target: TryInto<Location> + TryFrom<Location> + Clone> MaybeEquivalence<Location, Target>
for WithLatestLocationConverter<Target>
{
fn convert(old: &Location) -> Option<Target> {
(*old).clone().try_into().ok()
}
fn convert_back(new: &Target) -> Option<Location> {
new.clone().try_into().ok()
}
}