Raisebox Faucet

First Flight #50
Beginner FriendlySolidity
100 EXP
Submission Details
Impact: medium
Likelihood: medium

Centralization Risk: Owner Privileges

Author Revealed upon completion

Description:
The contract owner has broad control over critical functions, including minting/burning tokens, adjusting claim limits, refilling ETH, and pausing ETH drips. If the owner is compromised or malicious, they can drain funds, disrupt faucet operation, or devalue the token supply.

Impact:
Users must trust the owner to act honestly and securely. A compromised or malicious owner can:

  • Mint excessive tokens, devaluing the faucet

  • Drain ETH or tokens from the contract

  • Prevent users from claiming tokens or ETH by pausing drips or setting limits to zero

This centralization creates a medium severity risk for users and the protocol.

Proof of Concept:

  • Functions mintFaucetTokens, burnFaucetTokens, adjustDailyClaimLimit, refillSepEth, and toggleEthDripPause are owner-only and can be called at any time.

Recommended Mitigation:
Implement multi-signature ownership or decentralized governance to reduce single-point-of-failure risk. Clearly document owner privileges for users.

Replace the standard Ownable pattern with a multi-signature wallet (e.g., OpenZeppelin's Ownable to GnosisSafe or similar):

// Instead of:
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
contract RaiseBoxFaucet is ERC20, Ownable {
// ...existing code...
}
// Use a multi-signature wallet for ownership:
address public multisig;
modifier onlyMultisig() {
require(msg.sender == multisig, "Not multisig");
_;
}
// Set multisig address in constructor
constructor(address _multisig) ERC20(name_, symbol_) {
multisig = _multisig;
// ...existing code...
}
// Update owner-only functions:
function mintFaucetTokens(address to, uint256 amount) public onlyMultisig {
// ...existing code...
}
// ...repeat for other owner-only functions...

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.