From 5ae285ceffc0dfa8cdb31e84129ee7b527a75974 Mon Sep 17 00:00:00 2001 From: Ilja Khabarov Date: Tue, 23 Aug 2022 10:42:29 +0000 Subject: [PATCH] WIP: upd quartz --- --- a/runtime/common/config/xcm.rs +++ b/runtime/common/config/xcm.rs @@ -358,8 +358,8 @@ #[cfg(feature = "foreign-assets")] pub type AssetTransactors = FungiblesTransactor; -//#[cfg(not(feature = "foreign-assets"))] -//pub type AssetTransactors = LocalAssetTransactor; +#[cfg(not(feature = "foreign-assets"))] +pub type AssetTransactors = LocalAssetTransactor; #[cfg(feature = "foreign-assets")] pub struct AllAsset; @@ -372,15 +372,14 @@ #[cfg(feature = "foreign-assets")] pub type IsReserve = AllAsset; -//#[cfg(not(feature = "foreign-assets"))] -//pub type IsReserve = NativeAsset; +#[cfg(not(feature = "foreign-assets"))] +pub type IsReserve = NativeAsset; #[cfg(feature = "foreign-assets")] type Trader = UsingAnyCurrencyComponents< pallet_configuration::WeightToFee, RelayLocation, AccountId, Balances, ()>; -/* #[cfg(not(feature = "foreign-assets"))] type Trader = UsingOnlySelfCurrencyComponents< pallet_configuration::WeightToFee, @@ -389,7 +388,6 @@ Balances, (), >; -*/ pub struct XcmConfig(PhantomData); impl Config for XcmConfig --- a/runtime/quartz/src/lib.rs +++ b/runtime/quartz/src/lib.rs @@ -35,6 +35,8 @@ #[path = "../../common/mod.rs"] mod runtime_common; +pub mod xcm_config; + pub use runtime_common::*; pub const RUNTIME_NAME: &str = "quartz"; --- /dev/null +++ b/runtime/quartz/src/xcm_config.rs @@ -0,0 +1,109 @@ +// Copyright 2019-2022 Unique Network (Gibraltar) Ltd. +// This file is part of Unique Network. + +// Unique Network is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Unique Network is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Unique Network. If not, see . + +use cumulus_pallet_xcm; +use frame_support::{ + {match_types, parameter_types, weights::Weight}, + pallet_prelude::Get, + traits::{Contains, Everything, fungibles}, +}; +use frame_system::EnsureRoot; +use orml_traits::{location::AbsoluteReserveProvider, parameter_type_with_key}; +use pallet_xcm::XcmPassthrough; +use polkadot_parachain::primitives::Sibling; +use sp_runtime::traits::{AccountIdConversion, CheckedConversion, Convert, Zero}; +use sp_std::{borrow::Borrow, marker::PhantomData, vec, vec::Vec}; +use xcm::{ + latest::{MultiAsset, Xcm}, + prelude::{Concrete, Fungible as XcmFungible}, + v1::{BodyId, Junction::*, Junctions::*, MultiLocation, NetworkId}, +}; +use xcm_builder::{ + AccountId32Aliases, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, + EnsureXcmOrigin, FixedWeightBounds, FungiblesAdapter, LocationInverter, ParentAsSuperuser, + ParentIsPreset, RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia, + SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, + ConvertedConcreteAssetId, +}; +use xcm_executor::{ + {Config, XcmExecutor}, + traits::{Convert as ConvertXcm, FilterAssetLocation, JustTry, MatchesFungible, ShouldExecute}, +}; + +use up_common::{ + constants::{MAXIMUM_BLOCK_WEIGHT, UNIQUE}, + types::{AccountId, Balance}, +}; + +use crate::{ + Balances, Call, DmpQueue, Event, Origin, ParachainInfo, + ParachainSystem, PolkadotXcm, Runtime, XcmpQueue, +}; +use crate::runtime_common::config::substrate::{TreasuryModuleId, MaxLocks, MaxReserves}; +use crate::runtime_common::config::pallets::TreasuryAccountId; +use crate::runtime_common::config::xcm::*; +use crate::*; + +// Signed version of balance +pub type Amount = i128; + +match_types! { + pub type ParentOrParentsExecutivePlurality: impl Contains = { + MultiLocation { parents: 1, interior: Here } | + MultiLocation { parents: 1, interior: X1(Plurality { id: BodyId::Executive, .. }) } + }; + pub type ParentOrSiblings: impl Contains = { + MultiLocation { parents: 1, interior: Here } | + MultiLocation { parents: 1, interior: X1(_) } + }; +} + +/// Deny executing the XCM if it matches any of the Deny filter regardless of anything else. +/// If it passes the Deny, and matches one of the Allow cases then it is let through. +pub struct DenyThenTry(PhantomData, PhantomData) + where + Deny: ShouldExecute, + Allow: ShouldExecute; + +impl ShouldExecute for DenyThenTry + where + Deny: ShouldExecute, + Allow: ShouldExecute, +{ + fn should_execute( + origin: &MultiLocation, + message: &mut Xcm, + max_weight: Weight, + weight_credit: &mut Weight, + ) -> Result<(), ()> { + Deny::should_execute(origin, message, max_weight, weight_credit)?; + Allow::should_execute(origin, message, max_weight, weight_credit) + } +} + +pub type Barrier = DenyThenTry< + DenyExchangeWithUnknownLocation, + ( + TakeWeightCredit, + AllowTopLevelPaidExecutionFrom, + // Parent and its exec plurality get free execution + AllowUnpaidExecutionFrom, + // Expected responses are OK. + AllowKnownQueryResponses, + // Subscriptions for version tracking are OK. + AllowSubscriptionsFrom, + ), +>; \ No newline at end of file -- gitstuff