# Nft智能合约发行，盲盒，公开发售技术实战--拼图篇

By [cyptoJune](https://paragraph.com/@cyptojune) · 2022-02-13

---

n'bu'm发布Nft系列文章-合约篇以来，基本大部分小伙伴都按照步骤实现了在ipfs测试网mint了不带任何属性的图片。我们接着合约篇开始讲解拼图篇.

拼图篇需要实现的功能主要是两个：

*   如何快速制作多种拼图以及meta资料
    
*   如何上传ipfs星际网络系统(测试网络)
    

开始之前需要准备的物料清单如下

*   **OpenSea测试网络** [https://testnets.opensea.io/](https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqbFZ3eTFCYk9TZUZpc2t3ek1xeVI0aW01QzNkd3xBQ3Jtc0ttRjVXTEpFTDNsY2lRbUdzQXQ0YVpaTk9SN0xtay1uQXV5OVZTX3RUX0l0bUE2bVkxcDBKVDdDTEVZWGsyRnRBNXBJMmF3SU9fZ29Ibk9MankxV29SQ180SDFyNFFJbk8xS25ma0FEZl80UjFHM0R3Yw&q=https%3A%2F%2Ftestnets.opensea.io%2F)
    
*   **HashLips 组图专案** [https://github.com/HashLips/hashlips\_art\_engine](https://github.com/HashLips/hashlips_art_engine)
    
*   **ipfs上传空间** [https://www.pinata.cloud/](https://www.pinata.cloud/)
    

**实战步骤**

1.  从git上下载Hashlips项目
    

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

2\. 在vs中打开项目程序，找到main.js中 将startCreating 方法中的343行改成 i =0;

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

3.cd到项目本地跟路径下，然后运行yarn install,进行安装相关包

4.相关包安装成功之后，输入yarn run build，进行项目本地构建。成功之后，如下：

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

这个时候会生成五张图片，打开项目图片生成的目录build，看到生成的对应五张图片

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

第一个红框是五张图片，第二张图片是五张图片对应的meta信息，打开会看到对应图片的属性和权重，同时在layers文件夹，会将图片分成很多层次的图层，进行随机拼接。

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

![对应图片的属性](https://storage.googleapis.com/papyrus_images/6a56225d381c74dc1a5a2559cc38dd7e05cfbb63d79f2f948b814f4c3a65c0d9.png)

对应图片的属性

![样图属性和权重值](https://storage.googleapis.com/papyrus_images/bacabc96968083569d86d4f1b7b062b4fa98a0cfa94d7f743e09b6b639c555a2.png)

样图属性和权重值

5.接着我们将config.js中如图所示的layerConfigurations数量改成10张，然后继续执行yarn run build 命令，成功执行之后，就会生成10张图片。

![将5 改成 10](https://storage.googleapis.com/papyrus_images/cb6fa31840a146786dae178fb319ea35483a3184c8068aa1ba54d83d4b59acb4.png)

将5 改成 10

![cmd中显示生成10张图片](https://storage.googleapis.com/papyrus_images/108e55b6cf23377bf4b3f3606953f9f5754ee8e05b5885aa501f9864b968566b.png)

cmd中显示生成10张图片

![生成10张图片](https://storage.googleapis.com/papyrus_images/7ee1fcf4043db9a9aaae78dae351328b295476d86a38ac18a3531905afc8bb9e.png)

生成10张图片

6.打开Pinata网站，将刚生成的10张图片上传上去。

[https://www.pinata.cloud/](https://www.pinata.cloud/)

![生成的10张本地图片](https://storage.googleapis.com/papyrus_images/2a1672c181aee9ae27869ec8bfef8521ddf98927847fbfe8678edabbbbc9a2a7.png)

生成的10张本地图片

![打开upload的文件夹](https://storage.googleapis.com/papyrus_images/cace264803fbc9117842d3d5397ecf93ee55a52643e4fae40cdfa9a1e8bd992a.png)

打开upload的文件夹

![上传](https://storage.googleapis.com/papyrus_images/760fd29af88f722ed7654ae145f7f1e218e31476c396e7634254d74bc417bf7a.png)

上传

成功后如下

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

7.紧接着打开代码，将绿色框中的文字替换成cid

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

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

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

8.更新成功之后，紧接着输入

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

成功之后，打开json中任意的文件，看到image中的地址替换成了刚才的CID

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

9.将Json文件夹继续整包上传上去

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

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

10 开始做盲盒图片，我们从layers中取出一个黑色背景图片作为盲盒的封面

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

11.然后新建一个unpack文件夹，将该图片命名为unpack.png图片，同时新建一个unpack.json文件，其内容如下。

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

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

红色框中是你刚刚上传图片的CID.

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

12.remix中找到红色框中的函数，然后将上图中的unpack.json的CID赋值，赋值到红色输入框中，同时前缀加上\*\*ipfs://,\*\*然后点击按钮。

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

13.**在setBaseUrl中设置meta\_jsons的CID,同时也加上前缀ipfs:// ，同时在后面追加/，因为meta\_jsons中是一个集合，因此加上/** ,完成之后点击按钮即可。

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

等以上交易confirm之后，然后打开ipfs的测试网，这个时候，就会出现黑色的图片，其实就是盲盒的形态。

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

14.在红色框中的函数点击，就会开启盲盒功能，等交易完成，回到ipfs上，就会看到你刚刚抽到的盲盒的形态。

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

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

结束.

以上就是主流的Nft的盲盒的玩法，介绍给大家。Done!

---

*Originally published on [cyptoJune](https://paragraph.com/@cyptojune/nft-2)*
