从DexTwo
合约中耗尽 token1 和 token2 的所有余额才能成功通过此级别。
您仍将以 10 个标记token1
和 10 个标记开始token2
。DEX 合约仍然以每个代币 100 个开始。
根据Foundry 官方文档配置好运行环境后,于本项目下执行下列命令:
$ cd WTF-CTF
$ forge test -C src/Ethernaut/Dex_Two -vvvvv
// swap的价格计算
// 但是Dex Two 并没有限制to/from 必须是 token1/token2
((amount * IERC20(to).balanceOf(address(this)))/IERC20(from).balanceOf(address(this)))
铸造400个token3,给合约转100个token3。
我开始有10个token1,10个token2,300个token3,合约有100个token1,100个token2,100个token3。
- 我用100个token3换100个token1,因为 (100*100)/100 = 100 。 第一次swap后,我就有110个token1,10个token2,200个token3 ;合约有0个token1,100个token2,200个token3。
- 我用200个token3换100个token2,因为 (200*100)/200 = 100 。第二次swap后,我就有110个token1,110个token2,0个token3 ;合约有0个token1,0个token2,400个token3。
至此,经过2轮,合约中的token1与token2已经被掏空了。