From 1eed41e9dfeaf5136ece87ea4bee9ece40ce9073 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Thu, 19 Oct 2023 11:00:34 +0000 Subject: [PATCH] fix: restore foreign flag, minor fixes --- --- a/pallets/common/src/benchmarking.rs +++ b/pallets/common/src/benchmarking.rs @@ -121,7 +121,7 @@ owner, CollectionMode::NFT, |owner: T::CrossAccountId, data| { - >::init_collection(owner.clone(), Some(owner), data) + >::init_collection(owner.clone(), Some(owner), false, data) }, |h| h, ) --- a/pallets/common/src/dispatch.rs +++ b/pallets/common/src/dispatch.rs @@ -78,6 +78,21 @@ sender: T::CrossAccountId, payer: Option, data: CreateCollectionData, + ) -> Result { + Self::create_internal(sender, payer, false, data) + } + + /// Create a collection. The collection will be created according to the value of [`data.mode`](CreateCollectionData::mode). + /// + /// * `sender` - The user who will become the owner of the collection. + /// * `payer` - If set, the user who pays the collection creation deposit. + /// * `data` - Description of the created collection. + /// * `is_special_collection` -- Whether this collection is a system one, i.e. can have special flags set. + fn create_internal( + sender: T::CrossAccountId, + payer: Option, + is_special_collection: bool, + data: CreateCollectionData, ) -> Result; /// Delete the collection. --- a/pallets/common/src/lib.rs +++ b/pallets/common/src/lib.rs @@ -1088,6 +1088,7 @@ read_only: flags.external, flags: RpcCollectionFlags { + foreign: flags.foreign, erc721metadata: flags.erc721metadata, }, }) @@ -1129,12 +1130,16 @@ /// * `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. + /// * `is_special_collection` -- Whether this collection is a special one, i.e. can have special flags set. pub fn init_collection( owner: T::CrossAccountId, payer: Option, + is_special_collection: bool, data: CreateCollectionData, ) -> Result { - ensure!(data.flags.is_allowed_for_user(), >::NoPermission); + if !is_special_collection { + ensure!(data.flags.is_allowed_for_user(), >::NoPermission); + } // Take a (non-refundable) deposit of collection creation if let Some(payer) = payer { --- a/pallets/foreign-assets/src/lib.rs +++ b/pallets/foreign-assets/src/lib.rs @@ -153,9 +153,11 @@ .expect("description length < max description length; qed"); let payer = None; - let collection_id = T::CollectionDispatch::create( + let is_special_collection = true; + let collection_id = T::CollectionDispatch::create_internal( foreign_collection_owner, payer, + is_special_collection, CreateCollectionData { name, description, --- a/pallets/fungible/src/benchmarking.rs +++ b/pallets/fungible/src/benchmarking.rs @@ -31,7 +31,7 @@ owner, CollectionMode::Fungible(0), |owner: T::CrossAccountId, data| { - >::init_collection(owner.clone(), Some(owner), data) + >::init_collection(owner.clone(), Some(owner), false, data) }, FungibleHandle::cast, ) --- a/pallets/nonfungible/src/benchmarking.rs +++ b/pallets/nonfungible/src/benchmarking.rs @@ -58,7 +58,7 @@ owner, CollectionMode::NFT, |owner: T::CrossAccountId, data| { - >::init_collection(owner.clone(), Some(owner), data) + >::init_collection(owner.clone(), Some(owner), false, data) }, NonfungibleHandle::cast, ) --- a/pallets/refungible/src/benchmarking.rs +++ b/pallets/refungible/src/benchmarking.rs @@ -20,6 +20,7 @@ use pallet_common::{ bench_init, benchmarking::{create_collection_raw, property_key, property_value}, + Pallet as PalletCommon, }; use sp_std::prelude::*; use up_data_structs::{ @@ -61,7 +62,9 @@ create_collection_raw( owner, CollectionMode::ReFungible, - |owner: T::CrossAccountId, data| >::init_collection(owner.clone(), owner, data), + |owner: T::CrossAccountId, data| { + >::init_collection(owner.clone(), Some(owner), false, data) + }, RefungibleHandle::cast, ) } --- a/pallets/refungible/src/lib.rs +++ b/pallets/refungible/src/lib.rs @@ -103,7 +103,7 @@ use sp_runtime::{ArithmeticError, DispatchError, DispatchResult, TransactionOutcome}; use sp_std::{collections::btree_map::BTreeMap, vec, vec::Vec}; use up_data_structs::{ - budget::Budget, mapping::TokenAddressMapping, AccessMode, CollectionId, CreateCollectionData, + budget::Budget, mapping::TokenAddressMapping, AccessMode, CollectionId, CreateRefungibleExMultipleOwners, PropertiesPermissionMap, Property, PropertyKey, PropertyKeyPermission, PropertyScope, PropertyValue, TokenId, TokenOwnerError, TokenProperties as TokenPropertiesT, MAX_REFUNGIBLE_PIECES, @@ -296,19 +296,6 @@ // unchecked calls skips any permission checks impl Pallet { - /// Create RFT collection - /// - /// `init_collection` will take non-refundable deposit for collection creation. - /// - /// - `data`: Contains settings for collection limits and permissions. - pub fn init_collection( - owner: T::CrossAccountId, - payer: T::CrossAccountId, - data: CreateCollectionData, - ) -> Result { - >::init_collection(owner, Some(payer), data) - } - /// Destroy RFT collection /// /// `destroy_collection` will throw error if collection contains any tokens. --- a/primitives/data-structs/src/lib.rs +++ b/primitives/data-structs/src/lib.rs @@ -380,7 +380,7 @@ pub struct CollectionFlags { /// Reserved flag #[bondrewd(bits = "0..1")] - pub reserved_0: bool, + pub foreign: 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.reserved_0 && !self.external && self.reserved == 0 + !self.foreign && !self.external && self.reserved == 0 } } @@ -461,6 +461,8 @@ #[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, } @@ -503,7 +505,7 @@ pub read_only: bool, /// Extra collection flags - #[version(2.., upper(RpcCollectionFlags {erc721metadata: false}))] + #[version(2.., upper(RpcCollectionFlags {foreign: false, erc721metadata: false}))] pub flags: RpcCollectionFlags, } @@ -540,6 +542,7 @@ read_only: true, flags: RpcCollectionFlags { + foreign: false, erc721metadata: false, }, } --- a/runtime/common/config/pallets/foreign_asset.rs +++ b/runtime/common/config/pallets/foreign_asset.rs @@ -1,4 +1,6 @@ use frame_support::{parameter_types, PalletId}; +#[cfg(not(feature = "governance"))] +use frame_system::EnsureRoot; use pallet_evm::account::CrossAccountId; use sp_core::H160; use staging_xcm::prelude::*; @@ -6,10 +8,6 @@ #[cfg(feature = "governance")] use crate::runtime_common::config::governance; - -#[cfg(not(feature = "governance"))] -use frame_system::EnsureRoot; - use crate::{ runtime_common::config::{ ethereum::CrossAccountId as ConfigCrossAccountId, --- a/runtime/common/dispatch.rs +++ b/runtime/common/dispatch.rs @@ -66,9 +66,10 @@ } } - fn create( + fn create_internal( sender: T::CrossAccountId, payer: Option, + is_special_collection: bool, data: CreateCollectionData, ) -> Result { match data.mode { @@ -86,7 +87,7 @@ _ => {} }; - >::init_collection(sender, payer, data) + >::init_collection(sender, payer, is_special_collection, data) } fn destroy(sender: T::CrossAccountId, collection_id: CollectionId) -> DispatchResult { -- gitstuff