Guessthenumber


文档摘要

Guess the number 题目描述 原题链接 原题目要求 GuessTheNumberChallenge 合约的 ether 余额为 0。而调用 guess 并输入正确答案即可转移 ether 出去。 运行 根据Foundry 官方文档配置好运行环境后,于本项目下执行下列命令: 功能简述 根据 GuessTheNumberChallenge contract 里面的 guess 函数,当我们调用 guess 时,需要往合约里面转入 1 ether,并输入一个 uint8 类型的参数,如果参数等于 answer,42,就能从合约里面转移 2 ether 到调用者。

Guess the number

题目描述

原题链接

原题目要求 GuessTheNumberChallenge 合约的 ether 余额为 0。而调用 guess 并输入正确答案即可转移 ether 出去。

运行

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

$ cd WTF-CTF $ forge test -C src/Capture_the_Ether/Lotteries/Guess_the_number -vvv

功能简述

根据 GuessTheNumberChallenge contract 里面的 guess 函数,当我们调用 guess 时,需要往合约里面转入 1 ether,并输入一个 uint8 类型的参数,如果参数等于 answer,42,就能从合约里面转移 2 ether 到调用者。

function guess(uint8 n) public payable { require(msg.value == 1 ether); if (n == answer) { payable(msg.sender).transfer(2 ether); } }

因此在测试合约中的 setUp,我们先给 hacker 转入 1 ether 用于后续调用 guess,然后创建 GuessTheNumberChallenge。

function setUp() public { payable(hacker).transfer(1 ether); guessTheNumberChallenge = new GuessTheNumberChallenge{value: 1 ether}(); }

在测试合约的 testGuessTheNumber 中,我们调用 guess,设置参数为 42,并携带 1 ether 就能成功完成挑战

vm.startPrank(hacker); guessTheNumberChallenge.guess{value: 1 ether}(42); vm.stopPrank();

发布者: 作者: 转发
评论区 (0)
U