Skip to content

Commit

Permalink
chore: format code
Browse files Browse the repository at this point in the history
  • Loading branch information
s-tikhomirov committed Sep 27, 2024
1 parent e9d7c85 commit c494c4a
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 13 deletions.
18 changes: 12 additions & 6 deletions src/Membership.sol
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ abstract contract MembershipUpgradeable is Initializable {
uint32 public nextFreeIndex;

/// @notice indices of memberships (expired or grace-period marked for erasure) that can be reused
uint32[] public reusableIndicesOfErasableMemberships;
uint32[] public reusableIndicesOfErasedMemberships;

struct MembershipInfo {
/// @notice deposit amount (in tokens) to register this membership
Expand Down Expand Up @@ -234,10 +234,10 @@ abstract contract MembershipUpgradeable is Initializable {
/// @return indexReused indicates whether index comes form reusing a slot of an erased membership
function _getFreeIndex() internal returns (uint32 index, bool indexReused) {
// Reuse the last membership marked as reusable
uint256 numIndices = reusableIndicesOfErasableMemberships.length;
uint256 numIndices = reusableIndicesOfErasedMemberships.length;
if (numIndices != 0) {
index = reusableIndicesOfErasableMemberships[numIndices - 1];
reusableIndicesOfErasableMemberships.pop();
index = reusableIndicesOfErasedMemberships[numIndices - 1];
reusableIndicesOfErasedMemberships.pop();
indexReused = true;
} else {
index = nextFreeIndex;
Expand Down Expand Up @@ -315,7 +315,13 @@ abstract contract MembershipUpgradeable is Initializable {
/// @dev Erase expired memberships or owned grace-period memberships.
/// @param _sender address of the sender of transaction (will be used to check memberships in grace period)
/// @param _idCommitment idCommitment of the membership to erase
function _eraseMembership(address _sender, uint256 _idCommitment, MembershipInfo memory _membership) internal {
function _eraseMembershipAndSaveSlotToReuse(
address _sender,
uint256 _idCommitment,
MembershipInfo memory _membership
)
internal
{
bool membershipExpired = _isExpired(_membership.gracePeriodStartTimestamp, _membership.gracePeriodDuration);
bool membershipIsInGracePeriodAndHeld = _isInGracePeriod(
_membership.gracePeriodStartTimestamp, _membership.gracePeriodDuration
Expand All @@ -330,7 +336,7 @@ abstract contract MembershipUpgradeable is Initializable {
totalRateLimit -= _membership.rateLimit;

// Mark this membership as reusable
reusableIndicesOfErasableMemberships.push(_membership.index);
reusableIndicesOfErasedMemberships.push(_membership.index);

// Erase this membership from the memberships mapping
// Note: the Merkle tree data will be erased when the index is reused
Expand Down
4 changes: 2 additions & 2 deletions src/WakuRlnV2.sol
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ contract WakuRlnV2 is Initializable, Ownable2StepUpgradeable, UUPSUpgradeable, M
uint256 idCommitmentToErase = idCommitmentsToErase[i];
MembershipInfo memory membershipToErase = memberships[idCommitmentToErase];
if (membershipToErase.rateLimit == 0) revert InvalidIdCommitment(idCommitmentToErase);
_eraseMembership(_msgSender(), idCommitmentToErase, membershipToErase);
_eraseMembershipAndSaveSlotToReuse(_msgSender(), idCommitmentToErase, membershipToErase);
LazyIMT.update(merkleTree, 0, membershipToErase.index);
}

Expand Down Expand Up @@ -251,7 +251,7 @@ contract WakuRlnV2 is Initializable, Ownable2StepUpgradeable, UUPSUpgradeable, M
uint256 idCommitmentToErase = idCommitments[i];
MembershipInfo memory membershipToErase = memberships[idCommitmentToErase];
if (membershipToErase.rateLimit == 0) revert InvalidIdCommitment(idCommitmentToErase);
_eraseMembership(_msgSender(), idCommitmentToErase, membershipToErase);
_eraseMembershipAndSaveSlotToReuse(_msgSender(), idCommitmentToErase, membershipToErase);
LazyIMT.update(merkleTree, 0, membershipToErase.index);
}
}
Expand Down
11 changes: 6 additions & 5 deletions test/WakuRlnV2.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,8 @@ contract WakuRlnV2Test is Test {
w.root(),
13_801_897_483_540_040_307_162_267_952_866_411_686_127_372_014_953_358_983_481_592_640_000_001_877_295
);
(uint32 fetchedMembershipRateLimit2, uint32 index2, uint256 rateCommitment2) = w.getMembershipInfo(idCommitment);
(uint32 fetchedMembershipRateLimit2, uint32 index2, uint256 rateCommitment2) =
w.getMembershipInfo(idCommitment);
assertEq(fetchedMembershipRateLimit2, membershipRateLimit);
assertEq(index2, 0);
assertEq(rateCommitment2, rateCommitment);
Expand Down Expand Up @@ -433,28 +434,28 @@ contract WakuRlnV2Test is Test {

// Verify that expired indices match what we expect
for (uint32 i = 0; i < idCommitmentsLength; i++) {
assertEq(i, w.reusableIndicesOfErasableMemberships(i));
assertEq(i, w.reusableIndicesOfErasedMemberships(i));
}

uint32 currnextCommitmentIndex = w.nextFreeIndex();
for (uint256 i = 1; i <= idCommitmentsLength; i++) {
uint256 idCommitment = i + 10;
uint256 expectedindexReusedPos = idCommitmentsLength - i;
uint32 expectedIndex = w.reusableIndicesOfErasableMemberships(expectedindexReusedPos);
uint32 expectedIndex = w.reusableIndicesOfErasedMemberships(expectedindexReusedPos);
token.approve(address(w), price);
w.register(idCommitment, 20);
(,,,, index,,) = w.memberships(idCommitment);
assertEq(expectedIndex, index);
// Should have been removed from the list
vm.expectRevert();
w.reusableIndicesOfErasableMemberships(expectedindexReusedPos);
w.reusableIndicesOfErasedMemberships(expectedindexReusedPos);
// Should not have been affected
assertEq(currnextCommitmentIndex, w.nextFreeIndex());
}

// No indexes should be available for reuse
vm.expectRevert();
w.reusableIndicesOfErasableMemberships(0);
w.reusableIndicesOfErasedMemberships(0);

// Should use a new index since we got rid of all available indexes
token.approve(address(w), price);
Expand Down

0 comments on commit c494c4a

Please sign in to comment.