becrypto/contracts/core/JSONMetadata.sol
2023-06-26 11:26:41 +08:00

59 lines
1.4 KiB
Solidity

// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;
import "@openzeppelin/contracts/utils/Base64.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
contract JSONMetadata is Ownable {
using Strings for uint256;
string constant _dataUri = "data:application/json;base64,";
struct MetaData {
string name;
string desc;
string image;
string external_str;
}
mapping(address => MetaData) public metaDatas;
function getMetaData(
address token,
uint256 tokenId
) public view returns (string memory) {
MetaData memory metaData = metaDatas[token];
string memory external_str;
if (bytes(metaData.external_str).length > 0) {
external_str = metaData.external_str;
}
bytes memory json = abi.encodePacked(
'{"name":"',
metaData.name,
" #",
tokenId.toString(),
'","description":"',
metaData.desc,
'","image":"',
metaData.image,
'","external_url":"',
metaData.image,
'"',
external_str,
"}"
);
return string(abi.encodePacked(_dataUri, Base64.encode(json)));
}
function setMetaData(
address token,
string memory name,
string memory desc,
string memory image,
string memory external_str
) external onlyOwner {
MetaData memory metaData = MetaData(name, desc, image, external_str);
metaDatas[token] = metaData;
}
}