The logic put in place to handle remainder dust is ineffective.
The function calculates the rewardPerVoter by dividing the totalRewards by totalVotes. In Solidity, division of integers always rounds down, which means that if totalRewards is not perfectly divisible by totalVotes, there will be some amount of "dust" (a small remainder of Ether) left over.
The function attempts to handle this by rounding up for the last voter, but this only accounts for up to 1 wei of dust. If the rounding down in the earlier payouts accumulates to more than 1 wei, the remaining dust will not be distributed.
This could potentially be improved by using a more precise method of division that can handle dust more accurately.
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.