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
--- 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<address> {
 		let (caller, name, description, token_prefix, _base_uri_value) =
 			convert_data::<T>(caller, name, description, token_prefix, "".into())?;
-		let data = make_data::<T>(name, CollectionMode::NFT, description, token_prefix, Default::default(), false)?;
+		let data = make_data::<T>(
+			name,
+			CollectionMode::NFT,
+			description,
+			token_prefix,
+			Default::default(),
+			false,
+		)?;
 		let collection_id =
 			<pallet_nonfungible::Pallet<T>>::init_collection(caller.clone(), data, false)
 				.map_err(pallet_evm_coder_substrate::dispatch_to_evm::<T>)?;
@@ -197,9 +193,16 @@
 	) -> Result<address> {
 		let (caller, name, description, token_prefix, base_uri_value) =
 			convert_data::<T>(caller, name, description, token_prefix, base_uri)?;
-		let data = make_data::<T>(name, CollectionMode::NFT, description, token_prefix, base_uri_value, true)?;
+		let data = make_data::<T>(
+			name,
+			CollectionMode::NFT,
+			description,
+			token_prefix,
+			base_uri_value,
+			true,
+		)?;
 		let collection_id =
-			<pallet_nonfungible::Pallet<T>>::init_collection(caller.clone(), data, false)
+			<pallet_nonfungible::Pallet<T>>::init_collection(caller.clone(), data, true)
 				.map_err(pallet_evm_coder_substrate::dispatch_to_evm::<T>)?;
 
 		let address = pallet_common::eth::collection_id_to_address(collection_id);