---
# System prepended metadata

title: 區塊鏈原理與應用 HW2

---

# 區塊鏈原理與應用 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 

