Skip to content

Latest commit

 

History

History
36 lines (21 loc) · 1.39 KB

README.md

File metadata and controls

36 lines (21 loc) · 1.39 KB

King

题目描述

原题 in Sepolia

King合约表示了一个很简单的游戏: 任何一个发送了高于目前价格的人将成为新的国王。上一个国王将会获得新的出价, 这样可以赚得一些以太币. 看起像是庞氏骗局.

这么有趣的游戏, 你的目标是攻破他.

当你提交实例给关卡时, 关卡会重新申明王位. 你需要阻止他重获王位来通过这一关.

运行

根据Foundry 官方文档配置好运行环境后,于本项目下执行下列命令:

$ cd WTF-CTF

$ forge test -C src/Ethernaut/King -vvvvv

功能简述

合约账户在收到转账后,会自动执行receive函数或fallback函数(区别)。

合约中使用 transfer函数进行合约转账,transfer函数执行失败时,会回滚交易。而call函数进行转账时失败了只会返回false(solidity三种发送ETH的方法)。

所以我们可以使用合约申请为king,然后在合约的receive函数中revert掉所有转账交易。这样就没有人可以替代我们成为新王。

receive() external payable {
	revert();
}