# Imbalanced approach of distributing the liquidation fee within `setSymbolsPrice` function

Liquidator calling setSymbolsPrice first gets full liquidation fee even if only pricing one symbol, leaving others to finish liquidation unpaid.

- Payout: Contest reward
- Severity: medium
- Program: Symmetrical
- Credited: 0xGoodess
- Disclosed: 2023-06-05
- Write-up quality: 6/10
- Original: https://github.com/sherlock-audit/2023-06-symmetrical-judging/issues/231
- Library page: https://bugbountylibrary.com/r/sherlock%3A2023-06-symmetrical%3AM-14
- Tags: domain:web3 impact:funds-loss kind:contest platform:sherlock sev:medium tech:solidity technique:source-review vuln:accounting-error vuln:business-logic

**Target:** LiquidationFacetImpl.setSymbolsPrice in symmio-core
**Root cause:** Liquidator is pushed to liquidators[partyA] only when liquidationType is NONE, so only the first caller is recorded and paid the full fee regardless of how many symbol prices they inject.
**Steps:**
1. PartyA holds many symbols requiring multiple setSymbolsPrice rounds to avoid OOG.
2. Malicious liquidator calls `setSymbolsPrice(partyA, priceSig)` with zero or one symbol price; line 88 pushes them into liquidators[partyA].
3. Subsequent liquidators call setSymbolsPrice to fill remaining symbols but are not added to liquidators list.
4. Liquidation completes; first liquidator receives half the liquidation fee despite minimal work.
**How found:** Code reading of setSymbolsPrice: noticed liquidators.push only executes inside the liquidationType==NONE branch, so only first caller is recorded; reasoned about multi-round pricing needed for large portfolios.
**Exploitation:** Liquidator front-runs with a minimal setSymbolsPrice call to register as the sole liquidator, then relies on counterparty or others to finish pricing so liquidation completes and fee is paid out.
**Insight:** When a fee is paid to the first caller of a multi-step process, check whether the registration/payout is gated on a one-time state flag rather than on work actually completed; multi-round designs split across transactions are prime for first-caller fee sniping.
