From 651e1c77e229cd47d2ba5eac79dd46f8612fdb39 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 30 Apr 2021 15:21:29 +0000 Subject: [PATCH] feat: support evm calls of data --- --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -1339,25 +1339,10 @@ item_id: TokenId, data: Vec ) -> DispatchResult { - let sender = ensure_signed(origin)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let target_collection = Self::get_collection(collection_id)?; - Self::token_exists(&target_collection, item_id)?; - - ensure!(ChainLimit::get().custom_data_limit >= data.len() as u32, Error::::TokenVariableDataLimitExceeded); - - // Modify permissions check - ensure!(Self::is_item_owner(sender.clone(), &target_collection, item_id) || - Self::is_owner_or_admin_permissions(&target_collection, sender.clone()), - Error::::NoPermission); - - match target_collection.mode - { - CollectionMode::NFT => Self::set_nft_variable_data(&target_collection, item_id, data)?, - CollectionMode::ReFungible => Self::set_re_fungible_variable_data(&target_collection, item_id, data)?, - CollectionMode::Fungible(_) => fail!(Error::::CantStoreMetadataInFungibleTokens), - _ => fail!(Error::::UnexpectedCollectionType) - }; + Self::set_variable_meta_data_internal(sender, &target_collection, item_id, data)?; Ok(()) } @@ -1383,7 +1368,7 @@ collection_id: CollectionId, version: SchemaVersion ) -> DispatchResult { - let sender = ensure_signed(origin)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let mut target_collection = Self::get_collection(collection_id)?; Self::check_owner_or_admin_permissions(&target_collection, &sender)?; target_collection.schema_version = version; @@ -1854,6 +1839,32 @@ Ok(()) } + pub fn set_variable_meta_data_internal( + sender: T::CrossAccountId, + collection: &CollectionHandle, + item_id: TokenId, + data: Vec, + ) -> DispatchResult { + Self::token_exists(&collection, item_id)?; + + ensure!(ChainLimit::get().custom_data_limit >= data.len() as u32, Error::::TokenVariableDataLimitExceeded); + + // Modify permissions check + ensure!(Self::is_item_owner(&sender, &collection, item_id) || + Self::is_owner_or_admin_permissions(&collection, &sender), + Error::::NoPermission); + + match collection.mode + { + CollectionMode::NFT => Self::set_nft_variable_data(&collection, item_id, data)?, + CollectionMode::ReFungible => Self::set_re_fungible_variable_data(&collection, item_id, data)?, + CollectionMode::Fungible(_) => fail!(Error::::CantStoreMetadataInFungibleTokens), + _ => fail!(Error::::UnexpectedCollectionType) + }; + + Ok(()) + } + pub fn create_multiple_items_internal( sender: T::CrossAccountId, collection: &CollectionHandle, -- gitstuff