difftreelog
CORE-325 Return error for non ShemaVersion::ImageURL
in: master
1 file changed
pallets/nonfungible/src/erc.rsdiffbeforeafterboth14// You should have received a copy of the GNU General Public License14// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.161617extern crate alloc;17use core::{18use core::{18 char::{REPLACEMENT_CHARACTER, decode_utf16},19 char::{REPLACEMENT_CHARACTER, decode_utf16},19 convert::TryInto,20 convert::TryInto,20};21};21use evm_coder::{ToLog, execution::*, generate_stubgen, solidity, solidity_interface, types::*, weight};22use evm_coder::{ToLog, execution::*, generate_stubgen, solidity, solidity_interface, types::*, weight};22use frame_support::BoundedVec;23use frame_support::BoundedVec;23use up_data_structs::TokenId;24use up_data_structs::{TokenId, SchemaVersion};24use pallet_evm_coder_substrate::dispatch_to_evm;25use pallet_evm_coder_substrate::dispatch_to_evm;25use sp_core::{H160, U256};26use sp_core::{H160, U256};26use sp_std::{vec::Vec, vec};27use sp_std::{vec::Vec, vec};35 SelfWeightOf, weights::WeightInfo,36 SelfWeightOf, weights::WeightInfo,36};37};3839fn error_unsupported_shema_version() -> Error {40 alloc::format!("Unsupported shema version! Support only {:?}", SchemaVersion::ImageURL).as_str().into()41}374238#[derive(ToLog)]43#[derive(ToLog)]39pub enum ERC721Events {44pub enum ERC721Events {72#[solidity_interface(name = "ERC721Metadata")]77#[solidity_interface(name = "ERC721Metadata")]73impl<T: Config> NonfungibleHandle<T> {78impl<T: Config> NonfungibleHandle<T> {74 fn name(&self) -> Result<string> {79 fn name(&self) -> Result<string> {80 if let SchemaVersion::ImageURL = self.schema_version {75 Ok(decode_utf16(self.name.iter().copied())81 Ok(decode_utf16(self.name.iter().copied())76 .map(|r| r.unwrap_or(REPLACEMENT_CHARACTER))82 .map(|r| r.unwrap_or(REPLACEMENT_CHARACTER))77 .collect::<string>())83 .collect::<string>())78 }84 } else {85 Err(error_unsupported_shema_version())86 }87 }79 fn symbol(&self) -> Result<string> {88 fn symbol(&self) -> Result<string> {89 if let SchemaVersion::ImageURL = self.schema_version {80 Ok(string::from_utf8_lossy(&self.token_prefix).into())90 Ok(string::from_utf8_lossy(&self.token_prefix).into())81 }91 } else {92 Err(error_unsupported_shema_version())93 }94 }829583 /// Returns token's const_metadata96 /// Returns token's const_metadata84 #[solidity(rename_selector = "tokenURI")]97 #[solidity(rename_selector = "tokenURI")]85 fn token_uri(&self, token_id: uint256) -> Result<string> {98 fn token_uri(&self, token_id: uint256) -> Result<string> {99 if let SchemaVersion::ImageURL = self.schema_version {86 self.consume_store_reads(1)?;100 self.consume_store_reads(1)?;87 let token_id: u32 = token_id.try_into().map_err(|_| "token id overflow")?;101 let token_id: u32 = token_id.try_into().map_err(|_| "token id overflow")?;88 Ok(string::from_utf8_lossy(102 Ok(string::from_utf8_lossy(91 .const_data,105 .const_data,92 )106 )93 .into())107 .into())94 }108 } else {109 Err(error_unsupported_shema_version())110 }111 }95}112}96113270 token_id: uint256,287 token_id: uint256,271 token_uri: string,288 token_uri: string,272 ) -> Result<bool> {289 ) -> Result<bool> {290 if let SchemaVersion::ImageURL = self.schema_version {273 let caller = T::CrossAccountId::from_eth(caller);291 let caller = T::CrossAccountId::from_eth(caller);274 let to = T::CrossAccountId::from_eth(to);292 let to = T::CrossAccountId::from_eth(to);275 let token_id: u32 = token_id.try_into().map_err(|_| "amount overflow")?;293 let token_id: u32 = token_id.try_into().map_err(|_| "amount overflow")?;294 )312 )295 .map_err(dispatch_to_evm::<T>)?;313 .map_err(dispatch_to_evm::<T>)?;296 Ok(true)314 Ok(true)297 }315 } else {316 Err(error_unsupported_shema_version())317 }318 }298319299 /// Not implemented320 /// Not implemented411 to: address,432 to: address,412 tokens: Vec<(uint256, string)>,433 tokens: Vec<(uint256, string)>,413 ) -> Result<bool> {434 ) -> Result<bool> {435 if let SchemaVersion::ImageURL = self.schema_version {414 let caller = T::CrossAccountId::from_eth(caller);436 let caller = T::CrossAccountId::from_eth(caller);415 let to = T::CrossAccountId::from_eth(to);437 let to = T::CrossAccountId::from_eth(to);416 let mut expected_index = <TokensMinted<T>>::get(self.id)438 let mut expected_index = <TokensMinted<T>>::get(self.id)436458 437 <Pallet<T>>::create_multiple_items(self, &caller, data).map_err(dispatch_to_evm::<T>)?;459 <Pallet<T>>::create_multiple_items(self, &caller, data).map_err(dispatch_to_evm::<T>)?;438 Ok(true)460 Ok(true)439 }461 } else {462 Err(error_unsupported_shema_version())463 }464 }440}465}441466