Stake 题目描述 原题 in Sepolia 需要达成4个条件 合约的ETH余额必须大于0。 必须大于 合约的 ETH 余额。 我们的账户地址必须为质押者。 我们质押的余额必须为 0。 运行 根据Foundry 官方文档配置好运行环境后,于本项目下执行下列命令: 功能简述 合约接受两种资产的质押, 和 。虽然两种资产在价值上是1:1等价的。但是 是 原生代币的 包装的版本(具体信息可以查看WTF-Solidity的41节WETH)。 但是 合约中将 和 混为一谈。如果我们质押的是 ,提取的却是 ( 合约并没有将 兑换为 , 合约某种程度上成为了 / 交易对)。 所以,我们质押 ,提取 。就可以把 合约的 全部提取出来。
需要达成4个条件
Stake 合约的ETH余额必须大于0。totalStaked 必须大于 Stake 合约的 ETH 余额。根据Foundry 官方文档配置好运行环境后,于本项目下执行下列命令:
$ cd WTF-CTF $ forge test -C src/Ethernaut/Stake -vvvvv
Stake合约接受两种资产的质押,ETH和WETH。虽然两种资产在价值上是1:1等价的。但是WETH是ETH链原生代币的ERC20包装的版本(具体信息可以查看WTF-Solidity的41节WETH)。
但是Stake合约中将ETH和WETH混为一谈。如果我们质押的是WETH,提取的却是ETH(Stake合约并没有将 WETH兑换为ETH,Stake合约某种程度上成为了ETH/WETH交易对)。
所以,我们质押WETH,提取ETH。就可以把Stake合约的ETH全部提取出来。
而且,Stake合约在转移质押者的WETH代币时,并没有判断转移交易是否成功,所以,我们只需要在WETH代币中对Stake合约进行授权就好,我们实际有没有WETH代币并不重要。
先质押WETH,在提取ETH,就可以把我们的质押余额清零。
题目的其他两个条件
Stake 合约的ETH余额必须大于0。totalStaked 必须大于 Stake 合约的 ETH 余额。我们只需不提取完其他账户质押的ETH就好(为了完成题目,我们也可以切换个地址进行质押)。