# MAYC开盒解析

By [franx.eth](https://paragraph.com/@franx-2) · 2022-03-01

---

MAYC还有一些M1、M2和Mega的药水还没有变异，这样就存在有些变异猴是开盒，还些变异猴还未开盒的情况。首先要明确的是，所有20000只变异猴都是已经做出来的，而不是用药水去变异时才实时生成的，只是项目方对Metadata做了控制，让未变异的猴子的Metadata没有对外公开而已。

大家都知道，ERC721的元数据是通过tokenURI方法获取的，我们以前几天刚开的Mega变异猴30005为例，可以看到它的元数据URI是

[https://boredapeyachtclub.com/api/mutants/30005](https://boredapeyachtclub.com/api/mutants/30005)

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

获取到的json如下

    {"image":"ipfs://QmcCMYfyDfTQs3ZFsu9rv436gJKskzu5uabKQJukZPzhEC","attributes":[{"trait_type":"Name","value":"Mega Trippy"}]}
    

里面的图片用brave浏览器打开就是对应的Trippy变异猴

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

那么，有些人就会用30006去尝试下能不能看到下一个未开盒的Mega变异猴的样子

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

结果返回token不存在。

因为在这里项目方用是中心化的API来返回json元数据的，所以很好对这个开盒的私密性进行控制。以上面的30005变异猴的mint为例，看下对应的tx交易0xef0c7af927424fc8416fc62315c18ff4ea93306eb1a467f062b2af608b75de3a的日志

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

可以看到from参数是全0地址，表示新mint；to参数是token接收地址，也就是mint用户的地址；tokenId就是当前mint出来的tokenId。项目方应该在中心化那里做了一个event监听服务，监听到此事件时，根据tokenId将图片上传IPFS，然后API Metadata reveal。

那么，有人会说，项目方是不是可以人工操控30006的开盒图片呢？答案是：不能。因为MAYC合约部署时已经公开了图片哈希provenance码，在合约里可见

    string public constant MAYC_PROVENANCE = "ca7151cc436da0dc3a3d662694f8c9da5ae39a7355fabaafc00e6aa580927175";
    

因此，所有20000张变异猴的图片顺序在合约部署前都排好了，只是未mint出来的还没有公开元数据。从这小小的技术点就可以看出项目方在技术上是有用心的。

---

*Originally published on [franx.eth](https://paragraph.com/@franx-2/mayc)*
