我们知道,NFT 最开始 mint 之后,所有的图都是一样的,比如下面这种:
(上图为 MURI项目)
在经过项目方“开图”之后,每个图都有了各自的风格,比如下面这样:
(上图为 Azuki项目)
那么这一步是怎么实现的呢?
设置初始图片
其实原理很简单,我们知道,ERC721 中有一个字段 tokenURI,一般是由
baseURI + tokenId
构成。在项目初期,管理员地址会将未开图的图片信息设置到 baseURI 上,一般是通过发送交易或者直接在合约构造方法中设置。以 MURI 为例,管理员是直接在构造方法中就设置了最初的 baseURI:
constructor(bytes32 _merkleRoot, string memory contractBaseURI)
ERC721A ("MURI", "MURI") {
merkleRoot = _merkleRoot;
baseURI = contractBaseURI;
}
查询 baseURI 内容为:
ipfs://QmTCAt4Y4r1HyHRyqwqHgrJvU7D78PSRuw4LefEbG5Ww49/
我们随便查询一个 tokenId,也就是直接在后面加上 tokenId,得到一个 Json 文本:
{
"name": "MURI [11]",
"description": "MURI is a collection of 10,000 individual characters, each playing a role in the story between the worlds of Night City and its spirit.",
"image": "ipfs://QmfJEERKhLJbenpMFBtcbC9pMssBBd6CjJTKW5K47UUdp7/",
"attributes": [
]
}
其中 image 字段存储的就是图片的 ipfs 地址,这就是我们前面看到的图片的 ipfs 地址。
开图
当管理员“开图”的时候,会发送一笔交易设置 baseURI。以 Azuki 为例,这笔交易进行设置:
在设置了 baseURI 之后,也就是已经开图了。我们在 baseURI 后面随便加上一个 tokenId,同样得到一个 Json 文本,继续查询 image 字段,就得到了开图后的相应 tokenId 的图片地址。
总结
其实开图的逻辑很简单,就是对 baseURI 进行更改,从而达到效果。