# Garrick信仲 | C0051202 Cryptocamp第5期第四週作業 ## Homework Description ### 基本題 - 完成今天基本 Foundry 功能 1. 本機節點(拍照) 2. 選擇 NFT 基本版或上次的 TodoList 智能合約搬到 Foundry 3. 部署到自己的節點 4. 使用 Test/Script 來檢驗自己的智能合約 * 增加自己額外功能 ### 進階題 - 使用 Foundry 部署到測試鏈 ## Outcome ### 基本題 #### 本機節點 VS Code啟動節點 ![](https://i.imgur.com/HAWUBJk.png) 在INFURA上確認Requests狀況 ![](https://i.imgur.com/IhyMoWq.png) --- #### NFT基本版及部署本機的節點 部署NFT基本版 ![](https://i.imgur.com/RWaX8Kc.png) Anvil colsole畫面 ![](https://i.imgur.com/tDgG8qe.png) Call the method ![](https://i.imgur.com/EHhPk2J.png) Anvil colsole畫面 ![](https://i.imgur.com/A5RR3MQ.png) --- #### 使用test檢驗自己的合約 使用範例修改後執行`forge test --gas-report` ![](https://i.imgur.com/IEnZ4k2.png) --- ### 進階題 #### 部署到測試鏈 參考 [https://github.com/eth-clients/sepolia](https://github.com/eth-clients/sepolia) [https://book.getfoundry.sh/forge/deploying](https://book.getfoundry.sh/forge/deploying) 使用`https://rpc.sepolia.ethpandaops.io`的RPC位址和自己Metamask的private key 部署到現在使用相對Goerli便宜的Sepolia測試鏈上 [https://sepolia.etherscan.io/tx/0xb966c97e1168c7b5d5d0494558f2f6a15e37cfced86481cbc7a77ce576e91406](https://sepolia.etherscan.io/tx/0xb966c97e1168c7b5d5d0494558f2f6a15e37cfced86481cbc7a77ce576e91406) 部署指令執行結果 ![](https://i.imgur.com/2jOgf1F.png) 測試鏈畫面 ![](https://i.imgur.com/yjSuK7Q.png) Verify Code 使用指令 ``` forge verify-contract \ --chain-id 11155111 \ --watch \ --etherscan-api-key $ETHSCAN_API_KEY \ --compiler-version v0.8.10+commit.fc410830 \ 0x351979FBE8390e39662EE19DBdf2effcE1A5BDB5 \ src/NFT.sol:NFT ``` 指令執行結果 ![](https://i.imgur.com/Rq6jNgl.png) 測試鏈上合約的畫面 ![](https://i.imgur.com/2Ha3r0Z.png) --- # More Practice : Aave Protocol ## 第五週課前準備-做自己的借貸協議-以Aave Protocol為例 ### Aave程式碼借貸協議實做 先將Github上的 Aave-defi-fork網址 : [https://github.com/madeinfree/aave-defi-fork](https://github.com/madeinfree/aave-defi-fork) 先複製Git的Code Clone HTTPS位址 ![](https://i.imgur.com/kb79FGs.png) 在VS Code上執行指令,最後的aave_defi_fork是建立的資料夾名稱 ``` forge init --template https://github.com/madeinfree/aave-defi-fork.git aave_defi_fork ``` 建立完成可以把資料夾加入Workspace,然後就可以看到相關的程式都呈現在VS Code ![](https://i.imgur.com/hSItgIP.png) 直接執行`forge test -vvv --watch`出現結果 ![](https://i.imgur.com/CDRirX8.png) --- # More Practice : Liquidity Pool ## 第五週課前準備-做一個去中心化交易所 ### Uniswap V1 程式碼部署實作 #### 實作結果(Remix) ![](https://i.imgur.com/RAeP6cI.png) #### 實作結果(Foundry) 先將合約貼到手動建立的一個項目叫UniswapV1,然後寫一支測試程式先重現未approve的錯誤 ![](https://i.imgur.com/G1tiJ3m.png) 使用approve將權限給予Exchange後,出現另一個錯誤"ERC20: transfer amount exceeds balance" ![](https://i.imgur.com/3xltqkk.png) 經過測試,增加Prank模擬擁有token的帳號(就是mint方法給的帳號地址),這樣才能夠讓這個模擬使用這個帳號將權限賦予Exchange 擁有token的帳號地址 : 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4 Exchange的帳號地址 : 0x037eDa3aDB1198021A9b2e88C22B464fD38db3f3 ![](https://i.imgur.com/Q0gpX8u.png) ## Uniswap V3 利用Liquidity Pool實際案例使用Foundry來開發及測試程式,藉以體驗將上課內容實際運用在小規模開發測試場景,並在開發測試過程中可能遇到的問題並嘗試解決。 ## References Uniswap V3 Development Book : [https://uniswapv3book.com/docs/](https://uniswapv3book.com/docs/) How do Liquidity Pools work? [https://www.youtube.com/watch?v=cizLhxSKrAc](https://www.youtube.com/watch?v=cizLhxSKrAc) Deploy a Liquidity Pool on PancakeSwap : [https://www.youtube.com/watch?v=g7TuczcklrY](https://www.youtube.com/watch?v=g7TuczcklrY) ## Development Steps 依Uniswap V3 Development Book建立相關的程式 ![](https://i.imgur.com/pRycad7.png) 使用線上的Python編輯器Replit執行相關的計算出相關的數值 ![](https://i.imgur.com/fK5Q4fc.png) ## Problems and Solutions 在Milestone 1. First Swap的First Swap章節最後執行forge test時出現錯誤,依照錯誤的訊息在網路上查找發現應該是數字有問題,後來發現是有一個負號沒加上 ![](https://i.imgur.com/5bj5TJA.png) 這個錯誤訊息主要是看紅色字的方法,錯誤會是巢狀方式呈現從上層方法到方法裡呼叫的方法,例如以下錯誤發生時的訊息圖片截取出可以找到問題片段,可以看到這是發生在MyTestPool::swap方法裡,再往下看可以找到紅字部份是出錯的方法 ![](https://i.imgur.com/iGBzEKZ.png) 錯誤還在處理中…