From 23b946a50c6543eee4c14e074753f97f0e14d753 Mon Sep 17 00:00:00 2001 From: Fakorede Damilola Date: Thu, 22 Sep 2022 14:42:13 +0100 Subject: [PATCH 01/26] working on NFT --- package-lock.json | 10 ++ package.json | 3 +- src/hooks/useNFT.ts | 151 +++++++++++------------ src/pages/Nft/Components/Nft/index.tsx | 2 +- src/pages/Nft/Modals/ComfirmPurchase.tsx | 17 ++- src/pages/Nft/ViewNFT.tsx | 8 +- src/utils/abis/nft.json | 2 +- src/utils/addresses.ts | 15 ++- 8 files changed, 113 insertions(+), 95 deletions(-) diff --git a/package-lock.json b/package-lock.json index c2e98552..f349772b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4773,6 +4773,16 @@ "@types/react": "^16" } }, + "@types/react-lazy-load-image-component": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/react-lazy-load-image-component/-/react-lazy-load-image-component-1.5.2.tgz", + "integrity": "sha512-4NLJsMJVrMv18FuMIkUUBVj/PH9A+BvLKrZC75EWiEFn1IsMrZHgL1tVKw5QBfoa0Qjz6SkWIzEvwcyZ8PgnIg==", + "dev": true, + "requires": { + "@types/react": "*", + "csstype": "^3.0.2" + } + }, "@types/react-redux": { "version": "7.1.23", "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.23.tgz", diff --git a/package.json b/package.json index b304154b..d5e00d7f 100644 --- a/package.json +++ b/package.json @@ -93,6 +93,7 @@ ] }, "devDependencies": { - "@types/gtag.js": "0.0.10" + "@types/gtag.js": "0.0.10", + "@types/react-lazy-load-image-component": "^1.5.2" } } diff --git a/src/hooks/useNFT.ts b/src/hooks/useNFT.ts index c45a64ae..5e9cf7d0 100644 --- a/src/hooks/useNFT.ts +++ b/src/hooks/useNFT.ts @@ -1,6 +1,6 @@ import {useEffect} from "react"; import {RigelNFT, RigelNFTTwo} from "../utils/Contracts"; -import { SMARTSWAPNFTSALES, SMARTSWAPNFTTWO} from "../utils/addresses"; +import { IPFS, SMARTSWAPNFTSALES, SMARTSWAPNFTTWO} from "../utils/addresses"; import {useActiveWeb3React} from "../utils/hooks/useActiveWeb3React"; import {getERC20Token, useProvider} from "../utils/utilsFunctions"; import {useSelector} from "react-redux"; @@ -25,6 +25,7 @@ export const useNft = (id: number) => { const [prices, setPrices] = useState({firstTokenPrice: '', secondTokenPrice: ''}); const [unsoldItems, setUnsoldItems] = useState(0); const [nftId, setNftId, nftIdRef] = useState([]); + const [nftClass, setNftClass, nftClassRef] = useState(); const [loadData, setLoadData] = useState(false); @@ -38,68 +39,72 @@ export const useNft = (id: number) => { useEffect(() => { + setLoadData(true); if (chainId === SupportedChainId.POLYGONTEST || chainId === Number(SupportedChainId.POLYGON)) { const nftArray = getNftTokenPolygon(id); + setNftClass(id); setNftId(nftArray); + console.log({nftArray,id},"123") } else if (chainId === SupportedChainId.BINANCETEST || chainId === Number(SupportedChainId.BINANCE)) { const nftArray = getNftToken(id); - setNftId(nftArray); + setNftId(nftArray) + console.log("456") + setNftClass(id); } const fetchNftData = async () => { if (chainId !== undefined) { - try { + // try { const nftContract = await RigelNFT(validSmartAddress, library); - - const purchaseData = await nftContract.nftPurchaseData(nftIdRef.current[0]); - - const tokenOne = await getERC20Token(purchaseData.token1, library); + const purchaseData = await nftContract.nftsPurchaseData(nftClassRef.current); + const tokenA = await nftContract.tokenA(); + const tokenB = await nftContract.tokenB(); + console.log({validSmartAddress, purchaseData, tokenA, tokenB}, "123") + const tokenOne = await getERC20Token(tokenA, library); const [tokenOneSymbol, tokenOneBalance, tokenOneDecimals] = await Promise.all( [tokenOne.symbol(), tokenOne.balanceOf(account), tokenOne.decimals()]); - + console.log({tokenOneSymbol, tokenOneBalance, tokenOneDecimals}, "123") setFirstToken({symbol: tokenOneSymbol, balance: parseFloat(ethers.utils.formatUnits(tokenOneBalance, tokenOneDecimals)).toFixed(4), - address: purchaseData.token1}); + address: tokenA}); + console.log({symbol: tokenOneSymbol, + balance: parseFloat(ethers.utils.formatUnits(tokenOneBalance, tokenOneDecimals)).toFixed(4), + address: tokenA}) - const tokenTwo = await getERC20Token(purchaseData.token2, library); + const tokenTwo = await getERC20Token(tokenB, library); const [tokenTwoSymbol, tokenTwoBalance, tokenTwoDecimals] = await Promise.all( [tokenTwo.symbol(), tokenTwo.balanceOf(account), tokenTwo.decimals()]); + setSecondToken({symbol: tokenTwoSymbol, balance: parseFloat(ethers.utils.formatUnits(tokenTwoBalance, tokenTwoDecimals)).toFixed(4), - address: purchaseData.token2}); - - setPrices({firstTokenPrice: formatAmount(purchaseData.token1Price, tokenOneDecimals), - secondTokenPrice: formatAmount(purchaseData.token2Price, tokenTwoDecimals)}); - - const allID = nftIdRef.current; - - for (let i = allID[0]; i <= allID.slice(-1)[0]; i++) { - const views = await nftContract.sold(i); - if (!views) { - setUnsoldItems(i); - break; - } - } + address: tokenB}); + setPrices({firstTokenPrice: formatAmount(purchaseData.tokenPrice, tokenOneDecimals), + secondTokenPrice: formatAmount(purchaseData.tokenPrice, tokenTwoDecimals)}); + + const views = await nftContract.getAllNFTsSoldFromClass(id); + console.log({views}, "123") + if (views) { + setUnsoldItems(views.all.toString()); + // break; + } setLoadData(false); - } catch (e) { - console.log(e.message); - setLoadData(false); - } + console.log({firstToken, secondToken, prices, unsoldItems, nftId, loadData}) } }; fetchNftData(); }, [account, chainId, stateChanged]); - + return {firstToken, secondToken, prices, unsoldItems, nftId, loadData} }; export const useNFTAllowance = ( checkTokenApproval: number, - token1Price: string, - token2Price: string, + tokenPrice: string, currency: string, - id: number + id: number, + tokenA:string, + tokenB:string ) => { const { account, chainId, library } = useActiveWeb3React(); const [hasTokenABeenApproved, setHasTokenABeenApproved] = useState(false); @@ -108,39 +113,37 @@ export const useNFTAllowance = ( useEffect( () => { const getAllowance = async () => { - if (account) { - try { + if (account && tokenPrice) { + // + // try { setLoadInfo(true); const nftContract = await RigelNFT(SMARTSWAPNFTSALES[chainId as number], library); - const nftToken = await nftContract.nftPurchaseData(id); - - if (nftToken.token1 && nftToken.token2) { - const [tokenA, tokenB] = await Promise.all([ - getERC20Token(nftToken.token1 as string, library), - getERC20Token(nftToken.token2 as string, library), + + if (tokenA && tokenB) { + const [tokenAData, tokenBData] = await Promise.all([ + getERC20Token(tokenA as string, library), + getERC20Token(tokenB as string, library), ]); - const [allowanceA, allowanceB, decimalsA, decimalsB] = await Promise.all([ - tokenA.allowance(account, SMARTSWAPNFTSALES[chainId as number]), - tokenB.allowance(account, SMARTSWAPNFTSALES[chainId as number]), - tokenA.decimals(), - tokenB.decimals() + tokenAData.allowance(account, SMARTSWAPNFTSALES[chainId as number]), + tokenBData.allowance(account, SMARTSWAPNFTSALES[chainId as number]), + tokenAData.decimals(), + tokenBData.decimals() ]); - - const isTokenAApproved = allowanceA.toString() > parseFloat(ethers.utils.parseUnits(token1Price, decimalsA).toString()); - const isTokenBApproved = allowanceB.toString() > parseFloat(ethers.utils.parseUnits(token2Price, decimalsB).toString()); - + const isTokenAApproved = allowanceA.toString() > parseFloat(ethers.utils.parseUnits(tokenPrice, decimalsA).toString()); + const isTokenBApproved = allowanceB.toString() > parseFloat(ethers.utils.parseUnits(tokenPrice, decimalsB).toString()); setHasTokenABeenApproved(isTokenAApproved); setHasTokenBBeenApproved(isTokenBApproved); setLoadInfo(false); + console.log(18393939) } - } catch (e) { - console.log(e) - } + // } catch (e) { + // console.log(e) + // } } }; getAllowance(); - }, [checkTokenApproval, currency, id, account]); + }, [checkTokenApproval, currency, id, account,tokenPrice]); return { hasTokenABeenApproved, hasTokenBBeenApproved, loadInfo }; }; @@ -158,48 +161,42 @@ export const useNftName = (id: number) => { const lib = library ? library : prov; let validSmartAddress: string; - if (SMARTSWAPNFTTWO[ChainId as number] !== "0x") { - validSmartAddress = SMARTSWAPNFTTWO[ChainId as number]; + if (SMARTSWAPNFTSALES[ChainId as number] !== "0x") { + validSmartAddress = SMARTSWAPNFTSALES[ChainId as number]; } + useEffect(() => { setLoading(true); + console.log({ChainId,id}) const fetchDetails = async () => { - - if (ChainId === SupportedChainId.POLYGONTEST || ChainId === Number(SupportedChainId.POLYGON)) { - const nftArray = getNftTokenPolygon(id); + let nftArray + if (chainId === SupportedChainId.POLYGONTEST || chainId === Number(SupportedChainId.POLYGON)) { + nftArray = getNftTokenPolygon(id); setNftId(nftArray); - } else if (ChainId === SupportedChainId.BINANCETEST || ChainId === Number(SupportedChainId.BINANCE)) { - const nftArray = getNftToken(id); + + } else if (chainId === SupportedChainId.BINANCETEST || chainId === Number(SupportedChainId.BINANCE)) { + nftArray = getNftToken(id); setNftId(nftArray); } - + try { - const nftContract = await RigelNFTTwo(validSmartAddress, lib); - - const nftDetails = await nftContract.uri(nftIdRef.current[0]); - const newArray = nftDetails.split('/'); - - let url; - - if (ChainId === SupportedChainId.BINANCETEST) { - url = `https://ipfs.io/ipfs/${newArray[2]}/${nftIdRef.current[0]}.json`; - } else { - url = `https://ipfs.io/ipfs/${newArray[2]}/RigelJson/${nftIdRef.current[0]}.json`; - } + const chain = chainId ?? ChainId + let url=`https://ipfs.io/ipfs/${IPFS[chain]}/${nftArray[0]}.json` const data = await fetch(url); const jsonData = await data.json(); - const nftName = jsonData.name; setName(nftName); const imageArr = jsonData.image.split('/'); + console.log({jsonData,nftName,chain}) let imageUrl; if (ChainId === SupportedChainId.BINANCETEST) { - imageUrl = `https://ipfs.io/ipfs/${imageArr[2]}/${nftIdRef.current[0]}.png`; + imageUrl = `https://ipfs.io/ipfs/${imageArr[2]}`; + // imageUrl = `https://ipfs.io/ipfs/Qmc52oSqkRbJi5w7et2JJaKzAMgkYFuveb7opiLxbDXnsr` } else { - imageUrl = `https://ipfs.io/ipfs/${imageArr[2]}/Rigel/${nftIdRef.current[0]}.png`; + imageUrl = `https://ipfs.io/ipfs/${imageArr[2]}`; } setNftImage(imageUrl); setLoading(false); @@ -211,7 +208,7 @@ export const useNftName = (id: number) => { }; fetchDetails(); - }, [ChainId, library]); + }, [ChainId, library,id]); return {name, nftImage, loading} diff --git a/src/pages/Nft/Components/Nft/index.tsx b/src/pages/Nft/Components/Nft/index.tsx index b7e6085d..89064f0f 100644 --- a/src/pages/Nft/Components/Nft/index.tsx +++ b/src/pages/Nft/Components/Nft/index.tsx @@ -84,7 +84,7 @@ export const Nft = function ({ nftName, image, number, id, priceUSD, priceRGP, i Sold: {loadData ? : - {unsoldItems - nftId[0]} of {nftId.length} } + {unsoldItems} of {nftId.length} } diff --git a/src/pages/Nft/Modals/ComfirmPurchase.tsx b/src/pages/Nft/Modals/ComfirmPurchase.tsx index ad4103f3..85ac7a0f 100644 --- a/src/pages/Nft/Modals/ComfirmPurchase.tsx +++ b/src/pages/Nft/Modals/ComfirmPurchase.tsx @@ -36,10 +36,7 @@ const ComfirmPurchase = ({ isOpen, const dispatch = useDispatch(); const {firstToken, secondToken, prices, unsoldItems, nftId} = useNft(id); - - - const {hasTokenABeenApproved, hasTokenBBeenApproved, loadInfo} = useNFTAllowance(checkTokenApproval, prices.firstTokenPrice, - prices.secondTokenPrice, currency, nftId[0]); + const {hasTokenABeenApproved, hasTokenBBeenApproved, loadInfo} = useNFTAllowance(checkTokenApproval, prices.firstTokenPrice, currency, nftId[0],firstToken.address,secondToken.address); const [error, setError] = useState(''); @@ -100,7 +97,7 @@ const ComfirmPurchase = ({ isOpen, }) ); } - } catch (err) { + } catch (err:any) { console.log(err); GNFTFailedApprovalTransaction( "NFT", @@ -127,8 +124,8 @@ const ComfirmPurchase = ({ isOpen, }) ); const nftContract = await RigelNFT(SMARTSWAPNFTSALES[chainId as number], library); - - const data = await nftContract.buy(unsoldItems, currency === 'USDT' ? secondToken.address : firstToken.address); + console.log({id,firstToken,secondToken},SMARTSWAPNFTSALES[chainId as number],chainId, library) + const data = await nftContract.mint(id, currency === 'USDT' ? secondToken.address : firstToken.address); const { confirmations } = await data.wait(3); const { hash } = data; @@ -163,7 +160,7 @@ const ComfirmPurchase = ({ isOpen, } - } catch (e) { + } catch (e:any) { console.log(e); GNFTFailedTransaction( "NFT", @@ -208,7 +205,7 @@ const ComfirmPurchase = ({ isOpen, logo {name} - NFT ID: {unsoldItems} + NFT ID: {id} Created by: RigelProtocol @@ -336,4 +333,4 @@ const ComfirmPurchase = ({ isOpen, ) }; -export default ComfirmPurchase \ No newline at end of file +export default React.memo(ComfirmPurchase) \ No newline at end of file diff --git a/src/pages/Nft/ViewNFT.tsx b/src/pages/Nft/ViewNFT.tsx index 243bb92a..2b5d13cc 100644 --- a/src/pages/Nft/ViewNFT.tsx +++ b/src/pages/Nft/ViewNFT.tsx @@ -39,7 +39,9 @@ export const ViewNFT = function () { const { chainId } = useActiveWeb3React(); const { firstToken, secondToken ,prices, unsoldItems , nftId, loadData} = useNft(viewId); - const {name, nftImage, loading} = useNftName(nftId[0]); + // console.log({viewId, firstToken, secondToken ,prices, unsoldItems , nftId, loadData}); + // const {name, nftImage, loading} = useNftName(nftId[0]); + const {name, nftImage, loading} = useNftName(viewId); const [isMobileDevice] = useMediaQuery("(max-width: 750px)"); @@ -91,7 +93,7 @@ export const ViewNFT = function () { templateRows='repeat(1, 1fr)' templateColumns='repeat(5, 1fr)' > - + Creator Rigel Protocol @@ -100,7 +102,7 @@ export const ViewNFT = function () { justifyContent="center" > Number - {unsoldItems} + {viewId} diff --git a/src/utils/abis/nft.json b/src/utils/abis/nft.json index 7ef7b0b7..f77ada6e 100644 --- a/src/utils/abis/nft.json +++ b/src/utils/abis/nft.json @@ -1 +1 @@ -[{"inputs":[{"internalType":"address","name":"smartSwapNFT","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Purchase","type":"event"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"EmmergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256[]","name":"tokenID","type":"uint256[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"Withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"},{"internalType":"address","name":"buyWith","type":"address"}],"name":"buy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"ids","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenID","type":"uint256"}],"name":"nftPurchaseData","outputs":[{"components":[{"internalType":"address","name":"token1","type":"address"},{"internalType":"address","name":"token2","type":"address"},{"internalType":"uint256","name":"token1Price","type":"uint256"},{"internalType":"uint256","name":"token2Price","type":"uint256"},{"internalType":"uint256","name":"tokenID","type":"uint256"}],"internalType":"struct RigelprotocolSmartSwapNFTsSales.cardDetails","name":"card","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rigelNFT","outputs":[{"internalType":"contract IERC1155","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"sold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenID","type":"uint256[]"},{"internalType":"address","name":"_buyWithOne","type":"address"},{"internalType":"address","name":"_buyWithTwo","type":"address"},{"internalType":"uint256[]","name":"_token1Price","type":"uint256[]"},{"internalType":"uint256[]","name":"_token2Price","type":"uint256[]"}],"name":"updateCardDetails","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file +[{"inputs":[{"internalType":"string","name":"__name","type":"string"},{"internalType":"string","name":"_contractURI","type":"string"},{"internalType":"string","name":"_base","type":"string"},{"internalType":"address","name":"_tokenA","type":"address"},{"internalType":"address","name":"_tokenB","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"INVALIDCLASS","type":"error"},{"inputs":[],"name":"INVALIDTOKEN","type":"error"},{"inputs":[],"name":"ITEMSOLD","type":"error"},{"inputs":[],"name":"OUTOFSTOCK","type":"error"},{"inputs":[],"name":"VERSIONENDED","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Purchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"WithdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"_burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenID","type":"uint256[]"},{"internalType":"string[]","name":"tokenURI","type":"string[]"}],"name":"_resetTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_class","type":"uint256"}],"name":"getAllNFTsSoldFromClass","outputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256","name":"all","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_interfaceID","type":"uint256"}],"name":"getSupportTokenInterface","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenClass","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_tokenId","type":"uint256[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"},{"internalType":"string[]","name":"_tokenURI","type":"string[]"}],"name":"mintBatch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenClass","type":"uint256"}],"name":"nftsPurchaseData","outputs":[{"components":[{"internalType":"uint256","name":"tokenPrice","type":"uint256"},{"internalType":"uint256","name":"nextAvailableID","type":"uint256"}],"internalType":"struct RigelSmartSwapNFTs.cardDetails","name":"card","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"salesStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint96","name":"royaltyFee","type":"uint96"}],"name":"setGeneralRoyaltyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenClass","type":"uint256[]"},{"internalType":"uint256[]","name":"stopMintingAt","type":"uint256[]"}],"name":"setStop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenClass","type":"uint256"}],"name":"stopMintingSalesAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenID","type":"uint256"}],"name":"supportsTokenInterface","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenA","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenClass","type":"uint256[]"},{"internalType":"uint256[]","name":"_tokenPrice","type":"uint256[]"},{"internalType":"uint256[]","name":"startID","type":"uint256[]"}],"name":"updateCardDetails","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenID","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}] \ No newline at end of file diff --git a/src/utils/addresses.ts b/src/utils/addresses.ts index 1c92f59c..5461785f 100644 --- a/src/utils/addresses.ts +++ b/src/utils/addresses.ts @@ -44,15 +44,26 @@ export const SMARTSWAPROUTER: { [key: string]: string } = { "42262": "0xFf672dB2558c8A78813EA3F61303460fcec656F7", }; +export const IPFS: { [key: string]: string } = { + "1": "0x", + "3": "", + "56": "", + "97": "QmcScJHZV8VpksmK1TEXRGGdk2uACXDBqFgvtfr84JdygF", + "137": "", + "80001": "QmPdDoKJEoPZMCEwswEYcbPdMBCpG8N6fYaCBQUTmES76E", + "42261": "", + "42262": "", +}; + //SmartSwapNFT export const SMARTSWAPNFTSALES: { [key: string]: string } = { "1": "0x", "3": "0x", "56": "0x6f3BB73e30a24412C1202f58439f4fe5Cb712979", - "97": "0x4aEFdbed61128de1483D2B9e739251466DCa29Bb", + "97": "0xD25B798dbC7740C79b3a14eeDB8ec86a49306E89", "137": "0xA5c488716f83A6C74bAC8712a457b7BeCF7C3DD5", - "80001": "0xB15f7A4bA76B702e49FA3233FD455C5F13CB01d8", + "80001": "0xe8c70E56E8B52Ca9d57148436B61F93EEa685cA2", }; //SmartSwapNFTTwo From 7f83596a1abcf032612581a9339ef7e5767cf736 Mon Sep 17 00:00:00 2001 From: Fakorede Damilola Date: Fri, 23 Sep 2022 05:18:45 +0100 Subject: [PATCH 02/26] completed NFT --- src/pages/Nft/Modals/ComfirmPurchase.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/Nft/Modals/ComfirmPurchase.tsx b/src/pages/Nft/Modals/ComfirmPurchase.tsx index 85ac7a0f..d921bc7d 100644 --- a/src/pages/Nft/Modals/ComfirmPurchase.tsx +++ b/src/pages/Nft/Modals/ComfirmPurchase.tsx @@ -152,7 +152,7 @@ const ComfirmPurchase = ({ isOpen, dispatch( addToast({ - message: `Successfully Purchased RIGEL GIFT CARD ${unsoldItems} NFT`, + message: `Successfully Purchased RIGEL GIFT CARD ${id} NFT`, URL: explorerLink, }) ); From 5740393197150950829655964b5e1ae268abcdc0 Mon Sep 17 00:00:00 2001 From: Fakorede Damilola Date: Sat, 24 Sep 2022 04:12:52 +0100 Subject: [PATCH 03/26] changed cpntract --- src/hooks/useNFT.ts | 3 ++- src/pages/Nft/Modals/ComfirmPurchase.tsx | 33 +++++++++++++++++++++++- src/utils/abis/nft.json | 2 +- src/utils/addresses.ts | 10 +++---- 4 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/hooks/useNFT.ts b/src/hooks/useNFT.ts index 5e9cf7d0..be751efd 100644 --- a/src/hooks/useNFT.ts +++ b/src/hooks/useNFT.ts @@ -57,6 +57,7 @@ export const useNft = (id: number) => { if (chainId !== undefined) { // try { const nftContract = await RigelNFT(validSmartAddress, library); + console.log({nftContract}) const purchaseData = await nftContract.nftsPurchaseData(nftClassRef.current); const tokenA = await nftContract.tokenA(); const tokenB = await nftContract.tokenB(); @@ -179,7 +180,7 @@ export const useNftName = (id: number) => { nftArray = getNftToken(id); setNftId(nftArray); } - + console.log({nftArray}) try { const chain = chainId ?? ChainId let url=`https://ipfs.io/ipfs/${IPFS[chain]}/${nftArray[0]}.json` diff --git a/src/pages/Nft/Modals/ComfirmPurchase.tsx b/src/pages/Nft/Modals/ComfirmPurchase.tsx index d921bc7d..f09934d2 100644 --- a/src/pages/Nft/Modals/ComfirmPurchase.tsx +++ b/src/pages/Nft/Modals/ComfirmPurchase.tsx @@ -39,6 +39,8 @@ const ComfirmPurchase = ({ isOpen, const {hasTokenABeenApproved, hasTokenBBeenApproved, loadInfo} = useNFTAllowance(checkTokenApproval, prices.firstTokenPrice, currency, nftId[0],firstToken.address,secondToken.address); const [error, setError] = useState(''); + const [mint, setMint] = useState(true); + useEffect(() => { if (currency === firstToken.symbol && parseFloat(firstToken.balance) < parseFloat(prices.firstTokenPrice)) { @@ -49,6 +51,20 @@ const ComfirmPurchase = ({ isOpen, setError('') } }, [currency]); + // useEffect(()=>{ + // let didCancel= false + // const checkForMint = async ()=>{ + // const nftContract = await RigelNFT(SMARTSWAPNFTSALES[chainId as number], library); + // const isMinted = await nftContract.checkStatus(); + // if(!didCancel){ + // setMint(isMinted) + // } + // } + // checkForMint() + // return ()=>{ + // didCancel = true + // } + // },[]) const approveTokens = async (address: string, symbol: string) => { @@ -268,7 +284,22 @@ const ComfirmPurchase = ({ isOpen, {error} - : currency === firstToken.symbol && !hasTokenABeenApproved ? + :mint ? + + : currency === firstToken.symbol && !hasTokenABeenApproved ? - :mint ? - : currency === firstToken.symbol && !hasTokenABeenApproved ? + { + // error ? + // - : currency === firstToken.symbol && !hasTokenABeenApproved ? + // : + currency === firstToken.symbol && !hasTokenABeenApproved ? + error ? + - // : + : currency === firstToken.symbol && !hasTokenABeenApproved ? - : currency === secondToken.symbol && !hasTokenBBeenApproved ? - + // : + // currency === firstToken.symbol && !hasTokenABeenApproved ? + // + // : currency === secondToken.symbol && !hasTokenBBeenApproved ? + // : loadInfo ? - // : - // currency === firstToken.symbol && !hasTokenABeenApproved ? - // - // : currency === secondToken.symbol && !hasTokenBBeenApproved ? - // + : + currency === firstToken.symbol && !hasTokenABeenApproved ? + + : currency === secondToken.symbol && !hasTokenBBeenApproved ? + : loadInfo ?