# GBRC721:生成式Brc721协议

By [熊猫撸白.nft](https://paragraph.com/@fomoplz) · 2023-06-03

---

前言
--

BRC20协议只有一个，但是自它出圈之后，有很多人想去争夺BRC721的“正主”地位，前两天，介绍了《[BRC721:Ordinals集合协议](http://mp.weixin.qq.com/s?__biz=Mzg2MTc3Mjk0Nw==&mid=2247486356&idx=1&sn=98f3f2f41b92301cbdbdc6315ee13224&chksm=ce134668f964cf7efea957b41543abe7cd7138bddc65562fdfaec0c2f231052fd8efdd0facdb&scene=21#wechat_redirect)》，今天这篇文章来给大家介绍另外一种Ordinal NFT标准化方案：**GBRC721**

简介
--

GBRC721全称是Generative-brc-721,是由专业的开发者 **@0xJerry543**于5月23日在推特提出，他表示“**_当前高昂的网络费用和区块空间的使用使得创建链上的NFOs(Non-Fungible Ordinals)效率非常低下且昂贵，是时候优化此过程来使得NFOs更易于访问和可持续_**。”

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

工作原理
----

不得不说整个开发文档写得还是非常清晰的，GBRC721可以节省所有的链上资源，同时实现50%-90%的区块空间优化。该过程包括三个主要操作：

*   **使用部署操作创建生成 BRC-721 集合**
    
*   **使用 mint 操作铸造一个不可替代的序号**
    
*   **将 Non-Fungible Ordinal 转换为标准序号铭文。**
    

### 部署

Deploy操作是一个JSON/Text铭文，其中包含了集合的一般信息（比如集合的标识符，名称和最大供应量等）以及构成集合的特征的base64编码数据。（注意：**也可以为同一个集合创建多个部署铭文，每个都将存储一组不同的特征**）以下演示均以第一个集合OrdiBots为例。

    {
        "p": "gen-brc-721",
        "op": "deploy",
        "slug": "ordibots",
        "name": "OrdiBots",
        "supply": 1000,
        "trait_types": [
            "background",
            "accessories",
            "body",
            "belly",
            "face"
        ],
        "dim": [32,32],             //尺寸，表示属性图和最终图片的像素大小[width,height]
        "traits": {
            "background": {
                "blue": {
                    "name": "Blue",
                    //属性图片的base64编码
                    "base64": "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgAQMAAABJtOi3AAAAA1BMVEVkhZa3PARZAAAAC0lEQVR4AWMY5AAAAKAAAVQqnscAAAAASUVORK5CYII="
                },
                ... // more backgrounds
            },
            "accessories": {
                "antenna": {
                    "name": "Antenna",
                    "base64": "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAKUlEQVRYCe3BsQ0AIADDsOT/o8sJLEgssSHJhTpg4oDxmzKSJEmS5KEDUlIFA6L+DvwAAAAASUVORK5CYII="
                },
                  ... // more accessories
            },
              ... // other traits
        }
    }
    

### 铸造

铸造操作使用的也是一个JSON文本，其中包含了正在铸造的NFT的信息以及对于部署铭文的引用。目的是存储生成图像的属性值、最终图像的哈希值以及链上部署铭文集合的引用。这种方法允许任何人使用链上刻录数据重新创建图像。看到这里相信大家就会和我一样恍然大悟，原来这就是“**生成式**”这个名字的由来，**这是一种全新的NFT组合方式，而且是不同于ETH,是完全创新的存储在链上的NFT解决方案**。

    {
       "p":"gen-brc-721",
       "op":"mint",
       "s":"ordibots",             //集合的标识
       "t_ins":[                   //包含属性部署铭文ID的数组       
          "b7205d40f3b1b1486567f0d6e53ff2812983db4c03ad7d3606812cd150c64802i0"
       ],
       //最终生成的图像的hash值，这是一个可选项，可以用于额外的安全检查，不使用的话可以提高效率
       "h":"aa0d33b748e0177528a910a56a61c47bee2ba9b69749228d6520049c0fea3f4f",
       "id":"554",                 //tokenid,每个NFT的唯一标识
       "a":[                       //属性数组
          [0,"bitcoin-orange"],    //[包含相应属性的base64数据的部署铭文的索引：属性值]
          [0,"rainbow"],
          [0,"black-and-white-triangular"],
          [0,"square"],
          [0,"happy"]
       ]
    }
    

### 前端展示

前端需要根据JSON文本去生成图像，不过大多数平台不会在每次需要向用户显示图像的时候查询区块链。相反，为了方便和高效，他们通常将这些图像存储在自己的数据库中。因此，实施该标准不应对流行的方法造成重大改变。

可以通过如下代码去重建图像（**代码太长，这里就不会完全展示了，感兴趣的可以参考源文档：**[**https://github.com/jerryfane/generative-brc-721**](https://github.com/jerryfane/generative-brc-721)）

    async function createImage(attributes, t_ins) {
        let baseImg;
        let ctx;
    
        let promises = [];
        let images = new Array(attributes.length);
    
        for (let i = 0; i < attributes.length; i++) {
            let attribute = attributes[i];
            let inscriptionIndex = attribute[0];
            let traitValue = attribute[1];
    
            let traitsInscriptionId = t_ins[inscriptionIndex];
    
            let promise = fetch('https://ordinals.com/content/' + traitsInscriptionId)
                .then(res => res.json())
                .then(data => {
                    // Map the index of the attribute to the corresponding trait_type
                    let traitType = data.trait_types[i];
    
                    let base64ImageString = data.traits[traitType][traitValue]['base64'];
    
                    let img = new Image();
                    let [x_dim, y_dim] = data.dim || [32, 32];  // Default to [32, 32] if 'dim' is not defined
                    ......
    

OrdiBots
--------

OrdiBots是第一个用于演示的集合，这是由26个不同特征组成的1000个机器人铭文集合，使用新标准可以使块空间减少55%，大大降低了铭刻的费用。

以下是关于该集合的铭文链接：

部署铭文：[https://www.ord.io/8326719](https://www.ord.io/8326719)

所有可能得资产铭文文件：[https://luminex-public.s3.eu-west-1.amazonaws.com/collections/ordibots/ordibots-assets.json](https://luminex-public.s3.eu-west-1.amazonaws.com/collections/ordibots/ordibots-assets.json)

铸造铭文示例：[https://www.ord.io/8400075](https://www.ord.io/8400075)

购买链接：[https://magiceden.io/ordinals/marketplace/ordibot](https://magiceden.io/ordinals/marketplace/ordibot)

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

总结：
---

个人觉得GBRC721这种“乐高”式链上组合方案比ERC721还要好，他不仅可以解决当前ordinals NFT占用空间大，铸造费用高的问题。同时，可以预见的是这种方案可以拓展到让用户自定义自己的NFT形象。同上文所提到的BRC721解决方案相比，两种方案侧重点不同，BRC721注重于集合和单个NFT的组织关系，GBRC721更侧重于单个NFT的组合方式。

最后，欢迎添加下方联系方式，备注“GBRC721”加入免费交流群.。

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

[Subscribe](null)

---

*Originally published on [熊猫撸白.nft](https://paragraph.com/@fomoplz/gbrc721-brc721)*
