difftreelog
minor: Fix tokenURI logic.
in: master
2 files changed
pallets/nonfungible/src/erc.rsdiffbeforeafterboth219 /// @return token's const_metadata219 /// @return token's const_metadata220 #[solidity(rename_selector = "tokenURI")]220 #[solidity(rename_selector = "tokenURI")]221 fn token_uri(&self, token_id: uint256) -> Result<string> {221 fn token_uri(&self, token_id: uint256) -> Result<string> {222 let token_id: u32 = token_id.try_into().map_err(|_| "token id overflow")?; 222 let is_erc721 = || {223224 if let Ok(shema_name) = get_token_property(self, token_id, &schema_name_key()) {223 if let Some(shema_name) = pallet_common::Pallet::<T>::get_collection_property(self.id, &schema_name_key()) {225 if shema_name != "ERC721" {224 let shema_name = shema_name.into_inner();226 return Ok("".into());225 shema_name == b"ERC721"227 }228 } else {226 } else {229 return Ok("".into());227 false230 }228 }229 };230231 let token_id_u32: u32 = token_id.try_into().map_err(|_| "token id overflow")?;231232232 if let Ok(url) = get_token_property(self, token_id, &u_key()) {233 if let Ok(url) = get_token_property(self, token_id_u32, &u_key()) {233 if !url.is_empty() {234 if !url.is_empty() {234 return Ok(url);235 return Ok(url);235 }236 }236 }237 } else if !is_erc721() {238 return Err("tokenURI not set".into());239 }237240238 if let Ok(base_uri) = get_token_property(self, token_id, &base_uri_key()) {241 if let Some(base_uri) = pallet_common::Pallet::<T>::get_collection_property(self.id, &base_uri_key()) {239 if !base_uri.is_empty() {242 if !base_uri.is_empty() {243 let base_uri = string::from_utf8(base_uri.into_inner()).map_err(|e| {244 Error::Revert(alloc::format!(245 "Can not convert value \"baseURI\" to string with error \"{}\"",246 e247 ))248 })?;240 if let Ok(suffix) = get_token_property(self, token_id, &s_key()) {249 if let Ok(suffix) = get_token_property(self, token_id_u32, &s_key()) {241 if !suffix.is_empty() {250 if !suffix.is_empty() {242 return Ok(base_uri + suffix.as_str());251 return Ok(base_uri + suffix.as_str());243 }252 }484 token_id: uint256,493 token_id: uint256,485 token_uri: string,494 token_uri: string,486 ) -> Result<bool> {495 ) -> Result<bool> {487 let key = token_uri_key();496 let key = u_key();488 let permission = get_token_permission::<T>(self.id, &key)?;497 let permission = get_token_permission::<T>(self.id, &key)?;489 if !permission.collection_admin {498 if !permission.collection_admin {490 return Err("Operation is not allowed".into());499 return Err("Operation is not allowed".into());554 .map_err(|_| Error::Revert("No permissions for collection".into()))?;567 .map_err(|_| Error::Revert("No permissions for collection".into()))?;555 let a = token_property_permissions568 let a = token_property_permissions556 .get(key)569 .get(key)557 .map(|p| p.clone())570 .map(Clone::clone)558 .ok_or_else(|| Error::Revert("No permission".into()))?;571 .ok_or_else(|| {572 let key = string::from_utf8(key.clone().into_inner()).unwrap_or_default();573 Error::Revert(alloc::format!("No permission for key {}", key))574 })?;559 Ok(a)575 Ok(a)560}576}561577pallets/unique/src/eth/mod.rsdiffbeforeafterboth95 let mut token_property_permissions =95 let mut token_property_permissions =96 up_data_structs::CollectionPropertiesPermissionsVec::default();96 up_data_structs::CollectionPropertiesPermissionsVec::default();9798 if add_properties {99 token_property_permissions100 .try_push(up_data_structs::PropertyKeyPermission {101 key: token_uri_key(),102 permission: up_data_structs::PropertyPermission {103 mutable: true,104 collection_admin: true,105 token_owner: false,106 },107 })108 .map_err(|e| Error::Revert(format!("{:?}", e)))?;10997110 token_property_permissions98 token_property_permissions111 .try_push(up_data_structs::PropertyKeyPermission {99 .try_push(up_data_structs::PropertyKeyPermission {118 })106 })119 .map_err(|e| Error::Revert(format!("{:?}", e)))?;107 .map_err(|e| Error::Revert(format!("{:?}", e)))?;120108109 if add_properties {121 token_property_permissions110 token_property_permissions122 .try_push(up_data_structs::PropertyKeyPermission {111 .try_push(up_data_structs::PropertyKeyPermission {123 key: s_key(),112 key: s_key(),144 })133 })145 .map_err(|e| Error::Revert(format!("{:?}", e)))?;134 .map_err(|e| Error::Revert(format!("{:?}", e)))?;146 }135 }147 }136 }148137149 let data = CreateCollectionData {138 let data = CreateCollectionData {150 name,139 name,202 true,203 )?;201 let collection_id =204 let collection_id =202 <pallet_nonfungible::Pallet<T>>::init_collection(caller.clone(), data, false)205 <pallet_nonfungible::Pallet<T>>::init_collection(caller.clone(), data, true)203 .map_err(pallet_evm_coder_substrate::dispatch_to_evm::<T>)?;206 .map_err(pallet_evm_coder_substrate::dispatch_to_evm::<T>)?;204207205 let address = pallet_common::eth::collection_id_to_address(collection_id);208 let address = pallet_common::eth::collection_id_to_address(collection_id);