Skip to content

Latest commit

 

History

History
41 lines (24 loc) · 1.72 KB

README.md

File metadata and controls

41 lines (24 loc) · 1.72 KB

Stake

题目描述

原题 in Sepolia

需要达成4个条件

  • Stake 合约的ETH余额必须大于0。
  • totalStaked 必须大于 Stake 合约的 ETH 余额。
  • 我们的账户地址必须为质押者。
  • 我们质押的余额必须为 0。

运行

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

$ cd WTF-CTF

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

功能简述

Stake合约接受两种资产的质押,ETHWETH。虽然两种资产在价值上是1:1等价的。但是WETHETH链原生代币的ERC20包装的版本(具体信息可以查看WTF-Solidity的41节WETH)。

但是Stake合约中将ETHWETH混为一谈。如果我们质押的是WETH,提取的却是ETHStake合约并没有将 WETH兑换为ETHStake合约某种程度上成为了ETH/WETH交易对)。

所以,我们质押WETH,提取ETH。就可以把Stake合约的ETH全部提取出来。

而且,Stake合约在转移质押者的WETH代币时,并没有判断转移交易是否成功,所以,我们只需要在WETH代币中对Stake合约进行授权就好,我们实际有没有WETH代币并不重要。

先质押WETH,在提取ETH,就可以把我们的质押余额清零。

题目的其他两个条件

  • Stake 合约的ETH余额必须大于0。
  • totalStaked 必须大于 Stake 合约的 ETH 余额。

我们只需不提取完其他账户质押的ETH就好(为了完成题目,我们也可以切换个地址进行质押)。