difftreelog
fix use versioned asset ID in force_register_foreign_asset
in: master
2 files changed
js-packages/playgrounds/unique.xcm.tsdiffbeforeafterboth--- a/js-packages/playgrounds/unique.xcm.ts
+++ b/js-packages/playgrounds/unique.xcm.ts
@@ -108,7 +108,7 @@
await this.helper.executeExtrinsic(
signer,
'api.tx.foreignAssets.forceRegisterForeignAsset',
- [assetId, this.helper.util.str2vec(name), tokenPrefix, mode],
+ [{V3: assetId}, this.helper.util.str2vec(name), tokenPrefix, mode],
true,
);
}
pallets/foreign-assets/src/lib.rsdiffbeforeafterboth35use staging_xcm::{35use staging_xcm::{36 opaque::latest::{prelude::XcmError, Weight},36 opaque::latest::{prelude::XcmError, Weight},37 v3::{prelude::*, MultiAsset, XcmContext},37 v3::{prelude::*, MultiAsset, XcmContext},38 VersionedAssetId,38};39};39use staging_xcm_executor::{40use staging_xcm_executor::{40 traits::{ConvertLocation, Error as XcmExecutorError, TransactAsset, WeightTrader},41 traits::{ConvertLocation, Error as XcmExecutorError, TransactAsset, WeightTrader},91 /// The foreign asset is already registered.92 /// The foreign asset is already registered.92 ForeignAssetAlreadyRegistered,93 ForeignAssetAlreadyRegistered,9495 /// The given asset ID could not be converted into the current XCM version.96 BadForeignAssetId,93 }97 }949895 #[pallet::event]99 #[pallet::event]98 /// The foreign asset registered.102 /// The foreign asset registered.99 ForeignAssetRegistered {103 ForeignAssetRegistered {100 collection_id: CollectionId,104 collection_id: CollectionId,101 asset_id: Box<AssetId>,105 asset_id: Box<VersionedAssetId>,102 },106 },103 }107 }104108147 #[pallet::weight(<T as Config>::WeightInfo::register_foreign_asset())]151 #[pallet::weight(<T as Config>::WeightInfo::register_foreign_asset())]148 pub fn force_register_foreign_asset(152 pub fn force_register_foreign_asset(149 origin: OriginFor<T>,153 origin: OriginFor<T>,150 asset_id: Box<AssetId>,154 versioned_asset_id: Box<VersionedAssetId>,151 name: CollectionName,155 name: CollectionName,152 token_prefix: CollectionTokenPrefix,156 token_prefix: CollectionTokenPrefix,153 mode: ForeignCollectionMode,157 mode: ForeignCollectionMode,154 ) -> DispatchResult {158 ) -> DispatchResult {155 T::ForceRegisterOrigin::ensure_origin(origin.clone())?;159 T::ForceRegisterOrigin::ensure_origin(origin.clone())?;160161 let asset_id: AssetId = versioned_asset_id162 .as_ref()163 .clone()164 .try_into()165 .map_err(|()| Error::<T>::BadForeignAssetId)?;156166157 ensure!(167 ensure!(158 !<ForeignAssetToCollection<T>>::contains_key(*asset_id),168 !<ForeignAssetToCollection<T>>::contains_key(asset_id),159 <Error<T>>::ForeignAssetAlreadyRegistered,169 <Error<T>>::ForeignAssetAlreadyRegistered,160 );170 );161171179 },189 },180 )?;190 )?;181191182 <ForeignAssetToCollection<T>>::insert(*asset_id, collection_id);192 <ForeignAssetToCollection<T>>::insert(asset_id, collection_id);183 <CollectionToForeignAsset<T>>::insert(collection_id, *asset_id);193 <CollectionToForeignAsset<T>>::insert(collection_id, asset_id);184194185 Self::deposit_event(Event::<T>::ForeignAssetRegistered {195 Self::deposit_event(Event::<T>::ForeignAssetRegistered {186 collection_id,196 collection_id,187 asset_id,197 asset_id: versioned_asset_id,188 });198 });189199190 Ok(())200 Ok(())