@@ -3,7 +3,7 @@ use crate as orml_xtokens;
33
44use frame_support:: {
55 construct_runtime, derive_impl, parameter_types,
6- traits:: { ConstU128 , ConstU32 , Contains , Everything , Get , Nothing } ,
6+ traits:: { ConstU128 , ConstU32 , Contains , ContainsPair , Everything , Get , Nothing } ,
77} ;
88use frame_system:: EnsureRoot ;
99use pallet_xcm:: XcmPassthrough ;
@@ -12,6 +12,7 @@ use sp_runtime::{
1212 traits:: { Convert , IdentityLookup } ,
1313 AccountId32 , BoundedVec ,
1414} ;
15+ use sp_std:: marker:: PhantomData ;
1516use xcm:: v4:: { prelude:: * , Weight } ;
1617use xcm_builder:: {
1718 AccountId32Aliases , AllowTopLevelPaidExecutionFrom , EnsureXcmOrigin , FixedWeightBounds , ParentIsPreset ,
@@ -22,10 +23,10 @@ use xcm_executor::{Config, XcmExecutor};
2223
2324use crate :: mock:: AllTokensAreCreatedEqualToWeight ;
2425use orml_traits:: {
25- location:: { AbsoluteReserveProvider , RelativeReserveProvider } ,
26+ location:: { AbsoluteReserveProvider , RelativeReserveProvider , Reservegit } ,
2627 parameter_type_with_key,
2728} ;
28- use orml_xcm_support:: { IsNativeConcrete , MultiCurrencyAdapter , MultiNativeAsset } ;
29+ use orml_xcm_support:: { IsNativeConcrete , MultiCurrencyAdapter } ;
2930
3031pub type AccountId = AccountId32 ;
3132
@@ -115,6 +116,25 @@ parameter_types! {
115116 pub const MaxAssetsIntoHolding : u32 = 64 ;
116117}
117118
119+ pub struct MultiNativeAsset < ReserveProvider > ( PhantomData < ReserveProvider > ) ;
120+ impl < ReserveProvider > ContainsPair < Asset , Location > for MultiNativeAsset < ReserveProvider >
121+ where
122+ ReserveProvider : Reserve ,
123+ {
124+ fn contains ( asset : & Asset , origin : & Location ) -> bool {
125+ if let Some ( ref reserve) = ReserveProvider :: reserve ( asset) {
126+ if reserve == origin {
127+ return true ;
128+ }
129+ }
130+ // allow parachain to be reserved of relay to bypass https://github.com/paritytech/polkadot-sdk/pull/5660
131+ if asset. id . 0 == Location :: parent ( ) {
132+ return true ;
133+ }
134+ false
135+ }
136+ }
137+
118138pub struct XcmConfig ;
119139impl Config for XcmConfig {
120140 type RuntimeCall = RuntimeCall ;
0 commit comments