git.delta.rocks / unique-network / refs/commits / 05427f7b990f

difftreelog

fix rfts are unsupported in XCM

Daniel Shiposha2023-10-23parent: #a8213d4.patch.diff
in: master

2 files changed

modifiedpallets/foreign-assets/src/benchmarking.rsdiffbeforeafterboth
before · pallets/foreign-assets/src/benchmarking.rs
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617#![allow(missing_docs)]1819use frame_benchmarking::v2::*;20use frame_system::RawOrigin;21use pallet_common::benchmarking::create_u16_data;22use sp_std::vec;23use staging_xcm::prelude::*;24use up_data_structs::{CollectionMode, MAX_COLLECTION_NAME_LENGTH};2526use super::{Call, Config, Pallet};2728#[benchmarks]29mod benchmarks {3031	use super::*;3233	#[benchmark]34	fn force_register_foreign_asset() -> Result<(), BenchmarkError> {35		let location =36			MultiLocation::from(X3(Parachain(1000), PalletInstance(42), GeneralIndex(1)));37		let name = create_u16_data::<MAX_COLLECTION_NAME_LENGTH>();38		let mode = CollectionMode::NFT;3940		#[extrinsic_call]41		_(RawOrigin::Root, location, name, mode);4243		Ok(())44	}45}
after · pallets/foreign-assets/src/benchmarking.rs
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617#![allow(missing_docs)]1819use frame_benchmarking::v2::*;20use frame_system::RawOrigin;21use pallet_common::benchmarking::{create_data, create_u16_data};22use sp_std::vec;23use staging_xcm::prelude::*;24use up_data_structs::{MAX_COLLECTION_NAME_LENGTH, MAX_TOKEN_PREFIX_LENGTH};2526use super::{Call, Config, ForeignCollectionMode, Pallet};2728#[benchmarks]29mod benchmarks {3031	use super::*;3233	#[benchmark]34	fn force_register_foreign_asset() -> Result<(), BenchmarkError> {35		let location =36			MultiLocation::from(X3(Parachain(1000), PalletInstance(42), GeneralIndex(1)));37		let name = create_u16_data::<MAX_COLLECTION_NAME_LENGTH>();38		let token_prefix = create_data::<MAX_TOKEN_PREFIX_LENGTH>();39		let mode = ForeignCollectionMode::NFT;4041		#[extrinsic_call]42		_(RawOrigin::Root, location, name, token_prefix, mode);4344		Ok(())45	}46}
modifiedpallets/foreign-assets/src/lib.rsdiffbeforeafterboth
--- a/pallets/foreign-assets/src/lib.rs
+++ b/pallets/foreign-assets/src/lib.rs
@@ -39,8 +39,9 @@
 	Assets,
 };
 use up_data_structs::{
-	budget::ZeroBudget, CollectionId, CollectionMode, CollectionName, CreateCollectionData,
-	CreateFungibleData, CreateItemData, CreateNftData, Property, PropertyKey, TokenId,
+	budget::ZeroBudget, CollectionId, CollectionMode, CollectionName, CollectionTokenPrefix,
+	CreateCollectionData, CreateFungibleData, CreateItemData, CreateNftData, Property, PropertyKey,
+	TokenId,
 };
 
 pub mod weights;
@@ -87,7 +88,7 @@
 
 	#[pallet::error]
 	pub enum Error<T> {
-		/// The foreign asset is already registered
+		/// The foreign asset is already registered.
 		ForeignAssetAlreadyRegistered,
 	}
 
@@ -136,7 +137,8 @@
 			origin: OriginFor<T>,
 			reserve_location: MultiLocation,
 			name: CollectionName,
-			mode: CollectionMode,
+			token_prefix: CollectionTokenPrefix,
+			mode: ForeignCollectionMode,
 		) -> DispatchResult {
 			T::ForceRegisterOrigin::ensure_origin(origin.clone())?;
 
@@ -160,8 +162,9 @@
 				is_special_collection,
 				CreateCollectionData {
 					name,
+					token_prefix,
 					description,
-					mode,
+					mode: mode.into(),
 
 					properties: vec![Property {
 						key: Self::reserve_location_property_key(),
@@ -560,6 +563,21 @@
 	weights::{WeightToFee, WeightToFeePolynomial},
 };
 
+#[derive(Encode, Decode, Eq, Debug, Clone, PartialEq, TypeInfo, MaxEncodedLen)]
+pub enum ForeignCollectionMode {
+	NFT,
+	Fungible(u8),
+}
+
+impl Into<CollectionMode> for ForeignCollectionMode {
+	fn into(self) -> CollectionMode {
+		match self {
+			Self::NFT => CollectionMode::NFT,
+			Self::Fungible(decimals) => CollectionMode::Fungible(decimals),
+		}
+	}
+}
+
 pub struct FreeForAll;
 
 impl WeightTrader for FreeForAll {