# un.Block 区块链周报 #33：ERC-721A

By [un.Block](https://paragraph.com/@un-block) · 2022-03-06

---

![](https://storage.googleapis.com/papyrus_images/df7157130b89377042d37f02feac72e2513035f729e76af76f62cda82fa173a2.png)

ERC-721 Variant
---------------

> 随着 NFT 的繁荣，我们终于看到一些项目方对 ERC-721 提出了更新。对于一个 NFT 团队来说，技术大概率不是他们的长处，但还是让我们来看看他们对 ERC-721 有一些什么样的想法

各位开发过 NFT，并且用 ERC-721 标准进行开发的读者们用的是什么库呢？我们一般第一选择是 Openzeppelin 的库，但 Openzeppelin 的 tokenURI 规范和 Opensea 并不是非常的兼容。Openzeppelin 要求平台在访问元数据时，自动为 tokenURI 加上 `.json` 的后缀。然而 Opensea 并不遵守这个规范，隔壁 Rarible 倒是遵守了这个规范。因此我经常会这样魔改一下：

    import "@openzeppelin/contracts/utils/Strings.sol";
    
    string(abi.encodePacked(baseURI, tokenId.toString(), ".json"));
    

ERC-721A
--------

Azuki 推出了完全兼容 ERC-721 的 [ERC-721A](https://www.erc721a.org/)，并支持使用 NPM 进行安装，作为库导入到自己编写的合约里。目前在官方给出的清单中，有将近 40 个项目使用了 ERC-721A，例如 Cereal Club，X Rabbit Club，The Women of Crypto 等。除了单纯的 ERC721A，Azuki 还推出了两个变种，ERC721A Burnable 和 ERC721A Owners Expicit。如果你想要使用 ERC-721A 进行开发，需要注意的的是 ERC-721A 并没有类似 Openzeppelin 那样的完整 API 文档。

在 ERC-721A 中，Azuki 的改进有两点：

1.  Mint 1 个 NFT 和 Mint 多个 NFT 手续费几乎一样
    
2.  降低 Mint 的基础手续费
    

Azuki 还将 ERC-721A 和 ERC-721 Enumerable 的 Mint 手续费做了比较：

![](https://storage.googleapis.com/papyrus_images/09478a4daa77af2371cd2b9d760ef31142ad078f0594cd046d7eaaa967a80bf8.png)

从数字上来看，基础 Mint 手续费降低了一倍，每多 Mint 一个，ERC-721A 只会增加些许的手续费。

为了达到这点 Azuki 在代码层面做了这几个主要改动：

1.  删除 ERC-721 Enumerable。ERC-721 Enumerable 以更昂贵的 Mint，大大增加了读取速度。Azuki 认为如果 TokenId 是有顺序的，我们可以手动遍历，因此 ERC-721 Enumerable 是没有必要的。
    
2.  支持 Batch Mint，并且只进行一次更新。例如 Alice Mint 了 3 个 NFT。常规的合约会对 Alice 的 Balance 进行 3 次更新。从 0 → 1，1 → 2，2 → 3。然而 Azuki 只进行了一次更新，即 0 → 3。以太坊的写操作非常昂贵，因此这个方法可以为我们省下不少的手续费。
    
3.  对于一次 Mint，不管 Mint 了几只，ERC-721A 也仅仅需要一次写入来更新所有这些 NFT 的所有者。如果一个用户拥有连续的三个 NFT，那么在存储中只有第一个的所有者是他，后面两个则为初始的 0 地址。因此 Azuki 在读取 NFT 的所有者函数中又额外的逻辑。
    

![](https://storage.googleapis.com/papyrus_images/e5f8de9b4a428c34d5e7cb11b1d2e77abf64db060c9fb63fcda56b581da6a424.png)

根据项目自己的一些需求，Azuki 对通用库进行了一些修改，来实现在特定场景的手续费降低。例如第三条就牺牲了读取的性能。这里的大部分优化都存在 Tradeoff。

📔 相关阅读：
--------

*   [Azuki](https://www.azuki.com/erc721a)
    

> 如果你喜欢本期内容，️欢迎点赞分享给你觉得有需要的人。

🚏Find us
---------

💻 **Website**： [unblock256.com](http://unblock256.com/)

**✈️ Telegram：** [un.Block Weekly](https://t.me/unBlock256)

**🕊️ Twitter**： [@unBlock256](https://twitter.com/unblock256)

**📧 Email**：[unblocketh@gmail.com](mailto:unblocketh@gmail.com)

📤 分发渠道：[知乎](https://www.zhihu.com/column/c_1389547907977297920) | [Notion](https://www.notion.so/un-Block-Weekly-39fecdf673e84c4487e76eb4492b60cc) | [Substack](https://unblock256.substack.com/) | [Medium](https://medium.com/@unblock256) | [Mirror](https://mirror.xyz/0x7B076d7BcdE88Ec322B2D01AA1ADc1997b7724f6/mPaC_Fg1HmQogTLdhKvTkq31JTzFNgrPyXNeMvM7juo) | [RSS](https://submirror.xyz/0x7B076d7BcdE88Ec322B2D01AA1ADc1997b7724f6) | [即刻](https://web.okjike.com/u/10425125-69bc-4cbc-addc-e7d7d48810c6) | [微信订阅](https://unblock.zhubai.love/)

视觉设计：Jenny

特别鸣谢：

*   [Newlearnerの自留地](https://t.me/NewlearnerChannel)
    
*   [Android Weekly Update](https://update.substack.com/)
    

本文非商业目的转载授权遵循 [CC BY-NC 4.0](https://creativecommons.org/licenses/by-nc/4.0/) 协议

版权所有 ©️un.Block 2021

---

*Originally published on [un.Block](https://paragraph.com/@un-block/un-block-33-erc-721a)*
