Assessment reports>Tortuga Liquid Staking>Low findings>Payouts round down
Category: Coding Mistakes

Payouts round down

Low Severity
Low Impact
Medium Likelihood


It is possible to perform an economically impractical, griefing-style attack that abuses the rounding down behavior of mul_div in disperse_all_payouts to ensure only those with a relatively high number of shares can receive a payout:

let payout_value = math::mul_div(

If the reserve_balance is low enough, delegators with few shares would receive zero payout while delegators with many shares would receive some. Dust is refunded to the reserve at the end of disperse_all_payouts, meaning repeated, quick calls to disperse_all_payouts would result in only high-value delegators getting payouts.


Malicious, high-value delegators (i.e., those with many shares) could cause lower-value delegators to not receive any payouts.


A potential solution could be to delay payout until a minimum reserve balance is met.


Move Labs fixed this issue in commit ef89a88.

Zellic © 2023Back to top ↑