Skip to content

Commit c0396ca

Browse files
0xClandestineypatil12
authored andcommitted
feat: track total members and sets (#649)
* feat: track total members and sets * test: track total members and sets * fix: review changes * refactor: review changes * test: register multiple sets * test: deregister multiple sets * test: fuzz set creation
1 parent 4ec0a16 commit c0396ca

File tree

3 files changed

+214
-61
lines changed

3 files changed

+214
-61
lines changed

src/contracts/core/AVSDirectory.sol

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ contract AVSDirectory is
7373
isOperatorSet[msg.sender][operatorSetIds[i]] = true;
7474
emit OperatorSetCreated(OperatorSet({avs: msg.sender, operatorSetId: operatorSetIds[i]}));
7575
}
76+
operatorSetCount += operatorSetIds.length;
77+
avsOperatorSetCount[msg.sender] += operatorSetIds.length;
7678
}
7779

7880
/**
@@ -380,6 +382,8 @@ contract AVSDirectory is
380382
"AVSDirectory._registerOperatorToOperatorSets: operator already registered to operator set"
381383
);
382384

385+
++operatorSetMemberCount[avs][operatorSetIds[i]];
386+
383387
// Mutate `isMember` to `true`.
384388
isMember[avs][operator][operatorSetIds[i]] = true;
385389

@@ -403,6 +407,8 @@ contract AVSDirectory is
403407
"AVSDirectory._deregisterOperatorFromOperatorSet: operator not registered for operator set"
404408
);
405409

410+
--operatorSetMemberCount[avs][operatorSetIds[i]];
411+
406412
// Mutate `isMember` to `false`.
407413
isMember[avs][operator][operatorSetIds[i]] = false;
408414

src/contracts/core/AVSDirectoryStorage.sol

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,18 +34,27 @@ abstract contract AVSDirectoryStorage is IAVSDirectory {
3434
/// @notice Mapping: avs => operator => OperatorAVSRegistrationStatus struct
3535
mapping(address => mapping(address => OperatorAVSRegistrationStatus)) public avsOperatorStatus;
3636

37-
/// @notice Mapping: operator => salt => whether the salt has been used
37+
/// @notice Mapping: operator => salt => Whether the salt has been used or not.
3838
mapping(address => mapping(bytes32 => bool)) public operatorSaltIsSpent;
3939

40-
/// @notice Mapping: avs => whether it is a an operator set AVS
40+
/// @notice Mapping: avs => Whether it is a an operator set AVS or not.
4141
mapping(address => bool) public isOperatorSetAVS;
4242

43-
/// @notice Mapping: avs => operatorSetId => whether the operatorSet exists
43+
/// @notice Mapping: avs => operatorSetId => Whether or not an operator set is valid.
4444
mapping(address => mapping(uint32 => bool)) public isOperatorSet;
4545

46-
/// @notice Mapping: avs = operator => operatorSetId => whether the operator is a member of the operatorSet
46+
/// @notice Mapping: avs = operator => operatorSetId => Whether or not an operator is a member of an operator set.
4747
mapping(address => mapping(address => mapping(uint32 => bool))) public isMember;
4848

49+
/// @notice Mapping: avs => operatorSetId => Total operators within the given operator set.
50+
mapping(address => mapping(uint32 => uint256)) public operatorSetMemberCount;
51+
52+
/// @notice Mapping: avs => Total amount of operator sets created for a given AVS.
53+
mapping(address => uint256) public avsOperatorSetCount;
54+
55+
/// @notice Total amount of operators sets created.
56+
uint256 public operatorSetCount;
57+
4958
constructor(IDelegationManager _delegation) {
5059
delegation = _delegation;
5160
}
@@ -55,5 +64,5 @@ abstract contract AVSDirectoryStorage is IAVSDirectory {
5564
* variables without shifting down storage in the inheritance chain.
5665
* See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps
5766
*/
58-
uint256[43] private __gap;
67+
uint256[40] private __gap;
5968
}

0 commit comments

Comments
 (0)