-
Notifications
You must be signed in to change notification settings - Fork 76
/
MagicNumFactory.sol
39 lines (28 loc) · 1021 Bytes
/
MagicNumFactory.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
37
38
39
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;
import "./MagicNum.sol";
import "../BaseLevel.sol";
interface Solver {
function whatIsTheMeaningOfLife() external view returns (bytes32);
}
contract MagicNumFactory is Level {
function createInstance(address) override public payable returns (address) {
return address(new MagicNum());
}
function validateInstance(address payable _instance, address) override public returns (bool) {
// Retrieve the instance.
MagicNum instance = MagicNum(_instance);
// Retrieve the solver from the instance.
Solver solver = Solver(instance.solver());
// Query the solver for the magic number.
bytes32 magic = solver.whatIsTheMeaningOfLife();
if(magic != 0x000000000000000000000000000000000000000000000000000000000000002a) return false;
// Require the solver to have at most 10 opcodes.
uint256 size;
assembly {
size := extcodesize(solver)
}
if(size > 10) return false;
return true;
}
}