mirror of
https://github.com/oceanprotocol/market.git
synced 2024-12-02 05:57:29 +01:00
71 lines
1.9 KiB
TypeScript
71 lines
1.9 KiB
TypeScript
import React, { ReactElement, useEffect, useState } from 'react'
|
|
import { usePrices } from '@context/Prices'
|
|
import { useWeb3 } from '@context/Web3'
|
|
import Web3 from 'web3'
|
|
import useNftFactory from '@hooks/contracts/useNftFactory'
|
|
import { NftFactory } from '@oceanprotocol/lib'
|
|
import Conversion from '@shared/Price/Conversion'
|
|
import { generateNftCreateData, NftMetadata } from '@utils/nft'
|
|
import { useUserPreferences } from '@context/UserPreferences'
|
|
|
|
const getEstGasFee = async (
|
|
address: string,
|
|
nftFactory: NftFactory,
|
|
nftMetadata: NftMetadata,
|
|
ethToOceanConversionRate: number
|
|
): Promise<string> => {
|
|
if (!address || !nftFactory || !nftMetadata || !ethToOceanConversionRate)
|
|
return
|
|
|
|
const { web3 } = nftFactory
|
|
const nft = generateNftCreateData(nftMetadata, address)
|
|
|
|
const gasPrice = await web3.eth.getGasPrice()
|
|
const gasLimit = await nftFactory?.estGasCreateNFT(address, nft)
|
|
const gasFeeEth = Web3.utils.fromWei(
|
|
(+gasPrice * +gasLimit).toString(),
|
|
'ether'
|
|
)
|
|
const gasFeeOcean = (+gasFeeEth / +ethToOceanConversionRate).toString()
|
|
return gasFeeOcean
|
|
}
|
|
|
|
export default function TxFee({
|
|
nftMetadata
|
|
}: {
|
|
nftMetadata: NftMetadata
|
|
}): ReactElement {
|
|
const { accountId } = useWeb3()
|
|
const { prices } = usePrices()
|
|
const nftFactory = useNftFactory()
|
|
|
|
const [gasFee, setGasFee] = useState('')
|
|
|
|
useEffect(() => {
|
|
const calculateGasFee = async () =>
|
|
setGasFee(
|
|
await getEstGasFee(
|
|
accountId,
|
|
nftFactory,
|
|
nftMetadata,
|
|
(prices as any)?.eth
|
|
)
|
|
)
|
|
calculateGasFee()
|
|
}, [accountId, nftFactory, nftMetadata, prices])
|
|
|
|
return gasFee ? (
|
|
<p>
|
|
Gas fee estimation for this artwork
|
|
<Conversion price={gasFee} />
|
|
</p>
|
|
) : accountId ? (
|
|
<p>
|
|
An error occurred while estimating the gas fee for this artwork, please
|
|
try again.
|
|
</p>
|
|
) : (
|
|
<p>Please connect your wallet to get a gas fee estimate for this artwork</p>
|
|
)
|
|
}
|