test: register during spam conditions

This commit is contained in:
Roman 2025-10-15 13:09:33 +11:00
parent f45fb65e9d
commit 917265959b
No known key found for this signature in database
GPG Key ID: 583BDF43C238B83E

View File

@ -1789,4 +1789,50 @@ contract WakuRlnV2Test is Test {
assertFalse(w.isInMembershipSet(456)); // Arbitrary other ID for Alice not registered assertFalse(w.isInMembershipSet(456)); // Arbitrary other ID for Alice not registered
} }
function testFrontrunning_SetFillingSpam() external {
// Prank owner to adjust limits for test
uint32 rateLimit = w.minMembershipRateLimit(); // Assume 20
vm.prank(w.owner());
w.setMaxMembershipRateLimit(rateLimit); // e.g., 20
vm.prank(w.owner());
w.setMaxTotalRateLimit(rateLimit * 2); // e.g., 40, for 2 memberships
// Setup attacker and victim
address bob = makeAddr("bob"); // Attacker
address alice = makeAddr("alice"); // Victim
(, uint256 price) = w.priceCalculator().calculate(rateLimit);
// Mint and approve for Bob and Alice
vm.prank(address(tokenDeployer));
token.mint(bob, price * 2); // Enough for two registrations
vm.prank(address(tokenDeployer));
token.mint(alice, price);
vm.prank(bob);
token.approve(address(w), price * 2);
vm.prank(alice);
token.approve(address(w), price);
// Bob registers one junk to make it almost full
uint256 junkId = 789; // Valid ID
vm.prank(bob);
w.register(junkId, rateLimit, new uint256[](0));
// Alice's intended idCommitment
uint256 aliceId = 123;
// Frontrun: Bob snipes the last capacity with Alice's idCommitment
vm.prank(bob);
w.register(aliceId, rateLimit, new uint256[](0));
// Alice tries to register a different ID but capacity is exceeded (no expectRevert, so test fails on revert)
vm.prank(alice);
w.register(456, rateLimit, new uint256[](0)); // Different ID, but full capacity
// Assertions: If no revert (which won't happen), check Alice owns it—but test fails earlier
(,,,,,, address holder,) = w.memberships(456);
assertEq(holder, alice); // This would fail if capacity exceeded, but revert happens first
}
} }