Commit f2c5a7c0 authored by Zach Pomerantz's avatar Zach Pomerantz Committed by GitHub

fix: track universal router swaps and err on wallet-edited calldata (#5864)

fix: track universal router swaps
parent fb527709
import { TransactionResponse } from '@ethersproject/abstract-provider' import { TransactionResponse } from '@ethersproject/abstract-provider'
import { BigNumber } from '@ethersproject/bignumber' import { BigNumber } from '@ethersproject/bignumber'
import { t } from '@lingui/macro'
import { sendAnalyticsEvent } from '@uniswap/analytics'
import { SwapEventName } from '@uniswap/analytics-events'
import { Trade } from '@uniswap/router-sdk' import { Trade } from '@uniswap/router-sdk'
import { Currency, Percent, TradeType } from '@uniswap/sdk-core' import { Currency, Percent, TradeType } from '@uniswap/sdk-core'
import { SwapRouter, UNIVERSAL_ROUTER_ADDRESS } from '@uniswap/universal-router-sdk' import { SwapRouter, UNIVERSAL_ROUTER_ADDRESS } from '@uniswap/universal-router-sdk'
import { FeeOptions, toHex } from '@uniswap/v3-sdk' import { FeeOptions, toHex } from '@uniswap/v3-sdk'
import { useWeb3React } from '@web3-react/core' import { useWeb3React } from '@web3-react/core'
import { formatSwapSignedAnalyticsEventProperties } from 'lib/utils/analytics'
import { useCallback } from 'react' import { useCallback } from 'react'
import { calculateGasMargin } from 'utils/calculateGasMargin' import { calculateGasMargin } from 'utils/calculateGasMargin'
import isZero from 'utils/isZero' import isZero from 'utils/isZero'
...@@ -12,6 +16,8 @@ import { swapErrorToUserReadableMessage } from 'utils/swapErrorToUserReadableMes ...@@ -12,6 +16,8 @@ import { swapErrorToUserReadableMessage } from 'utils/swapErrorToUserReadableMes
import { PermitSignature } from './usePermitAllowance' import { PermitSignature } from './usePermitAllowance'
class InvalidSwapError extends Error {}
interface SwapOptions { interface SwapOptions {
slippageTolerance: Percent slippageTolerance: Percent
deadline?: BigNumber deadline?: BigNumber
...@@ -55,11 +61,26 @@ export function useUniversalRouterSwapCallback( ...@@ -55,11 +61,26 @@ export function useUniversalRouterSwapCallback(
gasEstimate = await provider.estimateGas(tx) gasEstimate = await provider.estimateGas(tx)
} }
const gasLimit = calculateGasMargin(gasEstimate) const gasLimit = calculateGasMargin(gasEstimate)
const response = await provider.getSigner().sendTransaction({ ...tx, gasLimit }) const response = await provider
.getSigner()
.sendTransaction({ ...tx, gasLimit })
.then((response) => {
sendAnalyticsEvent(
SwapEventName.SWAP_SIGNED,
formatSwapSignedAnalyticsEventProperties({ trade, txHash: response.hash })
)
if (tx.data !== response.data) {
sendAnalyticsEvent(SwapEventName.SWAP_MODIFIED_IN_WALLET, { txHash: response.hash })
throw new InvalidSwapError(
t`Your swap was modified through your wallet. If this was a mistake, please cancel immediately or risk losing your funds.`
)
}
return response
})
return response return response
} catch (swapError: unknown) { } catch (swapError: unknown) {
const message = swapErrorToUserReadableMessage(swapError) if (swapError instanceof InvalidSwapError) throw swapError
throw new Error(message) throw new Error(swapErrorToUserReadableMessage(swapError))
} }
}, [ }, [
account, account,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment