Summary
Investigate and setup proper usage of MultiLocation for storage items.
Problem 1 - ForeignAssets - asset_id as xcm::prelude::MultiLocation
MultiLocation is used as pallet_assets::AssetId.
// AssetId type definition
pub type MultiLocationForAssetId = xcm::prelude::MultiLocation;
// ForeignAssets pallet instance
pub type ForeignAssetsInstance = pallet_assets::Instance2;
impl pallet_assets::Config<ForeignAssetsInstance> for Runtime {
...
type AssetId = MultiLocationForAssetId;
...
}
// `pallet_assets::AssetId` used by storage item
pub(super) type Asset<T: Config<I>, I: 'static = ()> = StorageMap<
_,
Blake2_128Concat,
T::AssetId,
...
>;
Problem 2 - asset-conversion uses Box<xcm::opaque::v3::MultiLocation> for storage item
See asset conversion pallet MultiAssetId definition:
impl pallet_asset_conversion::Config for Runtime {
...
type MultiAssetId = Box<xcm::opaque::v3::MultiLocation>;
...
}
// MultiAssetId is used for PoolId
pub(super) type PoolIdOf<T> = (<T as Config>::MultiAssetId, <T as Config>::MultiAssetId);
// PoolId is used by storage item
pub type Pools<T: Config> =
StorageMap<_, Blake2_128Concat, PoolIdOf<T>, PoolInfo<T::PoolAssetId>, OptionQuery>;
Problem 3 - asset-conversion uses Box<xcm::opaque::v3::MultiLocation> for public runtime api
See more description here.
Questions:
How should we handle MultiLocation vs VersionedMultiLocation in proper way?
TODO
Summary
Investigate and setup proper usage of
MultiLocationfor storage items.Problem 1 - ForeignAssets - asset_id as
xcm::prelude::MultiLocationMultiLocation is used as pallet_assets::AssetId.
Problem 2 - asset-conversion uses
Box<xcm::opaque::v3::MultiLocation>for storage itemSee asset conversion pallet
MultiAssetIddefinition:Problem 3 - asset-conversion uses
Box<xcm::opaque::v3::MultiLocation>for public runtime apiSee more description here.
Questions:
How should we handle
MultiLocationvsVersionedMultiLocationin proper way?TODO
xcm::prelude::MultiLocationtoxcm::VersionedMultiLocation?xcm::v3::MultiLocationagainstxcm::prelude::MultiLocation?