eb06aef199
* feat: Support for Celo * fix: wrong condition * combine celo and alfajores lists * use celo erc20 representation * fix: refactor infura.ts to networks.ts & add celo to rpc urls * feature: add celo contract addresses fix: remove celo from supported gas estimate chains until feature is available * refactor: useUSDCPrice to useStablecoinPrice fix: add celo to supported gas estimate chains * fix: use unique factory address for getting pool address * fix: darkmode background graident * fix: removing a comment left behind * fix: remove bad import * fix: remove dead link until the Celo is live on info.uniswap.org * fix: add asset to common bases & minor refactoring * fix: celo info links point to root info.uniswap.org * fix: change celo token bridge to portal * fix: update redux-multicall to latest version * refactor: for code readability * fix: celo banner colors & remove unused alternative logo * fix: change celo token list to hosted version * fix: update celo banner colors * fix: move celo to the bottom of the network selector list * fix: dedup dependencies @uniswap/router-sdk @uniswap/v3-sdk * fix: refactoring + move Celo above L2s * fix: update celo contract addresses * fix: update celo subgraph * fix: update v3-sdk and smart-order-router versions * fix: move Celo to the bottom of the network selector list * fix: downgrade smart-order-router and add casting fix * fix: downgrade smart-order-router and add casting fix * fix: resolve Pool dependency * fix: bridge chain id types * fix: explorer link test * fix: use quoter v2 ABI in useClientSideV3Trade fro Celo * fix: update connection "infura_rpc" to networks * fix: revert yarn.lock and force install * fix: dedup router and v3 sdk * refactor: mv quoter v2 to client side v3 trade * build: dedup lockfile * feature: add portal ether to common bases * fix: add comment for chains that use QuoterV2 * fix: use token as native asset * fix: supply correct factory address to getPoolAddress call & refactor nativeOnChain method * feature: adjust celo tokens presetned * fix: update celo explorer to celoscan * fix: celo token casting * fix: celo celo explorer it * fix: celo chain info should be consistent with block explorer used. Co-authored-by: Zach Pomerantz <zzmp@uniswap.org>
144 lines
6.0 KiB
TypeScript
144 lines
6.0 KiB
TypeScript
import { Contract } from '@ethersproject/contracts'
|
|
import QuoterV2Json from '@uniswap/swap-router-contracts/artifacts/contracts/lens/QuoterV2.sol/QuoterV2.json'
|
|
import IUniswapV2PairJson from '@uniswap/v2-core/build/IUniswapV2Pair.json'
|
|
import IUniswapV2Router02Json from '@uniswap/v2-periphery/build/IUniswapV2Router02.json'
|
|
import QuoterJson from '@uniswap/v3-periphery/artifacts/contracts/lens/Quoter.sol/Quoter.json'
|
|
import TickLensJson from '@uniswap/v3-periphery/artifacts/contracts/lens/TickLens.sol/TickLens.json'
|
|
import UniswapInterfaceMulticallJson from '@uniswap/v3-periphery/artifacts/contracts/lens/UniswapInterfaceMulticall.sol/UniswapInterfaceMulticall.json'
|
|
import NonfungiblePositionManagerJson from '@uniswap/v3-periphery/artifacts/contracts/NonfungiblePositionManager.sol/NonfungiblePositionManager.json'
|
|
import V3MigratorJson from '@uniswap/v3-periphery/artifacts/contracts/V3Migrator.sol/V3Migrator.json'
|
|
import { useWeb3React } from '@web3-react/core'
|
|
import ARGENT_WALLET_DETECTOR_ABI from 'abis/argent-wallet-detector.json'
|
|
import EIP_2612 from 'abis/eip_2612.json'
|
|
import ENS_PUBLIC_RESOLVER_ABI from 'abis/ens-public-resolver.json'
|
|
import ENS_ABI from 'abis/ens-registrar.json'
|
|
import ERC20_ABI from 'abis/erc20.json'
|
|
import ERC20_BYTES32_ABI from 'abis/erc20_bytes32.json'
|
|
import ERC721_ABI from 'abis/erc721.json'
|
|
import ERC1155_ABI from 'abis/erc1155.json'
|
|
import { ArgentWalletDetector, EnsPublicResolver, EnsRegistrar, Erc20, Erc721, Erc1155, Weth } from 'abis/types'
|
|
import WETH_ABI from 'abis/weth.json'
|
|
import {
|
|
ARGENT_WALLET_DETECTOR_ADDRESS,
|
|
ENS_REGISTRAR_ADDRESSES,
|
|
MULTICALL_ADDRESS,
|
|
NONFUNGIBLE_POSITION_MANAGER_ADDRESSES,
|
|
QUOTER_ADDRESSES,
|
|
TICK_LENS_ADDRESSES,
|
|
V2_ROUTER_ADDRESS,
|
|
V3_MIGRATOR_ADDRESSES,
|
|
} from 'constants/addresses'
|
|
import { WRAPPED_NATIVE_CURRENCY } from 'constants/tokens'
|
|
import { useMemo } from 'react'
|
|
import { NonfungiblePositionManager, Quoter, QuoterV2, TickLens, UniswapInterfaceMulticall } from 'types/v3'
|
|
import { V3Migrator } from 'types/v3/V3Migrator'
|
|
|
|
import { getContract } from '../utils'
|
|
|
|
const { abi: IUniswapV2PairABI } = IUniswapV2PairJson
|
|
const { abi: IUniswapV2Router02ABI } = IUniswapV2Router02Json
|
|
const { abi: QuoterABI } = QuoterJson
|
|
const { abi: QuoterV2ABI } = QuoterV2Json
|
|
const { abi: TickLensABI } = TickLensJson
|
|
const { abi: MulticallABI } = UniswapInterfaceMulticallJson
|
|
const { abi: NFTPositionManagerABI } = NonfungiblePositionManagerJson
|
|
const { abi: V2MigratorABI } = V3MigratorJson
|
|
|
|
// returns null on errors
|
|
export function useContract<T extends Contract = Contract>(
|
|
addressOrAddressMap: string | { [chainId: number]: string } | undefined,
|
|
ABI: any,
|
|
withSignerIfPossible = true
|
|
): T | null {
|
|
const { provider, account, chainId } = useWeb3React()
|
|
|
|
return useMemo(() => {
|
|
if (!addressOrAddressMap || !ABI || !provider || !chainId) return null
|
|
let address: string | undefined
|
|
if (typeof addressOrAddressMap === 'string') address = addressOrAddressMap
|
|
else address = addressOrAddressMap[chainId]
|
|
if (!address) return null
|
|
try {
|
|
return getContract(address, ABI, provider, withSignerIfPossible && account ? account : undefined)
|
|
} catch (error) {
|
|
console.error('Failed to get contract', error)
|
|
return null
|
|
}
|
|
}, [addressOrAddressMap, ABI, provider, chainId, withSignerIfPossible, account]) as T
|
|
}
|
|
|
|
export function useV2MigratorContract() {
|
|
return useContract<V3Migrator>(V3_MIGRATOR_ADDRESSES, V2MigratorABI, true)
|
|
}
|
|
|
|
export function useTokenContract(tokenAddress?: string, withSignerIfPossible?: boolean) {
|
|
return useContract<Erc20>(tokenAddress, ERC20_ABI, withSignerIfPossible)
|
|
}
|
|
|
|
export function useWETHContract(withSignerIfPossible?: boolean) {
|
|
const { chainId } = useWeb3React()
|
|
return useContract<Weth>(
|
|
chainId ? WRAPPED_NATIVE_CURRENCY[chainId]?.address : undefined,
|
|
WETH_ABI,
|
|
withSignerIfPossible
|
|
)
|
|
}
|
|
|
|
export function useERC721Contract(nftAddress?: string) {
|
|
return useContract<Erc721>(nftAddress, ERC721_ABI, false)
|
|
}
|
|
|
|
export function useERC1155Contract(nftAddress?: string) {
|
|
return useContract<Erc1155>(nftAddress, ERC1155_ABI, false)
|
|
}
|
|
|
|
export function useArgentWalletDetectorContract() {
|
|
return useContract<ArgentWalletDetector>(ARGENT_WALLET_DETECTOR_ADDRESS, ARGENT_WALLET_DETECTOR_ABI, false)
|
|
}
|
|
|
|
export function useENSRegistrarContract(withSignerIfPossible?: boolean) {
|
|
return useContract<EnsRegistrar>(ENS_REGISTRAR_ADDRESSES, ENS_ABI, withSignerIfPossible)
|
|
}
|
|
|
|
export function useENSResolverContract(address: string | undefined, withSignerIfPossible?: boolean) {
|
|
return useContract<EnsPublicResolver>(address, ENS_PUBLIC_RESOLVER_ABI, withSignerIfPossible)
|
|
}
|
|
|
|
export function useBytes32TokenContract(tokenAddress?: string, withSignerIfPossible?: boolean): Contract | null {
|
|
return useContract(tokenAddress, ERC20_BYTES32_ABI, withSignerIfPossible)
|
|
}
|
|
|
|
export function useEIP2612Contract(tokenAddress?: string): Contract | null {
|
|
return useContract(tokenAddress, EIP_2612, false)
|
|
}
|
|
|
|
export function usePairContract(pairAddress?: string, withSignerIfPossible?: boolean): Contract | null {
|
|
return useContract(pairAddress, IUniswapV2PairABI, withSignerIfPossible)
|
|
}
|
|
|
|
export function useV2RouterContract(): Contract | null {
|
|
return useContract(V2_ROUTER_ADDRESS, IUniswapV2Router02ABI, true)
|
|
}
|
|
|
|
export function useInterfaceMulticall() {
|
|
return useContract<UniswapInterfaceMulticall>(MULTICALL_ADDRESS, MulticallABI, false) as UniswapInterfaceMulticall
|
|
}
|
|
|
|
export function useV3NFTPositionManagerContract(withSignerIfPossible?: boolean): NonfungiblePositionManager | null {
|
|
return useContract<NonfungiblePositionManager>(
|
|
NONFUNGIBLE_POSITION_MANAGER_ADDRESSES,
|
|
NFTPositionManagerABI,
|
|
withSignerIfPossible
|
|
)
|
|
}
|
|
|
|
export function useQuoter(useQuoterV2: boolean) {
|
|
return useContract<Quoter | QuoterV2>(QUOTER_ADDRESSES, useQuoterV2 ? QuoterV2ABI : QuoterABI)
|
|
}
|
|
|
|
export function useTickLens(): TickLens | null {
|
|
const { chainId } = useWeb3React()
|
|
const address = chainId ? TICK_LENS_ADDRESSES[chainId] : undefined
|
|
return useContract(address, TickLensABI) as TickLens | null
|
|
}
|