Alchemy第一周教程

特别声明: 每周任务前,请参看 任务准备 ,无论此周任务需要用到多少!!!

准备工作

1. 通过

https://mirror.xyz/0x6e780c7DA5f8A26c64C72203042735305EC29F17/VVzmSF5pooV_8ZhdczrLVJlGUYHs_pvvrzw3-xcspy8

的步骤,在 Alchemy 上创建一个 ETH Goerli测试网 的APP,并保留此页面

2. 将Alchemy Goerli网络添加到Metamask钱包

1)点开钱包,选择网络,点击 添加网络

post image

2)填写 Goerli 网络和 前面在Alchemy上生成的RPC URL 信息,并保存

post image

记得将钱包切换到 Alchemy Goerli测试网

3. 在 领水网站上,输入钱包地址领取测试GETH

post image

4. 在IPFS上上传NFT和元数据

1)进入 https://filebase.com/ ,注册。登录后,单击左侧菜单 Buckets 按钮,然后选 Create Bucket ,创建一个新存储桶(自己取名字,重名不行)

post image
post image

2)点击进入刚创建的Bucket,单击右上的 Upload 按钮 ,然后上传您要用于 NFT 的图像

post image
post image

a.可上传本地图片,或者网上下载的免费图片( 比如 https://www.pexels.com/zh-cn/

b.上传时会显示进度条,等待完成后刷新页面

3)单击名字,进入详细页面,复制 IPFS 网关 URL,暂时保留页面

post image

4)转到电脑桌面,右键新建创建文本文档,重命名为“metadata.json”(连带后缀全改),复制以下代码进去,保存

a. 如果看不到文件后缀,比如系统是win10,请自行百度或者谷歌搜索 win10如何显示文件后缀名 ,进行设置更改

b. 将上一步复制的URL,粘贴替换下面的 ”image“后面

{ 
  "description": "This NFT proves I've created and deployed my first ERC721 smart contract on Goerli Testnet with Alchemy",
  "external_url": "Alchemy.com",
  "image": "https://ipfs.filebase.io/ipfs/QmPXigwDiUevneEJtgSDWt1GEm82TT42gw2D4WXChZyRZf",
  "name": "A Beautiful NFT", 
  "attributes": [
    {
      "trait_type": "Base", 
      "value": "Starfish"
    }, 
    {
      "trait_type": "Eyes", 
      "value": "Big"
    }, 
    {
      "trait_type": "Mouth", 
      "value": "Surprised"
    }, 
    {
      "trait_type": "Level", 
      "value": 5
    }, 
    {
      "trait_type": "Stamina", 
      "value": 1.4
    }, 
    {
      "trait_type": "Personality", 
      "value": "Sad"
    }, 
    {
      "display_type": "boost_number", 
      "trait_type": "Aqua Power", 
      "value": 40
    }, 
    {
      "display_type": "boost_percentage", 
      "trait_type": "Stamina Increase", 
      "value": 10
    }, 
    {
      "display_type": "number", 
      "trait_type": "Generation", 
      "value": 2
    }
  ]
}

5)回到 Filebase ,退到上一页,回到图片的桶页面,然后再次点击 Upload 进行上传,这次选择的是桌面的metadata.json

post image

6)上传成功后,复制一下metadata.json的 CID,后面需要用到

项目代码初始化

1. 进入 Open Zeppelin 智能合约向导页面,将看到以下编辑器

post image

2. 点击左上角 ERC721 按钮,输入 Name 和 Symbol

post image

3. 勾选如下的NFT功能

post image

4. 在 OpenZeppelin Wizard 编辑器的顶部,点击“Open in Remix”按钮,在浏览器的新选项卡中打开 REMIX IDE

post image

5. 打开后,等一小会会自动跳到智能合约代码界面

post image

1)在第14行填入

  uint256 MAX_SUPPLY = 100000;
post image

2)删除17行的 onlyOwner ,否则只允许智能合约的所有者(部署智能合约的钱包地址)铸造 NFT

post image

3)在第19行添加

require(_tokenIdCounter.current() <= MAX_SUPPLY, "I'm sorry we reached the cap");
post image

部署智能合约

1. 回到 Remix,点击页面左侧的Solidity compiler,版本选0.8.4,勾选Auto compile,然后点击“Compile”按钮

post image

2. 左边栏点击“Deploy & Run Transactions”菜单

Environment下拉菜单中选择 Injected provider- Metamask

contract选择 Alchemy-contracts 这个

点击 Deploy

post image

3. 将出现 Metamask 弹出窗口,需支付一些 Gas 费用,单击“确认”

post image

4. 如果一切都按预期工作,大约20 秒后,您应该会在左下的 Deployed Contracts 处看到该合约

post image

若部署合约出现下面类似的错,请检查钱包的网络是否选对

{

"code": -32000,

"message": "execution reverted"

}

测试智能合约功能

1. 点开合约

post image

2. 点击 safeMint 下拉框

to 填入 你的钱包地址

uri 填入 ipfs://准备工作部分metadata.json的CID

post image

1)点击transact,会花一点手续费,等一会成功了会在右侧显示绿勾

post image

3. 将钱包地址复制并粘贴到 balanceOf 方法输入中点击call,它应该显示您有 1 个 NFT

post image

4. 在tokenUri 插入“0”作为 id 参数,点击call,它应该显示你的 tokenURI

post image

展示NFT

1. 进入

https://goerli.pixxiti.com/

或者

https://testnets.opensea.io/

,登录自己钱包,然后单击 View your NFTs ,您应该会在那里看到您新铸造的 NFT

post image

1)红圈图片为刚mint的图片

post image

2. 如果图像尚不可见,点击进去,然后单击右下的“Refresh”按钮,大约需要几分钟

post image

额外挑战(可选做)

挑战课题: 如何限制每个钱包的 mint 数量(11月初好像必须要做挑战任务了)

1. 在REMIX的代码中加入以下内容

1)在 uint256 MAX_SUPPLY = 10000; 下面添加:

uint256 walletLimit = 2; //limit for per wallet
mapping(address => uint) public walletMints;

2)在 require(tokenId <= MAX_SUPPLY, "I'm sorry we reached the cap"); 下面添加:

require(walletMints[msg.sender] < walletLimit, "Max Mint per wallet reached");
walletMints[msg.sender]++;

如图:

post image

上面 walletLimt 的值可以自行修改,后面测试符合此值即可

2. 按 部署智能合约 流程以及 测试智能合约功能 的 safeMint 流程操作

1)此处测试需结合上一步设置的 walletLimit 数量。比如设置为2,在to地址和url不改变的情况下,当连续mint成功两次后,查看Metamask上的活动

post image

2)第三次点transact就会出现以下错误(红框处和代码中的提醒一致)

post image

如何证明完成了额外挑战:

a. 给出合约地址,即可通过区块浏览器查看到进行了多少次safe mint

b. 将设置了walletLimit数量的代码、合约中几次safe mint、以及最后一次出错的几个截图发送到twitter上,并将此twitter链接填在提交表格中的 ”Share the URL of your reflection!“处

提交任务

10月末提交任务需要在官方DC服务器写小作文了