NFT的“开图”是怎么实现的

我们知道,NFT 最开始 mint 之后,所有的图都是一样的,比如下面这种:

MURI
MURI

(上图为 MURI项目

在经过项目方“开图”之后,每个图都有了各自的风格,比如下面这样:

Azuki
Azuki

(上图为 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 为例,这笔交易进行设置:

Azuki设置baseURI的交易
Azuki设置baseURI的交易

在设置了 baseURI 之后,也就是已经开图了。我们在 baseURI 后面随便加上一个 tokenId,同样得到一个 Json 文本,继续查询 image 字段,就得到了开图后的相应 tokenId 的图片地址。

总结

其实开图的逻辑很简单,就是对 baseURI 进行更改,从而达到效果。

Subscribe to xyyme.eth
Receive the latest updates directly to your inbox.
Verification
This entry has been permanently stored onchain and signed by its creator.