在 ERC3664.sol 中,存在着_texts数据,本文分析来龙去脉和用途。
// attrId => tokenId => text
mapping(uint256 => mapping(uint256 => bytes)) public _texts;
在claim铸造NFT时,内部会添加属性,会设置属性的text:
在 Metacore.sol claim( name) 输入参数name=“metacore"
attach(_curTokenId, METANAME, 1, bytes(name), true);
if (text.length > 0) {
_texts[attrId][tokenId] = text; // 实际上_texts[1][1] = "metacore"
}
读取text
function textOf(uint256 tokenId, uint256 attrId) public view virtual override
returns (bytes memory) {
return _texts[attrId][tokenId];
}
这个textof函数是
IERC3664.sol接口规定的方法,必须予以实现。
在读取属性时会调用textof,得到属性的text信息
getAttributes()
data = abi.encodePacked(
'{"trait_type":"',
symbol(id),
'","value":"',
textOf(tokenId, id),
'"}'
);
Metacore.sol 示例:
"attributes":[
{
"trait_type":"Metaname",
"value":"metacore"
},
{
"trait_type":"Legoot V2",
"value":"1"
},
{
"trait_type":"SYNTHETIC",
"value":"true"
}
]
Legoot.sol合约示例:
"attributes":[
{
"trait_type":"WEAPON NAME",
"value":"Quarterstaff"
},
{
"trait_type":"WEAPON ID",
"value":"8001"
},
{
"trait_type":"CHEST NAME",
"value":"Silk Robe"
},
{
"trait_type":"CHEST ID",
"value":"8002"
},
【总结】
感觉是为属性设置了一个名称字符串,用于输出属性信息。