# Residual ETH will not be sent back to users during the minting of wfCash

wfCash minting sends residual ETH back to the wrapper contract as native ETH, but refund logic only measures WETH balance, so excess ETH is stuck.

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

**Target:** wrapped-fcash wfCashLogic mint path / NotionalV2 depositUnderlyingToken
**Root cause:** depositUnderlyingToken is called with returnExcessWrapped=false, so residual ETH returns as native ETH to the wrapper; _sendTokensToReceiver only diffs WETH balance, so the native ETH refund is never forwarded.
**Steps:**
1. User calls mint via wfCashLogic with msgValue > fCashAmountExternal (lending at zero path).
2. _mintInternal calls `NotionalV2.depositUnderlyingToken{value: msgValue}(address(this), currencyId, fCashAmountExternal)`.
3. AccountAction.depositUnderlyingToken passes `returnExcessWrapped=false`, so excess ETH is sent back to wrapper as native ETH, not WETH.
4. _sendTokensToReceiver computes `balanceAfter - balanceBefore` on WETH.balanceOf, which is unchanged, so tokensTransferred=0 and no refund is sent.
5. Residual ETH remains stuck in the wrapper contract.
**How found:** Code reading of the mint flow: noticed the comment claiming residual is returned to account, then traced that returnExcessWrapped=false yields native ETH while the refund accounting only tracks WETH balance.
**Insight:** When a contract refunds 'excess' value, verify the asset type actually returned matches the balance the refund logic measures; a wrapped/native mismatch silently strands funds.
