Redundant getter functions increase contract bytecode
Description
Getter functions are redundant and are already available via
native balance
inherited functions, i.e. .owner()from Ownable
standard ERC20 functions, i.e. balanceOf()
function getBalance(address user) public view returns (uint256) {
@> return balanceOf(user);
}
function getFaucetTotalSupply() public view returns (uint256) {
@> return balanceOf(address(this));
}
function getContractSepEthBalance() public view returns (uint256) {
@> return address(this).balance;
}
function getOwner() public view returns (address) {
@> return Ownable.owner();
}
Risk
Impact:
Proof of Concept
Add the following tests to your test file:
function test_getters_getBalanceIsRedundant() public view {
assertEq(raiseBoxFaucet.getBalance(user), raiseBoxFaucet.balanceOf(user));
}
function test_getters_getFaucetTotalSupplyIsRedundant() public view {
assertEq(raiseBoxFaucet.getFaucetTotalSupply(), raiseBoxFaucet.balanceOf(address(raiseBoxFaucet)));
}
function test_getters_getContractSepEthBalanceIsRedundant() public view {
assertEq(raiseBoxFaucet.getContractSepEthBalance(), address(raiseBoxFaucet).balance);
}
function test_getters_getOwnerIsRedundant() public view {
assertEq(raiseBoxFaucet.getOwner(), raiseBoxFaucet.owner());
}
Recommended Mitigation
At least getOwner is redundant and confusing. If you want to keep it, call owner() directly.
If necessary, keep getFaucetTotalSupply() , getContractSepEthBalance() and getBalance(address) for easy access.
function getOwner() public view returns (address) {
- return Ownable.owner();
+ return owner();
}