# 區塊鏈原理與應用 HW2 [ToC] <style> img[alt~="w-70"] { width: 85%; } </style> ## 組員名單 - 108321036 莊才賢 - 108321037 林峻葆 ## 程式說明 1. 基於上次的合約,加上 event 的功能,以下是上次實現的功能 1. 有函式 destroy() 可以 selfdestrurct 2. 用 modifier 限制 destory() 只有 owner 可以呼叫 3. 用 require 實現 modifier 的限制 3. Token 合約會透過 Constructor 去呼叫 Faucet 合約的 Withdraw function 4. 利用 Web3.js 進行 web Interface 的撰寫 ## 執行結果 1. 利用 Truffle 創建 Faucet 合約以及 Token 合約 ![w-70](https://i.imgur.com/XfFk6P1.png) 2. 利用 Truffle 創建 Faucet 後再建立 Token 合約 ![w-70](https://i.imgur.com/bDYyWwa.png) --- ![w-70](https://i.imgur.com/aAe24hU.png) 3. Web 會在輸入 address 的時候查詢 event,並且在點擊 `send the eth` 按鈕後持續 listen 後續的 event ![w-70](https://i.imgur.com/AC0xkna.png) ## 遭遇的困難與解決方法 1. Q: 查詢 event 使用的 topics 有固定的格式 A: 第 0 個要用 hash 過後的 function 定義,若是使用 address 要將 address padding 到 64bits 2. Q: truffle migrate 時,Token 合約建立失敗 A: 要在 migration 內定義的 js 檔內預先給 Faucet 一些餘額才可以建立 Token 合約 3. Q: `truffle-config.js`: network id 設定錯誤 A:network id 預設值是 `4`, sepolia 的network id 是 `11155111` 才對 4. Q: 要多申請一個 Infura 的 EndpointURL 才可以用 Truffle 連接到 Sepolia test network 5. Q: Web3.js 的 promiEvent 不能直接透過 async function 傳送回到原先的 function A: 需要把 Callback function 一起傳送到呼叫此 event 的 function