fix: only change input currency to weth after eth wrap completes for uniswapx eth input trades (#7604)

* only change input currency to weth after wrap completes

* add e2e test

* update test
This commit is contained in:
Tina 2023-11-17 10:47:16 -05:00 committed by GitHub
parent 5ded55e061
commit dd4b2dc764
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 10 deletions

@ -190,7 +190,7 @@ describe('UniswapX Eth Input', () => {
cy.contains('Swapped') cy.contains('Swapped')
}) })
it('switches swap input to WETH after wrap', () => { it('keeps ETH as the input currency before wrap completes', () => {
// Setup a swap // Setup a swap
cy.get('#swap-currency-input .token-amount-input').type('1') cy.get('#swap-currency-input .token-amount-input').type('1')
cy.wait('@quote') cy.wait('@quote')
@ -202,16 +202,25 @@ describe('UniswapX Eth Input', () => {
// Close review modal before wrap is confirmed on chain // Close review modal before wrap is confirmed on chain
cy.get(getTestSelector('confirmation-close-icon')).click() cy.get(getTestSelector('confirmation-close-icon')).click()
// Confirm ETH is still the input token before wrap succeeds
cy.contains('ETH')
})
it('switches swap input to WETH after wrap', () => {
// Setup a swap
cy.get('#swap-currency-input .token-amount-input').type('1')
cy.wait('@quote')
// Prompt ETH wrap and confirm
cy.get('#swap-button').click()
cy.contains('Confirm swap').click()
cy.wait('@eth_sendRawTransaction')
cy.hardhat().then((hardhat) => hardhat.mine()) cy.hardhat().then((hardhat) => hardhat.mine())
// Confirm wrap is successful and WETH is now input token // Confirm wrap is successful and WETH is now input token
cy.contains('Wrapped') cy.contains('Wrapped')
cy.contains('WETH') cy.contains('WETH')
// Reopen review modal and continue swap
cy.get('#swap-button').click()
cy.contains('Confirm swap').click()
// Approve WETH spend // Approve WETH spend
cy.wait('@eth_sendRawTransaction') cy.wait('@eth_sendRawTransaction')
cy.hardhat().then((hardhat) => hardhat.mine()) cy.hardhat().then((hardhat) => hardhat.mine())
@ -226,6 +235,11 @@ describe('UniswapX Eth Input', () => {
// Verify swap success // Verify swap success
cy.contains('Swapped') cy.contains('Swapped')
// Close modal
cy.get(getTestSelector('confirmation-close-icon')).click()
// The input currency should now be WETH
cy.contains('WETH')
}) })
}) })

@ -133,9 +133,6 @@ function useConfirmModalState({
onWrap?.() onWrap?.()
.then((wrapTxHash) => { .then((wrapTxHash) => {
setWrapTxHash(wrapTxHash) setWrapTxHash(wrapTxHash)
// After the wrap has succeeded, reset the input currency to be WETH
// because the trade will be on WETH -> token
onCurrencySelection(Field.INPUT, trade.inputAmount.currency)
sendAnalyticsEvent(InterfaceEventName.WRAP_TOKEN_TXN_SUBMITTED, { sendAnalyticsEvent(InterfaceEventName.WRAP_TOKEN_TXN_SUBMITTED, {
chain_id: chainId, chain_id: chainId,
token_symbol: maximumAmountIn?.currency.symbol, token_symbol: maximumAmountIn?.currency.symbol,
@ -183,7 +180,6 @@ function useConfirmModalState({
onWrap, onWrap,
trace, trace,
trade, trade,
onCurrencySelection,
] ]
) )
@ -200,10 +196,20 @@ function useConfirmModalState({
useEffect(() => { useEffect(() => {
// If the wrapping step finished, trigger the next step (allowance or swap). // If the wrapping step finished, trigger the next step (allowance or swap).
if (wrapConfirmed && !prevWrapConfirmed) { if (wrapConfirmed && !prevWrapConfirmed) {
// After the wrap has succeeded, reset the input currency to be WETH
// because the trade will be on WETH -> token
onCurrencySelection(Field.INPUT, trade.inputAmount.currency)
// moves on to either approve WETH or to swap submission // moves on to either approve WETH or to swap submission
performStep(pendingModalSteps[1]) performStep(pendingModalSteps[1])
} }
}, [pendingModalSteps, performStep, prevWrapConfirmed, wrapConfirmed]) }, [
pendingModalSteps,
performStep,
prevWrapConfirmed,
wrapConfirmed,
onCurrencySelection,
trade.inputAmount.currency,
])
useEffect(() => { useEffect(() => {
if ( if (