git.delta.rocks / unique-network / refs/commits / 4458a1dde4ff

difftreelog

minor: Fix tokenURI logic.

Trubnikov Sergey2022-07-19parent: #2dd986e.patch.diff
in: master

2 files changed

modifiedpallets/nonfungible/src/erc.rsdiffbeforeafterboth
219 /// @return token's const_metadata219 /// @return token's const_metadata
220 #[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 = || {
223
224 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 false
230 }228 }
229 };
230
231 let token_id_u32: u32 = token_id.try_into().map_err(|_| "token id overflow")?;
231232
232 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 }
237240
238 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 e
247 ))
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_permissions
556 .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}
561577
modifiedpallets/unique/src/eth/mod.rsdiffbeforeafterboth
95 let mut token_property_permissions =95 let mut token_property_permissions =
96 up_data_structs::CollectionPropertiesPermissionsVec::default();96 up_data_structs::CollectionPropertiesPermissionsVec::default();
97
98 if add_properties {
99 token_property_permissions
100 .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)))?;
10997
110 token_property_permissions98 token_property_permissions
111 .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)))?;
120108
109 if add_properties {
121 token_property_permissions110 token_property_permissions
122 .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 }
148137
149 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>)?;
204207
205 let address = pallet_common::eth::collection_id_to_address(collection_id);208 let address = pallet_common::eth::collection_id_to_address(collection_id);