From 827dfb785a87b811236bee19821080772a245d91 Mon Sep 17 00:00:00 2001
From: lopeselio
Date: Sun, 12 Jun 2022 19:01:55 +0530
Subject: [PATCH] added game files
---
.env | 7 +
.env.example | 7 +
.gitignore | 23 +
CandyMachine-Storefront/store/.dockerignore | 5 +
CandyMachine-Storefront/store/.editorconfig | 12 +
.../.github/ISSUE_TEMPLATE/bug_report.md | 38 +
.../.github/ISSUE_TEMPLATE/feature_request.md | 20 +
.../store/.github/dependabot.yml | 13 +
.../.github/workflows/cli-pull-request.yml | 34 +
.../store/.github/workflows/lint.yml | 25 +
.../store/.github/workflows/pull-request.yml | 134 +
CandyMachine-Storefront/store/.gitignore | 35 +
CandyMachine-Storefront/store/.mergify.yml | 39 +
CandyMachine-Storefront/store/.prettierrc | 0
.../store/.travis/affects.sh | 20 +
CandyMachine-Storefront/store/ARCHITECTURE.md | 983 +
CandyMachine-Storefront/store/DISCLAIMER.md | 5 +
CandyMachine-Storefront/store/Dockerfile | 47 +
CandyMachine-Storefront/store/LICENSE | 21 +
CandyMachine-Storefront/store/README.md | 13 +
.../store/docs/create-store.md | 68 +
CandyMachine-Storefront/store/docs/deploy.md | 63 +
CandyMachine-Storefront/store/js/.eslintrc.js | 33 +
.../store/js/.tool-versions | 1 +
CandyMachine-Storefront/store/js/README.md | 31 +
.../store/js/assets/wallets/ledger.svg | 19 +
.../store/js/assets/wallets/mathwallet.svg | 14 +
.../store/js/assets/wallets/metamask.svg | 31 +
.../store/js/assets/wallets/solflare.svg | 11 +
.../store/js/assets/wallets/sollet.svg | 13 +
.../store/js/assets/wallets/solong.png | Bin 0 -> 1843 bytes
.../store/js/assets/wallets/torus.svg | 19 +
.../store/js/assets/wallets/wormhole.svg | 3857 ++
.../store/js/deploy-web.bat | 13 +
.../store/js/deploy-web.sh | 13 +
CandyMachine-Storefront/store/js/lerna.json | 22 +
CandyMachine-Storefront/store/js/package.json | 80 +
.../store/js/packages/cli/.nvmrc | 1 +
.../store/js/packages/cli/README.md | 208 +
.../js/packages/cli/example-assets/0.json | 1 +
.../js/packages/cli/example-assets/0.png | Bin 0 -> 8990 bytes
.../js/packages/cli/example-assets/1.json | 1 +
.../js/packages/cli/example-assets/1.png | Bin 0 -> 9337 bytes
.../js/packages/cli/example-assets/2.json | 1 +
.../js/packages/cli/example-assets/2.png | Bin 0 -> 9524 bytes
.../js/packages/cli/example-assets/3.json | 1 +
.../js/packages/cli/example-assets/3.png | Bin 0 -> 7932 bytes
.../js/packages/cli/example-assets/4.json | 1 +
.../js/packages/cli/example-assets/4.png | Bin 0 -> 6868 bytes
.../js/packages/cli/example-assets/5.json | 1 +
.../js/packages/cli/example-assets/5.png | Bin 0 -> 8243 bytes
.../js/packages/cli/example-assets/6.json | 1 +
.../js/packages/cli/example-assets/6.png | Bin 0 -> 9171 bytes
.../js/packages/cli/example-assets/7.json | 1 +
.../js/packages/cli/example-assets/7.png | Bin 0 -> 8963 bytes
.../js/packages/cli/example-assets/8.json | 1 +
.../js/packages/cli/example-assets/8.png | Bin 0 -> 9227 bytes
.../js/packages/cli/example-assets/9.json | 1 +
.../js/packages/cli/example-assets/9.png | Bin 0 -> 8119 bytes
.../cli/example-traits-configuration.json | 51 +
.../cli/example-traits/background/blue.png | Bin 0 -> 20012 bytes
.../cli/example-traits/background/brown.png | Bin 0 -> 20012 bytes
.../cli/example-traits/background/flesh.png | Bin 0 -> 20011 bytes
.../cli/example-traits/background/green.png | Bin 0 -> 20012 bytes
.../example-traits/background/light-blue.png | Bin 0 -> 20011 bytes
.../example-traits/background/light-green.png | Bin 0 -> 20011 bytes
.../example-traits/background/light-pink.png | Bin 0 -> 20010 bytes
.../background/light-purple.png | Bin 0 -> 20011 bytes
.../background/light-yellow.png | Bin 0 -> 20011 bytes
.../cli/example-traits/background/orange.png | Bin 0 -> 20012 bytes
.../cli/example-traits/background/pink.png | Bin 0 -> 20009 bytes
.../cli/example-traits/background/purple.png | Bin 0 -> 20011 bytes
.../cli/example-traits/background/red.png | Bin 0 -> 20011 bytes
.../cli/example-traits/background/yellow.png | Bin 0 -> 20013 bytes
.../cli/example-traits/eyes/egg-eyes.png | Bin 0 -> 21145 bytes
.../cli/example-traits/eyes/heart-eyes.png | Bin 0 -> 21071 bytes
.../cli/example-traits/eyes/square-eyes.png | Bin 0 -> 18063 bytes
.../cli/example-traits/eyes/star-eyes.png | Bin 0 -> 21186 bytes
.../cli/example-traits/face/cyan-face.png | Bin 0 -> 40895 bytes
.../example-traits/face/dark-green-face.png | Bin 0 -> 41470 bytes
.../cli/example-traits/face/flesh-face.png | Bin 0 -> 40871 bytes
.../cli/example-traits/face/gold-face.png | Bin 0 -> 40703 bytes
.../example-traits/face/grapefruit-face.png | Bin 0 -> 40860 bytes
.../cli/example-traits/face/green-face.png | Bin 0 -> 40815 bytes
.../cli/example-traits/face/pink-face.png | Bin 0 -> 40783 bytes
.../cli/example-traits/face/purple-face.png | Bin 0 -> 40737 bytes
.../cli/example-traits/face/sun-face.png | Bin 0 -> 41098 bytes
.../cli/example-traits/face/teal-face.png | Bin 0 -> 41159 bytes
.../cli/example-traits/mouth/block-mouth.png | Bin 0 -> 18348 bytes
.../cli/example-traits/mouth/smile-mouth.png | Bin 0 -> 25740 bytes
.../example-traits/mouth/triangle-mouth.png | Bin 0 -> 28151 bytes
.../store/js/packages/cli/package.json | 74 +
.../js/packages/cli/src/candy-machine-cli.ts | 751 +
.../store/js/packages/cli/src/cli-nft.ts | 45 +
.../js/packages/cli/src/commands/createArt.ts | 61 +
.../src/commands/generateConfigurations.ts | 53 +
.../js/packages/cli/src/commands/mint-nft.ts | 203 +
.../js/packages/cli/src/commands/mint.ts | 155 +
.../js/packages/cli/src/commands/sign.ts | 61 +
.../js/packages/cli/src/commands/signAll.ts | 255 +
.../js/packages/cli/src/commands/upload.ts | 227 +
.../invalidSchema/invalid-address.json | 16 +
.../invalidSchema/invalid-shares.json | 16 +
.../__fixtures__/mismatchedAssets/0.json | 1 +
.../__snapshots__/verifyTokenMetadata.ts.snap | 5 +
.../__tests__/verifyTokenMetadata.ts | 103 +
.../src/commands/verifyTokenMetadata/index.ts | 163 +
.../token-metadata.schema.json | 67 +
.../js/packages/cli/src/fair-launch-cli.ts | 2963 ++
.../js/packages/cli/src/helpers/accounts.ts | 302 +
.../js/packages/cli/src/helpers/cache.ts | 36 +
.../js/packages/cli/src/helpers/constants.ts | 46 +
.../packages/cli/src/helpers/instructions.ts | 207 +
.../js/packages/cli/src/helpers/metadata.ts | 73 +
.../js/packages/cli/src/helpers/schema.ts | 138 +
.../packages/cli/src/helpers/transactions.ts | 266 +
.../cli/src/helpers/upload/arweave.ts | 73 +
.../js/packages/cli/src/helpers/upload/aws.ts | 54 +
.../packages/cli/src/helpers/upload/ipfs.ts | 67 +
.../js/packages/cli/src/helpers/various.ts | 200 +
.../store/js/packages/cli/src/tsconfig.json | 24 +
.../store/js/packages/cli/src/types.ts | 253 +
.../store/js/packages/common/.prettierignore | 1 +
.../store/js/packages/common/package.json | 81 +
.../js/packages/common/src/actions/account.ts | 335 +
.../js/packages/common/src/actions/auction.ts | 1090 +
.../js/packages/common/src/actions/index.ts | 4 +
.../packages/common/src/actions/metadata.ts | 1240 +
.../js/packages/common/src/actions/vault.ts | 769 +
.../components/ActionConfirmation/index.tsx | 30 +
.../components/ActionConfirmation/style.less | 5 +
.../common/src/components/AppBar/index.tsx | 49 +
.../common/src/components/AppBar/style.less | 57 +
.../src/components/BackButton/index.tsx | 13 +
.../src/components/ConnectButton/index.tsx | 48 +
.../src/components/CurrentUserBadge/index.tsx | 65 +
.../components/CurrentUserBadge/styles.less | 15 +
.../src/components/EtherscanLink/index.tsx | 39 +
.../src/components/ExplorerLink/index.tsx | 43 +
.../common/src/components/Icons/info.tsx | 20 +
.../common/src/components/Identicon/index.tsx | 45 +
.../src/components/Identicon/style.less | 8 +
.../common/src/components/Input/numeric.tsx | 43 +
.../src/components/MetaplexModal/index.less | 9 +
.../src/components/MetaplexModal/index.tsx | 25 +
.../src/components/MetaplexOverlay/index.tsx | 30 +
.../common/src/components/Settings/index.tsx | 71 +
.../src/components/TokenDisplay/index.tsx | 58 +
.../common/src/components/TokenIcon/index.tsx | 73 +
.../packages/common/src/components/index.tsx | 15 +
.../js/packages/common/src/constants/index.ts | 2 +
.../packages/common/src/constants/labels.ts | 15 +
.../js/packages/common/src/constants/math.ts | 7 +
.../common/src/contexts/accounts/accounts.tsx | 286 +
.../common/src/contexts/accounts/cache.ts | 193 +
.../src/contexts/accounts/deserialize.ts | 63 +
.../contexts/accounts/getMultipleAccounts.ts | 56 +
.../common/src/contexts/accounts/index.ts | 6 +
.../common/src/contexts/accounts/parsesrs.ts | 64 +
.../common/src/contexts/accounts/types.ts | 17 +
.../common/src/contexts/connection.tsx | 706 +
.../js/packages/common/src/contexts/index.tsx | 8 +
.../src/contexts/meta/getEmptyMetaState.ts | 29 +
.../common/src/contexts/meta/index.ts | 11 +
.../contexts/meta/isMetadataPartOfStore.ts | 23 +
.../common/src/contexts/meta/loadAccounts.ts | 1031 +
.../common/src/contexts/meta/meta.tsx | 328 +
.../src/contexts/meta/onChangeAccount.ts | 25 +
.../src/contexts/meta/processAuctions.ts | 104 +
.../src/contexts/meta/processMetaData.ts | 105 +
.../contexts/meta/processMetaplexAccounts.ts | 218 +
.../src/contexts/meta/processVaultData.ts | 56 +
.../contexts/meta/queryExtendedMetadata.ts | 46 +
.../contexts/meta/subscribeAccountsChange.ts | 84 +
.../common/src/contexts/meta/types.ts | 120 +
.../packages/common/src/contexts/meta/web3.ts | 61 +
.../js/packages/common/src/contexts/store.tsx | 73 +
.../packages/common/src/contexts/wallet.less | 6 +
.../packages/common/src/contexts/wallet.tsx | 231 +
.../js/packages/common/src/contracts/token.ts | 116 +
.../js/packages/common/src/hooks/index.ts | 5 +
.../common/src/hooks/useAccountByMint.ts | 17 +
.../common/src/hooks/useQuerySearch.ts | 5 +
.../packages/common/src/hooks/useThatState.ts | 16 +
.../packages/common/src/hooks/useTokenName.ts | 10 +
.../common/src/hooks/useUserAccounts.ts | 21 +
.../store/js/packages/common/src/index.tsx | 14 +
.../js/packages/common/src/models/account.ts | 85 +
.../js/packages/common/src/models/index.ts | 2 +
.../common/src/models/metaplex/claimBid.ts | 114 +
.../metaplex/decommissionAuctionManager.ts | 75 +
.../deprecatedInitAuctionManagerV1.ts | 88 +
...tedPopulateParticipationPrintingAccount.ts | 164 +
.../deprecatedRedeemParticipationBid.ts | 165 +
.../src/models/metaplex/deprecatedStates.ts | 338 +
.../deprecatedValidateParticipation.ts | 103 +
.../deprecatedValidateSafetyDepositBoxV1.ts | 158 +
.../models/metaplex/emptyPaymentAccount.ts | 155 +
.../common/src/models/metaplex/index.ts | 1423 +
.../models/metaplex/initAuctionManagerV2.ts | 104 +
.../common/src/models/metaplex/redeemBid.ts | 207 +
.../metaplex/redeemFullRightsTransferBid.ts | 204 +
.../metaplex/redeemParticipationBidV3.ts | 237 +
.../models/metaplex/redeemPrintingV2Bid.ts | 219 +
.../src/models/metaplex/setAuctionCache.ts | 88 +
.../common/src/models/metaplex/setStore.ts | 73 +
.../src/models/metaplex/setStoreIndex.ts | 87 +
.../models/metaplex/setWhitelistedCreator.ts | 70 +
.../src/models/metaplex/startAuction.ts | 64 +
.../metaplex/validateSafetyDepositBoxV2.ts | 156 +
.../models/metaplex/withdrawMasterEdition.ts | 155 +
.../store/js/packages/common/src/styles.less | 6 +
.../common/src/types/buffer-layout.d.ts | 9 +
.../packages/common/src/types/jazzicon.d.ts | 4 +
.../js/packages/common/src/types/u64.d.ts | 6 +
.../js/packages/common/src/utils/borsh.ts | 32 +
.../src/utils/createPipelineExecutor.ts | 54 +
.../packages/common/src/utils/eventEmitter.ts | 67 +
.../store/js/packages/common/src/utils/ids.ts | 80 +
.../js/packages/common/src/utils/index.tsx | 12 +
.../common/src/utils/isValidHttpUrl.ts | 7 +
.../js/packages/common/src/utils/layout.ts | 121 +
.../common/src/utils/notifications.tsx | 33 +
.../packages/common/src/utils/programIds.ts | 55 +
.../js/packages/common/src/utils/shortvec.ts | 30 +
.../js/packages/common/src/utils/strings.ts | 74 +
.../common/src/utils/useLocalStorage.ts | 32 +
.../js/packages/common/src/utils/utils.ts | 300 +
.../src/wallet-adapters/torus/index.tsx | 0
.../store/js/packages/common/tsconfig.json | 23 +
.../js/packages/fair-launch/package.json | 62 +
.../packages/fair-launch/public/favicon.ico | Bin 0 -> 3870 bytes
.../js/packages/fair-launch/public/index.html | 43 +
.../packages/fair-launch/public/logo192.png | Bin 0 -> 5347 bytes
.../packages/fair-launch/public/logo512.png | Bin 0 -> 9664 bytes
.../packages/fair-launch/public/manifest.json | 25 +
.../js/packages/fair-launch/public/robots.txt | 3 +
.../js/packages/fair-launch/src/App.test.tsx | 9 +
.../store/js/packages/fair-launch/src/App.tsx | 76 +
.../js/packages/fair-launch/src/Home.tsx | 1204 +
.../packages/fair-launch/src/candy-machine.ts | 337 +
.../js/packages/fair-launch/src/confetti.tsx | 74 +
.../packages/fair-launch/src/connection.tsx | 536 +
.../js/packages/fair-launch/src/countdown.tsx | 136 +
.../packages/fair-launch/src/fair-launch.ts | 634 +
.../js/packages/fair-launch/src/index.tsx | 17 +
.../js/packages/fair-launch/src/logo.svg | 1 +
.../fair-launch/src/react-app-env.d.ts | 1 +
.../fair-launch/src/reportWebVitals.ts | 15 +
.../js/packages/fair-launch/src/setupTests.ts | 5 +
.../js/packages/fair-launch/src/utils.ts | 130 +
.../js/packages/fair-launch/tsconfig.json | 26 +
.../store/js/packages/web/.env.production | 0
.../store/js/packages/web/.gitignore | 3 +
.../store/js/packages/web/.prettierignore | 2 +
.../store/js/packages/web/next-env.d.ts | 3 +
.../store/js/packages/web/next.config.js | 46 +
.../store/js/packages/web/package.json | 97 +
.../store/js/packages/web/public/.nojekyll | 0
.../js/packages/web/public/favicon-16x16.png | Bin 0 -> 1742 bytes
.../js/packages/web/public/favicon-32x32.png | Bin 0 -> 1856 bytes
.../js/packages/web/public/favicon-96x96.png | Bin 0 -> 6104 bytes
.../web/public/font/Graphik-Black-Web.woff | Bin 0 -> 48518 bytes
.../web/public/font/Graphik-Black-Web.woff2 | Bin 0 -> 36561 bytes
.../public/font/Graphik-BlackItalic-Web.woff | Bin 0 -> 51825 bytes
.../public/font/Graphik-BlackItalic-Web.woff2 | Bin 0 -> 39013 bytes
.../web/public/font/Graphik-Bold-Web.woff | Bin 0 -> 50305 bytes
.../web/public/font/Graphik-Bold-Web.woff2 | Bin 0 -> 37813 bytes
.../public/font/Graphik-BoldItalic-Web.woff | Bin 0 -> 52535 bytes
.../public/font/Graphik-BoldItalic-Web.woff2 | Bin 0 -> 39337 bytes
.../public/font/Graphik-Extralight-Web.woff | Bin 0 -> 48892 bytes
.../public/font/Graphik-Extralight-Web.woff2 | Bin 0 -> 36049 bytes
.../font/Graphik-ExtralightItalic-Web.woff | Bin 0 -> 50257 bytes
.../font/Graphik-ExtralightItalic-Web.woff2 | Bin 0 -> 36861 bytes
.../web/public/font/Graphik-Light-Web.woff | Bin 0 -> 45415 bytes
.../web/public/font/Graphik-Light-Web.woff2 | Bin 0 -> 33621 bytes
.../public/font/Graphik-LightItalic-Web.woff | Bin 0 -> 47787 bytes
.../public/font/Graphik-LightItalic-Web.woff2 | Bin 0 -> 35425 bytes
.../web/public/font/Graphik-Medium-Web.woff | Bin 0 -> 47215 bytes
.../web/public/font/Graphik-Medium-Web.woff2 | Bin 0 -> 35489 bytes
.../public/font/Graphik-MediumItalic-Web.woff | Bin 0 -> 50172 bytes
.../font/Graphik-MediumItalic-Web.woff2 | Bin 0 -> 37789 bytes
.../web/public/font/Graphik-Regular-Web.woff | Bin 0 -> 48540 bytes
.../web/public/font/Graphik-Regular-Web.woff2 | Bin 0 -> 36525 bytes
.../font/Graphik-RegularItalic-Web.woff | Bin 0 -> 51582 bytes
.../font/Graphik-RegularItalic-Web.woff2 | Bin 0 -> 38801 bytes
.../web/public/font/Graphik-Semibold-Web.woff | Bin 0 -> 53525 bytes
.../public/font/Graphik-Semibold-Web.woff2 | Bin 0 -> 40841 bytes
.../font/Graphik-SemiboldItalic-Web.woff | Bin 0 -> 55566 bytes
.../font/Graphik-SemiboldItalic-Web.woff2 | Bin 0 -> 42461 bytes
.../web/public/font/Graphik-Super-Web.woff | Bin 0 -> 56254 bytes
.../web/public/font/Graphik-Super-Web.woff2 | Bin 0 -> 42745 bytes
.../public/font/Graphik-SuperItalic-Web.woff | Bin 0 -> 48452 bytes
.../public/font/Graphik-SuperItalic-Web.woff2 | Bin 0 -> 36005 bytes
.../web/public/font/Graphik-Thin-Web.woff | Bin 0 -> 44005 bytes
.../web/public/font/Graphik-Thin-Web.woff2 | Bin 0 -> 32037 bytes
.../public/font/Graphik-ThinItalic-Web.woff | Bin 0 -> 46175 bytes
.../public/font/Graphik-ThinItalic-Web.woff2 | Bin 0 -> 33465 bytes
.../store/js/packages/web/public/ftxpay.png | Bin 0 -> 45315 bytes
.../js/packages/web/public/img/artist1.jpeg | Bin 0 -> 17967 bytes
.../js/packages/web/public/img/artist2.jpeg | Bin 0 -> 17896 bytes
.../js/packages/web/public/img/artist3.jpeg | Bin 0 -> 21618 bytes
.../js/packages/web/public/img/artist4.jpeg | Bin 0 -> 11364 bytes
.../js/packages/web/public/img/banner1.jpeg | Bin 0 -> 86687 bytes
.../store/js/packages/web/public/logo.ico | Bin 0 -> 5430 bytes
.../store/js/packages/web/public/logo.svg | 55 +
.../js/packages/web/public/manifest.json | 25 +
.../store/js/packages/web/public/robots.txt | 3 +
.../js/packages/web/public/site.webmanifest | 1 +
.../store/js/packages/web/public/sol.svg | 19 +
.../store/js/packages/web/src/App.tsx | 8 +
.../web/src/actions/addTokensToVault.ts | 128 +
.../web/src/actions/cacheAllAuctions.ts | 107 +
.../web/src/actions/cacheAuctionInIndexer.ts | 210 +
.../js/packages/web/src/actions/cancelBid.ts | 146 +
.../web/src/actions/claimUnusedPrizes.ts | 487 +
.../web/src/actions/closePersonalEscrow.ts | 45 +
.../js/packages/web/src/actions/closeVault.ts | 107 +
.../web/src/actions/convertMasterEditions.ts | 267 +
.../web/src/actions/createAuctionManager.ts | 813 +
.../src/actions/createExternalPriceAccount.ts | 72 +
.../actions/createMintAndAccountWithOne.ts | 65 +
.../packages/web/src/actions/createVault.ts | 129 +
.../decommAuctionManagerAndReturnPrizes.ts | 76 +
...precatedCreateReservationListsForTokens.ts | 63 +
.../deprecatedPopulatePrintingTokens.ts | 114 +
.../js/packages/web/src/actions/index.ts | 3 +
.../packages/web/src/actions/makeAuction.ts | 53 +
.../actions/markItemsThatArentMineAsSold.ts | 63 +
.../web/src/actions/mintEditionsIntoWallet.ts | 106 +
.../store/js/packages/web/src/actions/nft.tsx | 382 +
.../js/packages/web/src/actions/saveAdmin.ts | 70 +
.../packages/web/src/actions/sendPlaceBid.ts | 156 +
.../packages/web/src/actions/sendRedeemBid.ts | 1011 +
.../web/src/actions/sendSignMetadata.ts | 29 +
.../actions/setVaultAndAuctionAuthorities.ts | 39 +
.../js/packages/web/src/actions/settle.ts | 295 +
.../setupMintEditionIntoWalletInstructions.ts | 58 +
.../web/src/actions/startAuctionManually.ts | 35 +
.../packages/web/src/actions/unwindVault.ts | 141 +
.../web/src/components/AmountLabel/index.less | 6 +
.../web/src/components/AmountLabel/index.tsx | 58 +
.../web/src/components/AppBar/index.less | 69 +
.../web/src/components/AppBar/index.tsx | 135 +
.../web/src/components/AppBar/searchBox.less | 7 +
.../web/src/components/AppBar/searchBox.tsx | 13 +
.../web/src/components/ArtCard/index.less | 95 +
.../web/src/components/ArtCard/index.tsx | 122 +
.../web/src/components/ArtContent/index.tsx | 306 +
.../web/src/components/ArtMinting/index.tsx | 248 +
.../web/src/components/ArtistCard/index.less | 39 +
.../web/src/components/ArtistCard/index.tsx | 25 +
.../hooks/useActionButtonContent.ts | 29 +
.../AuctionCard/hooks/useInstantSaleState.ts | 30 +
.../web/src/components/AuctionCard/index.less | 60 +
.../web/src/components/AuctionCard/index.tsx | 910 +
.../components/AuctionCard/utils/endSale.ts | 62 +
.../src/components/AuctionNumbers/index.tsx | 163 +
.../hooks/useAuctionStatus.ts | 77 +
.../components/AuctionRenderCard/index.less | 140 +
.../components/AuctionRenderCard/index.tsx | 78 +
.../web/src/components/ClickToCopy/index.tsx | 75 +
.../web/src/components/Confetti/index.tsx | 74 +
.../src/components/DateTimePicker/index.tsx | 55 +
.../web/src/components/Footer/index.less | 3 +
.../web/src/components/Footer/index.tsx | 23 +
.../web/src/components/Layout/index.less | 17 +
.../web/src/components/Layout/index.tsx | 36 +
.../web/src/components/Loader/index.less | 84 +
.../web/src/components/Loader/index.tsx | 34 +
.../web/src/components/MeshViewer/index.tsx | 30 +
.../web/src/components/MetaAvatar/index.tsx | 59 +
.../web/src/components/MyLoader/index.tsx | 36 +
.../src/components/Notifications/index.less | 7 +
.../src/components/Notifications/index.tsx | 558 +
.../src/components/PreSaleBanner/index.less | 47 +
.../src/components/PreSaleBanner/index.tsx | 63 +
.../web/src/components/Settings/index.tsx | 35 +
.../src/components/SetupVariables/index.tsx | 45 +
.../web/src/components/UserSearch/index.tsx | 93 +
.../web/src/components/UserSearch/styles.less | 11 +
.../web/src/components/ViewOn/index.tsx | 38 +
.../js/packages/web/src/config/userNames.json | 32 +
.../js/packages/web/src/constants/index.tsx | 6 +
.../js/packages/web/src/constants/labels.ts | 19 +
.../js/packages/web/src/constants/style.tsx | 5 +
.../packages/web/src/contexts/coingecko.tsx | 57 +
.../js/packages/web/src/contexts/index.tsx | 2 +
.../store/js/packages/web/src/hooks/index.ts | 9 +
.../store/js/packages/web/src/hooks/useArt.ts | 250 +
.../js/packages/web/src/hooks/useAuction.ts | 82 +
.../js/packages/web/src/hooks/useAuctions.ts | 450 +
.../web/src/hooks/useBidsForAuction.ts | 97 +
.../js/packages/web/src/hooks/useCreator.ts | 11 +
.../packages/web/src/hooks/useCreatorArts.ts | 11 +
.../js/packages/web/src/hooks/useCreators.ts | 44 +
.../js/packages/web/src/hooks/useUserArts.ts | 90 +
.../packages/web/src/hooks/useUserBalance.ts | 57 +
.../web/src/models/marketOverrides.ts | 2 +
.../web/src/models/metaplex/endAuction.ts | 82 +
.../js/packages/web/src/models/totals.ts | 12 +
.../store/js/packages/web/src/pages/_app.tsx | 18 +
.../js/packages/web/src/pages/_document.tsx | 76 +
.../store/js/packages/web/src/pages/index.tsx | 11 +
.../store/js/packages/web/src/providers.tsx | 37 +
.../store/js/packages/web/src/routes.tsx | 63 +
.../store/js/packages/web/src/setupTests.ts | 5 +
.../store/js/packages/web/src/styles/app.less | 205 +
.../js/packages/web/src/styles/colors.less | 7 +
.../js/packages/web/src/styles/fonts.less | 301 +
.../js/packages/web/src/styles/index.less | 26 +
.../packages/web/src/types/buffer-layout.d.ts | 4 +
.../store/js/packages/web/src/types/index.ts | 47 +
.../store/js/packages/web/src/utils/assets.ts | 69 +
.../store/js/packages/web/src/utils/ids.ts | 6 +
.../store/js/packages/web/src/utils/layout.ts | 147 +
.../store/js/packages/web/src/utils/utils.ts | 15 +
.../packages/web/src/views/admin/index.less | 3 +
.../js/packages/web/src/views/admin/index.tsx | 383 +
.../web/src/views/analytics/index.tsx | 382 +
.../js/packages/web/src/views/art/index.less | 41 +
.../js/packages/web/src/views/art/index.tsx | 239 +
.../web/src/views/artCreate/index.tsx | 1252 +
.../packages/web/src/views/artist/index.tsx | 62 +
.../packages/web/src/views/artists/index.tsx | 53 +
.../packages/web/src/views/artworks/index.tsx | 114 +
.../web/src/views/auction/billing.less | 9 +
.../web/src/views/auction/billing.tsx | 542 +
.../packages/web/src/views/auction/index.less | 95 +
.../packages/web/src/views/auction/index.tsx | 459 +
.../src/views/auctionCreate/artSelector.tsx | 156 +
.../web/src/views/auctionCreate/index.tsx | 1976 +
.../web/src/views/home/auctionList.tsx | 212 +
.../js/packages/web/src/views/home/index.less | 72 +
.../js/packages/web/src/views/home/index.tsx | 19 +
.../js/packages/web/src/views/home/setup.tsx | 110 +
.../store/js/packages/web/src/views/index.tsx | 9 +
.../js/packages/web/src/views/styles.less | 317 +
.../store/js/packages/web/tsconfig.json | 24 +
.../js/packages/web/types/buffer-layout.d.ts | 4 +
.../store/js/packages/web/types/styles.d.ts | 5 +
.../store/js/tsconfig.json | 17 +
CandyMachine-Storefront/store/js/yarn.lock | 22708 ++++++++++
.../store/rust/Anchor.toml | 15 +
CandyMachine-Storefront/store/rust/Cargo.lock | 4398 ++
CandyMachine-Storefront/store/rust/Cargo.toml | 14 +
.../store/rust/auction/program/Cargo.lock | 3497 ++
.../store/rust/auction/program/Cargo.toml | 29 +
.../store/rust/auction/program/README.md | 24 +
.../store/rust/auction/program/Xargo.toml | 2 +
.../rust/auction/program/src/entrypoint.rs | 23 +
.../store/rust/auction/program/src/errors.rs | 155 +
.../rust/auction/program/src/instruction.rs | 418 +
.../store/rust/auction/program/src/lib.rs | 14 +
.../rust/auction/program/src/processor.rs | 786 +
.../program/src/processor/cancel_bid.rs | 253 +
.../program/src/processor/claim_bid.rs | 214 +
.../program/src/processor/create_auction.rs | 181 +
.../src/processor/create_auction_v2.rs | 99 +
.../program/src/processor/end_auction.rs | 117 +
.../program/src/processor/place_bid.rs | 336 +
.../program/src/processor/set_authority.rs | 47 +
.../program/src/processor/start_auction.rs | 96 +
.../store/rust/auction/program/src/utils.rs | 229 +
.../rust/auction/program/tests/helpers.rs | 378 +
.../store/rust/auction/program/tests/lib.rs | 1131 +
.../store/rust/cbindgen.sh | 15 +
.../store/rust/ci/cargo-build-test.sh | 22 +
CandyMachine-Storefront/store/rust/ci/env.sh | 92 +
.../store/rust/ci/install-build-deps.sh | 15 +
.../store/rust/ci/install-program-deps.sh | 14 +
.../store/rust/ci/rust-version.sh | 65 +
.../store/rust/ci/solana-version.sh | 34 +
.../store/rust/coverage.sh | 94 +
.../store/rust/fair-launch/Cargo.toml | 23 +
.../store/rust/fair-launch/Xargo.toml | 2 +
.../store/rust/fair-launch/src/lib.rs | 2244 +
.../store/rust/fair-launch/src/utils.rs | 496 +
.../store/rust/metaplex/program/Cargo.toml | 28 +
.../store/rust/metaplex/program/README.md | 30 +
.../store/rust/metaplex/program/Xargo.toml | 2 +
.../metaplex/program/src/deprecated_state.rs | 654 +
.../rust/metaplex/program/src/entrypoint.rs | 25 +
.../store/rust/metaplex/program/src/error.rs | 491 +
.../rust/metaplex/program/src/instruction.rs | 1536 +
.../store/rust/metaplex/program/src/lib.rs | 13 +
.../rust/metaplex/program/src/processor.rs | 165 +
.../program/src/processor/claim_bid.rs | 181 +
.../processor/decommission_auction_manager.rs | 130 +
.../deprecated_init_auction_manager_v1.rs | 133 +
...populate_participation_printing_account.rs | 278 +
.../deprecated_validate_participation.rs | 178 +
...precated_validate_safety_deposit_box_v1.rs | 239 +
.../src/processor/empty_payment_account.rs | 461 +
.../program/src/processor/end_auction.rs | 120 +
.../src/processor/init_auction_manager_v2.rs | 198 +
.../program/src/processor/redeem_bid.rs | 284 +
.../redeem_full_rights_transfer_bid.rs | 169 +
.../src/processor/redeem_participation_bid.rs | 447 +
.../src/processor/redeem_printing_v2_bid.rs | 352 +
...used_winning_config_items_as_auctioneer.rs | 32 +
.../src/processor/set_auction_cache.rs | 147 +
.../program/src/processor/set_store.rs | 90 +
.../program/src/processor/set_store_index.rs | 217 +
.../src/processor/set_whitelisted_creator.rs | 84 +
.../program/src/processor/start_auction.rs | 97 +
.../validate_safety_deposit_box_v2.rs | 535 +
.../src/processor/withdraw_master_edition.rs | 183 +
.../store/rust/metaplex/program/src/state.rs | 1575 +
.../store/rust/metaplex/program/src/utils.rs | 960 +
.../store/rust/metaplex/test/Cargo.toml | 28 +
.../store/rust/metaplex/test/src/main.rs | 92 +
.../store/rust/metaplex/test/src/show.rs | 94 +
.../store/rust/migrations/deploy.js | 13 +
.../store/rust/nft-candy-machine/Cargo.toml | 21 +
.../store/rust/nft-candy-machine/Xargo.toml | 2 +
.../store/rust/nft-candy-machine/src/lib.rs | 627 +
.../store/rust/nft-candy-machine/src/utils.rs | 71 +
.../store/rust/package.json | 26 +
.../store/rust/patch.crates-io.sh | 61 +
.../store/rust/test/fair-launch-types.ts | 23 +
.../store/rust/test/idlToTs.js | 95 +
.../rust/test/nft-candy-machine-types.ts | 12 +
.../store/rust/test/nft-candy-machine.ts | 923 +
.../rust/token-metadata/program/Cargo.toml | 30 +
.../rust/token-metadata/program/README.md | 128 +
.../rust/token-metadata/program/Xargo.toml | 2 +
.../program/src/deprecated_instruction.rs | 250 +
.../program/src/deprecated_processor.rs | 588 +
.../token-metadata/program/src/entrypoint.rs | 25 +
.../rust/token-metadata/program/src/error.rs | 327 +
.../token-metadata/program/src/instruction.rs | 520 +
.../rust/token-metadata/program/src/lib.rs | 14 +
.../token-metadata/program/src/processor.rs | 610 +
.../rust/token-metadata/program/src/state.rs | 611 +
.../rust/token-metadata/program/src/utils.rs | 1030 +
.../program/tests/create_master_edition.rs | 228 +
.../program/tests/create_metadata_account.rs | 129 +
...w_edition_from_master_edition_via_token.rs | 192 +
...ion_from_master_edition_via_vault_proxy.rs | 408 +
.../program/tests/update_metadata_account.rs | 101 +
.../update_primary_sale_happened_via_token.rs | 116 +
.../program/tests/utils/assert.rs | 27 +
.../program/tests/utils/edition_marker.rs | 252 +
.../program/tests/utils/external_price.rs | 82 +
.../program/tests/utils/master_edition_v2.rs | 118 +
.../program/tests/utils/metadata.rs | 146 +
.../token-metadata/program/tests/utils/mod.rs | 130 +
.../program/tests/utils/vault.rs | 223 +
.../store/rust/token-metadata/test/Cargo.toml | 21 +
.../rust/token-metadata/test/src/main.rs | 900 +
.../store/rust/token-vault/program/Cargo.toml | 24 +
.../store/rust/token-vault/program/README.md | 30 +
.../store/rust/token-vault/program/Xargo.toml | 2 +
.../token-vault/program/src/entrypoint.rs | 25 +
.../rust/token-vault/program/src/error.rs | 253 +
.../token-vault/program/src/instruction.rs | 464 +
.../store/rust/token-vault/program/src/lib.rs | 12 +
.../rust/token-vault/program/src/processor.rs | 1051 +
.../rust/token-vault/program/src/state.rs | 130 +
.../rust/token-vault/program/src/utils.rs | 276 +
.../store/rust/token-vault/test/Cargo.toml | 21 +
.../store/rust/token-vault/test/src/main.rs | 1334 +
.../store/rust/tsconfig.json | 10 +
.../store/rust/update-solana-dependencies.sh | 42 +
CandyMachine-Storefront/store/rust/yarn.lock | 1874 +
CandyMachine-Storefront/store/yarn.lock | 4 +
LICENSE | 21 +
README.md | 96 +
config/env.js | 106 +
config/getHttpsConfig.js | 66 +
config/jest/babelTransform.js | 29 +
config/jest/cssTransform.js | 14 +
config/jest/fileTransform.js | 40 +
config/modules.js | 134 +
config/paths.js | 75 +
config/pnpTs.js | 35 +
config/webpack.config.js | 769 +
config/webpackDevServer.config.js | 130 +
package-lock.json | 37783 ++++++++++++++++
package.json | 180 +
program/.gitignore | 6 +
program/Anchor.toml | 9 +
program/Cargo.lock | 1285 +
program/Cargo.toml | 4 +
program/Readme.md | 8 +
program/copy-idls.sh | 2 +
program/package.json | 20 +
.../programs/main-program-final/Cargo.toml | 20 +
.../programs/main-program-final/Xargo.toml | 2 +
.../programs/main-program-final/src/lib.rs | 141 +
.../main-program-final/src/lib.sample.rs | 39 +
program/tests/main-program-final.js | 276 +
program/tests/main-program.js | 158 +
public/favicon.ico | Bin 0 -> 3870 bytes
public/icon.jpeg | Bin 0 -> 10896 bytes
public/index.html | 40 +
public/manifest.json | 25 +
public/robots.txt | 3 +
screenshots/9.png | Bin 0 -> 275253 bytes
screenshots/Architecture.png | Bin 0 -> 963909 bytes
screenshots/logo.png | Bin 0 -> 29318 bytes
scripts/build.js | 212 +
scripts/initializeGameAdmin.js | 152 +
scripts/main_program_final.json | 136 +
scripts/start.js | 166 +
scripts/test.js | 53 +
.../characterAnims/characterAnims.js | 64 +
.../animation/characterAnims/wizardAnims.js | 14 +
src/app/game/animation/doorAnims/door.js | 25 +
.../game/animation/doorAnims/doorwoodAnims.js | 12 +
.../game/animation/doorAnims/flamethrow.js | 14 +
.../game/animation/doorAnims/flaskAnims.js | 15 +
src/app/game/animation/doorAnims/keyAnims.js | 19 +
src/app/game/animation/doorAnims/spikes.js | 19 +
.../animation/doorAnims/torchburnAnims.js | 14 +
.../animation/doorAnims/tradecompanims.js | 15 +
src/app/game/animation/doorAnims/wall.js | 34 +
.../animation/doorAnims/walltorchAnims.js | 14 +
.../animation/enemiesAnims/KnightAnims.js | 27 +
.../game/animation/enemiesAnims/angelAnims.js | 14 +
.../game/animation/enemiesAnims/demonAnims.js | 27 +
.../game/animation/enemiesAnims/ghostAnims.js | 16 +
.../game/animation/enemiesAnims/ghoulAnims.js | 15 +
.../animation/enemiesAnims/lizardAnims.js | 27 +
.../animation/enemiesAnims/newKnightAnims.js | 27 +
.../animation/enemiesAnims/plantZombie.js | 27 +
.../animation/enemiesAnims/reaperAnims.js | 15 +
.../game/animation/enemiesAnims/rockAnims.js | 14 +
src/app/game/animation/treaserAnims/chest.js | 44 +
src/app/game/assets/ConsumeSoul.mp3 | Bin 0 -> 57641 bytes
src/app/game/assets/YouDied.mp3 | Bin 0 -> 94545 bytes
src/app/game/assets/angel.json | 187 +
src/app/game/assets/angel.png | Bin 0 -> 14353 bytes
src/app/game/assets/castle.png | Bin 0 -> 25939 bytes
src/app/game/assets/chainlink.png | Bin 0 -> 639 bytes
src/app/game/assets/chainlink1.png | Bin 0 -> 939 bytes
src/app/game/assets/chainlink2.png | Bin 0 -> 276 bytes
src/app/game/assets/chest.json | 209 +
src/app/game/assets/chest.png | Bin 0 -> 362 bytes
src/app/game/assets/coins-in-hand.mp3 | Bin 0 -> 24656 bytes
src/app/game/assets/coins.json | 104 +
src/app/game/assets/coins.png | Bin 0 -> 162 bytes
src/app/game/assets/cups.png | Bin 0 -> 738793 bytes
src/app/game/assets/decor.png | Bin 0 -> 6570 bytes
src/app/game/assets/demon-screech.mp3 | Bin 0 -> 182144 bytes
src/app/game/assets/demon.json | 188 +
src/app/game/assets/demon.png | Bin 0 -> 1032 bytes
src/app/game/assets/door.json | 355 +
src/app/game/assets/door.png | Bin 0 -> 2013 bytes
src/app/game/assets/door_1.json | 61 +
src/app/game/assets/door_1.png | Bin 0 -> 1084 bytes
src/app/game/assets/dungen-01.json | 18313 ++++++++
src/app/game/assets/dungen-02..json | 13773 ++++++
src/app/game/assets/dungen-02.json | 13597 ++++++
src/app/game/assets/dungenTileset.png | Bin 0 -> 35383 bytes
src/app/game/assets/dungeon_theme_2.mp3 | Bin 0 -> 2625888 bytes
src/app/game/assets/dungon.png | Bin 0 -> 4860 bytes
src/app/game/assets/enemyKnight.json | 398 +
src/app/game/assets/enemyKnight.png | Bin 0 -> 514 bytes
src/app/game/assets/female-faint.mp3 | Bin 0 -> 15188 bytes
src/app/game/assets/female-hurt.mp3 | Bin 0 -> 7830 bytes
src/app/game/assets/flamethrow.json | 103 +
src/app/game/assets/flamethrow.png | Bin 0 -> 1071 bytes
src/app/game/assets/flask.json | 61 +
src/app/game/assets/flask.png | Bin 0 -> 281 bytes
src/app/game/assets/fullHealt.png | Bin 0 -> 528 bytes
src/app/game/assets/ghost.json | 187 +
src/app/game/assets/ghost.png | Bin 0 -> 4691 bytes
src/app/game/assets/ghost_sound.mp3 | Bin 0 -> 54569 bytes
src/app/game/assets/ghoul.json | 187 +
src/app/game/assets/ghoul.png | Bin 0 -> 5063 bytes
src/app/game/assets/ghoul_sound.mp3 | Bin 0 -> 26375 bytes
src/app/game/assets/green.json | 818 +
src/app/game/assets/green.png | Bin 0 -> 3108 bytes
src/app/game/assets/heart_empty.png | Bin 0 -> 204 bytes
src/app/game/assets/heart_full.png | Bin 0 -> 214 bytes
src/app/game/assets/hero.json | 818 +
src/app/game/assets/hero.png | Bin 0 -> 2807 bytes
src/app/game/assets/jail_cell_door.mp3 | Bin 0 -> 23040 bytes
src/app/game/assets/key.json | 103 +
src/app/game/assets/key.png | Bin 0 -> 353 bytes
src/app/game/assets/knifesound.mp3 | Bin 0 -> 13440 bytes
src/app/game/assets/lizard.json | 209 +
src/app/game/assets/lizard.png | Bin 0 -> 398 bytes
src/app/game/assets/newKnight.json | 271 +
src/app/game/assets/newKnight.png | Bin 0 -> 690 bytes
src/app/game/assets/newdungeon.json | 53 +
src/app/game/assets/pillar.png | Bin 0 -> 11616 bytes
src/app/game/assets/plantZombie.json | 188 +
src/app/game/assets/plantZombie.png | Bin 0 -> 800 bytes
src/app/game/assets/reaper.json | 187 +
src/app/game/assets/reaper.png | Bin 0 -> 2520 bytes
src/app/game/assets/rock.json | 145 +
src/app/game/assets/rock.png | Bin 0 -> 3877 bytes
src/app/game/assets/solana.svg | 22 +
src/app/game/assets/spike_trap.mp3 | Bin 0 -> 12677 bytes
src/app/game/assets/spikes.json | 229 +
src/app/game/assets/spikes.png | Bin 0 -> 472 bytes
src/app/game/assets/statue.png | Bin 0 -> 1005 bytes
src/app/game/assets/torch.json | 145 +
src/app/game/assets/torch.png | Bin 0 -> 639 bytes
src/app/game/assets/torch_burn.json | 103 +
src/app/game/assets/torch_burn.png | Bin 0 -> 528 bytes
src/app/game/assets/tradecomp.json | 61 +
src/app/game/assets/tradecomp.png | Bin 0 -> 1954 bytes
src/app/game/assets/tropical.png | Bin 0 -> 336363 bytes
src/app/game/assets/ui_heart_empty.png | Bin 0 -> 204 bytes
src/app/game/assets/ui_heart_full.png | Bin 0 -> 214 bytes
src/app/game/assets/wall.json | 103 +
src/app/game/assets/wall.png | Bin 0 -> 448 bytes
src/app/game/assets/walldecor.png | Bin 0 -> 8588 bytes
src/app/game/assets/weapon_knife.png | Bin 0 -> 142 bytes
src/app/game/assets/wizard.json | 103 +
src/app/game/assets/wizard.png | Bin 0 -> 766 bytes
src/app/game/coins.js | 93 +
src/app/game/enemies/Knight.js | 90 +
src/app/game/enemies/angel.js | 90 +
src/app/game/enemies/chainlink.js | 90 +
src/app/game/enemies/demon.js | 105 +
src/app/game/enemies/ghost.js | 90 +
src/app/game/enemies/ghoul.js | 90 +
src/app/game/enemies/lizard.js | 90 +
src/app/game/enemies/newKnight.js | 90 +
src/app/game/enemies/plantZombie.js | 90 +
src/app/game/enemies/reaper.js | 90 +
src/app/game/enemies/rock.js | 90 +
src/app/game/events/eventsCenter.js | 5 +
src/app/game/game.js | 1605 +
src/app/game/heart.js | 63 +
src/app/game/hero/faune.js | 7 +
src/app/game/hero/wizard.js | 27 +
src/app/game/treasure/doorr.js | 27 +
src/app/game/treasure/doorwood.js | 27 +
src/app/game/treasure/flamethrows.js | 27 +
src/app/game/treasure/flask.js | 23 +
src/app/game/treasure/key.js | 23 +
src/app/game/treasure/spikess.js | 27 +
src/app/game/treasure/torchburn.js | 23 +
src/app/game/treasure/tradecomp.js | 23 +
src/app/game/treasure/treasure.js | 27 +
src/app/game/treasure/walls.js | 27 +
src/app/game/treasure/walltorch.js | 23 +
src/app/game/utils/debug.js | 10 +
src/app/index.tsx | 12 +
src/app/pages/cabinet/Cabinet.tsx | 138 +
src/app/pages/cabinet/collectibles.ts | 51 +
src/app/pages/cabinet/index.css | 46 +
src/app/pages/game/index.css | 6 +
src/app/pages/game/index.tsx | 48 +
src/app/pages/home/index.css | 44 +
src/app/pages/home/index.tsx | 77 +
src/app/pages/home/notifyer.ts | 62 +
src/app/pages/home/swap.tsx | 20 +
src/app/pages/home/topbar.tsx | 171 +
src/app/pages/middleware.tsx | 11 +
src/app/routes.tsx | 19 +
src/app/wallet.tsx | 27 +
src/app/web3/account.json | 1 +
src/app/web3/idls/gamedata.json | 65 +
src/app/web3/idls/main_program_final.json | 136 +
src/app/web3/nft/reward.ts | 326 +
src/app/web3/program.ts | 11 +
src/app/web3/provider/account/index.ts | 76 +
.../web3/provider/account/mint-account.json | 1 +
src/app/web3/provider/account/mint.ts | 14 +
src/app/web3/provider/account/tokenAccount.ts | 115 +
src/app/web3/provider/index.tsx | 123 +
src/app/web3/provider/state/index.ts | 210 +
src/app/web3/provider/types.ts | 12 +
src/app/web3/provider/wallet/index.ts | 20 +
src/app/web3/provider/wallet/phantom.ts | 94 +
src/app/web3/provider/wallet/types.ts | 12 +
src/app/web3/utils.js | 18 +
src/assets/bg.jpeg | Bin 0 -> 235368 bytes
src/assets/castle.png | Bin 0 -> 2911 bytes
src/assets/logo.png | Bin 0 -> 29318 bytes
src/index.css | 9 +
src/index.tsx | 17 +
src/react-app-env.d.ts | 71 +
src/reportWebVitals.ts | 15 +
src/setupTests.ts | 5 +
tsconfig.json | 26 +
783 files changed, 211197 insertions(+)
create mode 100644 .env
create mode 100644 .env.example
create mode 100644 .gitignore
create mode 100644 CandyMachine-Storefront/store/.dockerignore
create mode 100644 CandyMachine-Storefront/store/.editorconfig
create mode 100644 CandyMachine-Storefront/store/.github/ISSUE_TEMPLATE/bug_report.md
create mode 100644 CandyMachine-Storefront/store/.github/ISSUE_TEMPLATE/feature_request.md
create mode 100644 CandyMachine-Storefront/store/.github/dependabot.yml
create mode 100644 CandyMachine-Storefront/store/.github/workflows/cli-pull-request.yml
create mode 100644 CandyMachine-Storefront/store/.github/workflows/lint.yml
create mode 100644 CandyMachine-Storefront/store/.github/workflows/pull-request.yml
create mode 100644 CandyMachine-Storefront/store/.gitignore
create mode 100644 CandyMachine-Storefront/store/.mergify.yml
create mode 100644 CandyMachine-Storefront/store/.prettierrc
create mode 100755 CandyMachine-Storefront/store/.travis/affects.sh
create mode 100644 CandyMachine-Storefront/store/ARCHITECTURE.md
create mode 100644 CandyMachine-Storefront/store/DISCLAIMER.md
create mode 100644 CandyMachine-Storefront/store/Dockerfile
create mode 100644 CandyMachine-Storefront/store/LICENSE
create mode 100644 CandyMachine-Storefront/store/README.md
create mode 100644 CandyMachine-Storefront/store/docs/create-store.md
create mode 100644 CandyMachine-Storefront/store/docs/deploy.md
create mode 100644 CandyMachine-Storefront/store/js/.eslintrc.js
create mode 100644 CandyMachine-Storefront/store/js/.tool-versions
create mode 100644 CandyMachine-Storefront/store/js/README.md
create mode 100644 CandyMachine-Storefront/store/js/assets/wallets/ledger.svg
create mode 100644 CandyMachine-Storefront/store/js/assets/wallets/mathwallet.svg
create mode 100644 CandyMachine-Storefront/store/js/assets/wallets/metamask.svg
create mode 100644 CandyMachine-Storefront/store/js/assets/wallets/solflare.svg
create mode 100644 CandyMachine-Storefront/store/js/assets/wallets/sollet.svg
create mode 100644 CandyMachine-Storefront/store/js/assets/wallets/solong.png
create mode 100644 CandyMachine-Storefront/store/js/assets/wallets/torus.svg
create mode 100644 CandyMachine-Storefront/store/js/assets/wallets/wormhole.svg
create mode 100644 CandyMachine-Storefront/store/js/deploy-web.bat
create mode 100755 CandyMachine-Storefront/store/js/deploy-web.sh
create mode 100644 CandyMachine-Storefront/store/js/lerna.json
create mode 100644 CandyMachine-Storefront/store/js/package.json
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/.nvmrc
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/README.md
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-assets/0.json
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-assets/0.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-assets/1.json
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-assets/1.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-assets/2.json
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-assets/2.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-assets/3.json
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-assets/3.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-assets/4.json
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-assets/4.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-assets/5.json
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-assets/5.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-assets/6.json
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-assets/6.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-assets/7.json
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-assets/7.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-assets/8.json
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-assets/8.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-assets/9.json
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-assets/9.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits-configuration.json
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/background/blue.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/background/brown.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/background/flesh.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/background/green.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/background/light-blue.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/background/light-green.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/background/light-pink.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/background/light-purple.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/background/light-yellow.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/background/orange.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/background/pink.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/background/purple.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/background/red.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/background/yellow.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/eyes/egg-eyes.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/eyes/heart-eyes.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/eyes/square-eyes.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/eyes/star-eyes.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/face/cyan-face.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/face/dark-green-face.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/face/flesh-face.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/face/gold-face.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/face/grapefruit-face.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/face/green-face.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/face/pink-face.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/face/purple-face.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/face/sun-face.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/face/teal-face.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/mouth/block-mouth.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/mouth/smile-mouth.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/example-traits/mouth/triangle-mouth.png
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/package.json
create mode 100755 CandyMachine-Storefront/store/js/packages/cli/src/candy-machine-cli.ts
create mode 100755 CandyMachine-Storefront/store/js/packages/cli/src/cli-nft.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/commands/createArt.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/commands/generateConfigurations.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/commands/mint-nft.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/commands/mint.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/commands/sign.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/commands/signAll.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/commands/upload.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/__fixtures__/invalidSchema/invalid-address.json
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/__fixtures__/invalidSchema/invalid-shares.json
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/__fixtures__/mismatchedAssets/0.json
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/__tests__/__snapshots__/verifyTokenMetadata.ts.snap
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/__tests__/verifyTokenMetadata.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/index.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/token-metadata.schema.json
create mode 100755 CandyMachine-Storefront/store/js/packages/cli/src/fair-launch-cli.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/helpers/accounts.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/helpers/cache.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/helpers/constants.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/helpers/instructions.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/helpers/metadata.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/helpers/schema.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/helpers/transactions.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/helpers/upload/arweave.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/helpers/upload/aws.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/helpers/upload/ipfs.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/helpers/various.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/tsconfig.json
create mode 100644 CandyMachine-Storefront/store/js/packages/cli/src/types.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/.prettierignore
create mode 100644 CandyMachine-Storefront/store/js/packages/common/package.json
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/actions/account.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/actions/auction.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/actions/index.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/actions/metadata.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/actions/vault.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/components/ActionConfirmation/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/components/ActionConfirmation/style.less
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/components/AppBar/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/components/AppBar/style.less
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/components/BackButton/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/components/ConnectButton/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/components/CurrentUserBadge/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/components/CurrentUserBadge/styles.less
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/components/EtherscanLink/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/components/ExplorerLink/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/components/Icons/info.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/components/Identicon/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/components/Identicon/style.less
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/components/Input/numeric.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/components/MetaplexModal/index.less
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/components/MetaplexModal/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/components/MetaplexOverlay/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/components/Settings/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/components/TokenDisplay/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/components/TokenIcon/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/components/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/constants/index.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/constants/labels.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/constants/math.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/accounts.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/cache.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/deserialize.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/getMultipleAccounts.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/index.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/parsesrs.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/types.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contexts/connection.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contexts/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/getEmptyMetaState.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/index.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/isMetadataPartOfStore.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/loadAccounts.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/meta.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/onChangeAccount.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/processAuctions.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/processMetaData.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/processMetaplexAccounts.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/processVaultData.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/queryExtendedMetadata.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/subscribeAccountsChange.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/types.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/web3.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contexts/store.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contexts/wallet.less
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contexts/wallet.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/contracts/token.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/hooks/index.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/hooks/useAccountByMint.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/hooks/useQuerySearch.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/hooks/useThatState.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/hooks/useTokenName.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/hooks/useUserAccounts.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/models/account.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/models/index.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/claimBid.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/decommissionAuctionManager.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/deprecatedInitAuctionManagerV1.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/deprecatedPopulateParticipationPrintingAccount.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/deprecatedRedeemParticipationBid.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/deprecatedStates.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/deprecatedValidateParticipation.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/deprecatedValidateSafetyDepositBoxV1.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/emptyPaymentAccount.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/index.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/initAuctionManagerV2.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/redeemBid.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/redeemFullRightsTransferBid.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/redeemParticipationBidV3.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/redeemPrintingV2Bid.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/setAuctionCache.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/setStore.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/setStoreIndex.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/setWhitelistedCreator.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/startAuction.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/validateSafetyDepositBoxV2.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/withdrawMasterEdition.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/styles.less
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/types/buffer-layout.d.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/types/jazzicon.d.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/types/u64.d.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/utils/borsh.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/utils/createPipelineExecutor.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/utils/eventEmitter.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/utils/ids.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/utils/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/utils/isValidHttpUrl.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/utils/layout.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/utils/notifications.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/utils/programIds.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/utils/shortvec.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/utils/strings.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/utils/useLocalStorage.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/utils/utils.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/common/src/wallet-adapters/torus/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/common/tsconfig.json
create mode 100644 CandyMachine-Storefront/store/js/packages/fair-launch/package.json
create mode 100644 CandyMachine-Storefront/store/js/packages/fair-launch/public/favicon.ico
create mode 100644 CandyMachine-Storefront/store/js/packages/fair-launch/public/index.html
create mode 100644 CandyMachine-Storefront/store/js/packages/fair-launch/public/logo192.png
create mode 100644 CandyMachine-Storefront/store/js/packages/fair-launch/public/logo512.png
create mode 100644 CandyMachine-Storefront/store/js/packages/fair-launch/public/manifest.json
create mode 100644 CandyMachine-Storefront/store/js/packages/fair-launch/public/robots.txt
create mode 100644 CandyMachine-Storefront/store/js/packages/fair-launch/src/App.test.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/fair-launch/src/App.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/fair-launch/src/Home.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/fair-launch/src/candy-machine.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/fair-launch/src/confetti.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/fair-launch/src/connection.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/fair-launch/src/countdown.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/fair-launch/src/fair-launch.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/fair-launch/src/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/fair-launch/src/logo.svg
create mode 100644 CandyMachine-Storefront/store/js/packages/fair-launch/src/react-app-env.d.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/fair-launch/src/reportWebVitals.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/fair-launch/src/setupTests.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/fair-launch/src/utils.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/fair-launch/tsconfig.json
create mode 100644 CandyMachine-Storefront/store/js/packages/web/.env.production
create mode 100644 CandyMachine-Storefront/store/js/packages/web/.gitignore
create mode 100644 CandyMachine-Storefront/store/js/packages/web/.prettierignore
create mode 100644 CandyMachine-Storefront/store/js/packages/web/next-env.d.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/next.config.js
create mode 100644 CandyMachine-Storefront/store/js/packages/web/package.json
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/.nojekyll
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/favicon-16x16.png
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/favicon-32x32.png
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/favicon-96x96.png
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Black-Web.woff
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Black-Web.woff2
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-BlackItalic-Web.woff
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-BlackItalic-Web.woff2
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Bold-Web.woff
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Bold-Web.woff2
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-BoldItalic-Web.woff
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-BoldItalic-Web.woff2
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Extralight-Web.woff
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Extralight-Web.woff2
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-ExtralightItalic-Web.woff
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-ExtralightItalic-Web.woff2
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Light-Web.woff
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Light-Web.woff2
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-LightItalic-Web.woff
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-LightItalic-Web.woff2
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Medium-Web.woff
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Medium-Web.woff2
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-MediumItalic-Web.woff
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-MediumItalic-Web.woff2
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Regular-Web.woff
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Regular-Web.woff2
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-RegularItalic-Web.woff
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-RegularItalic-Web.woff2
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Semibold-Web.woff
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Semibold-Web.woff2
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-SemiboldItalic-Web.woff
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-SemiboldItalic-Web.woff2
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Super-Web.woff
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Super-Web.woff2
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-SuperItalic-Web.woff
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-SuperItalic-Web.woff2
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Thin-Web.woff
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Thin-Web.woff2
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-ThinItalic-Web.woff
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-ThinItalic-Web.woff2
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/ftxpay.png
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/img/artist1.jpeg
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/img/artist2.jpeg
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/img/artist3.jpeg
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/img/artist4.jpeg
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/img/banner1.jpeg
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/logo.ico
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/logo.svg
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/manifest.json
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/robots.txt
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/site.webmanifest
create mode 100644 CandyMachine-Storefront/store/js/packages/web/public/sol.svg
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/App.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/addTokensToVault.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/cacheAllAuctions.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/cacheAuctionInIndexer.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/cancelBid.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/claimUnusedPrizes.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/closePersonalEscrow.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/closeVault.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/convertMasterEditions.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/createAuctionManager.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/createExternalPriceAccount.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/createMintAndAccountWithOne.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/createVault.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/decommAuctionManagerAndReturnPrizes.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/deprecatedCreateReservationListsForTokens.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/deprecatedPopulatePrintingTokens.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/index.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/makeAuction.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/markItemsThatArentMineAsSold.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/mintEditionsIntoWallet.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/nft.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/saveAdmin.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/sendPlaceBid.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/sendRedeemBid.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/sendSignMetadata.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/setVaultAndAuctionAuthorities.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/settle.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/setupMintEditionIntoWalletInstructions.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/startAuctionManually.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/actions/unwindVault.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/AmountLabel/index.less
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/AmountLabel/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/AppBar/index.less
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/AppBar/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/AppBar/searchBox.less
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/AppBar/searchBox.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/ArtCard/index.less
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/ArtCard/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/ArtContent/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/ArtMinting/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/ArtistCard/index.less
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/ArtistCard/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/AuctionCard/hooks/useActionButtonContent.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/AuctionCard/hooks/useInstantSaleState.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/AuctionCard/index.less
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/AuctionCard/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/AuctionCard/utils/endSale.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/AuctionNumbers/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/AuctionRenderCard/hooks/useAuctionStatus.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/AuctionRenderCard/index.less
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/AuctionRenderCard/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/ClickToCopy/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/Confetti/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/DateTimePicker/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/Footer/index.less
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/Footer/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/Layout/index.less
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/Layout/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/Loader/index.less
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/Loader/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/MeshViewer/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/MetaAvatar/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/MyLoader/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/Notifications/index.less
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/Notifications/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/PreSaleBanner/index.less
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/PreSaleBanner/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/Settings/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/SetupVariables/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/UserSearch/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/UserSearch/styles.less
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/components/ViewOn/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/config/userNames.json
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/constants/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/constants/labels.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/constants/style.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/contexts/coingecko.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/contexts/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/hooks/index.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/hooks/useArt.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/hooks/useAuction.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/hooks/useAuctions.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/hooks/useBidsForAuction.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/hooks/useCreator.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/hooks/useCreatorArts.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/hooks/useCreators.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/hooks/useUserArts.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/hooks/useUserBalance.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/models/marketOverrides.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/models/metaplex/endAuction.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/models/totals.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/pages/_app.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/pages/_document.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/pages/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/providers.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/routes.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/setupTests.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/styles/app.less
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/styles/colors.less
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/styles/fonts.less
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/styles/index.less
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/types/buffer-layout.d.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/types/index.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/utils/assets.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/utils/ids.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/utils/layout.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/utils/utils.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/views/admin/index.less
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/views/admin/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/views/analytics/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/views/art/index.less
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/views/art/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/views/artCreate/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/views/artist/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/views/artists/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/views/artworks/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/views/auction/billing.less
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/views/auction/billing.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/views/auction/index.less
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/views/auction/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/views/auctionCreate/artSelector.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/views/auctionCreate/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/views/home/auctionList.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/views/home/index.less
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/views/home/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/views/home/setup.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/views/index.tsx
create mode 100644 CandyMachine-Storefront/store/js/packages/web/src/views/styles.less
create mode 100644 CandyMachine-Storefront/store/js/packages/web/tsconfig.json
create mode 100644 CandyMachine-Storefront/store/js/packages/web/types/buffer-layout.d.ts
create mode 100644 CandyMachine-Storefront/store/js/packages/web/types/styles.d.ts
create mode 100644 CandyMachine-Storefront/store/js/tsconfig.json
create mode 100644 CandyMachine-Storefront/store/js/yarn.lock
create mode 100644 CandyMachine-Storefront/store/rust/Anchor.toml
create mode 100644 CandyMachine-Storefront/store/rust/Cargo.lock
create mode 100644 CandyMachine-Storefront/store/rust/Cargo.toml
create mode 100755 CandyMachine-Storefront/store/rust/auction/program/Cargo.lock
create mode 100644 CandyMachine-Storefront/store/rust/auction/program/Cargo.toml
create mode 100644 CandyMachine-Storefront/store/rust/auction/program/README.md
create mode 100644 CandyMachine-Storefront/store/rust/auction/program/Xargo.toml
create mode 100644 CandyMachine-Storefront/store/rust/auction/program/src/entrypoint.rs
create mode 100644 CandyMachine-Storefront/store/rust/auction/program/src/errors.rs
create mode 100644 CandyMachine-Storefront/store/rust/auction/program/src/instruction.rs
create mode 100644 CandyMachine-Storefront/store/rust/auction/program/src/lib.rs
create mode 100644 CandyMachine-Storefront/store/rust/auction/program/src/processor.rs
create mode 100644 CandyMachine-Storefront/store/rust/auction/program/src/processor/cancel_bid.rs
create mode 100755 CandyMachine-Storefront/store/rust/auction/program/src/processor/claim_bid.rs
create mode 100644 CandyMachine-Storefront/store/rust/auction/program/src/processor/create_auction.rs
create mode 100644 CandyMachine-Storefront/store/rust/auction/program/src/processor/create_auction_v2.rs
create mode 100644 CandyMachine-Storefront/store/rust/auction/program/src/processor/end_auction.rs
create mode 100644 CandyMachine-Storefront/store/rust/auction/program/src/processor/place_bid.rs
create mode 100644 CandyMachine-Storefront/store/rust/auction/program/src/processor/set_authority.rs
create mode 100644 CandyMachine-Storefront/store/rust/auction/program/src/processor/start_auction.rs
create mode 100644 CandyMachine-Storefront/store/rust/auction/program/src/utils.rs
create mode 100644 CandyMachine-Storefront/store/rust/auction/program/tests/helpers.rs
create mode 100644 CandyMachine-Storefront/store/rust/auction/program/tests/lib.rs
create mode 100755 CandyMachine-Storefront/store/rust/cbindgen.sh
create mode 100755 CandyMachine-Storefront/store/rust/ci/cargo-build-test.sh
create mode 100644 CandyMachine-Storefront/store/rust/ci/env.sh
create mode 100755 CandyMachine-Storefront/store/rust/ci/install-build-deps.sh
create mode 100755 CandyMachine-Storefront/store/rust/ci/install-program-deps.sh
create mode 100644 CandyMachine-Storefront/store/rust/ci/rust-version.sh
create mode 100755 CandyMachine-Storefront/store/rust/ci/solana-version.sh
create mode 100755 CandyMachine-Storefront/store/rust/coverage.sh
create mode 100644 CandyMachine-Storefront/store/rust/fair-launch/Cargo.toml
create mode 100644 CandyMachine-Storefront/store/rust/fair-launch/Xargo.toml
create mode 100644 CandyMachine-Storefront/store/rust/fair-launch/src/lib.rs
create mode 100644 CandyMachine-Storefront/store/rust/fair-launch/src/utils.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/Cargo.toml
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/README.md
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/Xargo.toml
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/deprecated_state.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/entrypoint.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/error.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/instruction.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/lib.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/processor.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/processor/claim_bid.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/processor/decommission_auction_manager.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/processor/deprecated_init_auction_manager_v1.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/processor/deprecated_populate_participation_printing_account.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/processor/deprecated_validate_participation.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/processor/deprecated_validate_safety_deposit_box_v1.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/processor/empty_payment_account.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/processor/end_auction.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/processor/init_auction_manager_v2.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/processor/redeem_bid.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/processor/redeem_full_rights_transfer_bid.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/processor/redeem_participation_bid.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/processor/redeem_printing_v2_bid.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/processor/redeem_unused_winning_config_items_as_auctioneer.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/processor/set_auction_cache.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/processor/set_store.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/processor/set_store_index.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/processor/set_whitelisted_creator.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/processor/start_auction.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/processor/validate_safety_deposit_box_v2.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/processor/withdraw_master_edition.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/state.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/program/src/utils.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/test/Cargo.toml
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/test/src/main.rs
create mode 100644 CandyMachine-Storefront/store/rust/metaplex/test/src/show.rs
create mode 100644 CandyMachine-Storefront/store/rust/migrations/deploy.js
create mode 100644 CandyMachine-Storefront/store/rust/nft-candy-machine/Cargo.toml
create mode 100644 CandyMachine-Storefront/store/rust/nft-candy-machine/Xargo.toml
create mode 100644 CandyMachine-Storefront/store/rust/nft-candy-machine/src/lib.rs
create mode 100644 CandyMachine-Storefront/store/rust/nft-candy-machine/src/utils.rs
create mode 100644 CandyMachine-Storefront/store/rust/package.json
create mode 100755 CandyMachine-Storefront/store/rust/patch.crates-io.sh
create mode 100644 CandyMachine-Storefront/store/rust/test/fair-launch-types.ts
create mode 100644 CandyMachine-Storefront/store/rust/test/idlToTs.js
create mode 100644 CandyMachine-Storefront/store/rust/test/nft-candy-machine-types.ts
create mode 100644 CandyMachine-Storefront/store/rust/test/nft-candy-machine.ts
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/program/Cargo.toml
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/program/README.md
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/program/Xargo.toml
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/program/src/deprecated_instruction.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/program/src/deprecated_processor.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/program/src/entrypoint.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/program/src/error.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/program/src/instruction.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/program/src/lib.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/program/src/processor.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/program/src/state.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/program/src/utils.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/program/tests/create_master_edition.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/program/tests/create_metadata_account.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/program/tests/mint_new_edition_from_master_edition_via_token.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/program/tests/mint_new_edition_from_master_edition_via_vault_proxy.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/program/tests/update_metadata_account.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/program/tests/update_primary_sale_happened_via_token.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/program/tests/utils/assert.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/program/tests/utils/edition_marker.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/program/tests/utils/external_price.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/program/tests/utils/master_edition_v2.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/program/tests/utils/metadata.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/program/tests/utils/mod.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/program/tests/utils/vault.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/test/Cargo.toml
create mode 100644 CandyMachine-Storefront/store/rust/token-metadata/test/src/main.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-vault/program/Cargo.toml
create mode 100644 CandyMachine-Storefront/store/rust/token-vault/program/README.md
create mode 100644 CandyMachine-Storefront/store/rust/token-vault/program/Xargo.toml
create mode 100644 CandyMachine-Storefront/store/rust/token-vault/program/src/entrypoint.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-vault/program/src/error.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-vault/program/src/instruction.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-vault/program/src/lib.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-vault/program/src/processor.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-vault/program/src/state.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-vault/program/src/utils.rs
create mode 100644 CandyMachine-Storefront/store/rust/token-vault/test/Cargo.toml
create mode 100644 CandyMachine-Storefront/store/rust/token-vault/test/src/main.rs
create mode 100644 CandyMachine-Storefront/store/rust/tsconfig.json
create mode 100755 CandyMachine-Storefront/store/rust/update-solana-dependencies.sh
create mode 100644 CandyMachine-Storefront/store/rust/yarn.lock
create mode 100644 CandyMachine-Storefront/store/yarn.lock
create mode 100644 LICENSE
create mode 100644 README.md
create mode 100644 config/env.js
create mode 100644 config/getHttpsConfig.js
create mode 100644 config/jest/babelTransform.js
create mode 100644 config/jest/cssTransform.js
create mode 100644 config/jest/fileTransform.js
create mode 100644 config/modules.js
create mode 100644 config/paths.js
create mode 100644 config/pnpTs.js
create mode 100644 config/webpack.config.js
create mode 100644 config/webpackDevServer.config.js
create mode 100644 package-lock.json
create mode 100644 package.json
create mode 100644 program/.gitignore
create mode 100644 program/Anchor.toml
create mode 100644 program/Cargo.lock
create mode 100644 program/Cargo.toml
create mode 100644 program/Readme.md
create mode 100755 program/copy-idls.sh
create mode 100644 program/package.json
create mode 100644 program/programs/main-program-final/Cargo.toml
create mode 100644 program/programs/main-program-final/Xargo.toml
create mode 100644 program/programs/main-program-final/src/lib.rs
create mode 100644 program/programs/main-program-final/src/lib.sample.rs
create mode 100644 program/tests/main-program-final.js
create mode 100644 program/tests/main-program.js
create mode 100644 public/favicon.ico
create mode 100644 public/icon.jpeg
create mode 100644 public/index.html
create mode 100644 public/manifest.json
create mode 100644 public/robots.txt
create mode 100644 screenshots/9.png
create mode 100644 screenshots/Architecture.png
create mode 100644 screenshots/logo.png
create mode 100644 scripts/build.js
create mode 100644 scripts/initializeGameAdmin.js
create mode 100644 scripts/main_program_final.json
create mode 100644 scripts/start.js
create mode 100644 scripts/test.js
create mode 100644 src/app/game/animation/characterAnims/characterAnims.js
create mode 100644 src/app/game/animation/characterAnims/wizardAnims.js
create mode 100644 src/app/game/animation/doorAnims/door.js
create mode 100644 src/app/game/animation/doorAnims/doorwoodAnims.js
create mode 100644 src/app/game/animation/doorAnims/flamethrow.js
create mode 100644 src/app/game/animation/doorAnims/flaskAnims.js
create mode 100644 src/app/game/animation/doorAnims/keyAnims.js
create mode 100644 src/app/game/animation/doorAnims/spikes.js
create mode 100644 src/app/game/animation/doorAnims/torchburnAnims.js
create mode 100644 src/app/game/animation/doorAnims/tradecompanims.js
create mode 100644 src/app/game/animation/doorAnims/wall.js
create mode 100644 src/app/game/animation/doorAnims/walltorchAnims.js
create mode 100644 src/app/game/animation/enemiesAnims/KnightAnims.js
create mode 100644 src/app/game/animation/enemiesAnims/angelAnims.js
create mode 100644 src/app/game/animation/enemiesAnims/demonAnims.js
create mode 100644 src/app/game/animation/enemiesAnims/ghostAnims.js
create mode 100644 src/app/game/animation/enemiesAnims/ghoulAnims.js
create mode 100644 src/app/game/animation/enemiesAnims/lizardAnims.js
create mode 100644 src/app/game/animation/enemiesAnims/newKnightAnims.js
create mode 100644 src/app/game/animation/enemiesAnims/plantZombie.js
create mode 100644 src/app/game/animation/enemiesAnims/reaperAnims.js
create mode 100644 src/app/game/animation/enemiesAnims/rockAnims.js
create mode 100644 src/app/game/animation/treaserAnims/chest.js
create mode 100644 src/app/game/assets/ConsumeSoul.mp3
create mode 100644 src/app/game/assets/YouDied.mp3
create mode 100644 src/app/game/assets/angel.json
create mode 100644 src/app/game/assets/angel.png
create mode 100644 src/app/game/assets/castle.png
create mode 100644 src/app/game/assets/chainlink.png
create mode 100644 src/app/game/assets/chainlink1.png
create mode 100644 src/app/game/assets/chainlink2.png
create mode 100644 src/app/game/assets/chest.json
create mode 100644 src/app/game/assets/chest.png
create mode 100644 src/app/game/assets/coins-in-hand.mp3
create mode 100644 src/app/game/assets/coins.json
create mode 100644 src/app/game/assets/coins.png
create mode 100644 src/app/game/assets/cups.png
create mode 100644 src/app/game/assets/decor.png
create mode 100644 src/app/game/assets/demon-screech.mp3
create mode 100644 src/app/game/assets/demon.json
create mode 100644 src/app/game/assets/demon.png
create mode 100644 src/app/game/assets/door.json
create mode 100644 src/app/game/assets/door.png
create mode 100644 src/app/game/assets/door_1.json
create mode 100644 src/app/game/assets/door_1.png
create mode 100644 src/app/game/assets/dungen-01.json
create mode 100644 src/app/game/assets/dungen-02..json
create mode 100644 src/app/game/assets/dungen-02.json
create mode 100644 src/app/game/assets/dungenTileset.png
create mode 100644 src/app/game/assets/dungeon_theme_2.mp3
create mode 100644 src/app/game/assets/dungon.png
create mode 100644 src/app/game/assets/enemyKnight.json
create mode 100644 src/app/game/assets/enemyKnight.png
create mode 100644 src/app/game/assets/female-faint.mp3
create mode 100644 src/app/game/assets/female-hurt.mp3
create mode 100644 src/app/game/assets/flamethrow.json
create mode 100644 src/app/game/assets/flamethrow.png
create mode 100644 src/app/game/assets/flask.json
create mode 100644 src/app/game/assets/flask.png
create mode 100644 src/app/game/assets/fullHealt.png
create mode 100644 src/app/game/assets/ghost.json
create mode 100644 src/app/game/assets/ghost.png
create mode 100644 src/app/game/assets/ghost_sound.mp3
create mode 100644 src/app/game/assets/ghoul.json
create mode 100644 src/app/game/assets/ghoul.png
create mode 100644 src/app/game/assets/ghoul_sound.mp3
create mode 100644 src/app/game/assets/green.json
create mode 100644 src/app/game/assets/green.png
create mode 100644 src/app/game/assets/heart_empty.png
create mode 100644 src/app/game/assets/heart_full.png
create mode 100644 src/app/game/assets/hero.json
create mode 100644 src/app/game/assets/hero.png
create mode 100644 src/app/game/assets/jail_cell_door.mp3
create mode 100644 src/app/game/assets/key.json
create mode 100644 src/app/game/assets/key.png
create mode 100644 src/app/game/assets/knifesound.mp3
create mode 100644 src/app/game/assets/lizard.json
create mode 100644 src/app/game/assets/lizard.png
create mode 100644 src/app/game/assets/newKnight.json
create mode 100644 src/app/game/assets/newKnight.png
create mode 100644 src/app/game/assets/newdungeon.json
create mode 100644 src/app/game/assets/pillar.png
create mode 100644 src/app/game/assets/plantZombie.json
create mode 100644 src/app/game/assets/plantZombie.png
create mode 100644 src/app/game/assets/reaper.json
create mode 100644 src/app/game/assets/reaper.png
create mode 100644 src/app/game/assets/rock.json
create mode 100644 src/app/game/assets/rock.png
create mode 100644 src/app/game/assets/solana.svg
create mode 100644 src/app/game/assets/spike_trap.mp3
create mode 100644 src/app/game/assets/spikes.json
create mode 100644 src/app/game/assets/spikes.png
create mode 100644 src/app/game/assets/statue.png
create mode 100644 src/app/game/assets/torch.json
create mode 100644 src/app/game/assets/torch.png
create mode 100644 src/app/game/assets/torch_burn.json
create mode 100644 src/app/game/assets/torch_burn.png
create mode 100644 src/app/game/assets/tradecomp.json
create mode 100644 src/app/game/assets/tradecomp.png
create mode 100644 src/app/game/assets/tropical.png
create mode 100644 src/app/game/assets/ui_heart_empty.png
create mode 100644 src/app/game/assets/ui_heart_full.png
create mode 100644 src/app/game/assets/wall.json
create mode 100644 src/app/game/assets/wall.png
create mode 100644 src/app/game/assets/walldecor.png
create mode 100644 src/app/game/assets/weapon_knife.png
create mode 100644 src/app/game/assets/wizard.json
create mode 100644 src/app/game/assets/wizard.png
create mode 100644 src/app/game/coins.js
create mode 100644 src/app/game/enemies/Knight.js
create mode 100644 src/app/game/enemies/angel.js
create mode 100644 src/app/game/enemies/chainlink.js
create mode 100644 src/app/game/enemies/demon.js
create mode 100644 src/app/game/enemies/ghost.js
create mode 100644 src/app/game/enemies/ghoul.js
create mode 100644 src/app/game/enemies/lizard.js
create mode 100644 src/app/game/enemies/newKnight.js
create mode 100644 src/app/game/enemies/plantZombie.js
create mode 100644 src/app/game/enemies/reaper.js
create mode 100644 src/app/game/enemies/rock.js
create mode 100644 src/app/game/events/eventsCenter.js
create mode 100755 src/app/game/game.js
create mode 100644 src/app/game/heart.js
create mode 100644 src/app/game/hero/faune.js
create mode 100644 src/app/game/hero/wizard.js
create mode 100644 src/app/game/treasure/doorr.js
create mode 100644 src/app/game/treasure/doorwood.js
create mode 100644 src/app/game/treasure/flamethrows.js
create mode 100644 src/app/game/treasure/flask.js
create mode 100644 src/app/game/treasure/key.js
create mode 100644 src/app/game/treasure/spikess.js
create mode 100644 src/app/game/treasure/torchburn.js
create mode 100644 src/app/game/treasure/tradecomp.js
create mode 100644 src/app/game/treasure/treasure.js
create mode 100644 src/app/game/treasure/walls.js
create mode 100644 src/app/game/treasure/walltorch.js
create mode 100644 src/app/game/utils/debug.js
create mode 100644 src/app/index.tsx
create mode 100644 src/app/pages/cabinet/Cabinet.tsx
create mode 100644 src/app/pages/cabinet/collectibles.ts
create mode 100644 src/app/pages/cabinet/index.css
create mode 100644 src/app/pages/game/index.css
create mode 100644 src/app/pages/game/index.tsx
create mode 100644 src/app/pages/home/index.css
create mode 100644 src/app/pages/home/index.tsx
create mode 100644 src/app/pages/home/notifyer.ts
create mode 100644 src/app/pages/home/swap.tsx
create mode 100644 src/app/pages/home/topbar.tsx
create mode 100644 src/app/pages/middleware.tsx
create mode 100644 src/app/routes.tsx
create mode 100644 src/app/wallet.tsx
create mode 100644 src/app/web3/account.json
create mode 100644 src/app/web3/idls/gamedata.json
create mode 100644 src/app/web3/idls/main_program_final.json
create mode 100644 src/app/web3/nft/reward.ts
create mode 100644 src/app/web3/program.ts
create mode 100644 src/app/web3/provider/account/index.ts
create mode 100644 src/app/web3/provider/account/mint-account.json
create mode 100644 src/app/web3/provider/account/mint.ts
create mode 100644 src/app/web3/provider/account/tokenAccount.ts
create mode 100644 src/app/web3/provider/index.tsx
create mode 100644 src/app/web3/provider/state/index.ts
create mode 100644 src/app/web3/provider/types.ts
create mode 100644 src/app/web3/provider/wallet/index.ts
create mode 100644 src/app/web3/provider/wallet/phantom.ts
create mode 100644 src/app/web3/provider/wallet/types.ts
create mode 100644 src/app/web3/utils.js
create mode 100644 src/assets/bg.jpeg
create mode 100644 src/assets/castle.png
create mode 100644 src/assets/logo.png
create mode 100644 src/index.css
create mode 100644 src/index.tsx
create mode 100644 src/react-app-env.d.ts
create mode 100644 src/reportWebVitals.ts
create mode 100644 src/setupTests.ts
create mode 100644 tsconfig.json
diff --git a/.env b/.env
new file mode 100644
index 0000000..699fcb2
--- /dev/null
+++ b/.env
@@ -0,0 +1,7 @@
+REACT_APP_CANDY_MACHINE_CONFIG=BFL1G8rruiENgWjip5Qfd2G8FU8ydR5evCEnte1qMCmZ
+REACT_APP_CANDY_MACHINE_ID=9wA7BUsCNoediqTausYBtuMzzBuiVnPWZi4G1ELZnqR2
+REACT_APP_TREASURY_ADDRESS=7gQzoagJncRKo3AXo39FtDoAupsVLnr1izCNiQ7sPszU
+REACT_APP_CANDY_START_DATE=1633219200
+
+REACT_APP_SOLANA_NETWORK=devnet
+REACT_APP_SOLANA_RPC_HOST=https://explorer-api.devnet.solana.com
diff --git a/.env.example b/.env.example
new file mode 100644
index 0000000..9e3dd1c
--- /dev/null
+++ b/.env.example
@@ -0,0 +1,7 @@
+REACT_APP_CANDY_MACHINE_CONFIG={{candy machine config}}
+REACT_APP_CANDY_MACHINE_ID={{candy machine id}}
+REACT_APP_TREASURY_ADDRESS={{candy machine address}}
+REACT_APP_CANDY_START_DATE={{candy machine start date}}
+
+REACT_APP_SOLANA_NETWORK=devnet
+REACT_APP_SOLANA_RPC_HOST=https://explorer-api.devnet.solana.com
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..4d29575
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,23 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+
+# testing
+/coverage
+
+# production
+/build
+
+# misc
+.DS_Store
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
diff --git a/CandyMachine-Storefront/store/.dockerignore b/CandyMachine-Storefront/store/.dockerignore
new file mode 100644
index 0000000..2f285cb
--- /dev/null
+++ b/CandyMachine-Storefront/store/.dockerignore
@@ -0,0 +1,5 @@
+node_modules
+.git
+.editorconfig
+.gitignore
+.next
diff --git a/CandyMachine-Storefront/store/.editorconfig b/CandyMachine-Storefront/store/.editorconfig
new file mode 100644
index 0000000..6a906e5
--- /dev/null
+++ b/CandyMachine-Storefront/store/.editorconfig
@@ -0,0 +1,12 @@
+root = true
+
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 2
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.rs]
+indent_size = 4
diff --git a/CandyMachine-Storefront/store/.github/ISSUE_TEMPLATE/bug_report.md b/CandyMachine-Storefront/store/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 0000000..dd84ea7
--- /dev/null
+++ b/CandyMachine-Storefront/store/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,38 @@
+---
+name: Bug report
+about: Create a report to help us improve
+title: ''
+labels: ''
+assignees: ''
+
+---
+
+**Describe the bug**
+A clear and concise description of what the bug is.
+
+**To Reproduce**
+Steps to reproduce the behavior:
+1. Go to '...'
+2. Click on '....'
+3. Scroll down to '....'
+4. See error
+
+**Expected behavior**
+A clear and concise description of what you expected to happen.
+
+**Screenshots**
+If applicable, add screenshots to help explain your problem.
+
+**Desktop (please complete the following information):**
+ - OS: [e.g. iOS]
+ - Browser [e.g. chrome, safari]
+ - Version [e.g. 22]
+
+**Smartphone (please complete the following information):**
+ - Device: [e.g. iPhone6]
+ - OS: [e.g. iOS8.1]
+ - Browser [e.g. stock browser, safari]
+ - Version [e.g. 22]
+
+**Additional context**
+Add any other context about the problem here.
diff --git a/CandyMachine-Storefront/store/.github/ISSUE_TEMPLATE/feature_request.md b/CandyMachine-Storefront/store/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 0000000..bbcbbe7
--- /dev/null
+++ b/CandyMachine-Storefront/store/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,20 @@
+---
+name: Feature request
+about: Suggest an idea for this project
+title: ''
+labels: ''
+assignees: ''
+
+---
+
+**Is your feature request related to a problem? Please describe.**
+A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
+
+**Describe the solution you'd like**
+A clear and concise description of what you want to happen.
+
+**Describe alternatives you've considered**
+A clear and concise description of any alternative solutions or features you've considered.
+
+**Additional context**
+Add any other context or screenshots about the feature request here.
diff --git a/CandyMachine-Storefront/store/.github/dependabot.yml b/CandyMachine-Storefront/store/.github/dependabot.yml
new file mode 100644
index 0000000..38d404c
--- /dev/null
+++ b/CandyMachine-Storefront/store/.github/dependabot.yml
@@ -0,0 +1,13 @@
+version: 2
+updates:
+ - package-ecosystem: cargo
+ directory: "/"
+ schedule:
+ interval: daily
+ time: "04:00"
+ timezone: America/Los_Angeles
+ labels:
+ - "automerge"
+ open-pull-requests-limit: 3
+ ignore:
+ - dependency-name: "cbindgen"
diff --git a/CandyMachine-Storefront/store/.github/workflows/cli-pull-request.yml b/CandyMachine-Storefront/store/.github/workflows/cli-pull-request.yml
new file mode 100644
index 0000000..ba03215
--- /dev/null
+++ b/CandyMachine-Storefront/store/.github/workflows/cli-pull-request.yml
@@ -0,0 +1,34 @@
+name: Pull Request (CLI)
+
+on:
+ pull_request:
+ paths:
+ - js/packages/cli/*
+ push:
+ branches:
+ - master
+ paths:
+ - js/packages/cli/*
+
+jobs:
+ unit_tests:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v1
+
+ - uses: actions/setup-node@v2
+ with:
+ node-version: "14"
+
+ - uses: actions/cache@v2
+ with:
+ path: "**/node_modules"
+ key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}
+
+ - name: Install modules
+ run: yarn install
+ working-directory: js/packages/cli
+
+ - name: Run Tests
+ run: yarn test
+ working-directory: js/packages/cli
diff --git a/CandyMachine-Storefront/store/.github/workflows/lint.yml b/CandyMachine-Storefront/store/.github/workflows/lint.yml
new file mode 100644
index 0000000..bc0299a
--- /dev/null
+++ b/CandyMachine-Storefront/store/.github/workflows/lint.yml
@@ -0,0 +1,25 @@
+name: Lint
+
+on:
+ pull_request:
+ push:
+ branches: [master]
+
+jobs:
+ eslint:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v1
+
+ - uses: actions/cache@v2
+ with:
+ path: '**/node_modules'
+ key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}
+
+ - name: Install modules
+ run: yarn install
+ working-directory: js
+
+ - name: Run ESLint
+ run: yarn lint:eslint
+ working-directory: js
diff --git a/CandyMachine-Storefront/store/.github/workflows/pull-request.yml b/CandyMachine-Storefront/store/.github/workflows/pull-request.yml
new file mode 100644
index 0000000..c884585
--- /dev/null
+++ b/CandyMachine-Storefront/store/.github/workflows/pull-request.yml
@@ -0,0 +1,134 @@
+name: Pull Request
+
+defaults:
+ run:
+ working-directory: ./rust
+
+on:
+ pull_request:
+ push:
+ branches: [master]
+
+jobs:
+ all_github_action_checks:
+ runs-on: ubuntu-latest
+ needs:
+ - rustfmt
+ - clippy
+ - cargo-build-test
+ steps:
+ - run: echo "Done"
+ working-directory: ./
+
+ rustfmt:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: Set env vars
+ run: |
+ source ci/rust-version.sh
+ echo "RUST_STABLE=$rust_stable" >> $GITHUB_ENV
+
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: ${{ env.RUST_STABLE }}
+ override: true
+ profile: minimal
+ components: rustfmt
+
+ - name: Run fmt
+ uses: actions-rs/cargo@v1
+ with:
+ command: fmt
+ args: --manifest-path ./rust/Cargo.toml --all -- --check
+
+ clippy:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: Set env vars
+ run: |
+ source ci/rust-version.sh
+ echo "RUST_NIGHTLY=$rust_nightly" >> $GITHUB_ENV
+
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: ${{ env.RUST_NIGHTLY }}
+ override: true
+ profile: minimal
+ components: clippy
+
+ - uses: actions/cache@v2
+ with:
+ path: |
+ ~/.cargo/registry
+ ~/.cargo/git
+ target
+ key: cargo-clippy-${{ hashFiles('**/Cargo.lock') }}
+ restore-keys: |
+ cargo-clippy-
+
+ - name: Install dependencies
+ run: ./ci/install-build-deps.sh
+
+ - name: Run clippy
+ uses: actions-rs/cargo@v1
+ with:
+ command: clippy
+ args: --manifest-path ./rust/Cargo.toml -Zunstable-options --workspace --all-targets -- --deny=warnings
+
+ cargo-build-test:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: Set env vars
+ run: |
+ source ci/rust-version.sh
+ echo "RUST_STABLE=$rust_stable" >> $GITHUB_ENV
+ source ci/solana-version.sh
+ echo "SOLANA_VERSION=$solana_version" >> $GITHUB_ENV
+
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: ${{ env.RUST_STABLE }}
+ override: true
+ profile: minimal
+
+ - uses: actions/cache@v2
+ with:
+ path: |
+ ~/.cargo/registry
+ ~/.cargo/git
+ # target # Removed due to build dependency caching conflicts
+ key: cargo-build-${{ hashFiles('**/Cargo.lock') }}-${{ env.RUST_STABLE}}
+
+ - uses: actions/cache@v2
+ with:
+ path: |
+ ~/.cargo/bin/rustfilt
+ key: cargo-bpf-bins-${{ runner.os }}
+
+ - uses: actions/cache@v2
+ with:
+ path: |
+ ~/.cache
+ key: solana-${{ env.SOLANA_VERSION }}
+
+ - name: Install dependencies
+ run: |
+ ./ci/install-build-deps.sh
+ ./ci/install-program-deps.sh
+ echo "$HOME/.local/share/solana/install/active_release/bin" >> $GITHUB_PATH
+
+ - name: Build and test
+ run: ./ci/cargo-build-test.sh
+
+ - name: Upload programs
+ uses: actions/upload-artifact@v2
+ with:
+ name: programs
+ path: "rust/target/deploy/*.so"
+ if-no-files-found: error
diff --git a/CandyMachine-Storefront/store/.gitignore b/CandyMachine-Storefront/store/.gitignore
new file mode 100644
index 0000000..5a5d5bf
--- /dev/null
+++ b/CandyMachine-Storefront/store/.gitignore
@@ -0,0 +1,35 @@
+node_modules/
+.anchor
+**/*.rs.bk
+build/
+rust/test/nft-candy-machine.js
+dist/
+lib/
+deploy/
+docs/lockup-ui/
+.DS_Store
+*~
+.idea
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+*.css
+*.css.map
+!js/packages/metaplex/src/fonts/fonts.css
+!js/packages/metaplex/src/utils/globals.css
+js/.eslintcache
+target
+.env
+.vscode
+bin
+config.json
+node_modules
+./package-lock.json
+hfuzz_target
+hfuzz_workspace
+**/*.so
+**/.DS_Store
+.cache
+js/packages/web/.env
+traits
+traits-configuration.json
diff --git a/CandyMachine-Storefront/store/.mergify.yml b/CandyMachine-Storefront/store/.mergify.yml
new file mode 100644
index 0000000..7b845b8
--- /dev/null
+++ b/CandyMachine-Storefront/store/.mergify.yml
@@ -0,0 +1,39 @@
+# Validate your changes with:
+#
+# $ curl -F 'data=@.mergify.yml' https://gh.mergify.io/validate/
+#
+# https://doc.mergify.io/
+pull_request_rules:
+ - name: automatic merge (squash) on CI success
+ conditions:
+ - check-success=all_github_action_checks
+ - label=automerge
+ - author≠@dont-squash-my-commits
+ actions:
+ merge:
+ method: squash
+ # Join the dont-squash-my-commits group if you won't like your commits squashed
+ - name: automatic merge (rebase) on CI success
+ conditions:
+ - check-success=all_github_action_checks
+ - label=automerge
+ - author=@dont-squash-my-commits
+ actions:
+ merge:
+ method: rebase
+ - name: remove automerge label on CI failure
+ conditions:
+ - label=automerge
+ - "#status-failure!=0"
+ actions:
+ label:
+ remove:
+ - automerge
+ comment:
+ message: automerge label removed due to a CI failure
+ - name: remove outdated reviews
+ conditions:
+ - base=master
+ actions:
+ dismiss_reviews:
+ changes_requested: true
diff --git a/CandyMachine-Storefront/store/.prettierrc b/CandyMachine-Storefront/store/.prettierrc
new file mode 100644
index 0000000..e69de29
diff --git a/CandyMachine-Storefront/store/.travis/affects.sh b/CandyMachine-Storefront/store/.travis/affects.sh
new file mode 100755
index 0000000..0d6bf38
--- /dev/null
+++ b/CandyMachine-Storefront/store/.travis/affects.sh
@@ -0,0 +1,20 @@
+#!/usr/bin/env bash
+#
+# Check if files in the commit range match one or more prefixes
+#
+
+(
+ set -x
+ git diff --name-only "$TRAVIS_COMMIT_RANGE"
+)
+
+for file in $(git diff --name-only "$TRAVIS_COMMIT_RANGE"); do
+ for prefix in "$@"; do
+ if [[ $file =~ ^"$prefix" ]]; then
+ exit 0
+ fi
+ done
+done
+
+echo "No modifications to $*"
+exit 1
diff --git a/CandyMachine-Storefront/store/ARCHITECTURE.md b/CandyMachine-Storefront/store/ARCHITECTURE.md
new file mode 100644
index 0000000..10020f7
--- /dev/null
+++ b/CandyMachine-Storefront/store/ARCHITECTURE.md
@@ -0,0 +1,983 @@
+# Metaplex Developer Guide
+
+# Architecture
+
+## Overview
+
+Metaplex is actually not a single contract, but a contract ecosystem, consisting of four contracts that interact with one another. Only one of the contracts (Metaplex) actually knows about the other three, while the others represent primitives in the ecosystem and do not interact with each other at all. First, we'll go over what each contract does at a glance, and then we'll cover the full life cycle of a token becoming an NFT and getting auctioned to see the ecosystem in action. Following that will be modules for each contract.
+
+## The Contracts
+
+### Token Metadata
+
+This is the bedrock contract of the entire ecosystem. All that you need to interact with it is your own mint for which you have the mint authority. It is primarily a "mint decorator." It allows you to decorate your mint with a Metadata PDA that gives it a name, symbol, uri, list of creators with royalty splits, and whether or not it's been sold. You can do this with any mint with any supply. Phantom Wallet uses this Metadata account and it's URI field, which often links to a Manifest.json file of a certain format, to display NFTs in their Collections category on their UI.
+
+Furthermore, if your mint has one token in its supply, you can give it an additional decoration PDA, of type MasterEdition. This PDA denotes the mint as a special type of object that can mint other mints - which we call Editions (as opposed to MasterEditions because they can't print other mints themselves). This makes this mint like the "master records" that record studios used to use to make new copies of records back in the day. The MasterEdition PDA will take away minting and freezing authority from you in the process and will contain information about total supply, maximum possible supply, etc.
+
+The existence of Metadata and its sister PDA MasterEdition makes a very powerful combination for a mint that enables the entire rest of the Metaplex contract stack. Now you can create:
+
+- Normal mints that just have names (Metadata but no MasterEdition)
+- One of a kind NFTs (Metadata + MasterEdition with `max_supply` of 0)
+- NFTs that can print limited edition child NFTs (Metadata + MasterEdition with `max_supply` of say 10)
+- NFTs that can print unlimited open edition NFTs (Metadata + MasterEdition with unlimited `max_supply`)
+
+You can also easily transfer ownership of these PDA records with the `updateAuthority` key on Metadata between parties, so you can sell printing rights to another party, or just give them the token itself while retaining the printing rights.
+
+### Token Vault
+
+Token Vault acts like a corporation or safe escrow for arbitrary token allotments. You can create a vault object, and insert any number of tokens from any number of mints into safety deposit boxes, and then activate the vault. It has a few different states, but the important ones are **Activated**, which is when it's locked and nobody can access its contents, and **Combined,** when the vault has essentially been opened and the vault authority can withdraw the contents.
+
+Going from **Activated** to **Combined** has only one restraint - that there are no outstanding fractional shares in circulation. You can in principle go straight from **Activated** to **Combined** immediately if you issue 0 fractional shares (which is what the Metaplex front-end contract does during Auction creation).
+
+Once the vault is **Activated**, you can then mint treasury shares that represent fractional ownership of the tokens inside the vault. The treasury shares are valued based on an external price indicator account that does not need to be owned by the vault and is considered the vault's price oracle, and these shares can then be sold on a dex or in an AMM or whatever you desire. This allows you, as the vault owner, to take your NFT(s) and turn them into a sort of corporation and sell partial ownership to other parties. If the external price oracle has its price driven by a proper third party such as a dex or other price discovery mechanism, then the entire system is balanced.
+
+When there are outstanding shares, you cannot, as the vault owner, **Combine** the vault, and retrieve your tokens, until you buy out the shares in circulation. You have to provide the number_of_shares_outstanding*price_from_oracle in the token_mint of the vault to the vault to unlock it. Then shareholders can return at their leisure to trade in shares for their winnings.
+
+### Auction
+
+The Auction Contract represents an auction primitive, and it knows nothing about NFTs, or Metadata, or anything else in the Metaplex ecosystem. All it cares about is that it has a resource address, it has auction mechanics, and it is using those auction mechanics to auction off that resource. It currently supports English Auctions and Open Edition Auctions (no winners but bids are tracked.) Its only purpose is to track who won what place in an auction and to collect money for those wins. When you place bids, or cancel them, you are interacting with this contract. However, when you redeem bids, you are not interacting with this contract, but Metaplex, because while it can provide proof that you did indeed win 4th place, it has no opinion on how the resource being auctioned off is divvied up between 1st, 2nd, 3rd, and 4th place winners, for example.
+
+This contract will be expanded in the future to include other auction types, and better guarantees between that the auctioneer claiming the bid actually has provided the prize by having the winner sign a PDA saying that they received the prize. Right now this primitive contract should *not* be used in isolation, but in companionship with another contract (like Metaplex in our case) that makes such guarantees that prizes are delivered if prizes are won.
+
+### Metaplex
+
+This is the granddaddy contract of them all. The primary product of the Metaplex contract are AuctionManagers, and they are the nexus of the other three contract's structs. The purpose of an AuctionManager is to understand that an Auction object is auctioning off the contents of a Vault, and that the contents of a Vault are different types of NFT arrangements, such as:
+
+- Limited Edition Prints (Printing a new child edition from limited supply)
+- Open Edition Prints (Printing a new child edition from unlimited supply)
+- Full Rights Transfers (Giving away token + metadata ownership)
+- Single Token Transfers (Giving away a token but not metadata ownership)
+
+It orchestrates disbursements of those contents to winners of an auction. An AuctionManager requires both a Vault and an Auction to run, and it requires that the Auction's resource key be set to the Vault.
+
+Due to each type of NFT transfer above requiring slightly different nuanced handling and checking, Metaplex handles knowing about those things, and making the different CPI calls to the Token Metadata contract to make those things happen as required during the redemption phase. It also has full authority over all the objects like Vault and Auction, and handles all royalties payments by collecting funds from the auction into its own central escrow account and then disbursing to artists.
+
+## Basic Single Item Auction End To End
+
+Now that we've gone over the contracts, let's run through an example of how the contracts interact to create an NFT and sell it. I personally find these stories the most informative way to learn a new ecosystem.
+
+1. You allocate space for a mint account and a token account using Solana's system command and then you use spl-token JS SDK `createMint` and `createTokenAccount` commands to create a new mint and a new token account of that mint. You then use the `mintTo` command to mint a single token to that token account.
+2. You now want to label this token account as a MasterEdition NFT that has a limited supply of 10 possible Limited Edition Prints. Cool! To begin with, you make a call to the Token Metadata's `create_metadata_account` endpoint, naming it the "Bob's Cool NFT" mint with symbol "BOB" and you pass in a link to a picture of your Uncle Bob for the URI. This command creates a Metadata account with a PDA seed of `['metadata', metadata_program_id, your_mint_id]` relative to the `metadata_program_id`.
+
+ Note that the flow on the front end is a bit different - we put a dummy URI in place during this call, just to get the mint and metadata made, so that we can then push these values up to Arweave. Then we take the Arweave URL, and do a follow-up update_metadata_account call to update the Metadata with a proper URI that points to the metadata on the Arweave chain. It's a chicken-or-egg problem work-around because we need to have the Metadata existing to put it on Arweave, but we need the Arweave URI to place it in the Metadata. We simplify the case for this example.
+
+3. Next up, you need to turn this normal run of the mill NFT into a Master Edition. Right now you can still mint any number of tokens as you retain minting authority. The point of Metadata is to label mints - not just NFTs. So you call the create_master_edition endpoint on the Token Metadata contract which takes minting authority away from you, and creates a new Master Edition pda that contains information about how large a supply you want to have.
+
+ When you want to mint Editions now, you'll need to present a token account containing the token from this Master Edition mint as proof of ownership and authority to do so. This is why we will later hand this token over to the Auction Manager, so that it can do the same to print off Editions for winners!
+
+4. Now that your token account has a bonafide NFT Master Edition in it, we can run an auction where we auction off Limited Edition prints! Let's say we want to auction off three such prints.
+5. Next, we create a token vault using the `init_vault` endpoint of the token vault contract. We'll store our master edition token in it by adding it to the vault using the `add_token_to_inactive_vault` endpoint. This will create a safety deposit box in the vault that contains the the token.
+6. Then we will call the `activate_vault` command which **Activates** the vault, locking everything inside.
+7. We now **Combine** the vault using `combine_vault`, which is to say, we "open it," so the current authority could if they wanted withdraw the tokens inside it. The Auction Manager can only work with vaults in this state, which is why we have to go through the **Activation** phase to get here even though it seems a little nonsensical. See the in depth guide for more color on why these different states exist.
+8. Next up, we create the auction, and we say its resource is this vault. The auction has not yet been started, but it has the right resource (the vault). We do this via the `create_auction` command on the Auction contract.
+9. Now that we have an auction and a vault, we can go and call the `init_auction_manager` endpoint on the Metaplex contract with both of these accounts among a few others to create an AuctionManager, which ties them both together. Note that `init_auction_manager` takes a special struct called AuctionManagerSettings that allows one to specify how many winners there are and what winners get which items from which safety deposit box. At this point, we can't yet start the auction. The AuctionManager is in an invalidated state and we need to validate it by validating that the safety deposit boxes we provided to it in the vault are actually what we said are in them when we provided the AuctionManager with it's settings struct.
+10. Before we begin validation, we call `set_authority` on both the vault and auction to change its authority to the auction manager, so that it has control over both of those structs. This is a requirement for the validation phase and the rest of the contract lifecycle. **Now you no longer have control over your items.**
+11. We call the `validate_safety_deposit_box` endpoint on the Metaplex contract with the one safety deposit box in the vault, and the logic in this endpoint checks that there are exactly 3 printing tokens from the right mint in this box, matching the 3 printing tokens we promised it would have in our AuctionManagerSettings. Once we do this, and because this is the only safety deposit box in the vault, the AuctionManager is now validated.
+12. We now call `start_auction` on the Metaplex contract, which, because the AuctionManager has authority over the Auction, calls `start_auction` on the Auction contract, and the auction begins!
+13. Users can go and call `place_bid` on the Auction contract to place bids. When they do this, tokens of the `token_mint` type used by the auction are taken from the account they provide, tied to their main wallet, and stored in bidder pot accounts in the auction contract.
+14. In order to update a bid, a user must first cancel the original bid, and then place a new bid.
+15. Once the auction is over, a user can refund their bid if they did not win by calling `cancel_bid` again. Winners of the auction cannot cancel their bids.
+16. The winner of a bid creates a mint with decimals 0, a token account with 1 token in it, and calls the `redeem_printing_v2_bid` endpoint on the Metaplex contract, all in a single transaction. This token is now *officially* a Limited Edition of the "Bob's Cool NFT" Master Edition NFT!
+17. You, the auctioneer, visits /#/auction/id/billing and hit the settle button. This first iterates over all three bidders and for each wallet used, calls `claim_bid` on the Metaplex contract, which proxy-calls a `claim_bid` on the Auction contract, telling it to dump the winner's payment into an escrow account called `accept_payment` on the AuctionManager struct. It has the same token type as the auction. Once all payments have been collected, the front end then calls the `empty_payment_account` endpoint one time (since you are the only creator on the Metadata being sold) and the funds in this escrow are paid out to a token account provided of the same type owned by you.
+
+ Note that our front end reference implementation uses SOL as the "token type." This has some special caveats, namely that SOL isn't really an "spl token." It instead has a work-around called the "Wrapped SOL mint." This is a special mint that is often used in a transient account. What this means is that when we place a bid, we actually make a one-off system account, transfer lamports to it of your bid amount + rent, then label it an spl-token account of the wrapped sol type, use it to place the bid, then close it all in one transaction.
+
+ Special machinations in the spl token program then make this wrapped sol token account have a number of tokens with the proper decimals that map to the amount of SOL you transferred to it. We do a similar operation with cancelling, where we make a transient wrapped sol account, transfer cancelled bid funds to it, and then close the account, transferring funds out all in a single transaction. This is all done for ease of use. With settlements, when funds are disbursed to artists, we actually make a WSOL account for them and they have to close it by hand via a dropdown menu.
+
+ The protocol operates off of generic spl tokens and has no opinions about WSOL specifically, but the front end reference implementation does. So take careful note!
+
+## Conclusion
+
+Now that you've been given this architectural overview, we'll follow up with specific in-depth break downs of each contract's state and mechanics. Hopefully you've got a better idea now of how they work together. If you have any further questions, you can always reach out to me, j_, on discord, or my twitter handle, @redacted_j. My partner in crime, b_, who helped build this protocol, can also be reached on twitter at @baalazamon. This was his brainchild and I couldn't have done it without him. He's been a good friend and an even better mentor.
+
+# Deep Dive
+
+Get ready and grab some aspirin. Here we go!
+
+## Token Metadata Contract
+
+### Overview
+
+The Token Metadata contract can be used for storing generic metadata about any given mint, whether NFT or not. Metadata allows storage of name, symbol, and URI to an external resource. Additionally, the Metadata allows for the tracking of creators, primary sales, and seller fees. Once the mint has been created, the mint authority can use the SPL Metadata program to create metadata as described in this document.
+
+Minting an NFT requires creating a new SPL Mint with the supply of one and decimals zero as described [https://spl.solana.com/token#example-create-a-non-fungible-token](https://spl.solana.com/token#example-create-a-non-fungible-token)
+
+Below is the Rust representation of the structs that are stored on-chain.
+
+```rust
+
+#[repr(C)]
+#[derive(BorshSerialize, BorshDeserialize, PartialEq, Debug, Clone)]
+pub struct Data {
+ /// The name of the asset
+ pub name: String,
+ /// The symbol for the asset
+ pub symbol: String,
+ /// URI pointing to JSON representing the asset
+ pub uri: String,
+ /// Royalty basis points that goes to creators in secondary sales (0-10000)
+ pub seller_fee_basis_points: u16,
+ /// Array of creators, optional
+ pub creators: Option>,
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, Debug)]
+pub struct Metadata {
+ pub key: Key,
+ pub update_authority: Pubkey,
+ pub mint: Pubkey,
+ pub data: Data,
+ // Immutable, once flipped, all sales of this metadata are considered secondary.
+ pub primary_sale_happened: bool,
+ // Whether or not the data struct is mutable, default is not
+ pub is_mutable: bool,
+}
+
+#[repr(C)]
+#[derive(Clone, Debug, PartialEq, BorshSerialize, BorshDeserialize)]
+pub struct MasterEdition {
+ pub key: Key,
+
+ pub supply: u64,
+
+ pub max_supply: Option,
+}
+
+#[repr(C)]
+#[derive(Clone, Debug, PartialEq, BorshSerialize, BorshDeserialize)]
+/// All Editions should never have a supply greater than 1.
+/// To enforce this, a transfer mint authority instruction will happen when
+/// a normal token is turned into an Edition, and in order for a Metadata update authority
+/// to do this transaction they will also need to sign the transaction as the Mint authority.
+pub struct Edition {
+ pub key: Key,
+
+ /// Points at MasterEdition struct
+ pub parent: Pubkey,
+
+ /// Starting at 0 for master record, this is incremented for each edition minted.
+ pub edition: u64,
+}
+
+#[repr(C)]
+#[derive(BorshSerialize, BorshDeserialize, PartialEq, Debug, Clone)]
+pub struct Creator {
+ pub address: Pubkey,
+ pub verified: bool,
+ // In percentages, NOT basis points ;) Watch out!
+ pub share: u8,
+}
+
+#[repr(C)]
+#[derive(BorshSerialize, BorshDeserialize, PartialEq, Debug, Clone)]
+pub struct EditionMarker {
+ pub key: Key,
+ pub ledger: [u8; 31],
+}
+
+```
+
+The instruction set for the token metadata contract can be found here: [https://github.com/metaplex-foundation/metaplex/blob/master/rust/token-metadata/program/src/instruction.rs](https://github.com/metaplex-foundation/metaplex/blob/master/rust/token-vault/program/src/instruction.rs)
+
+### Types
+
+### Metadata
+
+This object can be used to provide basic info about SPL tokens on Solana, which include the name, symbol, URI and seller fees, as well as whether or not the sale of this metadata has happened yet. Anybody carrying a token from this mint can mark this primary sale as having happened via the `update_primary_sale_happened_via_token` command. There is obviously no incentive for a primary owner to do this as it precludes them from getting full royalties on the first sale, but a secondary owner must do this if they ever want to see fees from selling!
+
+Metadata accounts are simply PDA addresses with derived key of `['metaplex', metaplex_program_id, mint_id]`.
+
+### Master Edition
+
+In addition to simple metadata, a Master Edition object can be created. Master Editions act similar to a token mint and allows the holder to create new number editions while tracking provenance of the items. A Master Edition token, when minted, represents both a non-fungible token on Solana and metadata that allows creators to control the provenance of prints created from the master edition. A Master Edition object can only be created for mints with supply of one and decimals of zero.
+
+The creator can set the maximum supply of the master edition just like a regular mint on Solana, with the main difference being that each print is a numbered edition created from it. To mint a new limited edition, this master edition token must be presented, along with a new mint + token, to the `mint_new_edition_from_master_edition_via_token` endpoint.
+
+Master Edition accounts are PDA addresses of `['metaplex', metaplex_program_id, mint_id, 'edition']`.
+
+### Edition
+
+An edition represents a copy of an NFT, and is created from a Master Edition. Each print has an edition number associated with it. Normally, prints can be created during Open Edition or Limited Edition auction, but they could also be created by the creator manually.
+
+Editions are created by presenting the Master Edition token, along with a new mint that lacks a Metadata account and a token account containing one token from that mint to the `mint_new_edition_from_master_edition_via_token` endpoint. This endpoint will create both an immutable Metadata based on the parent Metadata and a special Edition struct based on the parent Master Edition struct.
+
+The Edition has the same PDA as a Master Edition to force collision and prevent a user from having a mint with both, `['metaplex', metaplex_program_id, mint_id, 'edition']`.
+
+## Concepts
+
+### Decoration as PDA Extensions
+
+The whole idea of the Token Metadata program is to be a decorator to a Token Mint. Each struct acts as further decoration. The Metadata struct gives a mint a name and a symbol and points to some external URI that can be anything. The Master Edition gives it printing capabilities. The Edition labels it as a child of something.
+
+This is important to internalize, because it means you as a Rust developer can take it a step further. There is nothing stopping you from building a new contract on top of ours that makes it's own PDAs and and extending this still further. Why not build a CookingRecipes PDA, that has seed `['your-app', your_program_id, mint_id, 'recipes']`? You can require that a Metadata PDA from our contract exists to make a PDA in your program, and then you can further decorate mints on top of our decorations. The idea is to compose mints with further information than they ever had before, and then build clients that can consume that information in new and interesting ways.
+
+### Co-Creators
+
+The SPL Metadata program supports storing up to five co-creators that share potential future profits from sales for the items as defined by `seller_fee_basis_points` . Each creator needs to be added as part of the minting process and is required to approve metadata that was used in his name using the `sign_metadata` endpoint. Unverified artwork cannot be sold with Metaplex.
+
+During the first sale, creators share in 100% of the proceeds, while in follow up sales, they share in proceeds as a percentage determined by `seller_fee_basis_points`. Whether or not a metadata is considered in second sale or not is determined by the `primary_sale_happened` boolean on the Metadata account.
+
+### URI JSON Schema
+
+The URI resource is compatible with [ERC-1155 JSON Schema](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1155.md#erc-1155-metadata-uri-json-schema) in order to easily port NFTs across different chains using the wormhole bridge. You can see how we build this in our reference implementation here: [https://github.com/metaplex-foundation/metaplex/blob/master/js/packages/web/src/actions/nft.tsx#L66](https://github.com/metaplex-foundation/metaplex/blob/master/js/packages/web/src/actions/nft.tsx#L66)
+
+```jsx
+{
+ "title": "Token Metadata",
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Identifies the asset to which this token represents"
+ },
+ "description": {
+ "type": "string",
+ "description": "Describes the asset to which this token represents"
+ },
+ "image": {
+ "type": "string",
+ "description": "A URI pointing to a resource with mime type image/* representing the asset to which this token represents. Consider making any images at a width between 320 and 1080 pixels and aspect ratio between 1.91:1 and 4:5 inclusive."
+ },
+ "external_url": {
+ "type": "string",
+ "description": "A URI pointing to an external resource that will take user outside of the platform."
+ },
+ "seller_fee_basis_points": {
+ "type": "number",
+
+ },
+ "properties": {
+ "type": "object",
+ "description": "Arbitrary properties. Values may be strings, numbers, object or arrays.",
+ "properties": {
+ "creators": {
+ "type": "array",
+ "description": "Contains list of creators, each with Solana address and share of the nft"
+ },
+ }
+ }
+ }
+}
+```
+
+## Token Vault
+
+### Overview
+
+The Token Vault serves two purposes in the Metaplex ecosystem: Storing tokens for safe-keeping for the Auction Manager, and as a fractionalization service for NFTs. It has two primary concepts, that of the Vault and of the Safety Deposit Box. A Vault can have any number of Safety Deposit Boxes, one per unique mint being stored. A Vault goes through many phases in life-cycle, but the two important ones are when it's **Activated** and when it is **Combined**. When it is **Activated**, new fractional shares can be minted and distributed for partial ownership, and when it is **Combined**, fractional owners can burn their shares in exchange for remuneration and the vault authority can retrieve the stored tokens in the Vault.
+
+Below is the Rust state stored on chain:
+
+```rust
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, PartialEq)]
+pub enum Key {
+ Uninitialized,
+ SafetyDepositBoxV1,
+ ExternalAccountKeyV1,
+ VaultV1,
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, PartialEq)]
+pub enum VaultState {
+ Inactive,
+ Active,
+ Combined,
+ Deactivated,
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize)]
+pub struct Vault {
+ pub key: Key,
+ /// Store token program used
+ pub token_program: Pubkey,
+ /// Mint that produces the fractional shares
+ pub fraction_mint: Pubkey,
+ /// Authority who can make changes to the vault
+ pub authority: Pubkey,
+ /// treasury where fractional shares are held for redemption by authority
+ pub fraction_treasury: Pubkey,
+ /// treasury where monies are held for fractional share holders to redeem(burn) shares once buyout is made
+ pub redeem_treasury: Pubkey,
+ /// Can authority mint more shares from fraction_mint after activation
+ pub allow_further_share_creation: bool,
+
+ /// Must point at an ExternalPriceAccount, which gives permission and price for buyout.
+ pub pricing_lookup_address: Pubkey,
+ /// In inactive state, we use this to set the order key on Safety Deposit Boxes being added and
+ /// then we increment it and save so the next safety deposit box gets the next number.
+ /// In the Combined state during token redemption by authority, we use it as a decrementing counter each time
+ /// The authority of the vault withdrawals a Safety Deposit contents to count down how many
+ /// are left to be opened and closed down. Once this hits zero, and the fraction mint has zero shares,
+ /// then we can deactivate the vault.
+ pub token_type_count: u8,
+ pub state: VaultState,
+
+ /// Once combination happens, we copy price per share to vault so that if something nefarious happens
+ /// to external price account, like price change, we still have the math 'saved' for use in our calcs
+ pub locked_price_per_share: u64,
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize)]
+pub struct SafetyDepositBox {
+ // Please note if you change this struct, be careful as we read directly off it
+ // in Metaplex to avoid serialization costs...
+ /// Each token type in a vault has it's own box that contains it's mint and a look-back
+ pub key: Key,
+ /// Key pointing to the parent vault
+ pub vault: Pubkey,
+ /// This particular token's mint
+ pub token_mint: Pubkey,
+ /// Account that stores the tokens under management
+ pub store: Pubkey,
+ /// the order in the array of registries
+ pub order: u8,
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize)]
+pub struct ExternalPriceAccount {
+ pub key: Key,
+ pub price_per_share: u64,
+ /// Mint of the currency we are pricing the shares against, should be same as redeem_treasury.
+ /// Most likely will be USDC mint most of the time.
+ pub price_mint: Pubkey,
+ /// Whether or not combination has been allowed for this vault.
+ pub allowed_to_combine: bool,
+}
+
+```
+
+The instruction set for the vault can be found here: [https://github.com/metaplex-foundation/metaplex/blob/master/rust/token-vault/program/src/instruction.rs](https://github.com/metaplex-foundation/metaplex/blob/master/rust/token-vault/program/src/instruction.rs)
+
+### Types
+
+### Vault
+
+The Big Kahuna and namesake of this contract, the Vault is really a container of many concepts. The Vault can be used without any fractional share emissions as a kind of escrow service for many different tokens of different mint types, and indeed, this is what Metaplex uses it for when performing Auctions. However it can also be used to provide partial ownership of NFTs to interested investors. Let's break down the keys in the Vault's state one by one.
+
+**Fractional shares:** It points at a `fractional_mint` and `fractional_treasury`, which allows the vault authority to mint new fractional shares to a treasury account before (or optionally after) **Activation** of the vault. Shares inside the treasury don't count towards the cost of **Combining** the vault.
+
+**Redeem treasury:** This account is used to hold in escrow the funds used to pay off fractional shareholders when the vault authority wishes to **Combine** the vault and regain possession of the stored assets inside. The vault authority has to pay shares_in_circulation*price_of_shares into this redeem treasury. The mint of the treasury is completely decidable by the vault authority, we make no opinions on that.
+
+**Pricing Lookup Address:** This is a pointer to an ExternalLookupAccount, which while its struct is defined by the Token Vault program, the account itself does not need to be owned by the vault program or anything within it. It is meant to be an external pricing oracle that is independent of the vault authority or vault that provides pricing data on the fractional share price so that the fractional share owners get a fair buyout by the vault authority.
+
+Token Vaults do not have PDA addresses.
+
+### Safety Deposit Box
+
+A safety deposit box keeps track of the token account containing the tokens, its vault, and what order in the vault it maintains. If it was inserted 3rd, it's order is 2 (0-based.) It's a pretty simple setup. And yes, you should be aware the safety deposit box doesn't *actually* store any tokens - it contains a `store` key that points to an spl-token account that contains the tokens. It's more of a foreign key join table between the vault and the store.
+
+Safety Deposit Boxes always have PDA addresses of type `['vault', vault_key, mint_key]`.
+
+### External Price Account
+
+The External Price Account is meant to be used as an external oracle. It is provided to a Vault on initialization and doesn't need to be owned or controlled by the vault authority (though it can be.) It can provide data on the `price_per_share` of fractional shares, whether or not the vault authority is currently allowed to **Combine** the vault and reclaim the contents, and what the `price_mint` of the vault is.
+
+ExternalPriceAccounts do not have PDA addresses.
+
+## Concepts
+
+### Vault State Machine
+
+A Vault begins its journey in the **Inactive** state. It is in this state that tokens can be added, and fractional shares can be minted into the fractional treasury. The idea is this phase is the "prep" where we are getting the Vault ready for use as an escrow or as a holding corporation for fractional ownership of NFTs.
+
+Once the vault is **Activated**, the Vault is closed, and the vault authority may *not* remove the tokens from the Vault. Furthermore, no new fractional shares may be minted unless during initialization the special `allow_further_share_creation` boolean was set. Some fractional share owners may not be too enthused about buying into a vault only to be diluted later, so we make this a one-time thing during initialization where the vault authority gets to choose what kind of vault it gets to be. The vault authority *can* however, remove shares from the treasury and give them to whomever they want, or start a dex with them, or an AMM, or what have you. These shares represent partial ownership of the vault now!
+
+Let's now say that the vault authority now wants to regain access to the Vault's contents. To do this, first, the ExternalPriceAccount tied to the vault needs to have `allowed_to_combine` set to true. If this is the case, the vault authority can then **Combine** the Vault, providing a token account with enough tokens to pay off all outstanding fractional share holders to the Vault. The Vault will drain this account to the `redeem_treasury` and the Vault will move to the **Combined** state. The Vault will use the `price_per_share` on the ExternalPriceAccount for this calculation. If no shares are outstanding, this **Combination** operation is free. During **Combination**, the vault authority also has the option to transmit vault authority to a new authority. Also note that all shares remaining in the fractional treasury are burned in this step.
+
+Once **Combined**, the Vault's contents can now be emptied by the vault authority, and fractional share owners can redeem (and burn) their fractional share tokens for tokens from the `redeem_treasury`. When all tokens in all safety deposit boxes have been removed, and all fractional tokens have been burned, the Vault will automatically move to the **Deactivated** state.
+
+## Auction
+
+### Overview
+
+The Auction contract is a primitive that is meant to be used in conjunction with another smart contract that understands the context of the resource for which the auction is being held. It contains mechanics for collecting payment from bidders, for keeping track of a winners list, and handling bid placement and cancellation, but it has no opinions on what the resource being bid on should be, or how it gets divided.
+
+While it currently has support for English Auctions and Open Edition Auctions, it will in the future support other types of auctions such as Vickrey and Dutch Auctions. The state for the contract is reproduced here:
+
+```rust
+/// Structure with pricing floor data.
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, PartialEq, Debug)]
+pub enum PriceFloor {
+ /// Due to borsh on the front end disallowing different arguments in enums, we have to make sure data is
+ /// same size across all three
+ /// No price floor, any bid is valid.
+ None([u8; 32]),
+ /// Explicit minimum price, any bid below this is rejected.
+ MinimumPrice([u64; 4]),
+ /// Hidden minimum price, revealed at the end of the auction.
+ BlindedPrice(Hash),
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, PartialEq, Debug)]
+pub struct AuctionData {
+ /// Pubkey of the authority with permission to modify this auction.
+ pub authority: Pubkey,
+ /// Pubkey of the resource being bid on.
+ /// TODO try to bring this back some day. Had to remove this due to a stack access violation bug
+ /// interactin that happens in metaplex during redemptions due to some low level rust error
+ /// that happens when AuctionData has too many fields. This field was the least used.
+ ///pub resource: Pubkey,
+ /// Token mint for the SPL token being used to bid
+ pub token_mint: Pubkey,
+ /// The time the last bid was placed, used to keep track of auction timing.
+ pub last_bid: Option,
+ /// Slot time the auction was officially ended by.
+ pub ended_at: Option,
+ /// End time is the cut-off point that the auction is forced to end by.
+ pub end_auction_at: Option,
+ /// Gap time is the amount of time in slots after the previous bid at which the auction ends.
+ pub end_auction_gap: Option,
+ /// Minimum price for any bid to meet.
+ pub price_floor: PriceFloor,
+ /// The state the auction is in, whether it has started or ended.
+ pub state: AuctionState,
+ /// Auction Bids, each user may have one bid open at a time.
+ pub bid_state: BidState,
+}
+
+// Further storage for more fields. Would like to store more on the main data but due
+// to a borsh issue that causes more added fields to inflict "Access violation" errors
+// during redemption in main Metaplex app for no reason, we had to add this nasty PDA.
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, PartialEq, Debug)]
+pub struct AuctionDataExtended {
+ /// Total uncancelled bids
+ pub total_uncancelled_bids: u64,
+ // Unimplemented fields
+ /// Tick size
+ pub tick_size: Option,
+ /// gap_tick_size_percentage - two decimal points
+ pub gap_tick_size_percentage: Option,
+ /// auction name
+ pub name: Option<[u8; 32]>,
+}
+
+/// Define valid auction state transitions.
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, PartialEq, Debug)]
+pub enum AuctionState {
+ Created,
+ Started,
+ Ended,
+}
+
+/// Bids associate a bidding key with an amount bid.
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, PartialEq, Debug)]
+pub struct Bid(pub Pubkey, pub u64);
+
+/// BidState tracks the running state of an auction, each variant represents a different kind of
+/// auction being run.
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, PartialEq, Debug)]
+pub enum BidState {
+ EnglishAuction { bids: Vec, max: usize },
+ OpenEdition { bids: Vec, max: usize },
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, PartialEq, Debug)]
+pub enum WinnerLimit {
+ Unlimited(usize),
+ Capped(usize),
+}
+
+/// Models a set of metadata for a bidder, meant to be stored in a PDA. This allows looking up
+/// information about a bidder regardless of if they have won, lost or cancelled.
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, PartialEq, Debug)]
+pub struct BidderMetadata {
+ // Relationship with the bidder who's metadata this covers.
+ pub bidder_pubkey: Pubkey,
+ // Relationship with the auction this bid was placed on.
+ pub auction_pubkey: Pubkey,
+ // Amount that the user bid.
+ pub last_bid: u64,
+ // Tracks the last time this user bid.
+ pub last_bid_timestamp: UnixTimestamp,
+ // Whether the last bid the user made was cancelled. This should also be enough to know if the
+ // user is a winner, as if cancelled it implies previous bids were also cancelled.
+ pub cancelled: bool,
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, PartialEq)]
+pub struct BidderPot {
+ /// Points at actual pot that is a token account
+ pub bidder_pot: Pubkey,
+ /// Originating bidder account
+ pub bidder_act: Pubkey,
+ /// Auction account
+ pub auction_act: Pubkey,
+ /// emptied or not
+ pub emptied: bool,
+}
+
+```
+
+The instruction set for auction can be found here: [https://github.com/metaplex-foundation/metaplex/blob/master/rust/auction/program/src/instruction.rs](https://github.com/metaplex-foundation/metaplex/blob/master/rust/token-vault/program/src/instruction.rs)
+
+### Types
+
+### AuctionData
+
+This is the core data representing an auction in this program. It contains (almost) all of the configuration representing an auction. You'll notice that it has a `token_mint` field which means any spl_token can be used as the base mint for an auction, so you can bid in any currency! It also keeps track of a few other goodies, so let's break them down one by one:
+
+`last_bid`: Every time someone bids, this is set. Useful for doing math with the gap time feature.
+
+`ended_at` : This is when the auction actually will end or has ended. It can be set at any time.
+
+`end_auction_at` : This is actually a duration and is a little confusing. If you're planning to start your auction at a later point in time, you can set this as a duration, and when you finally start your auction, ended_at will be set to now + this duration. Useful, right? Maybe poorly named. Our bad.
+
+`end_auction_gap` : Used in conjunction with `last_bid` - if this is set to 1 minute, then let's say someone makes a bid in the last 5 seconds of an auction. The auction is then extended by 55 seconds from it's original end time (+ 1 minute from the last bid.) If someone then makes another bid within that time period, it's another + 1 minute from that bid. And so on.
+
+`price_floor` : Various options for price floor, but essentially you can use this to set no price floor, a minimum price floor, or a blind price floor on the auction. See the enum for more.
+
+AuctionData accounts always have PDA addresses of `['auction', auction_program_id, resource_id]` where `resource_id` is the thing being auctioned off and `auction_program_id` is the id of the auction contract.
+
+### Bid State
+
+Bid State is technically not a top level struct, but an embedded one within AuctionData. I thought it was good to give it a section anyway because it's a complex little beast. It's actually an enum that holds a bid vector and a maximum size denoting how many of those bids are actually "valid winners" vs just placeholders.
+
+It's reversed, which is to say that the number one winner is always at the end of the vec. It's also always bigger generally than the number of winners so that if a bid is cancelled, we have some people who got bumped out of top spots that can be moved back into them without having to cancel and replace their bids. When a bid is placed, it is inserted in the proper position based on it's amount and then the lowest bidder is bumped off the 0th position of the vec if the vec is at max size, so the vec remains sorted at all times.
+
+In the case of open edition, the max is always zero, ie there are never any winners, and we are just accepting bids and creating BidderMetadata tickets and BidderPots to accept payment for (probably) fixed price Participation NFTs.
+
+We would prefer that OpenEdition enum have no bid vector and no max, but unfortunately borsh-js does not support enums with different internal data structures, so all data structures in an enum must be identical (even if unused.) Keep that in mind when designing your own end to end borsh implementations!
+
+### BidderMetadata
+
+This is created and/or updated during the `place_bid` and `cancel_bid` endpoints of the contract, and acts as proof to other contracts and this one that a bidder actually placed a bid, because there is no guarantee that this bidder will have an entry in the actual BidState as they could've gotten knocked off the array in high periods of bidder activity.
+
+BidderMetadata always has a PDA of `['auction', auction_program_id, auction_id, bidder_key, 'metadata']` where `auction_program_id` is the program id of the auction contract, `auction_id` is the key of the auction, and `bidder_key` is the wallet making the bid.
+
+### BidderPot
+
+This ended up being a bit of a redundant struct, but this serves as a join table between the actual token account containing the funds collected by the auction for a given bidder, the bidder's sol wallet, and an auction. In the future we may merge this struct into BidderMetadata. There is also an `emptied` boolean on it to track whether or not the bidder pot has been claimed by the auctioneer for easy lookup.
+
+BidderPot always has a PDA of `['auction', auction_program_id, auction_id, bidder_key]`where `auction_program_id` is the program id of the auction contract, `auction_id` is the key of the auction, and `bidder_key` is the wallet making the bid.
+
+### AuctionDataExtended
+
+If you've read this far, you now get to witness my personal shame. So as it turns out, if you build a complex enough program with enough structs flying around, there is some kind of weird interaction in the Metaplex contract that causes it to blow out with an access violation if you add more than a certain number of keys to one particular struct (AuctionData), and *only* during the redemption endpoint calls. We were unable to discern why this was across 3 days of debugging. We had a theory it was due to some issue with borsh but it is not 100% certain, as we're not experts with that library's internals.
+
+Instead, our work-around was to introduce AuctionDataExtended to add new fields that we needed to AuctionData without breaking this hidden bug that seems to exist. What is odd about the whole thing is adding fields to *other* structs doesn't cause any issues. In the future I'd love to have someone who knows way more than me about these subjects weigh in and tell me what I did wrong here to resolve this split-brain problem! We also don't have reverse lookup capability (Resource key on AuctionData) because of this bug - adding it would cause the blow out I mentioned.
+
+Another note here is `gap_tick_size_percentage` as of the time of this writing has not been implemented yet, it is just a dummy field.
+
+AuctionDataExtended accounts always have PDA addresses of `['auction', auction_program_id, resource_id, 'extended']` where `resource_id` is the thing being auctioned off and `auction_program_id` is the id of the auction contract.
+
+### Concepts
+
+### Incompleteness
+
+The contract currently has a deficiency in it's implementation where an auctioneer can claim the funds for a winning bid without the winner having signed off on having received some sort of prize for that bid - which is why we mention the "conjunction" above in the Overview. Metaplex guarantees through the interaction with the Metaplex contract that all users of Metaplex + Auction combination get a prize, but use of Auction by itself does not guarantee a winner gets a prize for a bid, because this functionality does not exist in this contract alone yet. A future version of this contract will require the winning bidders to create a PDA admitting they have received a prize before the auctioneer can withdraw funds, making this a complete primitive that can be used without any other contract making guarantees.
+
+The way Metaplex makes such a guarantee is that it controls the Vault resource being bid on, and if you present the Metaplex contract with a BidderMetadata account from the Auction that represents a winning bid, it will disburse the proper NFT to you from the Vault. You can do the same with your own custom implementation.
+
+### Cancelling before Placing a Bid
+
+Currently you cannot change or place a new bid until you cancel the old one. Just keep that in mind - it makes for easier logic all around. This may change in the future as we add support for bidders not being able to cancel once a bid is placed, or not being able to bid less than they previously bid.
+
+### Claiming bids
+
+Pulling money out of the auction contract as an auctioneer can only be done after an auction has ended and must be done for each winning bid, one after the other. You provide a destination token account and drain each bidder pot to it via the `claim_bid` endpoint.
+
+### Refunds
+
+Refunds work by cancelling bids. Currently, any bidder can cancel any time during an auction, but only non-winners of the auction can cancel after it ends. When users cancel, they receive full refunds. The "refund bid" button on the front end just cancels the bid.
+
+### Turning the Crank
+
+The `place_bid` will turn the state of the auction to **Ended** if someone places a bid after the auction's `ended_at` date passes. It will then return `Ok(())` in a kind of silent pass without actually placing a bid. Once the auction is in the **Ended** state, bid funds can be claimed by the auctioneer. This is actually how an auction is really ended - it does not end on it's own accord, someone has to turn the crank! In theory, an auction will remain open for all eternity, past its own end date, if nobody touches it, but nobody can do any invalid things to it. It's kind of like Schrodinger's Cat. However, even if an auction is not officially in **Ended** state but it is past its `ended_at`, winners will not be allowed to cancel bids.
+
+## Metaplex
+
+### Overview
+
+The Metaplex is the contract that knows how the others tie together and understands what an NFT truly is, how to auction it off and how to redeem it for others. It also understands the concept of royalties and how to pay them out. It's job is to act is the orchestrator between a Vault full of tokens, an Auction primitive, a bunch of winners, creators, and an auctioneer, and make sure everybody gets what is deserved, whether it be monies or tokens (though in the end they are all tokens).
+
+It's state is reproduced here:
+
+```rust
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, PartialEq, Debug, Copy)]
+pub enum Key {
+ Uninitialized,
+ OriginalAuthorityLookupV1,
+ BidRedemptionTicketV1,
+ StoreV1,
+ WhitelistedCreatorV1,
+ PayoutTicketV1,
+ SafetyDepositValidationTicketV1,
+ AuctionManagerV1,
+ PrizeTrackingTicketV1,
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, Debug)]
+pub struct AuctionManager {
+ pub key: Key,
+
+ pub store: Pubkey,
+
+ pub authority: Pubkey,
+
+ pub auction: Pubkey,
+
+ pub vault: Pubkey,
+
+ pub accept_payment: Pubkey,
+
+ pub state: AuctionManagerState,
+
+ pub settings: AuctionManagerSettings,
+
+ /// True if this is only winning configs of one item each, used for optimization in saving.
+ pub straight_shot_optimization: bool,
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, Debug)]
+pub struct AuctionManagerState {
+ pub status: AuctionManagerStatus,
+ /// When all configs are validated the auction is started and auction manager moves to Running
+ pub winning_config_items_validated: u8,
+
+ pub winning_config_states: Vec,
+
+ pub participation_state: Option,
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, Debug)]
+pub struct AuctionManagerSettings {
+ /// The safety deposit box index in the vault containing the winning items, in order of place
+ /// The same index can appear multiple times if that index contains n tokens for n appearances (this will be checked)
+ pub winning_configs: Vec,
+
+ /// The participation config is separated because it is structurally a bit different,
+ /// having different options and also because it has no real "winning place" in the array.
+ pub participation_config: Option,
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, PartialEq, Debug)]
+pub struct ParticipationState {
+ /// We have this variable below to keep track in the case of the participation NFTs, whose
+ /// income will trickle in over time, how much the artists have in the escrow account and
+ /// how much would/should be owed to them if they try to claim it relative to the winning bids.
+ /// It's abit tougher than a straightforward bid which has a price attached to it, because
+ /// there are many bids of differing amounts (in the case of GivenForBidPrice) and they dont all
+ /// come in at one time, so this little ledger here keeps track.
+ pub collected_to_accept_payment: u64,
+
+ /// Record of primary sale or not at time of auction creation, set during validation step
+ pub primary_sale_happened: bool,
+
+ pub validated: bool,
+
+ /// An account for printing authorization tokens that are made with the one time use token
+ /// after the auction ends. Provided during validation step.
+ pub printing_authorization_token_account: Option,
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, PartialEq, Debug)]
+pub struct ParticipationConfig {
+ /// Setups:
+ /// 1. Winners get participation + not charged extra
+ /// 2. Winners dont get participation prize
+ pub winner_constraint: WinningConstraint,
+
+ /// Setups:
+ /// 1. Non-winners get prize for free
+ /// 2. Non-winners get prize but pay fixed price
+ /// 3. Non-winners get prize but pay bid price
+ pub non_winning_constraint: NonWinningConstraint,
+
+ /// The safety deposit box index in the vault containing the template for the participation prize
+ pub safety_deposit_box_index: u8,
+ /// Setting this field disconnects the participation prizes price from the bid. Any bid you submit, regardless
+ /// of amount, charges you the same fixed price.
+ pub fixed_price: Option,
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, PartialEq, Debug)]
+pub enum WinningConstraint {
+ NoParticipationPrize,
+ ParticipationPrizeGiven,
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, PartialEq, Debug)]
+pub enum NonWinningConstraint {
+ NoParticipationPrize,
+ GivenForFixedPrice,
+ GivenForBidPrice,
+}
+
+#[repr(C)]
+#[derive(Clone, PartialEq, BorshSerialize, BorshDeserialize, Copy, Debug)]
+pub enum WinningConfigType {
+ /// You may be selling your one-of-a-kind NFT for the first time, but not it's accompanying Metadata,
+ /// of which you would like to retain ownership. You get 100% of the payment the first sale, then
+ /// royalties forever after.
+ ///
+ /// You may be re-selling something like a Limited/Open Edition print from another auction,
+ /// a master edition record token by itself (Without accompanying metadata/printing ownership), etc.
+ /// This means artists will get royalty fees according to the top level royalty % on the metadata
+ /// split according to their percentages of contribution.
+ ///
+ /// No metadata ownership is transferred in this instruction, which means while you may be transferring
+ /// the token for a limited/open edition away, you would still be (nominally) the owner of the limited edition
+ /// metadata, though it confers no rights or privileges of any kind.
+ TokenOnlyTransfer,
+ /// Means you are auctioning off the master edition record and it's metadata ownership as well as the
+ /// token itself. The other person will be able to mint authorization tokens and make changes to the
+ /// artwork.
+ FullRightsTransfer,
+ /// Means you are using authorization tokens to print off editions during the auction using
+ /// from a MasterEditionV1
+ PrintingV1,
+ /// Means you are using the MasterEditionV2 to print off editions
+ PrintingV2,
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, Debug)]
+pub struct WinningConfig {
+ // For now these are just array-of-array proxies but wanted to make them first class
+ // structs in case we want to attach other top level metadata someday.
+ pub items: Vec,
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, Debug)]
+pub struct WinningConfigState {
+ pub items: Vec,
+ /// Ticked to true when money is pushed to accept_payment account from auction bidding pot
+ pub money_pushed_to_accept_payment: bool,
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, Copy, Debug)]
+pub struct WinningConfigItem {
+ pub safety_deposit_box_index: u8,
+ pub amount: u8,
+ pub winning_config_type: WinningConfigType,
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, Copy, Debug)]
+pub struct WinningConfigStateItem {
+ /// Record of primary sale or not at time of auction creation, set during validation step
+ pub primary_sale_happened: bool,
+ /// Ticked to true when a prize is claimed by person who won it
+ pub claimed: bool,
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, Debug, PartialEq)]
+pub enum AuctionManagerStatus {
+ Initialized,
+ Validated,
+ Running,
+ Disbursing,
+ Finished,
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, Copy)]
+pub struct OriginalAuthorityLookup {
+ pub key: Key,
+ pub original_authority: Pubkey,
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, Copy)]
+pub struct BidRedemptionTicket {
+ pub key: Key,
+ pub participation_redeemed: bool,
+ pub items_redeemed: u8,
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, Copy)]
+pub struct PayoutTicket {
+ pub key: Key,
+ pub recipient: Pubkey,
+ pub amount_paid: u64,
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, Copy)]
+pub struct Store {
+ pub key: Key,
+ pub public: bool,
+ pub auction_program: Pubkey,
+ pub token_vault_program: Pubkey,
+ pub token_metadata_program: Pubkey,
+ pub token_program: Pubkey,
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, Copy)]
+pub struct WhitelistedCreator {
+ pub key: Key,
+ pub address: Pubkey,
+ pub activated: bool,
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, Copy)]
+pub struct SafetyDepositValidationTicket {
+ pub key: Key,
+ pub address: Pubkey,
+}
+
+#[repr(C)]
+#[derive(Clone, BorshSerialize, BorshDeserialize, Copy, Debug)]
+pub struct PrizeTrackingTicket {
+ pub key: Key,
+ pub metadata: Pubkey,
+ pub supply_snapshot: u64,
+ pub expected_redemptions: u64,
+ pub redemptions: u64,
+}
+```
+
+The instruction set for metaplex can be found here: [https://github.com/metaplex-foundation/metaplex/blob/master/rust/metaplex/program/src/instruction.rs](https://github.com/metaplex-foundation/metaplex/blob/master/rust/token-vault/program/src/instruction.rs)
+
+### Types
+
+### AuctionManager
+
+This is the top level struct of the entire contract and serves as a container for "all the things." When you make auctions on Metaplex, you are actually really making these ultimately. An AuctionManager has a single authority (you, the auctioneer), a store, which is the storefront struct, an Auction from the auction contract, and a Vault from the vault contract. It also has a token account called `accept_payment` that serves as a central clearing escrow for all tokens that it will collect in the future from the winning bidders and all payments for fixed price participation nfts from all non-winners in the auction.
+
+It contains embedded within it a separate `state` and `settings` struct. It is seeded with the `settings` on initialization by the caller, while the `state` is derived from `settings` on initialization. AuctionManager goes through several states:
+
+**Initialized:** This is the state it begins in. You provide a **Created** auction and a **Combined** vault. You can't start the auction yet though because you need to prove to this AuctionManager that the configurations you provided in your settings match the tokens in the vault.
+
+**Validated:** You have now proven that each winning configuration in your settings match the tokens in your vault, and you can start the auction via a proxy call.
+
+**Running:** The underlying Auction is now running.
+
+**Disbursing**: The underlying Auction is over and now the AuctionManager is in the business of disbursing royalties to the auctioneer and creators, prizes and participation NFTs to the winners, and possibly participation NFTs to the non-winners.
+
+**Finished:** All funds and prizes disbursed.
+
+This state is not currently in use as switching to it requires an iteration over prizes to review all items for claimed-ness and this costs CPU that is too precious during the redemption call OR adding new endpoint that is not guaranteed to be called. We will revisit it later to bring it back during a refactoring, for now it is considered a NOOP state.
+
+AuctionManagers always have PDAs of seed `['metaplex', metaplex_program_id, auction_id]` where metaplex_program_id is the id of the Metaplex contract and `auction_id` is the address of the Auction being passed to the AuctionManager.
+
+### AuctionManagerSettings
+
+AuctionManagerSettings is an embedded struct inside AuctionManager but is deserving of it's own section. This struct is actually provided by the user in the `init_auction_manager` call to parameterize the AuctionManager with who is winning what and whether or not there is a participation NFT. It is fairly straightforward - for each entry in the WinningConfig vec, it stands for a given winning place in the Auction. The 0th entry is the WinningConfig for the 1st place winner. A WinningConfig has many WinningConfigItems. For each WinningConfigItem in the 0th WinningConfig, it is a mapping to a Vault SafetyDepositBox that the 1st place winner gets items from. You can therefore configure quite arbitrary Auctions this way.
+
+This setup is actually quite redundant and will likely change in the future to a setup where a WinningConfigItem is the top level structure and it simply declares which winners will receive it, because if you wish for multiple winners to receive prints from the same Master Edition, the WinningConfigItem must right now be duplicated across each WinningConfig.
+
+The Participation Config is optional, but has enums describing how it will behave for winners and for non-winners, whether or not it has a price associated with it, and what safety deposit box contains its printing tokens.
+
+Notice that AuctionManagerSettings really doesn't contain settings about the auction. It really only breaks down how to divvy up the Vault. This is the separation of concerns in action - the Auction is parameterized with auction settings, while the AuctionManager understands how to divvy up rewards to winners and is parameterized that way. The Auction does not understand how to divvy up rewards, and the Metaplex contract does not understand how to do Auctions, only how to read winners off of it.
+
+### AuctionManagerState
+
+I consciously made the decision to keep AuctionManagerSettings identical to what you send up when you initialize AuctionManager. However, other things related to WinningConfigs, WinningConfigItems, etc change as the AuctionManager moves through its motions. These changes are recorded in AuctionManagerState, a kind of mirror object that is instantiated during the `init_auction_manager` action.
+
+Specifically, for each WinningConfigItem, we need to record at the time of creation whether the primary sale had happened for later royalties measurement (because this could be changed during auction) and we need to record whether or not this particular WinningConfigItem has been claimed by the winner yet. We do similar things for Participation prize in it's own config.
+
+### BidRedemptionTicket
+
+This is created once per bid and keeps track of whether a given bidder has redeemed their main bid and their participation NFT. This is how the Metaplex contract guarantees a given bidder gets something in exchange for their BidderMetadata PDA in the Auction contract.
+
+BidRedemptionTickets always have PDAs of `['metaplex', auction_id, bidder_metadata_key]` where the `auction_id` is the address of the Auction and the `bidder_metadata_key` is the address of the BidderMetadata PDA that the Auction contract produced.
+
+### PayoutTicket
+
+For each creator, for each metadata(WinningConfigItem), for each winning place(WinningConfig) in an Auction, a PayoutTicket is created to record the sliver of income generated for that creator. There is also one made for the Auctioneer for every such case. And yes, it really is that specific. This means that a given creator may have quite a few PayoutTickets for a single AuctionManager, but each one represents a slightly different royalty payout.
+
+For instance, 1st place may have three items with 3 unique metadata won while 2nd place may have 4 metadata from 4 items, every item with a single unique creator. The split of funds in the 1st place is going to be 3 ways, while in 2nd place would be 4 ways. Even if 1st and 2nd place bids are the same, we want two records to reflect the royalties paid from 1st and 2nd place, because they would be different numbers in this case, and we want to preserve history.
+
+PayoutTickets always have PDAs of `['metaplex', auction_manager_id, winning_config_index, winning_config_item_index, creator_index, safety_deposit_key, destination_owner]` where `auction_manager_id` is the address of the AuctionManager account, `winning_config_index` is the 0-based index of the WinningConfig in the AuctionManager settings you paid out in this ticket, `winning_config_item_index` is the 0-based index of the WinningConfigItem in that WinningConfig, `creator_index` is the 0-based creator index in that Metadata's creator array that you paid out for that WinningConfigItem (or 'auctioneer' if paying the auctioneer for this item), `safety_deposit_key` is the address to the safety deposit box for this item, and `destination_owner` is the owner of the destination account where the monies are being sent. Yeah, I know, painful.
+
+### Store
+
+Every person who forks the repository to make their own storefront should have a unique store struct that is seeded by their own administrative wallet. These are created and updated by the idempotent `set_store` endpoint. Each store can choose to use it's own token, token-metadata, token-vault and auction programs if it so chooses, though right now we've got a hard check that the token program is actually the global spl-token program. The store also can be either public or private, which determines whether or not AuctionManagers can sell items that have all non-whitelisted creators on them or not. We take a "bouncer-knows-your-friend-and-lets-you-in" approach to selling items in whitelist-only stores - if an item has at least one *verified* Whitelisted Creator, then it can be sold.
+
+Store PDAs are always a PDA seed of `['metaplex', metaplex_program_id, admin_wallet]` where `metaplex_program_id` is the address of the Metaplex contract and `admin_wallet` is the wallet that is administering this store.
+
+### WhitelistedCreator
+
+A cousin of the simple Creator struct from the Metadata program, this is a foreign key connector between a creator address and a store. It denotes whether or not this creator is currently active in the store and if they are, allows items from them to be sold in it.
+
+WhitelistedCreator PDAs are always a PDA seed of `['metaplex', metaplex_program_id, store_key, creator_key]` where `metaplex_program_id` is the address of the Metaplex contract, `store_key` is the address of the storefront, and `creator_key` is obviously the address of the creator's wallet you are whitelisting.
+
+### SafetyDepositValidationTicket
+
+This PDA solely exists to prevent validating a safety deposit box twice, which could present security vulnerabilities. It is created for each safety deposit box when it is presented for validation.
+
+SafetyDepositValidationTickets are always PDAs with seed of `['metaplex', metaplex_program_id, auction_manager_id, safety_deposit_key]`where `metaplex_program_id` is the address of the Metaplex contract, `auction_manager_id` is the address of the AuctionManager, and `safety_deposit_key` is the address of the SafetyDepositBox being validated.
+
+### OriginalAuthorityLookup
+
+These are created during FullRightsTransfers. When a FullRightsTransfer is happening, the Metadata `updateAuthority` is shifted from the Auctioneer to the AuctionManager so that it can grant it in turn to the winner, and this record is created to keep track of who the original `updateAuthority` was to return it later if the item is not sold. That functionality (returns) is not implemented as of this writing but will be in the near future.
+
+OriginalAuthorityLookups always have PDAs with seed of `['metaplex', auction_id, metadata_key]` where `auction_id` is the address of the Auction and `metadata_key` is the address of the actual Metadata struct.
+
+### PrizeTrackingTicket
+
+Created on a distinct WinningConfigItem basis (ie by WinningConfigType AND mint) across all WinningConfigs, one PrizeTrackingTicket is created to keep track of how many expected redemptions there will be across all winners for a given MasterEdition, and what the supply was when the first person hit redeem, to keep track of the relative edition offsets each person should get relative to winner #1, #2, etc. This is used for redeeming PrintingV2 bids, to ensure winner #1 gets edition #1, and so on.
+
+### Concepts
+
+### Types of Token Sales
+
+There are five major types of token sales supported by the Metaplex protocol. Four are covered in the WinningConfigType enum, but this is a bit limiting as it is really only considering sales to *winners*, and leaves out the all-important Participation NFT which is a different kind of sale we will consider separately.
+
+**TokenOnlyTransfer:** Probably the easiest to understand, this is a straight up spl_token_transfer command wrapped in a bunch of Metaplex magic. At the end of the day, the auctioneer still owns the Metadata struct and any other associated PDAs, but someone else now has the physical token in their wallets. These tokens will still show up and work just fine in Phantom and other supported wallet clients because those clients can still look up the Metadata. This is the difference between owning the Metadata and owning the token. For a token that is an Edition, the difference is nominal, as an Edition has zero printing rights and is immutable. However, for a token that is a MasterEdition, the difference is *substantial*, as the owner of the Metadata can rename it, change its symbol, it's URI, and creators array.
+
+Note that owning the token itself is the *only* requirement for using the `update_primary_sale_happened_via_token` endpoint on the token metadata program *and* for using the `mint_new_edition_from_master_edition_via_token`.
+
+**FullRightsTransfer:** This is a TokenOnlyTransfer, except in addition, the `updateAuthority` on the Metadata struct is set to the new owner as well, so they now have all the rights and privileges associated with the original owner, including the right to mint printing tokens. They can even change the name and URI of your token, so be careful!
+
+**PrintingV1:** This token type represents a deprecated logic flow that will be removed in future editions and can only be accessed if using a MasterEditionV1 type of NFT. In this case, the safety deposit box in question does not contain the actual token, but a token from the token's Master Edition's `printing_mint`. This printing token gives the bearer the authorization to label any mint they have that has a supply of one and decimals zero as a child Edition of that Master Edition one time. This is how Metaplex used to do a Printing sale. It doesn't grant the winning bidder a Limited Edition NFT. It grants them a printing token, they make their own mint/token account combo, and take the printing token to the token metadata contract and label it themselves.
+
+**PrintingV2:** The Auction holds the Master Edition in the safety deposit box and uses it via the special `mint_new_edition_from_master_edition_via_vault_proxy` call on Token Metadata to mint editions for auction winners. Once all bids have been redeemed, the auction releases the Master Edition from this escrow via the `withdraw_master_edition` call on Metaplex. This flow makes use of the PrizeTrackingTicket to keep track of the starting supply when the first redemption happens so that as each bidder comes in to redeem, everybody gets the correct offset for their edition relative to the #1 winner.
+
+**Participation NFTs:** Treated just like a PrintingV2, except these are first-come-first-serve as far as edition-numbering goes. This endpoint will also collect payment if the participation config has a fixed price setting or is using the "use last bid" setting to charge the user based on their last bid. Note that charging users for participation NFTs only can happen if they lose. Since the user previously cancelled their bid if they lost, they will net no change or net the difference between their last bid and the fixed price.
+
+### Royalties
+
+Metadata come locked and stocked with arrays of creators, each with their own `share` and all guaranteed to sum to 100. The Metadata itself has a `seller_fee_basis_points` field that represents the share creators get out of the proceeds in any secondary sale and a `primary_sale_happened` boolean that distinguishes to the world whether or not this particular Metadata has experienced it's first sale or not. With all of this, Metaplex is able to do complete Royalty calculations after an Auction is over. It was mentioned above that on initialization, the Metaplex contract snapshots for each Metadata being sold the `primary_sale_happened` just in case the boolean is flipped during the auction so that royalties are calculated as-of initiation - this is important to note.
+
+At the end of the auction, anybody (permissionless) can cycle through each winning bid in the contract and ask the Metaplex contract to use its authority to call the Auction contract and pump the winning bid monies into the `accept_payment` escrow account via `claim_bid`. Once all winning bids have been settled into here, royalties are eligible to be paid out. We'll cover payouts of fixed price Participation NFTs separately.
+
+Now, anybody (permissionless) can cycle through each creator PLUS the auctioneer on each item in each winning bid and call `empty_payment_account` with an Associated Token Account that is owned by that creator or auctioneer and that action will calculate, using the creator's share or auctioneer's share of that item's metadata, and the fractional percentage of that item of the overall winning basket, to payout the creator or auctioneer from the escrow.
+
+Our front end implementation immediately calls the `update_primary_sale_happened` endpoint on token metadata for any token once redeemed for users so that if they re-sell, the `primary_sale_happened` boolean is taken into account in the `empty_payment_account` logic and only the basis points given in `seller_fee_basis_points` goes to the creators instead of the whole pie. The remaining part of the pie goes to the auctioneer doing the reselling.
+
+We don't do weighted items in winning baskets right now - if a winning basket has 3 unique metadata in it right now, it is split three ways, even if one of the metadata is disbursing 3 tokens while the other is disbursing 2. This may come in a future version. Once this cycle is complete, the escrow account is usually empty.
+
+Things get a little complex when participation NFTs come into play. When a participation NFT has a fixed price, it is only paid in the case of non-winners. What they first do is cancel their bid, getting a refund, and then they redeem their participation bid with the `redeem_participation_bid` endpoint. This charges them the fixed price and dumps those funds into the `accept_payment` account. At intervals, someone must come and turn the crank to dump the proceeds to the creators of the Participation NFT from the latest redeemers of that NFT because they will only receive proceeds as people come and redeem and pay for them.
+
+Note because our front end implementation chooses to use SOL instead of a generic SPL token, we use a Wrapped SOL ATA account for creators. They are then forced to use a drop down menu to liquidate and close the Wrapped SOL ATA account when they next login, absorbing the Wrapped SOL back into their normal SOL wallets. If you choose not to use SOL in your implementation, you will not have this difficulty.
+
+### Validation
+
+Just because you provide a vault to an AuctionManager and an AuctionManagerSettings declaring this vault is filled with wonderful prizes *does not* believe that Metaplex will believe you. For every safety deposit box indexed in a WinningConfigItem, there must be a call to `validate_safety_deposit_box` after initiation where the safety deposit box is provided for inspection to the Metaplex contract so that it can verify that there are enough tokens, and of the right type, to pay off all winners in the auction.
+
+Given how irritating this process is, we may in the future merge token-vault with metaplex, or simply copy over the parts of it that are relevant, leaving token-vault out for those interested in experimenting with fractionalization.
+
+### Unwon Items
+
+Any Token Only Transfer item, or MasterEditionV1/MasterEditionV2 stored for a Full Rights Transfer unwon in an Auction can be returned to the Auction Manager by calling the `redeem_unused_winning_config_items_as_auctioneer` end point. It acts as a proxy, calling the `redeem_bid` or `redeem_full_rights_transfer_bid` depending on how it is parameterized, and passing in a winning_index that overrides the actual winning_index that would be detected for the bidder_info key being passed in (which is the auctioneer's in this case.) In this way the auctioneer acts not as a winning bidder but as a generic "non-bidder" who empties each prize that has no bidder using the same redemption flow. For MasterEditionV2s stored for PrintingV2 or Participation prizes, these can be withdrawn using `withdraw_edition`.
diff --git a/CandyMachine-Storefront/store/DISCLAIMER.md b/CandyMachine-Storefront/store/DISCLAIMER.md
new file mode 100644
index 0000000..ee9f922
--- /dev/null
+++ b/CandyMachine-Storefront/store/DISCLAIMER.md
@@ -0,0 +1,5 @@
+# Disclaimer
+
+All claims, content, designs, algorithms, estimates, roadmaps, specifications, and performance measurements described in this project are done with the Metaplex Foundation’s ("MF") best efforts. It is up to the reader to check and validate their accuracy and truthfulness. Furthermore nothing in this project constitutes a solicitation for investment.
+Any content produced by MF or developer resources that MF provides, are for educational and inspiration purposes only. MF does not encourage, induce or sanction the deployment, integration or use of any such applications in violation of applicable laws or regulations and hereby prohibits any such deployment, integration or use. This includes use of any such applications by the reader (a) in violation of export control or sanctions laws of the United States or any other applicable jurisdiction, (b) if the reader is located in or ordinarily resident in a country or territory subject to comprehensive sanctions administered by the U.S. Office of Foreign Assets Control (OFAC), or (c) if the reader is or is working on behalf of a Specially Designated National (SDN) or a person subject to similar blocking or denied party prohibitions.
+The reader should be aware that U.S. export control and sanctions laws prohibit U.S. persons (and other persons that are subject to such laws) from transacting with persons in certain countries and territories or that are on the SDN list. It is possible that such sanctioned persons may nevertheless bypass prohibitions, obtain the code comprising the Metaplex protocol (or other project code or applications) and deploy, integrate, or otherwise use it. Accordingly, there is a risk to individuals that other persons using the Metaplex protocol may be sanctioned persons and that transactions with such persons would be a violation of U.S. export controls and sanctions law. This risk applies to individuals, organizations, and other ecosystem participants that deploy, integrate, or use the Metaplex protocol code directly (e.g., as a node operator) or indirectly.
diff --git a/CandyMachine-Storefront/store/Dockerfile b/CandyMachine-Storefront/store/Dockerfile
new file mode 100644
index 0000000..4678c0e
--- /dev/null
+++ b/CandyMachine-Storefront/store/Dockerfile
@@ -0,0 +1,47 @@
+# Stage 1: Compile and Build the app
+
+# Node veersion
+FROM node:14.17.3-alpine as build
+
+# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
+RUN apk add --no-cache libc6-compat git
+
+# Set the working directory
+WORKDIR /app
+
+# Add the source code to app
+COPY ./js /app
+
+# Install all the dependencies
+RUN yarn install --frozen-lockfile
+RUN yarn bootstrap
+
+# HERE ADD YOUR STORE WALLET ADDRESS
+ENV REACT_APP_STORE_OWNER_ADDRESS_ADDRESS=""
+
+# Generate the build of the application
+RUN yarn build
+
+# Stage 2: Serve app with nginx server
+
+# Production image, copy all the files and run next
+FROM node:14.17.3-alpine AS runner
+WORKDIR /app
+
+ENV NODE_ENV production
+
+RUN addgroup -g 1001 -S nodejs
+RUN adduser -S nextjs -u 1001
+
+# Copy the build output to replace the default nginx contents.
+COPY --from=build /app/packages/web/next.config.js ./
+COPY --from=build /app/packages/web/public ./public
+COPY --from=build --chown=nextjs:nodejs /app/packages/web/.next ./.next
+COPY --from=build /app/node_modules ./node_modules
+COPY --from=build /app/packages/web/package.json ./package.json
+
+USER nextjs
+
+EXPOSE 3000
+
+CMD ["yarn", "start:prod"]
diff --git a/CandyMachine-Storefront/store/LICENSE b/CandyMachine-Storefront/store/LICENSE
new file mode 100644
index 0000000..94ee35f
--- /dev/null
+++ b/CandyMachine-Storefront/store/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2021 SOLBROS
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/CandyMachine-Storefront/store/README.md b/CandyMachine-Storefront/store/README.md
new file mode 100644
index 0000000..c5b19b0
--- /dev/null
+++ b/CandyMachine-Storefront/store/README.md
@@ -0,0 +1,13 @@
+
diff --git a/CandyMachine-Storefront/store/docs/create-store.md b/CandyMachine-Storefront/store/docs/create-store.md
new file mode 100644
index 0000000..8b6c7ce
--- /dev/null
+++ b/CandyMachine-Storefront/store/docs/create-store.md
@@ -0,0 +1,68 @@
+# Create Store
+
+To create a storefront powered by Metaplex, you need to create a store on the Metaplex platform. This guide will outline
+steps you need to take to create your store. After creating your store, this guide will show you how to manage your
+store information, such as who to whitelist as creators.
+
+## Prerequisites
+* You should have an understanding of `React` concepts such as hooks. Please refer to the React documentation
+ [here](https://reactjs.org/docs/getting-started.html).
+* To create your store, you will need to have a wallet that contains token to perform your transactions.
+* Knowing what the different `packages` are and what are their purposes would help but isn't required
+
+## Getting Started
+
+### Setting Up the Store ID
+
+To create a store, you must first derive the store ID given your public address. The Metaplex devs have already created
+an environment variable for you to utilize - `REACT_APP_STORE_OWNER_ADDRESS_ADDRESS` - which you should set to be your
+wallet public address. To do this, you can create a `.env` file in `packages/web`, and set
+`REACT_APP_STORE_OWNER_ADDRESS_ADDRESS` to be your wallet public address in there.
+
+```
+REACT_APP_STORE_OWNER_ADDRESS_ADDRESS=YOUR_PUBLIC_WALLET_ADDRESS
+```
+
+### Create Your Store
+
+After creating your store ID, you may now create your store. The Metaplex platform has many helper methods to help you
+to create your store. To create your store, you can use the `saveAdmin` method (`packages/web/src/actions/saveAdmin`)
+The easiest way to do this would be to either create a script or render a button locally to click to call this method.
+Please look at the function parameters of `saveAdmin` to see what parameters you would like to pass in:
+
+```js
+saveAdmin(connection, wallet, false, [])
+```
+
+If you opted to create a button or something to click to call this method, here are some small snippets:
+
+```js
+// These are hooks you should insert at the top of the component your rendering your button in
+const { wallet } = useWallet();
+const connection = useConnection();
+```
+
+```js
+// The button to render somewhere for you to click
+
+```
+
+You will be required to confirm your transactions if you decided to put a button or something to click. After clicking
+the button, make sure you don't browse anywhere else or close the website.
+
+### Adding Your Information
+
+After creating your store, you must also insert your wallet public key and information in `userNames.json` at
+`packages/web/src/config/userNames.json`. Make sure you follow the same format as the other objects in this file.
+
+### Accessing the Admin Panel
+
+After creating your store, you can now access `YOUR_URL/#/admin`. This is where you can edit your store and add
+whitelisted creators. Add yourself if you need to or make it a public store, so anyone can create NFTs in your store.
+Remember to click save after making your changes.
diff --git a/CandyMachine-Storefront/store/docs/deploy.md b/CandyMachine-Storefront/store/docs/deploy.md
new file mode 100644
index 0000000..7fec7ab
--- /dev/null
+++ b/CandyMachine-Storefront/store/docs/deploy.md
@@ -0,0 +1,63 @@
+# Deploy
+
+## GitHub Pages
+
+Primarily you need to specify your repo in `js/packages/web/package.json` file
+
+Pay attention to these two lines:
+
+```json
+"deploy:gh": "yarn export && gh-pages -d ../../build/web --repo https://github.com/metaplex-foundation/metaplex -t true",
+"deploy": "cross-env ASSET_PREFIX=/metaplex/ yarn build && yarn deploy:gh",
+```
+
+There are 2 things to change:
+
+- specify your repo URL instead of `https://github.com/metaplex-foundation/metaplex` (for example, `https://github.com/my-name/my-metaplex`)
+- set `ASSET_PREFIX` to repo name (for example, `ASSET_PREFIX=/my-metaplex/`)
+
+After that, the lines will look like this:
+
+```json
+"deploy:gh": "yarn export && gh-pages -d ../../build/web --repo https://github.com/my-name/my-metaplex -t true",
+"deploy": "cross-env ASSET_PREFIX=/my-metaplex/ yarn build && yarn deploy:gh",
+```
+
+And after that, you can publish the Metaplex app to GitHub Pages by the following commands:
+
+```bash
+cd js/packages/web
+yarn deploy
+```
+
+Note that if you have 2fa enabled, you'll need to use a personal access token as your password:
+
+https://docs.github.com/en/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token
+
+### GitHub Pages with a custom domain
+
+If you have a custom domain linked to the GitHub Pages in your repo, then the instructions are the same as above, but your need to remove `ASSET_PREFIX` from the deploy script:
+
+```json
+"deploy:gh": "yarn export && gh-pages -d ../../build/web --repo https://github.com/my-name/my-metaplex -t true"
+"deploy": "yarn build && yarn deploy:gh",
+```
+
+The publishing commands are the same:
+
+```bash
+cd js/packages/web
+yarn deploy
+```
+
+## Vercel
+
+To publish the Metaplex app to Vercel, you first need to visit [https://vercel.com/](https://vercel.com/) and create a new project linked to your github repo. Then, create a `pages/` directory under `js`.
+
+After that, configure this project with the following settings:
+
+- Framework: `Next.js`
+- Root directory: `js`
+- Output directory: `packages/web/.next`
+
+One last thing: specify `REACT_APP_STORE_OWNER_ADDRESS_ADDRESS` in the Environment Variables section
diff --git a/CandyMachine-Storefront/store/js/.eslintrc.js b/CandyMachine-Storefront/store/js/.eslintrc.js
new file mode 100644
index 0000000..238d438
--- /dev/null
+++ b/CandyMachine-Storefront/store/js/.eslintrc.js
@@ -0,0 +1,33 @@
+module.exports = {
+ env: {
+ browser: true,
+ es6: true,
+ },
+ extends: [
+ "eslint:recommended",
+ "plugin:react/recommended",
+ "plugin:@typescript-eslint/eslint-recommended"
+ ],
+ globals: {
+ Atomics: 'readonly',
+ SharedArrayBuffer: 'readonly',
+ },
+ parser: '@typescript-eslint/parser',
+ parserOptions: {
+ ecmaFeatures: {
+ jsx: true,
+ },
+ ecmaVersion: 2018,
+ },
+ plugins: ['react', '@typescript-eslint'],
+ settings: {
+ react: {
+ pragma: 'React',
+ version: '17.0.2',
+ },
+ },
+ rules: {
+ 'no-unused-vars': 'off',
+ '@typescript-eslint/no-unused-vars': ['error'],
+ },
+};
diff --git a/CandyMachine-Storefront/store/js/.tool-versions b/CandyMachine-Storefront/store/js/.tool-versions
new file mode 100644
index 0000000..734e8b0
--- /dev/null
+++ b/CandyMachine-Storefront/store/js/.tool-versions
@@ -0,0 +1 @@
+nodejs 14.17.1
diff --git a/CandyMachine-Storefront/store/js/README.md b/CandyMachine-Storefront/store/js/README.md
new file mode 100644
index 0000000..efa1136
--- /dev/null
+++ b/CandyMachine-Storefront/store/js/README.md
@@ -0,0 +1,31 @@
+## Setup
+
+Be sure to be running Node v14.17.6 and yarn version 1.22.10.
+
+`yarn bootstrap`
+
+Then run:
+
+`yarn start`
+
+You may have to rebuild your package more than one time to secure a
+running environment.
+
+## Known Issues
+
+### Can't find CSS files in common
+
+Common currently uses a less library to compile down less files into css in both the src directory for the TS server
+in vscode to pick up and in the dist folder for importers like lending and proposal projects to pick up. If you do not see these files appear when running the `npm start lending` or other commands, and you see missing CSS errors,
+you likely did not install the packages for common correctly. Try running:
+
+`lerna exec npm install --scope @oyster/common` to specifically install packages for common.
+
+Then, test that css transpiling is working:
+
+`lerna exec npm watch-css-src --scope @oyster/common` and verify css files appear next to their less counterparts in src.
+
+## ⚠️ Warning
+
+Any content produced by Solana, or developer resources that Solana provides, are for educational and inspiration purposes only. Solana does not encourage, induce or sanction the deployment of any such applications in violation of applicable laws or regulations.
+
diff --git a/CandyMachine-Storefront/store/js/assets/wallets/ledger.svg b/CandyMachine-Storefront/store/js/assets/wallets/ledger.svg
new file mode 100644
index 0000000..feb6840
--- /dev/null
+++ b/CandyMachine-Storefront/store/js/assets/wallets/ledger.svg
@@ -0,0 +1,19 @@
+
diff --git a/CandyMachine-Storefront/store/js/assets/wallets/mathwallet.svg b/CandyMachine-Storefront/store/js/assets/wallets/mathwallet.svg
new file mode 100644
index 0000000..588ace9
--- /dev/null
+++ b/CandyMachine-Storefront/store/js/assets/wallets/mathwallet.svg
@@ -0,0 +1,14 @@
+
+
\ No newline at end of file
diff --git a/CandyMachine-Storefront/store/js/assets/wallets/metamask.svg b/CandyMachine-Storefront/store/js/assets/wallets/metamask.svg
new file mode 100644
index 0000000..a04dcfe
--- /dev/null
+++ b/CandyMachine-Storefront/store/js/assets/wallets/metamask.svg
@@ -0,0 +1,31 @@
+
diff --git a/CandyMachine-Storefront/store/js/assets/wallets/solflare.svg b/CandyMachine-Storefront/store/js/assets/wallets/solflare.svg
new file mode 100644
index 0000000..73352b8
--- /dev/null
+++ b/CandyMachine-Storefront/store/js/assets/wallets/solflare.svg
@@ -0,0 +1,11 @@
+
diff --git a/CandyMachine-Storefront/store/js/assets/wallets/sollet.svg b/CandyMachine-Storefront/store/js/assets/wallets/sollet.svg
new file mode 100644
index 0000000..3440890
--- /dev/null
+++ b/CandyMachine-Storefront/store/js/assets/wallets/sollet.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/CandyMachine-Storefront/store/js/assets/wallets/solong.png b/CandyMachine-Storefront/store/js/assets/wallets/solong.png
new file mode 100644
index 0000000000000000000000000000000000000000..4ad300895bb97fc852fff6bf221f0320b644e21f
GIT binary patch
literal 1843
zcmV-32h8}1P)%xKL7v#2XskIMF->x9Rn2roH0C_000KkNklvTA|X~qV`7XADr)qH291asHK9WAMHG@IpwWcjBPJN+(Y?G8
z@R5k1Q3M}o4Mf^qY5{?EJTrGNbUWYlLVNe_&^gJMY&Lu6%zS%h&SPe-<5;m`#flXx
zR;*aDVkIPDiGG9!2-5+o9JV3S>5-abKC5ZDpD-O@3Y*jxNz;={xKE?!PSO)KjJ&lG
z>UaZz0endqo4T2%1Y^06Phz)AVoxpVjEuLnt@V`feed0E5~}DCzP@O>#UDbQF;H
zE#X3io>7E0pywyTNK>cp8ZfBc4s!=7AE{|s2FPn73Ku>@FOJE0Pg
zS4?P8kk>(&2K3}pd;0)^4~pq+sP$D~>r3PT04#Zxh$XBgp_LeEh`zRBMA
zWQ)e)N
z>!O~uDXrsc5sIj%as#l!-7KEW2NpjU=-H1Pmnl=Zl<+UGj*05Huw^Kbl?1u*T|m$I
zgeI698y**a0OK_r7cKx+_^C$EOF+*$(>-z(7}#$#uqYs~0_4Xjc3Ub3=ot;xTwXIA
zV6rnA2=Z21_}z;DfklM1gjx(6Rjodo^0N%I^cw31%{elJ=>TzH
zok9;^B3=d_nBz%P3#;#I_H0+uZ*n^a(9OKC`i^FAcnf7Bu{1s0^5%i^KF2OmwK2@{
z@(3@;?M)Syr`PK!`{0)M6k!d(3R?R{DJ*Y>M$bw!H`c9K$<$Q6SDp?C8;|)9=-p!a
z{UpLOgf|Iq$^MR=R{4ZONAy>YU^7B
zddJ^t<#CVGZS$}=TiCY=OpNokIM2A<)?lkR*-Ri$-EazdI{3z6>!W>hfe-tL@7gq*P^aRdpgLJ7T|998Zb`_~
zcyBKR(fi0!3j*ro7Dw;;6ZeE{g;O=o#1D>(HUjSCqnZwE4la-M)wjVtC?<4>}Ft=2bounN(b19d0b9z8rvAhv=$cMf!#N{6&
zge7kDIVg_rWiWoR!xs5zJ1TSVIo)iMpNb#RS?p{ku~Kv45S5wu^nb&9=RqP)xJllC
zpDF{}B_0_fUh~`TZge-#6iaLhakp-pc(;Pl!r$HEy(=cu*t&m;vMy!4epBc
zHvaT3VmC&dvr70CeD5aFGEMQJC*bSttAv5hSuJeS$*iS8=A=C#t;5SK5-$ob-sgl@
zti{{a67Lay^+_5J#CH&07k7@C8*{AuUj(>7dTxI5^>MK=
+
+
diff --git a/CandyMachine-Storefront/store/js/assets/wallets/wormhole.svg b/CandyMachine-Storefront/store/js/assets/wallets/wormhole.svg
new file mode 100644
index 0000000..aecd949
--- /dev/null
+++ b/CandyMachine-Storefront/store/js/assets/wallets/wormhole.svg
@@ -0,0 +1,3857 @@
+
diff --git a/CandyMachine-Storefront/store/js/deploy-web.bat b/CandyMachine-Storefront/store/js/deploy-web.bat
new file mode 100644
index 0000000..03ea552
--- /dev/null
+++ b/CandyMachine-Storefront/store/js/deploy-web.bat
@@ -0,0 +1,13 @@
+ECHO "Starting to deploy 'web', bootstrapping..."
+yarn bootstrap
+ECHO "Preparing 'common'..."
+CD packages\common
+yarn prepare
+yarn build-css
+CD ..\web
+ECHO "Prestarting 'web'..."
+yarn prestart
+ECHO "Building 'web'..."
+# TODO: fix linting errors!
+SET CI=false && yarn build
+ECHO "#done"
diff --git a/CandyMachine-Storefront/store/js/deploy-web.sh b/CandyMachine-Storefront/store/js/deploy-web.sh
new file mode 100755
index 0000000..2ca32da
--- /dev/null
+++ b/CandyMachine-Storefront/store/js/deploy-web.sh
@@ -0,0 +1,13 @@
+#!/usr/bin/env bash
+echo "Starting to deploy 'web', bootstrapping..."
+yarn bootstrap
+echo "Preparing 'common'..."
+cd packages/common || exit
+yarn prepare
+cd ../web || exit
+echo "Prestarting 'web'..."
+yarn prestart
+echo "Building 'web'..."
+# TODO: fix linting errors!
+CI=false && yarn build
+echo "#done"
diff --git a/CandyMachine-Storefront/store/js/lerna.json b/CandyMachine-Storefront/store/js/lerna.json
new file mode 100644
index 0000000..ee6a86a
--- /dev/null
+++ b/CandyMachine-Storefront/store/js/lerna.json
@@ -0,0 +1,22 @@
+{
+ "lerna": "3.4.3",
+ "version": "independent",
+ "packages": ["packages/*"],
+ "npmClient": "yarn",
+ "useWorkspaces": true,
+ "publishConfig": {
+ "access": "public",
+ "registry": "https://registry.npmjs.org"
+ },
+ "ignoreChanges": [
+ "**/__tests__/**",
+ "**/*.md"
+ ],
+ "command": {
+ "publish": {
+ "conventionalCommits": true,
+ "allowBranch": ["master", "next"],
+ "message": "chore(release): Publish"
+ }
+ }
+}
diff --git a/CandyMachine-Storefront/store/js/package.json b/CandyMachine-Storefront/store/js/package.json
new file mode 100644
index 0000000..b8632ff
--- /dev/null
+++ b/CandyMachine-Storefront/store/js/package.json
@@ -0,0 +1,80 @@
+{
+ "private": true,
+ "workspaces": {
+ "packages": [
+ "packages/*"
+ ]
+ },
+ "keywords": [],
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=14.17"
+ },
+ "scripts": {
+ "bootstrap": "lerna link && lerna bootstrap",
+ "build": "lerna run build",
+ "start": "cross-env CI=true lerna run start --scope @oyster/common --stream --parallel --scope web",
+ "lint": "prettier -c 'packages/*/{src,test}/**/*.ts' && npm run lint:eslint",
+ "lint:eslint": "eslint 'packages/*/{src,test}/**/*.ts'",
+ "lint:fix": "prettier --write 'packages/*/{src,test}/**/*.{ts,tsx}' && eslint --fix 'packages/*/{src,test}/**/*.ts'",
+ "format:fix": "lerna run format:fix",
+ "deploy": "run-s deploy:docs build deploy:apps && gh-pages -d docs",
+ "deploy:docs": "lerna run docs",
+ "deploy:apps": "lerna run deploy:app",
+ "test": "lerna run test --concurrency 1 --stream"
+ },
+ "lint-staged": {
+ "packages/*/{src,test}/**/*.ts": [
+ "prettier --write",
+ "eslint --cache --fix --max-warnings=0"
+ ]
+ },
+ "resolutions": {
+ "@types/react": "^17.0.16"
+ },
+ "husky": {
+ "hooks": {
+ "pre-commit": "lint-staged"
+ }
+ },
+ "prettier": {
+ "arrowParens": "avoid",
+ "semi": true,
+ "singleQuote": true,
+ "trailingComma": "all"
+ },
+ "commitlint": {
+ "extends": [
+ "@commitlint/config-conventional"
+ ]
+ },
+ "dependencies": {
+ "cross-env": "^7.0.3",
+ "next": "^11.0.1",
+ "react": "^17.0.2",
+ "react-dom": "^17.0.2"
+ },
+ "devDependencies": {
+ "@commitlint/cli": "^8.2.0",
+ "@commitlint/config-conventional": "^8.2.0",
+ "@types/animejs": "^3.1.3",
+ "@types/jest": "^24.0.0",
+ "@typescript-eslint/eslint-plugin": "^4.6.0",
+ "@typescript-eslint/parser": "^4.6.0",
+ "eslint-plugin-react": "^7.25.1",
+ "eslint": "^7.11.0",
+ "eslint-config-prettier": "^6.15.0",
+ "gh-pages": "^3.1.0",
+ "husky": "^4.3.0",
+ "jest": "26.6.0",
+ "jest-config": "24.9.0",
+ "lerna": "3.22.1",
+ "lint-staged": "^10.5.0",
+ "npm-run-all": "^4.1.5",
+ "prettier": "^2.1.2",
+ "rimraf": "^3.0.2",
+ "ts-jest": "^24.0.0",
+ "ts-node": "^9.0.0",
+ "typescript": "^4.1.3"
+ }
+}
diff --git a/CandyMachine-Storefront/store/js/packages/cli/.nvmrc b/CandyMachine-Storefront/store/js/packages/cli/.nvmrc
new file mode 100644
index 0000000..62df50f
--- /dev/null
+++ b/CandyMachine-Storefront/store/js/packages/cli/.nvmrc
@@ -0,0 +1 @@
+14.17.0
diff --git a/CandyMachine-Storefront/store/js/packages/cli/README.md b/CandyMachine-Storefront/store/js/packages/cli/README.md
new file mode 100644
index 0000000..d76ea76
--- /dev/null
+++ b/CandyMachine-Storefront/store/js/packages/cli/README.md
@@ -0,0 +1,208 @@
+# CANDY MACHINE
+
+https://user-images.githubusercontent.com/81876372/133098938-dc2c91a6-1280-4ee1-bf0e-db0ccc972ff7.mp4
+
+## Creating generative art
+
+1. Create a `traits` folder and create a list of directories for the traits (i.e. background, shirt, sunglasses). Look at the `example-traits` for guidance
+2. Run the following command to create a configuration file called `traits-configuration.json`:
+
+```
+metaplex generate_art_configurations
+ts-node cli generate_art_configurations
+```
+
+The following file will be generated (based off of `example-traits`):
+
+```json
+{
+ "name": "",
+ "symbol": "",
+ "description": "",
+ "creators": [],
+ "collection": {},
+ "breakdown": {
+ "background": {
+ "blue.png": 0.04,
+ "brown.png": 0.04,
+ "flesh.png": 0.05,
+ "green.png": 0.02,
+ "light-blue.png": 0.06,
+ "light-green.png": 0.01,
+ "light-pink.png": 0.07,
+ "light-purple.png": 0.05,
+ "light-yellow.png": 0.06,
+ "orange.png": 0.07,
+ "pink.png": 0.02,
+ "purple.png": 0.03,
+ "red.png": 0.05,
+ "yellow.png": 0.43
+ },
+ "eyes": {
+ "egg-eyes.png": 0.3,
+ "heart-eyes.png": 0.12,
+ "square-eyes.png": 0.02,
+ "star-eyes.png": 0.56
+ },
+ "face": {
+ "cyan-face.png": 0.07,
+ "dark-green-face.png": 0.04,
+ "flesh-face.png": 0.03,
+ "gold-face.png": 0.11,
+ "grapefruit-face.png": 0.07,
+ "green-face.png": 0.05,
+ "pink-face.png": 0.05,
+ "purple-face.png": 0.02,
+ "sun-face.png": 0.1,
+ "teal-face.png": 0.46
+ },
+ "mouth": {
+ "block-mouth.png": 0.23,
+ "smile-mouth.png": 0.09,
+ "triangle-mouth.png": 0.68
+ }
+ },
+ "order": ["background", "face", "eyes", "mouth"],
+ "width": 1000,
+ "height": 1000
+}
+```
+
+3. Go through and customize the fields in the `traits-configuration.json`, such as `name`, `symbol`, `description`, , `creators`, `collection`, `width`, and `height`.
+4. After you have adjusted the configurations to your heart's content, you can run the following command to generate the JSON files along with the images.
+
+```
+metaplex create_generative_art -c -n
+ts-node cli create_generative_art -c -n
+```
+
+5. This will create an `assets` folder, with a set of the JSON and PNG files to make it work!
+
+## assets folder
+
+- Folder with file pairs named with incrementing integer numbers starting from 0.png and 0.json
+- the image HAS TO be a `PNG`
+- JSON format can be checked out here: https://docs.metaplex.com/nft-standard. example below:
+
+```json
+{
+ "name": "Solflare X NFT",
+ "symbol": "",
+ "description": "Celebratory Solflare NFT for the Solflare X launch",
+ "seller_fee_basis_points": 0,
+ "image": "https://www.arweave.net/abcd5678?ext=png",
+ "animation_url": "https://www.arweave.net/efgh1234?ext=mp4",
+ "external_url": "https://solflare.com",
+ "attributes": [
+ {
+ "trait_type": "web",
+ "value": "yes"
+ },
+ {
+ "trait_type": "mobile",
+ "value": "yes"
+ },
+ {
+ "trait_type": "extension",
+ "value": "yes"
+ }
+ ],
+ "collection": {
+ "name": "Solflare X NFT",
+ "family": "Solflare"
+ },
+ "properties": {
+ "files": [
+ {
+ "uri": "https://www.arweave.net/abcd5678?ext=png",
+ "type": "image/png"
+ },
+ {
+ "uri": "https://watch.videodelivery.net/9876jkl",
+ "type": "unknown",
+ "cdn": true
+ },
+ {
+ "uri": "https://www.arweave.net/efgh1234?ext=mp4",
+ "type": "video/mp4"
+ }
+ ],
+ "category": "video",
+ "creators": [
+ {
+ "address": "SOLFLR15asd9d21325bsadythp547912501b",
+ "share": 100
+ }
+ ]
+ }
+}
+```
+
+Install and build
+
+```
+yarn install
+yarn build
+yarn run package:linuxb
+OR
+yarn run package:linux
+OR
+yarn run package:macos
+```
+
+You can now either use `metaplex` OR the `ts-node cli` to execute the following commands.
+
+1. Upload your images and metadata. Refer to the NFT [standard](https://docs.metaplex.com/nft-standard) for the correct format.
+
+```
+metaplex upload ~/nft-test/mini_drop --keypair ~/.config/solana/id.json
+ts-node cli upload ~/nft-test/mini_drop --keypair ~/.config/solana/id.json
+```
+
+2. Verify everything is uploaded. Rerun the first command until it is.
+
+```
+metaplex verify --keypair ~/.config/solana/id.json
+ts-node cli verify --keypair ~/.config/solana/id.json
+```
+
+3. Create your candy machine. It can cost up to ~15 solana per 10,000 images.
+
+```
+metaplex create_candy_machine -k ~/.config/solana/id.json -p 1
+ts-node cli create_candy_machine -k ~/.config/solana/id.json -p 3
+```
+
+4. Set the start date and update the price of your candy machine.
+
+```
+metaplex update_candy_machine -k ~/.config/solana/id.json -d "20 Apr 2021 04:20:00 GMT" -p 0.1
+ts-node cli update_candy_machine -k ~/.config/solana/id.json -d "20 Apr 2021 04:20:00 GMT" -p 0.1
+```
+
+5. Test mint a token (provided it's after the start date)
+
+```
+metaplex mint_one_token -k ~/.config/solana/id.json
+ts-node cli mint_one_token -k ~/.config/solana/id.json
+```
+
+6. Check if you received any tokens.
+
+```
+spl-token accounts
+```
+
+7. If you are listed as a creator, run this command to sign your NFTs post sale. This will sign only the latest candy machine that you've created (stored in .cache/candyMachineList.json).
+
+```
+metaplex sign_candy_machine_metadata -k ~/.config/solana/id.json
+ts-node cli sign_candy_machine_metadata -k ~/.config/solana/id.json
+```
+
+8. If you wish to sign metadata from another candy machine run with the --cndy flag.
+
+```
+metaplex sign_candy_machine_metadata -k ~/.config/solana/id.json --cndy CANDY_MACHINE_ADDRESS_HERE
+ts-node cli sign_candy_machine_metadata -k ~/.config/solana/id.json --cndy CANDY_MACHINE_ADDRESS_HERE
+```
diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-assets/0.json b/CandyMachine-Storefront/store/js/packages/cli/example-assets/0.json
new file mode 100644
index 0000000..c753d27
--- /dev/null
+++ b/CandyMachine-Storefront/store/js/packages/cli/example-assets/0.json
@@ -0,0 +1 @@
+{"name":"1","symbol":"","image":"0.png","properties":{"files":[{"uri":"0.png","type":"image/png"}],"category":"image","creators":[]},"description":"","seller_fee_basis_points":500,"attributes":[{"trait_type":"background","value":"blue"},{"trait_type":"eyes","value":"star-eyes"},{"trait_type":"mouth","value":"triangle-mouth"},{"trait_type":"face","value":"teal-face"}],"collection":{}}
\ No newline at end of file
diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-assets/0.png b/CandyMachine-Storefront/store/js/packages/cli/example-assets/0.png
new file mode 100644
index 0000000000000000000000000000000000000000..fa7eff0e6e7c16166d9dec9307ebe99d7284776b
GIT binary patch
literal 8990
zcmb_?XH-*N*DbwD@7+cd0TC4lCJ-VbU79?UfQU*5fglQmhy)O&h^P^12~|LfN|6MD
zf`WpELq|FyaOjT`f&>Cz@O|$)zH!HMzdP<2cVuVnJ?ENh?z7j)k0j$HU$ik3;FINJ
zVPO$4zi`f;g@qm5e{--inU>VgL(GZ82W|~#VR@C#zvIQp#H``=W+p6E6!`@vICjy>
z(ezkuI&*39@H@aJr~AB=_vk_B(|4ws{o+=p@jQ~s_hS`rT-Rdda$!BNTDKU*!g7$s
z{2biz*2r?MZGhZ2(T^G?!MxGBt~_6Ec`KUGWm8Z59CYPqT|dt=6KLxFsIpF4`a1dC
zYia3;z-80R&$hy}bzh0O1sm$Ex;0RmBPg)9;TWgVU8>S&j9R3qA}hfGYa;?N1;ziT
zh1ma1@W~K#(ekoS%G$7Gi7}nsh7t{uary$F@7mTo3lJW@LN`^G$9|5Nbc
zMZ5CfqidMhUR_};(!=JN_^=h@uvMOv09J>VLn!Upvoo!EGF1M!ejNfyeZEnWmV@v1
zk8`?|fc!M3v=M{1C1m*wP_D6~kNxc`LVQpU?N;&F&z!~Qo2x{bgRg4E4@LL@x>vO9
zMTmxTE*GUvZkp}aMjQ&q^e22_*f9ycMmWMq?2qnxnze#7J>hDlw@GA&d=}(5wd`uO
z1cBt8W~m?!p{?I&G}7bdYv!4&VP27Tv9J?%HO&Bgo5sU1;p^2QB>5gTS)|}?i%(SY
zjCa%|j<>eKJuO1ZdB*L;l3WMh<86yBRPr#A?`kEKAENd)RBL{fCm8yFKbUQB6qK^B
zN#h;=c!{e%t1S*z(UmAzTlhYX{J7OggqX?8sG7sBUNtex8BCa4?Vf_;J@4@=h!L~>
z1cHLw?s!DUO{h}cDnF)jVOPJ5*&R@1p}(YYD0t~`v!KocH(EZ_+Y$<@tBRIpD
zOx>IoVTerFgqpMn&qHY3XqDB0xA9~ZYMdVEaI#^v%LVQ!+BiOZoda$1J<&T`0EJ2K
zGENOT1AP0KMGI2_4644R1*tI6H(Hn^6Un3pNivblW*8R}xugfRp4-GN{!=I;cs~4z
z*yv287;09QO^6FH9%4sP?k7pKqFHL2@*b?OMCqwnTl;7+6J
zL+@4QXrZdc4@v#qdWPbup&B@|Qx{eaY!w`vd!h9Q{NYP^(blN$p@X(y;LJrg15>bR
z=_u*IsH+dsombPxs3RRFCY}rr)BrjAF@%}DTrNSnq#?;l|>=J>Ayr3=zr5JHhUfruiE$O
zsx5k+*a2E5fUwW(+-zn0l8s^nKB1Vp^xvZEA{>H#h|>R>lSDZ@Xh0ec$a>+{d+IV0;*d=eCybs43S@C)Lvcc=ey|j
zYD@W?cUXQl!l>5Z{F6S%v^kzeN90U^7z
zlkcUbtL<9f_#8kdhdp+t1Dh9H-<(XGXigtZ4SQssm&p*GwI^-npxr=S@gb|;<~0J=
z$D0q@z8*?yJQ|hbm@bm1;Q%HbG|TeUZr~TqgF1kgDTP+Fxi0RMzh7DrhNR810$E!g
zh~%LyLEV(Xoe<(cbjNRbGrsP2;i#9J^08el^)e&hzo;aH3B)
z2YrO5rd>%83Tg|#%+`Eqt7Uoi5jd?qy@2&;IS3NWZeJ6Eo`5}>$kB^~=|Vf%Gu-Ww
z8fWF$!Lrx@vDyM|=ZJUt1ClS3QvruBfp<^8;+*W#hu={|#a~!4NY7)Xo+gZ%C`lVT
z`%kcYdNEj8qlPtJx?-Bw1nF=XP~90hW2Jfevoq_Li};+^I{S2^H3X
zUfouyBKRbzZt-9^B@^MCJ?xQUHCnjV^QnG*Svjfd%qz~=f!Sv0`a9d%7ihZwLwS1d
zO~O|>Erq;P@!DifY9i#F;+ek_iLTw>Yz2`#?~%3R)3q!V9{;Cr+=qkJt7)Wj&c2+5WavKv0ox;Ce(
z`ZrPLs{qRwqOm)<;j7F{x;b|$+#d8NWz|3Z?MRcn)3y23z&l1+$w5%oiOGA@J>DTFR5@Sor8U1-mD#$&Jpj??ZQRP?HCrErqw*?7!K~;$WbTQ
zX2K^i{p?eCPuL=B6yR)XJn5gjxkfc^iPxNL(3-~?j)N)#_zY3vMDSc&;TNTgdLHC8
zSmzFFL^IsmgM%841ZW|yjKtcQmPyxO#>HWVr@WyW8*#!Uc%5TibFn>ocv|dB!wY5`
znz6u!WY~ksvPes%P+EA(s$M(ch^w%4lLB%r`8>9b)UGrgh;+FN>E^J1nL6;N8E-z$#n-t
zS(d#J&nE4;N89)YO;!<0C5RDcrIP63aoR>k?P}&bTFqskI{w+@MZNL1)dZbAD+Zng
zEO#63tI_ow-a9v>e|!je*bm=#=iUfCSF-2+>;2$*ZJ^IT)0
zve#kSDzJMi{w|<;^7q1#4(VrbjLWN>{*weTq9O_wU}OqntGF04N_F|J!Vp3L9MfsG
zQYx5=H<~V_IYeV^K;}3B8pia;`X>XtNPfBqQz|REFEyHCO4vJDtasGIEC7*^pO*7!~R;P`#AG
zC&A<@=qIYzj{)NCTy%J3e-nQ%#reK+#TI+q>LZ{K9#T2iQ=AKg_n&=RD;AaaJn898
zInWF#c;hFV!sKRNj
z^)FsRgqHlF!CA|ZZEp02H4^WR%&m>vefj3ilZOt^Ok4IFH`|$7J8B&Ht8UL_inb()P;qF7@a|snm>9S=UzdMObLA2s6s0hg!%2iI;XQ{|
z%U{&G!HtedPtDbJ9J>_}HXH#?+`K6i-6TO(;L>_vt)i_-;t(An*$X=nUuAUN!Ev25w*+z6cB4D1
zCgsLe8MtkY?O>Wy4HI6)R~cS+Xr|p7iK)2m&rPbY)y{%D2ayA8zBaUcb=Re+TW)(u
z;VUSYRK9L5d8~E&b3qKjC^4ylvMuEL#a#8>YfwL!W7Nwo2!^{Y$pypU`d@f_=WMt8qL&67!GQ#`^^!WTA>3i)8b@s#PZ=PLB~BJ7Oqy
zbOza1PjNKj-l@!d3J4wMd@DXT(%<9oEbb7s(3rK#8ms#t95mKDg-u&-^Y@Gnl$c)r
zE`O8n%~c+Sp+^pT6P-t&Y=!i%Juwo~0#-P&ReKi6p4mC{q+g|Xt-X#D;^{T?$qP*Z
zzZR{w
zu(G3ofHh%F|5Er?XmC`GWfA(bI9;s8KkaHT0_r)kX+<#Fked<~p`4-2aueHFfDXw|
zheRm)l!1*)EMQiFqH3#4N252wx;rsXby0)fu~o|DsmoxD+xMjs(%DV*`}7+m*rKjS
z&KZXL_o;GI%f?4BPb}x8*B14kU6}hP3$hp>;zngC5
z80xKjy^82=KL1Mgcx%>*PwawO<4uOs=*0fGYjVMzEEl53DOehq@df4k;&p8-CoG
z`gvo_$Dl4T51o40HE<|BJUy`bA`jljv+(Ubsp-cv?yD(5!rXMV%UFlhaJfd?FkeCF
zp6ti7m$7{*;f*?4Zhh;7dCX@{xmlG|^f>8W=(p#2LeRZ!!I@_wHX4+mYet_C;o#j(
ziu=cu8y2BjdywT;dE(UKwwf>2Avye;j@IPxePc7z#=Boa`!^AADR*=WkKFX%Ol7up
z8ymnGQutS@+%yon8oKM?evAeA>k8Yu{@HK`GK-!{x<<6Om@zKK46RHJ6^yy|n>cky
zQSy$~ZD;VU+?UzVV9URSr8w~q$W<{Ckk;w%Ia7ueThq})f$$L
zjPRL?iKh=y$*;`uYZvf)!d2_#KqeB`6nnLd2i4Q{<5HoS{<)m!1vTs$7+Sur>G6-fCbX3I%h;s(&51}Nu
z4*2?a9$_(!kZnOc-qeM+#B|OU81|mgeS&hig@faE%gtVwS2rf?jyd*Tn?`aWca}P<
z4UYurl|0hoUponYpL9nq+^=03*)QiO@XtgO%cGyvJ9YHa~tDS8-Jc9*XBxh=zFDQnlNF1
z*@F(7z$-$urW^kvew20jQI8*cXnuqPz^N_~!L>P`4jhI&GNW@XE9#
zp6W;@7-j5%oYyFo2%J`9GE^(|~vc9Vvl_rMZKHBK$Gf9sC9O5k^Ec2${Txlmfjop~3|De_&b7`1G$0l!v1rRaU(&-E`
zlc-PaL@?7y`*ubG#{%z3t9FO7fDe!2q-S?fS3Ljf&^Jy)7#o@FIJCosHj0j*`F|EA
zYT*%r8z0Int-MGt-GAtFP)miu!iUUzo*vq}9eNP#>x6aQUihH0ae4Dlx8EW=o%M%O
zxQN|I@JnR{;Q4#wq*@?rO`L}RLIps+c2?e!CY&PvuPW@}Uf
zm!6f@-e6Pc%QJV}xY5d$fjSq!#lhfN$9%8wWp0Q2gB4IO(hJN-!^6#!T?dxcsW(hyo|tRpMS)gB?~tV&-y930ZI>RNBu{xW2M;
zAVV;oDRn5(8nwf&^bRqhpkcomyhsy1eCC*^8RP(D`J%1eMxAtP{o3+{4!D`ZqIx+j
z`B30IB@HEy8YYls5hKgW3O9>p@NI${;!fI;=_YVfGB&^uYu3X?Y!LY^0&U%jAT=ABli;|aytX@>wTKhn*!J)=71hHv`{bB`U
zCEG{Plam=~*jSGET}pH9w+{U;sge4qF#?RH#k2~l_!U`ngwVEXReY}TWbQBxI&3+t
z>+%*W__#hJ+>i7sJv6?|7BqZY42#qZBGGgNhvGRA9p-MW{j-C0HMxf3XO5%rwUxxD
z^@FWk*>wjK1P&;u2Jx1!x(ug5`Q)S_HY1`XTKPMCayGpgtz3y|Bv>YXF(5WUKy~4=
z6|g63Gcr;^WNc(bN1H3@C+=_S<~Lf0L%paW5ZH?=o69GoB+ld%Arb@x6x4!NoX~w0
zHBPVu0YSzK
z5(K1YxG01po16T&+`qP6_@g3|5Zn_*zD5y^5o&?&q?4MA2y6<(mX@1pL8{EdHj`%d
z)sce5EA6oMmBysBvB{3zqM)JJLAJ^9p8#Qd`-!1nbTBO7{n{!Y5Qo4GI^dG^yx1wO
z@7g34z)y_ky7FkTdUQ95#D@9-6xWrzA@j4oS<-)%R4UjX#}87)NqK!Z1pt#Sit%?{_(3SlSNmrxQvMj1TU;r*B3|fB*yi
z!<_j!LV8Cs|KrBGFNPcSo_T|#dP(o6KH93%8gHjKd>fCzBQ`gkjCyZ+Yb_ijkwj5f
zV?zuh3^oo2ev)nw=YiDj!RP@M#BEa&Wh5qLEBzB@`>-$yjH&B5{p|eRUF
z-IRAbtE;X+V~gR$_y9f}vq>UV!1G13no4@`N*P&Qk}r=@OR;mWIV<=SM((d%)3lv|
z&+o2AL^@+BjPa$_DxTbJ($F|k4B|9iT(o53qcP~se@O;XnA0s?%AadTxt7wGKvA1N
z*{+W8dAu$?^O&I9c{?Sv6EJY&<>r1C4S`kS#2
z`-I)-I3E)|sg{A4*4_Sf`Uu$lwtsY}_6Xn?lo#`LKbKMM!ps@`I;{)Vo-ra{=gJ+N
z>lj+bhnJClo;C#C7tE9a_^Q2cue~T_UMoRG)0CjwCDB)R7bpuV
zMpYg}U2nXiUUiU)sSnwF8^jK0IWKpY+#yam%@!xTc1YUZmSb?^h${S!Bm9ba&bQm1
z^EZ`f&b0xfHbZsL9<3D3yxO@IiSvkzy^dgd!ju@=fLC%
z`tgR-rfW^_lnOMWCOKo%$Y9XqtW9dqOtwap5j79Dp&nJ(;ySiXh}@Z;RVEg0Zl|~V
z?0JWoP-Af$2;;SzF8SREhF`w2+WdI`l7)pWasOF>=21E80_Uuk;7rgGQ@&D)`y*05Wt$A^^$KR%
z^gBFPHC3AB$zPkwlST_~6wSHxbi93=%NC`#@pA5V&ywfZ;GGF;X!Y&u)LRvSu?LtX
zy4myRtG6%ca#MpB8^69O9CEY`&QokIh`PDH18(&9WlI@Xm*h=0u|;Wau+1q08fDHW
zs^dK7O=;2qsjQl{IXg;Z{Uj(6>uJPEjjmALyX$|<+k*$%7&W*yeZR1D*Y)+I+v?O0
zMm0*70^XX`mr1`*|`4y)93slF3EraGy_w)rVcSIfeOBgz#o5gJAo7Cp9n;ue7
z@==%X>2AiD@1psaU)$me;+-X+@2_e@zG@V%LBDm`tdD>s8yc~%NuQpU$*_+a_AgvJ
z_07_Doet{JX21RDx`h7HS!fiUnyH^FH6f*!J6w)j1u6dEU&8e>eoHxym<%e!)ErT}BLX$bAp#2rfV
zv7(L=R(Je1XPX2d`h^9Ux0vf>ZCub;hKw|$aA_3tPP=1ixbUPtUFbK)WdXMyu_NMl
zXE(geNE<`&e7gS0G73TUqz-Ma3t(JICiPw~(1w1-GzRCk6C{XugcJ(?k0VJ7y!($s
r5D9Sp9|nP+i2uj&|F8?ua+0;Y2fi-Pjo*K!g~i;|=3JG@<-7j{lkxS_
literal 0
HcmV?d00001
diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-assets/1.json b/CandyMachine-Storefront/store/js/packages/cli/example-assets/1.json
new file mode 100644
index 0000000..0be580a
--- /dev/null
+++ b/CandyMachine-Storefront/store/js/packages/cli/example-assets/1.json
@@ -0,0 +1 @@
+{"name":"2","symbol":"","image":"1.png","properties":{"files":[{"uri":"1.png","type":"image/png"}],"category":"image","creators":[]},"description":"","seller_fee_basis_points":500,"attributes":[{"trait_type":"background","value":"light-blue"},{"trait_type":"eyes","value":"star-eyes"},{"trait_type":"mouth","value":"triangle-mouth"},{"trait_type":"face","value":"teal-face"}],"collection":{}}
\ No newline at end of file
diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-assets/1.png b/CandyMachine-Storefront/store/js/packages/cli/example-assets/1.png
new file mode 100644
index 0000000000000000000000000000000000000000..3b40ccf0977238105cc8646dc6b191ff2d050cbf
GIT binary patch
literal 9337
zcmb_?XIK;a*DVkrbVLx4j)>R@D7}P|fPnO(NQsE3NIysb4TK_1MTiPWhlJh{X_5%o
z01J?zccLO>L?I#pG_*H(-gBP&+zDe<1gdscPNvLw
zJRg_4z6-EP@*FvoMExE(G$`t5B_9=nY^YE#&31nIJd#_qhD}tNmGc}cudT$Zw=67j
zEEXolPB$mN=lA)gO^J4I#Ks8B3`RbG_m-EtXJ)Ccz}m8Pq-rxIBR;k8i)`ej_I7I!VEBFE
zpflnD&)n9CLvIZ$&EL0Vd35O}YXQ#RM5B
zUC&@YT!C&!{06V|=G>0Mne!vaskcOirQ6|#i>bYF-wqJGd!!193aeWcdZ)=aU3I3!
zl_~k2<>d%X?4TBpIwEY>B`ohddt4#}ZGswy>B*H^cV%_IqYmH!l0sq3y+?q`i^zqv
zeIWd4763I6YClB(A{PA6&MdxzDm>_jAYV30k{w&Ym#fyq3I_fK42h3Efof@kkixu+
zLYOnwQod?XPVAIYr4FIc5m53$1ZBo|IH(m?=*AbkJR(5MM&4!`jdByHPcmN4416@Q
z4LSiK6~By)8dIusjxTr@FQ8LfY(%peOcGFICWXKGhUMx0Wg5>E^*QOYhXp~oklf<7
z>i&TEopY^`nivak!piSLh$IVr*g5!SvJMM#DH+VATw6%>{E@m)Q1~(z**V`h^kJH?
z5t%4)O#qv&KtB`&Mi^Ma`wn7Ydf}>ZtqBGn(%YhQRp{1*wcTw9n$6FIK#W+5B0ZLT
zAw{3LscJOH`x!@rK+{xUBXR+gBTLUCX@9%e&&NO&wlB6B(;l|XTm}=-_XT&sFJO2;`bm|V`0{%O2GLZ`|AoXs6
zN7XkZO7?o$J+mZ3c+WR;O-0`1`nIj4-j{eubgLicebHREw9Cg(Kz
zqED>(UJGr1wO0`}b20U<00C14WP@^*%UR&>bAQXFh2fnpC?Va<;G>c^;ovm!wg1Px
znv-)}|2MF6SX&3QLgzV+-R^h06zhQEW!yK9uC;Mx+GMEP^5_an9~%k9uYPU5Cvk)w
zYm_%KY!1a_s#jN8aq6lxJB@z0g16;rteUJeqH>D*8yBF!*