Commit ee32418f authored by Jordan Frankfurt's avatar Jordan Frankfurt Committed by GitHub

Revert "feat(widgets): support convenience fee in trades (#3219)" (#3224)

This reverts commit 8064dd8e.
parent 6e223897
...@@ -2,7 +2,7 @@ import { BigNumber } from '@ethersproject/bignumber' ...@@ -2,7 +2,7 @@ import { BigNumber } from '@ethersproject/bignumber'
import { SwapRouter, Trade } from '@uniswap/router-sdk' import { SwapRouter, Trade } from '@uniswap/router-sdk'
import { Currency, Percent, TradeType } from '@uniswap/sdk-core' import { Currency, Percent, TradeType } from '@uniswap/sdk-core'
import { Router as V2SwapRouter, Trade as V2Trade } from '@uniswap/v2-sdk' import { Router as V2SwapRouter, Trade as V2Trade } from '@uniswap/v2-sdk'
import { FeeOptions, SwapRouter as V3SwapRouter, Trade as V3Trade } from '@uniswap/v3-sdk' import { SwapRouter as V3SwapRouter, Trade as V3Trade } from '@uniswap/v3-sdk'
import { SWAP_ROUTER_ADDRESSES, V3_ROUTER_ADDRESS } from 'constants/addresses' import { SWAP_ROUTER_ADDRESSES, V3_ROUTER_ADDRESS } from 'constants/addresses'
import useActiveWeb3React from 'hooks/useActiveWeb3React' import useActiveWeb3React from 'hooks/useActiveWeb3React'
import { useMemo } from 'react' import { useMemo } from 'react'
...@@ -36,8 +36,7 @@ export function useSwapCallArguments( ...@@ -36,8 +36,7 @@ export function useSwapCallArguments(
allowedSlippage: Percent, allowedSlippage: Percent,
recipientAddressOrName: string | null | undefined, recipientAddressOrName: string | null | undefined,
signatureData: SignatureData | null | undefined, signatureData: SignatureData | null | undefined,
deadline: BigNumber | undefined, deadline: BigNumber | undefined
fee: FeeOptions | undefined
): SwapCall[] { ): SwapCall[] {
const { account, chainId, library } = useActiveWeb3React() const { account, chainId, library } = useActiveWeb3React()
...@@ -99,7 +98,6 @@ export function useSwapCallArguments( ...@@ -99,7 +98,6 @@ export function useSwapCallArguments(
} else { } else {
// swap options shared by v3 and v2+v3 swap routers // swap options shared by v3 and v2+v3 swap routers
const sharedSwapOptions = { const sharedSwapOptions = {
fee,
recipient, recipient,
slippageTolerance: allowedSlippage, slippageTolerance: allowedSlippage,
...(signatureData ...(signatureData
...@@ -169,16 +167,15 @@ export function useSwapCallArguments( ...@@ -169,16 +167,15 @@ export function useSwapCallArguments(
] ]
} }
}, [ }, [
trade,
recipient,
library,
account, account,
allowedSlippage,
argentWalletContract,
chainId, chainId,
deadline, deadline,
fee,
library,
recipient,
routerContract, routerContract,
allowedSlippage,
argentWalletContract,
signatureData, signatureData,
trade,
]) ])
} }
...@@ -33,7 +33,7 @@ export function useSwapCallback( ...@@ -33,7 +33,7 @@ export function useSwapCallback(
state, state,
callback: libCallback, callback: libCallback,
error, error,
} = useLibSwapCallBack({ trade, allowedSlippage, recipientAddressOrName: recipient, signatureData, deadline }) } = useLibSwapCallBack(trade, allowedSlippage, recipient, signatureData, deadline)
const callback = useMemo(() => { const callback = useMemo(() => {
if (!libCallback || !trade) { if (!libCallback || !trade) {
......
...@@ -51,7 +51,6 @@ export default function SwapButton({ disabled }: SwapButtonProps) { ...@@ -51,7 +51,6 @@ export default function SwapButton({ disabled }: SwapButtonProps) {
currencies: { [Field.INPUT]: inputCurrency }, currencies: { [Field.INPUT]: inputCurrency },
currencyBalances: { [Field.INPUT]: inputCurrencyBalance }, currencyBalances: { [Field.INPUT]: inputCurrencyBalance },
currencyAmounts: { [Field.INPUT]: inputCurrencyAmount, [Field.OUTPUT]: outputCurrencyAmount }, currencyAmounts: { [Field.INPUT]: inputCurrencyAmount, [Field.OUTPUT]: outputCurrencyAmount },
fee,
} = useSwapInfo() } = useSwapInfo()
const independentField = useAtomValue(independentFieldAtom) const independentField = useAtomValue(independentFieldAtom)
...@@ -119,14 +118,13 @@ export default function SwapButton({ disabled }: SwapButtonProps) { ...@@ -119,14 +118,13 @@ export default function SwapButton({ disabled }: SwapButtonProps) {
const { signatureData } = useERC20PermitFromTrade(optimizedTrade, allowedSlippage, deadline) const { signatureData } = useERC20PermitFromTrade(optimizedTrade, allowedSlippage, deadline)
// the callback to execute the swap // the callback to execute the swap
const { callback: swapCallback } = useSwapCallback({ const { callback: swapCallback } = useSwapCallback(
trade: optimizedTrade, optimizedTrade,
allowedSlippage, allowedSlippage,
recipientAddressOrName: account ?? null, account ?? null,
signatureData, signatureData,
deadline, deadline
fee, )
})
//@TODO(ianlapham): add a loading state, process errors //@TODO(ianlapham): add a loading state, process errors
const setDisplayTxHash = useUpdateAtom(displayTxHashAtom) const setDisplayTxHash = useUpdateAtom(displayTxHashAtom)
......
import { Trans } from '@lingui/macro' import { Trans } from '@lingui/macro'
import { TokenInfo } from '@uniswap/token-lists' import { TokenInfo } from '@uniswap/token-lists'
import { useAtom } from 'jotai' import { useAtom } from 'jotai'
import useSwapDefaults from 'lib/hooks/swap/useSwapDefaults'
import { SwapInfoUpdater } from 'lib/hooks/swap/useSwapInfo' import { SwapInfoUpdater } from 'lib/hooks/swap/useSwapInfo'
import useSyncConvenienceFee from 'lib/hooks/swap/useSyncConvenienceFee'
import useSyncSwapDefaults from 'lib/hooks/swap/useSyncSwapDefaults'
import { usePendingTransactions } from 'lib/hooks/transactions' import { usePendingTransactions } from 'lib/hooks/transactions'
import useActiveWeb3React from 'lib/hooks/useActiveWeb3React' import useActiveWeb3React from 'lib/hooks/useActiveWeb3React'
import useTokenList from 'lib/hooks/useTokenList' import useTokenList from 'lib/hooks/useTokenList'
...@@ -48,8 +47,7 @@ export interface SwapProps { ...@@ -48,8 +47,7 @@ export interface SwapProps {
export default function Swap(props: SwapProps) { export default function Swap(props: SwapProps) {
useTokenList(props.tokenList) useTokenList(props.tokenList)
useSyncSwapDefaults(props) useSwapDefaults(props)
useSyncConvenienceFee(props)
const { active, account } = useActiveWeb3React() const { active, account } = useActiveWeb3React()
const [boundary, setBoundary] = useState<HTMLDivElement | null>(null) const [boundary, setBoundary] = useState<HTMLDivElement | null>(null)
......
...@@ -3,7 +3,6 @@ import { BigNumber } from '@ethersproject/bignumber' ...@@ -3,7 +3,6 @@ import { BigNumber } from '@ethersproject/bignumber'
import { TransactionResponse } from '@ethersproject/providers' import { TransactionResponse } from '@ethersproject/providers'
import { Trans } from '@lingui/macro' import { Trans } from '@lingui/macro'
import { Percent } from '@uniswap/sdk-core' import { Percent } from '@uniswap/sdk-core'
import { FeeOptions } from '@uniswap/v3-sdk'
import useActiveWeb3React from 'hooks/useActiveWeb3React' import useActiveWeb3React from 'hooks/useActiveWeb3React'
import useENS from 'hooks/useENS' import useENS from 'hooks/useENS'
import { SignatureData } from 'hooks/useERC20Permit' import { SignatureData } from 'hooks/useERC20Permit'
...@@ -18,33 +17,18 @@ export enum SwapCallbackState { ...@@ -18,33 +17,18 @@ export enum SwapCallbackState {
VALID, VALID,
} }
interface UseSwapCallbackReturns {
state: SwapCallbackState
callback: null | (() => Promise<TransactionResponse>)
error: ReactNode | null
}
interface UseSwapCallbackArgs {
trade: AnyTrade | undefined // trade to execute, required
allowedSlippage: Percent // in bips
recipientAddressOrName: string | null | undefined // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender
signatureData: SignatureData | null | undefined
deadline: BigNumber | undefined
fee?: FeeOptions
}
// returns a function that will execute a swap, if the parameters are all valid // returns a function that will execute a swap, if the parameters are all valid
// and the user has approved the slippage adjusted input amount for the trade // and the user has approved the slippage adjusted input amount for the trade
export function useSwapCallback({ export function useSwapCallback(
trade, trade: AnyTrade | undefined, // trade to execute, required
allowedSlippage, allowedSlippage: Percent, // in bips
recipientAddressOrName, recipientAddressOrName: string | null | undefined, // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender
signatureData, signatureData: SignatureData | null | undefined,
deadline, deadline: BigNumber | undefined
fee, ): { state: SwapCallbackState; callback: null | (() => Promise<TransactionResponse>); error: ReactNode | null } {
}: UseSwapCallbackArgs): UseSwapCallbackReturns {
const { account, chainId, library } = useActiveWeb3React() const { account, chainId, library } = useActiveWeb3React()
const swapCalls = useSwapCallArguments(trade, allowedSlippage, recipientAddressOrName, signatureData, deadline, fee) const swapCalls = useSwapCallArguments(trade, allowedSlippage, recipientAddressOrName, signatureData, deadline)
const { callback } = useSendSwapTransaction(account, chainId, library, trade, swapCalls) const { callback } = useSendSwapTransaction(account, chainId, library, trade, swapCalls)
const { address: recipientAddress } = useENS(recipientAddressOrName) const { address: recipientAddress } = useENS(recipientAddressOrName)
......
...@@ -31,7 +31,7 @@ interface UseSwapDefaultsArgs { ...@@ -31,7 +31,7 @@ interface UseSwapDefaultsArgs {
defaultOutputAmount?: string defaultOutputAmount?: string
} }
export default function useSyncSwapDefaults({ export default function useSwapDefaults({
defaultInputAddress, defaultInputAddress,
defaultInputAmount, defaultInputAmount,
defaultOutputAddress, defaultOutputAddress,
......
import { Trans } from '@lingui/macro' import { Trans } from '@lingui/macro'
import { Currency, CurrencyAmount, Percent, TradeType } from '@uniswap/sdk-core' import { Currency, CurrencyAmount, Percent, TradeType } from '@uniswap/sdk-core'
import { FeeOptions } from '@uniswap/v3-sdk'
import useAutoSlippageTolerance from 'hooks/useAutoSlippageTolerance' import useAutoSlippageTolerance from 'hooks/useAutoSlippageTolerance'
import { atom } from 'jotai' import { atom } from 'jotai'
import { useAtomValue, useUpdateAtom } from 'jotai/utils' import { useAtomValue, useUpdateAtom } from 'jotai/utils'
import { useCurrencyBalances } from 'lib/hooks/useCurrencyBalance' import { useCurrencyBalances } from 'lib/hooks/useCurrencyBalance'
import { maxSlippageAtom } from 'lib/state/settings' import { maxSlippageAtom } from 'lib/state/settings'
import { DEFAULT_FEE_OPTIONS, feeOptionsAtom, Field, swapAtom } from 'lib/state/swap' import { Field, swapAtom } from 'lib/state/swap'
import tryParseCurrencyAmount from 'lib/utils/tryParseCurrencyAmount' import tryParseCurrencyAmount from 'lib/utils/tryParseCurrencyAmount'
import { ReactNode, useEffect, useMemo } from 'react' import { ReactNode, useEffect, useMemo } from 'react'
import { InterfaceTrade, TradeState } from 'state/routing/types' import { InterfaceTrade, TradeState } from 'state/routing/types'
...@@ -24,7 +23,6 @@ interface SwapInfo { ...@@ -24,7 +23,6 @@ interface SwapInfo {
state: TradeState state: TradeState
} }
allowedSlippage: Percent allowedSlippage: Percent
fee: FeeOptions
} }
const BAD_RECIPIENT_ADDRESSES: { [address: string]: true } = { const BAD_RECIPIENT_ADDRESSES: { [address: string]: true } = {
...@@ -44,8 +42,6 @@ function useComputeSwapInfo(): SwapInfo { ...@@ -44,8 +42,6 @@ function useComputeSwapInfo(): SwapInfo {
[Field.OUTPUT]: outputCurrency, [Field.OUTPUT]: outputCurrency,
} = useAtomValue(swapAtom) } = useAtomValue(swapAtom)
const fee = useAtomValue(feeOptionsAtom)
const to = account const to = account
const relevantTokenBalances = useCurrencyBalances( const relevantTokenBalances = useCurrencyBalances(
...@@ -143,9 +139,8 @@ function useComputeSwapInfo(): SwapInfo { ...@@ -143,9 +139,8 @@ function useComputeSwapInfo(): SwapInfo {
inputError, inputError,
trade, trade,
allowedSlippage, allowedSlippage,
fee,
}), }),
[currencies, currencyBalances, currencyAmounts, inputError, trade, allowedSlippage, fee] [currencies, currencyBalances, currencyAmounts, inputError, trade, allowedSlippage]
) )
} }
...@@ -155,7 +150,6 @@ const swapInfoAtom = atom<SwapInfo>({ ...@@ -155,7 +150,6 @@ const swapInfoAtom = atom<SwapInfo>({
currencyAmounts: {}, currencyAmounts: {},
trade: { state: TradeState.INVALID }, trade: { state: TradeState.INVALID },
allowedSlippage: new Percent(0), allowedSlippage: new Percent(0),
fee: DEFAULT_FEE_OPTIONS,
}) })
export function SwapInfoUpdater() { export function SwapInfoUpdater() {
......
import { Percent } from '@uniswap/sdk-core'
import useActiveWeb3React from 'hooks/useActiveWeb3React'
import { useUpdateAtom } from 'jotai/utils'
import { DEFAULT_FEE_OPTIONS, feeOptionsAtom } from 'lib/state/swap'
import { useEffect } from 'react'
interface FeeOptionsArgs {
convenienceFee?: number
convenienceFeeRecipient?: string | string | { [chainId: number]: string }
}
export default function useSyncConvenienceFee({ convenienceFee, convenienceFeeRecipient }: FeeOptionsArgs) {
const { chainId } = useActiveWeb3React()
const updateFeeOptions = useUpdateAtom(feeOptionsAtom)
useEffect(() => {
if (convenienceFee && convenienceFeeRecipient) {
if (typeof convenienceFeeRecipient === 'string') {
updateFeeOptions({
fee: new Percent(convenienceFee, 10_000),
recipient: convenienceFeeRecipient,
})
return
}
if (chainId && convenienceFeeRecipient[chainId]) {
updateFeeOptions({
fee: new Percent(convenienceFee, 10_000),
recipient: convenienceFeeRecipient[chainId],
})
return
}
}
updateFeeOptions(DEFAULT_FEE_OPTIONS)
}, [chainId, convenienceFee, convenienceFeeRecipient, updateFeeOptions])
}
import { Currency, Percent } from '@uniswap/sdk-core' import { Currency } from '@uniswap/sdk-core'
import { FeeOptions } from '@uniswap/v3-sdk'
import { SupportedChainId } from 'constants/chains' import { SupportedChainId } from 'constants/chains'
import { nativeOnChain } from 'constants/tokens' import { nativeOnChain } from 'constants/tokens'
import { atom } from 'jotai' import { atom } from 'jotai'
...@@ -28,9 +27,3 @@ export const independentFieldAtom = pickAtom(swapAtom, 'independentField') ...@@ -28,9 +27,3 @@ export const independentFieldAtom = pickAtom(swapAtom, 'independentField')
// If set to a transaction hash, that transaction will display in a status dialog. // If set to a transaction hash, that transaction will display in a status dialog.
export const displayTxHashAtom = atom<string | undefined>(undefined) export const displayTxHashAtom = atom<string | undefined>(undefined)
export const DEFAULT_FEE_OPTIONS = {
fee: new Percent(0),
recipient: '',
}
export const feeOptionsAtom = atom<FeeOptions>(DEFAULT_FEE_OPTIONS)
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