我们建议在现有的 ERC-721 实现中添加三个 sol 文件。
以下是提议的 sol 文件的详细信息。
// ----- IERC721GetImageSvg.sol -------------------------
pragmasolidity^0.5.0;import"@openzeppelin/contracts/token/ERC721/IERC721.sol";/**
* @title ERC-721 Non-Fungible Token Standard, optional retrieving SVG image extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/contractIERC721GetImageSvgisIERC721{functiongetTokenImageSvg(uint256tokenId)externalviewreturns(stringmemory);}// ----- ERC721GetImageSvg.sol -------------------------
pragmasolidity^0.5.0;import"@openzeppelin/contracts/GSN/Context.sol";import"@openzeppelin/contracts/token/ERC721/./ERC721.sol";import"@openzeppelin/contracts/introspection/ERC165.sol";import"./IERC721GetImageSvg.sol";contractERC721GetImageSvgisContext,ERC165,ERC721,IERC721GetImageSvg{// Mapping for token Images
// 代币图像的映射
mapping(uint256=>string)private_tokenImageSvgs;/*
* bytes4(keccak256('getTokenImageSvg(uint256)')) == 0x87d2f48c
*
* => 0x87d2f48c == 0x87d2f48c
*/bytes4privateconstant_INTERFACE_ID_ERC721_GET_TOKEN_IMAGE_SVG=0x87d2f48c;/**
* @dev Constructor function
* @dev 构造函数
*/constructor()public{// register the supported interfaces to conform to ERC721 via ERC165
// 注册支持的接口以通过 ERC165 符合 ERC721
_registerInterface(_INTERFACE_ID_ERC721_GET_TOKEN_IMAGE_SVG);}/**
* @dev Returns an SVG Image for a given token ID.
* 如果代币 ID 不存在,则抛出异常。 可能会返回空字符串。
* @param tokenId uint256 ID of the token to query
* @param tokenId uint256 要查询的代币的 ID
*/functiongetTokenImageSvg(uint256tokenId)externalviewreturns(stringmemory){require(_exists(tokenId),"ERC721GetImageSvg: SVG Image query for nonexistent token");return_tokenImageSvgs[tokenId];}/**
* @dev Internal function to set the token SVG image for a given token.
* @dev 用于为给定代币设置代币 SVG 图像的内部函数。
* Reverts if the token ID does not exist.
* 如果代币 ID 不存在,则恢复。
* @param tokenId uint256 ID of the token to set its SVG image
* @param tokenId uint256 要设置其 SVG 图像的代币的 ID
* @param imagesvg string SVG to assign
* @param imagesvg 字符串 SVG 分配
*/functionsetTokenImageSvg(uint256tokenId,stringmemoryimagesvg)internal{require(_exists(tokenId),"ERC721GetImageSvg: SVG image set of nonexistent token");_tokenImageSvgs[tokenId]=imagesvg;}}// ----- ERC721ImageSvgMintable.sol -------------------------
pragmasolidity^0.5.0;import"@openzeppelin/contracts/token/ERC721/ERC721Metadata.sol";import"@openzeppelin/contracts/access/roles/MinterRole.sol";import"./ERC721GetImageSvg.sol";/**
* @title ERC721ImageSvgMintable
* @dev ERC721 minting logic with imagesvg.
* @dev 具有 imagesvg 的 ERC721 铸造逻辑。
*/contractERC721ImageSvgMintableisERC721,ERC721Metadata,ERC721GetImageSvg,MinterRole{/**
* @dev Function to mint tokens.
* @dev 用于铸造代币的函数。
* @param to The address that will receive the minted tokens.
* @param to 将接收铸造代币的地址。
* @param tokenId The token id to mint.
* @param tokenId 要铸造的代币 ID。
* @param tokenImageSvg The token SVG image of the minted token.
* @param tokenImageSvg 铸造代币的代币 SVG 图像。
* @return A boolean that indicates if the operation was successful.
* @return 一个布尔值,指示操作是否成功。
*/functionmintWithTokenImageSvg(addressto,uint256tokenId,stringmemorytokenImageSvg)publiconlyMinterreturns(bool){_mint(to,tokenId);setTokenImageSvg(tokenId,tokenImageSvg);returntrue;}}我们建议在现有的ERC-1155实现中添加三个sol文件。以下是提议的sol文件的详细信息。// ----- IERC1155GetImageSvg.sol -------------------------
pragmasolidity^0.5.0;import"./IERC1155.sol";/**
* @title ERC-1155 Multi Token Standard, retrieving SVG image for a token
* @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1155.md
*/contractIERC1155GetImageSvgisIERC1155{functiongetTokenImageSvg(uint256tokenId)externalviewreturns(stringmemory);}// ----- ERC1155GetImageSvg.sol -------------------------
pragmasolidity^0.5.0;import"./ERC1155.sol";import"./IERC1155GetImageSvg.sol";contractERC1155GetImageSvgisERC165,ERC1155,IERC1155GetImageSvg{// Mapping for token Images
// 代币图像的映射
mapping(uint256=>string)private_tokenImageSvgs;/*
* bytes4(keccak256('getTokenImageSvg(uint256)')) == 0x87d2f48c
*
* => 0x87d2f48c == 0x87d2f48c
*/bytes4privateconstant_INTERFACE_ID_ERC1155_GET_TOKEN_IMAGE_SVG=0x87d2f48c;/**
* @dev Constructor function
* @dev 构造函数
*/constructor()public{// register the supported interfaces to conform to ERC1155 via ERC165
// 注册支持的接口以通过 ERC165 符合 ERC1155
_registerInterface(_INTERFACE_ID_ERC1155_GET_TOKEN_IMAGE_SVG);}/**
* @dev Returns an SVG Image for a given token ID.
* 如果代币 ID 不存在,则抛出异常。 可能会返回空字符串。
* @param tokenId uint256 ID of the token to query
* @param tokenId uint256 要查询的代币的 ID
*/functiongetTokenImageSvg(uint256tokenId)externalviewreturns(stringmemory){require(_exists(tokenId),"ERC1155GetImageSvg: SVG Image query for nonexistent token");return_tokenImageSvgs[tokenId];}/**
* @dev Internal function to set the token SVG image for a given token.
* @dev 用于为给定代币设置代币 SVG 图像的内部函数。
* Reverts if the token ID does not exist.
* 如果代币 ID 不存在,则恢复。
* @param tokenId uint256 ID of the token to set its SVG image
* @param tokenId uint256 要设置其 SVG 图像的代币的 ID
* @param imagesvg string SVG to assign
* @param imagesvg 字符串 SVG 分配
*/functionsetTokenImageSvg(uint256tokenId,stringmemoryimagesvg)internal{require(_exists(tokenId),"ERC1155GetImageSvg: SVG image set of nonexistent token");_tokenImageSvgs[tokenId]=imagesvg;}}// ----- ERC1155MixedFungibleWithSvgMintable.sol -------------------------
pragmasolidity^0.5.0;import"./ERC1155MixedFungibleMintable.sol";import"./ERC1155GetImageSvg.sol";/**
@dev Mintable form of ERC1155 with SVG images
@dev 具有 SVG 图像的 ERC1155 的可铸造形式
Shows how easy it is to mint new items with SVG images
显示了使用 SVG 图像铸造新项目是多么容易
*/contractERC1155MixedFungibleWithSvgMintableisERC1155,ERC1155MixedFungibleMintable,ERC1155GetImageSvg{/**
* @dev Function to mint non-fungible tokens.
* @dev 用于铸造非同质化代币的函数。
* @param _to The address that will receive the minted tokens.
* @param _to 将接收铸造代币的地址。
* @param _type The token type to mint.
* @param _type 要铸造的代币类型。
* @param tokenImageSvg The token SVG image of the minted token.
* @param tokenImageSvg 铸造代币的代币 SVG 图像。
*/functionmintNonFungibleWithImageSvg(uint256_type,address[]calldata_to,stringmemorytokenImageSvg)externalcreatorOnly(_type){mintNonFungible(_type,_to);setTokenImageSvg(_type,tokenImageSvg);}/**
* @dev Function to mint fungible tokens.
* @dev 用于铸造同质化代币的函数。
* @param _to The address that will receive the minted tokens.
* @param _to 将接收铸造代币的地址。
* @param _id The token type to mint.
* @param _id 要铸造的代币类型。
* @param _quantities The number of tokens for a type to mint.
* @param _quantities 要铸造的类型代币的数量。
* @param tokenImageSvg The token SVG image of the minted token.
* @param tokenImageSvg 铸造代币的代币 SVG 图像。
*/functionmintFungibleWithImageSvg(uint256_id,address[]calldata_to,uint256[]calldata_quantities,stringmemorytokenImageSvg)externalcreatorOnly(_id){mintFungible(_id,_to,_quantities,tokenImageSvg){setTokenImageSvg(_id,tokenImageSvg);}}我们建议在现有的ERC-20实现中添加三个sol文件。以下是提议的sol文件的详细信息。// ----- IERC20GetImageSvg.sol -------------------------
pragmasolidity^0.5.0;import"@openzeppelin/contracts/token/ERC20/IERC20.sol";/**
* @title ERC-20 Fungible Token Standard, retrieving SVG image for a token
* @dev See https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol
*/contractIERC20GetImageSvgisIERC20{functiongetTokenImageSvg()externalviewreturns(stringmemory);}// ----- ERC20GetImageSvg.sol -------------------------
pragmasolidity^0.5.0;import"@openzeppelin/contracts/token/ERC20/ERC20.sol";import"./IERC20GetImageSvg.sol";contractERC20GetImageSvgisERC20,IERC20GetImageSvg{stringprivate_tokenImageSvg;//将图片实现写在构造器中
//将图像实现写在构造器中
constructor(stringcalldatasvgCode)public{_tokenImageSvg=svgCode}/**
* @dev Returns an SVG Image.
* @dev 返回 SVG 图像。
*/functiongetTokenImageSvg()externalviewreturns(stringmemory){return_tokenImageSvg;}}