UniV2Adapter#getExecutionData doesn't properly handle native ETH swaps
UniV2Adapter#getExecutionData doesn't properly account for native ETH trades which makes them impossible. Neither method selected supports direct ETH trades, and sender/target are not set correctly for TradingUtils_executeTrade to automatically convert\\n```\\nspender = address(Deployments.UNIV2_ROUTER);\\ntarget = address(Deployments.UNIV2_ROUTER);\\n// msgValue is always zero for uniswap\\n\\nif (\\n    tradeType == TradeType.EXACT_IN_SINGLE ||\\n    tradeType == TradeType.EXACT_IN_BATCH\\n) {\\n    executionCallData = abi.encodeWithSelector(\\n        IUniV2Router2.swapExactTokensForTokens.selector,\\n        trade.amount,\\n        trade.limit,\\n        data.path,\\n        from,\\n        trade.deadline\\n    );\\n} else if (\\n    tradeType == TradeType.EXACT_OUT_SINGLE ||\\n    tradeType == TradeType.EXACT_OUT_BATCH\\n) {\\n    executionCallData = abi.encodeWithSelector(\\n        IUniV2Router2.swapTokensForExactTokens.selector,\\n        trade.amount,\\n        trade.limit,\\n        data.path,\\n        from,\\n        trade.deadline\\n    );\\n}\\n```\\n\\nUniV2Adapter#getExecutionData either returns the swapTokensForExactTokens or swapExactTokensForTokens, neither of with support native ETH. It also doesn't set spender and target like UniV3Adapter, so _executeTrade won't automatically convert it to a WETH call. The result is that all Uniswap V2 calls made with native ETH will fail. Given that Notional operates in native ETH rather than WETH, this is an important feature that currently does not function.
There are two possible solutions:\\nChange the way that target and sender are set to match the implementation in UniV3Adapter\\nModify the return data to return the correct selector for each case (swapExactETHForTokens, swapTokensForExactETH, etc.)\\nGiven that the infrastructure for Uniswap V3 already exists in TradingUtils_executeTrade the first option would be the easiest, and would give the same results considering it's basically the same as what the router is doing internally anyways.
Uniswap V2 calls won't support native ETH
```\\nspender = address(Deployments.UNIV2_ROUTER);\\ntarget = address(Deployments.UNIV2_ROUTER);\\n// msgValue is always zero for uniswap\\n\\nif (\\n    tradeType == TradeType.EXACT_IN_SINGLE ||\\n    tradeType == TradeType.EXACT_IN_BATCH\\n) {\\n    executionCallData = abi.encodeWithSelector(\\n        IUniV2Router2.swapExactTokensForTokens.selector,\\n        trade.amount,\\n        trade.limit,\\n        data.path,\\n        from,\\n        trade.deadline\\n    );\\n} else if (\\n    tradeType == TradeType.EXACT_OUT_SINGLE ||\\n    tradeType == TradeType.EXACT_OUT_BATCH\\n) {\\n    executionCallData = abi.encodeWithSelector(\\n        IUniV2Router2.swapTokensForExactTokens.selector,\\n        trade.amount,\\n        trade.limit,\\n        data.path,\\n        from,\\n        trade.deadline\\n    );\\n}\\n```\\n