GivingThanks

First Flight #28
Beginner FriendlyFoundry
100 EXP
View results
Submission Details
Severity: low
Invalid

Boolean Optimization in Mappings of `CharityRegistry.sol`

Description: Using boolean values in mappings is inefficient from a gas perspective. Each slot in storage is 32 bytes, but we only need 1 bit to store a boolean.

mapping(address => bool) public verifiedCharities;
mapping(address => bool) public registeredCharities;

Impact:

  • Unnecessary gas consumption during storage operations

  • Higher deployment costs

  • Increased transaction costs for users

Gas Savings:

  • Storage Write (Original): ~20,000 gas

  • Storage Write (Optimized): ~5,000 gas

  • Potential savings: ~15,000 gas per storage operation

Recommended Mitigation:

// Use uint256 for packing multiple booleans
mapping(address => uint256) public charityStatus;
// Constants for bit positions
uint256 constant REGISTERED_BIT = 1;
uint256 constant VERIFIED_BIT = 2;
function registerCharity(address charity) public onlyAdmin {
charityStatus[charity] |= REGISTERED_BIT;
emit CharityRegistered(charity);
}
function isRegistered(address charity) public view returns (bool) {
return charityStatus[charity] & REGISTERED_BIT != 0;
}
Updates

Lead Judging Commences

n0kto Lead Judge 12 months ago
Submission Judgement Published
Invalidated
Reason: Non-acceptable severity

Support

FAQs

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