59 lines
1.4 KiB
Solidity
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;
|
|
}
|
|
}
|