51992 sc high dust accumulation in arctoken during yield distribution
Previous51771 sc low unsafe downcast of uint256 to uint8 will lead to silent overflowNext52254 sc high arctoken theft beyond unclaimed yield during distribution
Was this helpful?
Was this helpful?
function test_YieldDustAccumulation() public {
// Setup: Give tokens to bob and charlie
vm.prank(owner);
token.transfer(bob, 20e18); // Bob: 20e18
vm.prank(owner);
token.transfer(charlie, 20e18); // Charlie: 20e18
// Now we have: Owner: 860e18, Alice: 100e18, Bob: 20e18, Charlie: 20e18
// Blacklist charlie (will be skipped in distribution)
yieldBlacklistModule.addToBlacklist(charlie);
// Record contract balance before distribution
uint256 contractBalanceBefore = yieldToken.balanceOf(address(token));
uint256 aliceYieldBefore = yieldToken.balanceOf(alice);
uint256 bobYieldBefore = yieldToken.balanceOf(bob);
uint256 charlieYieldBefore = yieldToken.balanceOf(charlie);
// Distribute yield
//3 cycles of 100e18 yield
for (uint256 i = 0; i < 3; i++) {
uint256 yieldAmount = 100e18;
yieldToken.approve(address(token), yieldAmount);
token.distributeYield(yieldAmount);
// Record balances after distribution
uint256 contractBalanceAfter = yieldToken.balanceOf(address(token));
uint256 aliceYieldAfter = yieldToken.balanceOf(alice);
uint256 bobYieldAfter = yieldToken.balanceOf(bob);
uint256 charlieYieldAfter = yieldToken.balanceOf(charlie);
console.log("=== Net balances after cycle %d ===", i);
console.log("Alice received: %e", aliceYieldAfter - aliceYieldBefore);
console.log("Bob received:", bobYieldAfter - bobYieldBefore);
console.log("Charlie received (should be 0):", charlieYieldAfter - charlieYieldBefore);
console.log("contract yield token balance remaining:", contractBalanceAfter - contractBalanceBefore);
console.log("Dust accumulated after cycle %d:", i, contractBalanceAfter - contractBalanceBefore);
}
}