BRC721:Ordinals集合协议

前言

相信参与过ETH上的NFT的小伙伴对于**「集合」**这个概念一定不陌生。一个集合通常由几千或者上万个NFT组成,典型如加密朋克和无聊猿等一线蓝筹NFT集合都是1000个。

ERC721

NFT的价格高低除了个人偏好以外,还取决于每个NFT属性的稀有度。ERC721是一套便于创建集合和管理NFT的非同质化代币协议标准。最早是由Axiom Zen公司的技术总监Dieter Shirley于2018年1月提出,同时Axiom Zen也是CryptoKitties背后的公司。所以,CryptoKitties是第一个实现ERC721标准的NFT。

本文主要探讨ETH上的NFT集合是如何组织的,所以在以下NFT实现代码中省略不相干的代码。

pragma solidity ^0.8.0;

contract pandaNFT is ERC721, Ownable {
    
    uint256 private _tokenIds;
     ...
    function setTokenURI(uint256 tokenId, string memory tokenURI) public onlyOwner {
        _setTokenURI(tokenId, tokenURI);
    }
}

首先Opensea等NFT交易平台是通过合约地址来区分不同的集合,其次是集合下每一个NFT都对应了一个tokenId,并且通过setTokenURI()函数将tokenId和tokenURI进行绑定。这里的tokenURI指的是保存元数据文件的地址,元数据包含图像地址,属性,名称等

以上就是ETH上通过ERC721去管理一个集合的基本原理,接下来我们再来看看如何将上面的理念通过BRC721引入Ordinals NFT Collection。

痛点

我们首先需要观察一下当前Ordinal NFT的集合管理方式存在哪些痛点:

  • 中心化:必须填写各交易市场的集合规范文档,需要经过审核并且需要信任创作者将你的铭文包含在集合中。

  • 缺乏集合规范:当前各个交易市场的集合文档往往有很大的不同,同一个集合上架多个交易所会比较麻烦。

  • 缺乏元数据标准和稀有度展示机制:当前在Ordinal的NFT生态中还没有出现类似于TraitsSniper之类的稀有度排名插件,这是由于尚未出现一个被认可的元数据标准规范便于插件的开发。

三份清单

整个BRC721协议基于的如下三份清单:集合清单、铭文清单和显示清单,每份清单都有协议和版本字段,允许第三方服务理解规范。(*官网链接:https://www.brc721.com/*)

📜集合清单(CollectionManifest)

集合清单是集合的真实来源。它存储了集合的参数和字段,允许链接和验证基础集合项

protocol
    name: "BRC721"
    version: string
  
  name: string                      //集合名称
  symbol: string                    //集合符号,比如:PEPE
  type: "collection"                //清单类型:collection
  paymentAddress: string            //用于接收购买铭文付款的BTC地址,创作        者收款地址
  signerPublicKey: string           //集合创造者公钥,可以使用私钥验证所有权
                                    //以下三个参数用于检测铭文的有效性
  maxSupply?: number,               //集合最大的铭文数量
  maxPerAddress?: number,           //每个地址可以铸造的铭文数量
  maxBlockHeight?: number           //有效铭文的最大区块高度

💎 铭文清单(InscriptionManifest)

集合的一个Item,类似于NFT

protocol
    name: "BRC721"
    version: string
  
    type: "inscription"
    contentSignature: string
  
    content: JSON string                 
    price?: number                           //单个铭文的价格以sats计价
    initialOwnerAddress?: string             // 初始拥有者地址可以实现白                        名单的功能,如果不设置,相当于公售
    collectionInscriptionId: string          //集合铭文ID,等于上述集合清单铸造的铭文ID

👁️ 显示清单(RevealManifest)

显示清单允许将元数据链接到特定的集合清单上,从而为铭文清单提供属性,类似于ERC721的tokenURI方法,每个铭文清单在集合中从1开始获得一个内部序号,分配的编号基于交易和铭文的顺序。

protocol
    name: "BRC721"
    version: string

    type: "reveal"
    contentSignature: string

    content: JSON string                    
    weight: number                     //可以铭刻多个版本显示清单,每个清单有一个权重,权重最高的将作为集合的最新元数据  
    metadataURL: string                //元数据URL,元数据格式参考ERC721
    collectionInscriptionId: string    //集合铭文ID,等于上述集合清单铸造的铭文ID

索引和验证

下图展示了从Bitcoin集合中读取集合数据的基本流程:

1.从新区块中检测铭文

2.筛选出集合铭文

3.根据集合铭文ID找到显示清单铭文

4.从显示清单铭文中解析出metadata展示到前端

开发进度

整个BRC721协议是由这个推特昵称叫做Poyo(@poyo_eth)的开发者所推动的,最新的一条进度更新是5月7日,表示目前的索引器还有一些问题。所以现在BRC721还只是停留在理论阶段,产品还未落地,我们需要耐心等待。

总结

我讲一讲我在写这篇文章时的一点感受:

首先是资料特别少,关注这个协议的人不多,其次就是官方文档中很多字段都没有写注释,到目前为止也没有一个完整的例子出现,理解起来非常抽像。(注:上述我注释的字段是从开发者推特中找到的,没有找到依据的我都没有注释,以防误导

其次就是市面上除了这个BRC721协议外,还有其他作者发行的同名协议,这个我们后面再研究。不过实现逻辑都是借鉴ERC721,都是可以通过metadataUrl这个字段去引用ipfs上的元数据文件。

不过,ordinal协议本来就是为了去解决ETH上的NFT可篡改的问题,这样一来,采用ERC721的实现逻辑,可能不会被市场所认可。其实也可以将Metadata铸造成铭文,然后被引用,这样就无法被篡改了

最后,就是我们普通玩家如何参与? 目前由于还没有产品落地,我们只能继续跟踪最新的开发动态,BRC20火了,BRC721这个概念很可能也会被炒作一波,我们需要在第一个采用这个标准的NFT集合出现之后,迅速去铸造,同时关注市面上其他BRC721标准的NFT集合,进行横向对比,最终哪个最有共识是由市场所决定的,我们要做的是抓住第一个

以上就是关于BRC721的一些介绍,当前资料较少,可能会有一些错误,欢迎点击下方linktree加入tg群:

Subscribe to 熊猫撸白.nft
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.