Skip to content

Commit cba3b3a

Browse files
committed
Adds server id as a parameter
1 parent 48273ab commit cba3b3a

File tree

1 file changed

+56
-33
lines changed

1 file changed

+56
-33
lines changed

contracts/contracts/coordination/SigningCoordinator.sol

Lines changed: 56 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,9 @@ contract SigningCoordinator is Initializable, AccessControlDefaultAdminRulesUpgr
5151
uint256[20] gap;
5252
}
5353

54-
struct ServerAdmin {
55-
bool active;
54+
struct Server {
55+
address[] serverAdmins;
56+
mapping(address serverAdmin => bool active) activeServerAdmins;
5657
mapping(uint256 chainId => bytes conditions) conditions;
5758
}
5859

@@ -68,8 +69,7 @@ contract SigningCoordinator is Initializable, AccessControlDefaultAdminRulesUpgr
6869
SigningCohortParticipant[] signers;
6970
uint256[] chains;
7071
mapping(uint256 chainId => bytes conditions) conditions; // TODO: chainId -> condition itself or hash(condition)
71-
address[] serverAdmins;
72-
mapping(address serverAdmin => ServerAdmin) serverAdminConditions;
72+
mapping(uint256 serverId => Server) serverConditions;
7373
}
7474

7575
bytes32 public constant INITIATOR_ROLE = keccak256("INITIATOR_ROLE");
@@ -257,31 +257,32 @@ contract SigningCoordinator is Initializable, AccessControlDefaultAdminRulesUpgr
257257
return id;
258258
}
259259

260-
function setServerAdmin(uint32 cohortId, address[] memory serverAdmins) external {
260+
function setServerAdmins(
261+
uint32 cohortId,
262+
uint256 serverId,
263+
address[] memory serverAdmins
264+
) external {
261265
SigningCohort storage signingCohort = signingCohorts[cohortId];
262266
require(isCohortActive(signingCohort), "Cohort not active");
263267
require(
264268
signingCohort.authority == msg.sender,
265269
"Only the cohort authority can set server admin"
266270
);
267-
for (uint256 i = 0; i < signingCohort.serverAdmins.length; i++) {
268-
address serverAdmin = signingCohort.serverAdmins[i];
269-
signingCohort.serverAdminConditions[serverAdmin].active = false;
271+
require(serverId > 0, "Server id can't be zero");
272+
Server storage server = signingCohort.serverConditions[serverId];
273+
for (uint256 i = 0; i < server.serverAdmins.length; i++) {
274+
address serverAdmin = server.serverAdmins[i];
275+
server.activeServerAdmins[serverAdmin] = false;
270276
}
271-
signingCohort.serverAdmins = serverAdmins;
272-
for (uint256 i = 0; i < signingCohort.serverAdmins.length; i++) {
273-
address serverAdmin = signingCohort.serverAdmins[i];
274-
signingCohort.serverAdminConditions[serverAdmin].active = true;
277+
server.serverAdmins = serverAdmins;
278+
for (uint256 i = 0; i < server.serverAdmins.length; i++) {
279+
address serverAdmin = server.serverAdmins[i];
280+
server.activeServerAdmins[serverAdmin] = true;
275281
}
276282
// TODO emit event
277283
}
278284

279-
function setSigningCohortConditions(
280-
uint32 cohortId,
281-
uint256 chainId,
282-
bytes calldata conditions
283-
) external {
284-
SigningCohort storage signingCohort = signingCohorts[cohortId];
285+
function conditionsCheck(SigningCohort storage signingCohort, uint256 chainId) internal view {
285286
require(isCohortActive(signingCohort), "Cohort not active");
286287
// chainId must already be deployed for the cohort
287288
bool chainDeployed = false;
@@ -292,40 +293,62 @@ contract SigningCoordinator is Initializable, AccessControlDefaultAdminRulesUpgr
292293
}
293294
}
294295
require(chainDeployed, "Not already deployed");
295-
ServerAdmin storage serverAdmin = signingCohort.serverAdminConditions[msg.sender];
296+
}
297+
298+
function setSigningCohortConditions(
299+
uint32 cohortId,
300+
uint256 chainId,
301+
bytes calldata conditions
302+
) external {
303+
SigningCohort storage signingCohort = signingCohorts[cohortId];
304+
conditionsCheck(signingCohort, chainId);
305+
require(
306+
signingCohort.authority == msg.sender,
307+
"Only the cohort authority can set conditions"
308+
);
309+
signingCohort.conditions[chainId] = conditions;
310+
emit SigningCohortConditionsSet(cohortId, msg.sender, chainId, conditions);
311+
}
312+
313+
function setSigningCohortConditions(
314+
uint32 cohortId,
315+
uint256 chainId,
316+
bytes calldata conditions,
317+
uint256 serverId
318+
) external {
319+
SigningCohort storage signingCohort = signingCohorts[cohortId];
320+
conditionsCheck(signingCohort, chainId);
321+
require(serverId > 0, "Server id can't be zero");
322+
Server storage server = signingCohort.serverConditions[serverId];
296323

297324
require(
298-
signingCohort.authority == msg.sender || serverAdmin.active,
325+
signingCohort.authority == msg.sender || server.activeServerAdmins[msg.sender],
299326
"Only the cohort authority or a server admin can set conditions"
300327
);
301-
if (serverAdmin.active) {
302-
serverAdmin.conditions[chainId] = conditions;
303-
} else {
304-
signingCohort.conditions[chainId] = conditions;
305-
}
306-
emit SigningCohortConditionsSet(cohortId, msg.sender, chainId, conditions);
328+
server.conditions[chainId] = conditions;
329+
emit SigningCohortConditionsSet(cohortId, msg.sender, chainId, conditions); // TODO log serverId
307330
}
308331

309332
function getSigningCohortConditions(
310333
uint32 cohortId,
311334
uint256 chainId
312335
) external view returns (bytes[] memory) {
313-
return getSigningCohortConditions(cohortId, chainId, address(0));
336+
return getSigningCohortConditions(cohortId, chainId, 0);
314337
}
315338

316339
function getSigningCohortConditions(
317340
uint32 cohortId,
318341
uint256 chainId,
319-
address serverAdmin
342+
uint256 serverId
320343
) public view returns (bytes[] memory conditions) {
321344
SigningCohort storage signingCohort = signingCohorts[cohortId];
322345
bytes memory coreConditions = signingCohort.conditions[chainId];
323-
bytes memory serverAdminConditions = signingCohort
324-
.serverAdminConditions[serverAdmin]
325-
.conditions[chainId];
326-
if (serverAdminConditions.length > 0) {
346+
bytes memory serverConditions = signingCohort.serverConditions[serverId].conditions[
347+
chainId
348+
];
349+
if (serverConditions.length > 0) {
327350
conditions = new bytes[](2);
328-
conditions[1] = serverAdminConditions;
351+
conditions[1] = serverConditions;
329352
} else {
330353
conditions = new bytes[](1);
331354
}

0 commit comments

Comments
 (0)