difftreelog
fix rfts are unsupported in XCM
in: master
2 files changed
pallets/foreign-assets/src/benchmarking.rsdiffbeforeafterboth181819use frame_benchmarking::v2::*;19use frame_benchmarking::v2::*;20use frame_system::RawOrigin;20use frame_system::RawOrigin;21use pallet_common::benchmarking::create_u16_data;21use pallet_common::benchmarking::{create_data, create_u16_data};22use sp_std::vec;22use sp_std::vec;23use staging_xcm::prelude::*;23use staging_xcm::prelude::*;24use up_data_structs::{CollectionMode, MAX_COLLECTION_NAME_LENGTH};24use up_data_structs::{MAX_COLLECTION_NAME_LENGTH, MAX_TOKEN_PREFIX_LENGTH};252526use super::{Call, Config, Pallet};26use super::{Call, Config, ForeignCollectionMode, Pallet};272728#[benchmarks]28#[benchmarks]29mod benchmarks {29mod benchmarks {35 let location =35 let location =36 MultiLocation::from(X3(Parachain(1000), PalletInstance(42), GeneralIndex(1)));36 MultiLocation::from(X3(Parachain(1000), PalletInstance(42), GeneralIndex(1)));37 let name = create_u16_data::<MAX_COLLECTION_NAME_LENGTH>();37 let name = create_u16_data::<MAX_COLLECTION_NAME_LENGTH>();38 let token_prefix = create_data::<MAX_TOKEN_PREFIX_LENGTH>();38 let mode = CollectionMode::NFT;39 let mode = ForeignCollectionMode::NFT;394040 #[extrinsic_call]41 #[extrinsic_call]41 _(RawOrigin::Root, location, name, mode);42 _(RawOrigin::Root, location, name, token_prefix, mode);424343 Ok(())44 Ok(())44 }45 }pallets/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 {