No events emitted for important state variable changes
Description
-
Normal behavior: owner/admin actions that change important state (dailyClaimLimit, burning faucet tokens) should emit events so off-chain monitors, UIs and auditors can detect and verify the change.
-
Specific issue: two owner-only functions update critical state but emit no events, making changes silent on-chain and reducing transparency.
function adjustDailyClaimLimit(uint256 by, bool increaseClaimLimit) public onlyOwner {
if (increaseClaimLimit) {
dailyClaimLimit += by;
} else {
if (by > dailyClaimLimit) {
revert RaiseBoxFaucet_CurrentClaimLimitIsLessThanBy();
}
dailyClaimLimit -= by;
}
}
function burnFaucetTokens(uint256 amountToBurn) public onlyOwner {
require(amountToBurn <= balanceOf(address(this)), "Faucet Token Balance: Insufficient");
_transfer(address(this), msg.sender, balanceOf(address(this)));
_burn(msg.sender, amountToBurn);
}
Risk
Likelihood: Medium
Impact: Low
Off-chain monitoring and dashboards cannot detect or alert on critical config or supply changes.
Silent burns/transfers can mislead users and auditors; abuse by owner or attacker with owner privileges can go unnoticed for longer.
Proof of Concept
function test_noEventsForAdjustAndBurn() public {
vm.prank(owner);
raiseBoxFaucet.adjustDailyClaimLimit(10, true);
vm.prank(owner);
raiseBoxFaucet.burnFaucetTokens(1 * 10 ** 18);
}
Run the test with:
forge test --match-test test_noEventsForAdjustAndBurn -vvvv
Recommended Mitigation
+ event FaucetBurned(uint256 amount);
function burnFaucetTokens(uint256 amountToBurn) public onlyOwner {
require(amountToBurn <= balanceOf(address(this)), "Faucet Token Balance: Insufficient");
// transfer faucet balance to owner first before burning
// ensures owner has a balance before _burn (owner only function) can be called successfully
_transfer(address(this), msg.sender, balanceOf(address(this)));
_burn(msg.sender, amountToBurn);
+ emit FaucetBurned(amountToBurn);
}
+ event DailyClaimLimitAdjusted(uint256 newLimit);
function adjustDailyClaimLimit(uint256 by, bool increaseClaimLimit) public onlyOwner {
if (increaseClaimLimit) {
dailyClaimLimit += by;
} else {
if (by > dailyClaimLimit) {
revert RaiseBoxFaucet_CurrentClaimLimitIsLessThanBy();
}
dailyClaimLimit -= by;
}
+ emit DailyClaimLimitAdjusted(dailyClaimLimit);
}