@@ -7,28 +7,35 @@ import "./UpgradeableProxy.sol";
7
7
8
8
contract Registry is IRegistry {
9
9
10
- // contracts
10
+ struct SystemPause {
11
+ // could consider switching to uint48
12
+ uint config;
13
+ uint proposedConfig;
14
+ address proposer;
15
+ }
11
16
12
17
// index = 1 << code
13
18
mapping (uint index = > address contractAddress ) internal contractAddresses;
14
19
mapping (address contractAddress = > uint index ) internal contractIndexes;
15
20
16
- // pause
21
+ // consider changing to uint32 or similar
22
+ // could shove into a struct
23
+ uint public memberCount;
24
+ uint public lastMemberId;
25
+
26
+ mapping (uint memberId = > address member ) internal members;
27
+ mapping (address member = > uint memberId ) internal memberIds;
28
+ mapping (bytes32 signature = > bool used ) internal usedSignatures;
29
+ mapping (uint memberId = > bool isAdvisoryBoardMember ) public isAdvisoryBoardMember;
30
+
31
+ mapping (address => bool ) isEmergencyAdmin; // 1 slot
32
+ SystemPause internal systemPause; // 3 slots
17
33
18
34
uint constant PAUSE_GLOBAL = 1 ; // 0b0000000000000001
19
35
uint constant PAUSE_RAMM = 2 ; // 0b0000000000000010
20
36
uint constant PAUSE_X = 4 ; // 0b0000000000000100
21
37
uint constant PAUSE_Y = 8 ; // 0b0000000000001000
22
38
23
- struct SystemPause {
24
- uint config;
25
- uint proposedConfig;
26
- address proposer;
27
- }
28
-
29
- mapping (address => bool ) isEmergencyAdmin; // 1 slot
30
- SystemPause internal systemPause; // 3 slots
31
-
32
39
function proposePauseConfig (uint config ) external {
33
40
require (isEmergencyAdmin[msg .sender ], NotEmergencyAdmin ());
34
41
systemPause.proposedConfig = config;
@@ -49,26 +56,19 @@ contract Registry is IRegistry {
49
56
// emit event
50
57
}
51
58
52
- function getPauseConfig () external view returns (SystemPause memory pauseConfig ) {
59
+ function getSystemPause () external view returns (SystemPause memory ) {
53
60
return systemPause;
54
61
}
55
62
63
+ function getPauseConfig () external view returns (uint config ) {
64
+ return systemPause.config;
65
+ }
66
+
56
67
function isPaused (uint mask ) external view returns (bool ) {
57
68
uint config = systemPause.config;
58
69
return (PAUSE_GLOBAL & config) != 0 || (config & mask) != 0 ;
59
70
}
60
71
61
- // membership
62
-
63
- uint public memberCount;
64
- uint public lastMemberId;
65
-
66
- /// WITHOUT DESIGNATED ROLES
67
-
68
- mapping (uint memberId = > address member ) internal members;
69
- mapping (address member = > uint memberId ) internal memberIds;
70
- mapping (uint memberId = > bool isAdvisoryBoardMember ) public isAdvisoryBoardMember;
71
-
72
72
function isMember (address member ) external view returns (bool ) {
73
73
return memberIds[member] != 0 ;
74
74
}
@@ -93,15 +93,20 @@ contract Registry is IRegistry {
93
93
memberIds[member] = memberId;
94
94
members[memberId] = member;
95
95
// todo:
96
+ // validate signature
97
+ // mark signature as used
96
98
// TC.addToWhitelist(member)
97
99
}
98
100
99
101
function swap (address to ) external {
100
- require (memberIds[to] == 0 , AlreadyMember ());
101
102
uint memberId = memberIds[msg .sender ];
102
- members[memberId] = to;
103
- memberIds[to] = memberId;
103
+ require (memberId != 0 , NotMember ());
104
+ require (memberIds[to] == 0 , AlreadyMember ());
105
+
104
106
delete memberIds[msg .sender ];
107
+ memberIds[to] = memberId;
108
+ members[memberId] = to;
109
+
105
110
// todo:
106
111
// TC.removeFromWhitelist(msg.sender)
107
112
// TC.addToWhitelist(to)
@@ -113,6 +118,7 @@ contract Registry is IRegistry {
113
118
uint memberId = memberIds[msg .sender ];
114
119
require (memberId != 0 , NotMember ());
115
120
require (! isAdvisoryBoardMember[memberId], AdvisoryBoardMemberCannotLeave ());
121
+
116
122
// todo:
117
123
// address[] memory pools = TC.getManagerStakingPools(memberId)
118
124
// require(pools.length == 0, StakingPoolManagersCannotLeave());
@@ -122,78 +128,14 @@ contract Registry is IRegistry {
122
128
123
129
// todo:
124
130
// TC.removeFromWhitelist(msg.sender)
125
- // TK.burnFrom(msg.sender)
126
- }
127
-
128
- /// WITH DESIGNATED ROLES
129
-
130
- struct AddressInfo {
131
- uint32 id; // member id
132
- uint8 role; // role id
133
- }
134
-
135
- struct MemberRole {
136
- uint32 id;
137
- uint8 role;
138
- address addr;
139
- }
140
-
141
- mapping (uint id = > mapping (uint role = > address )) internal roleAddresses;
142
- mapping (address => AddressInfo) internal addressToInfo;
143
- mapping (uint id = > mapping (uint role = > address nominee )) internal roleOffers;
144
-
145
- /* == MEMBER MANAGEMENT == */
146
-
147
- function getAddress (uint id , uint role ) external view returns (address ) {
148
- return roleAddresses[id][role];
149
- }
150
-
151
- function getMemberAddresses (uint id ) external view returns (MemberRole[] memory memberRoles ) {
152
- memberRoles = new MemberRole [](256 );
153
-
154
- for (uint role = 1 ; role <= 256 ; role++ ) {
155
- AddressInfo memory info = addressToInfo[roleAddresses[id][role]];
156
- memberRoles[role - 1 ] = MemberRole ({
157
- id: info.id,
158
- role: info.role,
159
- addr: roleAddresses[id][role]
160
- });
161
- }
162
-
163
- return memberRoles;
164
- }
165
-
166
- function nominateAddress (uint role , address nominee ) external {
167
- AddressInfo memory info = addressToInfo[msg .sender ];
168
- require (info.id != 0 , NotMember ());
169
- require (info.role == 1 , NotMainAddress ());
170
-
171
- require (role > 0 && role <= 256 , InvalidRole ());
172
- roleOffers[info.id][role] = nominee;
173
- }
174
-
175
- function acceptNomination (uint memberId , uint role ) external {
176
-
177
- require (memberId != 0 , InvalidMemberId ());
178
- require (role > 0 && role <= 256 , InvalidRole ());
179
-
180
- address nominee = roleOffers[memberId][role];
181
- require (nominee == msg .sender , NotNominee ());
182
-
183
- roleAddresses[memberId][role] = nominee;
184
- addressToInfo[nominee] = AddressInfo ({ id: memberId, role: role });
185
-
186
- delete roleOffers[memberId][role];
187
- }
188
-
189
- function getMember (address addr ) external view returns (uint id , uint role ) {
190
- AddressInfo memory info = addressToInfo[addr];
191
- return (info.id, info.role);
131
+ // uint balance = TK.balanceOf(msg.sender)
132
+ // TK.burnFrom(msg.sender, balance) // or revert?
192
133
}
193
134
194
135
/* == CONTRACT MANAGEMENT == */
195
136
196
137
function addContract (uint code , bytes32 salt , address implementation ) external {
138
+ require (code <= type (uint8 ).max, InvalidContractCode ());
197
139
require (contractAddresses[1 << code] == address (0 ), ContractAlreadyExists ());
198
140
UpgradeableProxy proxy = new UpgradeableProxy {salt: bytes32 (salt)}();
199
141
proxy.upgradeTo (implementation);
@@ -202,30 +144,30 @@ contract Registry is IRegistry {
202
144
}
203
145
204
146
function upgradeContract (uint code , address implementation ) external {
205
- require (code <= uint ( type (Contract ).max) , InvalidContractCode ());
147
+ require (code <= type (uint8 ).max, InvalidContractCode ());
206
148
address contractAddress = contractAddresses[1 << code];
207
149
require (contractAddress != address (0 ), ContractDoesNotExist ());
208
150
UpgradeableProxy proxy = UpgradeableProxy (payable (contractAddress));
209
151
proxy.upgradeTo (implementation);
210
152
}
211
153
212
154
function deprecateContract (uint code ) external {
213
- require (code <= uint ( type (Contract ).max) , InvalidContractCode ());
155
+ require (code <= type (uint8 ).max, InvalidContractCode ());
214
156
address contractAddress = contractAddresses[1 << code];
215
157
require (contractAddress != address (0 ), ContractDoesNotExist ());
216
158
contractIndexes[contractAddress] = 0 ;
217
159
contractAddresses[1 << code] = address (0 );
218
160
}
219
161
220
162
function getContractByCode (uint code ) external view returns (address ) {
221
- require (code <= uint ( type (Contract ).max) , InvalidContractCode ());
163
+ require (code <= type (uint8 ).max, InvalidContractCode ());
222
164
return contractAddresses[1 << code];
223
165
}
224
166
225
167
function getContractsByCode (uint [] memory codes ) external view returns (address [] memory addresses ) {
226
168
addresses = new address [](codes.length );
227
169
for (uint i = 0 ; i < codes.length ; i++ ) {
228
- require (codes[i] <= uint ( type (Contract ).max) , InvalidContractCode ());
170
+ require (codes[i] <= type (uint8 ).max, InvalidContractCode ());
229
171
addresses[i] = contractAddresses[1 << codes[i]];
230
172
}
231
173
}
0 commit comments