git.delta.rocks / unique-network / refs/commits / d83cc5b63195

difftreelog

CORE-325 Return error for non ShemaVersion::ImageURL

Trubnikov Sergey2022-04-06parent: #219f5f0.patch.diff
in: master

1 file changed

modifiedpallets/nonfungible/src/erc.rsdiffbeforeafterboth
14// You should have received a copy of the GNU General Public License14// You should have received a copy of the GNU General Public License
15// 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/>.
1616
17extern 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};
38
39fn error_unsupported_shema_version() -> Error {
40 alloc::format!("Unsupported shema version! Support only {:?}", SchemaVersion::ImageURL).as_str().into()
41}
3742
38#[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 }
8295
83 /// Returns token's const_metadata96 /// Returns token's const_metadata
84 #[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}
96113
270 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 }
298319
299 /// Not implemented320 /// Not implemented
411 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