mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-30 04:41:03 +00:00
af46f4b41e
* add foreign assets to westmint * add foreign assets to statemine * use updated api for ensure origin trait * Assets/ForeignAssets tests and fixes (#2167) * Test for create and transfer `TrustBackedAssets` with AssetTransactor * Test for transfer `local Currency` with AssetTransactor * Test for create foreign assets (covers foreign relaychain currency) * Added `ForeignFungiblesTransactor` and test for transfer `ForeignAssets` with AssetTransactor * Removed unused `pub const Local: MultiLocation` * Changed `ParaId -> Sibling` for `SiblingParachainConvertsVia` * Test for create foreign assets (covers local sibling parachain assets) * Reverted stuff for ForeignCreators from different global consensus (moved to transfer asset branch) * Refactor `weight_limit` for `execute_xcm` * Added test for `set_metadata` by ForeignCreator with `xcm::Transact(set_metadata)` * Renamed `receive_teleported_asset_works` -> `receive_teleported_asset_for_native_asset_works` * Allow `ForeignCreators` only for sibling parachains * Unify ReservedDmpWeight/ReservedXcmpWeight usage * Removed hack - replaced with `MatchedConvertedConcreteId` * Refactor `ForeignCreators` to assets-common * Add `ReceiveTeleportedAsset` test * Change test - `Utility::batch` -> Multiple `xcm::Transact` * Reusing the same deposits as for TrustBackedAssets * missing `try_successful_origin` ? * Finished `ForeignAssets` for westmint (converter, FungiblesApi, tests) * Refactoring tests - receive_teleported_asset_for_native_asset_works * ForeignAssets for statemine + refactored `receive_teleported_asset_from_foreign_creator_works` * Add `ForeignAssets` to statemine `FungiblesApi` * Add `asset_transactor_transfer_with_local_consensus_currency_works` to all runtimes * Added `asset_transactor_transfer_with_trust_backed_assets_works` test * Added `asset_transactor_transfer_with_foreign_assets_works` * Fix `missing `try_successful_origin` in implementation` * Added `create_and_manage_foreign_assets_for_local_consensus_parachain_assets_works` * Added `ExpectTransactStatus` check * Small rename * Extended `test_assets_balances_api_works` with ForeignAssets for `statemine` * PR fixes * Update parachains/runtimes/assets/test-utils/src/test_cases.rs --------- Co-authored-by: parity-processbot <> Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com> * Added `StartsWithExplicitGlobalConsensus` to ignores (#2338) * Update parachains/runtimes/assets/common/src/lib.rs Co-authored-by: Gavin Wood <gavin@parity.io> * include mint and burn in SafeCallFilter * include mint and burn in SafeCallFilter (statemine) * clarify doc * Fix compilation (moved trait `InspectMetadata`) * Fix test * Extended test for `teleport` from/to relaychain + `CheckingAccount` (Part I) * Extended test for `teleport` from/to foreign parachain + `CheckingAccount` (Part II) * Fixed TODO - `NonLocal` for `ForeignAssets` * Changed `NonLocal` to `NoChecking` * Fix weight in test --------- Co-authored-by: parity-processbot <> Co-authored-by: muharem <ismailov.m.h@gmail.com> Co-authored-by: Branislav Kontur <bkontur@gmail.com> Co-authored-by: Gavin Wood <gavin@parity.io>
92 lines
3.0 KiB
Rust
92 lines
3.0 KiB
Rust
// Copyright (C) 2023 Parity Technologies (UK) Ltd.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
use cumulus_primitives_core::ParaId;
|
|
use frame_support::{
|
|
pallet_prelude::Get,
|
|
traits::{Contains, ContainsPair},
|
|
};
|
|
use xcm::{
|
|
latest::prelude::{MultiAsset, MultiLocation},
|
|
prelude::*,
|
|
};
|
|
|
|
pub struct StartsWith<T>(sp_std::marker::PhantomData<T>);
|
|
impl<Location: Get<MultiLocation>> Contains<MultiLocation> for StartsWith<Location> {
|
|
fn contains(t: &MultiLocation) -> bool {
|
|
t.starts_with(&Location::get())
|
|
}
|
|
}
|
|
|
|
pub struct Equals<T>(sp_std::marker::PhantomData<T>);
|
|
impl<Location: Get<MultiLocation>> Contains<MultiLocation> for Equals<Location> {
|
|
fn contains(t: &MultiLocation) -> bool {
|
|
t == &Location::get()
|
|
}
|
|
}
|
|
|
|
pub struct StartsWithExplicitGlobalConsensus<T>(sp_std::marker::PhantomData<T>);
|
|
impl<Network: Get<NetworkId>> Contains<MultiLocation>
|
|
for StartsWithExplicitGlobalConsensus<Network>
|
|
{
|
|
fn contains(t: &MultiLocation) -> bool {
|
|
match t.interior.global_consensus() {
|
|
Ok(requested_network) if requested_network.eq(&Network::get()) => true,
|
|
_ => false,
|
|
}
|
|
}
|
|
}
|
|
|
|
frame_support::parameter_types! {
|
|
pub LocalMultiLocationPattern: MultiLocation = MultiLocation::new(0, Here);
|
|
pub ParentLocation: MultiLocation = MultiLocation::parent();
|
|
}
|
|
|
|
/// Accepts an asset if it is from the origin.
|
|
pub struct IsForeignConcreteAsset<IsForeign>(sp_std::marker::PhantomData<IsForeign>);
|
|
impl<IsForeign: ContainsPair<MultiLocation, MultiLocation>> ContainsPair<MultiAsset, MultiLocation>
|
|
for IsForeignConcreteAsset<IsForeign>
|
|
{
|
|
fn contains(asset: &MultiAsset, origin: &MultiLocation) -> bool {
|
|
log::trace!(target: "xcm::contains", "IsForeignConcreteAsset asset: {:?}, origin: {:?}", asset, origin);
|
|
matches!(asset.id, Concrete(ref id) if IsForeign::contains(id, &origin))
|
|
}
|
|
}
|
|
|
|
/// Checks if `a` is from sibling location `b`. Checks that `MultiLocation-a` starts with
|
|
/// `MultiLocation-b`, and that the `ParaId` of `b` is not equal to `a`.
|
|
pub struct FromSiblingParachain<SelfParaId>(sp_std::marker::PhantomData<SelfParaId>);
|
|
impl<SelfParaId: Get<ParaId>> ContainsPair<MultiLocation, MultiLocation>
|
|
for FromSiblingParachain<SelfParaId>
|
|
{
|
|
fn contains(&a: &MultiLocation, b: &MultiLocation) -> bool {
|
|
// `a` needs to be from `b` at least
|
|
if !a.starts_with(&b) {
|
|
return false
|
|
}
|
|
|
|
// here we check if sibling
|
|
match a {
|
|
MultiLocation { parents: 1, interior } => match interior.first() {
|
|
Some(Parachain(sibling_para_id))
|
|
if sibling_para_id.ne(&u32::from(SelfParaId::get())) =>
|
|
true,
|
|
_ => false,
|
|
},
|
|
_ => false,
|
|
}
|
|
}
|
|
}
|