Summary
Function upgradeTier allows users to update their tier within a sponsored DAO, however the function emit UserJoinedDAO
.
Vulnerability Details
Using UserJoinedDAO
is incorrect , it can cause confusion because the function update user tier for an existing DAO, not for joining the DAO.
function upgradeTier(address daoMembershipAddress, uint256 fromTierIndex) external {
require(daos[daoMembershipAddress].daoType == DAOType.SPONSORED, "Upgrade not allowed.");
require(daos[daoMembershipAddress].noOfTiers >= fromTierIndex + 1, "No higher tier available.");
IMembershipERC1155(daoMembershipAddress).burn(_msgSender(), fromTierIndex, 2);
IMembershipERC1155(daoMembershipAddress).mint(_msgSender(), fromTierIndex - 1, 1);
emit UserJoinedDAO(_msgSender(), daoMembershipAddress, fromTierIndex - 1);
}
Impact
Using UserJoinedDAO
can be misleading for users.
Users may think the action is for joining instead of upgrading, leading to misunderstandings in user interfaces.
Developers might misinterpret the event purpuse.
Tools Used
Manual Review
Recommendations
Rename the event to something more descriptive, such as UserUpgradedTier would make it more clear and more consistent with the function purpuse.
Change the event name from UserJoinedDAO
toUserUpgradedTier
.
function upgradeTier(address daoMembershipAddress, uint256 fromTierIndex) external {
require(daos[daoMembershipAddress].daoType == DAOType.SPONSORED, "Upgrade not allowed.");
require(daos[daoMembershipAddress].noOfTiers >= fromTierIndex + 1, "No higher tier available.");
IMembershipERC1155(daoMembershipAddress).burn(_msgSender(), fromTierIndex, 2);
IMembershipERC1155(daoMembershipAddress).mint(_msgSender(), fromTierIndex - 1, 1);
emit UserUpgradedTier(_msgSender(), daoMembershipAddress, fromTierIndex - 1);
}