# UniV2Adapter#getExecutionData doesn't properly handle native ETH swaps

UniV2Adapter.getExecutionData only emits swapExactTokensForTokens/swapTokensForExactTokens and never sets spender/target for WETH conversion, so native ETH swaps on Uniswap V2 always revert.

- Payout: Contest reward
- Severity: medium
- Program: Notional
- Credited: Chom
- Disclosed: 2022-09-15
- Write-up quality: 6/10
- Original: https://github.com/sherlock-audit/2022-09-notional-judging/issues/33
- Library page: https://bugbountylibrary.com/r/sherlock%3A2022-09-notional%3AM-20
- Tags: domain:web3 impact:dos kind:contest platform:sherlock sev:medium tech:evm tech:solidity technique:source-review vuln:business-logic

**Target:** UniV2Adapter.getExecutionData / TradingUtils trade execution
**Root cause:** getExecutionData hardcodes token-to-token router selectors and leaves spender/target unset, so TradingUtils_executeTrade cannot auto-wrap ETH to WETH as UniV3Adapter does.
**Steps:**
1. Read UniV2Adapter.getExecutionData: spender=target=UNIV2_ROUTER, msgValue always zero.
2. Observe only swapExactTokensForTokens and swapTokensForExactTokens selectors are encoded.
3. Call a trade with native ETH as input/output; router receives no ETH and no WETH wrap occurs.
4. Swap reverts, confirming native ETH trades unsupported.
**How found:** Code review comparing UniV2Adapter against UniV3Adapter: noticed UniV3 sets spender/target to enable WETH conversion while UniV2 does not, and that neither selected selector handles ETH.
**Insight:** When auditing adapter/strategy layers, diff sibling adapters (V2 vs V3) for missing spender/target setup and selector coverage; native-vs-wrapped asset handling is a common gap that silently breaks a whole asset class.
