· 6 years ago · Oct 08, 2019, 05:08 PM
1pragma solidity ^0.4.18;
2
3interface IKey {
4 function key() external view returns (bytes32);
5}
6
7contract GroupBank {
8 bool jackKey;
9 bool billKey;
10 bool boyuKey;
11 bytes secretKey;
12 address groupAddress;
13 address quickAddress;
14
15 function GroupBank (address _address, address _address2, bytes _key) {
16 jackKey = false;
17 billKey = false;
18 boyuKey = false;
19 secretKey = _key;
20 groupAddress = _address;
21 quickAddress =_address2;
22 }
23
24 function complete() returns (bool) {
25 require(key2(msg.sender));
26 require(key3(secretKey));
27 return true;
28 }
29
30 function key1 (address _address) internal returns (bool){
31 require(msg.sender == _address);
32
33 if(IKey(_address).key() == bytes32("jackSecretKey")){
34 jackKey = true;
35 return true;
36 }
37
38 return false;
39 }
40
41 function key2 (address _address) public returns (bool) {
42 require(key1(_address));
43
44 bytes20 addr = bytes20(_address);
45 bytes20 billSecret = hex"000000000000000000000000000000000badb111";
46 bytes20 mask = hex"0000000000000000000000000000000001234567";
47
48 for (uint256 i = 0; i < 34; i++) {
49 if (addr & mask == billSecret) {
50 billKey = true;
51 return true;
52 }
53 mask <<= 4;
54 billSecret <<= 4;
55 }
56
57 return false;
58 }
59
60 function key3 (bytes _key) public returns (bool) {
61 require(address(keccak256(_key)) == groupAddress);
62
63 boyuKey = true;
64 return true;
65 }
66
67 function quickOpen (bytes _screct) {
68 require(msg.sender == 0.42 ether);
69 secretKey = _screct;
70 groupAddress = quickAddress;
71 boyuKey = true;
72 }
73
74}