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.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);