When a DAO NFT is minted using MembershipFactory::joinDAO(), the corresponding tier minted value is incremented.
This variable is used to account for the number of NFTs minted in a particular tier.
Each tier has a limited number of NFTs that can be minted which is stored in a tier amount.
When attempting to MembershipFactory::joinDAO() the function ensures this limit is not reached.
https://github.com/Cyfrin/2024-11-one-world/blob/main/contracts/dao/MembershipFactory.sol#L145
The lifecycle of a DAO implies some NFTs to be burnt specifically when upgradeTier() is used on a sponsored DAO.
This can also occur by executing an arbitrary MembershipERC1155::burn() through MembershipFactory::executeExternalCall() or other set of calls from privileged addresses which is however not likely.
However when this occurs, the minted value is not decreased. This happens in upgradeTier() where 2 NFTs of a tier are burnt (meaning the tier's minted should be reduced by 2) and 1 NFT of a better tier is minted (meaning the tier's minted should be increased by 1).
https://github.com/Cyfrin/2024-11-one-world/blob/main/contracts/dao/MembershipFactory.sol#L155-L161
This can be problematic because the minted value is not maintained correctly.
Limits the actual number of NFTs that can be held due to minted not being decreased. This results in amount being exceeded by minted at a faster pace than intended
The tier's minted value can be flawed and inconsistent with the circulating supply
Systematically update the minted value when a tier NFT is minted/burnt
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.