# 手把手教程 ——Alchemy Week1

By [RogerZ](https://paragraph.com/@rogerz-2) · 2022-08-12

---

前言
==

以后 mirror 写的教程，都会 tag 手把手教程，我也不是技术出身，深知一个小白接触新东西时候会踩很多坑，如果环境设置和我一致，至少我会把我跑项目时候踩过的坑都罗列出来。

关于Alchemy
---------

网上信息一大堆，刷这个项目纯粹就是熊市无聊看到了，又是技术向的，觉得还挺有趣，后来发现能获得 NFT 的人真不多，至于是不是毛无所谓，随缘就好。而且那张 early student card 的 NFT 已经暂停了，所以为了撸毛想刷的，劝三思。附一张我的 student pass。

![我也没有 early student pass，那个限量只有100多张](https://storage.googleapis.com/papyrus_images/d8a66f6be6d92a43f0c3d6422840be6b420538e3f46c1b3cce06fd8b8dbe0509.png)

我也没有 early student pass，那个限量只有100多张

Week1: How to Develop an NFT Smart Contract (ERC721) with Alchemy 教程
====================================================================

[官方教程](https://docs.alchemy.com/docs/how-to-develop-an-nft-smart-contract-erc721-with-alchemy)在此，也可以看 youtube 视频链接，不想看我啰嗦的可以移步。

[![]({{DOMAIN}}/editor/youtube/play.png)](https://www.youtube.com/watch?v=veBu03A6ptw)

### step0 环境配置

系统环境：Window10 X64

### step1 使用 OpenZeppelin 开发合约

1\. 进入 OpenZepplin 的 [Wizard 链接](https://docs.openzeppelin.com/contracts/4.x/wizard)，看到如下图的编辑器，类似 remix。

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

2\. 选择 ERC721 按钮，在 Name 和 Symbol 中填入 NFT的名字和缩写，勾选 `Auto Increment Ids`，`Enumerable`，`URI Storage`，可以发现右边 IDE 中的代码也发生了相应的变化。

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

### step2 在 remix 中修改合约

1\. 在 OpenZepplin 的 Wizard 编辑器顶部，点击 `Open in Remix` 按钮，这样浏览器就会自动跳转到我们的老朋友 remix IDE了。

2\. 删除 17 行的关键字 `onlyOwner`，否则只有合约发布者才能 mint NFT 了。

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

3\. 在 14 行填入 `uint256 MAX_SUPPLY = 10000;`，给 NFT 规定一个最大的数量。

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

4\. 在 18 行代码下面插入 `require(_tokenIdCounter.current() <= MAX_SUPPLY, "I'm sorry we reached the cap");`，超过数量就不能再 mint 了。

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

### step3 申请 alchemy 账户并添加 Metamask 的 Rinkeby 链

1\. 注册 alchemy.com 网站的帐号。

[https://www.alchemy.com/](https://www.alchemy.com/)

2\. 进入 Dashboard，点击 create app。

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

3\. 依次填入 Name, Description，Chain 选择 Ethereum，Network 选择 Rinkeby，然后点击 CREATE APP。

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

4\. 点击 VIEW KEY，复制 HTTPS 的 URL

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

5\. 打开小狐狸钱包，点击添加网络，在各栏位中依次填上相关并保存。这就是用自己的 RPC 建立的网络了，区别于 chainlist.org 上默认 RPC 所建立的，有兴趣的也可以测下不同节点的速度。

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

6\. 因为交互需要消耗 gas，所以还需通过 chainlink faucet 获取测试代币 ETH。通过 faucet 的链接，进入申请代币即可。

[https://faucets.chain.link/rinkeby](https://faucets.chain.link/rinkeby)

### step4 在 remix 中部署智能合约

1\. 回到 remix 编辑器，在 SOLIDITY COMPILER 中，solidity 版本选择 0.8.4，点击 Comiple contract 的蓝色按钮。

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

2\. 选择 DEPLOY & RUN TRANSACTIONS 的标签，在 ENVIRONMENT 选择 Injected Provider - Metamask(注意小狐狸中选择的网络是 Rinkeby，这样 remix 就会自动识别 Rinkeby(4) Network)了，然后 Contract 需要选择 Alchemy - contract.sol 的文件，然后点击 Deploy 按钮。

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

3\. 弹出小狐狸对话框，会消耗 gas，点击确认即可，如果部署完成，在 etherscan 中可以看到 Contract Creation 的 Transaction。

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

### step5 将图片和 metadata 上传至 IPFS 中

教程没有用大家熟识的 IPFS，用了 filebase，那就一样按照教程走吧。

1\. 在 filebase 上注册一个新账户。

[https://filebase.com/](https://filebase.com/)

2\. 在左侧选择 Buckets 标签，然后点击 Create Buckets 按钮，名字不能重复，只能用小写，数字以及 `-` 来完成，网络选择 IPFS。

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

3\. 点击进入这个 Buckets，点击右上角 Upload，上传一张图片，这张图片就是等会 mint NFT 之后的图片。点击进入这张图片后，复制 IPFS Gateway URL 的链接。

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

4\. 用 IDE 或者 txt 文档新建一个 metadata.json 文件，复制以下代码，将 image 的 URL 替换成刚刚复制的那个。保存后，也上传到 Buckets 中。

    { 
      "description": "This NFT proves I've deployed an ERC721 smart contract on Rinkeby",
      "external_url": "https://alchemy.com",
      "image": "填入图片的URL",
      "name": "ERC721 PoK", 
      "attributes": [
        {
          "trait_type": "Coolness", 
          "value": "A lot"
        }, 
        {
          "trait_type": "Website", 
          "value": "alchemy.com"
        }, 
        {
          "trait_type": "Token Standard", 
          "value": "ERC721"
        }]
      }
    

复制 metadata.json 文件的 CID，后面构建 NFT URI 会用到。

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

这里如果看官方文档会有个坑，缺了个 `]`

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

### step6 Mint NFT

在 remix IDE 中，拉到下面找到 safeMint 方法，在 to 中输入钱包地址，在 uri 中输入 `ipfs://metadata.json文件的CID`，点击 transact 后，会跳出小狐狸点击确认即可。

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

也可以在 etherscan 中输入合约地址，找到 mint 的记录。

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

### step7 在OpenSea 中查看 NFT

在 [OpenSea 测试网](https://testnets.opensea.io/) 中登录 metamask 钱包，即可看到刚刚 mint 的 NFT 了，至此已部署了第一个 NFT 智能合约了。

### step8 在官网提交任务并 claim NFT

在官方申请网址中提交对应的信息。

[https://alchemyapi.typeform.com/roadtoweekone?typeform-source=docs.alchemy.com](https://alchemyapi.typeform.com/roadtoweekone?typeform-source=docs.alchemy.com)

在 mintkudos 网址中 claim Alchemy 的 NFT，通常需要一天至一周可以获得 allowlist 资格。

[https://mintkudos.xyz/claim/583](https://mintkudos.xyz/claim/583)

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

---

*Originally published on [RogerZ](https://paragraph.com/@rogerz-2/alchemy-week1)*
