# Alchemy第一周教程 **Published by:** [xiaoge](https://paragraph.com/@xiaoge/) **Published on:** 2022-11-11 **URL:** https://paragraph.com/@xiaoge/alchemy ## Content 特别声明: 每周任务前,请参看 任务准备 ,无论此周任务需要用到多少!!!准备工作1. 通过https://mirror.xyz/0x6e780c7DA5f8A26c64C72203042735305EC29F17/VVzmSF5pooV_8ZhdczrLVJlGUYHs_pvvrzw3-xcspy8的步骤,在 Alchemy 上创建一个 ETH Goerli测试网 的APP,并保留此页面2. 将Alchemy Goerli网络添加到Metamask钱包1)点开钱包,选择网络,点击 添加网络2)填写 Goerli 网络和 前面在Alchemy上生成的RPC URL 信息,并保存记得将钱包切换到 Alchemy Goerli测试网3. 在 领水网站上,输入钱包地址领取测试GETH4. 在IPFS上上传NFT和元数据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.json6)上传成功后,复制一下metadata.json的 CID,后面需要用到项目代码初始化1. 进入 Open Zeppelin 智能合约向导页面,将看到以下编辑器2. 点击左上角 ERC721 按钮,输入 Name 和 Symbol3. 勾选如下的NFT功能4. 在 OpenZeppelin Wizard 编辑器的顶部,点击“Open in Remix”按钮,在浏览器的新选项卡中打开 REMIX IDE5. 打开后,等一小会会自动跳到智能合约代码界面1)在第14行填入 uint256 MAX_SUPPLY = 100000; 2)删除17行的 onlyOwner ,否则只允许智能合约的所有者(部署智能合约的钱包地址)铸造 NFT3)在第19行添加require(_tokenIdCounter.current() <= MAX_SUPPLY, "I'm sorry we reached the cap"); 部署智能合约1. 回到 Remix,点击页面左侧的Solidity compiler,版本选0.8.4,勾选Auto compile,然后点击“Compile”按钮2. 左边栏点击“Deploy & Run Transactions”菜单Environment下拉菜单中选择 Injected provider- Metamask contract选择 Alchemy-contracts 这个 点击 Deploy3. 将出现 Metamask 弹出窗口,需支付一些 Gas 费用,单击“确认”4. 如果一切都按预期工作,大约20 秒后,您应该会在左下的 Deployed Contracts 处看到该合约若部署合约出现下面类似的错,请检查钱包的网络是否选对 { "code": -32000, "message": "execution reverted" }测试智能合约功能1. 点开合约2. 点击 safeMint 下拉框to 填入 你的钱包地址 uri 填入 ipfs://准备工作部分metadata.json的CID1)点击transact,会花一点手续费,等一会成功了会在右侧显示绿勾3. 将钱包地址复制并粘贴到 balanceOf 方法输入中点击call,它应该显示您有 1 个 NFT4. 在tokenUri 插入“0”作为 id 参数,点击call,它应该显示你的 tokenURI展示NFT1. 进入 https://goerli.pixxiti.com/ 或者 https://testnets.opensea.io/ ,登录自己钱包,然后单击 View your NFTs ,您应该会在那里看到您新铸造的 NFT1)红圈图片为刚mint的图片2. 如果图像尚不可见,点击进去,然后单击右下的“Refresh”按钮,大约需要几分钟额外挑战(可选做)挑战课题: 如何限制每个钱包的 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]++; 如图:上面 walletLimt 的值可以自行修改,后面测试符合此值即可2. 按 部署智能合约 流程以及 测试智能合约功能 的 safeMint 流程操作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服务器写小作文了 ## Publication Information - [xiaoge](https://paragraph.com/@xiaoge/): Publication homepage - [All Posts](https://paragraph.com/@xiaoge/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@xiaoge): Subscribe to updates - [Twitter](https://twitter.com/Chrish9010): Follow on Twitter