diff --git a/runtime/amplitude/src/xcm_config.rs b/runtime/amplitude/src/xcm_config.rs index e456bc49d..5e1c0ab2d 100644 --- a/runtime/amplitude/src/xcm_config.rs +++ b/runtime/amplitude/src/xcm_config.rs @@ -69,6 +69,30 @@ where ReserveProvider: Reserve, { fn contains(asset: &MultiAsset, origin: &MultiLocation) -> bool { + // Explicit allow for KSM from Asset Hub + if matches!( + asset, + MultiAsset { + id: Concrete(MultiLocation { parents: 1, interior: Here }), + fun: Fungible(_), + } + ) && matches!(origin, MultiLocation { parents: 1, interior: X1(Parachain(1000)) }) + { + return true; + } + + // Explicit deny for KSM from Relay Chain + if matches!( + asset, + MultiAsset { + id: Concrete(MultiLocation { parents: 1, interior: Here }), + fun: Fungible(_), + } + ) && matches!(origin, MultiLocation { parents: 1, interior: Here }) + { + return false; + } + if let Some(ref reserve) = ReserveProvider::reserve(asset) { if reserve == origin { return true; diff --git a/runtime/foucoco/src/xcm_config.rs b/runtime/foucoco/src/xcm_config.rs index 7eebf0949..b22d84c1f 100644 --- a/runtime/foucoco/src/xcm_config.rs +++ b/runtime/foucoco/src/xcm_config.rs @@ -64,6 +64,30 @@ where ReserveProvider: Reserve, { fn contains(asset: &MultiAsset, origin: &MultiLocation) -> bool { + // Explicit allow for PAS from Asset Hub + if matches!( + asset, + MultiAsset { + id: Concrete(MultiLocation { parents: 1, interior: Here }), + fun: Fungible(_), + } + ) && matches!(origin, MultiLocation { parents: 1, interior: X1(Parachain(1000)) }) + { + return true; + } + + // Explicit deny for PAS from Relay Chain + if matches!( + asset, + MultiAsset { + id: Concrete(MultiLocation { parents: 1, interior: Here }), + fun: Fungible(_), + } + ) && matches!(origin, MultiLocation { parents: 1, interior: Here }) + { + return false; + } + if let Some(ref reserve) = ReserveProvider::reserve(asset) { if reserve == origin { return true; diff --git a/runtime/pendulum/src/xcm_config.rs b/runtime/pendulum/src/xcm_config.rs index e25f3d0b2..2d94033ed 100644 --- a/runtime/pendulum/src/xcm_config.rs +++ b/runtime/pendulum/src/xcm_config.rs @@ -74,6 +74,30 @@ where ReserveProvider: Reserve, { fn contains(asset: &MultiAsset, origin: &MultiLocation) -> bool { + // Explicit allow for DOT from Asset Hub + if matches!( + asset, + MultiAsset { + id: Concrete(MultiLocation { parents: 1, interior: Here }), + fun: Fungible(_), + } + ) && matches!(origin, MultiLocation { parents: 1, interior: X1(Parachain(1000)) }) + { + return true; + } + + // Explicit deny for DOT from Relay Chain + if matches!( + asset, + MultiAsset { + id: Concrete(MultiLocation { parents: 1, interior: Here }), + fun: Fungible(_), + } + ) && matches!(origin, MultiLocation { parents: 1, interior: Here }) + { + return false; + } + if let Some(ref reserve) = ReserveProvider::reserve(asset) { if reserve == origin { return true;