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

difftreelog

fix token uri == const_data

Yaroslav Bolyukin2021-08-11parent: #cc62c5a.patch.diff
in: master

2 files changed

modifiedpallets/nft/src/eth/erc.rsdiffbeforeafterboth
--- a/pallets/nft/src/eth/erc.rs
+++ b/pallets/nft/src/eth/erc.rs
@@ -2,7 +2,6 @@
 use evm_coder::{ToLog, execution::Result, solidity, solidity_interface, types::*};
 use nft_data_structs::{CreateItemData, CreateNftData};
 use core::convert::TryInto;
-use alloc::format;
 use crate::{
 	Allowances, Module, Balance, CollectionHandle, CollectionMode, Config, NftItemList,
 	ItemListIndex,
@@ -46,9 +45,15 @@
 
 #[solidity_interface(name = "ERC721Metadata", inline_is(InlineNameSymbol))]
 impl<T: Config> CollectionHandle<T> {
+	#[solidity(rename_selector = "tokenURI")]
 	fn token_uri(&self, token_id: uint256) -> Result<string> {
-		// TODO: We should standartize url prefix, maybe via offchain schema?
-		Ok(format!("unique.network/{}/{}", self.id, token_id))
+		let token_id: u32 = token_id.try_into().map_err(|_| "token id overflow")?;
+		Ok(string::from_utf8_lossy(
+			&<NftItemList<T>>::get(self.id, token_id)
+				.ok_or("token not found")?
+				.const_data,
+		)
+		.into())
 	}
 }
 
modifiedpallets/nft/src/eth/stubs/ERC721.soldiffbeforeafterboth
before · pallets/nft/src/eth/stubs/ERC721.sol
1// SPDX-License-Identifier: OTHER2// This code is automatically generated with `cargo test --package pallet-nft -- eth::erc::name --exact --nocapture --ignored`34pragma solidity >=0.8.0 <0.9.0;56// Common stubs holder7contract Dummy {8	uint8 dummy;9	string stub_error = "this contract is implemented in native";10}1112// Inline13contract ERC721Events {14	event Transfer(address from, address to, uint256 tokenId);15	event Approval(address owner, address approved, uint256 tokenId);16	event ApprovalForAll(address owner, address operator, bool approved);17}1819// Inline20contract ERC721MintableEvents {21	event MintingFinished();22}2324// Inline25contract InlineNameSymbol is Dummy {26	function name() public view returns (string memory) {27		require(false, stub_error);28		dummy;29		return "";30	}31	function symbol() public view returns (string memory) {32		require(false, stub_error);33		dummy;34		return "";35	}36}3738// Inline39contract InlineTotalSupply is Dummy {40	function totalSupply() public view returns (uint256) {41		require(false, stub_error);42		dummy;43		return 0;44	}45}4647contract ERC165 is Dummy {48	function supportsInterface(uint32 interfaceId) public view returns (bool) {49		require(false, stub_error);50		interfaceId;51		dummy;52		return false;53	}54}5556contract ERC721 is Dummy, ERC165, ERC721Events {57	function balanceOf(address owner) public view returns (uint256) {58		require(false, stub_error);59		owner;60		dummy;61		return 0;62	}63	function ownerOf(uint256 tokenId) public view returns (address) {64		require(false, stub_error);65		tokenId;66		dummy;67		return 0x0000000000000000000000000000000000000000;68	}69	function safeTransferFromWithData(address from, address to, uint256 tokenId, bytes memory data) public {70		require(false, stub_error);71		from;72		to;73		tokenId;74		data;75		dummy = 0;76	}77	function safeTransferFrom(address from, address to, uint256 tokenId) public {78		require(false, stub_error);79		from;80		to;81		tokenId;82		dummy = 0;83	}84	function transferFrom(address from, address to, uint256 tokenId) public {85		require(false, stub_error);86		from;87		to;88		tokenId;89		dummy = 0;90	}91	function approve(address approved, uint256 tokenId) public {92		require(false, stub_error);93		approved;94		tokenId;95		dummy = 0;96	}97	function setApprovalForAll(address operator, bool approved) public {98		require(false, stub_error);99		operator;100		approved;101		dummy = 0;102	}103	function getApproved(uint256 tokenId) public view returns (address) {104		require(false, stub_error);105		tokenId;106		dummy;107		return 0x0000000000000000000000000000000000000000;108	}109	function isApprovedForAll(address owner, address operator) public view returns (address) {110		require(false, stub_error);111		owner;112		operator;113		dummy;114		return 0x0000000000000000000000000000000000000000;115	}116}117118contract ERC721Burnable is Dummy {119	function burn(uint256 tokenId) public {120		require(false, stub_error);121		tokenId;122		dummy = 0;123	}124}125126contract ERC721Enumerable is Dummy, InlineTotalSupply {127	function tokenByIndex(uint256 index) public view returns (uint256) {128		require(false, stub_error);129		index;130		dummy;131		return 0;132	}133	function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256) {134		require(false, stub_error);135		owner;136		index;137		dummy;138		return 0;139	}140}141142contract ERC721Metadata is Dummy, InlineNameSymbol {143	function tokenUri(uint256 tokenId) public view returns (string memory) {144		require(false, stub_error);145		tokenId;146		dummy;147		return "";148	}149}150151contract ERC721Mintable is Dummy, ERC721MintableEvents {152	function mintingFinished() public view returns (bool) {153		require(false, stub_error);154		dummy;155		return false;156	}157	function mint(address to, uint256 tokenId) public returns (bool) {158		require(false, stub_error);159		to;160		tokenId;161		dummy = 0;162		return false;163	}164	function mintWithTokenURI(address to, uint256 tokenId, string memory tokenUri) public returns (bool) {165		require(false, stub_error);166		to;167		tokenId;168		tokenUri;169		dummy = 0;170		return false;171	}172	function finishMinting() public returns (bool) {173		require(false, stub_error);174		dummy = 0;175		return false;176	}177}178179contract ERC721UniqueExtensions is Dummy {180	function transfer(address to, uint256 tokenId) public {181		require(false, stub_error);182		to;183		tokenId;184		dummy = 0;185	}186	function nextTokenId() public view returns (uint256) {187		require(false, stub_error);188		dummy;189		return 0;190	}191}192193contract UniqueNFT is Dummy, ERC165, ERC721, ERC721Metadata, ERC721Enumerable, ERC721UniqueExtensions, ERC721Mintable, ERC721Burnable {194}
after · pallets/nft/src/eth/stubs/ERC721.sol
1// SPDX-License-Identifier: OTHER2// This code is automatically generated with `cargo test --package pallet-nft -- eth::erc::name --exact --nocapture --ignored`34pragma solidity >=0.8.0 <0.9.0;56// Common stubs holder7contract Dummy {8	uint8 dummy;9	string stub_error = "this contract is implemented in native";10}1112// Inline13contract ERC721Events {14	event Transfer(address from, address to, uint256 tokenId);15	event Approval(address owner, address approved, uint256 tokenId);16	event ApprovalForAll(address owner, address operator, bool approved);17}1819// Inline20contract ERC721MintableEvents {21	event MintingFinished();22}2324// Inline25contract InlineNameSymbol is Dummy {26	function name() public view returns (string memory) {27		require(false, stub_error);28		dummy;29		return "";30	}31	function symbol() public view returns (string memory) {32		require(false, stub_error);33		dummy;34		return "";35	}36}3738// Inline39contract InlineTotalSupply is Dummy {40	function totalSupply() public view returns (uint256) {41		require(false, stub_error);42		dummy;43		return 0;44	}45}4647contract ERC165 is Dummy {48	function supportsInterface(uint32 interfaceId) public view returns (bool) {49		require(false, stub_error);50		interfaceId;51		dummy;52		return false;53	}54}5556contract ERC721 is Dummy, ERC165, ERC721Events {57	function balanceOf(address owner) public view returns (uint256) {58		require(false, stub_error);59		owner;60		dummy;61		return 0;62	}63	function ownerOf(uint256 tokenId) public view returns (address) {64		require(false, stub_error);65		tokenId;66		dummy;67		return 0x0000000000000000000000000000000000000000;68	}69	function safeTransferFromWithData(address from, address to, uint256 tokenId, bytes memory data) public {70		require(false, stub_error);71		from;72		to;73		tokenId;74		data;75		dummy = 0;76	}77	function safeTransferFrom(address from, address to, uint256 tokenId) public {78		require(false, stub_error);79		from;80		to;81		tokenId;82		dummy = 0;83	}84	function transferFrom(address from, address to, uint256 tokenId) public {85		require(false, stub_error);86		from;87		to;88		tokenId;89		dummy = 0;90	}91	function approve(address approved, uint256 tokenId) public {92		require(false, stub_error);93		approved;94		tokenId;95		dummy = 0;96	}97	function setApprovalForAll(address operator, bool approved) public {98		require(false, stub_error);99		operator;100		approved;101		dummy = 0;102	}103	function getApproved(uint256 tokenId) public view returns (address) {104		require(false, stub_error);105		tokenId;106		dummy;107		return 0x0000000000000000000000000000000000000000;108	}109	function isApprovedForAll(address owner, address operator) public view returns (address) {110		require(false, stub_error);111		owner;112		operator;113		dummy;114		return 0x0000000000000000000000000000000000000000;115	}116}117118contract ERC721Burnable is Dummy {119	function burn(uint256 tokenId) public {120		require(false, stub_error);121		tokenId;122		dummy = 0;123	}124}125126contract ERC721Enumerable is Dummy, InlineTotalSupply {127	function tokenByIndex(uint256 index) public view returns (uint256) {128		require(false, stub_error);129		index;130		dummy;131		return 0;132	}133	function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256) {134		require(false, stub_error);135		owner;136		index;137		dummy;138		return 0;139	}140}141142contract ERC721Metadata is Dummy, InlineNameSymbol {143	function tokenURI(uint256 tokenId) public view returns (string memory) {144		require(false, stub_error);145		tokenId;146		dummy;147		return "";148	}149}150151contract ERC721Mintable is Dummy, ERC721MintableEvents {152	function mintingFinished() public view returns (bool) {153		require(false, stub_error);154		dummy;155		return false;156	}157	function mint(address to, uint256 tokenId) public returns (bool) {158		require(false, stub_error);159		to;160		tokenId;161		dummy = 0;162		return false;163	}164	function mintWithTokenURI(address to, uint256 tokenId, string memory tokenUri) public returns (bool) {165		require(false, stub_error);166		to;167		tokenId;168		tokenUri;169		dummy = 0;170		return false;171	}172	function finishMinting() public returns (bool) {173		require(false, stub_error);174		dummy = 0;175		return false;176	}177}178179contract ERC721UniqueExtensions is Dummy {180	function transfer(address to, uint256 tokenId) public {181		require(false, stub_error);182		to;183		tokenId;184		dummy = 0;185	}186	function nextTokenId() public view returns (uint256) {187		require(false, stub_error);188		dummy;189		return 0;190	}191}192193contract UniqueNFT is Dummy, ERC165, ERC721, ERC721Metadata, ERC721Enumerable, ERC721UniqueExtensions, ERC721Mintable, ERC721Burnable {194}