git.delta.rocks / unique-network / refs/commits / c01d30bfd844

difftreelog

fix use versioned asset ID in force_register_foreign_asset

Daniel Shiposha2023-11-27parent: #b0dfc97.patch.diff
in: master

2 files changed

modifiedjs-packages/playgrounds/unique.xcm.tsdiffbeforeafterboth
108 await this.helper.executeExtrinsic(108 await this.helper.executeExtrinsic(
109 signer,109 signer,
110 'api.tx.foreignAssets.forceRegisterForeignAsset',110 'api.tx.foreignAssets.forceRegisterForeignAsset',
111 [assetId, this.helper.util.str2vec(name), tokenPrefix, mode],111 [{V3: assetId}, this.helper.util.str2vec(name), tokenPrefix, mode],
112 true,112 true,
113 );113 );
114 }114 }
modifiedpallets/foreign-assets/src/lib.rsdiffbeforeafterboth
--- a/pallets/foreign-assets/src/lib.rs
+++ b/pallets/foreign-assets/src/lib.rs
@@ -35,6 +35,7 @@
 use staging_xcm::{
 	opaque::latest::{prelude::XcmError, Weight},
 	v3::{prelude::*, MultiAsset, XcmContext},
+	VersionedAssetId,
 };
 use staging_xcm_executor::{
 	traits::{ConvertLocation, Error as XcmExecutorError, TransactAsset, WeightTrader},
@@ -90,6 +91,9 @@
 	pub enum Error<T> {
 		/// The foreign asset is already registered.
 		ForeignAssetAlreadyRegistered,
+
+		/// The given asset ID could not be converted into the current XCM version.
+		BadForeignAssetId,
 	}
 
 	#[pallet::event]
@@ -98,7 +102,7 @@
 		/// The foreign asset registered.
 		ForeignAssetRegistered {
 			collection_id: CollectionId,
-			asset_id: Box<AssetId>,
+			asset_id: Box<VersionedAssetId>,
 		},
 	}
 
@@ -147,15 +151,21 @@
 		#[pallet::weight(<T as Config>::WeightInfo::register_foreign_asset())]
 		pub fn force_register_foreign_asset(
 			origin: OriginFor<T>,
-			asset_id: Box<AssetId>,
+			versioned_asset_id: Box<VersionedAssetId>,
 			name: CollectionName,
 			token_prefix: CollectionTokenPrefix,
 			mode: ForeignCollectionMode,
 		) -> DispatchResult {
 			T::ForceRegisterOrigin::ensure_origin(origin.clone())?;
 
+			let asset_id: AssetId = versioned_asset_id
+				.as_ref()
+				.clone()
+				.try_into()
+				.map_err(|()| Error::<T>::BadForeignAssetId)?;
+
 			ensure!(
-				!<ForeignAssetToCollection<T>>::contains_key(*asset_id),
+				!<ForeignAssetToCollection<T>>::contains_key(asset_id),
 				<Error<T>>::ForeignAssetAlreadyRegistered,
 			);
 
@@ -179,12 +189,12 @@
 				},
 			)?;
 
-			<ForeignAssetToCollection<T>>::insert(*asset_id, collection_id);
-			<CollectionToForeignAsset<T>>::insert(collection_id, *asset_id);
+			<ForeignAssetToCollection<T>>::insert(asset_id, collection_id);
+			<CollectionToForeignAsset<T>>::insert(collection_id, asset_id);
 
 			Self::deposit_event(Event::<T>::ForeignAssetRegistered {
 				collection_id,
-				asset_id,
+				asset_id: versioned_asset_id,
 			});
 
 			Ok(())