特别声明: 每周任务前,请参看 任务准备 ,无论此周任务需要用到多少!!!
1)点开钱包,选择网络,点击 添加网络

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

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

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


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


a.可上传本地图片,或者网上下载的免费图片( 比如 https://www.pexels.com/zh-cn/ )
b.上传时会显示进度条,等待完成后刷新页面
3)单击名字,进入详细页面,复制 IPFS 网关 URL,暂时保留页面

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

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





1)在第14行填入
uint256 MAX_SUPPLY = 100000;

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

3)在第19行添加
require(_tokenIdCounter.current() <= MAX_SUPPLY, "I'm sorry we reached the cap");


Environment下拉菜单中选择 Injected provider- Metamask
contract选择 Alchemy-contracts 这个
点击 Deploy



若部署合约出现下面类似的错,请检查钱包的网络是否选对
{
"code": -32000,
"message": "execution reverted"
}

to 填入 你的钱包地址
uri 填入 ipfs://准备工作部分metadata.json的CID

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



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

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


挑战课题: 如何限制每个钱包的 mint 数量(11月初好像必须要做挑战任务了)
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]++;
如图:

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

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

如何证明完成了额外挑战:
a. 给出合约地址,即可通过区块浏览器查看到进行了多少次safe mint
b. 将设置了walletLimit数量的代码、合约中几次safe mint、以及最后一次出错的几个截图发送到twitter上,并将此twitter链接填在提交表格中的 ”Share the URL of your reflection!“处
10月末提交任务需要在官方DC服务器写小作文了
