From 4458a1dde4ffbaa67fe7fdd45facb4a65a56f9a3 Mon Sep 17 00:00:00 2001 From: Trubnikov Sergey Date: Tue, 19 Jul 2022 08:18:11 +0000 Subject: [PATCH] minor: Fix tokenURI logic. --- --- a/pallets/nonfungible/src/erc.rs +++ b/pallets/nonfungible/src/erc.rs @@ -219,25 +219,34 @@ /// @return token's const_metadata #[solidity(rename_selector = "tokenURI")] fn token_uri(&self, token_id: uint256) -> Result { - let token_id: u32 = token_id.try_into().map_err(|_| "token id overflow")?; - - if let Ok(shema_name) = get_token_property(self, token_id, &schema_name_key()) { - if shema_name != "ERC721" { - return Ok("".into()); + let is_erc721 = || { + if let Some(shema_name) = pallet_common::Pallet::::get_collection_property(self.id, &schema_name_key()) { + let shema_name = shema_name.into_inner(); + shema_name == b"ERC721" + } else { + false } - } else { - return Ok("".into()); - } + }; + + let token_id_u32: u32 = token_id.try_into().map_err(|_| "token id overflow")?; - if let Ok(url) = get_token_property(self, token_id, &u_key()) { + if let Ok(url) = get_token_property(self, token_id_u32, &u_key()) { if !url.is_empty() { return Ok(url); } + } else if !is_erc721() { + return Err("tokenURI not set".into()); } - if let Ok(base_uri) = get_token_property(self, token_id, &base_uri_key()) { + if let Some(base_uri) = pallet_common::Pallet::::get_collection_property(self.id, &base_uri_key()) { if !base_uri.is_empty() { - if let Ok(suffix) = get_token_property(self, token_id, &s_key()) { + let base_uri = string::from_utf8(base_uri.into_inner()).map_err(|e| { + Error::Revert(alloc::format!( + "Can not convert value \"baseURI\" to string with error \"{}\"", + e + )) + })?; + if let Ok(suffix) = get_token_property(self, token_id_u32, &s_key()) { if !suffix.is_empty() { return Ok(base_uri + suffix.as_str()); } @@ -484,7 +493,7 @@ token_id: uint256, token_uri: string, ) -> Result { - let key = token_uri_key(); + let key = u_key(); let permission = get_token_permission::(self.id, &key)?; if !permission.collection_admin { return Err("Operation is not allowed".into()); @@ -535,7 +544,11 @@ } } -fn get_token_property(collection: &CollectionHandle, token_id: u32, key: &up_data_structs::PropertyKey) -> Result { +fn get_token_property( + collection: &CollectionHandle, + token_id: u32, + key: &up_data_structs::PropertyKey, +) -> Result { collection.consume_store_reads(1)?; let properties = >::try_get((collection.id, token_id)) .map_err(|_| Error::Revert("Token properties not found".into()))?; @@ -554,8 +567,11 @@ .map_err(|_| Error::Revert("No permissions for collection".into()))?; let a = token_property_permissions .get(key) - .map(|p| p.clone()) - .ok_or_else(|| Error::Revert("No permission".into()))?; + .map(Clone::clone) + .ok_or_else(|| { + let key = string::from_utf8(key.clone().into_inner()).unwrap_or_default(); + Error::Revert(alloc::format!("No permission for key {}", key)) + })?; Ok(a) } --- a/pallets/unique/src/eth/mod.rs +++ b/pallets/unique/src/eth/mod.rs @@ -95,29 +95,18 @@ let mut token_property_permissions = up_data_structs::CollectionPropertiesPermissionsVec::default(); - if add_properties { - token_property_permissions - .try_push(up_data_structs::PropertyKeyPermission { - key: token_uri_key(), - permission: up_data_structs::PropertyPermission { - mutable: true, - collection_admin: true, - token_owner: false, - }, - }) - .map_err(|e| Error::Revert(format!("{:?}", e)))?; - - token_property_permissions - .try_push(up_data_structs::PropertyKeyPermission { - key: u_key(), - permission: up_data_structs::PropertyPermission { - mutable: false, - collection_admin: true, - token_owner: false, - }, - }) - .map_err(|e| Error::Revert(format!("{:?}", e)))?; + token_property_permissions + .try_push(up_data_structs::PropertyKeyPermission { + key: u_key(), + permission: up_data_structs::PropertyPermission { + mutable: false, + collection_admin: true, + token_owner: false, + }, + }) + .map_err(|e| Error::Revert(format!("{:?}", e)))?; + if add_properties { token_property_permissions .try_push(up_data_structs::PropertyKeyPermission { key: s_key(), @@ -176,7 +165,14 @@ ) -> Result
{ let (caller, name, description, token_prefix, _base_uri_value) = convert_data::(caller, name, description, token_prefix, "".into())?; - let data = make_data::(name, CollectionMode::NFT, description, token_prefix, Default::default(), false)?; + let data = make_data::( + name, + CollectionMode::NFT, + description, + token_prefix, + Default::default(), + false, + )?; let collection_id = >::init_collection(caller.clone(), data, false) .map_err(pallet_evm_coder_substrate::dispatch_to_evm::)?; @@ -197,9 +193,16 @@ ) -> Result
{ let (caller, name, description, token_prefix, base_uri_value) = convert_data::(caller, name, description, token_prefix, base_uri)?; - let data = make_data::(name, CollectionMode::NFT, description, token_prefix, base_uri_value, true)?; + let data = make_data::( + name, + CollectionMode::NFT, + description, + token_prefix, + base_uri_value, + true, + )?; let collection_id = - >::init_collection(caller.clone(), data, false) + >::init_collection(caller.clone(), data, true) .map_err(pallet_evm_coder_substrate::dispatch_to_evm::)?; let address = pallet_common::eth::collection_id_to_address(collection_id); -- gitstuff