# Beard | C0041103 - 第 3 週作業 # 基本題一 部署 ERC721 > 部署方式:Remix 部署方式選擇 JavaScript VM(Lodon) > 1. 找到檔案中的 myToken721.sol > 2. 嘗試修改 name 與 symbol,取名可以是你喜歡的名字、貨幣 此次合約設定的 name/symbol 為 BeardNFT / BDNFT <br/> > 3. 調整 mint 數量,確定能夠拿到 2 個 ERC721 Token 使用 packageMint 並設定 mintNumber = 2 即可得到 2 個 ERC721 token ![](https://i.imgur.com/iJa6iff.png) <br/> > 4. 添加一個功能並且傳送 n 個數量 ERC721 Token 給二號(ex. 0x977e01DDd064e404227eea9E30a5a36ABFDeF93D)地址 功能內容:添加一個function 可以轉 token 數量給某個錢包,例:購買Token、mintToken 利用 myToken721.changeHands 並設定 (address from, address to, number n ) 即可從 from 轉移到 to n 個數量的ERC721 (根據取得的順序給 _ownerTokenMapping) ![](https://i.imgur.com/o08xOWT.png) <br/> > 5. 貼 程式碼 Gist 連結 & 交易成功的截圖 * 部署 ERC721的 Gist 連結網址: https://gist.github.com/BeardYing/8a7c548526bbab3cc1993c4dd1664faa # 基本題二 部署 ERC20 > 部署方式:Remix 部署方式選擇 JavaScript VM(Lodon) > 1. 找到檔案中的 myToken.sol > 2. 嘗試修改 name 與 symbol 目前設定為 BeardToken / BT <br/> > 3. 調整 mint 數量,確定能夠拿到 10,000 個 ERC20 Token 在deploy時,直接輸入 initial 數量 10000,即可得到 10,000 個 ERC20 Token ![](https://i.imgur.com/6uAKS0z.png) > 4. 添加一個功能並且傳送 n 個數量 ERC20 Token 給二號(ex. 0x977e01DDd064e404227eea9E30a5a36ABFDeF93D)地址 功能內容:添加一個function 可以轉 token 數量給某個錢包,例:購買Token、mintToken 利用 payComission,並且設定 *to* = 0xAb84...cb2 與 *amount* = 5000,即可轉移自己錢包中的 5000 個token 給 0xAb84...cb2,並可以使用 alanceOf查看數量有正常轉移 ![](https://i.imgur.com/sIGkOrt.png) > 5. 貼 程式碼 Gist 連結 & 交易成功的截圖 * 部署 ERC20 的 Gist 連結網址: https://gist.github.com/BeardYing/124110f277a153742f7addfaec9a56c4 --- # 進階題一:ERC721 自行添加功能優化 > 部署方式:Remix 部署方式改選使用 Injected Web3(Metamask),部署至 Goerli 測試鏈 > > 1. 選擇一個測試用的錢包(請新開錢包盡量不要用原本自己在使用的) > 2. Metamask 中選擇 Goerli 網路進行部署 > 3. 將必要完成作業的合約部署至 Goerli 測試鏈 > 4. 進行呼叫,並且傳送 1 個 ERC721 Token 至(0x977e01DDd064e404227eea9E30a5a36ABFDeF93D)地址 操作流程 - 部署完成後,先利用 packageMint 取得 10 張 ERC721 - [交易紀錄](https://goerli.etherscan.io/tx/0xee3da396768e1c981fc8fa194001abf7784ea44c6e4edebe3a6d15c90794495b) - 利用 safeTransferFrom 轉移,將 TokenId = 9 轉到指定位置 - [交易紀錄](https://goerli.etherscan.io/tx/0x8d7a9eeb05b5041d59e3ef471680f1b2105bf29d0d4ab13f94729d4680903d07) <br/> > 5. 自行嘗試是否能新增額外功能,使用最直覺撰寫方式即可,不需要針對燃料費用或程式內容進行優化 > 例如(燃燒 ERC721 Token、退款 ERC721 Token、鑄造購買時將多餘的金額進行自動退款,或有其他想法也行)。 自行嘗試功能不一定要非常完整,但至少必須要能夠提出偽代碼,並且說明用途,在實體課程時可以一起討論實作方式。 自行新增的額外功能說明 ( lotteryCombine ): * 目前實作一個合併特殊token的功能,可以利用三個 tokenId 除以 5 餘數相同的 3 張 ERC721 ,合併成 1 張特殊 ERC721 * 合約初始化時,可以輸入 ERC721 的總供應量 *_maxMintSupply* 張(合約中有設定最大 1,000 張),以及特殊 ERC721 總發行量 *advSupply* 張(合約中有設定最大 3 張) * 合併過後的 ERC721 禁止轉移,也不可重複使用 * 此功能設定成僅限擁有者可以合併,不可以使用其他錢包 approve 的 ERC721 功能說明: * lotteryCombine(uint256 tokenId1, uint256 tokenId2, uint256 tokenId3) : 兌換特殊ERC721,輸入 三個 token Id * isLocked() : 查詢ERC721 是否已經被鎖定(已經合併過) * specialOwnerOf(uint256 tokenId) : 利用 特殊的 ERC721 的 token id 查詢擁有地址 * burn:開放可以燒毀 ERC721 操作流程(接續Q4操作說明): - 再利用 packageMint 取得 10 張 ERC721 ,錢包擁有 tokenId 0~8 與 10~19 - [交易紀錄](https://goerli.etherscan.io/tx/0x9fbcf19b3c2cfe58844b6e5a53448ce2e04896f2105fa22ad7ee44d23923da6f) - 準備進行 特殊 ERC721 取得,合併 Token ID [0,5,10] (三項除以 5 餘數皆為 0 ) - [交易紀錄](https://goerli.etherscan.io/tx/0x710f8df11957bc47a6b9c5524de8f1b7678f5c3bc2e812beaa64c1fff7ed4d24) - 藉由 specialOwnerOf 查詢 id=0 可以看到已經屬於地址:0xadF8...b19 ![](https://i.imgur.com/he2vTao.png) Gist: https://gist.github.com/BeardYing/06d378eec701cb8f2d6a9ad0e4e739eb Verify 開源的智能合約地址 :https://goerli.etherscan.io/address/0xa36a71f9096fbd18a3370c7a9cff74ad4ecde813#code # 進階題二-不引用原有標準 ERC20 檔案,完成部署 ERC20 合約,並將 Token 傳送至指定錢包地址 > - 不透過原有的標準 ERC20 檔案,思考如何用學習到的語法自行撰寫一個可以自訂 name, symbol > - 該智能合約必須完成 totalSupply, balanceOf 與 transfer 的方法使用。 > - 傳送完成的 ERC20 Token 至(0x977e01DDd064e404227eea9E30a5a36ABFDeF93D)地址 > - 貼 程式碼 Gist 連結或是 Verify 開源的智能合約 & 交易成功的截圖 > - 不引用原有標準 ERC20 檔案,完成部署 ERC20 合約,並將 Token 傳送至指定錢包地址 - 初始化 token 數量:100,000 顆 - 轉 10,000 顆到出到指定地址 - [交易紀錄](https://goerli.etherscan.io/tx/0x5aa6d7dcc0199598b111537d413668f0fd314107f175d5fe57a9ed7444410d0f) - 轉出帳戶餘額:90,000 ![](https://i.imgur.com/GKHKvJh.png) - 轉入帳戶餘額:10,000 ![](https://i.imgur.com/Dk5IhVO.png) <br/><br/> 程式碼 Gist 連結: https://gist.github.com/BeardYing/630120a740e36bcd76b68d44e75d46b1 Verify 開源的智能合約地址: https://goerli.etherscan.io/address/0x2220eba5ac966d5a5e929f9268e095ce58880c5f#code ###### tags: `Solidity 工程師實戰營第 4 期`