The pool assumes the stake token is a standard ERC20 (no transfer fees, no rebasing). The deposit side records the actually-received amount via balance-diff (received = balanceAfter − balanceBefore), so fee-on-transfer deposits are credited correctly; after resolution, each claim / withdraw / sweep pays out the accounted liabilities.
The compatibility bug is on the outbound side and the balance assumption: the contract calls safeTransfer with the accounted payout, implicitly assuming "pool balance is always ≥ tracked liabilities, and the recipient receives exactly what is sent." For a fee-on-transfer token the recipient gets payout − fee, so every claim/withdraw is silently under-paid; for a negative-rebasing / fee-on-sender token the pool balance erodes independently of tracked liabilities until balanceOf(pool) < tracked liabilities, so the last claim reverts on insufficient balance and principal is permanently locked. There is no on-chain guard or token-type probe.
Likelihood:
The factory owner adds a fee-on-transfer or rebasing token to allowedStakeToken. This is not an exotic mistake: stETH (rebasing), PAXG (0.02% transfer fee), and USDT (a built-in owner-toggleable fee switch) are all mainstream blue-chips an operator could plausibly allowlist as safe collateral
An already-allowlisted token (e.g. USDT) later enables a fee / becomes rebasing, while existing pools are locked to that token and cannot switch
Impact:
Fee-on-transfer: stakers / recovery are under-paid the transfer fee on every claim / withdraw / sweep, leaking value continuously
Negative-rebasing / fee-on-sender: the pool balance erodes below tracked liabilities, later claims revert on insufficient balance, and principal is permanently locked
(a) Fee-on-transfer under-payment (test/audit/I01_FeeOnTransferCompat.t.sol, 1% fee token):
(b) Negative-rebasing permanent lockup (test/audit/I01_RebasingLockup.t.sol):
Prefer rejecting known fee-on-transfer / rebasing tokens at the factory level, and institutionalize the "non-standard ERC20 unsupported" assumption as a pre-listing token probe.
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.
The contest is complete and the rewards are being distributed.