The MembershipERC1155 contract has a critical mismatch in how profits are recorded versus how they are calculated for claims, It uses A PER LOWEST TIER TOKEN profit instead of the actual total profit in MembershipERC1155::claimProfit causes lower profit distribution than intended.
sendProfit is assumed to increment totalProfit by the amount of currency distributed. However, totalProfit includes deviding by _totalSupply which makes it A PER LOWEST TIER TOKEN profit not the actual total profit.
contracts/dao/tokens/MembershipERC1155.sol#L189-L200
We say it's PER LOWEST TIER because total supply is the sum of all tokens weighted to the lowest tier token, references:
contracts/dao/tokens/MembershipERC1155.sol#L61
contracts/dao/tokens/MembershipERC1155.sol#L74
When claiming profit, totalProfit is not multiplied back by _totalSupply to get the actual total profit:
contracts/dao/tokens/MembershipERC1155.sol#L142-L150
Which should be done here:
contracts/dao/tokens/MembershipERC1155.sol#L159C1-L164C6
This can lead to incorrect profit distributions which will be much lower than expected.
Manual review.
Consider removing division by _totalSupply from sendProfit or multiplying back by _totalSupply in MembershipERC1155::getUnsaved().
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.