PoolTogether: The Prize Layer for DeFi — disclosed vulnerability reports and payouts

Every publicly disclosed and closed bug bounty report we hold for PoolTogether: The Prize Layer for DeFi, with our own summary of each finding and a link to the original disclosure.

Reports indexed
20
Total paid
$0
Critical
0
Largest payout
$0

This page collects the 20 closed, publicly disclosed PoolTogether: The Prize Layer for DeFi reports indexed on Coin Buggie. Nothing here is active or unpatched — every entry was published by the programme or the researcher after remediation.

The findings concentrate in Logic error, across EVM-Solidity. Reading a single protocol end to end is the fastest way to see which assumptions its codebase repeatedly gets wrong, which is usually a better predictor of where the next finding lives than the category alone.

Use the vulnerability class links below to compare these findings against the same bug class in other protocols.

What reviewers look for

  • Logic error findings disclosed against PoolTogether: The Prize Layer for DeFi

Curated highlights

The largest disclosed payouts in this group, with our own summary of each. Every report links back to the original disclosure.

mediumLogic errorEVM-Solidity$0

PoolTogether: The Prize Layer for DeFi: Price formula in `TpdaLiquidationPair._computePrice()` does not account for a jump in liquidatable balance

PoolTogether's TPDA liquidation pair prices vault yield via a linear Dutch auction that decays from targetAuctionPeriod * lastAuctionPrice toward zero, with no input from the actual liquidatable balance. Because the vault's liquidatable balance can jump sharply at an instant — when the mint limit lifts after a user withdraws, or when the owner lowers yieldFeePercentage — the decayed price can be far below the true value of the freshly available yield. A liquidation bot can then acquire the newly liquidatable balance (e.g., 1000 USDT) for near-zero USDC, draining value from the vault and all its depositors. The finding was confirmed as Medium after a sponsor escalation to informational was rejected, since liquidation still causes real fund loss even if the auction self-corrects on later rounds.

PoolTogether: The Prize Layer for DeFisherlockJun 6, 2024Open
mediumLogic errorEVM-Solidity$0

PoolTogether: The Prize Layer for DeFi: The RNG finish draw auction rewards are overpaid due to missing to account for the time it takes to fulfill the Witnet randomness request

PoolTogether's DrawManager computes the finish-draw auction reward from a clock that starts at startDrawAuction.closedAt, the moment the randomness request was made, rather than when the Witnet result actually becomes available 5-10 minutes later. Because the parabolic fractional dutch auction reward rises with elapsed time, every finishDraw call overpays the caller, and the loss recurs on every draw, compounding into a significant protocol-wide overpayment. The finding was acknowledged by the team and upheld as a valid medium by the Sherlock judge.

PoolTogether: The Prize Layer for DeFisherlockJun 6, 2024Open
highLogic errorEVM-Solidity$0

PoolTogether: The Prize Layer for DeFi: Unfair Manipulation of Winning Chances Due to Stolen Yield on `Blast`

PoolTogether deploys on Blast with rebasing WETH as the prize token, which in default Automatic mode makes contract balances grow continuously with yield. Because the PrizePool credits vault contributions from the delta between its current token balance and its accounted balance, any caller can invoke contributePrizeTokens() and assign all of that accumulated yield to their own vault. A malicious user thereby inflates their own contribution portion and winning zone while shrinking those of legitimate vaults, effectively stealing yield that was meant to benefit all participants and skewing prize odds. The lead senior watson validated the issue and it was fixed by configuring WETH to Claimable mode and donating claimed yield to the DONATOR address.

PoolTogether: The Prize Layer for DeFisherlockJun 6, 2024Open
mediumLogic errorEVM-Solidity$0

PoolTogether: The Prize Layer for DeFi: `maxDeposit` doesn't comply with ERC-4626

PoolTogether's PrizeVault implements ERC-4626, and the README explicitly mandates strict ERC-4626 compliance. However, its maxDeposit function violates the spec: when the underlying yield buffer is depleted, rounding inside the yieldVault's previewRedeem can make a deposit lossy, causing deposit() to revert even though maxDeposit() had just advertised an amount large enough to cover the deposit. Because the protocol publicly committed to strict ERC-4626 compliance, the Sherlock judge upheld this as a valid medium-severity finding even though economic impact is low. The maintainers fixed it by having maxDeposit return 0 unless totalAssets is at least totalDebt plus half the yield buffer, preventing lossy deposits from being advertised.

PoolTogether: The Prize Layer for DeFisherlockJun 6, 2024Open
mediumLogic errorEVM-Solidity$0

PoolTogether: The Prize Layer for DeFi: Potential ETH Loss Due to transfer Usage in Requestor Contract on `zkSync`

PoolTogether's pt-v5-rng-witnet integration withdraws stranded ETH to draw bots through Requestor.withdraw(), which uses Solidity's low-gas `.transfer()` (2300 stipend). On zkSync Era, the fixed stipend is insufficient even for plain EOA transfers because of the chain's dynamic gas accounting, so the withdraw reverts and leftover request ETH becomes permanently locked. The finding was disputed over severity but upheld as medium — the amounts are small and the failure is chain-specific — and the fix replaced `.transfer()` with a low-level `.call()`.

PoolTogether: The Prize Layer for DeFisherlockJun 6, 2024Open
mediumLogic errorEVM-Solidity$0

PoolTogether: The Prize Layer for DeFi: The claimer's fee will be stolen by the winner

PoolTogether's Claimer lets a claim bot collect fees by claiming prizes on behalf of winners, but every winner can register arbitrary prize hooks. A winner can front-run a bulk claim transaction and set an afterClaimPrize hook that recursively calls claimer.claimPrizes for the remaining winners in the array. Because the main claim loop wraps each claim in try-catch, the original transaction proceeds without reverting, so the original claimer only collects the fee for the first winner while the hook-setting winner captures the fees (and the per-prize gas allowance) for all the others, silently stealing the claimer's reward. The finding was adjudicated Medium with duplicates and fixed by adding a reentrancy guard to the Claimer contract in PR pt-v5-claimer#32.

PoolTogether: The Prize Layer for DeFisherlockJun 6, 2024Open

All reports in this group

Vulnerability classes disclosed here

Related protocol pages