Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12,330 changes: 12,330 additions & 0 deletions pnpm-lock.yaml

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions public/NetworkIcon/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import meticIcon from 'public/NetworkIcon/metisdao-metis-logo.png';
import moonbeamIcon from 'public/NetworkIcon/moonbeam-glmr-logo.png';
import morphIcon from 'public/NetworkIcon/mrph-morpheusnetwork.png';
import polygonIcon from 'public/NetworkIcon/polygon-matic-logo.png';
import PolygonZkevm from 'public/NetworkIcon/zkevm.png';
import zksyncIcon from 'public/NetworkIcon/zksync-logo.png';

export {
Expand All @@ -14,4 +15,5 @@ export {
morphIcon,
polygonIcon,
zksyncIcon,
PolygonZkevm,
};
Binary file added public/NetworkIcon/zkevm.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions src/app/(main)/marketPlace/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@ import CustomizedTables from '@/components/ui/marketPlaceTable';
import SwiperCoverflow from '@/components/ui/swiper';
import YourCollection from '@/components/ui/yourCollectionComponent';

import { coinData } from '@/utils/natworkData';
import { MarketData, coinData } from '@/utils/natworkData';

function Page() {
const [collection, setCollection] = useState('Your Collection');
return (
<div className=' border-l border flex gap-10 flex-col w-full items-start py-6 overflow-x-hidden'>
<SwiperCoverflow />
<div className=' flex static gap-3 ml-12'>
{coinData.map((coin) => {
{MarketData.map((coin) => {
return (
<button
className='group/button relative z-40 inline-flex h-10 w-10 items-center gap-4 justify-center overflow-hidden rounded-lg bg-transparent font-medium text-white transition-all duration-300 hover:w-24'
Expand Down
173 changes: 149 additions & 24 deletions src/components/ui/dialog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,19 @@ import toast from 'react-hot-toast';

import useWeb3auth, { chainConfig } from '@/hooks/useWeb3auth';
import {
PurchaseSubsAvaGasslessBundle,
PurchaseSubsAmoyGasslessBundle,
approveNSubscribe,
batchSubscribeFor,
chainLinkAutomationSubscription,
checkUserBalanceAvaWeb3Auth,
checkUserBalanceAmoyWeb3Auth,
checkUserBalanceAvaWeb3Auth,
checkUserBalanceWeb3Auth,
checkUserBalanceZkevm,
getTestFundsWeb3Auth,
getTestFundsZkEvm,
mintingNft,
PurchaseSubsAmoyGasslessBundle,
PurchaseSubsAvaGasslessBundle,
purchaseSubscriptionZkevm,
} from '@/lib/func';
import { cn, toastStyles } from '@/lib/utils';

Expand All @@ -34,6 +37,7 @@ import { moonbase, morph } from '@/app/Providers';
import { coinData } from '@/utils/natworkData';

const subscriptionId = Math.floor(Math.random() * (1e12 - 1 + 1)) + 1;

export default function MyModal({
setLocked,
dialogFor,
Expand All @@ -54,9 +58,11 @@ export default function MyModal({
const [batchGaslessTrx, setBatchGaslessTrx] = useState('');
const [approvetrx, setApproveTrx] = useState('');
const [Polygontrx, setPolygonTrx] = useState('');
const [Cardona, setCardona] = useState('');
const [avalancheCrossTxn, setAvalancheCrossTxn] = useState('');
const [chainlinkCrossTxn, setChainLinkCrossTxn] = useState('');
const [testTokensHash, setTestTokensHash] = useState('');
const [testTokensZekEvm, setTestTokensZekEvmHash] = useState('');
const [polygonTokensHash, setPolygonTokensHash] = useState('');
const [nftTrx, setNftTrx] = useState('');
const [progress, setProgress] = React.useState(0);
Expand Down Expand Up @@ -148,6 +154,36 @@ export default function MyModal({
toast.error('Something went wrong', toastStyles);
}
};

const zkEVMNotifier = async () => {
try {
const resp = await fetch(
'https://db-graph-backend.onrender.com/api/purchase-subscription-zkevm',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
email: email,
modelId: modelId,
tokenId: (
BigInt(1e18) * BigInt(modelId) +
BigInt(subscriptionId)
).toString(),
}),
}
);
const data = await resp.json();
if (data.success) {
return true;
}
return false;
} catch (error) {
toast.error('Something went wrong', toastStyles);
}
};

const handleOperation = async (walletChosen: string) => {
try {
if (walletChosen === 'Morph') {
Expand Down Expand Up @@ -225,6 +261,22 @@ export default function MyModal({
showMsgs();
setProgress(100);
}
} else if (walletChosen === 'Polygon_Zkevm') {
setProgress(10);
console.log(subscriptionId);
const resp = await purchaseSubscriptionZkevm(
smartAccount,
modelId,
subscriptionId,
value,
2592000
);
if (resp?.hash) {
await zkEVMNotifier();
setCardona(resp?.hash);
showMsgs();
setProgress(100);
}
}
} catch (error) {
setProgress(0);
Expand Down Expand Up @@ -262,6 +314,16 @@ export default function MyModal({
);
}
};
const insufficiantZkevmBalance = async () => {
const amount = await checkUserBalanceZkevm(smartAccount);
if (parseInt(amount.signerBalance) < value) {
setLoadingState(
`Insufficient Funds need ${
value - parseInt(amount.signerBalance)
}💸 to subscribe`
);
}
};

React.useEffect(() => {
if (walletChosen === 'Ethereum') {
Expand All @@ -271,8 +333,37 @@ export default function MyModal({
} else if (walletChosen === 'Polygon') {
console.log('there?');
insufficiantAmoyBalance();
} else if (walletChosen === 'Polygon_Zkevm') {
insufficiantZkevmBalance();
}
}, [walletChosen]);

const paymentSuccessMessage = (walletChosen: string) => {
switch (walletChosen) {
case 'Ethereum':
return 'Autopay Success';
case 'avalanche':
case 'Polygon':
return 'CCIP Payment Success';
case 'Polygon_Zkevm':
return 'Payment Success';
default:
return 'Payment Success';
}
};

const transactionUrls = {
Morph: `${morph.explorerUrl}/tx/${approvetrx}`,
avalanche: `https://ccip.chain.link/tx/${avalancheCrossTxn}`,
Polygon: `https://ccip.chain.link/tx/${Polygontrx}`,
Ethereum: `${chainConfig[1].blockExplorerUrl}/tx/${chainlinkCrossTxn}`,
Polygon_Zkevm: `${chainConfig[3].blockExplorerUrl}/tx/${chainlinkCrossTxn}`,
default: `${moonbase.explorerUrl}/tx/${batchGaslessTrx}`,
};

const transactionUrl =
transactionUrls[walletChosen] || transactionUrls.default;

return (
<>
<button
Expand Down Expand Up @@ -344,7 +435,6 @@ export default function MyModal({
/>
</span>
)}

<div className='absolute left-1/2 top-[62%] -translate-x-1/2 -translate-y-1/2 w-full'>
{(approvetrx ||
batchGaslessTrx ||
Expand All @@ -360,26 +450,11 @@ export default function MyModal({
} w-full py-3`}
>
<a
href={
walletChosen === 'Morph'
? `${morph.explorerUrl}/tx/${approvetrx}`
: walletChosen === 'avalanche'
? `https://ccip.chain.link/tx/${avalancheCrossTxn}`
: walletChosen === 'Polygon'
? `https://ccip.chain.link/tx/${Polygontrx}`
: walletChosen === 'Ethereum'
? `${chainConfig[1].blockExplorerUrl}/tx/${chainlinkCrossTxn}`
: `${moonbase.explorerUrl}/tx/${batchGaslessTrx}`
}
href={transactionUrl}
target='_blank'
className='flex items-center text-white gap-1 hover:underline'
>
{walletChosen === 'Ethereum'
? 'Autopay Success'
: walletChosen === 'avalanche' ||
walletChosen === 'Polygon'
? 'CCIP Payment Success'
: ' Payment Success'}
{paymentSuccessMessage(walletChosen)}
<svg
stroke='currentColor'
fill='none'
Expand Down Expand Up @@ -435,7 +510,7 @@ export default function MyModal({
</div>
)}
{testTokensHash && (
<div className={'flex items-center w-full'}>
<div className='flex items-center w-full'>
<a
href={`${chainConfig[1].blockExplorerUrl}/tx/${testTokensHash}`}
target='_blank'
Expand Down Expand Up @@ -465,8 +540,39 @@ export default function MyModal({
</a>
</div>
)}
{testTokensZekEvm && (
<div className='flex items-center w-full'>
<a
href={`${chainConfig[3].blockExplorerUrl}/tx/${testTokensZekEvm}`}
target='_blank'
className='flex items-center text-white gap-1 hover:underline'
>
Test funds{' '}
<svg
stroke='currentColor'
fill='none'
stroke-width='2'
viewBox='0 0 24 24'
stroke-linecap='round'
stroke-linejoin='round'
height='1em'
width='1em'
xmlns='http://www.w3.org/2000/svg'
>
<path
stroke='none'
d='M0 0h24v24H0z'
fill='none'
></path>
<path d='M12 6h-6a2 2 0 0 0 -2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-6'></path>
<path d='M11 13l9 -9'></path>
<path d='M15 4h5v5'></path>
</svg>
</a>
</div>
)}
{polygonTokensHash && (
<div className={'flex items-center w-full'}>
<div className='flex items-center w-full'>
<a
href={`${chainConfig[2].blockExplorerUrl}/tx/${polygonTokensHash}`}
target='_blank'
Expand Down Expand Up @@ -509,8 +615,9 @@ export default function MyModal({
} else if (coin.name === 'Ethereum') {
login(1);
} else if (coin.name === 'Polygon') {
console.log('there?');
login(2);
} else if (coin.name === 'Polygon_Zkevm') {
login(3);
}
setWalletChosen(coin.name);
setLoadingState('Confirm Payment');
Expand Down Expand Up @@ -584,6 +691,24 @@ export default function MyModal({
);
setTestTokensHash('');
}
} else if (walletChosen === 'Polygon_Zkevm') {
const resp = await getTestFundsZkEvm(
smartAccount
);
if (resp.trxhash) {
toast.success(
'Wooho your funds have arrived 🚀🎉💸',
toastStyles
);
setTestTokensZekEvmHash(resp.trxhash);
setLoadingState('Confirm Payment');
} else {
toast.error(
'Something went wrong',
toastStyles
);
setTestTokensZekEvmHash('');
}
} else {
window.open(
'https://faucet.circle.com/',
Expand Down
3 changes: 3 additions & 0 deletions src/components/ui/marketPlaceCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@ const MarketPlaceCard = ({
modelName,
modelId,
ipfsUrl,
tokenId,
}: {
modelName: string;
modelId: string;
ipfsUrl: string;
tokenId: string;
}) => {
const [isHovered, setIsHovered] = useState(false);
const [teaseData, setTeaseData] = useState({
Expand Down Expand Up @@ -126,6 +128,7 @@ const MarketPlaceCard = ({
icon={teaseData.image}
name={modelName}
modelId={parseInt(modelId)}
tokenId={tokenId}
/>
</motion.div>
</div>
Expand Down
Loading