Commit hash link: https://github.com/0xMacro/student.kingofclubstroyDev/tree/56da370271130f72cf72dbc7942e1fb73774ba87 Audited by: Parth Patel (Parth#7949) # General comments Very well-written and secure code. All edge cases are covered. The code is easy to understand with all the comments. I couldn't find any bugs. I have added a few code-quality items that may be helpful. # Issues **[Q-1]** DAO shouldn't be able to receive ether other than membership fees On [line 375-377](https://github.com/0xMacro/student.kingofclubstroyDev/blob/56da370271130f72cf72dbc7942e1fb73774ba87/dao/contracts/CollectorDAO.sol#L375-L377), CollectorDAO.sol has following code: ```solidity receive() external payable { } ``` In the discord discussion, it was mentioned that Membership fees are the only source of CollectorDAO revenue. [Source](https://discord.com/channels/870313767873962014/1020384282767786014/1021504068314742835) Consider removing receive function **[Q-2]** Inconsistent declaration of constant size. On [line 9-15](https://github.com/0xMacro/student.kingofclubstroyDev/blob/56da370271130f72cf72dbc7942e1fb73774ba87/dao/contracts/CollectorDAO.sol#L9-L15), CollectorDAO.sol has following code: ```solidity! uint public constant MEMBERSHIP_COST = 1 ether; ///@notice The amount of time voting occurs from the point in time a proposal is created uint64 public constant VOTING_DURATION = 7 days; ///@notice minimum percent of total members that need to cast a vote on a proposal for it to pass uint public constant QUORUM_PERCENT_REQUIREMENT = 25; ///@notice Reward sent to anyone that executes a passed proposal uint public constant PROPOSAL_EXECUTION_REWARD = 0.01 ether; ``` The constant variable `VOTING_DURATION` is declared with `uint64` while other constant variables have default size i.e `uint256`. Consider following a consistent size convention for constant variables. In the above case, all the constant variables can fit into uint64. **[Q-3]** Use of values like `true` or `false` in conditional statement On [line 137](https://github.com/0xMacro/student.kingofclubstroyDev/blob/56da370271130f72cf72dbc7942e1fb73774ba87/dao/contracts/CollectorDAO.sol#L137), [line 175](https://github.com/0xMacro/student.kingofclubstroyDev/blob/56da370271130f72cf72dbc7942e1fb73774ba87/dao/contracts/CollectorDAO.sol#L175), [line 189](https://github.com/0xMacro/student.kingofclubstroyDev/blob/56da370271130f72cf72dbc7942e1fb73774ba87/dao/contracts/CollectorDAO.sol#L189), CollectorDAO.sol has following code. ```solidity if(proposals[proposalHash] == false) revert InvalidProposal(); if(success == false) revert ExecutionRewardFailed(); if(success == false) revert ProposalExecutionFailed(returnData); ``` The expressions `==` in the conditional statement evaluates to `true` or `false` and should not be checked explicitly. Consider using the `!` operator instead of comparing it against `false` value. Fixed code: ```solidity if(!proposals[proposalHash]) revert InvalidProposal(); if(!success) revert ExecutionRewardFailed(); if(!success) revert ProposalExecutionFailed(returnData); ```