diff --git a/parachain-template/runtime/src/xcm_config.rs b/parachain-template/runtime/src/xcm_config.rs index 3c77efba37..2ec84d1887 100644 --- a/parachain-template/runtime/src/xcm_config.rs +++ b/parachain-template/runtime/src/xcm_config.rs @@ -137,13 +137,14 @@ impl ShouldExecute for DenyReserveTransferToRelayChain { return Err(()) // Deny } - // allow reserve transfers to arrive from relay chain + // An unexpected reserve transfer has arrived from the Relay Chain. Generally, `IsReserve` + // should not allow this, but we just log it here. if matches!(origin, MultiLocation { parents: 1, interior: Here }) && message.0.iter().any(|inst| matches!(inst, ReserveAssetDeposited { .. })) { log::warn!( target: "xcm::barriers", - "Unexpected ReserveAssetDeposited from the relay chain", + "Unexpected ReserveAssetDeposited from the Relay Chain", ); } // Permit everything else diff --git a/parachains/common/src/xcm_config.rs b/parachains/common/src/xcm_config.rs index f5004c9c67..d244428217 100644 --- a/parachains/common/src/xcm_config.rs +++ b/parachains/common/src/xcm_config.rs @@ -52,13 +52,14 @@ impl ShouldExecute for DenyReserveTransferToRelayChain { return Err(()) // Deny } - // allow reserve transfers to arrive from relay chain + // An unexpected reserve transfer has arrived from the Relay Chain. Generally, `IsReserve` + // should not allow this, but we just log it here. if matches!(origin, MultiLocation { parents: 1, interior: Here }) && message.0.iter().any(|inst| matches!(inst, ReserveAssetDeposited { .. })) { log::warn!( target: "xcm::barrier", - "Unexpected ReserveAssetDeposited from the relay chain", + "Unexpected ReserveAssetDeposited from the Relay Chain", ); } // Permit everything else diff --git a/parachains/runtimes/assets/statemine/src/xcm_config.rs b/parachains/runtimes/assets/statemine/src/xcm_config.rs index 7ace1bf2b3..ce6fd18f91 100644 --- a/parachains/runtimes/assets/statemine/src/xcm_config.rs +++ b/parachains/runtimes/assets/statemine/src/xcm_config.rs @@ -162,7 +162,10 @@ impl xcm_executor::Config for XcmConfig { type XcmSender = XcmRouter; type AssetTransactor = AssetTransactors; type OriginConverter = XcmOriginToTransactDispatchOrigin; - type IsReserve = NativeAsset; + // Statemine does not recognize a reserve location for any asset. This does not prevent + // Statemine acting _as_ a reserve location for KSM and assets created under `pallet-assets`. + // For KSM, users must use teleport where allowed (e.g. with the Relay Chain). + type IsReserve = (); type IsTeleporter = NativeAsset; // <- should be enough to allow teleportation of KSM type LocationInverter = LocationInverter; type Barrier = Barrier; diff --git a/parachains/runtimes/assets/statemint/src/xcm_config.rs b/parachains/runtimes/assets/statemint/src/xcm_config.rs index f7f7206593..a8c652588c 100644 --- a/parachains/runtimes/assets/statemint/src/xcm_config.rs +++ b/parachains/runtimes/assets/statemint/src/xcm_config.rs @@ -162,7 +162,10 @@ impl xcm_executor::Config for XcmConfig { type XcmSender = XcmRouter; type AssetTransactor = AssetTransactors; type OriginConverter = XcmOriginToTransactDispatchOrigin; - type IsReserve = NativeAsset; + // Statemint does not recognize a reserve location for any asset. This does not prevent + // Statemint acting _as_ a reserve location for DOT and assets created under `pallet-assets`. + // For DOT, users must use teleport where allowed (e.g. with the Relay Chain). + type IsReserve = (); type IsTeleporter = NativeAsset; // <- should be enough to allow teleportation of DOT type LocationInverter = LocationInverter; type Barrier = Barrier; diff --git a/parachains/runtimes/assets/westmint/src/xcm_config.rs b/parachains/runtimes/assets/westmint/src/xcm_config.rs index c0dd1da1fd..06a75423b5 100644 --- a/parachains/runtimes/assets/westmint/src/xcm_config.rs +++ b/parachains/runtimes/assets/westmint/src/xcm_config.rs @@ -158,7 +158,10 @@ impl xcm_executor::Config for XcmConfig { type XcmSender = XcmRouter; type AssetTransactor = AssetTransactors; type OriginConverter = XcmOriginToTransactDispatchOrigin; - type IsReserve = NativeAsset; + // Westmint does not recognize a reserve location for any asset. This does not prevent + // Westmint acting _as_ a reserve location for WND and assets created under `pallet-assets`. + // For WND, users must use teleport where allowed (e.g. with the Relay Chain). + type IsReserve = (); type IsTeleporter = NativeAsset; // <- should be enough to allow teleportation of WND type LocationInverter = LocationInverter; type Barrier = Barrier;