import React from 'react'
import { utils, Contract, BigNumber } from 'ethers'
import {
Goerli,
Mainnet,
Optimism,
OptimismGoerli,
Rinkeby,
Ropsten,
useContractFunction,
useEtherBalance,
useEthers,
useTokenBalance,
} from '@usedapp/core'
import { TransactionForm } from './TransactionForm'
import { Weth10 } from '../../../gen/types/Weth10'
import WethAbi from '../../abi/Weth10.json'
const wethInterface = new utils.Interface(WethAbi.abi)
// using weth9 addresses due to bigger usage
const wethContractAddresses = {
[Mainnet.chainId]: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
[Rinkeby.chainId]: '0xc778417E063141139Fce010982780140Aa0cD5Ab',
[Goerli.chainId]: '0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6',
[Ropsten.chainId]: '0xc778417E063141139Fce010982780140Aa0cD5Ab',
[Optimism.chainId]: '0x4200000000000000000000000000000000000006',
[OptimismGoerli.chainId]: '0x09bADef78f92F20fd5f7a402dbb1d25d4901aAb2',
}
export const DepositEth = () => {
const { account, chainId } = useEthers()
const etherBalance = useEtherBalance(account)
const wethContractAddress = chainId ? wethContractAddresses[chainId] : undefined
const contract = wethContractAddress && (new Contract(wethContractAddress, wethInterface) as Weth10)
const { state, send } = useContractFunction(contract, 'deposit', { transactionName: 'Wrap' })
const depositEther = (etherAmount: string) => {
void send({ value: utils.parseEther(etherAmount) })
}
return (
)
}
export const WithdrawEth = () => {
const { account, chainId } = useEthers()
const wethContractAddress = chainId ? wethContractAddresses[chainId] : undefined
const wethBalance = useTokenBalance(wethContractAddress, account)
const contract = wethContractAddress && (new Contract(wethContractAddress, wethInterface) as Weth10)
const { state, send } = useContractFunction(contract, 'withdraw', { transactionName: 'Unwrap' })
const withdrawEther = (wethAmount: string) => {
void send(utils.parseEther(wethAmount))
}
return (
)
}