---
# System prepended metadata

title: '#4作業模板：用 chainlink VRF 產生隨機數來實作樂'
tags: [Solidity 工程師實戰營第 4 期]

---

# #4作業模板：用 chainlink VRF 產生隨機數來實作樂
學號：Jess | C0041203

:::spoiler
## 基本題

- 多人可以參與這期投注，該期投注的總金額會作為當期樂透發放獎金
- 實作一個參與樂透 ==enter== Function，參與者必須投入 0.001 ether 才能參與這期樂透（提示：可定義 enter function，並用 payable 接收 eth）
```solidity=
function enter () payable {
    // ...
}
```
- 可以知道參與這期樂透有多少人
- 可以知道這期總獎金額目前是多少 ether
- 合約需定義 ==getRandomNumber== Function，必須使用 ChainLink VRF 預言機來取得隨機數
- 部署合約者是 owner
    - 提示：在constructor設定
- owner 可以呼叫 ==pickWinner== Function，挑出這期幸運得主，並將樂透總獎金自動轉給幸運得主錢包
- 開獎條件：本期樂透總獎金必須累積到某個金額（例：0.01 eth），owner才可開獎。
- 幸運得主可獲得樂透本期總投注獎金 100%
    - 例：本期樂透共有 6 位 User 投入，獎池有 2 eth，則將 2 eth 全部轉給某位幸運得主
- 合約需部署到 Goerli 測試鏈，並 Verify 開源

> 盡量不要設定太大數字，因要上測試鏈，需珍惜僅有的測試幣

## 進階題（可選）
- 設定每一期樂透開獎時間限制（例如10分鐘）開獎一次
    - 若開獎時間未到，owner 無法進行開獎
    - 若已超過開獎時間，未累積到指定開獎金額（例：0.01 eth），則退款給本期所有投注者 
:::

## 繳交作業

- Goerli 合約地址：https://goerli.etherscan.io/address/0x2FfFE971Bc5Dd997c14c0c9f15ee7a024D419B58#code
- Github 原始碼：https://gist.github.com/wangpiju/824baaa2af04f85cb9022d84abafe456
- 基本題：Y
- 進階題：Y
- 這次因為自己的版本只有基本題，所以改用上課的版本交功課ＸＤ，有在本地進行充分測試以及理解

###### tags: `Solidity 工程師實戰營第 4 期`