# Reinvest will return sub-optimal return if the pool is imbalanced

Notional Curve2TokenConvexHelper forces proportional reinvest deposits, which is sub-optimal on imbalanced Curve pools, causing deposit penalties and lost yield for vault shareholders.

- Payout: Contest reward
- Severity: high
- Program: Notional
- Credited: xiaoming90
- Disclosed: 2023-02-27
- Write-up quality: 6/10
- Original: https://github.com/sherlock-audit/2023-02-notional-judging/issues/9
- Library page: https://bugbountylibrary.com/r/sherlock%3A2023-02-notional%3AH-5
- Tags: domain:web3 impact:funds-loss kind:contest platform:sherlock sev:high tech:evm tech:solidity technique:source-review vuln:accounting-error vuln:business-logic

**Target:** Curve2TokenConvexHelper.reinvestReward / Curve2TokenPoolUtils._checkPrimarySecondaryRatio
**Root cause:** The reinvest path enforces a proportional primary/secondary deposit ratio (copied from Balancer design), but Curve's add_liquidity applies deposit penalties/bonuses based on deviation from ideal balance, so proportional joins are sub-optimal when the pool is imbalanced.
**Steps:**
1. Observe `reinvestReward` calls `_validateSpotPriceAndPairPrice` which invokes `_checkPrimarySecondaryRatio` enforcing proportional deposit.
2. Note Curve `add_liquidity` computes `difference = |ideal_balance - new_balances[i]|` and charges `fees[i] = fee * difference / FEE_DENOMINATOR`, penalizing deposits that deviate from ideal balance.
3. When pool is imbalanced (e.g. stETH/ETH 31.7%/68.3%), a proportional deposit deviates from ideal balance and incurs a penalty.
4. Compare minted LP tokens from proportional vs. optimal non-proportional deposit; proportional yields fewer pool tokens.
5. Recommend removing `_checkPrimarySecondaryRatio` so a permissioned reinvest role can deposit non-proportionally.
**How found:** Researcher recognized the proportional-join rule was borrowed from Balancer's design, then reasoned that Curve's add_liquidity fee/bonus mechanism (difference from ideal_balance) makes proportional joins sub-optimal on imbalanced pools, citing historical stETH/ETH depegs.
**Insight:** When porting a strategy pattern between AMM designs, verify the underlying invariant: Balancer rewards exact-proportion joins, but Curve's add_liquidity penalizes deviation from ideal_balance, so hard-coded proportional deposits leak value on imbalanced pools.
