{"version":3,"sources":["candy-machine.ts","Home.tsx","App.tsx","reportWebVitals.ts","index.tsx"],"names":["CANDY_MACHINE_PROGRAM","anchor","PublicKey","SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID","TOKEN_METADATA_PROGRAM_ID","awaitTransactionSignatureConfirmation","txid","timeout","connection","a","commitment","queryStatus","done","status","slot","confirmations","err","subId","Promise","resolve","reject","setTimeout","console","log","onSignature","result","context","e","error","getSignatureStatuses","signatureStatuses","value","sleep","_signatureSubscriptions","removeSignatureListener","createAssociatedTokenAccountInstruction","associatedTokenAddress","payer","walletAddress","splTokenMintAddress","keys","pubkey","isSigner","isWritable","SystemProgram","programId","TOKEN_PROGRAM_ID","SYSVAR_RENT_PUBKEY","TransactionInstruction","data","Buffer","from","getCandyMachineState","anchorWallet","candyMachineId","provider","preflightCommitment","fetchIdl","idl","program","candyMachine","id","account","fetch","state","itemsAvailable","toNumber","itemsRedeemed","itemsRemaining","goLiveDate","Date","getMasterEdition","mint","findProgramAddress","toBuffer","getMetadata","getTokenWallet","wallet","mintOneToken","config","treasury","Keypair","generate","publicKey","token","metadata","masterEdition","getMinimumBalanceForRentExemption","MintLayout","span","rent","rpc","mintNft","accounts","mintAuthority","updateAuthority","tokenMetadataProgram","tokenProgram","systemProgram","clock","SYSVAR_CLOCK_PUBKEY","signers","instructions","createAccount","fromPubkey","newAccountPubkey","space","lamports","Token","createInitMintInstruction","createMintToInstruction","shortenAddress","address","chars","slice","ms","ConnectButton","styled","WalletDialogButton","CounterText","MintContainer","div","MintButton","Button","renderCounter","days","hours","minutes","seconds","completed","Home","props","useState","balance","setBalance","isActive","setIsActive","isSoldOut","setIsSoldOut","isMinting","setIsMinting","open","message","severity","undefined","alertState","setAlertState","startDate","setStartDate","useWallet","setCandyMachine","onMint","connected","mintTxId","txTimeout","msg","code","indexOf","getBalance","LAMPORTS_PER_SOL","useEffect","signAllTransactions","signTransaction","toBase58","toLocaleString","disabled","onClick","variant","CircularProgress","date","onMount","onComplete","renderer","Snackbar","autoHideDuration","onClose","Alert","process","Connection","startDateSeed","parseInt","App","endpoint","useMemo","clusterApiUrl","wallets","getPhantomWallet","getSolflareWallet","getSolletWallet","autoConnect","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.3faede4e.chunk.js","sourcesContent":["import * as anchor from \"@project-serum/anchor\";\n\nimport {\n MintLayout,\n TOKEN_PROGRAM_ID,\n Token,\n} from \"@solana/spl-token\";\n\nexport const CANDY_MACHINE_PROGRAM = new anchor.web3.PublicKey(\n \"cndyAnrLdpjq1Ssp1z8xxDsB8dxe7u4HL5Nxi2K5WXZ\"\n);\n\nconst SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID = new anchor.web3.PublicKey(\n \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n);\n\nconst TOKEN_METADATA_PROGRAM_ID = new anchor.web3.PublicKey(\n \"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s\"\n);\n\nexport interface CandyMachine {\n id: anchor.web3.PublicKey,\n connection: anchor.web3.Connection;\n program: anchor.Program;\n}\n\ninterface CandyMachineState {\n candyMachine: CandyMachine;\n itemsAvailable: number;\n itemsRedeemed: number;\n itemsRemaining: number;\n goLiveDate: Date,\n}\n\nexport const awaitTransactionSignatureConfirmation = async (\n txid: anchor.web3.TransactionSignature,\n timeout: number,\n connection: anchor.web3.Connection,\n commitment: anchor.web3.Commitment = \"recent\",\n queryStatus = false\n): Promise => {\n let done = false;\n let status: anchor.web3.SignatureStatus | null | void = {\n slot: 0,\n confirmations: 0,\n err: null,\n };\n let subId = 0;\n status = await new Promise(async (resolve, reject) => {\n setTimeout(() => {\n if (done) {\n return;\n }\n done = true;\n console.log(\"Rejecting for timeout...\");\n reject({ timeout: true });\n }, timeout);\n try {\n subId = connection.onSignature(\n txid,\n (result: any, context: any) => {\n done = true;\n status = {\n err: result.err,\n slot: context.slot,\n confirmations: 0,\n };\n if (result.err) {\n console.log(\"Rejected via websocket\", result.err);\n reject(status);\n } else {\n console.log(\"Resolved via websocket\", result);\n resolve(status);\n }\n },\n commitment\n );\n } catch (e) {\n done = true;\n console.error(\"WS error in setup\", txid, e);\n }\n while (!done && queryStatus) {\n // eslint-disable-next-line no-loop-func\n (async () => {\n try {\n const signatureStatuses = await connection.getSignatureStatuses([\n txid,\n ]);\n status = signatureStatuses && signatureStatuses.value[0];\n if (!done) {\n if (!status) {\n console.log(\"REST null result for\", txid, status);\n } else if (status.err) {\n console.log(\"REST error for\", txid, status);\n done = true;\n reject(status.err);\n } else if (!status.confirmations) {\n console.log(\"REST no confirmations for\", txid, status);\n } else {\n console.log(\"REST confirmation for\", txid, status);\n done = true;\n resolve(status);\n }\n }\n } catch (e) {\n if (!done) {\n console.log(\"REST connection error: txid\", txid, e);\n }\n }\n })();\n await sleep(2000);\n }\n });\n\n //@ts-ignore\n if (connection._signatureSubscriptions[subId]) {\n connection.removeSignatureListener(subId);\n }\n done = true;\n console.log(\"Returning status\", status);\n return status;\n}\n\n/* export */ const createAssociatedTokenAccountInstruction = (\n associatedTokenAddress: anchor.web3.PublicKey,\n payer: anchor.web3.PublicKey,\n walletAddress: anchor.web3.PublicKey,\n splTokenMintAddress: anchor.web3.PublicKey\n) => {\n const keys = [\n { pubkey: payer, isSigner: true, isWritable: true },\n { pubkey: associatedTokenAddress, isSigner: false, isWritable: true },\n { pubkey: walletAddress, isSigner: false, isWritable: false },\n { pubkey: splTokenMintAddress, isSigner: false, isWritable: false },\n {\n pubkey: anchor.web3.SystemProgram.programId,\n isSigner: false,\n isWritable: false,\n },\n { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n {\n pubkey: anchor.web3.SYSVAR_RENT_PUBKEY,\n isSigner: false,\n isWritable: false,\n },\n ];\n return new anchor.web3.TransactionInstruction({\n keys,\n programId: SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID,\n data: Buffer.from([]),\n });\n}\n\nexport const getCandyMachineState = async (\n anchorWallet: anchor.Wallet,\n candyMachineId: anchor.web3.PublicKey,\n connection: anchor.web3.Connection,\n): Promise => {\n const provider = new anchor.Provider(connection, anchorWallet, {\n preflightCommitment: \"recent\",\n });\n\n const idl = await anchor.Program.fetchIdl(\n CANDY_MACHINE_PROGRAM,\n provider\n );\n\n const program = new anchor.Program(idl, CANDY_MACHINE_PROGRAM, provider);\n const candyMachine = {\n id: candyMachineId,\n connection,\n program,\n }\n\n const state: any = await program.account.candyMachine.fetch(candyMachineId);\n const itemsAvailable = state.data.itemsAvailable.toNumber();\n const itemsRedeemed = state.itemsRedeemed.toNumber();\n const itemsRemaining = itemsAvailable - itemsRedeemed;\n\n let goLiveDate = state.data.goLiveDate.toNumber();\n goLiveDate = new Date(goLiveDate * 1000);\n\n return {\n candyMachine,\n itemsAvailable,\n itemsRedeemed,\n itemsRemaining,\n goLiveDate,\n };\n}\n\nconst getMasterEdition = async (\n mint: anchor.web3.PublicKey\n): Promise => {\n return (\n await anchor.web3.PublicKey.findProgramAddress(\n [\n Buffer.from(\"metadata\"),\n TOKEN_METADATA_PROGRAM_ID.toBuffer(),\n mint.toBuffer(),\n Buffer.from(\"edition\"),\n ],\n TOKEN_METADATA_PROGRAM_ID\n )\n )[0];\n};\n\nconst getMetadata = async (\n mint: anchor.web3.PublicKey\n): Promise => {\n return (\n await anchor.web3.PublicKey.findProgramAddress(\n [\n Buffer.from(\"metadata\"),\n TOKEN_METADATA_PROGRAM_ID.toBuffer(),\n mint.toBuffer(),\n ],\n TOKEN_METADATA_PROGRAM_ID\n )\n )[0];\n};\n\nconst getTokenWallet = async (\n wallet: anchor.web3.PublicKey,\n mint: anchor.web3.PublicKey\n) => {\n return (\n await anchor.web3.PublicKey.findProgramAddress(\n [wallet.toBuffer(), TOKEN_PROGRAM_ID.toBuffer(), mint.toBuffer()],\n SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID\n )\n )[0];\n};\n\nexport const mintOneToken = async (\n candyMachine: CandyMachine,\n config: anchor.web3.PublicKey, // feels like this should be part of candyMachine?\n payer: anchor.web3.PublicKey,\n treasury: anchor.web3.PublicKey,\n): Promise => {\n const mint = anchor.web3.Keypair.generate();\n const token = await getTokenWallet(payer, mint.publicKey);\n const { connection, program } = candyMachine;\n const metadata = await getMetadata(mint.publicKey);\n const masterEdition = await getMasterEdition(mint.publicKey);\n\n const rent = await connection.getMinimumBalanceForRentExemption(\n MintLayout.span\n );\n\n return await program.rpc.mintNft({\n accounts: {\n config,\n candyMachine: candyMachine.id,\n payer: payer,\n wallet: treasury,\n mint: mint.publicKey,\n metadata,\n masterEdition,\n mintAuthority: payer,\n updateAuthority: payer,\n tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,\n tokenProgram: TOKEN_PROGRAM_ID,\n systemProgram: anchor.web3.SystemProgram.programId,\n rent: anchor.web3.SYSVAR_RENT_PUBKEY,\n clock: anchor.web3.SYSVAR_CLOCK_PUBKEY,\n },\n signers: [mint],\n instructions: [\n anchor.web3.SystemProgram.createAccount({\n fromPubkey: payer,\n newAccountPubkey: mint.publicKey,\n space: MintLayout.span,\n lamports: rent,\n programId: TOKEN_PROGRAM_ID,\n }),\n Token.createInitMintInstruction(\n TOKEN_PROGRAM_ID,\n mint.publicKey,\n 0,\n payer,\n payer\n ),\n createAssociatedTokenAccountInstruction(\n token,\n payer,\n payer,\n mint.publicKey\n ),\n Token.createMintToInstruction(\n TOKEN_PROGRAM_ID,\n mint.publicKey,\n token,\n payer,\n [],\n 1\n ),\n ],\n });\n}\n\nexport const shortenAddress = (address: string, chars = 4): string => {\n return `${address.slice(0, chars)}...${address.slice(-chars)}`;\n};\n\nconst sleep = (ms: number): Promise => {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}","import { useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\nimport Countdown from \"react-countdown\";\nimport { Button, CircularProgress, Snackbar } from \"@material-ui/core\";\nimport Alert from \"@material-ui/lab/Alert\";\n\nimport * as anchor from \"@project-serum/anchor\";\n\nimport { LAMPORTS_PER_SOL } from \"@solana/web3.js\";\n\nimport { useWallet } from \"@solana/wallet-adapter-react\";\nimport { WalletDialogButton } from \"@solana/wallet-adapter-material-ui\";\n\nimport {\n CandyMachine,\n awaitTransactionSignatureConfirmation,\n getCandyMachineState,\n mintOneToken,\n shortenAddress,\n} from \"./candy-machine\";\n\nconst ConnectButton = styled(WalletDialogButton)``;\n\nconst CounterText = styled.span``; // add your styles here\n\nconst MintContainer = styled.div``; // add your styles here\n\nconst MintButton = styled(Button)``; // add your styles here\n\nexport interface HomeProps {\n candyMachineId: anchor.web3.PublicKey;\n config: anchor.web3.PublicKey;\n connection: anchor.web3.Connection;\n startDate: number;\n treasury: anchor.web3.PublicKey;\n txTimeout: number;\n}\n\nconst Home = (props: HomeProps) => {\n const [balance, setBalance] = useState();\n const [isActive, setIsActive] = useState(false); // true when countdown completes\n const [isSoldOut, setIsSoldOut] = useState(false); // true when items remaining is zero\n const [isMinting, setIsMinting] = useState(false); // true when user got to press MINT\n\n const [alertState, setAlertState] = useState({\n open: false,\n message: \"\",\n severity: undefined,\n });\n\n const [startDate, setStartDate] = useState(new Date(props.startDate));\n\n const wallet = useWallet();\n const [candyMachine, setCandyMachine] = useState();\n\n const onMint = async () => {\n try {\n setIsMinting(true);\n if (wallet.connected && candyMachine?.program && wallet.publicKey) {\n const mintTxId = await mintOneToken(\n candyMachine,\n props.config,\n wallet.publicKey,\n props.treasury\n );\n\n const status = await awaitTransactionSignatureConfirmation(\n mintTxId,\n props.txTimeout,\n props.connection,\n \"singleGossip\",\n false\n );\n\n if (!status?.err) {\n setAlertState({\n open: true,\n message: \"Congratulations! Mint succeeded!\",\n severity: \"success\",\n });\n } else {\n setAlertState({\n open: true,\n message: \"Mint failed! Please try again!\",\n severity: \"error\",\n });\n }\n }\n } catch (error: any) {\n // TODO: blech:\n let message = error.msg || \"Minting failed! Please try again!\";\n if (!error.msg) {\n if (error.message.indexOf(\"0x138\")) {\n } else if (error.message.indexOf(\"0x137\")) {\n message = `SOLD OUT!`;\n } else if (error.message.indexOf(\"0x135\")) {\n message = `Insufficient funds to mint. Please fund your wallet.`;\n }\n } else {\n if (error.code === 311) {\n message = `SOLD OUT!`;\n setIsSoldOut(true);\n } else if (error.code === 312) {\n message = `Minting period hasn't started yet.`;\n }\n }\n\n setAlertState({\n open: true,\n message,\n severity: \"error\",\n });\n } finally {\n if (wallet?.publicKey) {\n const balance = await props.connection.getBalance(wallet?.publicKey);\n setBalance(balance / LAMPORTS_PER_SOL);\n }\n setIsMinting(false);\n }\n };\n\n useEffect(() => {\n (async () => {\n if (wallet?.publicKey) {\n const balance = await props.connection.getBalance(wallet.publicKey);\n setBalance(balance / LAMPORTS_PER_SOL);\n }\n })();\n }, [wallet, props.connection]);\n\n useEffect(() => {\n (async () => {\n if (\n !wallet ||\n !wallet.publicKey ||\n !wallet.signAllTransactions ||\n !wallet.signTransaction\n ) {\n return;\n }\n\n const anchorWallet = {\n publicKey: wallet.publicKey,\n signAllTransactions: wallet.signAllTransactions,\n signTransaction: wallet.signTransaction,\n } as anchor.Wallet;\n\n const { candyMachine, goLiveDate, itemsRemaining } =\n await getCandyMachineState(\n anchorWallet,\n props.candyMachineId,\n props.connection\n );\n\n setIsSoldOut(itemsRemaining === 0);\n setStartDate(goLiveDate);\n setCandyMachine(candyMachine);\n })();\n }, [wallet, props.candyMachineId, props.connection]);\n\n return (\n
\n {wallet.connected && (\n

Address: {shortenAddress(wallet.publicKey?.toBase58() || \"\")}

\n )}\n\n {wallet.connected && (\n

Balance: {(balance || 0).toLocaleString()} SOL

\n )}\n\n \n {!wallet.connected ? (\n Connect Wallet\n ) : (\n \n {isSoldOut ? (\n \"SOLD OUT\"\n ) : isActive ? (\n isMinting ? (\n \n ) : (\n \"MINT\"\n )\n ) : (\n completed && setIsActive(true)}\n onComplete={() => setIsActive(true)}\n renderer={renderCounter}\n />\n )}\n \n )}\n \n\n setAlertState({ ...alertState, open: false })}\n >\n setAlertState({ ...alertState, open: false })}\n severity={alertState.severity}\n >\n {alertState.message}\n \n \n
\n );\n};\n\ninterface AlertState {\n open: boolean;\n message: string;\n severity: \"success\" | \"info\" | \"warning\" | \"error\" | undefined;\n}\n\nconst renderCounter = ({ days, hours, minutes, seconds, completed }: any) => {\n return (\n \n {hours} hours, {minutes} minutes, {seconds} seconds\n \n );\n};\n\nexport default Home;\n","import \"./App.css\";\nimport { useMemo } from \"react\";\n\nimport Home from \"./Home\";\n\nimport * as anchor from \"@project-serum/anchor\";\nimport { clusterApiUrl } from \"@solana/web3.js\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\nimport {\n getPhantomWallet,\n getSolflareWallet,\n getSolletWallet,\n} from \"@solana/wallet-adapter-wallets\";\n\nimport {\n ConnectionProvider,\n WalletProvider,\n} from \"@solana/wallet-adapter-react\";\n\nimport { WalletDialogProvider } from \"@solana/wallet-adapter-material-ui\";\n\nconst treasury = new anchor.web3.PublicKey(\n process.env.REACT_APP_TREASURY_ADDRESS!\n);\n\nconst config = new anchor.web3.PublicKey(\n process.env.REACT_APP_CANDY_MACHINE_CONFIG!\n);\n\nconst candyMachineId = new anchor.web3.PublicKey(\n process.env.REACT_APP_CANDY_MACHINE_ID!\n);\n\nconst network = process.env.REACT_APP_SOLANA_NETWORK as WalletAdapterNetwork;\n\nconst rpcHost = process.env.REACT_APP_SOLANA_RPC_HOST!;\nconst connection = new anchor.web3.Connection(rpcHost);\n\nconst startDateSeed = parseInt(process.env.REACT_APP_CANDY_START_DATE!, 10);\n\nconst txTimeout = 30000; // milliseconds (confirm this works for your project)\n\nconst App = () => {\n const endpoint = useMemo(() => clusterApiUrl(network), []);\n\n const wallets = useMemo(\n () => [getPhantomWallet(), getSolflareWallet(), getSolletWallet()],\n []\n );\n\n return (\n \n \n \n \n \n \n \n );\n};\n\nexport default App;\n","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}