Uniswap Widget Example
App.tsx
import { Web3OnboardProvider, init } from '@web3-onboard/react'
import injectedModule from '@web3-onboard/injected-wallets'
const INFURA_KEY = ''
const ethereumRopsten = {
id: '0x3',
token: 'rETH',
label: 'Ethereum Ropsten',
rpcUrl: `https://ropsten.infura.io/v3/${INFURA_KEY}`
}
const polygonMainnet = {
id: '0x89',
token: 'MATIC',
label: 'Polygon',
rpcUrl: 'https://matic-mainnet.chainstacklabs.com'
}
const chains = [ethereumRopsten, polygonMainnet]
const wallets = [injectedModule()]
const appMetadata = {
name: 'Connect Wallet Example',
icon: '<svg>My App Icon</svg>',
description: 'Example showcasing how to connect a wallet.',
recommendedInjectedWallets: [
{ name: 'MetaMask', url: 'https://metamask.io' },
{ name: 'Coinbase', url: 'https://wallet.coinbase.com/' }
]
}
const web3Onboard = init({
wallets,
chains
appMetadata
})
function App() {
return (
<Web3OnboardProvider web3Onboard={web3Onboard}>
<ConnectWallet />
</Web3OnboardProvider>
)
}
export default MyApp
Uniswap.tsx
import { useCallback, useRef, useState, useEffect } from 'react';
import { FiGlobe } from 'react-icons/fi';
import {
SupportedLocale,
SUPPORTED_LOCALES,
SwapWidget,
} from '@uniswap/widgets';
// ↓↓↓ Don't forget to import the widgets' fonts! ↓↓↓
import '@uniswap/widgets/fonts.css';
// ↑↑↑
import { ethers } from 'ethers';
import { useConnectWallet } from '@web3-onboard/react';
import { JSON_RPC_URL } from '../constants';
import styles from '../styles/Home.module.css';
const TOKEN_LIST = 'https://gateway.ipfs.io/ipns/tokens.uniswap.org';
const UNI = '0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984';
export default function Uniswap() {
const [{ wallet, connecting }, connect, disconnect] = useConnectWallet();
const [provider, setProvider] = useState<ethers.providers.Web3Provider>();
useEffect(() => {
if (wallet?.provider) {
setProvider(new ethers.providers.Web3Provider(wallet.provider, 'any'));
} else {
// Reset the provider back to 'undefined' such that the
// connect wallet option will reappear in the uniswap modal
setProvider(undefined);
}
}, [wallet]);
const connectWallet = () => {
connect();
};
return (
<div className={styles.container}>
<div className={styles.i18n}>
<label style={{ display: 'flex' }}>
<FiGlobe />
</label>
<select onChange={onSelectLocale}>
{SUPPORTED_LOCALES.map((locale) => (
<option key={locale} value={locale}>
{locale}
</option>
))}
</select>
</div>
<main className={styles.main}>
<h1 className={styles.title}>Uniswap Swap Widget</h1>
<div className={styles.demo}>
<div className={styles.widget}>
<SwapWidget
jsonRpcEndpoint={JSON_RPC_URL}
tokenList={TOKEN_LIST}
provider={provider}
onConnectWallet={() => {connect()}}
defaultInputTokenAddress="NATIVE"
defaultInputAmount="1"
defaultOutputTokenAddress={UNI}
/>
</div>
</div>
</main>
</div>
);
}