From 383b7efb354ea57aebae07b97449e358ca9379c6 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Wed, 18 Oct 2023 15:26:16 +0000 Subject: [PATCH] refactor: remove redundant foreign flag, use foreign-assets pallet instead --- --- a/pallets/balances-adapter/src/common.rs +++ b/pallets/balances-adapter/src/common.rs @@ -368,10 +368,6 @@ } impl pallet_common::XcmExtensions for NativeFungibleHandle { - fn is_foreign(&self) -> bool { - false - } - fn create_item_internal( &self, _depositor: &::CrossAccountId, --- a/pallets/common/src/lib.rs +++ b/pallets/common/src/lib.rs @@ -1088,7 +1088,6 @@ read_only: flags.external, flags: RpcCollectionFlags { - foreign: flags.foreign, erc721metadata: flags.erc721metadata, }, }) @@ -1128,17 +1127,17 @@ /// Create new collection. /// /// * `owner` - The owner of the collection. + /// * `payer` - If set, the user that will pay a deposit for the collection creation. /// * `data` - Description of the created collection. - /// * `flags` - Extra flags to store. pub fn init_collection( owner: T::CrossAccountId, - payer: T::CrossAccountId, + payer: Option, data: CreateCollectionData, ) -> Result { ensure!(data.flags.is_allowed_for_user(), >::NoPermission); // Take a (non-refundable) deposit of collection creation - { + if let Some(payer) = payer { let mut imbalance = ::Currency>>::zero(); imbalance.subsume(::Currency::deposit( &T::TreasuryAccountId::get(), @@ -1153,16 +1152,6 @@ } Self::init_collection_internal(owner, data) - } - - /// Initializes the collection with ForeignCollection flag. Returns [CollectionId] on success, [DispatchError] otherwise. - pub fn init_foreign_collection( - owner: T::CrossAccountId, - mut data: CreateCollectionData, - ) -> Result { - data.flags.foreign = true; - let id = Self::init_collection_internal(owner, data)?; - Ok(id) } fn init_collection_internal( @@ -2348,9 +2337,6 @@ where T: Config, { - /// Is the collection a foreign one? - fn is_foreign(&self) -> bool; - /// Does the token have children? fn token_has_children(&self, _token: TokenId) -> bool { false --- a/pallets/foreign-assets/src/lib.rs +++ b/pallets/foreign-assets/src/lib.rs @@ -304,11 +304,10 @@ /// If the `asset_instance` is a part of a local collection, /// the function will return either `Ok(Some())` or an error if the token is not found. fn asset_instance_to_token_id( - xcm_ext: &dyn XcmExtensions, collection_id: CollectionId, asset_instance: &AssetInstance, ) -> Result, XcmError> { - if xcm_ext.is_foreign() { + if >::contains_key(collection_id) { Ok(Self::foreign_reserve_asset_instance_to_token_id( collection_id, asset_instance, @@ -363,7 +362,7 @@ to: T::CrossAccountId, ) -> XcmResult { let deposit_result = if let Some(token_id) = - Self::asset_instance_to_token_id(xcm_ext, collection_id, asset_instance)? + Self::asset_instance_to_token_id(collection_id, asset_instance)? { let depositor = &Self::pallet_account(); let from = depositor; @@ -389,7 +388,7 @@ asset_instance: &AssetInstance, from: T::CrossAccountId, ) -> XcmResult { - let token_id = Self::asset_instance_to_token_id(xcm_ext, collection_id, &asset_instance)? + let token_id = Self::asset_instance_to_token_id(collection_id, &asset_instance)? .ok_or(XcmError::AssetNotFound)?; if xcm_ext.token_has_children(token_id) { @@ -517,9 +516,8 @@ } Fungibility::NonFungible(asset_instance) => { - token_id = - Self::asset_instance_to_token_id(xcm_ext, collection_id, &asset_instance)? - .ok_or(XcmError::AssetNotFound)?; + token_id = Self::asset_instance_to_token_id(collection_id, &asset_instance)? + .ok_or(XcmError::AssetNotFound)?; amount = 1; map_error = |_| XcmError::FailedToTransactAsset("nonfungible item transfer failed") @@ -542,17 +540,11 @@ if collection_id == NATIVE_FUNGIBLE_COLLECTION_ID { Some(Here.into()) } else { - let dispatch = T::CollectionDispatch::dispatch(collection_id).ok()?; - let collection = dispatch.as_dyn(); - let xcm_ext = collection.xcm_extensions()?; - - if xcm_ext.is_foreign() { - >::collection_to_foreign_reserve_location(collection_id) - } else { + >::collection_to_foreign_reserve_location(collection_id).or_else(|| { T::SelfLocation::get() .pushed_with_interior(GeneralIndex(collection_id.0.into())) .ok() - } + }) } } } --- a/pallets/fungible/src/common.rs +++ b/pallets/fungible/src/common.rs @@ -459,10 +459,6 @@ } impl XcmExtensions for FungibleHandle { - fn is_foreign(&self) -> bool { - self.flags.foreign - } - fn create_item_internal( &self, depositor: &::CrossAccountId, --- a/pallets/nonfungible/src/common.rs +++ b/pallets/nonfungible/src/common.rs @@ -572,10 +572,6 @@ } impl XcmExtensions for NonfungibleHandle { - fn is_foreign(&self) -> bool { - self.flags.foreign - } - fn token_has_children(&self, token: TokenId) -> bool { >::token_has_children(self.id, token) } --- a/pallets/refungible/src/lib.rs +++ b/pallets/refungible/src/lib.rs @@ -306,7 +306,7 @@ payer: T::CrossAccountId, data: CreateCollectionData, ) -> Result { - >::init_collection(owner, payer, data) + >::init_collection(owner, Some(payer), data) } /// Destroy RFT collection --- a/primitives/data-structs/src/lib.rs +++ b/primitives/data-structs/src/lib.rs @@ -378,9 +378,9 @@ #[derive(AbiCoderFlags, Bitfields, Clone, Copy, PartialEq, Eq, Debug, Default)] #[bondrewd(enforce_bytes = 1)] pub struct CollectionFlags { - /// Tokens in foreign collections can be transferred, but not burnt + /// Reserved flag #[bondrewd(bits = "0..1")] - pub foreign: bool, + pub reserved_0: bool, /// Supports ERC721Metadata #[bondrewd(bits = "1..2")] pub erc721metadata: bool, @@ -395,7 +395,7 @@ impl CollectionFlags { pub fn is_allowed_for_user(self) -> bool { - !self.foreign && !self.external && self.reserved == 0 + !self.reserved_0 && !self.external && self.reserved == 0 } } @@ -461,8 +461,6 @@ #[derive(Debug, Encode, Decode, Clone, PartialEq, TypeInfo, Serialize, Deserialize)] pub struct RpcCollectionFlags { - /// Is collection is foreign. - pub foreign: bool, /// Collection supports ERC721Metadata. pub erc721metadata: bool, } @@ -505,7 +503,7 @@ pub read_only: bool, /// Extra collection flags - #[version(2.., upper(RpcCollectionFlags {foreign: false, erc721metadata: false}))] + #[version(2.., upper(RpcCollectionFlags {erc721metadata: false}))] pub flags: RpcCollectionFlags, } @@ -542,7 +540,6 @@ read_only: true, flags: RpcCollectionFlags { - foreign: false, erc721metadata: false, }, } --- a/runtime/common/dispatch.rs +++ b/runtime/common/dispatch.rs @@ -86,7 +86,7 @@ _ => {} }; - >::init_collection(sender, payer, data) + >::init_collection(sender, Some(payer), data) } fn create_foreign( @@ -106,7 +106,8 @@ _ => {} }; - >::init_foreign_collection(sender, data) + let payer = None; + >::init_collection(sender, payer, data) } fn destroy(sender: T::CrossAccountId, collection_id: CollectionId) -> DispatchResult { -- gitstuff