Skip to content

Commit dce1722

Browse files
committed
--wip-- [skip ci]
1 parent 857b991 commit dce1722

File tree

1 file changed

+39
-97
lines changed

1 file changed

+39
-97
lines changed

contracts/modules/governance/Registry.sol

Lines changed: 39 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,35 @@ import "./UpgradeableProxy.sol";
77

88
contract Registry is IRegistry {
99

10-
// contracts
10+
struct SystemPause {
11+
// could consider switching to uint48
12+
uint config;
13+
uint proposedConfig;
14+
address proposer;
15+
}
1116

1217
// index = 1 << code
1318
mapping(uint index => address contractAddress) internal contractAddresses;
1419
mapping(address contractAddress => uint index) internal contractIndexes;
1520

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
1733

1834
uint constant PAUSE_GLOBAL = 1; // 0b0000000000000001
1935
uint constant PAUSE_RAMM = 2; // 0b0000000000000010
2036
uint constant PAUSE_X = 4; // 0b0000000000000100
2137
uint constant PAUSE_Y = 8; // 0b0000000000001000
2238

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-
3239
function proposePauseConfig(uint config) external {
3340
require(isEmergencyAdmin[msg.sender], NotEmergencyAdmin());
3441
systemPause.proposedConfig = config;
@@ -49,26 +56,19 @@ contract Registry is IRegistry {
4956
// emit event
5057
}
5158

52-
function getPauseConfig() external view returns (SystemPause memory pauseConfig) {
59+
function getSystemPause() external view returns (SystemPause memory) {
5360
return systemPause;
5461
}
5562

63+
function getPauseConfig() external view returns (uint config) {
64+
return systemPause.config;
65+
}
66+
5667
function isPaused(uint mask) external view returns (bool) {
5768
uint config = systemPause.config;
5869
return (PAUSE_GLOBAL & config) != 0 || (config & mask) != 0;
5970
}
6071

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-
7272
function isMember(address member) external view returns (bool) {
7373
return memberIds[member] != 0;
7474
}
@@ -93,15 +93,20 @@ contract Registry is IRegistry {
9393
memberIds[member] = memberId;
9494
members[memberId] = member;
9595
// todo:
96+
// validate signature
97+
// mark signature as used
9698
// TC.addToWhitelist(member)
9799
}
98100

99101
function swap(address to) external {
100-
require(memberIds[to] == 0, AlreadyMember());
101102
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+
104106
delete memberIds[msg.sender];
107+
memberIds[to] = memberId;
108+
members[memberId] = to;
109+
105110
// todo:
106111
// TC.removeFromWhitelist(msg.sender)
107112
// TC.addToWhitelist(to)
@@ -113,6 +118,7 @@ contract Registry is IRegistry {
113118
uint memberId = memberIds[msg.sender];
114119
require(memberId != 0, NotMember());
115120
require(!isAdvisoryBoardMember[memberId], AdvisoryBoardMemberCannotLeave());
121+
116122
// todo:
117123
// address[] memory pools = TC.getManagerStakingPools(memberId)
118124
// require(pools.length == 0, StakingPoolManagersCannotLeave());
@@ -122,78 +128,14 @@ contract Registry is IRegistry {
122128

123129
// todo:
124130
// 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?
192133
}
193134

194135
/* == CONTRACT MANAGEMENT == */
195136

196137
function addContract(uint code, bytes32 salt, address implementation) external {
138+
require(code <= type(uint8).max, InvalidContractCode());
197139
require(contractAddresses[1 << code] == address(0), ContractAlreadyExists());
198140
UpgradeableProxy proxy = new UpgradeableProxy{salt: bytes32(salt)}();
199141
proxy.upgradeTo(implementation);
@@ -202,30 +144,30 @@ contract Registry is IRegistry {
202144
}
203145

204146
function upgradeContract(uint code, address implementation) external {
205-
require(code <= uint(type(Contract).max), InvalidContractCode());
147+
require(code <= type(uint8).max, InvalidContractCode());
206148
address contractAddress = contractAddresses[1 << code];
207149
require(contractAddress != address(0), ContractDoesNotExist());
208150
UpgradeableProxy proxy = UpgradeableProxy(payable(contractAddress));
209151
proxy.upgradeTo(implementation);
210152
}
211153

212154
function deprecateContract(uint code) external {
213-
require(code <= uint(type(Contract).max), InvalidContractCode());
155+
require(code <= type(uint8).max, InvalidContractCode());
214156
address contractAddress = contractAddresses[1 << code];
215157
require(contractAddress != address(0), ContractDoesNotExist());
216158
contractIndexes[contractAddress] = 0;
217159
contractAddresses[1 << code] = address(0);
218160
}
219161

220162
function getContractByCode(uint code) external view returns (address) {
221-
require(code <= uint(type(Contract).max), InvalidContractCode());
163+
require(code <= type(uint8).max, InvalidContractCode());
222164
return contractAddresses[1 << code];
223165
}
224166

225167
function getContractsByCode(uint[] memory codes) external view returns (address[] memory addresses) {
226168
addresses = new address[](codes.length);
227169
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());
229171
addresses[i] = contractAddresses[1 << codes[i]];
230172
}
231173
}

0 commit comments

Comments
 (0)