Unclaimable Dust May Accumulate and Lock Tokens
claimDust() requires totalEmitted + dust <= MAX_SUPPLY. If rewardDistribution accumulates dust faster than the owner reclaims it, this require permanently reverts and locks the accumulated dust.
Description
In the claimDust() function, the following condition is enforced:
require(totalEmitted + dust <= MAX_SUPPLY, "Max supply exceeded");
If this function is not called periodically, the dust variable may grow over time due to repeated accumulation within the rewardDistribution() function:
if (dustAmount > 0) {dust += dustAmount;}
This dust is the leftover remainder from reward allocation rounding, and while it is stored for later minting, it is only claimable by the owner via claimDust(). If dust grows large enough such that totalEmitted + dust > MAX_SUPPLY, the required condition in claimDust() will revert permanently, locking the accumulated dust and preventing its recovery, effectively causing a denial-of-service on this portion of the supply.
This creates a scenario where tokens that should have been minted and distributed remain forever unclaimable due to an avoidable overflow condition.
Impact
Tokens worth up to the difference between accumulated dust and the MAX_SUPPLY headroom become permanently unclaimable. The MAT token economy loses a portion of its intended emission.
Recommendation
There are several options:
- Ensure
dustis never allowed to grow beyondMAX_SUPPLY-totalEmittedduring accumulation. - Automatic Dust Distribution: Instead of relying on manual
claimDust(), integrate dust distribution directly intorewardDistribution()by redistributing leftovers in the next cycle. This avoids centralization of dust collection and prevents accumulation beyond reclaimable limits.

