cumulus: add asset-hub-rococo runtime based on asset-hub-kusama and add asset-bridging support to it (#1215)

This commit adds Rococo Asset Hub dedicated runtime so we can test new
features here, before merging them in Kusama Asset Hub.
Also adds one such feature: asset transfer over bridge (Rococo AssetHub
<> Wococo AssetHub)

- clone `asset-hub-kusama-runtime` -> `asset-hub-rococo-runtime`
- make it use Rococo primitives, names, assets, constants, etc
- add asset-transfer-over-bridge support to Rococo AssetHub <> Wococo
AssetHub

Fixes #1128

---------

Co-authored-by: Branislav Kontur <bkontur@gmail.com>
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com>
Co-authored-by: Francisco Aguirre <franciscoaguirreperez@gmail.com>
This commit is contained in:
Adrian Catangiu
2023-10-18 09:47:45 +03:00
committed by GitHub
parent e73729b15f
commit 8b3905d2a5
95 changed files with 14143 additions and 767 deletions
@@ -19,6 +19,7 @@ use xcm::{
latest::prelude::{MultiAsset, MultiLocation},
prelude::*,
};
use xcm_builder::ensure_is_remote;
frame_support::parameter_types! {
pub LocalMultiLocationPattern: MultiLocation = MultiLocation::new(0, Here);
@@ -56,3 +57,41 @@ impl<SelfParaId: Get<ParaId>> ContainsPair<MultiLocation, MultiLocation>
}
}
}
/// Adapter verifies if it is allowed to receive `MultiAsset` from `MultiLocation`.
///
/// Note: `MultiLocation` has to be from a different global consensus.
pub struct IsTrustedBridgedReserveLocationForConcreteAsset<UniversalLocation, Reserves>(
sp_std::marker::PhantomData<(UniversalLocation, Reserves)>,
);
impl<
UniversalLocation: Get<InteriorMultiLocation>,
Reserves: ContainsPair<MultiAsset, MultiLocation>,
> ContainsPair<MultiAsset, MultiLocation>
for IsTrustedBridgedReserveLocationForConcreteAsset<UniversalLocation, Reserves>
{
fn contains(asset: &MultiAsset, origin: &MultiLocation) -> bool {
let universal_source = UniversalLocation::get();
log::trace!(
target: "xcm::contains",
"IsTrustedBridgedReserveLocationForConcreteAsset asset: {:?}, origin: {:?}, universal_source: {:?}",
asset, origin, universal_source
);
// check remote origin
let _ = match ensure_is_remote(universal_source, *origin) {
Ok(devolved) => devolved,
Err(_) => {
log::trace!(
target: "xcm::contains",
"IsTrustedBridgedReserveLocationForConcreteAsset origin: {:?} is not remote to the universal_source: {:?}",
origin, universal_source
);
return false
},
};
// check asset according to the configured reserve locations
Reserves::contains(asset, origin)
}
}