difftreelog
refactor move common xcm parts to common
in: master
7 files changed
runtime/common/config/orml.rsdiffbeforeafterboth--- a/runtime/common/config/orml.rs
+++ b/runtime/common/config/orml.rs
@@ -14,19 +14,87 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-use frame_support::parameter_types;
+use frame_support::{
+ parameter_types,
+ traits::{Contains, Everything},
+ weights::Weight,
+};
use frame_system::EnsureSigned;
-use crate::{Runtime, Event, RelayChainBlockNumberProvider};
+use orml_traits::{location::AbsoluteReserveProvider, parameter_type_with_key};
+use sp_runtime::traits::Convert;
+use xcm::v1::{Junction::*, Junctions::*, MultiLocation, NetworkId};
+use xcm_builder::LocationInverter;
+use xcm_executor::XcmExecutor;
+use sp_std::{vec, vec::Vec};
+use pallet_foreing_assets::{CurrencyId, NativeCurrency};
+use crate::{
+ Runtime, Event, RelayChainBlockNumberProvider,
+ runtime_common::config::{
+ xcm::{
+ SelfLocation, Weigher, XcmConfig, Ancestry,
+ xcm_assets::{CurrencyIdConvert},
+ },
+ pallets::TreasuryAccountId,
+ substrate::{MaxLocks, MaxReserves},
+ },
+};
+
use up_common::{
types::{AccountId, Balance},
constants::*,
};
+// Signed version of balance
+pub type Amount = i128;
+
parameter_types! {
pub const MinVestedTransfer: Balance = 10 * UNIQUE;
pub const MaxVestingSchedules: u32 = 28;
+
+ pub const BaseXcmWeight: Weight = 100_000_000; // TODO: recheck this
+ pub const MaxAssetsForTransfer: usize = 2;
+}
+
+parameter_type_with_key! {
+ pub ParachainMinFee: |_location: MultiLocation| -> Option<u128> {
+ Some(100_000_000_000)
+ };
+}
+
+parameter_type_with_key! {
+ pub ExistentialDeposits: |currency_id: CurrencyId| -> Balance {
+ match currency_id {
+ CurrencyId::NativeAssetId(symbol) => match symbol {
+ NativeCurrency::Here => 0,
+ NativeCurrency::Parent=> 0,
+ },
+ _ => 100_000
+ }
+ };
+}
+
+pub fn get_all_module_accounts() -> Vec<AccountId> {
+ vec![TreasuryAccountId::get()]
}
+pub struct DustRemovalWhitelist;
+impl Contains<AccountId> for DustRemovalWhitelist {
+ fn contains(a: &AccountId) -> bool {
+ get_all_module_accounts().contains(a)
+ }
+}
+
+pub struct AccountIdToMultiLocation;
+impl Convert<AccountId, MultiLocation> for AccountIdToMultiLocation {
+ fn convert(account: AccountId) -> MultiLocation {
+ X1(AccountId32 {
+ network: NetworkId::Any,
+ id: account.into(),
+ })
+ .into()
+ }
+}
+
impl orml_vesting::Config for Runtime {
type Event = Event;
type Currency = pallet_balances::Pallet<Runtime>;
@@ -36,3 +104,38 @@
type MaxVestingSchedules = MaxVestingSchedules;
type BlockNumberProvider = RelayChainBlockNumberProvider<Runtime>;
}
+
+impl orml_tokens::Config for Runtime {
+ type Event = Event;
+ type Balance = Balance;
+ type Amount = Amount;
+ type CurrencyId = CurrencyId;
+ type WeightInfo = ();
+ type ExistentialDeposits = ExistentialDeposits;
+ type OnDust = orml_tokens::TransferDust<Runtime, TreasuryAccountId>;
+ type MaxLocks = MaxLocks;
+ type MaxReserves = MaxReserves;
+ // TODO: Add all module accounts
+ type DustRemovalWhitelist = DustRemovalWhitelist;
+ /// The id type for named reserves.
+ type ReserveIdentifier = ();
+ type OnNewTokenAccount = ();
+ type OnKilledTokenAccount = ();
+}
+
+impl orml_xtokens::Config for Runtime {
+ type Event = Event;
+ type Balance = Balance;
+ type CurrencyId = CurrencyId;
+ type CurrencyIdConvert = CurrencyIdConvert;
+ type AccountIdToMultiLocation = AccountIdToMultiLocation;
+ type SelfLocation = SelfLocation;
+ type XcmExecutor = XcmExecutor<XcmConfig<Self>>;
+ type Weigher = Weigher;
+ type BaseXcmWeight = BaseXcmWeight;
+ type LocationInverter = LocationInverter<Ancestry>;
+ type MaxAssetsForTransfer = MaxAssetsForTransfer;
+ type MinXcmFee = ParachainMinFee;
+ type MultiLocationsFilter = Everything;
+ type ReserveProvider = AbsoluteReserveProvider;
+}
runtime/common/config/xcm/foreignassets.rsdiffbeforeafterboth--- a/runtime/common/config/xcm/foreignassets.rs
+++ b/runtime/common/config/xcm/foreignassets.rs
@@ -18,14 +18,14 @@
traits::{Contains, Get, fungibles},
parameter_types,
};
-use sp_runtime::traits::Zero;
+use sp_runtime::traits::{Zero, Convert};
use xcm::v1::{Junction::*, MultiLocation, Junctions::*};
use xcm::latest::MultiAsset;
use xcm_builder::{FungiblesAdapter, ConvertedConcreteAssetId};
use xcm_executor::traits::{Convert as ConvertXcm, JustTry, FilterAssetLocation};
use pallet_foreing_assets::{
AssetIds, AssetIdMapping, XcmForeignAssetIdMapping, NativeCurrency, FreeForAll, TryAsForeing,
- ForeignAssetId,
+ ForeignAssetId, CurrencyId,
};
use sp_std::{borrow::Borrow, marker::PhantomData};
use crate::{Runtime, Balances, ParachainInfo, PolkadotXcm, ForeingAssets};
@@ -158,3 +158,41 @@
Balances,
(),
>;
+
+pub struct CurrencyIdConvert;
+impl Convert<AssetIds, Option<MultiLocation>> for CurrencyIdConvert {
+ fn convert(id: AssetIds) -> Option<MultiLocation> {
+ match id {
+ AssetIds::NativeAssetId(NativeCurrency::Here) => Some(MultiLocation::new(
+ 1,
+ X1(Parachain(ParachainInfo::get().into())),
+ )),
+ AssetIds::NativeAssetId(NativeCurrency::Parent) => Some(MultiLocation::parent()),
+ AssetIds::ForeignAssetId(foreign_asset_id) => {
+ XcmForeignAssetIdMapping::<Runtime>::get_multi_location(foreign_asset_id)
+ }
+ }
+ }
+}
+
+impl Convert<MultiLocation, Option<CurrencyId>> for CurrencyIdConvert {
+ fn convert(location: MultiLocation) -> Option<CurrencyId> {
+ if location == MultiLocation::here()
+ || location == MultiLocation::new(1, X1(Parachain(ParachainInfo::get().into())))
+ {
+ return Some(AssetIds::NativeAssetId(NativeCurrency::Here));
+ }
+
+ if location == MultiLocation::parent() {
+ return Some(AssetIds::NativeAssetId(NativeCurrency::Parent));
+ }
+
+ if let Some(currency_id) =
+ XcmForeignAssetIdMapping::<Runtime>::get_currency_id(location.clone())
+ {
+ return Some(currency_id);
+ }
+
+ None
+ }
+}
runtime/common/config/xcm/mod.rsdiffbeforeafterboth15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.161617use frame_support::{traits::Everything, weights::Weight, parameter_types};17use frame_support::{18 traits::{Everything, Get},19 weights::Weight,20 parameter_types,21};18use frame_system::EnsureRoot;22use frame_system::EnsureRoot;19use pallet_xcm::XcmPassthrough;23use pallet_xcm::XcmPassthrough;20use polkadot_parachain::primitives::Sibling;24use polkadot_parachain::primitives::Sibling;21use xcm::v1::{Junction::*, MultiLocation, NetworkId};25use xcm::v1::{Junction::*, MultiLocation, NetworkId};22use xcm::latest::{Instruction, Xcm};26use xcm::latest::prelude::*;23use xcm_builder::{27use xcm_builder::{24 AccountId32Aliases, EnsureXcmOrigin, FixedWeightBounds, LocationInverter, ParentAsSuperuser,28 AccountId32Aliases, EnsureXcmOrigin, FixedWeightBounds, LocationInverter, ParentAsSuperuser,25 RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia,29 RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia,26 SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, ParentIsPreset,30 SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, ParentIsPreset,27};31};28use xcm_executor::{Config, XcmExecutor, traits::ShouldExecute};32use xcm_executor::{Config, XcmExecutor, traits::ShouldExecute};29use sp_std::marker::PhantomData;33use sp_std::{marker::PhantomData, vec::Vec};30use crate::{34use crate::{31 Runtime, Call, Event, Origin, ParachainInfo, ParachainSystem, PolkadotXcm, XcmpQueue,35 Runtime, Call, Event, Origin, ParachainInfo, ParachainSystem, PolkadotXcm, XcmpQueue,32 xcm_config::Barrier,36 xcm_config::Barrier,35use up_common::types::AccountId;39use up_common::types::AccountId;364037#[cfg(feature = "foreign-assets")]41#[cfg(feature = "foreign-assets")]38mod foreignassets;42pub mod foreignassets;394340#[cfg(not(feature = "foreign-assets"))]44#[cfg(not(feature = "foreign-assets"))]41mod nativeassets;45pub mod nativeassets;424643#[cfg(feature = "foreign-assets")]47#[cfg(feature = "foreign-assets")]44use foreignassets as xcm_assets;48pub use foreignassets as xcm_assets;454946#[cfg(not(feature = "foreign-assets"))]50#[cfg(not(feature = "foreign-assets"))]47use nativeassets as xcm_assets;51pub use nativeassets as xcm_assets;485249use xcm_assets::{AssetTransactors, IsReserve, Trader};53use xcm_assets::{AssetTransactors, IsReserve, Trader};505453 pub const RelayNetwork: NetworkId = NetworkId::Polkadot;57 pub const RelayNetwork: NetworkId = NetworkId::Polkadot;54 pub RelayOrigin: Origin = cumulus_pallet_xcm::Origin::Relay.into();58 pub RelayOrigin: Origin = cumulus_pallet_xcm::Origin::Relay.into();55 pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into();59 pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into();60 pub SelfLocation: MultiLocation = MultiLocation::new(1, X1(Parachain(ParachainInfo::get().into())));6162 // One XCM operation is 1_000_000 weight - almost certainly a conservative estimate.63 pub UnitWeightCost: Weight = 1_000_000;64 pub const MaxInstructions: u32 = 100;56}65}576658/// Type for specifying how a `MultiLocation` can be converted into an `AccountId`. This is used67/// Type for specifying how a `MultiLocation` can be converted into an `AccountId`. This is used103 XcmPassthrough<Origin>,112 XcmPassthrough<Origin>,104);113);105106parameter_types! {107 // One XCM operation is 1_000_000 weight - almost certainly a conservative estimate.108 pub UnitWeightCost: Weight = 1_000_000;109 pub const MaxInstructions: u32 = 100;110}111114112pub trait TryPass {115pub trait TryPass {113 fn try_pass<Call>(origin: &MultiLocation, message: &mut Xcm<Call>) -> Result<(), ()>;116 fn try_pass<Call>(origin: &MultiLocation, message: &mut Xcm<Call>) -> Result<(), ()>;169 }172 }170}173}174175// Allow xcm exchange only with locations in list176pub struct DenyExchangeWithUnknownLocation<T>(PhantomData<T>);177impl<T: Get<Vec<MultiLocation>>> TryPass for DenyExchangeWithUnknownLocation<T> {178 fn try_pass<Call>(origin: &MultiLocation, message: &mut Xcm<Call>) -> Result<(), ()> {179 let allowed_locations = T::get();180181 // Check if deposit or transfer belongs to allowed parachains182 let mut allowed = allowed_locations.contains(origin);183184 message.0.iter().for_each(|inst| match inst {185 DepositReserveAsset { dest: dst, .. } => {186 allowed |= allowed_locations.contains(dst);187 }188 TransferReserveAsset { dest: dst, .. } => {189 allowed |= allowed_locations.contains(dst);190 }191 _ => {}192 });193194 if allowed {195 return Ok(());196 }197198 log::warn!(199 target: "xcm::barrier",200 "Unexpected deposit or transfer location"201 );202 // Deny203 Err(())204 }205}206207pub type Weigher = FixedWeightBounds<UnitWeightCost, Call, MaxInstructions>;171208172pub struct XcmConfig<T>(PhantomData<T>);209pub struct XcmConfig<T>(PhantomData<T>);173impl<T> Config for XcmConfig<T>210impl<T> Config for XcmConfig<T>183 type IsTeleporter = (); // Teleportation is disabled220 type IsTeleporter = (); // Teleportation is disabled184 type LocationInverter = LocationInverter<Ancestry>;221 type LocationInverter = LocationInverter<Ancestry>;185 type Barrier = Barrier;222 type Barrier = Barrier;186 type Weigher = FixedWeightBounds<UnitWeightCost, Call, MaxInstructions>;223 type Weigher = Weigher;187 type Trader = Trader<T>;224 type Trader = Trader<T>;188 type ResponseHandler = (); // Don't handle responses for now.225 type ResponseHandler = (); // Don't handle responses for now.189 type SubscriptionService = PolkadotXcm;226 type SubscriptionService = PolkadotXcm;runtime/common/config/xcm/nativeassets.rsdiffbeforeafterboth--- a/runtime/common/config/xcm/nativeassets.rs
+++ b/runtime/common/config/xcm/nativeassets.rs
@@ -18,7 +18,7 @@
traits::{tokens::currency::Currency as CurrencyT, OnUnbalanced as OnUnbalancedT, Get},
weights::{Weight, WeightToFeePolynomial},
};
-use sp_runtime::traits::{CheckedConversion, Zero};
+use sp_runtime::traits::{CheckedConversion, Zero, Convert};
use xcm::v1::{Junction::*, MultiLocation, Junctions::*};
use xcm::latest::{
AssetId::{Concrete},
@@ -30,6 +30,7 @@
Assets,
traits::{MatchesFungible, WeightTrader},
};
+use pallet_foreing_assets::{AssetIds, NativeCurrency};
use sp_std::marker::PhantomData;
use crate::{Balances, ParachainInfo};
use super::{LocationToAccountId, RelayLocation};
@@ -127,3 +128,16 @@
Balances,
(),
>;
+
+pub struct CurrencyIdConvert;
+impl Convert<AssetIds, Option<MultiLocation>> for CurrencyIdConvert {
+ fn convert(id: AssetIds) -> Option<MultiLocation> {
+ match id {
+ AssetIds::NativeAssetId(NativeCurrency::Here) => Some(MultiLocation::new(
+ 1,
+ X1(Parachain(ParachainInfo::get().into())),
+ )),
+ _ => None,
+ }
+ }
+}
runtime/opal/src/xcm_config.rsdiffbeforeafterboth--- a/runtime/opal/src/xcm_config.rs
+++ b/runtime/opal/src/xcm_config.rs
@@ -15,39 +15,17 @@
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
use frame_support::{
- {match_types, parameter_types, weights::Weight},
- pallet_prelude::Get,
- traits::{Contains, Everything},
+ {match_types, weights::Weight},
+ traits::Everything,
};
-use orml_traits::{location::AbsoluteReserveProvider, parameter_type_with_key};
-use sp_runtime::traits::{AccountIdConversion, Convert};
-use sp_std::{vec, vec::Vec};
use xcm::{
latest::Xcm,
- v1::{BodyId, Junction::*, Junctions::*, MultiLocation, NetworkId},
-};
-use xcm_builder::{
- AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, FixedWeightBounds, LocationInverter,
- TakeWeightCredit,
-};
-use xcm_executor::{XcmExecutor, traits::ShouldExecute};
-
-use up_common::types::{AccountId, Balance};
-use crate::{
- Call, Event, ParachainInfo, Runtime,
- runtime_common::config::{
- substrate::{TreasuryModuleId, MaxLocks, MaxReserves},
- pallets::TreasuryAccountId,
- xcm::*,
- },
+ v1::{BodyId, Junction::*, Junctions::*, MultiLocation},
};
-
-use pallet_foreing_assets::{
- AssetIds, AssetIdMapping, XcmForeignAssetIdMapping, CurrencyId, NativeCurrency,
-};
+use xcm_builder::{AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, TakeWeightCredit};
+use xcm_executor::traits::ShouldExecute;
-// Signed version of balance
-pub type Amount = i128;
+use crate::runtime_common::config::xcm::{DenyThenTry, DenyTransact};
match_types! {
pub type ParentOrParentsUnitPlurality: impl Contains<MultiLocation> = {
@@ -83,123 +61,3 @@
AllowAllDebug,
),
>;
-
-impl Convert<MultiLocation, Option<CurrencyId>> for CurrencyIdConvert {
- fn convert(location: MultiLocation) -> Option<CurrencyId> {
- if location == MultiLocation::here()
- || location == MultiLocation::new(1, X1(Parachain(ParachainInfo::get().into())))
- {
- return Some(AssetIds::NativeAssetId(NativeCurrency::Here));
- }
-
- if location == MultiLocation::parent() {
- return Some(AssetIds::NativeAssetId(NativeCurrency::Parent));
- }
-
- if let Some(currency_id) =
- XcmForeignAssetIdMapping::<Runtime>::get_currency_id(location.clone())
- {
- return Some(currency_id);
- }
-
- None
- }
-}
-
-impl orml_tokens::Config for Runtime {
- type Event = Event;
- type Balance = Balance;
- type Amount = Amount;
- type CurrencyId = CurrencyId;
- type WeightInfo = ();
- type ExistentialDeposits = ExistentialDeposits;
- type OnDust = orml_tokens::TransferDust<Runtime, TreasuryAccountId>;
- type MaxLocks = MaxLocks;
- type MaxReserves = MaxReserves;
- // TODO: Add all module accounts
- type DustRemovalWhitelist = DustRemovalWhitelist;
- /// The id type for named reserves.
- type ReserveIdentifier = ();
- type OnNewTokenAccount = ();
- type OnKilledTokenAccount = ();
-}
-
-impl orml_xtokens::Config for Runtime {
- type Event = Event;
- type Balance = Balance;
- type CurrencyId = CurrencyId;
- type CurrencyIdConvert = CurrencyIdConvert;
- type AccountIdToMultiLocation = AccountIdToMultiLocation;
- type SelfLocation = SelfLocation;
- type XcmExecutor = XcmExecutor<XcmConfig<Self>>;
- type Weigher = FixedWeightBounds<UnitWeightCost, Call, MaxInstructions>;
- type BaseXcmWeight = BaseXcmWeight;
- type LocationInverter = LocationInverter<Ancestry>;
- type MaxAssetsForTransfer = MaxAssetsForTransfer;
- type MinXcmFee = ParachainMinFee;
- type MultiLocationsFilter = Everything;
- type ReserveProvider = AbsoluteReserveProvider;
-}
-
-parameter_type_with_key! {
- pub ExistentialDeposits: |currency_id: CurrencyId| -> Balance {
- match currency_id {
- CurrencyId::NativeAssetId(symbol) => match symbol {
- NativeCurrency::Here => 0,
- NativeCurrency::Parent=> 0,
- },
- _ => 100_000
- }
- };
-}
-
-pub struct DustRemovalWhitelist;
-impl Contains<AccountId> for DustRemovalWhitelist {
- fn contains(a: &AccountId) -> bool {
- get_all_module_accounts().contains(a)
- }
-}
-
-pub struct CurrencyIdConvert;
-impl Convert<AssetIds, Option<MultiLocation>> for CurrencyIdConvert {
- fn convert(id: AssetIds) -> Option<MultiLocation> {
- match id {
- AssetIds::NativeAssetId(NativeCurrency::Here) => Some(MultiLocation::new(
- 1,
- X1(Parachain(ParachainInfo::get().into())),
- )),
- AssetIds::NativeAssetId(NativeCurrency::Parent) => Some(MultiLocation::parent()),
- AssetIds::ForeignAssetId(foreign_asset_id) => {
- XcmForeignAssetIdMapping::<Runtime>::get_multi_location(foreign_asset_id)
- }
- }
- }
-}
-
-parameter_types! {
- pub const BaseXcmWeight: Weight = 100_000_000; // TODO: recheck this
- pub const MaxAssetsForTransfer: usize = 2;
-
- pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into();
- pub SelfLocation: MultiLocation = MultiLocation::new(1, X1(Parachain(ParachainInfo::get().into())));
-}
-
-parameter_type_with_key! {
- pub ParachainMinFee: |_location: MultiLocation| -> Option<u128> {
- Some(100_000_000_000)
- };
-}
-
-pub fn get_all_module_accounts() -> Vec<AccountId> {
- vec![TreasuryModuleId::get().into_account_truncating()]
-}
-pub struct AccountIdToMultiLocation;
-impl Convert<AccountId, MultiLocation> for AccountIdToMultiLocation {
- fn convert(account: AccountId) -> MultiLocation {
- X1(AccountId32 {
- network: NetworkId::Any,
- id: account.into(),
- })
- .into()
- }
-}
runtime/quartz/src/xcm_config.rsdiffbeforeafterboth--- a/runtime/quartz/src/xcm_config.rs
+++ b/runtime/quartz/src/xcm_config.rs
@@ -15,33 +15,20 @@
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
use frame_support::{
- {match_types, parameter_types, weights::Weight},
- pallet_prelude::Get,
- traits::{Contains, Everything},
+ match_types, parameter_types,
+ traits::{Everything, Get},
};
-use orml_traits::{location::AbsoluteReserveProvider, parameter_type_with_key};
-use sp_runtime::traits::{AccountIdConversion, Convert};
use sp_std::{vec, vec::Vec};
-use xcm::{
- latest::Xcm,
- v1::{BodyId, Junction::*, Junctions::*, MultiLocation, NetworkId},
-};
+use xcm::v1::{BodyId, Junction::*, Junctions::*, MultiLocation};
use xcm_builder::{
AllowKnownQueryResponses, AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom,
- AllowUnpaidExecutionFrom, FixedWeightBounds, LocationInverter, TakeWeightCredit,
+ AllowUnpaidExecutionFrom, TakeWeightCredit,
};
-use xcm_executor::XcmExecutor;
-use up_common::types::{AccountId, Balance};
-use pallet_foreing_assets::{AssetIds, CurrencyId, NativeCurrency};
-use crate::{Call, Event, ParachainInfo, PolkadotXcm, Runtime};
-use crate::runtime_common::config::substrate::{TreasuryModuleId, MaxLocks, MaxReserves};
-use crate::runtime_common::config::pallets::TreasuryAccountId;
-use crate::runtime_common::config::xcm::*;
-use xcm::opaque::latest::prelude::{DepositReserveAsset, TransferReserveAsset};
-
-// Signed version of balance
-pub type Amount = i128;
+use crate::{
+ ParachainInfo, PolkadotXcm,
+ runtime_common::config::xcm::{DenyThenTry, DenyTransact, DenyExchangeWithUnknownLocation},
+};
match_types! {
pub type ParentOrParentsExecutivePlurality: impl Contains<MultiLocation> = {
@@ -54,22 +41,8 @@
};
}
-pub type Barrier = DenyThenTry<
- (DenyTransact, DenyExchangeWithUnknownLocation),
- (
- TakeWeightCredit,
- AllowTopLevelPaidExecutionFrom<Everything>,
- // Parent and its exec plurality get free execution
- AllowUnpaidExecutionFrom<ParentOrParentsExecutivePlurality>,
- // Expected responses are OK.
- AllowKnownQueryResponses<PolkadotXcm>,
- // Subscriptions for version tracking are OK.
- AllowSubscriptionsFrom<ParentOrSiblings>,
- ),
->;
-
-pub fn get_allowed_locations() -> Vec<MultiLocation> {
- vec![
+parameter_types! {
+ pub QuartzAllowedLocations: Vec<MultiLocation> = vec![
// Self location
MultiLocation {
parents: 0,
@@ -95,131 +68,22 @@
parents: 1,
interior: X1(Parachain(ParachainInfo::get().into())),
},
- ]
-}
-
-// Allow xcm exchange only with locations in list
-pub struct DenyExchangeWithUnknownLocation;
-impl TryPass for DenyExchangeWithUnknownLocation {
- fn try_pass<Call>(origin: &MultiLocation, message: &mut Xcm<Call>) -> Result<(), ()> {
- // Check if deposit or transfer belongs to allowed parachains
- let mut allowed = get_allowed_locations().contains(origin);
-
- message.0.iter().for_each(|inst| match inst {
- DepositReserveAsset { dest: dst, .. } => {
- allowed |= get_allowed_locations().contains(dst);
- }
- TransferReserveAsset { dest: dst, .. } => {
- allowed |= get_allowed_locations().contains(dst);
- }
- _ => {}
- });
-
- if allowed {
- return Ok(());
- }
-
- log::warn!(
- target: "xcm::barrier",
- "Unexpected deposit or transfer location"
- );
- // Deny
- Err(())
- }
+ ];
}
-impl orml_tokens::Config for Runtime {
- type Event = Event;
- type Balance = Balance;
- type Amount = Amount;
- type CurrencyId = CurrencyId;
- type WeightInfo = ();
- type ExistentialDeposits = ExistentialDeposits;
- type OnDust = orml_tokens::TransferDust<Runtime, TreasuryAccountId>;
- type MaxLocks = MaxLocks;
- type MaxReserves = MaxReserves;
- // TODO: Add all module accounts
- type DustRemovalWhitelist = DustRemovalWhitelist;
- /// The id type for named reserves.
- type ReserveIdentifier = ();
- type OnNewTokenAccount = ();
- type OnKilledTokenAccount = ();
-}
-
-impl orml_xtokens::Config for Runtime {
- type Event = Event;
- type Balance = Balance;
- type CurrencyId = CurrencyId;
- type CurrencyIdConvert = CurrencyIdConvert;
- type AccountIdToMultiLocation = AccountIdToMultiLocation;
- type SelfLocation = SelfLocation;
- type XcmExecutor = XcmExecutor<XcmConfig<Self>>;
- type Weigher = FixedWeightBounds<UnitWeightCost, Call, MaxInstructions>;
- type BaseXcmWeight = BaseXcmWeight;
- type LocationInverter = LocationInverter<Ancestry>;
- type MaxAssetsForTransfer = MaxAssetsForTransfer;
- type MinXcmFee = ParachainMinFee;
- type MultiLocationsFilter = Everything;
- type ReserveProvider = AbsoluteReserveProvider;
-}
-
-parameter_type_with_key! {
- pub ExistentialDeposits: |currency_id: CurrencyId| -> Balance {
- match currency_id {
- CurrencyId::NativeAssetId(symbol) => match symbol {
- NativeCurrency::Here => 0,
- NativeCurrency::Parent=> 0,
- },
- _ => 100_000
- }
- };
-}
-
-pub struct DustRemovalWhitelist;
-impl Contains<AccountId> for DustRemovalWhitelist {
- fn contains(a: &AccountId) -> bool {
- get_all_module_accounts().contains(a)
- }
-}
-
-pub struct CurrencyIdConvert;
-impl Convert<AssetIds, Option<MultiLocation>> for CurrencyIdConvert {
- fn convert(id: AssetIds) -> Option<MultiLocation> {
- match id {
- AssetIds::NativeAssetId(NativeCurrency::Here) => Some(MultiLocation::new(
- 1,
- X1(Parachain(ParachainInfo::get().into())),
- )),
- _ => None,
- }
- }
-}
-
-parameter_types! {
- pub const BaseXcmWeight: Weight = 100_000_000; // TODO: recheck this
- pub const MaxAssetsForTransfer: usize = 2;
-
- pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into();
- pub SelfLocation: MultiLocation = MultiLocation::new(1, X1(Parachain(ParachainInfo::get().into())));
-}
-
-parameter_type_with_key! {
- pub ParachainMinFee: |_location: MultiLocation| -> Option<u128> {
- Some(100_000_000)
- };
-}
-
-pub fn get_all_module_accounts() -> Vec<AccountId> {
- vec![TreasuryModuleId::get().into_account_truncating()]
-}
-
-pub struct AccountIdToMultiLocation;
-impl Convert<AccountId, MultiLocation> for AccountIdToMultiLocation {
- fn convert(account: AccountId) -> MultiLocation {
- X1(AccountId32 {
- network: NetworkId::Any,
- id: account.into(),
- })
- .into()
- }
-}
+pub type Barrier = DenyThenTry<
+ (
+ DenyTransact,
+ DenyExchangeWithUnknownLocation<QuartzAllowedLocations>,
+ ),
+ (
+ TakeWeightCredit,
+ AllowTopLevelPaidExecutionFrom<Everything>,
+ // Parent and its exec plurality get free execution
+ AllowUnpaidExecutionFrom<ParentOrParentsExecutivePlurality>,
+ // Expected responses are OK.
+ AllowKnownQueryResponses<PolkadotXcm>,
+ // Subscriptions for version tracking are OK.
+ AllowSubscriptionsFrom<ParentOrSiblings>,
+ ),
+>;
runtime/unique/src/xcm_config.rsdiffbeforeafterboth--- a/runtime/unique/src/xcm_config.rs
+++ b/runtime/unique/src/xcm_config.rs
@@ -15,33 +15,20 @@
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
use frame_support::{
- {match_types, parameter_types, weights::Weight},
- pallet_prelude::Get,
- traits::{Contains, Everything},
+ match_types, parameter_types,
+ traits::{Everything, Get},
};
-use orml_traits::{location::AbsoluteReserveProvider, parameter_type_with_key};
-use sp_runtime::traits::{AccountIdConversion, Convert};
use sp_std::{vec, vec::Vec};
-use xcm::{
- latest::Xcm,
- v1::{BodyId, Junction::*, Junctions::*, MultiLocation, NetworkId},
-};
+use xcm::v1::{BodyId, Junction::*, Junctions::*, MultiLocation};
use xcm_builder::{
AllowKnownQueryResponses, AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom,
- AllowUnpaidExecutionFrom, FixedWeightBounds, LocationInverter, TakeWeightCredit,
+ AllowUnpaidExecutionFrom, TakeWeightCredit,
};
-use xcm_executor::XcmExecutor;
-use up_common::types::{AccountId, Balance};
-use pallet_foreing_assets::{AssetIds, CurrencyId, NativeCurrency};
-use crate::{Call, Event, ParachainInfo, PolkadotXcm, Runtime};
-use crate::runtime_common::config::substrate::{TreasuryModuleId, MaxLocks, MaxReserves};
-use crate::runtime_common::config::pallets::TreasuryAccountId;
-use crate::runtime_common::config::xcm::*;
-use xcm::opaque::latest::prelude::{DepositReserveAsset, TransferReserveAsset};
-
-// Signed version of balance
-pub type Amount = i128;
+use crate::{
+ ParachainInfo, PolkadotXcm,
+ runtime_common::config::xcm::{DenyThenTry, DenyTransact, DenyExchangeWithUnknownLocation},
+};
match_types! {
pub type ParentOrParentsExecutivePlurality: impl Contains<MultiLocation> = {
@@ -54,22 +41,8 @@
};
}
-pub type Barrier = DenyThenTry<
- (DenyTransact, DenyExchangeWithUnknownLocation),
- (
- TakeWeightCredit,
- AllowTopLevelPaidExecutionFrom<Everything>,
- // Parent and its exec plurality get free execution
- AllowUnpaidExecutionFrom<ParentOrParentsExecutivePlurality>,
- // Expected responses are OK.
- AllowKnownQueryResponses<PolkadotXcm>,
- // Subscriptions for version tracking are OK.
- AllowSubscriptionsFrom<ParentOrSiblings>,
- ),
->;
-
-pub fn get_allowed_locations() -> Vec<MultiLocation> {
- vec![
+parameter_types! {
+ pub UniqueAllowedLocations: Vec<MultiLocation> = vec![
// Self location
MultiLocation {
parents: 0,
@@ -95,131 +68,22 @@
parents: 1,
interior: X1(Parachain(ParachainInfo::get().into())),
},
- ]
-}
-
-// Allow xcm exchange only with locations in list
-pub struct DenyExchangeWithUnknownLocation;
-impl TryPass for DenyExchangeWithUnknownLocation {
- fn try_pass<Call>(origin: &MultiLocation, message: &mut Xcm<Call>) -> Result<(), ()> {
- // Check if deposit or transfer belongs to allowed parachains
- let mut allowed = get_allowed_locations().contains(origin);
-
- message.0.iter().for_each(|inst| match inst {
- DepositReserveAsset { dest: dst, .. } => {
- allowed |= get_allowed_locations().contains(dst);
- }
- TransferReserveAsset { dest: dst, .. } => {
- allowed |= get_allowed_locations().contains(dst);
- }
- _ => {}
- });
-
- if allowed {
- return Ok(());
- }
-
- log::warn!(
- target: "xcm::barrier",
- "Unexpected deposit or transfer location"
- );
- // Deny
- Err(())
- }
+ ];
}
-impl orml_tokens::Config for Runtime {
- type Event = Event;
- type Balance = Balance;
- type Amount = Amount;
- type CurrencyId = CurrencyId;
- type WeightInfo = ();
- type ExistentialDeposits = ExistentialDeposits;
- type OnDust = orml_tokens::TransferDust<Runtime, TreasuryAccountId>;
- type MaxLocks = MaxLocks;
- type MaxReserves = MaxReserves;
- // TODO: Add all module accounts
- type DustRemovalWhitelist = DustRemovalWhitelist;
- /// The id type for named reserves.
- type ReserveIdentifier = ();
- type OnNewTokenAccount = ();
- type OnKilledTokenAccount = ();
-}
-
-impl orml_xtokens::Config for Runtime {
- type Event = Event;
- type Balance = Balance;
- type CurrencyId = CurrencyId;
- type CurrencyIdConvert = CurrencyIdConvert;
- type AccountIdToMultiLocation = AccountIdToMultiLocation;
- type SelfLocation = SelfLocation;
- type XcmExecutor = XcmExecutor<XcmConfig<Self>>;
- type Weigher = FixedWeightBounds<UnitWeightCost, Call, MaxInstructions>;
- type BaseXcmWeight = BaseXcmWeight;
- type LocationInverter = LocationInverter<Ancestry>;
- type MaxAssetsForTransfer = MaxAssetsForTransfer;
- type MinXcmFee = ParachainMinFee;
- type MultiLocationsFilter = Everything;
- type ReserveProvider = AbsoluteReserveProvider;
-}
-
-parameter_type_with_key! {
- pub ExistentialDeposits: |currency_id: CurrencyId| -> Balance {
- match currency_id {
- CurrencyId::NativeAssetId(symbol) => match symbol {
- NativeCurrency::Here => 0,
- NativeCurrency::Parent=> 0,
- },
- _ => 100_000
- }
- };
-}
-
-pub struct DustRemovalWhitelist;
-impl Contains<AccountId> for DustRemovalWhitelist {
- fn contains(a: &AccountId) -> bool {
- get_all_module_accounts().contains(a)
- }
-}
-
-pub struct CurrencyIdConvert;
-impl Convert<AssetIds, Option<MultiLocation>> for CurrencyIdConvert {
- fn convert(id: AssetIds) -> Option<MultiLocation> {
- match id {
- AssetIds::NativeAssetId(NativeCurrency::Here) => Some(MultiLocation::new(
- 1,
- X1(Parachain(ParachainInfo::get().into())),
- )),
- _ => None,
- }
- }
-}
-
-parameter_types! {
- pub const BaseXcmWeight: Weight = 100_000_000; // TODO: recheck this
- pub const MaxAssetsForTransfer: usize = 2;
-
- pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into();
- pub SelfLocation: MultiLocation = MultiLocation::new(1, X1(Parachain(ParachainInfo::get().into())));
-}
-
-parameter_type_with_key! {
- pub ParachainMinFee: |_location: MultiLocation| -> Option<u128> {
- Some(100_000_000)
- };
-}
-
-pub fn get_all_module_accounts() -> Vec<AccountId> {
- vec![TreasuryModuleId::get().into_account_truncating()]
-}
-
-pub struct AccountIdToMultiLocation;
-impl Convert<AccountId, MultiLocation> for AccountIdToMultiLocation {
- fn convert(account: AccountId) -> MultiLocation {
- X1(AccountId32 {
- network: NetworkId::Any,
- id: account.into(),
- })
- .into()
- }
-}
+pub type Barrier = DenyThenTry<
+ (
+ DenyTransact,
+ DenyExchangeWithUnknownLocation<UniqueAllowedLocations>,
+ ),
+ (
+ TakeWeightCredit,
+ AllowTopLevelPaidExecutionFrom<Everything>,
+ // Parent and its exec plurality get free execution
+ AllowUnpaidExecutionFrom<ParentOrParentsExecutivePlurality>,
+ // Expected responses are OK.
+ AllowKnownQueryResponses<PolkadotXcm>,
+ // Subscriptions for version tracking are OK.
+ AllowSubscriptionsFrom<ParentOrSiblings>,
+ ),
+>;