# Too much fee charged when Seaport is partially filled

SeaportProxy charges aggregator fees on full order price, not actual filled amount, so partially filled Seaport orders overcharge users.

- Payout: Audit contest
- Severity: medium
- Program: LooksRare
- Found by: cccz
- Disclosed: 2023-03-21
- Write-up quality: 6/10
- Original: https://code4rena.com/reports/2022-11-looksrare#m-02
- Library page: https://bugbountylibrary.com/r/c4%3A2022-11-looksrare%3AM-02
- Tags: area:web3 domain:web3 impact:funds-loss kind:contest platform:code4rena sev:medium tech:evm tech:solidity vuln:accounting-error vuln:business-logic

**Target:** SeaportProxy contract _handleFees
**Root cause:** _handleFees computes fee as orders[i].price * feeBp / 10000 using the original order price, ignoring how much of the Seaport order was actually filled.
**Steps:**
1. User A calls LooksRareAggregator.execute with a Seaport order where order.price == 100 ETH and feeBp == 2%, sending 102 ETH.
2. Another user fills 99/100 of the order first, leaving fill status 99/100.
3. User A's fulfillment buys only 1 ETH worth but _handleFees still charges 2% of 100 ETH = 2 ETH.
**How found:** Reading _handleFees and noticing fee is derived from orders[i].price, then cross-referencing Seaport docs that orders support partial fills.
**Exploitation:** Any user fulfilling a partially filled Seaport order through the aggregator pays fees proportional to the full order price rather than the amount actually received, losing the difference to the fee recipient.
**Insight:** When an aggregator proxies a marketplace that supports partial fills, fee math must use the actual filled amount returned by the marketplace, not the requested order price.

