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 @@ +

SOLHunt - Play.Win.Earn

+ +

Metaplex store for solhunt

+ +

+ + Logo + +

Built at Solana Ignition Hackathon 2021
+ Logo +

+ +

Read more at here

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 @@ + + + + Logo_Icon_White + Created with Sketch. + + + + + + + + + \ 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 @@ + + + + background + + + + Layer 1 + + + + + \ 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>UaZz0endqo#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= + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + 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 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 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 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 afCy8Kf5%{aUoamNVzDr_F{wjby8T}S28pcz literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-assets/2.json b/CandyMachine-Storefront/store/js/packages/cli/example-assets/2.json new file mode 100644 index 0000000..fd976a5 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/example-assets/2.json @@ -0,0 +1 @@ +{"name":"3","symbol":"","image":"2.png","properties":{"files":[{"uri":"2.png","type":"image/png"}],"category":"image","creators":[]},"description":"","seller_fee_basis_points":500,"attributes":[{"trait_type":"background","value":"light-pink"},{"trait_type":"eyes","value":"star-eyes"},{"trait_type":"mouth","value":"triangle-mouth"},{"trait_type":"face","value":"sun-face"}],"collection":{}} \ No newline at end of file diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-assets/2.png b/CandyMachine-Storefront/store/js/packages/cli/example-assets/2.png new file mode 100644 index 0000000000000000000000000000000000000000..e94b66d4e8005062f754bc85853797fc7ee4bbe1 GIT binary patch literal 9524 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 literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-assets/4.json b/CandyMachine-Storefront/store/js/packages/cli/example-assets/4.json new file mode 100644 index 0000000..76cf374 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/example-assets/4.json @@ -0,0 +1 @@ +{"name":"5","symbol":"","image":"4.png","properties":{"files":[{"uri":"4.png","type":"image/png"}],"category":"image","creators":[]},"description":"","seller_fee_basis_points":500,"attributes":[{"trait_type":"background","value":"brown"},{"trait_type":"eyes","value":"star-eyes"},{"trait_type":"mouth","value":"block-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/4.png b/CandyMachine-Storefront/store/js/packages/cli/example-assets/4.png new file mode 100644 index 0000000000000000000000000000000000000000..009c51ce4163836a3f5647c481cde6e184dd4598 GIT binary patch literal 6868 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 literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-assets/6.json b/CandyMachine-Storefront/store/js/packages/cli/example-assets/6.json new file mode 100644 index 0000000..9f3a49d --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/example-assets/6.json @@ -0,0 +1 @@ +{"name":"7","symbol":"","image":"6.png","properties":{"files":[{"uri":"6.png","type":"image/png"}],"category":"image","creators":[]},"description":"","seller_fee_basis_points":500,"attributes":[{"trait_type":"background","value":"light-green"},{"trait_type":"eyes","value":"star-eyes"},{"trait_type":"mouth","value":"triangle-mouth"},{"trait_type":"face","value":"cyan-face"}],"collection":{}} \ No newline at end of file diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-assets/6.png b/CandyMachine-Storefront/store/js/packages/cli/example-assets/6.png new file mode 100644 index 0000000000000000000000000000000000000000..e4b3bcf0bde0921e0ab0cf0a890eaa485fbeadd9 GIT binary patch literal 9171 zcmb_?c{J4j_rIO8Oess&WUGWE+tk=4*|KLDk|KLD8iuiCOF~&vgcSXAREL3~CWUjym6aYd23i{GGT{0|7U;qG>n7F) z*Js-4*Y5o`fJxYw(*A7i-4S`2H?+4BH!ZLBRY!0OY1U+(fBZm^k^MCjzda+@&48{1 z28NRiM*2F|!4p4ow7eb1`9C5*5T8GRKM_ikIMef9*F}$my+L=Zus-YQd8rVh;~ zWX{J9aY3dstFzzEn7XP-oL|E_i;$FS&V7^}9QUXS+;AY9q%H1V3SH77KvN?umZi8D zu~so=N1+Db@&D~|?EeD%75U#3{-?|TS1CR1|84Gfls1^AdT>p1vtw6MIb|*4r?^N< zm@z2*U2|+Y!{2N3<2zCuz&SvQCP%T9Pr!nW!7b*@72DrmIpe0Zro=y`mOHojaKN;_ zH^0e$kodz{hB}fk9Ux0Jq5N6JY4*vo#2KKkI_)Fy@S_+%M3jbqr<)~BIJvK>)h;O+k3%ble+~DQ;+xV*h_CVp2%xn0(YN9 zmicjzjWzlkt3B9uZ=9?*1pT^0aIr91a5w60xfcgnc&(*$o|(wrd%5C)f-ne+8hru4 z>y|?N<}XBrOWEH|0mw@Iu_%6EQ(AZ=M$Az1s3npOCO2n)UEso|A^g*%c#uS3gm_z| z-n4*3kO!cAC)w<8_BLpkTC>4H77e^hX#|k^SIH-+xwos7u+47C+X~#L5kEJ--H-6+ zIgUEoqh%#aZO^RQdi_lTyJD<_(g79N5IgUU8 zcuyMmsx5Bxt^5$$_L5~wT+H(4No;WtwrN{A_y}nDT{kpl+1)`en{*xnY0<9YAitvp z+4|}t-Iq_ZK^TZyzgR?FmDm~3QaI~lghU&WtaqHf zoVVh_r4;JtPoP|0l?QO4XZcV|0<`4D5kQXGs%|@Toc2kXIw4EVZTvDOO^xygGYsk7 zokI68n;(fnNT4KUYJ-hvIQM|~ijR8q87ay43V^&ic~8-U1+D!x&MljpD!GdP`NISg z=u|68GQrd))-L@xM~{@nNHGb^iX+?y6|*2_P-OIVr>blIHVNQ3Ms_LZ{2x;i*T;HJ z`yerW!S)5nFd=sWs^uAVb-fNK`H=XO(yqUmNjLG=o2@|;#8Ybl8A2P~KtDO)&hSD# z5b1215(tHv>#D!#$cCuDWplQiyn>lR!uf&SqJJCIDR9Tq_-TiMj`-2Lk0_}at)Q4vnDh#TnwSR z$^UjTCWuB`T$dPhUZthXRP-MwOm}a~O#kJ^I<~SW(y{)>zFzRU!=2+Ra!XFuXJ)7V zJ^^S-ik|E~L{g8ae03J#H*>z>e!FU)%fHJ1=T#TEIluC6;{|m21pQ#k(S!af#j&FG zZ&y_GaYF5?KULhoHgB&X|7}D;(g!}n$|smWR!-t$o2Wj%a~o%E!R0;Mnt#g)0VVpe zDld)}RmJRM7H)`}1y{A1d7n*s8GN)H3=(Tnfp9r0$!&dp5_*y`hI{fG3I z`ES!1XQnIE9%qK^e>W|um&f}wZUO+`*k@d?CY!9uPYWpKE$;9V4d=o0N6LOpO|g*Y6}O8=;DawRNWl zjPslx(>%;Am5U^#sAbNyS<7Lq(A2Cm^%7Xf@gdoi{O~0suVQNnT|2pjl2PpCE=JTm z%_#4?Ku}kHp@-#gTd*aY0sJdFUU8uyQ)>Wb)SK?54VFv867$1nj7}V1zYByC7Si-A z+I~yHtc2d{jLI+AA76JgZ&#$G8XEQImrkR2!z~1;se5~>sbpou+#=GPCW*4hG`WUi zGuZ7*`;~|~2a+Zh3Z85IK9F~~3Dg@Ol>E&fDpG1NizN`0#eQcR)#MN-A>1flk+L7m z8)lK|bPXD2vEQ8rBobyV2froK>~dqAho!Sqd7OvaHl(Qe3ghXBU-^6WvRL{u#f8xV z>!G#aL-(SyUYbigIqD`!zj5 zaOmPfw9~N1W%_&*=YeAxh_CsYi$-GxFg9v0q3+=Q$4a2`4f1s(tK}9S?I}D4XQghF^YTG&XBAT0yugjAC z%nV>m)EvaZ5IWb`Xyt)oz^L+3jQO!*$X$ySnTtiLEL5F#s>SC#@IZ!-i5lKbeRqx$ zc<|_i7(fSUbS*`9BG1nVzrn&+n=O(g9yK7iFi5g8*rH1RgGx%ky}|NW1r z_VUczdLjlZUG}X5{s=M9PQnE<3Qnx~oE01B7DH(T2nO)()zp?f&=(E_l{N!}BUod9 zD`d6pdK&Jen5V4-506IVNG{E?6sK&ro-fz8`r*@|l`kI%TF@Gkw8HHl{z-B!Qlagm zQT0F5{D{eJ)Oro7PRv9jLQv9h?RT8pR_%%3k8HmHcFQxiJTvf%=EIqlRo^c!eDPj1 zGkd+=nCK@}Ca{@w!2;Z= z>#Iz&!M1o{n-05x^T&wvcN|ASq|y`ol8Fo&xo%dV#YVu2UCQlz$jvWy5re1wqv}ks zDd%-x{zPYO3U=12#){1cj!fIZky6`*LFf^iLE#v4JG+?VqunuzeY?pP@#nCcCv{&c z4A^Pr`JaMyj2)rz=%1c`bUT$YkUS3@p{eSgwvwSeo>!irkEkmy5p%&azY3u_BicW4 zgvM|(-SZf_Xzj#Gu4&4iy%~<&T+7tsZp;sX2A!@KKKd@bljcJtJ=%xm%vH@1RUu3>M*@H97d{w-6 z_{)bY;2C$-cUfaNJ}O(U1QQjbc6Znr^g5xP$4ii>;u)#W2B e1jgj1aoZTX)g!c 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 literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-assets/7.json b/CandyMachine-Storefront/store/js/packages/cli/example-assets/7.json new file mode 100644 index 0000000..8ab5073 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/example-assets/7.json @@ -0,0 +1 @@ +{"name":"8","symbol":"","image":"7.png","properties":{"files":[{"uri":"7.png","type":"image/png"}],"category":"image","creators":[]},"description":"","seller_fee_basis_points":500,"attributes":[{"trait_type":"background","value":"green"},{"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/7.png b/CandyMachine-Storefront/store/js/packages/cli/example-assets/7.png new file mode 100644 index 0000000000000000000000000000000000000000..8d5ad0b974f9265786e8bd8df9a629e9ccf9e19d GIT binary patch literal 8963 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

4?R!ud3YsL|xn5HXIs%vW7#Bah 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 U&5h_^t1uYqn_a2WyA$<)0G+P{T>t<8 literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-assets/8.json b/CandyMachine-Storefront/store/js/packages/cli/example-assets/8.json new file mode 100644 index 0000000..9d91c8b --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/example-assets/8.json @@ -0,0 +1 @@ +{"name":"9","symbol":"","image":"8.png","properties":{"files":[{"uri":"8.png","type":"image/png"}],"category":"image","creators":[]},"description":"","seller_fee_basis_points":500,"attributes":[{"trait_type":"background","value":"light-yellow"},{"trait_type":"eyes","value":"star-eyes"},{"trait_type":"mouth","value":"triangle-mouth"},{"trait_type":"face","value":"grapefruit-face"}],"collection":{}} \ No newline at end of file diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-assets/8.png b/CandyMachine-Storefront/store/js/packages/cli/example-assets/8.png new file mode 100644 index 0000000000000000000000000000000000000000..ecfed23bfe9033bb74c6797d794c73c52e1b465d GIT binary patch literal 9227 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 literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-assets/9.json b/CandyMachine-Storefront/store/js/packages/cli/example-assets/9.json new file mode 100644 index 0000000..9b1c15f --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/example-assets/9.json @@ -0,0 +1 @@ +{"name":"10","symbol":"","image":"9.png","properties":{"files":[{"uri":"9.png","type":"image/png"}],"category":"image","creators":[]},"description":"","seller_fee_basis_points":500,"attributes":[{"trait_type":"background","value":"red"},{"trait_type":"eyes","value":"star-eyes"},{"trait_type":"mouth","value":"triangle-mouth"},{"trait_type":"face","value":"sun-face"}],"collection":{}} \ No newline at end of file diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-assets/9.png b/CandyMachine-Storefront/store/js/packages/cli/example-assets/9.png new file mode 100644 index 0000000000000000000000000000000000000000..49df1d888ed448d59cedf0457904a162918b4652 GIT binary patch literal 8119 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 literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-traits-configuration.json b/CandyMachine-Storefront/store/js/packages/cli/example-traits-configuration.json new file mode 100644 index 0000000..bb64ae3 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/example-traits-configuration.json @@ -0,0 +1,51 @@ +{ + "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 +} diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-traits/background/blue.png b/CandyMachine-Storefront/store/js/packages/cli/example-traits/background/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..9894b2a059866e7c802e133e70ed32cd2b022e2c GIT binary patch literal 20012 zcmeI4KS&!<9LL|gJJM?~^%SAO+HzD1qDydb5-xh0rWg_F(5Ymx&_xFeiU{U(@ZaF# z=5iwF7IX{kl2wP2!O}_S;E)at9ZHu#@tr0$FLRf|XL#Jp@80F!@5kM}55M=`cY9_! zlZf}mg%FACOMg}fvl7dQ00*R)cQ;@0E9z*vBVr z7AeiqnRUDMCazcZmQ3B^y7}$J$!!ODnGLQ@; zH#e6w_K*O{Kr)aFBm>DnGLQ@;1Ia)#kPIZZM&Li$>3zIW+ED@oJCPPZYxh|(h28*@ zL5MY=bb(9=8Y>9YAW(z4kG}gFX(XjcfItlbHUCzirf;D?z8hw)>yc7hc4FEuj^)>H E0CnG&wEzGB literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-traits/background/brown.png b/CandyMachine-Storefront/store/js/packages/cli/example-traits/background/brown.png new file mode 100644 index 0000000000000000000000000000000000000000..e23aef7695eec7fb36fc8425b85f34773fa36fb1 GIT binary patch literal 20012 zcmeI4F-RLx7{}kcJK`yxy@+7YC|5x!b_qH-6)y2gOlg8h3mvm4xOA~#DFt&5YISgN zb2)SnI)sj;F0Mt83`K_`ICMw{MX=DV^qnS}m$^&fH$3j;yLY+wecavq@xAx{A7)B< zr)!`~2;mf_gIOWWdR**;vK05e{ZI$FIGfLj>T&v~`Vq{%D$Ey)VocR-A=eg!6*p03 zKoxaqB!#JtGPXrV^Q>8q%=>!WF!gwAUkG0mg6xa8^5Qg`JoNgevVO^V_;L5>dGV@e zQ;zQ}e|`V^+SwA)ux!`!E4P);W1p&jE*CYM=b!gyYD0$J(za9eus687^0t!rGT3I3 z(tI+rVz=JJ^AG(cQ@40tIqG=khI)Te_1BG#HUHJJx_|kdBlkVNIbohTx+Sbs!r@0* zOLwFk9q3MYuA8Zuqw7ug8+Yk`GudV_jKsUhO14BwHLZk~3Eko=&mL@hZK2B4&UCk2 zf=BRp@+7Y<-#i8k1`I}9PzBBdl65!-l7VC(8Av8EKvspU3Mnb_c_c&0B$G)d4X@8? zFoz+4WFQ$x29kkfAQ?yol7VC(8AxW8l(ssHC1%n9l7VC(8At|_fn*>VNCuLDWFWb@ zxumg&1V{#wfn*>VNCuLDWFQ$x29kkfAh|UH|H)48)v1XCB|xwdYXP)&pA}Q+4KNvm zSOZEI$b_J=f3rw+lb0L0SgEb>v=mfx<(0pD CWR*z( literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-traits/background/flesh.png b/CandyMachine-Storefront/store/js/packages/cli/example-traits/background/flesh.png new file mode 100644 index 0000000000000000000000000000000000000000..2f0f0bb242bcb7862c2ce617e8dc6709b6b92167 GIT binary patch literal 20011 zcmeI4JxClu6vt=sf4QizZ)7P*u*a)n@Zosdo8M`7vLthqzyY8&BK3_JIBc5Y_4yZOC)Z~m)OlVjPI z?iL|LHXIM8g|L&fxEXCJe%m|H7x{5|Y*=jW_WaW?f_HDj`C?JL&~;bH<@dr#o9NQ5 zi+(hg!q!)r+G4A5*G^*lrk*y;4SxMDgc4y;nE4_P_X}Ck|9GU(c{#MT)I0RYInL+e zjf;ujKli)(q~*AtuOjikaxznTeO~)(*i=+`lCSn!W>eSACFPFb=F#guGQXZSS){aI zO)a`+j}`UVHZ8tiiXXi3%Jp&72b4=bG)7jpI8NKCdN^=v$mtEcmNhNqC@S|oFF5Ax zO7XTi3E%VbRr}dWz4JyNZJ%B?Su88F5IgO+mrCikILeq7r7G&tn%}fk`D)FamdE0; zczp8s+VY#nhQWrxZVRfwc|bCdjE7-5Y`ACmw)`<*0m(ozkPIXP$v`rY3?u`|1b~dd z6VWpXBolfhZcEUci~-UuNVgzYg+w2+q)0I%Kd+I~ckM5cpJzEhGLQ@;1Ia)#kPIXP z$v`rY3?w(5_W_cDWFQ$x29kkfAQ?yol7ZxV3CYpi#jF+}SWUG6494ZiJbD9&H6Yf2 x(giXhXsjSmV|qCV)F4oUKn(&l2-Mv1+1s-p>#gBVveuCbwS}XT!RByj@d{#emev3O literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-traits/background/green.png b/CandyMachine-Storefront/store/js/packages/cli/example-traits/background/green.png new file mode 100644 index 0000000000000000000000000000000000000000..37e668e66fee459a4da9622c0ce0ea7b72c93b3b GIT binary patch literal 20012 zcmeI4KS&%w6o+SamveJ^aTUSCKVb<3f;LAQtH7>q&=pTaEG&;e0x6P4At8;o*Tf`< zjo8>Mq_B}ASc!sMtA!jWq=}Fs;8|z_Nt=+_co%Q3wh4U2uyb!`Z|6OBcRt?C{NBz? zk7v?-X(2==oCs!xFl$M%Q_7P6aPn0hFsxL)z9vNQCt{QGi2v$@`v-duIi&|BJewia~<|E|2Mq;~sT zEK-^eXG(VSOlWg+Nhi|#ldZj|cdYTRmeujoyLI=v$A3?lry1Q66^qfG z`@W?+Qi%6-CtSzLRn2?L4fpGJ=~x_Tu^2|`b!>GtMM^a-Mwcnw;wjHM*W8v+<*KK; zTMoe^cszNM*OqS{0|o;Iqb;Zc=K;w&oCC=~GLQ@;lNcbYLRN*86!|=op=6TDB$I~M zXEm6^5I{1J3?u`|Kr)aFBm>DnGLQ@;vr0-^oy8I}X#mMUGLQ@;1Ia)#kPIXP$v`rY z+}K=F-$Mc<1Ia)#kPIXP$v`rY3?u`|Kr)cr9D)C2r}tU={<;z%c$a7aGv^Ko7CxE|%AR7kXiNUnmmm5fS4+7GaeDdmr~VKul*7e*UJU5GBjnzau;U^+ zWpvVyMp7t!m9Z_dns-$#Qn&fIVEX0z&qDYj46<)GWc}M&N<4Q}_W0juR4C1U>=;UC zs+qa(%k|aW+_sRG?YN%*KQs2^Lt*RBh+%WRl?TbSy+(;|N8=mYm0t#<>&UarZydb3HtTgACta&_2hDagYDt{;wppZ90yl8f+(ROv6GA$L|vuFKTyLG5sUB!jjEzflauTVNCuLDWFQ$xCO*%I3nV^I0Les#5>`u0GBL>nbQ2Aa zl)wzQL5G2e1xN;xkxyAbGLQ@;1Ia)#kPIZF^ftBM_XU#ke-A@_0Kq|g7C@_}9qldJ zTeP=mZ_(bOy+wPA_7?3e+FNs#gZ38fE!x|=*51DAnRzsKQl9=AAJi7Uo(fJU=67xY Dbq8$e*2`+{a3cuECWMV3_|aGy0+H;=hRX?OLrWjA-S76A`_o?8 zn>tlzd{m~z_ot%=LvGQm zC0$u)=&x-j{{_t*wN6#ru1->>rKo%Mv@2uR50$H{_+fU-cip~Y)w$jDnGLQ@;1Ia)#kPIXfpJ&7c5}zl4WFkWet0g9xm}COFiH1i? zUFFrz{{DNCuLDWFQ$x29i;Fo7(UD0?DVFS2Owmf{pkrfO<_k+FP`@ zXm8QpqP<0Xi}n`nE!tbOx8^Db?Je3{w6}Myy?wQH`EbJf`FAWns4e$;I6NGjF5Lj^ CaF!(i literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-traits/background/light-pink.png b/CandyMachine-Storefront/store/js/packages/cli/example-traits/background/light-pink.png new file mode 100644 index 0000000000000000000000000000000000000000..eec333df7e4e14460833d4f47da995270556993d GIT binary patch literal 20010 zcmeI4KS&!<9LL|?JJK^I^elowtsE6g(IuNh6)xe5jS>-Qp<@;W3w4R0h(nU47D0#B z{h&j)K!+}M$>vgQhJuSyhYr_4DYQeOwDg_Pdhgaw!e@Bg%kRD8{UOQwyx)7j?~A$F zscgDGEriIH9{Te_$S_KFN?FRUKYdXTqdGrT6wQOduj+%p@T9a@E{jo>w}tV1Nmx-8 zmHJguuLg#Y>S;u_z`QJ#VIZ&aQN`TY&Kn^-QSu9q){N7`x7k)cBMbY#KJLEjb!Wn@ z@8;d@r$0a3uTGej?YLe|7@bVz@k#T~Sv6rj>C3lon-^6s>e_ZLtl#ou??wfw_X7!w zVaUn3hOIZ#@>Zp8aotLAW7?@-cBIovE?oZCwNA#eGC#boJMliN0(qR(E%jQhK6I~O z=>w?*d-@<;$H}+l$mZ1qoVSu$8BbVDGqoOAJ=$EUCeBj2#q(O;%~x(>s`Bk)eOL~Y z$K>(N<7dl%9t#Ew2CFTo0_OqAKr%ZFeZ$7~jJ++60lX@BRd7k+&%+stCmByNZg|cx zH~`}GjH5^G$djW-(*lx#WFQ$x29kkfAQ?yol7VC(IdPQ{NCuLDWFQ$x29kkfAQ?yo zl7VC(IX(k~PgyFwjXTNQN#;&6capi2OuVfY=S#3Mk>1xO(tCAxb-?4q%v7Iy?{Q1?OI2WceDH7;^ug zMRa)J;394=IvD=}%^-BjRxlk}GdSATdzzq^*+uva$GiOAz02K^Z&eUXdP=~1zB)bUHd2YGzsf{*j7{?x$~3&;Iv#p9cmHowH;j zT>Ce1uzUQxOInWW`6@52E7h6Y$lvm*VN>~HTe8$?nN3|cQ7JqLZXUhrBewUV!6KzS zJhkGQJr>oHZCZRk7e0LJ6>8(C4Jc80S07o;;yBIc>QT?FAxAgta@@2O^7%qnZ^|)e zmkamJN%)?ZEZHx=);h2E(fo0!!D3mlPodL#d#RLui$5{bqEu0}eD@ocDp@L<)ACq6 z7LQLJUt50j*f7{I*lj@-I1fk$lJPK1hYj}(-yElsOBcZm;*krIXnp?R9nnaZj literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-traits/background/light-yellow.png b/CandyMachine-Storefront/store/js/packages/cli/example-traits/background/light-yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..5668710e8e5e1692c0356cc923b833aed2fa2ba0 GIT binary patch literal 20011 zcmeI4Jxd%x7=UMXmdk29Jfnoeh^&Gjxk9_75%$c=d65&*K(xC?gN+CYC>CMYMz6B5 zcOgYOe?Ve!U>__3rm;(LDHID46hvpuUfj9bCh!!)&b~7{GdJw*JnzR$ZDzWZZSQRt zLS)O6{;UwH5ho|3C6zBff9s3YU!8VeQ;O}maa!` zE*Czm+fL5)0wJxxnfhFKb+NYBotEjs_jPa0F{`?6HG1+k7yf(nK9g^(JT!JMvF(lv zuWiuiMM!m$H6>vXg#E)sI~hmPYBl=a99bgC83*@|Zm1jpxnd zZ_77Ne^yyASTI;^K^2qy;5;B14Z}jiKs`gZ#V`OQ1Ia)#kPIYaNj5ClnBgUmj1L0` z5Z*H^$+#Zz+v4;#efchyWGu;8l7VC(8At|_fn*>VNCuLDWMYzuNhT(lnB-=Ne-gDnGLQ@;1Ia)#kPIXP$v`rYoSp$TE8A?``%iXy4-{&j^#KI6_$+`l&!Fd`=c4DL z=c4DL=cd;M9bHbu6cJNIOc60f#1xPWBtI@BpR0-2Ps6FR`IY#fw(`WZzdv5xyaO5B BmtX(@ literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-traits/background/orange.png b/CandyMachine-Storefront/store/js/packages/cli/example-traits/background/orange.png new file mode 100644 index 0000000000000000000000000000000000000000..c74b9bc3a8490e65438c84ab261756f6b1e774f5 GIT binary patch literal 20012 zcmeI4KWGzC9LL|?d!EEBh;NnujAXsxP_z$EA zb*vn8C|wF&E0ip*A%l%}2qHM7P<3$;9DLU{Ht%K!htKf1mtWr9yZ4g2_j{lB{k<2n z<>_o@BqM~#7H7gaA!H{>uA?objSpY-!CIV~&Wr8F*rEOq-nm`8TPlgGI`0bW**&3> zB07!eq)&}4A@$KpY_Z+_R(4`}mQM-}Ut8T2A`rzecdKfB`?!;>`-6pC<;_v!>DJ2H zc=i2`X#JXe`(tVE%YYx$gk>w&JITzSYwdr2TsCaV{cStDg;Yt)lGkUK-M?oZXX?R2 zX_c5(ScS4tqMXPR8mOH(C3*h z68b#!c_>4X)uKtpNk-6(+yc1;atq`Z$SsgtAh#g)%uu94k|D`NJ)%h_-j={U0{8y6 zz`di*Pg8mWf|to&0NtSaH)1-gR_9FTE WN#@ni`oTi7Q(N&yIo!@ymj3|p8Jdj% literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-traits/background/pink.png b/CandyMachine-Storefront/store/js/packages/cli/example-traits/background/pink.png new file mode 100644 index 0000000000000000000000000000000000000000..e75b5c34c20aed8fadbc94a4133759f96adda4f2 GIT binary patch literal 20009 zcmeI4KT9J)7>8$embiKeu0k+)hb+Q@XrY227Q!a%5pxg`v9Qy|gKMr)P{iX*3ZphQ zHt7~D?EC;)Tt0zV2wvl1Are7FxICZk_a_ zp%hAAWn>Gj`dw8GRU;o2ObzVp3*n1gke*qQw`b{u@LZLy{7#N!imeaBsj&Qa|KH8e zjqJLRmhHHn|B_it&d&XM95ZaLcW=j+O0^R8qLvj~4egG`qtT7^!d=X?_ z8;4HL&3awONmUD-LA@QdT4IMEn=DeQ@u{Nos>!-&#a~vY#q;LFmalHXtR+?b(bQkt zj{o;td+VL5wOySjOiMxctfwz+zaA=AS8-%^%X8hK6ZLtsX{h2$qfHhDkHO=Y$KRHB z9uo!=2D2@w0_OqAKr$-~bHT>)jI}L}0lX@BRd7k+&%+stCmByNZg}=E*Z?v&p4dHO z>yfQT2_yr_Kr)aFBm>DnGLQ@;6Q5_q1rnbpfMg;=39BV0nV4h(x`~EIN?-=upu<4K z0we>;$fqnI8At|_fn*>VNCuKodYjts_XEj?bL9(t06{4_3!tH}L3@k#7VRzCTeP=m xZ_(bOy={=ebKndI)Nnuz2h;$`K=KsMz+wZ-&NI6J?5i=$(Q>lLii#VWM)3f`yb~Ck#<$)^Pg|&lc6_X+J=&; za_a5vhqI;a?52>G?YN%*FEiSGJiYNSV%S`7u_eB|Q!7y~YFV*Qq22lTXmn$<^ebjs ze822JJM=8`8wam%%z9nNNmff;LA@QdT4EPHO%^HDSYgX)XtFL^_E(i@@w~aPbNh#3U2YO*A}G z0yE$S9R?y6AQ?zTK4k&PKr)aFBm>DnGLVeY+thwP6-fTMzH+1wAlQq}0%+8@;)FGMNN(Rv>n_xt29RwXzyk`^iGIuF_hT~m+@80F^NOGTFe!u&!%}h_k zyZX9>5b<0#m=(fqM8%D1Oa901fxgJ4*@-bx{xxu#p4h?Ynx^F!6l-rw~fyg3R1Ud9t60i^1OUYDfRY`In)WRp(DS z5pG;h?R-D}oRXH~dcG=(zm?Ou!su1~(6Fgu<#D=}w9KZin`o3C1$U3$_7U6cZ?i~g zznWQb%^oZ2gKb)TzYso{^h(WfGzXMuyl;)HX>pwHGu8Rz-jJgkc0F!dO2uL+^(^C< zvnzyK<|KU2OV{kDtIf_^eRMC6v{@`G_9=88-d`%E-{N=7v?x_kJ>UGcrApW8=CnK( zkHzDY$JdtMJT?qA40c;k1VNG1Se z1fGbVNg$cfBXL`T-ee4rZb7;Qxhf?3kR?Tm8TomwoW5IsiTpgv0g{1aAQ?yol7VC( z8At|_fn*@L?Ys|=3?u`|Kr)aFBm>DnGLQ@;|Cf;bu9|(J1qjw6EdYaYIWmvl0AdY@ zHK25XOb8k)2-KKf4gxg@)F4oUKn(&l|M=|fWpb}`d*^InKN4!oy`B!rV}+F)2bP!w literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-traits/background/yellow.png b/CandyMachine-Storefront/store/js/packages/cli/example-traits/background/yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..8c7c2312136114695dd66cb399f3e031ce3805dd GIT binary patch literal 20013 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 literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-traits/eyes/heart-eyes.png b/CandyMachine-Storefront/store/js/packages/cli/example-traits/eyes/heart-eyes.png new file mode 100644 index 0000000000000000000000000000000000000000..077d94871b7d1b4350eb5d645c2b8f215d85f9ee GIT binary patch literal 21071 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 literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-traits/eyes/star-eyes.png b/CandyMachine-Storefront/store/js/packages/cli/example-traits/eyes/star-eyes.png new file mode 100644 index 0000000000000000000000000000000000000000..43745f2daa18bedf2e3a589b72227bbdb727d908 GIT binary patch literal 21186 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

EK;VK5adfAog41hb3t8(=#^)QKgEuC%2wSz1 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 literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-traits/face/dark-green-face.png b/CandyMachine-Storefront/store/js/packages/cli/example-traits/face/dark-green-face.png new file mode 100644 index 0000000000000000000000000000000000000000..db7fcf2af210e59efbd400d0a7e20c3b747e3fe1 GIT binary patch literal 41470 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 C`lw6* literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-traits/face/flesh-face.png b/CandyMachine-Storefront/store/js/packages/cli/example-traits/face/flesh-face.png new file mode 100644 index 0000000000000000000000000000000000000000..5542719071633b0e4a2643b4a9073d16a02f9798 GIT binary patch literal 40871 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%0D=jvzgUx9Mu??eQiH8 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 UoOX`w2>3_wmdee{8^$mHA0ivy-T(jq literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-traits/face/gold-face.png b/CandyMachine-Storefront/store/js/packages/cli/example-traits/face/gold-face.png new file mode 100644 index 0000000000000000000000000000000000000000..d4ef26c577f8f7ff93593ef71107f49e6e256ed9 GIT binary patch literal 40703 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 m%Sy6_Rn2s0^50CVw>~&Q< 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

-F+qDdiHH@-I@`|H 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 B6QlqD literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-traits/face/green-face.png b/CandyMachine-Storefront/store/js/packages/cli/example-traits/face/green-face.png new file mode 100644 index 0000000000000000000000000000000000000000..e999dc1d6d8eb1a1fadff80a34a0120eeacaa83b GIT binary patch literal 40815 zcmeFZWmJ?~*gq`epo9n#q9QO@l#0qxkQ_k)r5kCbL|S^N87Tt=6+u8sx}=){3__HU zZbXo77zfkk-swI>JVjI`Y zFDQ-o+c&P24{#PQS2PrlYP>aoQ_vxh=zV0c|NG_tnDBp^@PAhDe^&5+R`CB@D~LG` zi#={N_L!)|!)I+}%bfmfVGn9J3iYYuyS9$UwivW!{!XR)lBza7j!*Tvv%Wr@`i$3z zGyTxz#LO>sTI#qC-j)u|8oHK_dv}@c3uwgZRCUS^6qR09V;G;eMp+e7;bz;uO7=A- zTA{}Cu}j_hPueWI4fw2DsMS#-4WgcBu*-(1>DXhRKjl@dPkN6}O2)FcbZ~gE(mJL# z;LW2~;xlO-Qf(2-!Uu&IB1<>${g^fjO;$lZ-PZ-U=iAnIEFO&(lab#z1tK%1nyR;K z)?0D)#w>sUpX-C%$n9WO9{!%VuUb zZT>J+`faJf7-c5J? z^o5iw5YntC{k8-&GxY4;O47G#v-M}M6Y+~u2^y`x4sTP0?qd%&pPVZ^=p-^-`)YNQ zN3Bub4BMEpZqKp#eranWcVfjRjz=rTlief0IsUM9noygSIhnlNs`>w2Xp*99d^TDV77gUhdMjS5tZS-hROClI-XKr1!6z~HZag6(FC;e%hT?vs!U+(V zHkWP7QbWt(s?`s{Sq<_7;Ky0aOIgTbz4zv;nMX6sm?5f@a^rZ5@s~>m3ZL-LBbO@P zNUkodO&0XJ^=fu+!?=JONF@9I5=naC$0~=&o%-C`)*C+c7vq&8S<*bIh6j7|+OFdg zCIbh$Ps0`De#OcT+Q@3^xL;O_fBsd9=#7+bq;X_4oMCb6amtRzL=TPar(8!c=kgcLLLsi zNue1YU7^=}XmW>As+A$h$7Fz8>u_e;0I>xq88&XQCastb@ivc|Bwf={@gLF3mFl$YWbki5i1+;rcVaD? zn7Y*Cre48p@V5MC8IQ*Zj=I^crbP#hKc$q6OkU^k(`j+*67L)LQ>=M9lO&LdYMl0U zinD}Ns8$V$Y;?F(2P_XrCa_!=>*YyxDf7;~&8G>inF=t@^K_}RNxrQ~UDp;!y=o#q0CmEPt|L*!7RHmw4qmO{YdQ zP=}s0SKJUf3-LFBiegNbX$b{3%0nWs{+sEYY5L3?_~-X2nByZ#BikPr?T|=KF(x0KwFM+(3xf?jVb`6X_E@Pv6)@{-s^gzG zUySmCmCn<{;A|J>-lk6IivN5O?b02tDuzp+YY3ATpH_r?ev=a!8Ft!h{}M1Dj6ZyW zrBt0iH#1EFSF*&mKr=qnsDP0~SK7jxYl{1#w=(1ty)2@WHRRks(~SBJS!RMQxa5&Y zKCAl^;98Yv__-l}#qh|I$r=<#V(xI;t??Y(=%EK4PGFP!ViCEusC{|d-xC@zsV53OtFH&04u^jsY61CA(c9$2<$j2 zLlih1!!g*K4JWZbwiSfxRD*=?9Yf;m>tw88+wWtHG1h>G*tl^?8s8tX&5{G{%+9k7Y)DkU^2*6Wq)t7j@W8_oul zQ%Rpe#&BVja4izEsyLImK2?RS#TQBClOI1!Xr2eVXalETXgj8T4jFR@WAl~v<7#`q zcV-}dwP5L$EKBofu=Dq1-M4TGV@^5=KD?pL6^GC4Vn)+-f#SSn_UB4ZFx`Y)oB6j< zW{4!?v$kK#SHvp>+=i!9lA~p3c@5sE+dbnz#<*aXJaHZ=PYH3t*;BOFJ{E8CRtdyI zYyOczB5j&3mVx zR0BP2_4y=~OX4Z>G!{YoFd7u`zC-)fnYPL%)H*En3#X|w9%#P-ihnE?z!wQi|5M1A zF4#DJc+d|kOt{5Y{k_F3q@tj!Z{p=XOgpvDTwxzwe}&z2NQJ`eT}AQdOT<7M!h?w6 zQ*W9Ccg9u<{647JTfVYY7?0kXIhHnBzy=2l&7h}V;6Lr=4N-*a2b_L3-5pw z?Z9~eVUD%VP|!UHtfUcl83^B!TYcM^xn-69dwtpAqbiW4h(4lE&6>v{bznUG3BhiN zp}%x?UdP1;Yz%+NiHKoWtX%|`a0#fysrEG9Cd`-p6M327yVP1&BQhNbK6y}D`N=^F zAJ}|#wnI11v&YJ+rb!$uK6)BZF7>?tIB{*m4n1N0Fzaql=Hxw@7F;QuVzj30-d zd8dfb+w!y*ird<%pDgqgiPW2IER3uHL1&NWu2d$se%kS|SKMPoXG5LP>`<^7Cf!%- z4b~&F1Tjh;xvGvI?_y^HXrq}gUN0(Q?gS4Ab#z)WNNx0tB4H!a6hc7Y+Ap*TSDqq4V>)@_Ur?cbXrd;+3oc}#K_Aof( zab<79l&W(F`x~cQ>jU9ur|M*hVHHl^?AE%HK+r2j;g44gHLoz-T)F~-p8&8`;C?_j z(AjL*oB1!C^;7sQz62d6EBVlz=;F?fo+wDP2l#@HCOTIs>r*bk}~o9DZ_G0-S#tgny&2&JSP!K+p|2_KB(%VvE^R4HoUpzpOaH0pkzd zirI20(85kDVSIM9vu<}F&23MM5qIjN-#2*H}jLretj*%7eA)1PL8WAj~?E> z9f&bUWkSonGEzTh8WdSiIs$J`eWU^q-E> zW(~%j>}7esD`!R5w))S2wP&Fah%4W~4c{cC3BYKWJDD7q`dIiXf-U6Jp1d_Fsj=Kbdk1!?<^TxKZ(vV@k$A z+`N2RL;*6lX$BdymI~(ky(Q-O0z%7+;cfvhRt7FTfMYx!PjEI}!H8}+m6wV4Y)m^; zZ<<`N&?_Zc5(Or&7VmEMVIwV~-LlyA2wyHY(6Vaay#n73d;(UGT=~K+({sVn#?*`{ zRiMMHiFsY9hX^a&$VVDtY9d!9yAO(DT;IZC8;F|L)XHs~h+cHrV z(HG6UrsJaLIiZ6Qmn1NBTLr3)Uh|)En(jtE(vDo{qHfQt~2cPp`z6oBx%a-z&^G^>;)`-Vtq83I222_My}v@ucg{)R6-&#$lOf3GK=F>!8cf2aE)a_luhhv%DZc0+iB+B1>{ViX)Oiqb{@4!ZI)xpil$ zhf$`cUc^k(R)B9sT?lklq+uCsTw!)#!YNJm+Q&YpFD|@x4lsB(0wAq>b*M9!q%f1S z#VE(C{EHYsFmtt*pCmw%fY<~|pE>EaXH2u@V@uzc`K+Y%<-uRq0KsckA^@5HRiJf| zMcTyNk;%{^UOq@2$Y4gyz*3S@m9X}U>sIWnZkMTm(Y^vobh;*$8#cuBuD5WJ+usd8 zAUk`N@NHh>_t-X}bFgvjxL0vm&)OdvivoAEIk!S-KWL@zfIZ_gmyUCCnkI^Gu%yIijGt~TlRp>N z#pMfK?#dAgb#e6^qpA|k&2GP}d)MBif@>qmz>#En+e6O z@rQ|)5tM4K}r%vCFmVBZWw$E!TeXZ7AyUMA=uO=oO9eZgx_!p9CO>V zH~n@$$3v(2K01*zATC`2x@_Ef_-2d=X6s_8J^(9B`!`z_Oa-r33-J)Q;m}NHGFp68puS?mE9_@d&0C`e0 zvK+?Ye%T=e>$=$ey&}Zs6}YuwE6kc+;Gtd3>7eY&nel0x*_Cwzx(0r>*Uga0f$AcT z_OqMx*1)=(4gZN|au9XtY!7(QJzKsJWBWI;S@Nie=(m`;nCsi9vIZG|QWO$pvkvl^ zz7)d9-N8uyKkAwH0o33IP*tU+oPv=n%Z%_ccRd#`t~j_^2K%nLtt1b8kW}M^4(Ei# z^UZPX!Y6(PodeO8gDkWtnl6I*$OFGh8n;55Db}Ze!idX?dc;c=!*DCV*WDiBvBkX? z)f6B&0$)m?LWyD|$UjDRmzxwA=ozTnS;b!9iXig-A34Owj0%B{fjE}-cTNz(L(BFu zQ<(6>r(+QVF-763aIDT}^(h#e1P zc<`zsmj8I+TKQVL@oByU7X2}H?pFCkN^-%UA9HZ1z2?1iudGU)-pol zeI~E63!;;6wuw_ms14dE=)2Z6mW|{&D+uIEdmMRC3YINbkgeOKBiG-Bgf6dVZ@Dif zT`Rc#0t({$Fd>xjD+vQ#(>~GN03Hn#raMm4Kk!Ab#1!8D5pEe#iE9z=zuc21cJ_Ut z)xtWl&XY*pI?yvYJC9pgPh3eAhgmV&9>Bg(?XWl628}5ZUIKc}ThF&I3kkIHJyN^Y zpwu1DyEP5W{U|6!)Ptlj;lQJy#;04OI?ACX~H^mJ5PK zMX$KuRmPD+&g8ciZi}aSHC|eLh*%^7OxA%*Pz+G3uW(+}^{NW(Zq5~>{71P`{&%>b zx@f+XVMpuBj;e>(`VJ`w+SE5)y+d@%FHb3Dl22T{fxRYJ*TM!;LppFw&<*Z4l}6wg z8$yBue-R;kW&|~16uoFhbXv$54;U^yMxUkC!e`kr(`fhVc`^vRj|j+0Jxwauy)vI= z_k3v2-#&)oq#`1NX5y*@RwKFNP)$!S$hwBl{$jV%UsR&O7*WYp(?&bEtZ%U27Uv+0 z8(ELt{(BS-#-T=VT`S=%H<5Ii+@DdiZx4yXwEY!MBTcUeD(dr0{}Ay4;5an{MYNvX zLJq<83&X{M(yVE#Tj)wbUvrpJfy@#rM6l2thIUJZlAenDZzox-Yy9*hO3Q49ny_vM#zF(pKYShHo2XuEadkcboQ(#BfBNm( z2Ri|}0XWQc9mSqjiCfXdmV}2Di}lgXBp6-z3UY&OvC@JP$O-^r%z6&%CL8RYwV)aq zpa8IDWd7+RtL(7S8SFz35f@`c)GuGc&<%sX%is%itNvM!x)SS?ux31gkJN6&h=TC% zW}49=w{7NfnO>4Y_FM1e?x-Bt(T1OZ^+V6B&4&E0>Xa{zac({Z03YO?Ut05RV1Y-9 z1}m4%el(~FBr1w{ts6xx0E9+lCejo(7=2DdjoDH+e_AJuDe)xi1<)lHVeJ=x&TR+Q z4LnOT&0tipj@1O@wxJVG$|L#&XWSwc%!U&4b;?nBqoPviN<$#EPpEDdOdQozRLMdW zUa(YHw0I_&#U*Ile<6Z0D;+rHbX_2j5^VF7=XBE{i~@gm6FJ76e0i#8Z9%JEA(6^= z(Y+=fWd0C=hMpKloOYsq%a4kuW+3>5(}6!49cXVek?l0#{L?qkO!Ua$MB$#jkF0^>HjmEtQM3VZOE1zz$#a(dRF zTj|!s&mOc;$B-<3C!<`)Emc>L&&Hhxs@#JGFZr@Q>QA;>L=D+Iq=w2!zYeY6&$E>M zB}lCLnwS<4xTEboPjV>|0X!LuhK_=ecmKoU1O%s($m$+Eq2*@y83m!N)|!-_GY(DiC;OB?!h+AZ~1 zw0%Im2*{j?_jnM3)ZS>dh(TRwO|N#4G!y|PL6=_E{2MR<`B{++NT>6cJ|DpetJ8NUT)24sXKMmgeQ*Hh4GZFLwD2(~m=EDdKI}oaASVu6Yc( zF48*ply$FJM^w_Z z%(^*c8hBjm8#8w7L3QwL>p9Xe2*&L)HS3hBX{o!?pGo_uV)<6gZCJl|f4upGNet|b zxC^1XOADWGE2g9&yq)yIwRw~>Qzr7&vDFW`F$I(-HIYd1i?3+9xh@?ScW?d?dzz5& ztc|~?vjQp^5KTn#h>S%V>V zbCQpdArpAY`^fScTL^MpFyCNeWoVYhg0L+6cW1<$Bu0UA^U?ZhK4IyLwEL}?KHxq| zM>991DWG((M5~IRUDfIF^-KAV1ED(>f~3GI`4Y?**E6DzwR22`B5#95w_8*un}`Y9 zZ>@Sy9zAQviKfH%YyJuZs)SI)mhh=DWR~0FnG8_9Z`cq`SIA~>*mPCqZ@6H-c?d_- zr}Z09js_Oa@5b0p816*6{_{4AoO|rwwvtui9ZqDWD6FBj^ zKyAkYXP)eGsfL+?pP_G}jitkSV`Iq1f*MwT1i3X~sFW zr6c!+TUVi~>E`(AFX_}5nH180LjaW6VdzS1ddoazQ4t>u;Nf7}K)|iML>A_@Jmaok zF|grYA~&Ii*uC{1N*|@Zj&TQr0`uvR%n(iNGs^S2m1k$D3v)~`+y1#@)(gZLTbDaK zhlrd}%KS5NRS#R>EwL+ziSo{kIG*a!m>p+B$EAzN7$0eO@-2*Yht<&2H3cRN6@LKo zn(oxDnxMHQ5bLtb6n3ik{J!23v;Kjr&yaEOvV&OVq1GQ?U;j12$kM7cF+ap8ptmu zW!OC%=esW765DiUU4AfZ$;3PWc`&o6Se3ZOFP3?4UMPEJZeZsfYW&L~%sI-h`MB^* z{f(;F6s?WD z!=cF?BJqN$$mGwlpf~qg-lEVQ2VouL4G^rE|2dz)ruVDerEfvMg24HC?Wc#x-wcNC zK@JjoAid);E(CC?rhU@%&8b`?7l_!m6DwGng@PhwlT90t2D2o%KVUAU%( zOg0}g>}hI;psLUhkvZD&5rm>ODN6+ES%9Qya~^v3M&AXh?1(RiM4b&v0%tA0f1Y~u z)Fn^}@>%pnc0v74NCHiVF~#}!v`-hr>F8bCZl3BiwR}v8v`M><^E;ZCdTUpOswm>G z{_fSbyPTPQ0V4<3{T=lU5u9y{=~LAdf>$w%L#8jpep1X(D?^)RCw8?Im<@LXGdJKExY>>+nd7bdY z*7Gr1e|y*p)KTJ)9``vjI7ZuFTTK}>ZZ}BMBgxst9*wOuyFG1qXtq+aW4d&L$`};Q z-ORI!OE`UL!(afCxbj&iec(<5xbnjI#=Oli22?i44FBp~o_>tJY`aBWyX3xFeE>gm z*_BJFdmVqJ<_>|fXOiq21&czTncdrloT2-Sy|?!D`88-5Mz%YUnc>(6fTShA=1(S2 zemy4KHh6m6WAyV{^BFAEE!_5^*79NPA@&w>C*fB>O2E$=kdykbW9g;A?ao%yWOxQdh@3+To31Dexd>V3L~K7x!miW&awNGU92agc=vJr+^n(`u9`>5Y z5B@C~!+4;WGR3S@*)abkac9@{lXc9Z%XVJ7YK*va2ZNH=&XkvSm8&^5rv<#YxW?CL z>2q0b6Ln@)f*Z8s9^#xYreY57I$We78;0>E8^yifzRVvhezPoE{=Ns3WCFZOE^`u# zMy^wujA>#Am>WhJ76kvQCb}{ifSU2%6IV0Tr9CWbPAh>r!xme>EyIrfNE^jjVXtYe z!!t1?){Zd9ShN=BPq;U_y|1Jr-!y*kq{zv`0rM?|*K64J>PFkKG(03>r z%ER$SZ9r|uAMWnB?4VZQBz&n)>b8rHcQL19r%I{4o?f6luMfCc72#TS zirmzVU${lqXYp1^*ZUpaL$F}p(q@?Fa?5bkLv_?J`})K*Vy|{!((9Z@UU-E?m)tFm zU4ou7$*>n674B=`6#$w4;(Y@PHyAafMzJadI(bOex{X}yz|jU~`BC!SHDQ!mJ*L-! z{6bF02smV2&&ww^kkxTHCm$;B-_bQ_ey`P{2lb+~74IU7S%d33i9`p~gr3Rb)pxve zRdfTl^ro8gg1NN5+)fUGM4ZMrq-?B!esyF2$$on;DHHAl4k(5h2X*CN7A=(*Y_#T~ z+C>psA1ZrK2xK^h7P0Vg+NuF(7+ClFQvyY=%gRRdHMiBdj^?vS&I=~u`nzcg5+RLY z{J{23t9-MV`Mup*p?$id{2$Q5(Vv;h$#7q;eU;|3XjudG#M?XELBFPc+4g4(KnuoB}0nGj`<-gCI}_DV_$--M#adNoEkiS z>CN_+F3OLa9v2syW9=c%W)cB8CV>1t6X7oQXhYG>1g0|x0Kn39WnavfSTk)@gjje? z?D86MNez>CG)jko7Kd=^2blquMwRVRU@4dh$-S)6$hvTEia1b0e@U3}$!V ze|QF<^79j#o>dBp^jIdD7%7{Vo zecX>%Y^|TRgvfPczEb!nYYsnZBdN4u&gfOg@|!$TmZRpU;$ ziby-Ro&)7q`FFqHp;jAO1qPyKv|ZcZ9iGkFeHNZWPki`#+6P9}U?f+nc9rRAV%9x4 zPS~nn3JX-MOXTw1$zVV^Ef+~K==Qw>U&}AxQz&+6MCD{T5@;XwN$taD8=*NH%F*j` z5;VIfKvqAD%6Jc~o?9B2?<3Q<@(ILwyNK?U3@vptQ`KOJ9n!%l->D#pc0G&sOxJ3t z`yCb>A0PqzBA>C+^|!^&C<1}!{pdeO@^=Xu1{uuT$*cAXS5p!W0Xn|FQ@y6%{||OC zZ({@B(?WBp-T2@8pQB67nhjPMoq~E*0=dn>Z?b_eI!?=3(|lM1?+mC{kdprw^&_Zh zi282^fcj0dV0m8%y-m!$k}Ryz%J?^TYSqB#XXSzkXEb&&K$g~6`$NtZ5W_`tF~hnI zKL!t8WN5ID3hLgy?jykc2HXjur0~|)g@6p#M$U){r>ZoCl*E_4udH3Ng(5yM?v$($ zNQ6Cxv1nOyGBh&(dfDjK4_S5n1Hj76F8R>kdD4<=!_*-AE*Q)P{>6OI?oBvt;_jJf zbkwY6PRjY}PRi_(eq85`7&rjgUuIfMN5q$XNgR`fz!n_n`_c$xi6W(=%k>cR#RL zzHAYPyEyTnL(xh+DfPFwM)rdD`w!=mw04vqOutIBWv0%(f8K6Wdg1#z<5efJPZm?B zYYWkIzfC^7mM<#rbX?HLd$94Z9la+?vvS@F3jx)UHq&c;Wxe`oqkZYHuW*Z-iNeKH z+o~Nr4<^C2KvPg@Wq7sqg`&%BdBAtI?srhgW^kYJpKkOqIMQGr{d#>@ws#nkJ34XN zrFkW7!Y82Zhjd$&q4{Sa5!^sU0quKgetm*&&c zAdGqVbS9j9XgaHBbEH8wEJSEmywCyNxNzbD?x0+;T78R^qx#*9&d-YUt$l8d3A~<0S@p#q}x5?JlnU$0KC_Q3~Lofc45{XtH7c8>wJru=;MkI7}J&_V%|ck6!*AIz#~S9X_;&C|rY zka-{iOlFK5TbJ!yyx{sOrnpoR_HH_lL0Rc%{)}jQYrQ?Jns%>e**kZXh9w2G{{L=A z#hfL@=Z=;=Z-6v7WthTOaaO-H=h-JW-8-x?CA&fl=MHKgv$w#RIwhqIfv{6U_Hd$Q zBWcCp{l(bp*cANu-&dKSfDZDr6IlJUP_5GNP*9HK>&vPY{hIp7zUUNZ5*T{iJ{i2i zpp_=z@p*A&)V^u7(0qztV9JfKXl6z`(A{|enrQy(BEY1@)2Dy;>T3O@9GLRoVNUpIrOd9$d^dZc=5G?9sO-yi z^+81EY-t(x#$qeg?uPc{>3tExJ!?YtZ;IB8PpqyIhvjk)(s~qvW_9Iq9x1ztxeMc1 zI;Rn}IZT|CGrgJ^u?GB1v|=JAaD`TEuI01q{)1^}ciCi070+N{Z?Ot7J`ONm`iA+0 zBtDgpn7Et>jp+TQRGu-*4@|6&&VD;Pv)J>`L>L$ijcyIZ3a4qU#mdEYFKJ{1?vr1zdF#pii_fk)ei@28yJD&-S~)u>^2-b|pc?Vz5gwC8 z7du()wsSid2b)o9eHVE6zQ(fp>`cwDdG(vpWshGe>a%l&Mgb#z0k0-@i+VA)!03*a zW2m?ll;(GRDA4Ij=W|kXC z)dJnW4@BOuS)B_!dD!}J$J}v?z#W~4VTH9X*GK1~`{$0YNDlm&risob&YBX{u$#ls zYGCtv=~wJ0{_^>cywR@l;n<8%7aqRYS&v4h!9&y;Ms;mRmTP{3oKfZK;wsdsL z)jKKeDlB#Q*Wk`~0qhvSH7czk0k;Vl%6pV0Z45t36P4M%BTmqNGJG*G6-GTq6FEB| zH|wsjUiOvwYM!Xop1UO=vDKL!>lv2ioY8ph z5k=3vm093v-oPiWdSRDsR1{GuJY?8=Ueu^h2^at6-Y8D0S9TMU&)*W~ieVNlk2^Yx zAC)$lN03ywno?^+z%m}l;Xuh`rMj8sWwFv57tD$CcYl4=8fa;FUEKd;rL5*TKr+u+ zx-L^ih2a?TjOJXPk#t}PZj6?Cp@y_+7L+_2BVZnd+G&u3*R({)j{kCzxFyOL!+iDQ z+H<_r=C5Z<^AA}@{*|ax{G)&{K^LEIDyr`83PSe>6??f2;4>B2^KI`)cK_Vz??Y-y zO_$7%j3hsrl_F0C?34Ofv&5bE)8wIreDFPaIsC*q1ob~=F));oX;($^<%|c!Hy{39 z>=s2W?0ID!swK$L@tIE0--`UWm)i}N9+JZZ)BcnWp^i}n#KE)7tA^Lq}I?( zAUDGg6YreT2Oc;WYS4>ZV#+|tg}QFH6a!jV`(Qbr_R-apQImQ6*snD)XrzvPn6fd4 z+VOQj9qO2aXzHS4(fV_TIERLBmXzU5$O~h@knOHf9ylA6^GR3gSnJl5*)Y_%{&vv0 zvcEi{QQl4GdXZ>1!>&?+w}7bA-MLOP_DYn>GB;625iA2P+VHt}-XRfn=>ggCdrcqW z`l8Wd+Ort83pZ!Q*}0M79o&L%; z97}u;l1D@FZ2j^|(n`z*nXLI2)t&A!h&}h9*b_OH-k*n>6#XI=jHlH=RyvU?$kd~Mx^}OJ93^JSxBUdC{-xikNC&N}&z{Yd@7pc$dd?U$(B0vVAHgost zsR<056q225^nuezE{*ii6c_24J4{d1ZB;TW2PwyVX{&%~mW5G{{i&Z~`tvp& zOo;BPSv3M796;v5?a$a0`a$4#$4tpeD(taUA^`TrUMfU5gX+FZ#lMHTR-;$LzwcGR_WLs6B#U-HH9HCUwU`1635S0d5gBx~i8Mf!1B>6^6mbU(BS z?|1FSXL~6IT+TasV~BJoit~36K6HwdkuAibsax2lY9ml=_BcQFTzo9{n8BI%eEs#j zyDXr{yBpI$=NR%J_r`53^_Z_*nnCdmU5+@FJv%4G6ZJdQl9PYd$b(aEk|+Y5l_2gbtUrwE z=$qL0zaC<5(PJiGI(abe9O)TfidsgKL*PzE3K#9be|86#=nz3^Xt`ID#%#)==q-wX zlNEBIAAEQ;8tb#KT_t%Hgwhja9ix5MhoDD2+KK3>wPELh#jW+jGfBq!i3=p=fs{C= zfzh#`7F5vAg5m7NiUX0SMQ6nu-KFYC)}ZtlZTX523}5^n z;%C9);|T&W;{1#BZ>9I}f(({(YfF;8$v#@SLWpyPzU_a0xC}nbWq*Z^B0Nze@j8Zr zjFWJM{S7*59u3}oyZD^r{ad@IcSuBmQBI7IPV4cwphr4)!4>B_X{Y*}otTUShUnjt zQVZyvZ*H9*CIKoFR`()dsA|bs>Ci$m5w-*px40Byn1!t+BIjGd>y`ctyabmkY=Ok_ z@a=m9bN%udJFX~?Y;+M+XTlGCLy0{j5uy~14tTZr6~6R7NwxT^=Ov4mS>XfACz4nNXx6Yp17F zKwC;!NYZ(dmVhcvGJo}OUq?Dm){;i>dGO>&*p^T3Xjp^PU6NhiIXYI=m3!x7#kYLw zu`mUJWfTmRn5(>tAopQjlN-NqPvQjYBS0(v7BA zU3iI%F~)d0#1-j|a>k4bg=vBNcXTC_yc6;hjN<_3etzP5!_;3%+Ql!W^hl&V1Doft zg3Tu%+y_;*f3N)p%aJN*VE|o7`SesyGwtx4J&Mbvg>0{Nc7dV%a=UW9YR1)>G>x^w zU+;ZFAMw%Ul0D;q%+Lv_g=jv8Yy6RQ{_GwBG|`cToo>8AHFmt=Y<0u>q3psjmimyDiCyyUiK{ncQU9MI? z9+I%2H?j>PQf} z=_cms%az#CYno)DxleyIIDxH9Kb+jdAI2cjg@{yiRF|AY5?_qjHHJSsi9D#;mhI1p_h6Nys!s5Noh&{iQ8^-0o8>Ep8%Ui9CRoH%gBGNpBCdZ}E$pqNIIK zfPIYxG{C;EzA89AGCj*p+I1i107Nd$Hn|!X?EuyP;uBfd>53Gpv9Et%95rGdl_U3omdY}v^jT?|J#3VdLXpO>>B-E zw#P$k*Mitie_t!)?(IDXB4aSH9BEHUrY8G{+fVv>@9e1y0}}&W&tU=5?2);D^_9-; z36dskFLVM6`B`qKKL#?X|Cda-AepF>i57OReJDy8o#_pQKrhuN~RTgG7i2y5vh!roZV|rldX~ zNIDDY)+3^B-Mr7#^7fo3$s2&Qr3jW&W9y-4JPTWYnoKi)HI@p?G1LEXw=4%}zr+bH zyTW_}y60u8vEur@S`-dAVGMDi^c8rSt51e;kCS=@cyDb4SQsI52(%ggTWVJ${zGc~ z5w}ZxOIQBO(0Wbj%V^IOzDg!(F7h<6hpB4F9$qWC(xU!@hgRo)9$)H}`oQ*YKIIVk zB-0$p7-+2V`VmQRbPr-64l8YInc%zspf@+-wn(tvZBm~VV0lObtszDF|KLJu-PxJ{ z(6WlKqOYPAVacR~8M&YQ!yE4~dB{K!mjUOyWcGTxSFmwEC5$V9CASDJAv#+o` z-E$qH9@+psbmF&rQ}o~ZGN*hn?8RQihn&VR(P@M^fN!4)dmF#UJHk&8%|eX~(AxXP z;PxK3u+0WjqCLr!{1`_5x4Vf1`2RonkQ?^ZQyTK1drX{YZjdhutB>dZSuC9UdJiMe zfKR|Z`VrluXT|6tlqvsSpK}iKIYcIcY1NPPKt})Kk}|MXn^a(}{MY$(A6@dXJ@dbY zokKOp;sUk5+n&F(#~&Vpg1j=-*!709aDivv?Jhpt^C2Vn@cV6m0A8L|vlIG~vnSr7 zk&;jtKgbP&VW^h6vx!#7UVQQ32?*q)pu}-Up_OOq5*G~Ne_{Iw_V5~J<;Pawo6 z?G5qu#1Nl=j{2kfShhF!{d3}XyKF9SZ37$|OjFNd&vPDnK#( zV&AW%yT@PNy1gfwoJQCWU%vxEk*}#k^eg{~D?Z;GI6HH^Vei`TQ*%Buw-u;N1?9l{ zSW9gzE-ICZ|9D8^UX<_*jOFqfEH-^!rEQTo_3?4tVwM`03GClw;QwlTxi4 z|2qM=Q+i=`L5;K!YHwbVs@@OqFPnloIl(0-D)2Yy%E9LlM#CbP$wWuTf$v#y*s~JU z9XQGOqryN=WLpwTs1NwAdSVZ(^`)#m=1MCEk{PkI_K(F_s@Tx~kytTef-j6*k>bV` zWGR5mB^LTp5&HXOr~gM{#Q}3HNamN~_*0Mrw1$xF7AUjDud-)8gC1`D{72H67&Eb$ z)SeS7F23%Kpii~ z@qSb!=AZ>b(_*x8YEuH&t$^FFNH&-QQu`d%`qNYlP3)LglcD1$7-yNjISNkf(ML2| zPPsBjMlee5B1gab2B+?+q`g}&1MkOvhEE()Hhb!8WtCEZ83IMJ8i6`w;8rLn!&7rZ zYt_u;WF7(Qhe=i6n3JFa`Tnk`S_)dfvo-|!%088E2canflFCv9X#Dym*>x{Z+A;4e zm|>Fr&4Pa}0KO_?+>|z&1^B^#(IcVO|VnwAdfTDZ2y2U`i8i z?5BL2c1{qszVEVhej4Cp+y|#U808jK?V(#QGeC9hy^ixK_W~;Qipu7z)^q*o@F^5x_dJus5M9wgIWW1q~7~6 zA@Bdac)l^BK3go>$2GGdDU4>_E3znL9fkef*s?nH_n?#fm~a986#53!dKULIYZp?OUk%9yrmkN;W@z~nmOw*!cw+O7A;46y! zlsrC;onura)#xgb@Ci#LGat;<4~6Pep!KfRc@U+Q%RacVHyPrkD>H2U-NCHZFPVC!6Nx-NZlNXYnWUBoGR6=SOgWNs zHsonV$3i+WYQ*D&PO{Ivqs_k&)t*LSs0vPbqjof3*@=*T{@kG*A= zRdx=JEtyC5p2zn(GWz@p-^b(aCqLZhzOU=K_w$*e>cWz@Rtb?$j4Dp{Ptw-VXC4$> z0ERFSD0qAt7%YDT3+yPu|m=&iI4MzxQ+c_V;S*LY4fp z)+HIE+9B3XG&Hx5yWo2I!+m(AI-M127~a5CF7@(FTZ`vzgRxo=P+v?2oUYZ%xgMKpbo2T@*B`U3W-#VN!+Ijcv__jP9 zB}ndytR7GMOm|3dje2mZ>n^Dj1?}i3S+^Zd*}HysnsBJi`Nt?YPC9Y)Y?i;2vh)jr zaln*RgqHnKp={vbcS)K<0tdNNS0rPFWbd(a-U_;pFQTPe9>)g36y<*gA8AND6kh!F zMHhyW({o7wSWi%95}LTli|#snRihewT1q}SP#BATlBeZB=43YIQ=uHJ<7&p! z+q2)>Ladn(C&7eQV73-OUyg z-QLG+;BclXL6=mMzOcSRSs#9RgabX+V%u~IOiS;VT4{I*{VvKhNx*O&tWKZ4wXwr{MbcRyt7M7L;M&7FP_tiSb! zv5JA8T({^Dtfc2;(3tsDogL~3*K5W{Dcx%WT-I9S;wJp$|4A!>afIz_Ox&F`ei&&f zqa06X#;amympoAl@rQ3Zbq!rB#iiECY}T5qUoLwBQA@_qf5v!gE4FZf=O0qMNg9vs zwav8HI%jldcnc~xvFOn7B$K}=!b39k^1Xe|Itn?#z!^2*Z5L@;8YgXAE6O4mkf2cI zcWNV1utzD8(;y*>A1=n60MXVGlNwJ7_rqdf@}veIYN6Ua4*m zeaoO{puf=4ZBFqdK;yZ(f9e(Zsa3Inn8~TsUX+Ww?WjNh~4UMyxeXP*+q)$5&> zr_It+hoIAe%{>Y3nBl&y@mh+m6}_YSS#HPK7xl2?vtz=3OCG4k6+0^A;jGa4;hE5c z#G^*bw;icGYj*?Z1>EGgbq;B6nmXBH8DnZIUy!r43E)_0Achz#A2zIcm4ux zJDT-afaTBlKdu1Xa1UwsofxDNrMO?qF*O(Wt7O&V;I9W6b}Y|U~k zMzWYdpsvaXr@edlB;}dgLhDx61FcK(LLx^gH~J#amTCOF5;-<7aRzm6pa0?gB<&+k z2C-kO8BPei(VpbVGT9U(*fM=<>5x#KKlJO&!r>P61n1vA0XvVd3-4Rrk>7akJ!0C_ z$97!)XT+DBoC7x^x#XEn>C833tTn-jV{sX)|BcS6?Fem;&J4NBUlBb#U(@Mii@8yS z;f|*IyTXfSTG1_<8ILy8C1$qtE>s5#a&hAiHGlFK_|{y&1H}Q&Mc7Lb7`V+dbnd4_ z(%Hs~%F+kyLv8jNPBYLEa(^V-4m|RWl3Cze^~A`yY+#IqqRi>T__pd3YZ4<016={p^(jVU_nvGjNbt!U&u7Gj>>(Xg{!4?S!5%*u4(Wk(={_3sMQB{& zvURoL*`-@t#WR1S>;Lo0f`{JGcb3PzqCPRg<*l`7_cYQ}X*R>U7z778KUSY^Nq zNh5_T@;5km2EsC4ts6#Aj_mgpgUBroFpFMCPZWZhViQR zV>V$qzziWDr*v87bIK{L|0#Y>Kdq`;Xz^wIomFI=q_cTgC2E@4mRolHIVyo$@9?`4 zw6}vFlvw}v`GIv8MkCK&`9OptP4?#FN&D zd4O*n;wbMn8j~P2&aE>?5|5EKIHDintasCW>qHx#zN9B4_u-)o}Xx=#z{^Cfm`U%KmKufZQfS7$<2Pf)VbiWYzo;)Mi(ljBU{L0Pu8Lie<7(- zR50W07&xokV%OK*xixxdXBqN9G@2fEG&^*63PZht_SlK_L5yFr+nCtc#8O2ljOAs& z`3DBzW?`v4UlQ;N9??KdyM4=dEBt6&S0U0rW#sXH=<1gtL?iuSN8<^P!9UPbK!izs z3dB)eRqcP7!}Trkh0QO@L;P~nCtH}f*x1gCR6_3I(7Z=7n@Uavi;o6l^{!OlOpkpz zbVY8cqA~AMb=E6!UP|EXXP3Tkc8`%khUe4#WVN@x(hkglp{{#KMhcV1pLHvEV3UjN z8|Ow#$B0CoS2-t!-@Y?ca_R6=)Su3*%@_;upMor&2GS{@N%>=?!|!4*K4${kKZgVZ za4d!~w@jrC%fV;Y>$`0q7~&@ucLb~L82(NR-1V8$>2C|oTUqy6K!5Pw2MAUDikg*T zsas_*arJ0mia&7XTAv~@>=_orD1qAuBzPeSq({O>pf1`?saSUur*$Y3LBq2Kxu%dk zvqPwZEig>WmaRt3_%b5yX!dRCU;7Yx7#u;~CzsNpje})fM;2xEPb>XWL*{S|ccv&A zaLKMyh5hr&064|`P6ku&Tpy!xH!5*kYQ09w}D*|Y~iFomBZ!R88^#WDndN84}m>9+g@qD~ny{#Q22u;;oJTD-z z5nAQyJxu!%c8D46qxqS(J_A5Gd;IC%_{m-?+!u0onJS+Ja=;t#IN&T4V!W86;zy42 zpru)FxGi#=)5#h6<~Utl)zoqyjI!Umk~LkjML%ZD+8Atm$OJ}aMS1$U?Z9E)H5>o= zg$L}s<_8opMjo%@QZQ!ioydPK3z#>RztY2O9L#3s$G1dP-@;0(v+{?MCYlOT_ZR!5+4OpuO0KA8-MRgq%!}_pBbzI5&**fZPJs>#C zcRjdu#OBE{nu_BR!A|wU^#Ypd72F|1;a0TN2Ti+2kauAndAa%Aln^f<7glL-t-&WL zoP2RfEh}>euY$czsf@0(=uxa zK~ku01K|OiC{S@|{61&GS6$LO14A4DvlNOsTYxcHe65rB1z^%a?@QxvLX9f{7|;R# z$Jwz4=JS*lcdzq_b*ld=jXRHjvwF`8=Dg+4V`I5gc7||-LmN+37s+U=FDAVHxu=#R ztCsA>^MRtv=`J#SzKd<|mTb!6=+5tx5&RFyy(UrJk^&Y;B@A%Ji*{knPmEDpp2b1q zFF5y!14`PijmBuF_T)G7y-s%nS076^pB9+pGH|xvupF7`IdK(!aHR()@8?@+$OdB8Io$RWwpEgrV_MEK87 zEe$I68_^#0m4U&K7#+cm_}qMRg?lJd2>|8ghoKMTgf^{~7zexm6%(q=NJm7xi~E?H zH7c$HY1XP+wzYi6yW{)3ZNLTZR7sjw2Nlz3N{9xfPRD2K?;1hNz>vWq-ssQ_rOZc4 zL@D1$I`iZ1K>!vl{P)RxvfHq9dZ6^&*Z+Lnntbw&*H5h+GK{oo7W#SDHz(5m|8a9_u#RiGv%0b1~E(&h=V)b0bUo#lON(b%n%JOAqLb$Q@a z2BmgB|5OJUypYsBha~0hK~UK688FebJHn4ew%v!0as8rOy{X=9*9yVYtrnTMW0e38 zu`czE9mMR-(C|PJl|UO;d(oOQD?{gd7SEosO;Bo8CnlkxiWa0X_TYA9)Upqd&KZz-L& zd+qVzLGITtR$=aSF`*`|PA}9$4l-fz7^o2if{)L6-ge2{wd(Xl7&wPSoS>={35rL1 zMGOd(&6|GN2V4@)q1y3QgS)%5@p1cq03x)S`N*4ZSa-(y@j6R5AI4%zMU}e;sM!YY zR^5Hs=Fa!qjDw$`?p(l4;!7Ud;JD6LFq9~`kw|C)W6|~=NBWXkxu^MBY3a0?1I8{( zxz^iS>MO6}p}TQyV*G4)blw48+%LbisO|2_)*NQ?1Jmn)cLNuen}ya6uMsXfdSBC1 zSTdZwC3KM40o@ZAooozKYESkZw;u`XL;;g&Kg|D7!1S zoq=UcO`Oo@X)tnaD{p%ftNYH#rr&NE__2Dapj3Es;b-**5`T^23qMwyLQ7T-k zwPN~T+<^@+a#gj%N5fjH!~e?|%m#ASaqyTnc^Z@U&MQaF)rMSUnYjZvlLHnQva&9k zdlv{d{7HQCE!*GvWRW+Xw&|*W@RrZ46*#B>1J%1J^pWXg0>oI?DWHv5Ie-6|f=1Kg zrvK2%El=e8<&f)F9=;m*hLsrlG>dN}l#ic4gn<8nGoEx z_MO{j@@d-JLVZ@;xbjAmJ{f=(a)z?>D=LBFi@zCvbM%H+lr(TqDhKEVGV#UJ+C*j zI$}P1T-oLICzd9f)dD`m&3#W|f!g0AH9Q^Dzu>PK0(A!g=GixKYW%0QB>30As8%B) z)V|B?8zp%Punvn{A>EQ36gSebmx~o_=E-t)tlBgp)hxK~bY=gY7Tl^GW*X@a{=i7& z(JJ5sl3&jj5FiS5${xo4j}*4q&g{qN(U&19!V&2|b>3$PlAR;Q>{P39=`@VN!<)gc zqBIkID%!*2FYkwpk~1qqF+FLRpOeg=zmqO$!lI;qzW_aH1=D?=zstjB2188N+np7@ z@6T7rx&h&lbvuIUcSKRjn z%@W`mFEsK$jg@|E;Kd&Ue178DT22&%XmQAp))Z66jawBg>cTt!a&M&(X=A5;O|iUX zb`5D|ByH{-!h}z?y$(P(4>GNAb0NU;I7**woZ`k$=_v$LSkBAh|((W56P& zGW_QcsUW%1Jg=~ZzeCMIA)XczGlsFq{Mu|G3|XcJrj>hU@C3ayte=a=CThS{Puo|M z>)TS|{+K{PeVCpLVW>SaQ$fV<8gon!{siy7@pU5 zs6X*%OTXXS)AAc2%B-rvtWHDSKqg|fz^~&9S;nOOHWE?DWwpu71pftM# zX#!$G#KX%3XN;U=!s{lAY~QhHYnhpE_1!l&z>MpA0>*hg1U{=BfQKg8BEDPaj>ABt+{Yi4z$=>s6XZ6-|mI5Xc-KdNX zM)%4>G2zLWH-h7o+N$PUuZdnjmr@TMQhoTQM^I2rrVpbOE+lefKQMR02>9I^LTVb! z=jY3vLGzwGz%{Gdnos2xRGC!|fna3Ok60nJZQaV+uhN29B6&6PTdkBroX$Sy$XbJB zNE>VkQA^803;Gavt@T#0YK^Tcy5ns~{J~f9;DH9g4Zix~_ERs_{RUdWI+aE_z|$c9 z;ahnQiZM{EiZXH{ofmWH>SNyrK_kg;7fg@5L-acT$%+Ty>Nty=P%IS5>|!f!ZfdaR zSX{EH9`QE#+&+{~oQ!Aw=2ej^SZcQX`iJfLwdhPT>Q5DbofZpoIglJ@lD*Z=$T?k- zP?W+S*WYKs5$@}H9irijr3`9I%RuSl9Q6MC_@#1JQB=nYfdxBZNf$l$Sfer+is?zj z*kg3Y<#{*2a*Ak>$?>>l4ub?UXaSpv;kEL30-mA!STLeabN?a~Bu1qb7;DT~jw;Z_ z1S95P=o>D5e@N2&FrQGc6fmVI-{znvZNDdqKLX9=C|VPaDYyVum+b&qww)`)kJLs^ zGH6rC4&%vj@te_muJKd4PZ<_WO>RL79AkaZz8ZQqNh)v z{5wA>PZ?dT>)|AO0~c9ngTGvQ8=zY5xrntG2}V9^dXQO?MrK`on(i%eH4^~o+hF)s zbF1Brs{WouZN7J7ydaHH)$Pv#fB+)j6Yiy+4khmGB7PzO=ms4*hvdMQyxP?Az!z%40fct{d(vd?UGE3S zmwkh+-*YsvV1#S0eH{%nyVAW5c8xdp207(!p}PUC+OBNW^BhC=He3sxjT~6cc63=4 zV)D7RS6>B6fm3b{7F#%uHYmRtpE5UezjqNNZjOV*&1tg_B;^nF3zr5`#4@>M*YerN zuZa953$!;R<-%G6ZC&&_X1v;IbCMy-pEOUQ^2*G#j%|16ee}l5BFCvb%|wH@xOTz+ z9_?i;C_&^W7<2q*q==n;LP!FjQ*E9Ibi~!S$_~6B>|4w)@qBtJag1}X#UITM;nNr5 zD;|n;boVG^ry+X*VhHD?ZMO@LJQF3mUjf7N*5i^&N-9c}?O*M6E}MOVV}vl_vJL}T zP9K$50EnkTRUt~Ww<|as@{K=?pUHN$Tz11QeAsiEvs{7WuGYb*ksjNuRqAwI0QrLK zM$NV%zdncRF=RTH84=e@$x0e~E<^f;%pMKq(EED?T#U>&bzEr4RhFHDo(0Z~?cDFX z=}Zt2Wxa*ZVNZ7q5@qq%BHq2@`pc_eQ%C$~geJ$S?Vic(07(f@u`d6tvJYq`hr*o8 zNIBXf`;GHbWfc@VVj)8#a^&Bt|MC(%8p78nL{}wcKvYBvitu)553qi0TXY%(9gx;L zvpMg|s3aDofO<+YiGICjw;_>a)w;WyaXzNVu&y#u5R7PA1iGOmqB#gG3Cl{~s#M!d z+?koop~z(1nljxJ4Np(|^Le`BC)D)?SX$g~Bo)=%MK=Ku3TKx0<mXpV4N^v{INStugD1;r@;&0AZ&=0M zq;jeJ*$-iR6)njLaM6$3n|zMmZcSZs2FWJRo?nC;DuWx|i_m;JTT2DSwdA3tx& zF9+Rs-1{CYv|LcUeSLIZ16KM3 z9XiSR)_YY`=-F6lPyib{M4smt>BhT=?iX-tl7f%DzAH-o8w3144i?Pum3t%-O&Tvl zs829XDzg_4nw|ae?Dz%X!2uEpD2GBo>=DV0Wi~KyuJVxK^z)D^-YX74)|~P8Fs5ma z0->}IHE*gw&UZ-%=yXdpFf{8`C8e0Kl$7%m$;g>GLSDGfC5pccY={Jlm8MriWiGZ}Lq^OXS|(&YShfQALwNBWpKA9)H}vu_-?bk^qkcI6 z^uoK_U%Y+|03Q(7s&3aBlwKRnmHEf2-yT<+qpM%^J@(U{o%<;X&h!;{V|pl{lb3)KAN4?% z3woS0%ftff>$nKU+5{!K9KVsCvUfmPvg#Wj2yY3qz>c;OZ8sfYgQLU1`AjoX(?}cd z{Hi_AtT`J)hKP<1mE=!4Z?zX(SW<({Fi!dm0uRQ`n3aPM=aWz;!#mtIP^4hY1rcKf2t6BG#N00>oj=ec;3zzIjk+!H= zCPL@ZF~q0vC4`rMQ|TT+mZV`q|4M^0pCf^}!$XJx<-;;(jHf5pa8wtUmRzkKEHcd$K!gI3j5D(p2543|99RcyS- zWa2WWg3ZTE?MEoJKEaDSw>&`D#JTDFh6Y5Mqq3)OLs;Dxwm{ugW z%2jrv8(ffC6O`amGw&hIhqV8@)xPd7$j%1wWtzV$DR4!VZ^fh4z%Myo&rP$6}Xua_2PrwTG-0o>RKZxQRcQ}S4< z`jOpCpV@Qp!|1jmS0l$N)*8mth;QpaLsvcrB9ok55WM2VNvm$Rb?mpsa;dwNo0;c! z?PKr=d2} z5J8%E57r;+b(L;j37@=fkars121KnM5VbBwwA5yWm6TFNMkakFtFIjexAUh_ZzYI7 z8sT~y6ux7AQ{0o#Gu%A*(SgMXEa4>vl!$&Zso78o@VD%=e-8u+}`@v*2^6GXZOeW-ZH z72aB{$TCyM?P;Y(6=jf#0luOBU_K2Kn4V;Ht&nm$f)GJ2)9s}zI=!8Ii{si&;!(fL zz|PcC`DvAU;U{<>3WMC~6Pi4bN-+xoOt02(g$amVtEl3U5Svfy9~|p9c}E$_{C7Xe z2jTO^kVfG$nMx)i-u$?8k+>Tf9Mk3pR1t)&@%KTzylyPlxVtQ#tLpWb2`3xzd&#Nr zz(+1j0Ril{It@N5TdQz5?PC2m@Jkq41{%R$7MR`ev02gBlJTK8{jFZsoU-g$paAuH+%=B`w{@P1!Y`g9CPzg5eBXOQj0T=5&h#W zwonhEg$|0&?!DXWHcDPhBxWwtDc9@Y9YLCc14m>B<-l66A}2{V>XL*B4g9rA_{F4x zt8PDto=W8fk~X!)*}9xQyRohj#Bx`j>^(QIQ~AK0fE(ICbn6v@PhmGXu>Avr?}L(A zg$m35u18U#yDc|eb)mMQYNECFmFv(8rA9SCe1Zmmv$lj#7r@e85I1Wed?m=Ud=Wga zgfJQY@HaUvE)6?>Wv8|E{bhz|`z?||uWu3h#A_TVHPUlBK#C_a_^Il@JG&eswS*cV zT4$j5JHA$2qE0+oikN#~A7MKID9fzXiwewi=R{6!EHNkXxM_^@n|SWa&=zaqr;C$raa2+>A=G-G1QTze8Pb z_msf&gJ`pI)A|T;C86`4^s31=Y=O->l}k1+K~UA1HI6me@QEdmB|5+VBT8 zAm)VYzTjJ!h#i!Wl_)tw2ZFR$hmlxGLAz{2{wb`X*Oz_-h(fPP7+ zELb=uKixm?vcv9N}|Mcb(Y1go;A2GmnB2n^&7As;e$Xl zdvORKJqmH6FDfg2x*mkr+Yv?$eRG`L#E8~i6$ZZ+)PP0Rm*)l!wY~fKac8~VwK+O* z>d5MIosy#sKw5?%I3QB_MF=wPF1qy<9}2wqK9N zy5jJ0e`XCv>=cQdcOXBHAVtZnN@k<3t;~3=Z86r1#H$Z#c3u(ACJMqUkd!0+8oq0O zRSLnyMq6tlvo?427l>3YL)0s0@_?pzL)Udr-`(+M*-jcbcmy_OmP3gD&K;q|nu#6}Q@SmYB^r{1rix1UuSos3r>2uR0L0OexNzg*T_=>Y+P_A zlo#Z@7`h&K|4J?sE2v;c^-t1ROJNtuD8PUd(eQN(F=uJgrhDrrYXmW=uw5SGDhay4fuy!j`mLfErDQqhh?DAfEe3zBT zv019XlawKuCSsq1rc1PJy*;N_g4bsOr{3Y-{=w=uapK@(j<+Z49DT&SFVWYObOvTr zNR&XKp!o(F4lZt44*v$0h}t4mW(QoiqP<2f+tikE3AeV#7n*N@ymOug>`WjcA_!Gs zyWZxyOe}`PJviY80$b=oz~0{E%tSLfn9S32e2l^INpYq^(?)8W(rD0eFew5lN**6k zF7YXR!7@O3zI<2aHfQf9mXv5fAlKybC|G+c3=vVWm2_6&LfBVBu58Q72-duAs2mD?s}&S|AG9$u9%d*288u+}sc?k-PIQSG{)U zs$Ob2Mk1^sgt#Ul-m<|Z(T$KMkT-%MmKWE<#sp6gO{GRaDv}}`x3G4FKW$+mtU3b4giSXS7_nG7PZzF+n^_J8c3>F!t|4mVGJCDTX4z_aZmSVXBS~}t zZj1e0hJsD22U3hE!tDD zzpz*4TAD7~*q?^knIRodZZf1|abhWaQo}w0GonkKe--54ii}UL;MaCOkeJAUt+egf zl8gxD7gVvH%``JMpb>^%59a*^s0pf`DX*QTC`0MN6|J5H1f+h72C z&swA7(sV+K8p2$Zk`UTPvtqIwaPL285BFPw)P}16kotw{KiD1lOan1tw(dVo079v5-3-E6E%k; zmKL56`4YD4QSty77N_|THzsC%hv+&RYy@Vx>?mO0l}t`-xQae?S-R-=*d6TpyDk5N zRdL6l7e%OW_F`ly_BN_{IcQ^*bDEeoLEZ#{U|i9Jn7+@G{}nOn;agF%_?2NgCPmqA zHbW^)szjo@Ap}rL`Dq#ZD%GS?0&AM+1~#eMVRglt{TMOI4MwP+UE&H=A_mPE(?HO| z+THyot$xpRB6i5w^^WLyLf6+@hQbi0lhv*WQ5nLI&;GbN*N=R@2ETi z6wtA1VWNK*4zu%c8-0IX%sGaoAuKfHLUeTa@_14yO5}pbO|aj#GMak$i7}@wkMZ~i zHnwXvl0wmo-ywB*yUk8{piXSya}A0(@NDA((f1V0T`U-%=51i8m7HeVMGI3n>$OYAYJD!;s zw?{7QLenXac#Yi&?o6-6KQmkg($_zhxnXT|=|r;bYvs~}bCZ3)Yi(41kL=ET)p`r8 zZ)s0wV(Sj_3y=_9!4cgC(I{_xBw>QaIjN?lrb#&9>RcCo5>M(zD&pe%I~{*^ftAbR zKXzhj9hiuqy`-Z0G*Q`YLr;lwOUk+GX#2*b8N^?-2!IC;d0fHiMr913&V+J+OHTrC zD095npEwUFown=gPJ(ewblA9)v8z5)af?FBD{p-nS5xgo)Q=NL7P9J3Ga=O9qD(kv z{bP&bIIGV0k4A~H2bI}j$Xm@sYacw zSUwTDeSiLYW9}1~bpgC~JBOc*t7*@4m`R|DN{i*}Ia5+woHndBObg|bL_Mq6a_n|e za$Sk&1@H8d_{EPxb$Y5ozdKU?ND^t{8N3q^ds?WyP`+%o(-3Not*yuW5yWS5xR;lHpYA}ke!VoP~XO~=gfg6o(^D)N0*SQ)Mu`ub1$ zsWaCNPT^qffwKM{>Obep9=ogXmvKbB_g1m^KC7IRG)OBJ<>4E!y;^EkGvdX>!MXPl zLtr~RC!^d&g*A0@^eD@dVvcx)Uv;MS3qDKaOFkj1S{4JW+v2{oZR2eC`y0bpeCM^c zE2|3OQ}3U8UK%YDt9CWW>3T;%XG@G$NO+Y?j7n&D4ZO1VD294srs#SlWJ`YxQa;_4 zG5W-`+GX>no-E0IR`yze+nSRv_FumU3T~M3m4!271x=!@j zjZqUCRKm67(4_v*q*`GweaQ{CG|6CvHnnkOi)VgqPB?tdpSKwaykhueWK^OFRxcx^}@UN;3EnLiDM`2Ytk)re)P0PnBX}gi6m!c1u;X zqgcM*y{a+}i7}os{W1oZq-ht1j*5Px)mBv(7j2$?uRcuNtU^-6ted0q&Ot5mF6@Zf z?0^6K4+umP?|+o=KOpSo;{GQS{>Ki$$oc;X2rRsFJ4csfDv-<<9j1?fzdLfu|7FM+ GKL3BNhg%r{ literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-traits/face/pink-face.png b/CandyMachine-Storefront/store/js/packages/cli/example-traits/face/pink-face.png new file mode 100644 index 0000000000000000000000000000000000000000..9275a679c184f34e1148329a9d6762ea5884bde0 GIT binary patch literal 40783 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

%HCH+H^pZioNHrvo&J0(f#a$Lb2iKa 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 yA2t5R5pHF~4a`%+)X5P{N@Baf}XCp5F literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-traits/face/teal-face.png b/CandyMachine-Storefront/store/js/packages/cli/example-traits/face/teal-face.png new file mode 100644 index 0000000000000000000000000000000000000000..8b6b17efc7804af270c21908a8d3264901d3176e GIT binary patch literal 41159 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 ni0G)|hcxL6 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 literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-traits/mouth/block-mouth.png b/CandyMachine-Storefront/store/js/packages/cli/example-traits/mouth/block-mouth.png new file mode 100644 index 0000000000000000000000000000000000000000..e115c780a365ad553ec2c802f14e290e7c0344f6 GIT binary patch literal 18348 zcmeI)eMl2=7zgm*-L`Z`zHVhnnOSbL5KJN>Si8-|8aiDP6c{Fn$(3zmHNX+gaX-|I#5`6zS?)L1CyFL6qzvnl2 zxDIcvD@!O87-L!P-OhT(GzoRfT&6@ky{|tjJML7y%fb3ztof>Za30?8KH~APP0Dd5 z^U_i^NZhV60+vcv3laF&5=IFMCNwd_nzUB?;Zsj_T*~B zCnpO0CG-0(o5tFb*@M#;;u)?tD{jxV738&qX4Z>g#_`(B++rLc2^a}b00mG01yBG5 zPyhu`00mG01yBG5Pyhu`00mG01yBG5Pyhu`00mG01yBG5Pyhu`@J|#JZJ7SDrF+K} zCiUsh+LFFhzS^H8H45L$=c_9k&0_rS@Z7{e*b>^FuEw$g)SYAFqCFCAG7nOqT0Lre2a@%p}YAOUH{yLG3YmW9Ft*GYK{uys^>z zlR2bv*9ewGbRe{q1PAq&M4;nAJ4v}oXPkZZ)_Ro$-zz2lo^z~Ak%t5W zywK86GDRA!B{!!#R~d|u6^68p(>*NDOOf@-@U3v`&ecOM1DO@Bg3kD1ZVefC4Ch zf~8epvspciWeDoK0G9SiaCgiGm<^x+3ZP)A6i5f9b+1NrLC56jmFk;v+`DR>{SII2 EFXBj^bN~PV literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/cli/example-traits/mouth/smile-mouth.png b/CandyMachine-Storefront/store/js/packages/cli/example-traits/mouth/smile-mouth.png new file mode 100644 index 0000000000000000000000000000000000000000..a4b0d1a5843405ece00d34a4a6cf5f899641f566 GIT binary patch literal 25740 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 h@c$MCyDWY*97}J9!x*s!(EoHz/build/", + "/node_modules/" + ] + }, + "dependencies": { + "@aws-sdk/client-s3": "^3.36.0", + "@project-serum/anchor": "^0.14.0", + "@solana/spl-token": "^0.1.8", + "arweave": "^1.10.16", + "bn.js": "^5.2.0", + "borsh": "^0.4.0", + "commander": "^8.1.0", + "form-data": "^4.0.0", + "ipfs-http-client": "^52.0.3", + "jsonschema": "^1.4.0", + "loglevel": "^1.7.1", + "node-fetch": "^2.6.1", + "weighted": "^0.3.0", + "canvas": "^2.8.0", + "image-data-uri": "^2.0.1", + "imagemin": "^7.0.1", + "imagemin-pngquant": "^9.0.2", + "lodash": "^4.17.21", + "merge-images": "^2.0.0" + }, + "devDependencies": { + "@babel/preset-env": "^7.15.6", + "@babel/preset-typescript": "^7.15.0", + "@types/jest": "^27.0.1", + "jest": "^27.2.0", + "pkg": "^5.3.1", + "typescript": "^4.3.5" + } +} diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/candy-machine-cli.ts b/CandyMachine-Storefront/store/js/packages/cli/src/candy-machine-cli.ts new file mode 100755 index 0000000..1a0ae1f --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/candy-machine-cli.ts @@ -0,0 +1,751 @@ +#!/usr/bin/env ts-node +import * as fs from 'fs'; +import * as path from 'path'; +import { program } from 'commander'; +import * as anchor from '@project-serum/anchor'; +import BN from 'bn.js'; +import fetch from 'node-fetch'; + +import { + chunks, + fromUTF8Array, + parseDate, + parsePrice, +} from './helpers/various'; +import { Token, TOKEN_PROGRAM_ID } from '@solana/spl-token'; +import { PublicKey } from '@solana/web3.js'; +import { + CACHE_PATH, + CONFIG_ARRAY_START, + CONFIG_LINE_SIZE, + EXTENSION_JSON, + EXTENSION_PNG, +} from './helpers/constants'; +import { + getCandyMachineAddress, + loadCandyProgram, + loadWalletKey, +} from './helpers/accounts'; +import { Config } from './types'; +import { upload } from './commands/upload'; +import { verifyTokenMetadata } from './commands/verifyTokenMetadata'; +import { generateConfigurations } from './commands/generateConfigurations'; +import { loadCache, saveCache } from './helpers/cache'; +import { mint } from './commands/mint'; +import { signMetadata } from './commands/sign'; +import { signAllMetadataFromCandyMachine } from './commands/signAll'; +import log from 'loglevel'; +import { createMetadataFiles } from './helpers/metadata'; +import { createGenerativeArt } from './commands/createArt'; + +program.version('0.0.2'); + +if (!fs.existsSync(CACHE_PATH)) { + fs.mkdirSync(CACHE_PATH); +} + +log.setLevel(log.levels.INFO); + +programCommand('upload') + .argument( + '', + 'Directory containing images named from 0-n', + val => { + return fs.readdirSync(`${val}`).map(file => path.join(val, file)); + }, + ) + .option('-n, --number ', 'Number of images to upload') + .option( + '-s, --storage ', + 'Database to use for storage (arweave, ipfs, aws)', + 'arweave', + ) + .option( + '--ipfs-infura-project-id ', + 'Infura IPFS project id (required if using IPFS)', + ) + .option( + '--ipfs-infura-secret ', + 'Infura IPFS scret key (required if using IPFS)', + ) + .option( + '--aws-s3-bucket ', + '(existing) AWS S3 Bucket name (required if using aws)', + ) + .option('--no-retain-authority', 'Do not retain authority to update metadata') + .action(async (files: string[], options, cmd) => { + const { + number, + keypair, + env, + cacheName, + storage, + ipfsInfuraProjectId, + ipfsInfuraSecret, + awsS3Bucket, + retainAuthority, + } = cmd.opts(); + + if (storage === 'ipfs' && (!ipfsInfuraProjectId || !ipfsInfuraSecret)) { + throw new Error( + 'IPFS selected as storage option but Infura project id or secret key were not provided.', + ); + } + if (storage === 'aws' && (!awsS3Bucket)) { + throw new Error( + 'aws selected as storage option but existing bucket name (--aws-s3-bucket) not provided.', + ); + } + if (!(storage === 'arweave' || storage === 'ipfs' || storage === 'aws')) { + throw new Error("Storage option must either be 'arweave', 'ipfs', or 'aws'."); + } + const ipfsCredentials = { + projectId: ipfsInfuraProjectId, + secretKey: ipfsInfuraSecret, + }; + + const pngFileCount = files.filter(it => { + return it.endsWith(EXTENSION_PNG); + }).length; + const jsonFileCount = files.filter(it => { + return it.endsWith(EXTENSION_JSON); + }).length; + + const parsedNumber = parseInt(number); + const elemCount = parsedNumber ? parsedNumber : pngFileCount; + + if (pngFileCount !== jsonFileCount) { + throw new Error( + `number of png files (${pngFileCount}) is different than the number of json files (${jsonFileCount})`, + ); + } + + if (elemCount < pngFileCount) { + throw new Error( + `max number (${elemCount})cannot be smaller than the number of elements in the source folder (${pngFileCount})`, + ); + } + + log.info(`Beginning the upload for ${elemCount} (png+json) pairs`); + + const startMs = Date.now(); + log.info('started at: ' + startMs.toString()); + let warn = false; + for (;;) { + const successful = await upload( + files, + cacheName, + env, + keypair, + elemCount, + storage, + retainAuthority, + ipfsCredentials, + awsS3Bucket, + ); + + if (successful) { + warn = false; + break; + } else { + warn = true; + log.warn('upload was not successful, rerunning'); + } + } + const endMs = Date.now(); + const timeTaken = new Date(endMs - startMs).toISOString().substr(11, 8); + log.info( + `ended at: ${new Date(endMs).toISOString()}. time taken: ${timeTaken}`, + ); + if (warn) { + log.info('not all images have been uploaded, rerun this step.'); + } + }); + +programCommand('verify_token_metadata') + .argument( + '', + 'Directory containing images and metadata files named from 0-n', + val => { + return fs + .readdirSync(`${val}`) + .map(file => path.join(process.cwd(), val, file)); + }, + ) + .option('-n, --number ', 'Number of images to upload') + .action((files: string[], options, cmd) => { + const { number } = cmd.opts(); + + const startMs = Date.now(); + log.info('started at: ' + startMs.toString()); + verifyTokenMetadata({ files, uploadElementsCount: number }); + + const endMs = Date.now(); + const timeTaken = new Date(endMs - startMs).toISOString().substr(11, 8); + log.info( + `ended at: ${new Date(endMs).toString()}. time taken: ${timeTaken}`, + ); + }); + +programCommand('verify').action(async (directory, cmd) => { + const { env, keypair, cacheName } = cmd.opts(); + + const cacheContent = loadCache(cacheName, env); + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadCandyProgram(walletKeyPair, env); + + const configAddress = new PublicKey(cacheContent.program.config); + const config = await anchorProgram.provider.connection.getAccountInfo( + configAddress, + ); + let allGood = true; + + const keys = Object.keys(cacheContent.items); + await Promise.all( + chunks(Array.from(Array(keys.length).keys()), 500).map( + async allIndexesInSlice => { + for (let i = 0; i < allIndexesInSlice.length; i++) { + const key = keys[allIndexesInSlice[i]]; + log.debug('Looking at key ', allIndexesInSlice[i]); + + const thisSlice = config.data.slice( + CONFIG_ARRAY_START + 4 + CONFIG_LINE_SIZE * allIndexesInSlice[i], + CONFIG_ARRAY_START + + 4 + + CONFIG_LINE_SIZE * (allIndexesInSlice[i] + 1), + ); + const name = fromUTF8Array([...thisSlice.slice(4, 36)]); + const uri = fromUTF8Array([...thisSlice.slice(40, 240)]); + const cacheItem = cacheContent.items[key]; + if (!name.match(cacheItem.name) || !uri.match(cacheItem.link)) { + //leaving here for debugging reasons, but it's pretty useless. if the first upload fails - all others are wrong + // log.info( + // `Name (${name}) or uri (${uri}) didnt match cache values of (${cacheItem.name})` + + // `and (${cacheItem.link}). marking to rerun for image`, + // key, + // ); + cacheItem.onChain = false; + allGood = false; + } else { + const json = await fetch(cacheItem.link); + if ( + json.status == 200 || + json.status == 204 || + json.status == 202 + ) { + const body = await json.text(); + const parsed = JSON.parse(body); + if (parsed.image) { + const check = await fetch(parsed.image); + if ( + check.status == 200 || + check.status == 204 || + check.status == 202 + ) { + const text = await check.text(); + if (!text.match(/Not found/i)) { + if (text.length == 0) { + log.info( + 'Name', + name, + 'with', + uri, + 'has zero length, failing', + ); + cacheItem.link = null; + cacheItem.onChain = false; + allGood = false; + } else { + log.info('Name', name, 'with', uri, 'checked out'); + } + } else { + log.info( + 'Name', + name, + 'with', + uri, + 'never got uploaded to arweave, failing', + ); + cacheItem.link = null; + cacheItem.onChain = false; + allGood = false; + } + } else { + log.info( + 'Name', + name, + 'with', + uri, + 'returned non-200 from uploader', + check.status, + ); + cacheItem.link = null; + cacheItem.onChain = false; + allGood = false; + } + } else { + log.info( + 'Name', + name, + 'with', + uri, + 'lacked image in json, failing', + ); + cacheItem.link = null; + cacheItem.onChain = false; + allGood = false; + } + } else { + log.info('Name', name, 'with', uri, 'returned no json from link'); + cacheItem.link = null; + cacheItem.onChain = false; + allGood = false; + } + } + } + }, + ), + ); + + if (!allGood) { + saveCache(cacheName, env, cacheContent); + + throw new Error( + `not all NFTs checked out. check out logs above for details`, + ); + } + + const configData = (await anchorProgram.account.config.fetch( + configAddress, + )) as Config; + + const lineCount = new BN(config.data.slice(247, 247 + 4), undefined, 'le'); + + log.info( + `uploaded (${lineCount.toNumber()}) out of (${ + configData.data.maxNumberOfLines + })`, + ); + if (configData.data.maxNumberOfLines > lineCount.toNumber()) { + throw new Error( + `predefined number of NFTs (${ + configData.data.maxNumberOfLines + }) is smaller than the uploaded one (${lineCount.toNumber()})`, + ); + } else { + log.info('ready to deploy!'); + } + + saveCache(cacheName, env, cacheContent); +}); + +programCommand('verify_price') + .option('-p, --price ') + .option('--cache-path ') + .action(async (directory, cmd) => { + const { keypair, env, price, cacheName, cachePath } = cmd.opts(); + const lamports = parsePrice(price); + + if (isNaN(lamports)) { + return log.error(`verify_price requires a --price to be set`); + } + + log.info(`Expected price is: ${lamports}`); + + const cacheContent = loadCache(cacheName, env, cachePath); + + if (!cacheContent) { + return log.error( + `No cache found, can't continue. Make sure you are in the correct directory where the assets are located or use the --cache-path option.`, + ); + } + + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadCandyProgram(walletKeyPair, env); + + const candyAddress = new PublicKey(cacheContent.candyMachineAddress); + + const machine = await anchorProgram.account.candyMachine.fetch( + candyAddress, + ); + + //@ts-ignore + const candyMachineLamports = machine.data.price.toNumber(); + + log.info(`Candymachine price is: ${candyMachineLamports}`); + + if (lamports != candyMachineLamports) { + throw new Error(`Expected price and CandyMachine's price do not match!`); + } + + log.info(`Good to go!`); + }); + +programCommand('show') + .option('--cache-path ') + .action(async (directory, cmd) => { + const { keypair, env, cacheName, cachePath } = cmd.opts(); + + const cacheContent = loadCache(cacheName, env, cachePath); + + if (!cacheContent) { + return log.error( + `No cache found, can't continue. Make sure you are in the correct directory where the assets are located or use the --cache-path option.`, + ); + } + + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadCandyProgram(walletKeyPair, env); + + const [candyMachine] = await getCandyMachineAddress( + new PublicKey(cacheContent.program.config), + cacheContent.program.uuid, + ); + + try { + const machine = await anchorProgram.account.candyMachine.fetch( + candyMachine, + ); + log.info('...Candy Machine...'); + log.info('Key:', candyMachine.toBase58()); + //@ts-ignore + log.info('authority: ', machine.authority.toBase58()); + //@ts-ignore + log.info('wallet: ', machine.wallet.toBase58()); + //@ts-ignore + log.info( + 'tokenMint: ', + //@ts-ignore + machine.tokenMint ? machine.tokenMint.toBase58() : null, + ); + //@ts-ignore + log.info('config: ', machine.config.toBase58()); + //@ts-ignore + log.info('uuid: ', machine.data.uuid); + //@ts-ignore + log.info('price: ', machine.data.price.toNumber()); + //@ts-ignore + log.info('itemsAvailable: ', machine.data.itemsAvailable.toNumber()); + log.info( + 'goLiveDate: ', + //@ts-ignore + machine.data.goLiveDate + ? //@ts-ignore + new Date(machine.data.goLiveDate * 1000) + : 'N/A', + ); + } catch (e) { + console.log('No machine found'); + } + + const config = await anchorProgram.account.config.fetch( + cacheContent.program.config, + ); + log.info('...Config...'); + //@ts-ignore + log.info('authority: ', config.authority.toBase58()); + //@ts-ignore + log.info('symbol: ', config.data.symbol); + //@ts-ignore + log.info('sellerFeeBasisPoints: ', config.data.sellerFeeBasisPoints); + //@ts-ignore + log.info('creators: '); + //@ts-ignore + config.data.creators.map(c => + log.info(c.address.toBase58(), 'at', c.share, '%'), + ), + //@ts-ignore + log.info('maxSupply: ', config.data.maxSupply.toNumber()); + //@ts-ignore + log.info('retainAuthority: ', config.data.retainAuthority); + //@ts-ignore + log.info('maxNumberOfLines: ', config.data.maxNumberOfLines); + }); + +programCommand('create_candy_machine') + .option( + '-p, --price ', + 'Price denominated in SOL or spl-token override', + '1', + ) + .option( + '-t, --spl-token ', + 'SPL token used to price NFT mint. To use SOL leave this empty.', + ) + .option( + '-a, --spl-token-account ', + 'SPL token account that receives mint payments. Only required if spl-token is specified.', + ) + .option( + '-s, --sol-treasury-account ', + 'SOL account that receives mint payments.', + ) + .action(async (directory, cmd) => { + const { + keypair, + env, + price, + cacheName, + splToken, + splTokenAccount, + solTreasuryAccount, + } = cmd.opts(); + + let parsedPrice = parsePrice(price); + const cacheContent = loadCache(cacheName, env); + + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadCandyProgram(walletKeyPair, env); + + let wallet = walletKeyPair.publicKey; + const remainingAccounts = []; + if (splToken || splTokenAccount) { + if (solTreasuryAccount) { + throw new Error( + 'If spl-token-account or spl-token is set then sol-treasury-account cannot be set', + ); + } + if (!splToken) { + throw new Error( + 'If spl-token-account is set, spl-token must also be set', + ); + } + const splTokenKey = new PublicKey(splToken); + const splTokenAccountKey = new PublicKey(splTokenAccount); + if (!splTokenAccount) { + throw new Error( + 'If spl-token is set, spl-token-account must also be set', + ); + } + + const token = new Token( + anchorProgram.provider.connection, + splTokenKey, + TOKEN_PROGRAM_ID, + walletKeyPair, + ); + + const mintInfo = await token.getMintInfo(); + if (!mintInfo.isInitialized) { + throw new Error(`The specified spl-token is not initialized`); + } + const tokenAccount = await token.getAccountInfo(splTokenAccountKey); + if (!tokenAccount.isInitialized) { + throw new Error(`The specified spl-token-account is not initialized`); + } + if (!tokenAccount.mint.equals(splTokenKey)) { + throw new Error( + `The spl-token-account's mint (${tokenAccount.mint.toString()}) does not match specified spl-token ${splTokenKey.toString()}`, + ); + } + + wallet = splTokenAccountKey; + parsedPrice = parsePrice(price, 10 ** mintInfo.decimals); + remainingAccounts.push({ + pubkey: splTokenKey, + isWritable: false, + isSigner: false, + }); + } + + if (solTreasuryAccount) { + wallet = new PublicKey(solTreasuryAccount); + } + + const config = new PublicKey(cacheContent.program.config); + const [candyMachine, bump] = await getCandyMachineAddress( + config, + cacheContent.program.uuid, + ); + await anchorProgram.rpc.initializeCandyMachine( + bump, + { + uuid: cacheContent.program.uuid, + price: new anchor.BN(parsedPrice), + itemsAvailable: new anchor.BN(Object.keys(cacheContent.items).length), + goLiveDate: null, + }, + { + accounts: { + candyMachine, + wallet, + config: config, + authority: walletKeyPair.publicKey, + payer: walletKeyPair.publicKey, + systemProgram: anchor.web3.SystemProgram.programId, + rent: anchor.web3.SYSVAR_RENT_PUBKEY, + }, + signers: [], + remainingAccounts, + }, + ); + cacheContent.candyMachineAddress = candyMachine.toBase58(); + saveCache(cacheName, env, cacheContent); + log.info( + `create_candy_machine finished. candy machine pubkey: ${candyMachine.toBase58()}`, + ); + }); + +programCommand('update_candy_machine') + .option( + '-d, --date ', + 'timestamp - eg "04 Dec 1995 00:12:00 GMT" or "now"', + ) + .option('-p, --price ', 'SOL price') + .action(async (directory, cmd) => { + const { keypair, env, date, price, cacheName } = cmd.opts(); + const cacheContent = loadCache(cacheName, env); + + const secondsSinceEpoch = date ? parseDate(date) : null; + const lamports = price ? parsePrice(price) : null; + + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadCandyProgram(walletKeyPair, env); + + const candyMachine = new PublicKey(cacheContent.candyMachineAddress); + const tx = await anchorProgram.rpc.updateCandyMachine( + lamports ? new anchor.BN(lamports) : null, + secondsSinceEpoch ? new anchor.BN(secondsSinceEpoch) : null, + { + accounts: { + candyMachine, + authority: walletKeyPair.publicKey, + }, + }, + ); + + cacheContent.startDate = secondsSinceEpoch; + saveCache(cacheName, env, cacheContent); + if (date) + log.info( + ` - updated startDate timestamp: ${secondsSinceEpoch} (${date})`, + ); + if (lamports) + log.info(` - updated price: ${lamports} lamports (${price} SOL)`); + log.info('update_candy_machine finished', tx); + }); + +programCommand('mint_one_token').action(async (directory, cmd) => { + const { keypair, env, cacheName } = cmd.opts(); + + const cacheContent = loadCache(cacheName, env); + const configAddress = new PublicKey(cacheContent.program.config); + const tx = await mint(keypair, env, configAddress); + + log.info('mint_one_token finished', tx); +}); + +programCommand('sign') + // eslint-disable-next-line @typescript-eslint/no-unused-vars + .option('-m, --metadata ', 'base58 metadata account id') + .action(async (directory, cmd) => { + const { keypair, env, metadata } = cmd.opts(); + + await signMetadata(metadata, keypair, env); + }); + +programCommand('sign_all') + .option('-b, --batch-size ', 'Batch size', '10') + .option('-d, --daemon', 'Run signing continuously', false) + .action(async (directory, cmd) => { + const { keypair, env, cacheName, batchSize, daemon } = cmd.opts(); + const cacheContent = loadCache(cacheName, env); + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadCandyProgram(walletKeyPair, env); + const candyAddress = cacheContent.candyMachineAddress; + + const batchSizeParsed = parseInt(batchSize); + if (!parseInt(batchSize)) { + throw new Error('Batch size needs to be an integer!'); + } + + log.debug('Creator pubkey: ', walletKeyPair.publicKey.toBase58()); + log.debug('Environment: ', env); + log.debug('Candy machine address: ', candyAddress); + log.debug('Batch Size: ', batchSizeParsed); + await signAllMetadataFromCandyMachine( + anchorProgram.provider.connection, + walletKeyPair, + candyAddress, + batchSizeParsed, + daemon, + ); + }); + +programCommand('generate_art_configurations') + .argument('', 'Directory containing traits named from 0-n', val => + fs.readdirSync(`${val}`), + ) + .action(async (files: string[]) => { + log.info('creating traits configuration file'); + const startMs = Date.now(); + const successful = await generateConfigurations(files); + const endMs = Date.now(); + const timeTaken = new Date(endMs - startMs).toISOString().substr(11, 8); + if (successful) { + log.info('traits-configuration.json has been created!'); + log.info( + `ended at: ${new Date(endMs).toISOString()}. time taken: ${timeTaken}`, + ); + } else { + log.info('The art configuration file was not created'); + } + }); + +programCommand('create_generative_art') + .option( + '-n, --number-of-images ', + 'Number of images to be generated', + '100', + ) + .option( + '-c, --config-location ', + 'Location of the traits configuration file', + './traits-configuration.json', + ) + .action(async (directory, cmd) => { + const { numberOfImages, configLocation } = cmd.opts(); + + log.info('Loaded configuration file'); + + // 1. generate the metadata json files + const randomSets = await createMetadataFiles( + numberOfImages, + configLocation, + ); + + log.info('JSON files have been created within the assets directory'); + + // 2. piecemeal generate the images + await createGenerativeArt(configLocation, randomSets); + + log.info('Images have been created successfully!'); + }); + +function programCommand(name: string) { + return program + .command(name) + .option( + '-e, --env ', + 'Solana cluster env name', + 'devnet', //mainnet-beta, testnet, devnet + ) + .option( + '-k, --keypair ', + `Solana wallet location`, + '--keypair not provided', + ) + .option('-l, --log-level ', 'log level', setLogLevel) + .option('-c, --cache-name ', 'Cache file name', 'temp'); +} + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +function setLogLevel(value, prev) { + if (value === undefined || value === null) { + return; + } + log.info('setting the log value to: ' + value); + log.setLevel(value); +} + +program.parse(process.argv); diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/cli-nft.ts b/CandyMachine-Storefront/store/js/packages/cli/src/cli-nft.ts new file mode 100755 index 0000000..df268d1 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/cli-nft.ts @@ -0,0 +1,45 @@ +import { program } from 'commander'; +import log from 'loglevel'; +import { mintNFT } from './commands/mint-nft'; +import { loadWalletKey } from './helpers/accounts'; +import { web3 } from '@project-serum/anchor'; + +program.version('0.0.1'); +log.setLevel('info'); + +programCommand('mint') + .option('-m, --metadata ', 'metadata url') + // eslint-disable-next-line @typescript-eslint/no-unused-vars + .action(async (directory, cmd) => { + const { keypair, env, metadata } = cmd.opts(); + const solConnection = new web3.Connection(web3.clusterApiUrl(env)); + const walletKeyPair = loadWalletKey(keypair); + await mintNFT(solConnection, walletKeyPair, metadata); + }); + +function programCommand(name: string) { + return program + .command(name) + .option( + '-e, --env ', + 'Solana cluster env name', + 'devnet', //mainnet-beta, testnet, devnet + ) + .option( + '-k, --keypair ', + `Solana wallet location`, + '--keypair not provided', + ) + .option('-l, --log-level ', 'log level', setLogLevel); +} + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +function setLogLevel(value, prev) { + if (value === undefined || value === null) { + return; + } + log.info('setting the log value to: ' + value); + log.setLevel(value); +} + +program.parse(process.argv); diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/commands/createArt.ts b/CandyMachine-Storefront/store/js/packages/cli/src/commands/createArt.ts new file mode 100644 index 0000000..bb43e03 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/commands/createArt.ts @@ -0,0 +1,61 @@ +import fs from 'fs'; +import canvas from 'canvas'; +import imagemin from 'imagemin'; +import imageminPngquant from 'imagemin-pngquant'; +import log from 'loglevel'; + +import { readJsonFile, sleep } from '../helpers/various'; +import { ASSETS_DIRECTORY, TRAITS_DIRECTORY } from '../helpers/metadata'; + +const { createCanvas, loadImage } = canvas; + +const createImage = async (order = [], image, width, height) => { + const canvas = createCanvas(width, height); + const context = canvas.getContext('2d'); + const ID = parseInt(image.id, 10) - 1; + await Promise.all( + order.map(async cur => { + const imageLocation = `${TRAITS_DIRECTORY}/${cur}/${image[cur]}`; + const loadedImage = await loadImage(imageLocation); + context.patternQuality = 'best'; + context.quality = 'best'; + context.drawImage(loadedImage, 0, 0, width, height); + }), + ); + const buffer = canvas.toBuffer('image/png'); + const optimizedImage = await imagemin.buffer(buffer, { + plugins: [ + imageminPngquant({ + quality: [0.6, 0.95], + }), + ], + }); + log.info(`Placed ${ID}.png into the ${ASSETS_DIRECTORY}`); + fs.writeFileSync(`${ASSETS_DIRECTORY}/${ID}.png`, optimizedImage); +}; + +export async function createGenerativeArt( + configLocation: string, + randomizedSets, +) { + const { order, width, height } = await readJsonFile(configLocation); + const PROCESSING_LENGTH: number = 10; + + const processImage = async (marker = 0) => { + const slice = randomizedSets.slice(marker, marker + PROCESSING_LENGTH + 1); + // generate images for the portion + await Promise.all( + slice.map(async image => { + await createImage(order, image, width, height); + }), + ); + marker += PROCESSING_LENGTH; + await sleep(1000); + if (marker < randomizedSets.length - 1) { + processImage(marker); + } + }; + + // recurse until completion + processImage(); +} diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/commands/generateConfigurations.ts b/CandyMachine-Storefront/store/js/packages/cli/src/commands/generateConfigurations.ts new file mode 100644 index 0000000..9169bff --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/commands/generateConfigurations.ts @@ -0,0 +1,53 @@ +import fs from 'fs'; +import log from 'loglevel'; + +import { generateRandoms } from '../helpers/various'; + +const { readdir, writeFile } = fs.promises; + +export async function generateConfigurations( + traits: string[], +): Promise { + let generateSuccessful: boolean = true; + const configs = { + name: '', + symbol: '', + description: '', + creators: [], + collection: {}, + breakdown: {}, + order: traits, + width: 1000, + height: 1000, + }; + + try { + await Promise.all( + traits.map(async trait => { + const attributes = await readdir(`./traits/${trait}`); + const randoms = generateRandoms(attributes.length - 1); + const tmp = {}; + + attributes.forEach((attr, i) => { + tmp[attr] = randoms[i] / 100; + }); + + configs['breakdown'][trait] = tmp; + }), + ); + } catch (err) { + generateSuccessful = false; + log.error('Error created configurations', err); + throw err; + } + + try { + await writeFile('./traits-configuration.json', JSON.stringify(configs)); + } catch (err) { + generateSuccessful = false; + log.error('Error writing configurations to configs.json', err); + throw err; + } + + return generateSuccessful; +} diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/commands/mint-nft.ts b/CandyMachine-Storefront/store/js/packages/cli/src/commands/mint-nft.ts new file mode 100644 index 0000000..ff7ed48 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/commands/mint-nft.ts @@ -0,0 +1,203 @@ +import { + createAssociatedTokenAccountInstruction, + createMetadataInstruction, + createMasterEditionInstruction, +} from '../helpers/instructions'; +import { sendTransactionWithRetryWithKeypair } from '../helpers/transactions'; +import { + getTokenWallet, + getMetadata, + getMasterEdition, +} from '../helpers/accounts'; +import * as anchor from '@project-serum/anchor'; +import { + Data, + Creator, + CreateMetadataArgs, + CreateMasterEditionArgs, + METADATA_SCHEMA, +} from '../helpers/schema'; +import { serialize } from 'borsh'; +import { TOKEN_PROGRAM_ID } from '../helpers/constants'; +import fetch from 'node-fetch'; +import { MintLayout, Token } from '@solana/spl-token'; +import { + Keypair, + Connection, + SystemProgram, + TransactionInstruction, + PublicKey, +} from '@solana/web3.js'; +import BN from 'bn.js'; +import log from 'loglevel'; + +export const mintNFT = async ( + connection: Connection, + walletKeypair: Keypair, + metadataLink: string, + mutableMetadata: boolean = true, +): Promise<{ + metadataAccount: PublicKey; +} | void> => { + // Metadata + let metadata; + try { + metadata = await (await fetch(metadataLink, { method: 'GET' })).json(); + } catch (e) { + log.error('Could not find metadata at', metadataLink); + return; + } + + // Validate metadata + if ( + !metadata.name || + !metadata.image || + isNaN(metadata.seller_fee_basis_points) || + !metadata.properties || + !Array.isArray(metadata.properties.creators) + ) { + log.error('Invalid metadata file', metadata); + return; + } + + // Validate creators + const metaCreators = metadata.properties.creators; + if ( + metaCreators.some(creator => !creator.address) || + metaCreators.reduce((sum, creator) => creator.share + sum, 0) !== 100 + ) { + return; + } + + // Create wallet from keypair + const wallet = new anchor.Wallet(walletKeypair); + if (!wallet?.publicKey) return; + + // Allocate memory for the account + const mintRent = await connection.getMinimumBalanceForRentExemption( + MintLayout.span, + ); + + // Generate a mint + const mint = anchor.web3.Keypair.generate(); + const instructions: TransactionInstruction[] = []; + const signers: anchor.web3.Keypair[] = [mint, walletKeypair]; + + instructions.push( + SystemProgram.createAccount({ + fromPubkey: wallet.publicKey, + newAccountPubkey: mint.publicKey, + lamports: mintRent, + space: MintLayout.span, + programId: TOKEN_PROGRAM_ID, + }), + ); + instructions.push( + Token.createInitMintInstruction( + TOKEN_PROGRAM_ID, + mint.publicKey, + 0, + wallet.publicKey, + wallet.publicKey, + ), + ); + + const userTokenAccoutAddress = await getTokenWallet( + wallet.publicKey, + mint.publicKey, + ); + instructions.push( + createAssociatedTokenAccountInstruction( + userTokenAccoutAddress, + wallet.publicKey, + wallet.publicKey, + mint.publicKey, + ), + ); + + // Create metadata + const metadataAccount = await getMetadata(mint.publicKey); + const creators = metaCreators.map( + creator => + new Creator({ + address: creator.address, + share: creator.share, + verified: 1, + }), + ); + const data = new Data({ + symbol: metadata.symbol, + name: metadata.name, + uri: metadataLink, + sellerFeeBasisPoints: metadata.seller_fee_basis_points, + creators: creators, + }); + + let txnData = Buffer.from( + serialize( + METADATA_SCHEMA, + new CreateMetadataArgs({ data, isMutable: mutableMetadata }), + ), + ); + + instructions.push( + createMetadataInstruction( + metadataAccount, + mint.publicKey, + wallet.publicKey, + wallet.publicKey, + wallet.publicKey, + txnData, + ), + ); + + instructions.push( + Token.createMintToInstruction( + TOKEN_PROGRAM_ID, + mint.publicKey, + userTokenAccoutAddress, + wallet.publicKey, + [], + 1, + ), + ); + + // Create master edition + const editionAccount = await getMasterEdition(mint.publicKey); + txnData = Buffer.from( + serialize( + METADATA_SCHEMA, + new CreateMasterEditionArgs({ maxSupply: new BN(0) }), + ), + ); + + instructions.push( + createMasterEditionInstruction( + metadataAccount, + editionAccount, + mint.publicKey, + wallet.publicKey, + wallet.publicKey, + wallet.publicKey, + txnData, + ), + ); + + const res = await sendTransactionWithRetryWithKeypair( + connection, + walletKeypair, + instructions, + signers, + ); + + try { + await connection.confirmTransaction(res.txid, 'max'); + } catch { + // ignore + } + + // Force wait for max confirmations + await connection.getParsedConfirmedTransaction(res.txid, 'confirmed'); + log.info('NFT created', res.txid); + return { metadataAccount }; +}; diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/commands/mint.ts b/CandyMachine-Storefront/store/js/packages/cli/src/commands/mint.ts new file mode 100644 index 0000000..3fc8f74 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/commands/mint.ts @@ -0,0 +1,155 @@ +import { Keypair, PublicKey, SystemProgram } from '@solana/web3.js'; +import { + getCandyMachineAddress, + getMasterEdition, + getMetadata, + getTokenWallet, + loadCandyProgram, + loadWalletKey, + uuidFromConfigPubkey, +} from '../helpers/accounts'; +import { + TOKEN_METADATA_PROGRAM_ID, + TOKEN_PROGRAM_ID, +} from '../helpers/constants'; +import * as anchor from '@project-serum/anchor'; +import { MintLayout, Token } from '@solana/spl-token'; +import { createAssociatedTokenAccountInstruction } from '../helpers/instructions'; +import { sendTransactionWithRetryWithKeypair } from '../helpers/transactions'; + +export async function mint( + keypair: string, + env: string, + configAddress: PublicKey, +): Promise { + const mint = Keypair.generate(); + + const userKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadCandyProgram(userKeyPair, env); + const userTokenAccountAddress = await getTokenWallet( + userKeyPair.publicKey, + mint.publicKey, + ); + + const uuid = uuidFromConfigPubkey(configAddress); + const [candyMachineAddress] = await getCandyMachineAddress( + configAddress, + uuid, + ); + const candyMachine: any = await anchorProgram.account.candyMachine.fetch( + candyMachineAddress, + ); + + const remainingAccounts = []; + const signers = [mint, userKeyPair]; + const instructions = [ + anchor.web3.SystemProgram.createAccount({ + fromPubkey: userKeyPair.publicKey, + newAccountPubkey: mint.publicKey, + space: MintLayout.span, + lamports: + await anchorProgram.provider.connection.getMinimumBalanceForRentExemption( + MintLayout.span, + ), + programId: TOKEN_PROGRAM_ID, + }), + Token.createInitMintInstruction( + TOKEN_PROGRAM_ID, + mint.publicKey, + 0, + userKeyPair.publicKey, + userKeyPair.publicKey, + ), + createAssociatedTokenAccountInstruction( + userTokenAccountAddress, + userKeyPair.publicKey, + userKeyPair.publicKey, + mint.publicKey, + ), + Token.createMintToInstruction( + TOKEN_PROGRAM_ID, + mint.publicKey, + userTokenAccountAddress, + userKeyPair.publicKey, + [], + 1, + ), + ]; + + let tokenAccount; + if (candyMachine.tokenMint) { + const transferAuthority = anchor.web3.Keypair.generate(); + + tokenAccount = await getTokenWallet( + userKeyPair.publicKey, + candyMachine.tokenMint, + ); + + remainingAccounts.push({ + pubkey: tokenAccount, + isWritable: true, + isSigner: false, + }); + remainingAccounts.push({ + pubkey: userKeyPair.publicKey, + isWritable: false, + isSigner: true, + }); + + instructions.push( + Token.createApproveInstruction( + TOKEN_PROGRAM_ID, + tokenAccount, + transferAuthority.publicKey, + userKeyPair.publicKey, + [], + candyMachine.data.price.toNumber(), + ), + ); + } + const metadataAddress = await getMetadata(mint.publicKey); + const masterEdition = await getMasterEdition(mint.publicKey); + + instructions.push( + await anchorProgram.instruction.mintNft({ + accounts: { + config: configAddress, + candyMachine: candyMachineAddress, + payer: userKeyPair.publicKey, + //@ts-ignore + wallet: candyMachine.wallet, + mint: mint.publicKey, + metadata: metadataAddress, + masterEdition, + mintAuthority: userKeyPair.publicKey, + updateAuthority: userKeyPair.publicKey, + tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID, + tokenProgram: TOKEN_PROGRAM_ID, + systemProgram: SystemProgram.programId, + rent: anchor.web3.SYSVAR_RENT_PUBKEY, + clock: anchor.web3.SYSVAR_CLOCK_PUBKEY, + }, + remainingAccounts, + }), + ); + + if (tokenAccount) { + instructions.push( + Token.createRevokeInstruction( + TOKEN_PROGRAM_ID, + tokenAccount, + userKeyPair.publicKey, + [], + ), + ); + } + + return ( + await sendTransactionWithRetryWithKeypair( + anchorProgram.provider.connection, + userKeyPair, + instructions, + signers, + ) + ).txid; +} diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/commands/sign.ts b/CandyMachine-Storefront/store/js/packages/cli/src/commands/sign.ts new file mode 100644 index 0000000..8c1c843 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/commands/sign.ts @@ -0,0 +1,61 @@ +import { Keypair, PublicKey, TransactionInstruction } from '@solana/web3.js'; +import { TOKEN_METADATA_PROGRAM_ID } from '../helpers/constants'; +import { sendTransactionWithRetryWithKeypair } from '../helpers/transactions'; +import { loadCandyProgram, loadWalletKey } from '../helpers/accounts'; +import { Program } from '@project-serum/anchor'; + +const METADATA_SIGNATURE = Buffer.from([7]); //now thats some voodoo magic. WTF metaplex? XD + +export async function signMetadata( + metadata: string, + keypair: string, + env: string, +) { + const creatorKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadCandyProgram(creatorKeyPair, env); + await signWithRetry(anchorProgram, creatorKeyPair, new PublicKey(metadata)); +} + +async function signWithRetry( + anchorProgram: Program, + creatorKeyPair: Keypair, + metadataAddress: PublicKey, +) { + await sendTransactionWithRetryWithKeypair( + anchorProgram.provider.connection, + creatorKeyPair, + [ + signMetadataInstruction( + new PublicKey(metadataAddress), + creatorKeyPair.publicKey, + ), + ], + [], + 'single', + ); +} + +export function signMetadataInstruction( + metadata: PublicKey, + creator: PublicKey, +): TransactionInstruction { + const data = METADATA_SIGNATURE; + + const keys = [ + { + pubkey: metadata, + isSigner: false, + isWritable: true, + }, + { + pubkey: creator, + isSigner: true, + isWritable: false, + }, + ]; + return new TransactionInstruction({ + keys, + programId: TOKEN_METADATA_PROGRAM_ID, + data, + }); +} diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/commands/signAll.ts b/CandyMachine-Storefront/store/js/packages/cli/src/commands/signAll.ts new file mode 100644 index 0000000..5b3dc32 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/commands/signAll.ts @@ -0,0 +1,255 @@ +import { + AccountInfo, + Connection, + Keypair, + PublicKey, + TransactionInstruction, +} from '@solana/web3.js'; +import { sendTransactionWithRetryWithKeypair } from '../helpers/transactions'; +import * as borsh from 'borsh'; +import { + MAX_CREATOR_LEN, + MAX_NAME_LENGTH, + MAX_SYMBOL_LENGTH, + MAX_URI_LENGTH, + TOKEN_METADATA_PROGRAM_ID, +} from '../helpers/constants'; +import { AccountAndPubkey, Metadata, METADATA_SCHEMA } from '../types'; +import { signMetadataInstruction } from './sign'; +import log from 'loglevel'; +import { sleep } from '../helpers/various'; + +const SIGNING_INTERVAL = 60 * 1000; //60s +let lastCount = 0; +/* + Get accounts by candy machine creator address + Get only verified ones + Get only unverified ones with creator address + Grab n at a time and batch sign and send transaction + + PS: Don't sign candy machine addresses that you do not know about. Signing verifies your participation. +*/ +export async function signAllMetadataFromCandyMachine( + connection: Connection, + wallet: Keypair, + candyMachineAddress: string, + batchSize: number, + daemon: boolean, +) { + if (daemon) { + // noinspection InfiniteLoopJS + for (;;) { + await findAndSignMetadata( + candyMachineAddress, + connection, + wallet, + batchSize, + ); + await sleep(SIGNING_INTERVAL); + } + } else { + await findAndSignMetadata( + candyMachineAddress, + connection, + wallet, + batchSize, + ); + } +} + +async function findAndSignMetadata( + candyMachineAddress: string, + connection: Connection, + wallet: Keypair, + batchSize: number, +) { + const metadataByCandyMachine = await getAccountsByCreatorAddress( + candyMachineAddress, + connection, + ); + if (lastCount === metadataByCandyMachine.length) { + log.debug(`Didn't find any new NFTs to sign - ${new Date()}`); + return; + } + lastCount = metadataByCandyMachine.length; + log.info( + `Found ${metadataByCandyMachine.length} nft's minted by candy machine ${candyMachineAddress}`, + ); + const candyVerifiedListToSign = await getCandyMachineVerifiedMetadata( + metadataByCandyMachine, + candyMachineAddress, + wallet.publicKey.toBase58(), + ); + log.info( + `Found ${ + candyVerifiedListToSign.length + } nft's to sign by ${wallet.publicKey.toBase58()}`, + ); + await sendSignMetadata( + connection, + wallet, + candyVerifiedListToSign, + batchSize, + ); +} + +async function getAccountsByCreatorAddress(creatorAddress, connection) { + const metadataAccounts = await getProgramAccounts( + connection, + TOKEN_METADATA_PROGRAM_ID.toBase58(), + { + filters: [ + { + memcmp: { + offset: + 1 + // key + 32 + // update auth + 32 + // mint + 4 + // name string length + MAX_NAME_LENGTH + // name + 4 + // uri string length + MAX_URI_LENGTH + // uri* + 4 + // symbol string length + MAX_SYMBOL_LENGTH + // symbol + 2 + // seller fee basis points + 1 + // whether or not there is a creators vec + 4 + // creators vec length + 0 * MAX_CREATOR_LEN, + bytes: creatorAddress, + }, + }, + ], + }, + ); + const decodedAccounts = []; + for (let i = 0; i < metadataAccounts.length; i++) { + const e = metadataAccounts[i]; + const decoded = await decodeMetadata(e.account.data); + const accountPubkey = e.pubkey; + const store = [decoded, accountPubkey]; + decodedAccounts.push(store); + } + return decodedAccounts; +} + +async function getProgramAccounts( + connection: Connection, + programId: String, + configOrCommitment?: any, +): Promise> { + const extra: any = {}; + let commitment; + //let encoding; + + if (configOrCommitment) { + if (typeof configOrCommitment === 'string') { + commitment = configOrCommitment; + } else { + commitment = configOrCommitment.commitment; + //encoding = configOrCommitment.encoding; + + if (configOrCommitment.dataSlice) { + extra.dataSlice = configOrCommitment.dataSlice; + } + + if (configOrCommitment.filters) { + extra.filters = configOrCommitment.filters; + } + } + } + + const args = connection._buildArgs([programId], commitment, 'base64', extra); + const unsafeRes = await (connection as any)._rpcRequest( + 'getProgramAccounts', + args, + ); + //console.log(unsafeRes) + const data = ( + unsafeRes.result as Array<{ + account: AccountInfo<[string, string]>; + pubkey: string; + }> + ).map(item => { + return { + account: { + // TODO: possible delay parsing could be added here + data: Buffer.from(item.account.data[0], 'base64'), + executable: item.account.executable, + lamports: item.account.lamports, + // TODO: maybe we can do it in lazy way? or just use string + owner: item.account.owner, + } as AccountInfo, + pubkey: item.pubkey, + }; + }); + + return data; +} + +async function decodeMetadata(buffer) { + return borsh.deserializeUnchecked(METADATA_SCHEMA, Metadata, buffer); +} + +async function getCandyMachineVerifiedMetadata( + metadataList, + candyAddress, + creatorAddress, +) { + const verifiedList = []; + metadataList.forEach(meta => { + let verifiedCandy = false; + let verifiedCreator = true; + meta[0].data.creators.forEach(creator => { + if ( + new PublicKey(creator.address).toBase58() == candyAddress && + creator.verified === 1 + ) { + verifiedCandy = true; + } + if ( + new PublicKey(creator.address).toBase58() == creatorAddress && + creator.verified === 0 + ) { + verifiedCreator = false; + } + }); + if (verifiedCandy && !verifiedCreator) { + verifiedList.push(meta); + } + }); + return verifiedList; +} + +async function sendSignMetadata(connection, wallet, metadataList, batchsize) { + let total = 0; + while (metadataList.length > 0) { + log.debug('Signing metadata '); + let sliceAmount = batchsize; + if (metadataList.length < batchsize) { + sliceAmount = metadataList.length; + } + const removed = metadataList.splice(0, sliceAmount); + total += sliceAmount; + await delay(500); + await signMetadataBatch(removed, connection, wallet); + log.debug(`Processed ${total} nfts`); + } + log.info(`Finished signing metadata for ${total} NFTs`); +} + +async function signMetadataBatch(metadataList, connection, keypair) { + const instructions: TransactionInstruction[] = metadataList.map(meta => { + return signMetadataInstruction(new PublicKey(meta[1]), keypair.publicKey); + }); + await sendTransactionWithRetryWithKeypair( + connection, + keypair, + instructions, + [], + 'single', + ); +} + +function delay(ms: number) { + return new Promise(resolve => setTimeout(resolve, ms)); +} diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/commands/upload.ts b/CandyMachine-Storefront/store/js/packages/cli/src/commands/upload.ts new file mode 100644 index 0000000..aa55e49 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/commands/upload.ts @@ -0,0 +1,227 @@ +import { EXTENSION_PNG } from '../helpers/constants'; +import path from 'path'; +import { + createConfig, + loadCandyProgram, + loadWalletKey, +} from '../helpers/accounts'; +import { PublicKey } from '@solana/web3.js'; +import fs from 'fs'; +import BN from 'bn.js'; +import { loadCache, saveCache } from '../helpers/cache'; +import log from 'loglevel'; +import { awsUpload } from '../helpers/upload/aws'; +import { arweaveUpload } from '../helpers/upload/arweave'; +import { ipfsCreds, ipfsUpload } from '../helpers/upload/ipfs'; +import { chunks } from '../helpers/various'; + +export async function upload( + files: string[], + cacheName: string, + env: string, + keypair: string, + totalNFTs: number, + storage: string, + retainAuthority: boolean, + ipfsCredentials: ipfsCreds, + awsS3Bucket: string, +): Promise { + let uploadSuccessful = true; + + const savedContent = loadCache(cacheName, env); + const cacheContent = savedContent || {}; + + if (!cacheContent.program) { + cacheContent.program = {}; + } + + let existingInCache = []; + if (!cacheContent.items) { + cacheContent.items = {}; + } else { + existingInCache = Object.keys(cacheContent.items); + } + + const seen = {}; + const newFiles = []; + + files.forEach(f => { + if (!seen[f.replace(EXTENSION_PNG, '').split('/').pop()]) { + seen[f.replace(EXTENSION_PNG, '').split('/').pop()] = true; + newFiles.push(f); + } + }); + existingInCache.forEach(f => { + if (!seen[f]) { + seen[f] = true; + newFiles.push(f + '.png'); + } + }); + + const images = newFiles.filter(val => path.extname(val) === EXTENSION_PNG); + const SIZE = images.length; + + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadCandyProgram(walletKeyPair, env); + + let config = cacheContent.program.config + ? new PublicKey(cacheContent.program.config) + : undefined; + + for (let i = 0; i < SIZE; i++) { + const image = images[i]; + const imageName = path.basename(image); + const index = imageName.replace(EXTENSION_PNG, ''); + + log.debug(`Processing file: ${i}`); + if (i % 50 === 0) { + log.info(`Processing file: ${i}`); + } + + let link = cacheContent?.items?.[index]?.link; + if (!link || !cacheContent.program.uuid) { + const manifestPath = image.replace(EXTENSION_PNG, '.json'); + const manifestContent = fs + .readFileSync(manifestPath) + .toString() + .replace(imageName, 'image.png') + .replace(imageName, 'image.png'); + const manifest = JSON.parse(manifestContent); + + const manifestBuffer = Buffer.from(JSON.stringify(manifest)); + + if (i === 0 && !cacheContent.program.uuid) { + // initialize config + log.info(`initializing config`); + try { + const res = await createConfig(anchorProgram, walletKeyPair, { + maxNumberOfLines: new BN(totalNFTs), + symbol: manifest.symbol, + sellerFeeBasisPoints: manifest.seller_fee_basis_points, + isMutable: true, + maxSupply: new BN(0), + retainAuthority: retainAuthority, + creators: manifest.properties.creators.map(creator => { + return { + address: new PublicKey(creator.address), + verified: true, + share: creator.share, + }; + }), + }); + cacheContent.program.uuid = res.uuid; + cacheContent.program.config = res.config.toBase58(); + config = res.config; + + log.info( + `initialized config for a candy machine with publickey: ${res.config.toBase58()}`, + ); + + saveCache(cacheName, env, cacheContent); + } catch (exx) { + log.error('Error deploying config to Solana network.', exx); + throw exx; + } + } + + if (!link) { + try { + if (storage === 'arweave') { + link = await arweaveUpload( + walletKeyPair, + anchorProgram, + env, + image, + manifestBuffer, + manifest, + index, + ); + } else if (storage === 'ipfs') { + link = await ipfsUpload(ipfsCredentials, image, manifestBuffer); + } else if (storage === 'aws') { + link = await awsUpload(awsS3Bucket, image, manifestBuffer); + } + + if (link) { + log.debug('setting cache for ', index); + cacheContent.items[index] = { + link, + name: manifest.name, + onChain: false, + }; + cacheContent.authority = walletKeyPair.publicKey.toBase58(); + saveCache(cacheName, env, cacheContent); + } + } catch (er) { + uploadSuccessful = false; + log.error(`Error uploading file ${index}`, er); + } + } + } + } + + const keys = Object.keys(cacheContent.items); + try { + await Promise.all( + chunks(Array.from(Array(keys.length).keys()), 1000).map( + async allIndexesInSlice => { + for ( + let offset = 0; + offset < allIndexesInSlice.length; + offset += 10 + ) { + const indexes = allIndexesInSlice.slice(offset, offset + 10); + const onChain = indexes.filter(i => { + const index = keys[i]; + return cacheContent.items[index]?.onChain || false; + }); + const ind = keys[indexes[0]]; + + if (onChain.length != indexes.length) { + log.info( + `Writing indices ${ind}-${keys[indexes[indexes.length - 1]]}`, + ); + try { + await anchorProgram.rpc.addConfigLines( + ind, + indexes.map(i => ({ + uri: cacheContent.items[keys[i]].link, + name: cacheContent.items[keys[i]].name, + })), + { + accounts: { + config, + authority: walletKeyPair.publicKey, + }, + signers: [walletKeyPair], + }, + ); + indexes.forEach(i => { + cacheContent.items[keys[i]] = { + ...cacheContent.items[keys[i]], + onChain: true, + }; + }); + saveCache(cacheName, env, cacheContent); + } catch (e) { + log.error( + `saving config line ${ind}-${ + keys[indexes[indexes.length - 1]] + } failed`, + e, + ); + uploadSuccessful = false; + } + } + } + }, + ), + ); + } catch (e) { + log.error(e); + } finally { + saveCache(cacheName, env, cacheContent); + } + console.log(`Done. Successful = ${uploadSuccessful}.`); + return uploadSuccessful; +} diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/__fixtures__/invalidSchema/invalid-address.json b/CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/__fixtures__/invalidSchema/invalid-address.json new file mode 100644 index 0000000..6b5e0f7 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/__fixtures__/invalidSchema/invalid-address.json @@ -0,0 +1,16 @@ +{ + "name": "Invalid shares", + "description": "", + "image": "0.png", + "external_url": "", + "seller_fee_basis_points": 0, + "properties": { + "files": [{ "uri": "0.png", "type": "image/png" }], + "creators": [ + { + "address": "111111111111111111111111111111", + "share": 100 + } + ] + } +} diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/__fixtures__/invalidSchema/invalid-shares.json b/CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/__fixtures__/invalidSchema/invalid-shares.json new file mode 100644 index 0000000..e773bf6 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/__fixtures__/invalidSchema/invalid-shares.json @@ -0,0 +1,16 @@ +{ + "name": "Invalid shares", + "description": "", + "image": "0.png", + "external_url": "", + "seller_fee_basis_points": 0, + "properties": { + "files": [{ "uri": "0.png", "type": "image/png" }], + "creators": [ + { + "address": "111111111111111111111111111111111", + "share": 0 + } + ] + } +} diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/__fixtures__/mismatchedAssets/0.json b/CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/__fixtures__/mismatchedAssets/0.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/__fixtures__/mismatchedAssets/0.json @@ -0,0 +1 @@ +{} diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/__tests__/__snapshots__/verifyTokenMetadata.ts.snap b/CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/__tests__/__snapshots__/verifyTokenMetadata.ts.snap new file mode 100644 index 0000000..ab8ac3a --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/__tests__/__snapshots__/verifyTokenMetadata.ts.snap @@ -0,0 +1,5 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`\`metaplex verify_token_metadata\` invalidates ../__fixtures__/invalidSchema/invalid-address.json 1`] = `"does not match pattern \\"[1-9A-HJ-NP-Za-km-z]{32,44}\\""`; + +exports[`\`metaplex verify_token_metadata\` invalidates ../__fixtures__/invalidSchema/invalid-shares.json 1`] = `"must be strictly greater than 0"`; diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/__tests__/verifyTokenMetadata.ts b/CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/__tests__/verifyTokenMetadata.ts new file mode 100644 index 0000000..f050150 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/__tests__/verifyTokenMetadata.ts @@ -0,0 +1,103 @@ +import fs from 'fs'; +import path from 'path'; +import log from 'loglevel'; +import { + verifyTokenMetadata, + verifyAggregateShare, + verifyImageURL, + verifyConsistentShares, + verifyCreatorCollation, +} from '../index'; + +const getFiles = rootDir => { + const assets = fs.readdirSync(rootDir).map(file => path.join(rootDir, file)); + return assets; +}; + +describe('`metaplex verify_token_metadata`', () => { + const spy = jest.spyOn(log, 'warn'); + beforeEach(() => { + spy.mockClear(); + }); + + it('catches mismatched assets', () => { + const mismatchedAssets = getFiles( + path.join(__dirname, '../__fixtures__/mismatchedAssets'), + ); + expect(() => + verifyTokenMetadata({ files: mismatchedAssets }), + ).toThrowErrorMatchingInlineSnapshot( + `"number of png files (0) is different than the number of json files (1)"`, + ); + }); + + const invalidSchemas = getFiles( + path.join(__dirname, '../__fixtures__/invalidSchema'), + ); + invalidSchemas.forEach(invalidSchema => { + it(`invalidates ${path.relative(__dirname, invalidSchema)}`, () => { + expect(() => + verifyTokenMetadata({ + files: [invalidSchema, invalidSchema.replace('.json', '.png')], + }), + ).toThrowErrorMatchingSnapshot(); + }); + }); + + it('throws on invalid share allocation', () => { + expect(() => + verifyAggregateShare( + [{ address: 'some-solana-address', share: 80 }], + 'placeholder-manifest-file', + ), + ).toThrowErrorMatchingInlineSnapshot( + `"Creator share for placeholder-manifest-file does not add up to 100, got: 80."`, + ); + + expect(() => + verifyAggregateShare( + [ + { address: 'some-solana-address', share: 80 }, + { + address: 'some-other-solana-address', + share: 19.9, + }, + ], + + 'placeholder-manifest-file', + ), + ).toThrowErrorMatchingInlineSnapshot( + `"Creator share for placeholder-manifest-file does not add up to 100, got: 99.9."`, + ); + }); + + it('warns when using different image URIs', () => { + verifyImageURL( + 'https://google.com?ext=png', + [{ uri: 'https://google.com?ext=png', type: 'image/png' }], + '0.json', + ); + expect(spy).toHaveBeenCalledTimes(1); + }); + + it('warns when there are inconsistent share allocations', () => { + const collatedCreators = new Map([ + ['some-solana-address', { shares: new Set([70]), tokenCount: 10 }], + ]); + verifyCreatorCollation( + [{ address: 'some-solana-address', share: 80 }], + collatedCreators, + '0.json', + ); + expect(spy).toHaveBeenCalledTimes(1); + }); + + it('warns when there are inconsistent creator allocations', () => { + const collatedCreators = new Map([ + ['some-solana-address', { shares: new Set([80]), tokenCount: 10 }], + ['some-other-solana-address', { shares: new Set([80]), tokenCount: 20 }], + ]); + verifyConsistentShares(collatedCreators); + expect(spy).toHaveBeenCalledTimes(1); + }); +}); diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/index.ts b/CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/index.ts new file mode 100644 index 0000000..9cd554a --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/index.ts @@ -0,0 +1,163 @@ +import path from 'path'; +import log from 'loglevel'; +import { validate } from 'jsonschema'; + +import { EXTENSION_JSON, EXTENSION_PNG } from '../../helpers/constants'; +import tokenMetadataJsonSchema from './token-metadata.schema.json'; + +type TokenMetadata = { + image: string; + properties: { + files: { uri: string; type: string }[]; + creators: { address: string; share: number }[]; + }; +}; + +export const verifyAssets = ({ files, uploadElementsCount }) => { + const pngFileCount = files.filter(it => { + return it.endsWith(EXTENSION_PNG); + }).length; + const jsonFileCount = files.filter(it => { + return it.endsWith(EXTENSION_JSON); + }).length; + + const parsedNumber = parseInt(uploadElementsCount, 10); + const elemCount = parsedNumber ?? pngFileCount; + + if (pngFileCount !== jsonFileCount) { + throw new Error( + `number of png files (${pngFileCount}) is different than the number of json files (${jsonFileCount})`, + ); + } + + if (elemCount < pngFileCount) { + throw new Error( + `max number (${elemCount}) cannot be smaller than the number of elements in the source folder (${pngFileCount})`, + ); + } + + log.info(`Verifying token metadata for ${pngFileCount} (png+json) pairs`); +}; + +export const verifyAggregateShare = ( + creators: TokenMetadata['properties']['creators'], + manifestFile, +) => { + const aggregateShare = creators + .map(creator => creator.share) + .reduce((memo, share) => { + return memo + share; + }, 0); + // Check that creator share adds up to 100 + if (aggregateShare !== 100) { + throw new Error( + `Creator share for ${manifestFile} does not add up to 100, got: ${aggregateShare}.`, + ); + } +}; + +type CollatedCreators = Map< + string, + { shares: Set; tokenCount: number } +>; +export const verifyCreatorCollation = ( + creators: TokenMetadata['properties']['creators'], + collatedCreators: CollatedCreators, + manifestFile: string, +) => { + for (const { address, share } of creators) { + if (collatedCreators.has(address)) { + const creator = collatedCreators.get(address); + creator.shares.add(share); + if (creator.shares.size > 1) { + log.warn( + `The creator share for ${address} in ${manifestFile} is different than the share declared for a previous token. This means at least one token is inconsistently configured, but we will continue. `, + ); + } + creator.tokenCount += 1; + } else { + collatedCreators.set(address, { + tokenCount: 1, + shares: new Set([share]), + }); + } + } +}; + +export const verifyImageURL = (image, files, manifestFile) => { + const expectedImagePath = `image${EXTENSION_PNG}`; + if (image !== expectedImagePath) { + // We _could_ match against this in the JSON schema validation, but it is totally valid to have arbitrary URLs to images here. + // The downside, though, is that those images will not get uploaded to Arweave since they're not on-disk. + log.warn(`We expected the \`image\` property in ${manifestFile} to be ${expectedImagePath}. +This will still work properly (assuming the URL is valid!), however, this image will not get uploaded to Arweave through the \`metaplex upload\` command. +If you want us to take care of getting this into Arweave, make sure to set \`image\`: "${expectedImagePath}" +The \`metaplex upload\` command will automatically substitute this URL with the Arweave URL location. + `); + } + const pngFiles = files.filter(file => file.type === 'image/png'); + if (pngFiles.length === 0 || !pngFiles.some(file => file.uri === image)) { + throw new Error( + `At least one entry with the \`image/png\` type in the \`properties.files\` array is expected to match the \`image\` property.`, + ); + } +}; + +export const verifyConsistentShares = (collatedCreators: CollatedCreators) => { + // We expect all creators to have been added to the same amount of tokens + const tokenCountSet = new Set(); + for (const [address, collation] of collatedCreators.entries()) { + tokenCountSet.add(collation.tokenCount); + if (tokenCountSet.size > 1) { + log.warn( + `We found that ${address} was added to more tokens than other creators.`, + ); + } + } +}; + +export const verifyMetadataManifests = ({ files }) => { + const manifestFiles = files.filter( + file => path.extname(file) === EXTENSION_JSON, + ); + + // Used to keep track of the share allocations for individual creators + // We will send a warning if we notice discrepancies across the entire collection. + const collatedCreators: CollatedCreators = new Map(); + + // Do manifest-specific stuff here + for (const manifestFile of manifestFiles) { + // Check the overall schema shape. This is a non-exhaustive check, but guarantees the bare minimum needed for the rest of the commands to succeed. + const tokenMetadata = require(manifestFile) as TokenMetadata; + validate(tokenMetadata, tokenMetadataJsonSchema, { throwError: true }); + + const { + properties: { creators }, + } = tokenMetadata; + verifyAggregateShare(creators, manifestFile); + + verifyCreatorCollation(creators, collatedCreators, manifestFile); + + // Check that the `image` and at least one of the files has a URI matching the index of this token. + const { + image, + properties: { files }, + } = tokenMetadata; + verifyImageURL(image, files, manifestFile); + } + + verifyConsistentShares(collatedCreators); +}; + +export const verifyTokenMetadata = ({ + files, + uploadElementsCount = null, +}): Boolean => { + // Will we need to deal with the cache? + + verifyAssets({ files, uploadElementsCount }); + + verifyMetadataManifests({ files }); + + return true; +}; diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/token-metadata.schema.json b/CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/token-metadata.schema.json new file mode 100644 index 0000000..2e66f18 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/commands/verifyTokenMetadata/token-metadata.schema.json @@ -0,0 +1,67 @@ +{ + "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", + "description": "Royalties percentage awarded to creators, represented as a 'basis point' (i.e., multiple the percentage by 100: 75% = 7500)", + "minimum": 0, + "maximum": 10000 + }, + "properties": { + "type": "object", + "description": "Arbitrary properties. Values may be strings, numbers, object or arrays.", + "properties": { + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uri": { "type": "string" }, + "type": { + "type": "string", + "description": "The MIME type for this file" + } + } + } + }, + "creators": { + "type": "array", + "description": "Contains list of creators, each with Solana address and share of the NFT", + "items": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "A Solana address", + "pattern": "[1-9A-HJ-NP-Za-km-z]{32,44}" + }, + "share": { + "type": "number", + "description": "Percentage of royalties to send to this address, represented as a percentage (0-100). The sum of all shares must equal 100", + "exclusiveMinimum": 0, + "maximum": 100 + } + } + } + } + } + } + } +} diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/fair-launch-cli.ts b/CandyMachine-Storefront/store/js/packages/cli/src/fair-launch-cli.ts new file mode 100755 index 0000000..a5329c7 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/fair-launch-cli.ts @@ -0,0 +1,2963 @@ +#!/usr/bin/env node +import * as fs from 'fs'; +import { program } from 'commander'; +import * as anchor from '@project-serum/anchor'; +import { LAMPORTS_PER_SOL } from '@solana/web3.js'; +import { Token, MintLayout } from '@solana/spl-token'; +import { + CACHE_PATH, + FAIR_LAUNCH_PROGRAM_ID, + TOKEN_METADATA_PROGRAM_ID, + TOKEN_PROGRAM_ID, +} from './helpers/constants'; +import { + loadFairLaunchProgram, + loadWalletKey, + getTokenMint, + getFairLaunch, + getTreasury, + getFairLaunchTicket, + getAtaForMint, + getFairLaunchTicketSeqLookup, + getFairLaunchLotteryBitmap, + getMetadata, + getParticipationMint, + getParticipationToken, + getMasterEdition, + getEditionMarkPda, +} from './helpers/accounts'; +import { chunks, getMultipleAccounts, sleep } from './helpers/various'; +import { createAssociatedTokenAccountInstruction } from './helpers/instructions'; +import { sendTransactionWithRetryWithKeypair } from './helpers/transactions'; +program.version('0.0.1'); + +if (!fs.existsSync(CACHE_PATH)) { + fs.mkdirSync(CACHE_PATH); +} + +const FAIR_LAUNCH_LOTTERY_SIZE = + 8 + // discriminator + 32 + // fair launch + 1 + // bump + 8; // size of bitmask ones + +program + .command('new_fair_launch') + .option( + '-e, --env ', + 'Solana cluster env name', + 'devnet', //mainnet-beta, testnet, devnet + ) + .option( + '-k, --keypair ', + `Solana wallet location`, + '--keypair not provided', + ) + .option('-u, --uuid ', 'uuid') + .option('-f, --fee ', 'fee', '2') + .option('-s, --price-range-start ', 'price range start', '1') + .option('-pe, --price-range-end ', 'price range end', '2') + .option( + '-arbp, --anti-rug-reserve-bp ', + 'optional anti-rug treasury reserve basis points (1-10000)', + ) + .option( + '-atc, --anti-rug-token-requirement ', + 'optional anti-rug token requirement when reserve opens - 100 means 100 tokens remaining out of total supply', + ) + .option( + '-sd, --self-destruct-date ', + 'optional date when funds from anti-rug setting will be returned - eg "04 Dec 1995 00:12:00 GMT"', + ) + .option( + '-pos, --phase-one-start-date ', + 'timestamp - eg "04 Dec 1995 00:12:00 GMT"', + ) + .option( + '-poe, --phase-one-end-date ', + 'timestamp - eg "04 Dec 1995 00:12:00 GMT"', + ) + .option( + '-pte, --phase-two-end-date ', + 'timestamp - eg "04 Dec 1995 00:12:00 GMT"', + ) + .option('-ld, --lottery-duration ', 'seconds eg 86400') + .option('-ts, --tick-size ', 'tick size', '0.1') + .option('-n, --number-of-tokens ', 'Number of tokens to sell') + .option( + '-mint, --treasury-mint ', + 'token mint to take as payment instead of sol', + ) + .action(async (_, cmd) => { + const { + keypair, + env, + priceRangeStart, + priceRangeEnd, + phaseOneStartDate, + phaseOneEndDate, + phaseTwoEndDate, + tickSize, + numberOfTokens, + fee, + uuid, + selfDestructDate, + antiRugTokenRequirement, + antiRugReserveBp, + lotteryDuration, + treasuryMint, + } = cmd.opts(); + + const antiRugTokenRequirementNumber = antiRugTokenRequirement + ? parseInt(antiRugTokenRequirement) + : null; + const antiRugReserveBpNumber = antiRugReserveBp + ? parseInt(antiRugReserveBp) + : null; + const selfDestructDateActual = selfDestructDate + ? Date.parse(selfDestructDate) / 1000 + : null; + + const antiRug = + antiRugTokenRequirementNumber && + antiRugReserveBpNumber && + selfDestructDateActual + ? { + reserveBp: antiRugReserveBpNumber, + tokenRequirement: new anchor.BN(antiRugTokenRequirementNumber), + selfDestructDate: new anchor.BN(selfDestructDateActual), + } + : null; + + const parsedNumber = parseInt(numberOfTokens); + let priceRangeStartNumber = parseFloat(priceRangeStart); + let priceRangeEndNumber = parseFloat(priceRangeEnd); + let tickSizeNumber = parseFloat(tickSize); + + let feeNumber = parseFloat(fee); + const realUuid = uuid.slice(0, 6); + const phaseOneStartDateActual = + (phaseOneStartDate ? Date.parse(phaseOneStartDate) : Date.now()) / 1000; + const phaseOneEndDateActual = + (phaseOneEndDate ? Date.parse(phaseOneEndDate) : Date.now() + 86400000) / + 1000; + const phaseTwoEndDateActual = + (phaseTwoEndDate + ? Date.parse(phaseTwoEndDate) + : Date.now() + 2 * 86400000) / 1000; + const lotteryDurationActual = lotteryDuration ? lotteryDuration : 86400; + + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadFairLaunchProgram(walletKeyPair, env); + if (!treasuryMint) { + priceRangeStartNumber = Math.ceil( + priceRangeStartNumber * LAMPORTS_PER_SOL, + ); + priceRangeEndNumber = Math.ceil(priceRangeEndNumber * LAMPORTS_PER_SOL); + tickSizeNumber = Math.ceil(tickSizeNumber * LAMPORTS_PER_SOL); + feeNumber = Math.ceil(feeNumber * LAMPORTS_PER_SOL); + } else { + const token = new Token( + anchorProgram.provider.connection, + //@ts-ignore + new anchor.web3.PublicKey(treasuryMint), + TOKEN_PROGRAM_ID, + walletKeyPair, + ); + + const mintInfo = await token.getMintInfo(); + + const mantissa = 10 ** mintInfo.decimals; + priceRangeStartNumber = Math.ceil(priceRangeStartNumber * mantissa); + priceRangeEndNumber = Math.ceil(priceRangeEndNumber * mantissa); + tickSizeNumber = Math.ceil(tickSizeNumber * mantissa); + feeNumber = Math.ceil(feeNumber * mantissa); + } + + const [tokenMint, tokenBump] = await getTokenMint( + walletKeyPair.publicKey, + realUuid, + ); + const [fairLaunch, fairLaunchBump] = await getFairLaunch(tokenMint); + const [treasury, treasuryBump] = await getTreasury(tokenMint); + + const remainingAccounts = !treasuryMint + ? [] + : [ + { + pubkey: new anchor.web3.PublicKey(treasuryMint), + isWritable: false, + isSigner: false, + }, + ]; + await anchorProgram.rpc.initializeFairLaunch( + fairLaunchBump, + treasuryBump, + tokenBump, + { + uuid: realUuid, + priceRangeStart: new anchor.BN(priceRangeStartNumber), + priceRangeEnd: new anchor.BN(priceRangeEndNumber), + phaseOneStart: new anchor.BN(phaseOneStartDateActual), + phaseOneEnd: new anchor.BN(phaseOneEndDateActual), + phaseTwoEnd: new anchor.BN(phaseTwoEndDateActual), + lotteryDuration: new anchor.BN(lotteryDurationActual), + tickSize: new anchor.BN(tickSizeNumber), + numberOfTokens: new anchor.BN(parsedNumber), + fee: new anchor.BN(feeNumber), + antiRugSetting: antiRug, + }, + { + accounts: { + fairLaunch, + tokenMint, + treasury, + authority: walletKeyPair.publicKey, + payer: walletKeyPair.publicKey, + tokenProgram: TOKEN_PROGRAM_ID, + systemProgram: anchor.web3.SystemProgram.programId, + rent: anchor.web3.SYSVAR_RENT_PUBKEY, + }, + remainingAccounts, + signers: [], + }, + ); + + console.log(`create fair launch Done: ${fairLaunch.toBase58()}`); + }); + +program + .command('update_fair_launch') + .option( + '-e, --env ', + 'Solana cluster env name', + 'devnet', //mainnet-beta, testnet, devnet + ) + .option( + '-k, --keypair ', + `Solana wallet location`, + '--keypair not provided', + ) + .option('-u, --uuid ', 'uuid') + .option('-f, --fee ', 'price range end', '2') + .option('-s, --price-range-start ', 'price range start', '1') + .option('-pe, --price-range-end ', 'price range end', '2') + .option( + '-arbp, --anti-rug-reserve-bp ', + 'optional anti-rug treasury reserve basis points (1-10000)', + ) + .option( + '-atc, --anti-rug-token-requirement ', + 'optional anti-rug token requirement when reserve opens - 100 means 100 tokens remaining out of total supply', + ) + .option( + '-sd, --self-destruct-date ', + 'optional date when funds from anti-rug setting will be returned - eg "04 Dec 1995 00:12:00 GMT"', + ) + .option( + '-pos, --phase-one-start-date ', + 'timestamp - eg "04 Dec 1995 00:12:00 GMT"', + ) + .option( + '-poe, --phase-one-end-date ', + 'timestamp - eg "04 Dec 1995 00:12:00 GMT"', + ) + .option('-ld, --lottery-duration ', 'seconds eg 86400') + .option( + '-pte, --phase-two-end-date ', + 'timestamp - eg "04 Dec 1995 00:12:00 GMT"', + ) + .option('-ts, --tick-size ', 'tick size', '0.1') + .option('-n, --number-of-tokens ', 'Number of tokens to sell') + .option( + '-mint, --token-mint ', + 'token mint to take as payment instead of sol', + ) + .action(async (_, cmd) => { + const { + keypair, + env, + priceRangeStart, + priceRangeEnd, + phaseOneStartDate, + phaseOneEndDate, + phaseTwoEndDate, + tickSize, + numberOfTokens, + fee, + mint, + uuid, + selfDestructDate, + antiRugTokenRequirement, + antiRugReserveBp, + lotteryDuration, + } = cmd.opts(); + const antiRugTokenRequirementNumber = antiRugTokenRequirement + ? parseInt(antiRugTokenRequirement) + : null; + const antiRugReserveBpNumber = antiRugReserveBp + ? parseInt(antiRugReserveBp) + : null; + const selfDestructDateActual = selfDestructDate + ? Date.parse(selfDestructDate) / 1000 + : null; + + const antiRug = + antiRugTokenRequirementNumber && + antiRugReserveBpNumber && + selfDestructDateActual + ? { + reserveBp: antiRugReserveBpNumber, + tokenRequirement: new anchor.BN(antiRugTokenRequirementNumber), + selfDestructDate: new anchor.BN(selfDestructDateActual), + } + : null; + const parsedNumber = parseInt(numberOfTokens); + let priceRangeStartNumber = parseFloat(priceRangeStart); + let priceRangeEndNumber = parseFloat(priceRangeEnd); + let tickSizeNumber = parseFloat(tickSize); + let feeNumber = parseFloat(fee); + const realUuid = uuid.slice(0, 6); + const phaseOneStartDateActual = + (phaseOneStartDate ? Date.parse(phaseOneStartDate) : Date.now()) / 1000; + const phaseOneEndDateActual = + (phaseOneEndDate ? Date.parse(phaseOneEndDate) : Date.now() + 86400000) / + 1000; + const phaseTwoEndDateActual = + (phaseTwoEndDate + ? Date.parse(phaseTwoEndDate) + : Date.now() + 2 * 86400000) / 1000; + const lotteryDurationActual = lotteryDuration ? lotteryDuration : 86400; + + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadFairLaunchProgram(walletKeyPair, env); + if (!mint) { + priceRangeStartNumber = Math.ceil( + priceRangeStartNumber * LAMPORTS_PER_SOL, + ); + priceRangeEndNumber = Math.ceil(priceRangeEndNumber * LAMPORTS_PER_SOL); + tickSizeNumber = Math.ceil(tickSizeNumber * LAMPORTS_PER_SOL); + feeNumber = Math.ceil(feeNumber * LAMPORTS_PER_SOL); + } else { + const token = new Token( + anchorProgram.provider.connection, + //@ts-ignore + fairLaunchObj.treasuryMint, + TOKEN_PROGRAM_ID, + walletKeyPair, + ); + + const mintInfo = await token.getMintInfo(); + + const mantissa = 10 ** mintInfo.decimals; + priceRangeStartNumber = Math.ceil(priceRangeStartNumber * mantissa); + priceRangeEndNumber = Math.ceil(priceRangeEndNumber * mantissa); + tickSizeNumber = Math.ceil(tickSizeNumber * mantissa); + feeNumber = Math.ceil(feeNumber * mantissa); + } + + const tokenMint = ( + await getTokenMint(walletKeyPair.publicKey, realUuid) + )[0]; + const fairLaunch = (await getFairLaunch(tokenMint))[0]; + + await anchorProgram.rpc.updateFairLaunch( + { + uuid: realUuid, + priceRangeStart: new anchor.BN(priceRangeStartNumber), + priceRangeEnd: new anchor.BN(priceRangeEndNumber), + phaseOneStart: new anchor.BN(phaseOneStartDateActual), + phaseOneEnd: new anchor.BN(phaseOneEndDateActual), + phaseTwoEnd: new anchor.BN(phaseTwoEndDateActual), + lotteryDuration: new anchor.BN(lotteryDurationActual), + tickSize: new anchor.BN(tickSizeNumber), + numberOfTokens: new anchor.BN(parsedNumber), + fee: new anchor.BN(feeNumber), + antiRugSetting: antiRug, + }, + { + accounts: { + fairLaunch, + authority: walletKeyPair.publicKey, + clock: anchor.web3.SYSVAR_CLOCK_PUBKEY, + }, + }, + ); + + console.log(`Updated fair launch Done: ${fairLaunch.toBase58()}`); + }); + +program + .command('purchase_ticket') + .option( + '-e, --env ', + 'Solana cluster env name', + 'devnet', //mainnet-beta, testnet, devnet + ) + .option( + '-k, --keypair ', + `Solana wallet location`, + '--keypair not provided', + ) + .option('-f, --fair-launch ', 'fair launch id') + .option('-a, --amount ', 'amount') + .action(async (_, cmd) => { + const { env, keypair, fairLaunch, amount } = cmd.opts(); + let amountNumber = parseFloat(amount); + + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadFairLaunchProgram(walletKeyPair, env); + + const fairLaunchKey = new anchor.web3.PublicKey(fairLaunch); + const fairLaunchObj = await anchorProgram.account.fairLaunch.fetch( + fairLaunchKey, + ); + const [fairLaunchTicket, bump] = await getFairLaunchTicket( + //@ts-ignore + fairLaunchObj.tokenMint, + walletKeyPair.publicKey, + ); + + const remainingAccounts = []; + const instructions = []; + const signers = []; + //@ts-ignore + const tokenAta = fairLaunchObj.treasuryMint + ? ( + await getAtaForMint( + //@ts-ignore + fairLaunchObj.treasuryMint, + walletKeyPair.publicKey, + ) + )[0] + : undefined; + + //@ts-ignore + if (!fairLaunchObj.treasuryMint) { + amountNumber = Math.ceil(amountNumber * LAMPORTS_PER_SOL); + } else { + const transferAuthority = anchor.web3.Keypair.generate(); + signers.push(transferAuthority); + const token = new Token( + anchorProgram.provider.connection, + //@ts-ignore + fairLaunchObj.treasuryMint, + TOKEN_PROGRAM_ID, + walletKeyPair, + ); + const mintInfo = await token.getMintInfo(); + amountNumber = Math.ceil(amountNumber * 10 ** mintInfo.decimals); + + instructions.push( + Token.createApproveInstruction( + TOKEN_PROGRAM_ID, + //@ts-ignore + tokenAta, + transferAuthority.publicKey, + walletKeyPair.publicKey, + [], + amountNumber * 10 ** mintInfo.decimals + + //@ts-ignore + fairLaunchObj.data.fee.toNumber(), + ), + ); + + remainingAccounts.push({ + //@ts-ignore + pubkey: fairLaunchObj.treasuryMint, + isWritable: true, + isSigner: false, + }); + remainingAccounts.push({ + pubkey: tokenAta, + isWritable: true, + isSigner: false, + }); + remainingAccounts.push({ + pubkey: transferAuthority.publicKey, + isWritable: false, + isSigner: true, + }); + remainingAccounts.push({ + pubkey: TOKEN_PROGRAM_ID, + isWritable: false, + isSigner: false, + }); + } + + instructions.push( + await anchorProgram.instruction.purchaseTicket( + bump, + new anchor.BN(amountNumber), + { + accounts: { + fairLaunchTicket, + fairLaunch, + //@ts-ignore + treasury: fairLaunchObj.treasury, + buyer: walletKeyPair.publicKey, + payer: walletKeyPair.publicKey, + systemProgram: anchor.web3.SystemProgram.programId, + rent: anchor.web3.SYSVAR_RENT_PUBKEY, + clock: anchor.web3.SYSVAR_CLOCK_PUBKEY, + }, + remainingAccounts, + }, + ), + ); + + if (tokenAta) { + instructions.push( + Token.createRevokeInstruction( + TOKEN_PROGRAM_ID, + tokenAta, + walletKeyPair.publicKey, + [], + ), + ); + } + + await sendTransactionWithRetryWithKeypair( + anchorProgram.provider.connection, + walletKeyPair, + instructions, + signers, + 'max', + ); + console.log( + `create fair launch ticket Done: ${fairLaunchTicket.toBase58()}. Trying to create seq now...we may or may not get a validator with data on chain. Either way, your ticket is secure.`, + ); + + let fairLaunchTicketObj; + for (let i = 0; i < 10; i++) { + await sleep(5000); + try { + fairLaunchTicketObj = + await anchorProgram.account.fairLaunchTicket.fetch(fairLaunchTicket); + break; + } catch (e) { + console.log('Not found. Trying again...'); + } + } + + const [fairLaunchTicketSeqLookup, seqBump] = + await getFairLaunchTicketSeqLookup( + //@ts-ignore + fairLaunchObj.tokenMint, + //@ts-ignore + fairLaunchTicketObj.seq, + ); + + await anchorProgram.rpc.createTicketSeq(seqBump, { + accounts: { + fairLaunchTicketSeqLookup, + fairLaunch, + fairLaunchTicket, + payer: walletKeyPair.publicKey, + systemProgram: anchor.web3.SystemProgram.programId, + rent: anchor.web3.SYSVAR_RENT_PUBKEY, + }, + signers: [], + }); + + console.log('Created seq'); + }); + +program + .command('mint_from_dummy') + .option( + '-e, --env ', + 'Solana cluster env name', + 'devnet', //mainnet-beta, testnet, devnet + ) + .option( + '-k, --keypair ', + `Solana wallet location`, + '--keypair not provided', + ) + .option( + '-d, --destination ', + `Destination wallet location`, + '--destination not provided', + ) + .option('-a, --amount ', 'amount') + .option('-m, --mint ', 'mint') + .action(async (_, cmd) => { + const { env, keypair, amount, destination, mint } = cmd.opts(); + + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadFairLaunchProgram(walletKeyPair, env); + const amountNumber = parseFloat(amount); + const mintKey = new anchor.web3.PublicKey(mint); + const dest = new anchor.web3.PublicKey(destination); + const token = (await getAtaForMint(mintKey, dest))[0]; + const instructions = []; + const tokenApp = new Token( + anchorProgram.provider.connection, + //@ts-ignore + new anchor.web3.PublicKey(mint), + TOKEN_PROGRAM_ID, + walletKeyPair, + ); + + const mintInfo = await tokenApp.getMintInfo(); + + const mantissa = 10 ** mintInfo.decimals; + const assocToken = await anchorProgram.provider.connection.getAccountInfo( + token, + ); + if (!assocToken) { + instructions.push( + createAssociatedTokenAccountInstruction( + token, + walletKeyPair.publicKey, + dest, + mintKey, + ), + ); + } + + instructions.push( + Token.createMintToInstruction( + TOKEN_PROGRAM_ID, + mintKey, + token, + walletKeyPair.publicKey, + [], + amountNumber * mantissa, + ), + ); + + await sendTransactionWithRetryWithKeypair( + anchorProgram.provider.connection, + walletKeyPair, + instructions, + [], + 'single', + ); + console.log(`Minted ${amount} to ${token.toBase58()}.`); + }); + +program + .command('create_dummy_payment_mint') + .option( + '-e, --env ', + 'Solana cluster env name', + 'devnet', //mainnet-beta, testnet, devnet + ) + .option( + '-k, --keypair ', + `Solana wallet location`, + '--keypair not provided', + ) + .action(async (_, cmd) => { + const { env, keypair } = cmd.opts(); + + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadFairLaunchProgram(walletKeyPair, env); + const mint = anchor.web3.Keypair.generate(); + const token = ( + await getAtaForMint(mint.publicKey, walletKeyPair.publicKey) + )[0]; + const instructions: anchor.web3.TransactionInstruction[] = [ + anchor.web3.SystemProgram.createAccount({ + fromPubkey: walletKeyPair.publicKey, + newAccountPubkey: mint.publicKey, + space: MintLayout.span, + lamports: + await anchorProgram.provider.connection.getMinimumBalanceForRentExemption( + MintLayout.span, + ), + programId: TOKEN_PROGRAM_ID, + }), + Token.createInitMintInstruction( + TOKEN_PROGRAM_ID, + mint.publicKey, + 6, + walletKeyPair.publicKey, + walletKeyPair.publicKey, + ), + createAssociatedTokenAccountInstruction( + token, + walletKeyPair.publicKey, + walletKeyPair.publicKey, + mint.publicKey, + ), + ]; + + const signers = [mint]; + + await sendTransactionWithRetryWithKeypair( + anchorProgram.provider.connection, + walletKeyPair, + instructions, + signers, + 'single', + ); + console.log(`create mint Done: ${mint.publicKey.toBase58()}.`); + }); + +async function adjustTicket({ + amountNumber, + fairLaunchObj, + adjuster, + fairLaunch, + fairLaunchTicket, + fairLaunchLotteryBitmap, + anchorProgram, + payer, + adjustMantissa, +}: { + amountNumber: number; + fairLaunchObj: any; + payer: anchor.web3.Keypair; + adjuster: anchor.web3.PublicKey; + fairLaunch: anchor.web3.PublicKey; + fairLaunchTicket: anchor.web3.PublicKey; + fairLaunchLotteryBitmap: anchor.web3.PublicKey; + anchorProgram: anchor.Program; + adjustMantissa: boolean; +}) { + const remainingAccounts = []; + const instructions = []; + const signers = []; + //@ts-ignore + const tokenAta = fairLaunchObj.treasuryMint + ? ( + await getAtaForMint( + //@ts-ignore + fairLaunchObj.treasuryMint, + adjuster, + ) + )[0] + : undefined; + //@ts-ignore + if (!fairLaunchObj.treasuryMint) { + if (adjustMantissa) + amountNumber = Math.ceil(amountNumber * LAMPORTS_PER_SOL); + } else { + const transferAuthority = anchor.web3.Keypair.generate(); + signers.push(transferAuthority); + const token = new Token( + anchorProgram.provider.connection, + fairLaunchObj.treasuryMint, + TOKEN_PROGRAM_ID, + payer, + ); + + const mintInfo = await token.getMintInfo(); + if (adjustMantissa) + amountNumber = Math.ceil(amountNumber * 10 ** mintInfo.decimals); + if (amountNumber > 0) { + instructions.push( + Token.createApproveInstruction( + TOKEN_PROGRAM_ID, + tokenAta, + transferAuthority.publicKey, + adjuster, + [], + //@ts-ignore + amountNumber, + ), + ); + } + + remainingAccounts.push({ + //@ts-ignore + pubkey: fairLaunchObj.treasuryMint, + isWritable: true, + isSigner: false, + }); + remainingAccounts.push({ + pubkey: tokenAta, + isWritable: true, + isSigner: false, + }); + remainingAccounts.push({ + pubkey: transferAuthority.publicKey, + isWritable: false, + isSigner: true, + }); + remainingAccounts.push({ + pubkey: TOKEN_PROGRAM_ID, + isWritable: false, + isSigner: false, + }); + } + + instructions.push( + await anchorProgram.instruction.adjustTicket(new anchor.BN(amountNumber), { + accounts: { + fairLaunchTicket, + fairLaunch, + fairLaunchLotteryBitmap, + //@ts-ignore + treasury: fairLaunchObj.treasury, + systemProgram: anchor.web3.SystemProgram.programId, + clock: anchor.web3.SYSVAR_CLOCK_PUBKEY, + }, + //__private: { logAccounts: true }, + remainingAccounts: [ + { + pubkey: adjuster, + isSigner: adjuster.equals(payer.publicKey), + isWritable: true, + }, + ...remainingAccounts, + ], + }), + ); + + //@ts-ignore + if (fairLaunchObj.treasuryMint && amountNumber > 0) { + instructions.push( + Token.createRevokeInstruction( + FAIR_LAUNCH_PROGRAM_ID, + tokenAta, + payer.publicKey, + [], + ), + ); + } + + await sendTransactionWithRetryWithKeypair( + anchorProgram.provider.connection, + payer, + instructions, + signers, + 'single', + ); + + console.log( + `update fair launch ticket Done: ${fairLaunchTicket.toBase58()}.`, + ); +} + +program + .command('update_participation_nft') + .option( + '-e, --env ', + 'Solana cluster env name', + 'devnet', //mainnet-beta, testnet, devnet + ) + .option( + '-k, --keypair ', + `Solana wallet location`, + '--keypair not provided', + ) + .option('-f, --fair-launch ', 'fair launch id') + .option('-n, --name ', 'name') + .option('-s, --symbol ', 'symbol') + .option('-u, --uri ', 'uri') + .option( + '-sfbp, --seller-fee-basis-points ', + 'seller fee basis points', + ) + .option( + '-m, --participation-modulo ', + '1 if everybody gets it, 4 if only 1 in 4 get it, etc', + ) + .option( + '-c, --creators ', + 'comma separated creator wallets like wallet1,73,true,wallet2,27,false where its wallet, then share, then verified true/false', + ) + .option('-nm, --is_not_mutable', 'is not mutable') + .action(async (_, cmd) => { + const { + env, + keypair, + fairLaunch, + name, + symbol, + uri, + sellerFeeBasisPoints, + creators, + isNotMutable, + participationModulo, + } = cmd.opts(); + const sellerFeeBasisPointsNumber = parseInt(sellerFeeBasisPoints); + const participationModuloNumber = parseInt(participationModulo); + + const creatorsListPre = creators ? creators.split(',') : []; + const creatorsList = []; + for (let i = 0; i < creatorsListPre.length; i += 3) { + creatorsList.push({ + address: new anchor.web3.PublicKey(creatorsListPre[i]), + share: parseInt(creatorsListPre[i + 1]), + verified: creatorsListPre[i + 2] == 'true' ? true : false, + }); + } + const isMutableBool = isNotMutable ? false : true; + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadFairLaunchProgram(walletKeyPair, env); + + const fairLaunchKey = new anchor.web3.PublicKey(fairLaunch); + const fairLaunchObj = await anchorProgram.account.fairLaunch.fetch( + fairLaunchKey, + ); + + const participationMint = ( + await getParticipationMint( + //@ts-ignore + fairLaunchObj.authority, + //@ts-ignore + fairLaunchObj.data.uuid, + ) + )[0]; + + await anchorProgram.rpc.updateParticipationNft( + participationModuloNumber, + { + name, + symbol, + uri, + sellerFeeBasisPoints: sellerFeeBasisPointsNumber, + creators: creatorsList, + isMutable: isMutableBool, + }, + { + accounts: { + fairLaunch: fairLaunchKey, + authority: walletKeyPair.publicKey, + //@ts-ignore + metadata: await getMetadata(participationMint), + tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID, + tokenProgram: TOKEN_PROGRAM_ID, + }, + }, + ); + + console.log('Update participation metadata.'); + }); + +program + .command('set_participation_nft') + .option( + '-e, --env ', + 'Solana cluster env name', + 'devnet', //mainnet-beta, testnet, devnet + ) + .option( + '-k, --keypair ', + `Solana wallet location`, + '--keypair not provided', + ) + .option('-f, --fair-launch ', 'fair launch id') + .option('-n, --name ', 'name') + .option('-s, --symbol ', 'symbol') + .option('-u, --uri ', 'uri') + .option( + '-sfbp, --seller-fee-basis-points ', + 'seller fee basis points', + ) + .option( + '-m, --participation-modulo ', + '1 if everybody gets it, 4 if only 1 in 4 get it, etc', + ) + .option( + '-c, --creators ', + 'comma separated creator wallets like wallet1,73,true,wallet2,27,false where its wallet, then share, then verified true/false', + ) + .option('-nm, --is_not_mutable', 'is not mutable') + .action(async (_, cmd) => { + const { + env, + keypair, + fairLaunch, + name, + symbol, + uri, + sellerFeeBasisPoints, + creators, + isNotMutable, + participationModulo, + } = cmd.opts(); + const sellerFeeBasisPointsNumber = parseInt(sellerFeeBasisPoints); + const participationModuloNumber = parseInt(participationModulo); + + const creatorsListPre = creators ? creators.split(',') : []; + const creatorsList = []; + for (let i = 0; i < creatorsListPre.length; i += 3) { + creatorsList.push({ + address: new anchor.web3.PublicKey(creatorsListPre[i]), + share: parseInt(creatorsListPre[i + 1]), + verified: creatorsListPre[i + 2] == 'true' ? true : false, + }); + } + const isMutableBool = isNotMutable ? false : true; + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadFairLaunchProgram(walletKeyPair, env); + + const fairLaunchKey = new anchor.web3.PublicKey(fairLaunch); + const fairLaunchObj = await anchorProgram.account.fairLaunch.fetch( + fairLaunchKey, + ); + + const [participationMint, mintBump] = await getParticipationMint( + //@ts-ignore + fairLaunchObj.authority, + //@ts-ignore + fairLaunchObj.data.uuid, + ); + const [participationTokenAccount, tokenBump] = await getParticipationToken( + //@ts-ignore + fairLaunchObj.authority, + //@ts-ignore + fairLaunchObj.data.uuid, + ); + + await anchorProgram.rpc.setParticipationNft( + mintBump, + tokenBump, + participationModuloNumber, + { + name, + symbol, + uri, + sellerFeeBasisPoints: sellerFeeBasisPointsNumber, + creators: creatorsList, + isMutable: isMutableBool, + }, + { + accounts: { + fairLaunch: fairLaunchKey, + authority: walletKeyPair.publicKey, + payer: walletKeyPair.publicKey, + participationMint, + participationTokenAccount, + //@ts-ignore + metadata: await getMetadata(participationMint), + //@ts-ignore + masterEdition: await getMasterEdition(participationMint), + tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID, + tokenProgram: TOKEN_PROGRAM_ID, + systemProgram: anchor.web3.SystemProgram.programId, + rent: anchor.web3.SYSVAR_RENT_PUBKEY, + clock: anchor.web3.SYSVAR_CLOCK_PUBKEY, + }, + }, + ); + + console.log('Set participation metadata.'); + }); + +program + .command('set_token_metadata') + .option( + '-e, --env ', + 'Solana cluster env name', + 'devnet', //mainnet-beta, testnet, devnet + ) + .option( + '-k, --keypair ', + `Solana wallet location`, + '--keypair not provided', + ) + .option('-f, --fair-launch ', 'fair launch id') + .option('-n, --name ', 'name') + .option('-s, --symbol ', 'symbol') + .option('-u, --uri ', 'uri') + .option( + '-sfbp, --seller-fee-basis-points ', + 'seller fee basis points', + ) + .option( + '-c, --creators ', + 'comma separated creator wallets like wallet1,73,true,wallet2,27,false where its wallet, then share, then verified true/false', + ) + .option('-nm, --is_not_mutable', 'is not mutable') + .action(async (_, cmd) => { + const { + env, + keypair, + fairLaunch, + name, + symbol, + uri, + sellerFeeBasisPoints, + creators, + isNotMutable, + } = cmd.opts(); + const sellerFeeBasisPointsNumber = parseInt(sellerFeeBasisPoints); + + const creatorsListPre = creators ? creators.split(',') : []; + const creatorsList = []; + for (let i = 0; i < creatorsListPre.length; i += 3) { + creatorsList.push({ + address: new anchor.web3.PublicKey(creatorsListPre[i]), + share: parseInt(creatorsListPre[i + 1]), + verified: creatorsListPre[i + 2] == 'true' ? true : false, + }); + } + const isMutableBool = isNotMutable ? false : true; + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadFairLaunchProgram(walletKeyPair, env); + + const fairLaunchKey = new anchor.web3.PublicKey(fairLaunch); + const fairLaunchObj = await anchorProgram.account.fairLaunch.fetch( + fairLaunchKey, + ); + + await anchorProgram.rpc.setTokenMetadata( + { + name, + symbol, + uri, + sellerFeeBasisPoints: sellerFeeBasisPointsNumber, + creators: creatorsList, + isMutable: isMutableBool, + }, + { + accounts: { + fairLaunch: fairLaunchKey, + authority: walletKeyPair.publicKey, + payer: walletKeyPair.publicKey, + //@ts-ignore + metadata: await getMetadata(fairLaunchObj.tokenMint), + //@ts-ignore + tokenMint: fairLaunchObj.tokenMint, + tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID, + tokenProgram: TOKEN_PROGRAM_ID, + systemProgram: anchor.web3.SystemProgram.programId, + rent: anchor.web3.SYSVAR_RENT_PUBKEY, + clock: anchor.web3.SYSVAR_CLOCK_PUBKEY, + }, + }, + ); + + console.log('Set token metadata.'); + }); + +program + .command('adjust_ticket') + .option( + '-e, --env ', + 'Solana cluster env name', + 'devnet', //mainnet-beta, testnet, devnet + ) + .option( + '-k, --keypair ', + `Solana wallet location`, + '--keypair not provided', + ) + .option('-f, --fair-launch ', 'fair launch id') + .option('-a, --amount ', 'amount') + .action(async (_, cmd) => { + const { env, keypair, fairLaunch, amount } = cmd.opts(); + const amountNumber = parseFloat(amount); + + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadFairLaunchProgram(walletKeyPair, env); + + const fairLaunchKey = new anchor.web3.PublicKey(fairLaunch); + const fairLaunchObj = await anchorProgram.account.fairLaunch.fetch( + fairLaunchKey, + ); + const fairLaunchTicket = ( + await getFairLaunchTicket( + //@ts-ignore + fairLaunchObj.tokenMint, + walletKeyPair.publicKey, + ) + )[0]; + + const fairLaunchLotteryBitmap = ( //@ts-ignore + await getFairLaunchLotteryBitmap(fairLaunchObj.tokenMint) + )[0]; + + await adjustTicket({ + amountNumber, + fairLaunchObj, + adjuster: walletKeyPair.publicKey, + fairLaunch, + fairLaunchTicket, + fairLaunchLotteryBitmap, + anchorProgram, + payer: walletKeyPair, + adjustMantissa: true, + }); + }); + +program + .command('punch_and_refund_all_outstanding') + .option( + '-e, --env ', + 'Solana cluster env name', + 'devnet', //mainnet-beta, testnet, devnet + ) + .option( + '-k, --keypair ', + `Solana wallet location`, + '--keypair not provided', + ) + .option('-f, --fair-launch ', 'fair launch id') + .option( + '-r, --rpc-url ', + 'custom rpc url since this is a heavy command', + ) + .action(async (_, cmd) => { + const { env, keypair, fairLaunch, rpcUrl } = cmd.opts(); + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadFairLaunchProgram( + walletKeyPair, + env, + rpcUrl, + ); + + const fairLaunchKey = new anchor.web3.PublicKey(fairLaunch); + const fairLaunchObj = await anchorProgram.account.fairLaunch.fetch( + fairLaunchKey, + ); + + const fairLaunchLotteryBitmap = ( + await getFairLaunchLotteryBitmap( + //@ts-ignore + fairLaunchObj.tokenMint, + ) + )[0]; + + const fairLaunchLotteryBitmapObj = + await anchorProgram.provider.connection.getAccountInfo( + fairLaunchLotteryBitmap, + ); + + const seqKeys = []; + //@ts-ignore + for (let i = 0; i < fairLaunchObj.numberTicketsSold; i++) { + seqKeys.push( + ( + await getFairLaunchTicketSeqLookup( + //@ts-ignore + fairLaunchObj.tokenMint, + new anchor.BN(i), + ) + )[0], + ); + } + + const ticketKeys: any[][] = await Promise.all( + chunks(Array.from(Array(seqKeys.length).keys()), 1000).map( + async allIndexesInSlice => { + let ticketKeys = []; + for (let i = 0; i < allIndexesInSlice.length; i += 100) { + console.log( + 'Pulling ticket seqs for slice', + allIndexesInSlice[i], + allIndexesInSlice[i + 100], + ); + const slice = allIndexesInSlice + .slice(i, i + 100) + .map(index => seqKeys[index]); + let result; + let tries = 0; + let done = false; + while (tries < 3 && !done) { + try { + result = await getMultipleAccounts( + anchorProgram.provider.connection, + slice.map(s => s.toBase58()), + 'recent', + ); + done = true; + } catch (e) { + console.log(e); + console.log('Failed, retrying after 10s sleep'); + await sleep(10000); + tries += 1; + } + } + ticketKeys = ticketKeys.concat( + result.array.map( + a => + new anchor.web3.PublicKey( + new Uint8Array(a.data.slice(8, 8 + 32)), + ), + ), + ); + } + return ticketKeys; + }, + ), + ); + + const ticketsFlattened = ticketKeys.flat(); + + const ticketData: { key: anchor.web3.PublicKey; model: any }[][] = + await Promise.all( + chunks(Array.from(Array(ticketsFlattened.length).keys()), 1000).map( + async allIndexesInSlice => { + let states = []; + for (let i = 0; i < allIndexesInSlice.length; i += 100) { + console.log( + 'Pulling accounts for slice', + allIndexesInSlice[i], + allIndexesInSlice[i + 100], + ); + const slice = allIndexesInSlice + .slice(i, i + 100) + .map(index => ticketsFlattened[index]); + + let result; + let tries = 0; + let done = false; + while (tries < 3 && !done) { + try { + result = await getMultipleAccounts( + anchorProgram.provider.connection, + slice.map(s => s.toBase58()), + 'recent', + ); + done = true; + } catch (e) { + console.log(e); + console.log('Failed, retrying after 10s sleep'); + await sleep(10000); + tries += 1; + } + } + states = states.concat( + result.array.map((a, i) => ({ + key: new anchor.web3.PublicKey(result.keys[i]), + model: anchorProgram.coder.accounts.decode( + 'FairLaunchTicket', + a.data, + ), + })), + ); + } + return states; + }, + ), + ); + + const ticketDataFlat = ticketData.flat(); + + await Promise.all( + chunks(Array.from(Array(ticketDataFlat.length).keys()), 1000).map( + async allIndexesInSlice => { + for (let i = 0; i < allIndexesInSlice.length; i++) { + const ticket = ticketDataFlat[allIndexesInSlice[i]]; + if (!ticket.model.gottenParticipation) { + let tries = 0; + let done = false; + while (tries < 3 && !done) { + try { + const nft = await getParticipationNft({ + payer: walletKeyPair, + buyer: ticket.model.buyer, + anchorProgram, + fairLaunchTicket: ticket.key, + fairLaunch, + fairLaunchObj, + fairLaunchTicketObj: ticket.model, + }); + done = true; + if (nft) { + console.log( + `Got participation nft and placed token in new account ${nft.toBase58()}.`, + ); + } + } catch (e) { + if (tries > 3) { + throw e; + } else { + tries++; + } + console.log(e); + console.log( + 'Ticket failed to get participation nft, trying one more time', + ); + await sleep(1000); + } + } + } else { + console.log( + 'Ticket', + ticket.model.buyer.toBase58(), + 'already received participation', + ); + } + if (ticket.model.state.unpunched) { + if ( + ticket.model.amount.toNumber() < + //@ts-ignore + fairLaunchObj.currentMedian.toNumber() + ) { + console.log( + 'Refunding ticket for buyer', + allIndexesInSlice[i], + ticket.model.buyer.toBase58(), + ); + let tries = 0; + let done = false; + while (tries < 3 && !done) { + try { + await adjustTicket({ + amountNumber: 0, + fairLaunchObj, + adjuster: ticket.model.buyer, + fairLaunch, + fairLaunchTicket: ticket.key, + fairLaunchLotteryBitmap, + anchorProgram, + payer: walletKeyPair, + adjustMantissa: true, + }); + done = true; + } catch (e) { + if (tries > 3) { + throw e; + } else { + tries++; + } + console.log(e); + console.log( + 'Adjusting ticket failed', + ticket.key.toBase58(), + ); + await sleep(1000); + } + } + } else { + const myByte = + fairLaunchLotteryBitmapObj.data[ + FAIR_LAUNCH_LOTTERY_SIZE + + Math.floor(ticket.model.seq.toNumber() / 8) + ]; + + const positionFromRight = 7 - (ticket.model.seq.toNumber() % 8); + const mask = Math.pow(2, positionFromRight); + const isWinner = myByte & mask; + if (isWinner > 0) { + console.log( + 'Punching ticket for buyer', + allIndexesInSlice[i], + ticket.model.buyer.toBase58(), + ); + const diff = + ticket.model.amount.toNumber() - + //@ts-ignore + fairLaunchObj.currentMedian.toNumber(); + if (diff > 0) { + console.log( + 'Refunding first', + diff, + 'to buyer', + allIndexesInSlice[i], + 'before punching', + ); + let tries = 0; + let done = false; + while (tries < 3 && !done) { + try { + await adjustTicket({ + //@ts-ignore + amountNumber: fairLaunchObj.currentMedian.toNumber(), + fairLaunchObj, + adjuster: ticket.model.buyer, + fairLaunch, + fairLaunchTicket: ticket.key, + fairLaunchLotteryBitmap, + anchorProgram, + payer: walletKeyPair, + adjustMantissa: false, + }); + done = true; + console.log( + 'Adjusting ticket succeeded', + ticket.key.toBase58(), + ); + } catch (e) { + if (tries > 3) { + throw e; + } else { + tries++; + } + console.log(e); + console.log( + 'Adjusting ticket failed', + ticket.key.toBase58(), + ); + await sleep(1000); + } + } + } + let tries = 0; + let done = false; + while (tries < 3 && !done) { + try { + const buyerTokenAccount = await punchTicket({ + payer: walletKeyPair, + puncher: ticket.model.buyer, + anchorProgram, + fairLaunchTicket: ticket.key, + fairLaunch, + fairLaunchLotteryBitmap, + fairLaunchObj, + fairLaunchTicketObj: ticket.model, + }); + done = true; + console.log( + `Punched ticket and placed token in new account ${buyerTokenAccount.toBase58()}.`, + ); + } catch (e) { + if (tries > 3) { + throw e; + } else { + tries++; + } + console.log(e); + console.log( + 'Ticket failed to punch, trying one more time', + ); + await sleep(1000); + } + } + } else { + console.log( + 'Buyer ', + allIndexesInSlice[i], + ticket.model.buyer.toBase58(), + 'was eligible but lost lottery, refunding', + ); + let tries = 0; + let done = false; + while (tries < 3 && !done) { + try { + await adjustTicket({ + //@ts-ignore + amountNumber: 0, + fairLaunchObj, + adjuster: ticket.model.buyer, + fairLaunch, + fairLaunchTicket: ticket.key, + fairLaunchLotteryBitmap, + anchorProgram, + payer: walletKeyPair, + adjustMantissa: true, + }); + done = true; + console.log( + 'Refunding ticket succeeded', + ticket.key.toBase58(), + ); + } catch (e) { + if (tries > 3) { + throw e; + } else { + tries++; + } + console.log(e); + console.log( + 'Adjusting ticket failed', + ticket.key.toBase58(), + ); + await sleep(1000); + } + } + console.log('Refunded.'); + } + } + } else if (ticket.model.state.withdrawn) { + console.log( + 'Buyer', + allIndexesInSlice[i], + ticket.model.buyer.toBase58(), + 'withdrawn already', + ); + } else if (ticket.model.state.punched) { + console.log( + 'Buyer', + allIndexesInSlice[i], + ticket.model.buyer.toBase58(), + 'punched already', + ); + } + } + }, + ), + ); + }); + +async function getParticipationNft({ + buyer, + payer, + anchorProgram, + fairLaunchTicket, + fairLaunch, + fairLaunchObj, + fairLaunchTicketObj, +}: { + buyer: anchor.web3.PublicKey; + anchorProgram: anchor.Program; + payer: anchor.web3.Keypair; + fairLaunchTicket: anchor.web3.PublicKey; + fairLaunch: anchor.web3.PublicKey; + fairLaunchObj: any; + fairLaunchTicketObj: any; +}): Promise { + if ( + fairLaunchObj.participationMint && + fairLaunchTicketObj.seq.toNumber() % fairLaunchObj.participationModulo == 0 + ) { + console.log(buyer.toBase58(), 'gets participation token.'); + const mint = anchor.web3.Keypair.generate(); + let signers = [mint]; + const tokenAccount = ( + await getParticipationToken( + fairLaunchObj.authority, + fairLaunchObj.data.uuid, + ) + )[0]; + const buyerTokenNft = (await getAtaForMint(mint.publicKey, buyer))[0]; + let instructions = [ + anchor.web3.SystemProgram.createAccount({ + fromPubkey: payer.publicKey, + newAccountPubkey: mint.publicKey, + space: MintLayout.span, + lamports: + await anchorProgram.provider.connection.getMinimumBalanceForRentExemption( + MintLayout.span, + ), + programId: TOKEN_PROGRAM_ID, + }), + Token.createInitMintInstruction( + TOKEN_PROGRAM_ID, + mint.publicKey, + 0, + payer.publicKey, + payer.publicKey, + ), + createAssociatedTokenAccountInstruction( + buyerTokenNft, + payer.publicKey, + buyer, + mint.publicKey, + ), + Token.createMintToInstruction( + TOKEN_PROGRAM_ID, + mint.publicKey, + buyerTokenNft, + payer.publicKey, + [], + 1, + ), + ]; + await anchorProgram.rpc.mintParticipationNft({ + accounts: { + fairLaunch, + fairLaunchTicket, + payer: payer.publicKey, + participationMint: fairLaunchObj.participationMint, + participationTokenAccount: tokenAccount, + buyer, + buyerNftTokenAccount: buyerTokenNft, + newMetadata: await getMetadata(mint.publicKey), + newEdition: await getMasterEdition(mint.publicKey), + newMint: mint.publicKey, + newMintAuthority: payer.publicKey, + metadata: await getMetadata(fairLaunchObj.participationMint), + masterEdition: await getMasterEdition(fairLaunchObj.participationMint), + editionMarkPda: await getEditionMarkPda( + fairLaunchObj.participationMint, + fairLaunchTicketObj.seq.toNumber(), + ), + tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID, + tokenProgram: TOKEN_PROGRAM_ID, + systemProgram: anchor.web3.SystemProgram.programId, + rent: anchor.web3.SYSVAR_RENT_PUBKEY, + }, + instructions, + signers, + }); + return buyerTokenNft; + } else { + console.log(buyer.toBase58(), 'doesnt get participation token.'); + return null; + } +} + +async function punchTicket({ + puncher, + payer, + anchorProgram, + fairLaunchTicket, + fairLaunch, + fairLaunchLotteryBitmap, + fairLaunchObj, + fairLaunchTicketObj, +}: { + puncher: anchor.web3.PublicKey; + anchorProgram: anchor.Program; + payer: anchor.web3.Keypair; + fairLaunchTicket: anchor.web3.PublicKey; + fairLaunch: anchor.web3.PublicKey; + fairLaunchLotteryBitmap: anchor.web3.PublicKey; + fairLaunchObj: any; + fairLaunchTicketObj: any; +}): Promise { + const buyerTokenAccount = ( + await getAtaForMint( + //@ts-ignore + fairLaunchObj.tokenMint, + puncher, + ) + )[0]; + + await anchorProgram.rpc.punchTicket({ + accounts: { + fairLaunchTicket, + fairLaunch, + fairLaunchLotteryBitmap, + payer: payer.publicKey, + buyerTokenAccount, + //@ts-ignore + tokenMint: fairLaunchObj.tokenMint, + tokenProgram: TOKEN_PROGRAM_ID, + }, + options: { + commitment: 'single', + }, + //__private: { logAccounts: true }, + instructions: [ + createAssociatedTokenAccountInstruction( + buyerTokenAccount, + payer.publicKey, + puncher, + //@ts-ignore + fairLaunchObj.tokenMint, + ), + ], + }); + + return buyerTokenAccount; +} +program + .command('punch_ticket') + .option( + '-e, --env ', + 'Solana cluster env name', + 'devnet', //mainnet-beta, testnet, devnet + ) + .option( + '-k, --keypair ', + `Solana wallet location`, + '--keypair not provided', + ) + .option('-f, --fair-launch ', 'fair launch id') + .action(async (_, cmd) => { + const { env, keypair, fairLaunch } = cmd.opts(); + + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadFairLaunchProgram(walletKeyPair, env); + + const fairLaunchKey = new anchor.web3.PublicKey(fairLaunch); + const fairLaunchObj = await anchorProgram.account.fairLaunch.fetch( + fairLaunchKey, + ); + + const fairLaunchTicket = ( + await getFairLaunchTicket( + //@ts-ignore + fairLaunchObj.tokenMint, + walletKeyPair.publicKey, + ) + )[0]; + + const fairLaunchLotteryBitmap = ( //@ts-ignore + await getFairLaunchLotteryBitmap(fairLaunchObj.tokenMint) + )[0]; + + const ticket = await anchorProgram.account.fairLaunchTicket.fetch( + fairLaunchTicket, + ); + + const diff = + //@ts-ignore + ticket.amount.toNumber() - + //@ts-ignore + fairLaunchObj.currentMedian.toNumber(); + if (diff > 0) { + console.log('Refunding first', diff, 'to buyer before punching'); + await adjustTicket({ + //@ts-ignore + amountNumber: fairLaunchObj.currentMedian.toNumber(), + fairLaunchObj, + //@ts-ignore + adjuster: ticket.buyer, + fairLaunch, + fairLaunchTicket, + fairLaunchLotteryBitmap, + anchorProgram, + payer: walletKeyPair, + adjustMantissa: false, + }); + } + + let tries = 0; + let done = false; + //@ts-ignore + if (!ticket.gottenParticipation) { + while (tries < 3 && !done) { + try { + const nft = await getParticipationNft({ + buyer: walletKeyPair.publicKey, + payer: walletKeyPair, + anchorProgram, + fairLaunchTicket, + fairLaunch, + fairLaunchObj, + fairLaunchTicketObj: ticket, + }); + done = true; + + if (nft) { + console.log( + `Punched participation NFT and placed token in new account ${nft.toBase58()}.`, + ); + } + } catch (e) { + if (tries > 3) { + throw e; + } else { + tries++; + } + console.log('Ticket failed to punch, trying one more time'); + await sleep(1000); + } + } + } else { + console.log('Already got participation'); + } + + tries = 0; + done = false; + while (tries < 3 && !done) { + try { + const buyerTokenAccount = await punchTicket({ + puncher: walletKeyPair.publicKey, + payer: walletKeyPair, + anchorProgram, + fairLaunchTicket, + fairLaunch, + fairLaunchLotteryBitmap, + fairLaunchObj, + fairLaunchTicketObj: ticket, + }); + done = true; + console.log( + `Punched ticket and placed token in new account ${buyerTokenAccount.toBase58()}.`, + ); + } catch (e) { + if (tries > 3) { + throw e; + } else { + tries++; + } + console.log('Ticket failed to punch, trying one more time'); + await sleep(1000); + } + } + }); + +program + .command('burn_fair_launch_tokens_warning_irreversible') + .option( + '-e, --env ', + 'Solana cluster env name', + 'devnet', //mainnet-beta, testnet, devnet + ) + .option( + '-k, --keypair ', + `Solana wallet location`, + '--keypair not provided', + ) + .option('-f, --fair-launch ', 'fair launch id') + .option('-n, --number ', 'number to burn') + .action(async (_, cmd) => { + const { env, keypair, fairLaunch, number } = cmd.opts(); + + const actual = parseInt(number); + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadFairLaunchProgram(walletKeyPair, env); + + const fairLaunchKey = new anchor.web3.PublicKey(fairLaunch); + const fairLaunchObj = await anchorProgram.account.fairLaunch.fetch( + fairLaunchKey, + ); + + const myTokenAccount = ( + await getAtaForMint( + //@ts-ignore + fairLaunchObj.tokenMint, + walletKeyPair.publicKey, + ) + )[0]; + + const instructions = [ + Token.createBurnInstruction( + TOKEN_PROGRAM_ID, + //@ts-ignore + fairLaunchObj.tokenMint, + myTokenAccount, + walletKeyPair.publicKey, + [], + actual, + ), + ]; + + await sendTransactionWithRetryWithKeypair( + anchorProgram.provider.connection, + walletKeyPair, + instructions, + [], + 'single', + ); + + console.log( + `Burned ${actual} tokens in account ${myTokenAccount.toBase58()}.`, + ); + }); + +program + .command('start_phase_three') + .option( + '-e, --env ', + 'Solana cluster env name', + 'devnet', //mainnet-beta, testnet, devnet + ) + .option( + '-k, --keypair ', + `Solana wallet location`, + '--keypair not provided', + ) + .option('-f, --fair-launch ', 'fair launch id') + .action(async (_, cmd) => { + const { env, keypair, fairLaunch } = cmd.opts(); + + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadFairLaunchProgram(walletKeyPair, env); + + const fairLaunchKey = new anchor.web3.PublicKey(fairLaunch); + const fairLaunchObj = await anchorProgram.account.fairLaunch.fetch( + fairLaunchKey, + ); + const fairLaunchLotteryBitmap = ( //@ts-ignore + await getFairLaunchLotteryBitmap(fairLaunchObj.tokenMint) + )[0]; + + await anchorProgram.rpc.startPhaseThree({ + accounts: { + fairLaunch, + fairLaunchLotteryBitmap, + authority: walletKeyPair.publicKey, + //@ts-ignore + tokenMint: fairLaunchObj.tokenMint, + }, + }); + + console.log(`Dang son, phase three.`); + }); + +program + .command('mint_flp_tokens') + .option( + '-e, --env ', + 'Solana cluster env name', + 'devnet', //mainnet-beta, testnet, devnet + ) + .option( + '-k, --keypair ', + `Solana wallet location`, + '--keypair not provided', + ) + .option('-f, --fair-launch ', 'fair launch id') + .option('-a, --amount ', 'amount') + .action(async (_, cmd) => { + const { env, keypair, fairLaunch, amount } = cmd.opts(); + + const walletKeyPair = loadWalletKey(keypair); + const amountNumber = parseInt(amount); + const anchorProgram = await loadFairLaunchProgram(walletKeyPair, env); + + const fairLaunchKey = new anchor.web3.PublicKey(fairLaunch); + const fairLaunchObj = await anchorProgram.account.fairLaunch.fetch( + fairLaunchKey, + ); + const tokenAccount = ( //@ts-ignore + await getAtaForMint(fairLaunchObj.tokenMint, walletKeyPair.publicKey) + )[0]; + + const exists = await anchorProgram.provider.connection.getAccountInfo( + tokenAccount, + ); + + const instructions = []; + if (!exists) { + instructions.push( + createAssociatedTokenAccountInstruction( + tokenAccount, + walletKeyPair.publicKey, + walletKeyPair.publicKey, + //@ts-ignore + fairLaunchObj.tokenMint, + ), + ); + } + + await anchorProgram.rpc.mintTokens(new anchor.BN(amountNumber), { + accounts: { + fairLaunch: fairLaunchKey, + authority: walletKeyPair.publicKey, + //@ts-ignore + tokenMint: fairLaunchObj.tokenMint, + tokenProgram: TOKEN_PROGRAM_ID, + tokenAccount, + }, + instructions: instructions.length ? instructions : undefined, + }); + + console.log(`Added ${amountNumber} tokens to ${tokenAccount.toBase58()}`); + }); + +program + .command('withdraw_funds') + .option( + '-e, --env ', + 'Solana cluster env name', + 'devnet', //mainnet-beta, testnet, devnet + ) + .option( + '-k, --keypair ', + `Solana wallet location`, + '--keypair not provided', + ) + .option('-f, --fair-launch ', 'fair launch id') + .action(async (_, cmd) => { + const { env, keypair, fairLaunch } = cmd.opts(); + + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadFairLaunchProgram(walletKeyPair, env); + + const fairLaunchKey = new anchor.web3.PublicKey(fairLaunch); + const fairLaunchObj = await anchorProgram.account.fairLaunch.fetch( + fairLaunchKey, + ); + + const remainingAccounts = []; + + //@ts-ignore + if (fairLaunchObj.treasuryMint) { + remainingAccounts.push({ + //@ts-ignore + pubkey: fairLaunchObj.treasuryMint, + isWritable: true, + isSigner: false, + }); + remainingAccounts.push({ + pubkey: ( + await getAtaForMint( + //@ts-ignore + fairLaunchObj.treasuryMint, + walletKeyPair.publicKey, + ) + )[0], + isWritable: true, + isSigner: false, + }); + remainingAccounts.push({ + pubkey: TOKEN_PROGRAM_ID, + isWritable: false, + isSigner: false, + }); + } + + await anchorProgram.rpc.withdrawFunds({ + accounts: { + fairLaunch, + // @ts-ignore + treasury: fairLaunchObj.treasury, + authority: walletKeyPair.publicKey, + // @ts-ignore + tokenMint: fairLaunchObj.tokenMint, + systemProgram: anchor.web3.SystemProgram.programId, + }, + remainingAccounts, + }); + + console.log(`Now you rich, give me some.`); + }); + +program + .command('restart_phase_2') + .option( + '-e, --env ', + 'Solana cluster env name', + 'devnet', //mainnet-beta, testnet, devnet + ) + .option( + '-k, --keypair ', + `Solana wallet location`, + '--keypair not provided', + ) + .option('-f, --fair-launch ', 'fair launch id') + .action(async (_, cmd) => { + const { env, keypair, fairLaunch } = cmd.opts(); + + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadFairLaunchProgram(walletKeyPair, env); + + await anchorProgram.rpc.restartPhaseTwo({ + accounts: { + fairLaunch, + clock: anchor.web3.SYSVAR_CLOCK_PUBKEY, + }, + }); + + console.log(`Clock restart on phase 2`); + }); + +program + .command('receive_refund') + .option( + '-e, --env ', + 'Solana cluster env name', + 'devnet', //mainnet-beta, testnet, devnet + ) + .option( + '-k, --keypair ', + `Solana wallet location`, + '--keypair not provided', + ) + .option('-f, --fair-launch ', 'fair launch id') + .action(async (_, cmd) => { + const { env, keypair, fairLaunch } = cmd.opts(); + + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadFairLaunchProgram(walletKeyPair, env); + + const fairLaunchKey = new anchor.web3.PublicKey(fairLaunch); + const fairLaunchObj = await anchorProgram.account.fairLaunch.fetch( + fairLaunchKey, + ); + + const buyerTokenAccount = ( + await getAtaForMint( + //@ts-ignore + fairLaunchObj.tokenMint, + walletKeyPair.publicKey, + ) + )[0]; + + const transferAuthority = anchor.web3.Keypair.generate(); + + const signers = [transferAuthority]; + const instructions = [ + Token.createApproveInstruction( + TOKEN_PROGRAM_ID, + //@ts-ignore + buyerTokenAccount, + transferAuthority.publicKey, + walletKeyPair.publicKey, + [], + //@ts-ignore + 1, + ), + ]; + + const remainingAccounts = []; + + //@ts-ignore + if (fairLaunchObj.treasuryMint) { + remainingAccounts.push({ + //@ts-ignore + pubkey: fairLaunchObj.treasuryMint, + isWritable: true, + isSigner: false, + }); + remainingAccounts.push({ + pubkey: ( + await getAtaForMint( + //@ts-ignore + fairLaunchObj.treasuryMint, + walletKeyPair.publicKey, + ) + )[0], + isWritable: true, + isSigner: false, + }); + } + + const txid = await anchorProgram.rpc.receiveRefund({ + accounts: { + fairLaunch, + // @ts-ignore + treasury: fairLaunchObj.treasury, + buyer: walletKeyPair.publicKey, + buyerTokenAccount, + transferAuthority: transferAuthority.publicKey, + // @ts-ignore + tokenMint: fairLaunchObj.tokenMint, + tokenProgram: TOKEN_PROGRAM_ID, + systemProgram: anchor.web3.SystemProgram.programId, + clock: anchor.web3.SYSVAR_CLOCK_PUBKEY, + }, + remainingAccounts, + instructions, + signers, + }); + + console.log(`You received a refund, traitor. ${txid}`); + }); + +program + .command('create_fair_launch_lottery') + .option( + '-e, --env ', + 'Solana cluster env name', + 'devnet', //mainnet-beta, testnet, devnet + ) + .option( + '-k, --keypair ', + `Solana wallet location`, + '--keypair not provided', + ) + .option('-f, --fair-launch ', 'fair launch id') + .option( + '-r, --rpc-url ', + 'custom rpc url since this is a heavy command', + ) + .action(async (_, cmd) => { + const { env, keypair, fairLaunch, rpcUrl } = cmd.opts(); + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadFairLaunchProgram( + walletKeyPair, + env, + rpcUrl, + ); + + const fairLaunchKey = new anchor.web3.PublicKey(fairLaunch); + const fairLaunchObj = await anchorProgram.account.fairLaunch.fetch( + fairLaunchKey, + ); + + const [fairLaunchLotteryBitmap, bump] = await getFairLaunchLotteryBitmap( + //@ts-ignore + fairLaunchObj.tokenMint, + ); + + const exists = await anchorProgram.provider.connection.getAccountInfo( + fairLaunchLotteryBitmap, + ); + + if (!exists) { + await anchorProgram.rpc.createFairLaunchLotteryBitmap(bump, { + accounts: { + fairLaunch, + fairLaunchLotteryBitmap, + authority: walletKeyPair.publicKey, + payer: walletKeyPair.publicKey, + systemProgram: anchor.web3.SystemProgram.programId, + rent: anchor.web3.SYSVAR_RENT_PUBKEY, + clock: anchor.web3.SYSVAR_CLOCK_PUBKEY, + }, + }); + + console.log( + `created fair launch lottery bitmap Done: ${fairLaunchLotteryBitmap.toBase58()}.`, + ); + } else { + console.log( + `checked fair launch lottery bitmap, exists: ${fairLaunchLotteryBitmap.toBase58()}.`, + ); + } + + const seqKeys = []; + //@ts-ignore + for (let i = 0; i < fairLaunchObj.numberTicketsSold; i++) { + seqKeys.push( + ( + await getFairLaunchTicketSeqLookup( + //@ts-ignore + fairLaunchObj.tokenMint, + new anchor.BN(i), + ) + )[0], + ); + } + + const ticketKeys: anchor.web3.PublicKey[][] = await Promise.all( + chunks(Array.from(Array(seqKeys.length).keys()), 1000).map( + async allIndexesInSlice => { + let ticketKeys = []; + for (let i = 0; i < allIndexesInSlice.length; i += 100) { + console.log( + 'Pulling ticket seqs for slice', + allIndexesInSlice[i], + allIndexesInSlice[i + 100], + ); + const slice = allIndexesInSlice + .slice(i, i + 100) + .map(index => seqKeys[index]); + const result = await getMultipleAccounts( + anchorProgram.provider.connection, + slice.map(s => s.toBase58()), + 'recent', + ); + ticketKeys = ticketKeys.concat( + result.array.map( + a => + new anchor.web3.PublicKey( + new Uint8Array(a.data.slice(8, 8 + 32)), + ), + ), + ); + } + + return ticketKeys; + }, + ), + ); + + const ticketsFlattened = ticketKeys.flat(); + + const states: { seq: number; number: anchor.BN; eligible: boolean }[][] = + await Promise.all( + chunks(Array.from(Array(ticketsFlattened.length).keys()), 1000).map( + async allIndexesInSlice => { + let states = []; + for (let i = 0; i < allIndexesInSlice.length; i += 100) { + console.log( + 'Pulling states for slice', + allIndexesInSlice[i], + allIndexesInSlice[i + 100], + ); + const slice = allIndexesInSlice + .slice(i, i + 100) + .map(index => ticketsFlattened[index]); + const result = await getMultipleAccounts( + anchorProgram.provider.connection, + slice.map(s => s.toBase58()), + 'recent', + ); + states = states.concat( + result.array.map(a => { + const el = anchorProgram.coder.accounts.decode( + 'FairLaunchTicket', + a.data, + ); + return { + seq: el.seq.toNumber(), + number: el.amount.toNumber(), + eligible: !!( + el.state.unpunched && + el.amount.toNumber() >= + //@ts-ignore + fairLaunchObj.currentMedian.toNumber() + ), + }; + }), + ); + } + + return states; + }, + ), + ); + + const statesFlat = states.flat(); + const token = new Token( + anchorProgram.provider.connection, + //@ts-ignore + new anchor.web3.PublicKey(fairLaunchObj.tokenMint), + TOKEN_PROGRAM_ID, + walletKeyPair, + ); + + const mintInfo = await token.getMintInfo(); + + let numWinnersRemaining = Math.min( + //@ts-ignore; + fairLaunchObj.data.numberOfTokens.sub(mintInfo.supply), + //@ts-ignore; + statesFlat.filter(s => s.eligible).length, + ); + + let chosen: { seq: number; eligible: boolean; chosen: boolean }[]; + if (numWinnersRemaining >= statesFlat.length) { + console.log('More or equal nfts than winners, everybody wins.'); + chosen = statesFlat.map(s => ({ ...s, chosen: true })); + } else { + chosen = statesFlat.map(s => ({ ...s, chosen: false })); + + console.log('Doing lottery for', numWinnersRemaining); + while (numWinnersRemaining > 0) { + const rand = Math.floor(Math.random() * chosen.length); + if (chosen[rand].chosen != true && chosen[rand].eligible) { + chosen[rand].chosen = true; + numWinnersRemaining--; + } + } + } + const sorted = chosen.sort((a, b) => a.seq - b.seq); + console.log('Lottery results', sorted); + + await Promise.all( + // each 8 entries is 1 byte, we want to send up 1000 bytes at a time. + // be specific here. + chunks(Array.from(Array(sorted.length).keys()), 8 * 1000).map( + async allIndexesInSlice => { + const bytes = []; + const correspondingArrayOfBits = []; + const startingOffset = Math.floor(allIndexesInSlice[0] / 8); + let positionFromRight = 7; + let currByte = 0; + let currByteAsBits = []; + for (let i = 0; i < allIndexesInSlice.length; i++) { + if (chosen[allIndexesInSlice[i]].chosen) { + const mask = Math.pow(2, positionFromRight); + currByte = currByte | mask; + currByteAsBits.push(1); + } else { + currByteAsBits.push(0); + } + positionFromRight--; + if (positionFromRight < 0) { + bytes.push(currByte); + correspondingArrayOfBits.push(currByteAsBits); + currByte = 0; + currByteAsBits = []; + positionFromRight = 7; + } + } + + if (positionFromRight != 7) { + // grab the last one if the loop hasnt JUST ended exactly right before on an additional add. + bytes.push(currByte); + correspondingArrayOfBits.push(currByteAsBits); + } + + console.log( + 'Setting bytes array for', + startingOffset, + 'to', + allIndexesInSlice[allIndexesInSlice.length - 1], + 'as (with split out by bits for ease of reading)', + bytes.map((e, i) => [e, correspondingArrayOfBits[i]]), + ); + + await anchorProgram.rpc.updateFairLaunchLotteryBitmap( + startingOffset, + Buffer.from(bytes), + { + accounts: { + fairLaunch, + fairLaunchLotteryBitmap, + authority: walletKeyPair.publicKey, + clock: anchor.web3.SYSVAR_CLOCK_PUBKEY, + }, + }, + ); + }, + ), + ); + + console.log('All done'); + }); + +program + .command('create_missing_sequences') + .option( + '-e, --env ', + 'Solana cluster env name', + 'devnet', //mainnet-beta, testnet, devnet + ) + .option( + '-k, --keypair ', + `Solana wallet location`, + '--keypair not provided', + ) + .option('-f, --fair-launch ', 'fair launch id') + .option( + '-r, --rpc-url ', + 'custom rpc url since this is a heavy command', + ) + .action(async (_, cmd) => { + const { env, keypair, fairLaunch, rpcUrl } = cmd.opts(); + const fairLaunchTicketSeqStart = 8 + 32 + 32 + 8 + 1 + 1; + const fairLaunchTicketState = 8 + 32 + 32 + 8; + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadFairLaunchProgram( + walletKeyPair, + env, + rpcUrl, + ); + const fairLaunchObj = await anchorProgram.account.fairLaunch.fetch( + fairLaunch, + ); + const tickets = await anchorProgram.provider.connection.getProgramAccounts( + FAIR_LAUNCH_PROGRAM_ID, + { + filters: [ + { + memcmp: { + offset: 8, + bytes: fairLaunch, + }, + }, + ], + }, + ); + + await Promise.all( + chunks(Array.from(Array(tickets.length).keys()), 500).map( + async allIndexesInSlice => { + for (let i = 0; i < allIndexesInSlice.length; i++) { + const accountAndPubkey = tickets[allIndexesInSlice[i]]; + const { account, pubkey } = accountAndPubkey; + const state = account.data[fairLaunchTicketState]; + if (state == 0) { + console.log('Missing sequence for ticket', pubkey.toBase58()); + const [fairLaunchTicketSeqLookup, seqBump] = + await getFairLaunchTicketSeqLookup( + //@ts-ignore + fairLaunchObj.tokenMint, + new anchor.BN( + account.data.slice( + fairLaunchTicketSeqStart, + fairLaunchTicketSeqStart + 8, + ), + undefined, + 'le', + ), + ); + + await anchorProgram.rpc.createTicketSeq(seqBump, { + accounts: { + fairLaunchTicketSeqLookup, + fairLaunch, + fairLaunchTicket: pubkey, + payer: walletKeyPair.publicKey, + systemProgram: anchor.web3.SystemProgram.programId, + rent: anchor.web3.SYSVAR_RENT_PUBKEY, + }, + options: { + commitment: 'single', + }, + signers: [], + }); + console.log('Created...'); + } + } + }, + ), + ); + }); + +program + .command('show') + .option( + '-e, --env ', + 'Solana cluster env name', + 'devnet', //mainnet-beta, testnet, devnet + ) + .option( + '-k, --keypair ', + `Solana wallet location`, + '--keypair not provided', + ) + .option('-f, --fair-launch ', 'fair launch id') + + .option( + '-r, --rpc-url ', + 'custom rpc url since this is a heavy command', + ) + .action(async (options, cmd) => { + const { env, fairLaunch, keypair, rpcUrl } = cmd.opts(); + + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadFairLaunchProgram( + walletKeyPair, + env, + rpcUrl, + ); + + const fairLaunchObj = await anchorProgram.account.fairLaunch.fetch( + fairLaunch, + ); + + let treasuryAmount = 0; + // @ts-ignore + if (fairLaunchObj.treasuryMint) { + const token = + await anchorProgram.provider.connection.getTokenAccountBalance( + // @ts-ignore + fairLaunchObj.treasury, + ); + treasuryAmount = token.value.uiAmount; + } else { + treasuryAmount = await anchorProgram.provider.connection.getBalance( + // @ts-ignore + fairLaunchObj.treasury, + ); + } + + //@ts-ignore + console.log('Token Mint', fairLaunchObj.tokenMint.toBase58()); + //@ts-ignore + console.log('Treasury', fairLaunchObj.treasury.toBase58()); + //@ts-ignore + console.log('Treasury Mint', fairLaunchObj.treasuryMint?.toBase58()); + //@ts-ignore + console.log( + 'Participation Mint', + //@ts-ignore + fairLaunchObj.participationMint?.toBase58(), + ); + //@ts-ignore + console.log('Authority', fairLaunchObj.authority.toBase58()); + //@ts-ignore + console.log('Bump', fairLaunchObj.bump); + //@ts-ignore + console.log('Treasury Bump', fairLaunchObj.treasuryBump); + //@ts-ignore + console.log('Token Mint Bump', fairLaunchObj.tokenMintBump); + //@ts-ignore + console.log('Participation Modulo', fairLaunchObj.participationModulo); + //@ts-ignore + if (fairLaunchObj.data.antiRugSetting) { + console.log('Anti-Rug Settings:'); + //@ts-ignore + console.log('Reserve bps', fairLaunchObj.data.antiRugSetting.reserveBp); + //@ts-ignore + console.log( + 'Number of tokens remaining in circulation below which you are allowed to retrieve treasury in full:', + //@ts-ignore + fairLaunchObj.data.antiRugSetting.tokenRequirement.toNumber(), + ); + console.log( + 'Self destruct date - Date at which refunds are allowed (but not required):', + //@ts-ignore + new Date(fairLaunchObj.data.antiRugSetting.selfDestructDate * 1000), + ); + } else { + console.log('Anti-Rug Settings: None'); + } + console.log( + 'Price Range Start ', + //@ts-ignore + fairLaunchObj.data.priceRangeStart.toNumber(), + ); + console.log( + 'Price Range End ', + //@ts-ignore + fairLaunchObj.data.priceRangeEnd.toNumber(), + ); + + console.log( + 'Tick Size ', + //@ts-ignore + fairLaunchObj.data.tickSize.toNumber(), + ); + + console.log( + 'Fees ', + //@ts-ignore + fairLaunchObj.data.fee.toNumber(), + ); + + console.log('Current Treasury Holdings', treasuryAmount); + + console.log( + 'Treasury Snapshot At Peak', + //@ts-ignore + fairLaunchObj.treasurySnapshot?.toNumber(), + ); + + console.log( + 'Phase One Start ', + //@ts-ignore + new Date(fairLaunchObj.data.phaseOneStart.toNumber() * 1000), + ); + console.log( + 'Phase One End ', + //@ts-ignore + new Date(fairLaunchObj.data.phaseOneEnd.toNumber() * 1000), + ); + console.log( + 'Phase Two End ', + //@ts-ignore + new Date(fairLaunchObj.data.phaseTwoEnd.toNumber() * 1000), + ); + + console.log( + 'Lottery Period End', + //@ts-ignore + new Date( + //@ts-ignore + (fairLaunchObj.data.phaseTwoEnd.toNumber() + + //@ts-ignore + fairLaunchObj.data.lotteryDuration.toNumber()) * + 1000, + ), + ); + + console.log( + 'Number of Tokens', + //@ts-ignore + fairLaunchObj.data.numberOfTokens.toNumber(), + ); + + console.log( + 'Number of Tickets Un-Sequenced ', + //@ts-ignore + fairLaunchObj.numberTicketsUnSeqed.toNumber(), + ); + + console.log( + 'Number of Tickets Sold ', + //@ts-ignore + fairLaunchObj.numberTicketsSold.toNumber(), + ); + + console.log( + 'Number of Tickets Dropped ', + //@ts-ignore + fairLaunchObj.numberTicketsDropped.toNumber(), + ); + + console.log( + 'Number of Tickets Punched ', + //@ts-ignore + fairLaunchObj.numberTicketsPunched.toNumber(), + ); + + console.log( + 'Number of Tickets Dropped + Punched', + //@ts-ignore + fairLaunchObj.numberTicketsDropped.toNumber() + + //@ts-ignore + fairLaunchObj.numberTicketsPunched.toNumber(), + ); + + console.log( + 'Number of Tokens Refunded ', + //@ts-ignore + fairLaunchObj.numberTokensBurnedForRefunds.toNumber(), + ); + + console.log( + 'Number of Tokens Preminted ', + //@ts-ignore + fairLaunchObj.numberTokensPreminted.toNumber(), + ); + + console.log( + 'Phase Three Started', + //@ts-ignore + fairLaunchObj.phaseThreeStarted, + ); + + console.log( + 'Current Eligible Holders', + //@ts-ignore + fairLaunchObj.currentEligibleHolders.toNumber(), + ); + + console.log( + 'Current Median', + //@ts-ignore + fairLaunchObj.currentMedian.toNumber(), + ); + + console.log('Counts at Each Tick'); + //@ts-ignore + fairLaunchObj.countsAtEachTick.forEach((c, i) => + console.log( + //@ts-ignore + fairLaunchObj.data.priceRangeStart.toNumber() + + //@ts-ignore + i * fairLaunchObj.data.tickSize.toNumber(), + ':', + c.toNumber(), + ), + ); + }); + +program + .command('show_ticket') + .option( + '-e, --env ', + 'Solana cluster env name', + 'devnet', //mainnet-beta, testnet, devnet + ) + .option( + '-k, --keypair ', + `Solana wallet location`, + '--keypair not provided', + ) + .option('-f, --fair-launch ', 'fair launch id') + .option('-b, --fair-launch-ticket-buyer ', 'fair launch ticket buyer') + .action(async (options, cmd) => { + const { env, fairLaunch, keypair, fairLaunchTicketBuyer } = cmd.opts(); + + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadFairLaunchProgram(walletKeyPair, env); + + const fairLaunchObj = await anchorProgram.account.fairLaunch.fetch( + fairLaunch, + ); + + const fairLaunchTicket = ( + await getFairLaunchTicket( + //@ts-ignore + fairLaunchObj.tokenMint, + fairLaunchTicketBuyer + ? new anchor.web3.PublicKey(fairLaunchTicketBuyer) + : walletKeyPair.publicKey, + ) + )[0]; + + const fairLaunchTicketObj = + await anchorProgram.account.fairLaunchTicket.fetch(fairLaunchTicket); + + //@ts-ignore + console.log('Buyer', fairLaunchTicketObj.buyer.toBase58()); + //@ts-ignore + console.log('Fair Launch', fairLaunchTicketObj.fairLaunch.toBase58()); + //@ts-ignore + console.log('Current Amount', fairLaunchTicketObj.amount.toNumber()); + //@ts-ignore + console.log('State', fairLaunchTicketObj.state); + //@ts-ignore + console.log('Bump', fairLaunchTicketObj.bump); + //@ts-ignore + console.log('Sequence', fairLaunchTicketObj.seq.toNumber()); + }); + +program + .command('show_lottery') + .option( + '-e, --env ', + 'Solana cluster env name', + 'devnet', //mainnet-beta, testnet, devnet + ) + .option( + '-k, --keypair ', + `Solana wallet location`, + '--keypair not provided', + ) + .option('-f, --fair-launch ', 'fair launch id') + .option( + '-r, --rpc-url ', + 'custom rpc url since this is a heavy command', + ) + .action(async (options, cmd) => { + const { env, fairLaunch, keypair, rpcUrl } = cmd.opts(); + + const walletKeyPair = loadWalletKey(keypair); + const anchorProgram = await loadFairLaunchProgram( + walletKeyPair, + env, + rpcUrl, + ); + + const fairLaunchObj = await anchorProgram.account.fairLaunch.fetch( + fairLaunch, + ); + + const fairLaunchLottery = ( + await getFairLaunchLotteryBitmap( + //@ts-ignore + fairLaunchObj.tokenMint, + ) + )[0]; + + const fairLaunchLotteryBitmapObj = + await anchorProgram.provider.connection.getAccountInfo(fairLaunchLottery); + + const fairLaunchLotteryBitmapAnchorObj = + await anchorProgram.account.fairLaunchLotteryBitmap.fetch( + fairLaunchLottery, + ); + const seqKeys = []; + //@ts-ignore + for (let i = 0; i < fairLaunchObj.numberTicketsSold; i++) { + seqKeys.push( + ( + await getFairLaunchTicketSeqLookup( + //@ts-ignore + fairLaunchObj.tokenMint, + new anchor.BN(i), + ) + )[0], + ); + } + const buyers: { seq: anchor.BN; buyer: anchor.web3.PublicKey }[][] = + await Promise.all( + chunks(Array.from(Array(seqKeys.length).keys()), 1000).map( + async allIndexesInSlice => { + let ticketKeys = []; + for (let i = 0; i < allIndexesInSlice.length; i += 100) { + console.log( + 'Pulling ticket seqs for slice', + allIndexesInSlice[i], + allIndexesInSlice[i + 100], + ); + const slice = allIndexesInSlice + .slice(i, i + 100) + .map(index => seqKeys[index]); + const result = await getMultipleAccounts( + anchorProgram.provider.connection, + slice.map(s => s.toBase58()), + 'recent', + ); + ticketKeys = ticketKeys.concat( + result.array.map(a => ({ + buyer: new anchor.web3.PublicKey( + new Uint8Array(a.data.slice(8 + 32, 8 + 32 + 32)), + ), + seq: new anchor.BN( + a.data.slice(8 + 32 + 32, 8 + 32 + 32 + 8), + undefined, + 'le', + ), + })), + ); + + return ticketKeys; + } + }, + ), + ); + + const buyersFlattened = buyers + .flat() + .sort((a, b) => a.seq.toNumber() - b.seq.toNumber()); + + for (let i = 0; i < buyersFlattened.length; i++) { + const buyer = buyersFlattened[i]; + + const myByte = + fairLaunchLotteryBitmapObj.data[ + FAIR_LAUNCH_LOTTERY_SIZE + Math.floor(buyer.seq.toNumber() / 8) + ]; + + const positionFromRight = 7 - (buyer.seq.toNumber() % 8); + const mask = Math.pow(2, positionFromRight); + const isWinner = myByte & mask; + console.log( + 'Ticket', + buyer.seq, + buyer.buyer.toBase58(), + isWinner > 0 ? 'won' : 'lost', + ); + } + + console.log( + 'Bit Map ones', + //@ts-ignore + fairLaunchLotteryBitmapAnchorObj.bitmapOnes.toNumber(), + ); + }); +program.parse(process.argv); diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/helpers/accounts.ts b/CandyMachine-Storefront/store/js/packages/cli/src/helpers/accounts.ts new file mode 100644 index 0000000..ced74ce --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/helpers/accounts.ts @@ -0,0 +1,302 @@ +import { Keypair, PublicKey, SystemProgram } from '@solana/web3.js'; +import { + CANDY_MACHINE, + CANDY_MACHINE_PROGRAM_ID, + SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID, + TOKEN_METADATA_PROGRAM_ID, + TOKEN_PROGRAM_ID, + FAIR_LAUNCH_PROGRAM_ID, +} from './constants'; +import * as anchor from '@project-serum/anchor'; +import fs from 'fs'; +import BN from 'bn.js'; +import { createConfigAccount } from './instructions'; +import { web3 } from '@project-serum/anchor'; +import log from 'loglevel'; + +export const createConfig = async function ( + anchorProgram: anchor.Program, + payerWallet: Keypair, + configData: { + maxNumberOfLines: BN; + symbol: string; + sellerFeeBasisPoints: number; + isMutable: boolean; + maxSupply: BN; + retainAuthority: boolean; + creators: { + address: PublicKey; + verified: boolean; + share: number; + }[]; + }, +) { + const configAccount = Keypair.generate(); + const uuid = uuidFromConfigPubkey(configAccount.publicKey); + + return { + config: configAccount.publicKey, + uuid, + txId: await anchorProgram.rpc.initializeConfig( + { + uuid, + ...configData, + }, + { + accounts: { + config: configAccount.publicKey, + authority: payerWallet.publicKey, + payer: payerWallet.publicKey, + systemProgram: SystemProgram.programId, + rent: anchor.web3.SYSVAR_RENT_PUBKEY, + }, + signers: [payerWallet, configAccount], + instructions: [ + await createConfigAccount( + anchorProgram, + configData, + payerWallet.publicKey, + configAccount.publicKey, + ), + ], + }, + ), + }; +}; + +export function uuidFromConfigPubkey(configAccount: PublicKey) { + return configAccount.toBase58().slice(0, 6); +} + +export const getTokenWallet = async function ( + wallet: PublicKey, + mint: PublicKey, +) { + return ( + await PublicKey.findProgramAddress( + [wallet.toBuffer(), TOKEN_PROGRAM_ID.toBuffer(), mint.toBuffer()], + SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID, + ) + )[0]; +}; + +export const getCandyMachineAddress = async ( + config: anchor.web3.PublicKey, + uuid: string, +): Promise<[PublicKey, number]> => { + return await anchor.web3.PublicKey.findProgramAddress( + [Buffer.from(CANDY_MACHINE), config.toBuffer(), Buffer.from(uuid)], + CANDY_MACHINE_PROGRAM_ID, + ); +}; + +export const getConfig = async ( + authority: anchor.web3.PublicKey, + uuid: string, +): Promise<[PublicKey, number]> => { + return await anchor.web3.PublicKey.findProgramAddress( + [Buffer.from(CANDY_MACHINE), authority.toBuffer(), Buffer.from(uuid)], + CANDY_MACHINE_PROGRAM_ID, + ); +}; + +export const getTokenMint = async ( + authority: anchor.web3.PublicKey, + uuid: string, +): Promise<[anchor.web3.PublicKey, number]> => { + return await anchor.web3.PublicKey.findProgramAddress( + [ + Buffer.from('fair_launch'), + authority.toBuffer(), + Buffer.from('mint'), + Buffer.from(uuid), + ], + FAIR_LAUNCH_PROGRAM_ID, + ); +}; + +export const getFairLaunch = async ( + tokenMint: anchor.web3.PublicKey, +): Promise<[anchor.web3.PublicKey, number]> => { + return await anchor.web3.PublicKey.findProgramAddress( + [Buffer.from('fair_launch'), tokenMint.toBuffer()], + FAIR_LAUNCH_PROGRAM_ID, + ); +}; + +export const getFairLaunchTicket = async ( + tokenMint: anchor.web3.PublicKey, + buyer: anchor.web3.PublicKey, +): Promise<[anchor.web3.PublicKey, number]> => { + return await anchor.web3.PublicKey.findProgramAddress( + [Buffer.from('fair_launch'), tokenMint.toBuffer(), buyer.toBuffer()], + FAIR_LAUNCH_PROGRAM_ID, + ); +}; + +export const getFairLaunchLotteryBitmap = async ( + tokenMint: anchor.web3.PublicKey, +): Promise<[anchor.web3.PublicKey, number]> => { + return await anchor.web3.PublicKey.findProgramAddress( + [Buffer.from('fair_launch'), tokenMint.toBuffer(), Buffer.from('lottery')], + FAIR_LAUNCH_PROGRAM_ID, + ); +}; + +export const getFairLaunchTicketSeqLookup = async ( + tokenMint: anchor.web3.PublicKey, + seq: anchor.BN, +): Promise<[anchor.web3.PublicKey, number]> => { + return await anchor.web3.PublicKey.findProgramAddress( + [Buffer.from('fair_launch'), tokenMint.toBuffer(), seq.toBuffer('le', 8)], + FAIR_LAUNCH_PROGRAM_ID, + ); +}; + +export const getAtaForMint = async ( + mint: anchor.web3.PublicKey, + buyer: anchor.web3.PublicKey, +): Promise<[anchor.web3.PublicKey, number]> => { + return await anchor.web3.PublicKey.findProgramAddress( + [buyer.toBuffer(), TOKEN_PROGRAM_ID.toBuffer(), mint.toBuffer()], + SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID, + ); +}; + +export const getParticipationMint = async ( + authority: anchor.web3.PublicKey, + uuid: string, +): Promise<[anchor.web3.PublicKey, number]> => { + return await anchor.web3.PublicKey.findProgramAddress( + [ + Buffer.from('fair_launch'), + authority.toBuffer(), + Buffer.from('mint'), + Buffer.from(uuid), + Buffer.from('participation'), + ], + FAIR_LAUNCH_PROGRAM_ID, + ); +}; + +export const getParticipationToken = async ( + authority: anchor.web3.PublicKey, + uuid: string, +): Promise<[anchor.web3.PublicKey, number]> => { + return await anchor.web3.PublicKey.findProgramAddress( + [ + Buffer.from('fair_launch'), + authority.toBuffer(), + Buffer.from('mint'), + Buffer.from(uuid), + Buffer.from('participation'), + Buffer.from('account'), + ], + FAIR_LAUNCH_PROGRAM_ID, + ); +}; + +export const getTreasury = async ( + tokenMint: anchor.web3.PublicKey, +): Promise<[anchor.web3.PublicKey, number]> => { + return await anchor.web3.PublicKey.findProgramAddress( + [Buffer.from('fair_launch'), tokenMint.toBuffer(), Buffer.from('treasury')], + FAIR_LAUNCH_PROGRAM_ID, + ); +}; + +export const getMetadata = async ( + mint: anchor.web3.PublicKey, +): Promise => { + return ( + await anchor.web3.PublicKey.findProgramAddress( + [ + Buffer.from('metadata'), + TOKEN_METADATA_PROGRAM_ID.toBuffer(), + mint.toBuffer(), + ], + TOKEN_METADATA_PROGRAM_ID, + ) + )[0]; +}; + +export const getMasterEdition = async ( + mint: anchor.web3.PublicKey, +): Promise => { + return ( + await anchor.web3.PublicKey.findProgramAddress( + [ + Buffer.from('metadata'), + TOKEN_METADATA_PROGRAM_ID.toBuffer(), + mint.toBuffer(), + Buffer.from('edition'), + ], + TOKEN_METADATA_PROGRAM_ID, + ) + )[0]; +}; + +export const getEditionMarkPda = async ( + mint: anchor.web3.PublicKey, + edition: number, +): Promise => { + const editionNumber = Math.floor(edition / 248); + return ( + await anchor.web3.PublicKey.findProgramAddress( + [ + Buffer.from('metadata'), + TOKEN_METADATA_PROGRAM_ID.toBuffer(), + mint.toBuffer(), + Buffer.from('edition'), + Buffer.from(editionNumber.toString()), + ], + TOKEN_METADATA_PROGRAM_ID, + ) + )[0]; +}; + +export function loadWalletKey(keypair): Keypair { + if (!keypair || keypair == '') { + throw new Error('Keypair is required!'); + } + const loaded = Keypair.fromSecretKey( + new Uint8Array(JSON.parse(fs.readFileSync(keypair).toString())), + ); + log.info(`wallet public key: ${loaded.publicKey}`); + return loaded; +} + +export async function loadCandyProgram(walletKeyPair: Keypair, env: string) { + // @ts-ignore + const solConnection = new web3.Connection(web3.clusterApiUrl(env)); + const walletWrapper = new anchor.Wallet(walletKeyPair); + const provider = new anchor.Provider(solConnection, walletWrapper, { + preflightCommitment: 'recent', + }); + const idl = await anchor.Program.fetchIdl(CANDY_MACHINE_PROGRAM_ID, provider); + + const program = new anchor.Program(idl, CANDY_MACHINE_PROGRAM_ID, provider); + log.debug('program id from anchor', program.programId.toBase58()); + return program; +} + +export async function loadFairLaunchProgram( + walletKeyPair: Keypair, + env: string, + customRpcUrl?: string, +) { + if (customRpcUrl) console.log('USING CUSTOM URL', customRpcUrl); + + // @ts-ignore + const solConnection = new anchor.web3.Connection( + //@ts-ignore + customRpcUrl || web3.clusterApiUrl(env), + ); + const walletWrapper = new anchor.Wallet(walletKeyPair); + const provider = new anchor.Provider(solConnection, walletWrapper, { + preflightCommitment: 'recent', + }); + const idl = await anchor.Program.fetchIdl(FAIR_LAUNCH_PROGRAM_ID, provider); + + return new anchor.Program(idl, FAIR_LAUNCH_PROGRAM_ID, provider); +} diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/helpers/cache.ts b/CandyMachine-Storefront/store/js/packages/cli/src/helpers/cache.ts new file mode 100644 index 0000000..1bc0509 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/helpers/cache.ts @@ -0,0 +1,36 @@ +import path from 'path'; +import { CACHE_PATH } from './constants'; +import fs from 'fs'; + +export function cachePath( + env: string, + cacheName: string, + cPath: string = CACHE_PATH, +) { + return path.join(cPath, `${env}-${cacheName}`); +} + +export function loadCache( + cacheName: string, + env: string, + cPath: string = CACHE_PATH, +) { + const path = cachePath(env, cacheName, cPath); + return fs.existsSync(path) + ? JSON.parse(fs.readFileSync(path).toString()) + : undefined; +} + +export function saveCache( + cacheName: string, + env: string, + cacheContent, + cPath: string = CACHE_PATH, +) { + cacheContent.env = env; + cacheContent.cacheName = cacheName; + fs.writeFileSync( + cachePath(env, cacheName, cPath), + JSON.stringify(cacheContent), + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/helpers/constants.ts b/CandyMachine-Storefront/store/js/packages/cli/src/helpers/constants.ts new file mode 100644 index 0000000..7db77ac --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/helpers/constants.ts @@ -0,0 +1,46 @@ +import { PublicKey } from '@solana/web3.js'; +export const CANDY_MACHINE = 'candy_machine'; +export const MAX_NAME_LENGTH = 32; +export const MAX_URI_LENGTH = 200; +export const MAX_SYMBOL_LENGTH = 10; +export const MAX_CREATOR_LEN = 32 + 1 + 1; +export const ARWEAVE_PAYMENT_WALLET = new PublicKey( + 'HvwC9QSAzvGXhhVrgPmauVwFWcYZhne3hVot9EbHuFTm', +); +export const CANDY_MACHINE_PROGRAM_ID = new PublicKey( + 'cndyAnrLdpjq1Ssp1z8xxDsB8dxe7u4HL5Nxi2K5WXZ', +); +export const TOKEN_METADATA_PROGRAM_ID = new PublicKey( + 'metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s', +); +export const SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID = new PublicKey( + 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL', +); +export const TOKEN_PROGRAM_ID = new PublicKey( + 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA', +); +export const FAIR_LAUNCH_PROGRAM_ID = new PublicKey( + 'faircnAB9k59Y4TXmLabBULeuTLgV7TkGMGNkjnA15j', +); +export const CONFIG_ARRAY_START = + 32 + // authority + 4 + + 6 + // uuid + u32 len + 4 + + 10 + // u32 len + symbol + 2 + // seller fee basis points + 1 + + 4 + + 5 * 34 + // optional + u32 len + actual vec + 8 + //max supply + 1 + //is mutable + 1 + // retain authority + 4; // max number of lines; +export const CONFIG_LINE_SIZE = 4 + 32 + 4 + 200; + +export const CACHE_PATH = './.cache'; + +export const DEFAULT_TIMEOUT = 15000; + +export const EXTENSION_PNG = '.png'; +export const EXTENSION_JSON = '.json'; diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/helpers/instructions.ts b/CandyMachine-Storefront/store/js/packages/cli/src/helpers/instructions.ts new file mode 100644 index 0000000..3b4aac2 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/helpers/instructions.ts @@ -0,0 +1,207 @@ +import { + PublicKey, + SystemProgram, + SYSVAR_RENT_PUBKEY, + TransactionInstruction, +} from '@solana/web3.js'; +import { + CANDY_MACHINE_PROGRAM_ID, + CONFIG_ARRAY_START, + CONFIG_LINE_SIZE, + SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID, + TOKEN_PROGRAM_ID, + TOKEN_METADATA_PROGRAM_ID, +} from './constants'; +import * as anchor from '@project-serum/anchor'; + +export function createAssociatedTokenAccountInstruction( + associatedTokenAddress: PublicKey, + payer: PublicKey, + walletAddress: PublicKey, + splTokenMintAddress: PublicKey, +) { + const keys = [ + { + pubkey: payer, + isSigner: true, + isWritable: true, + }, + { + pubkey: associatedTokenAddress, + isSigner: false, + isWritable: true, + }, + { + pubkey: walletAddress, + isSigner: false, + isWritable: false, + }, + { + pubkey: splTokenMintAddress, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: TOKEN_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + return new TransactionInstruction({ + keys, + programId: SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID, + data: Buffer.from([]), + }); +} + + +export function createMetadataInstruction( + metadataAccount: PublicKey, + mint: PublicKey, + mintAuthority: PublicKey, + payer: PublicKey, + updateAuthority: PublicKey, + txnData: Buffer, +) { + const keys = [ + { + pubkey: metadataAccount, + isSigner: false, + isWritable: true, + }, + { + pubkey: mint, + isSigner: false, + isWritable: false, + }, + { + pubkey: mintAuthority, + isSigner: true, + isWritable: false, + }, + { + pubkey: payer, + isSigner: true, + isWritable: false, + }, + { + pubkey: updateAuthority, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + return new TransactionInstruction({ + keys, + programId: TOKEN_METADATA_PROGRAM_ID, + data: txnData, + }); +} + +export function createMasterEditionInstruction( + metadataAccount: PublicKey, + editionAccount: PublicKey, + mint: PublicKey, + mintAuthority: PublicKey, + payer: PublicKey, + updateAuthority: PublicKey, + txnData: Buffer, +) { + + const keys = [ + { + pubkey: editionAccount, + isSigner: false, + isWritable: true, + }, + { + pubkey: mint, + isSigner: false, + isWritable: true, + }, + { + pubkey: updateAuthority, + isSigner: true, + isWritable: false, + }, + { + pubkey: mintAuthority, + isSigner: true, + isWritable: false, + }, + { + pubkey: payer, + isSigner: true, + isWritable: false, + }, + { + pubkey: metadataAccount, + isSigner: false, + isWritable: false, + }, + { + pubkey: TOKEN_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + return new TransactionInstruction({ + keys, + programId: TOKEN_METADATA_PROGRAM_ID, + data: txnData, + }); +} + +export async function createConfigAccount( + anchorProgram, + configData, + payerWallet, + configAccount, +) { + const size = + CONFIG_ARRAY_START + + 4 + + configData.maxNumberOfLines.toNumber() * CONFIG_LINE_SIZE + + 4 + + Math.ceil(configData.maxNumberOfLines.toNumber() / 8); + + return anchor.web3.SystemProgram.createAccount({ + fromPubkey: payerWallet, + newAccountPubkey: configAccount, + space: size, + lamports: + await anchorProgram.provider.connection.getMinimumBalanceForRentExemption( + size, + ), + programId: CANDY_MACHINE_PROGRAM_ID, + }); +} diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/helpers/metadata.ts b/CandyMachine-Storefront/store/js/packages/cli/src/helpers/metadata.ts new file mode 100644 index 0000000..be5fac9 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/helpers/metadata.ts @@ -0,0 +1,73 @@ +import fs from 'fs'; +import log from 'loglevel'; +import _ from 'lodash'; +import { generateRandomSet, getMetadata, readJsonFile } from './various'; + +const { writeFile, mkdir } = fs.promises; + +export const ASSETS_DIRECTORY = './assets'; +export const TRAITS_DIRECTORY = './traits'; + +export async function createMetadataFiles( + numberOfImages: string, + configLocation: string, +): Promise { + let numberOfFilesCreated: number = 0; + const randomizedSets = []; + + if (!fs.existsSync(ASSETS_DIRECTORY)) { + try { + await mkdir(ASSETS_DIRECTORY); + } catch (err) { + log.error('unable to create assets directory', err); + } + } + + const { + breakdown, + name, + symbol, + creators, + description, + seller_fee_basis_points, + collection, + } = await readJsonFile(configLocation); + + while (numberOfFilesCreated < parseInt(numberOfImages, 10)) { + const randomizedSet = generateRandomSet(breakdown); + + if (!_.some(randomizedSets, randomizedSet)) { + randomizedSets.push(randomizedSet); + + const metadata = getMetadata( + name, + symbol, + numberOfFilesCreated, + creators, + description, + seller_fee_basis_points, + randomizedSet, + collection, + ); + + try { + await writeFile( + `${ASSETS_DIRECTORY}/${numberOfFilesCreated}.json`, + JSON.stringify(metadata), + ); + } catch (err) { + log.error(`${numberOfFilesCreated} failed to get created`, err); + } + + numberOfFilesCreated += 1; + } + } + + // map through after because IDs would make sets unique + const randomSetWithIds = randomizedSets.map((item, index) => ({ + id: index + 1, + ...item, + })); + + return randomSetWithIds; +} diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/helpers/schema.ts b/CandyMachine-Storefront/store/js/packages/cli/src/helpers/schema.ts new file mode 100644 index 0000000..83c7360 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/helpers/schema.ts @@ -0,0 +1,138 @@ +import { BinaryReader, BinaryWriter } from 'borsh'; +import base58 from 'bs58'; +import { PublicKey } from '@solana/web3.js'; +type StringPublicKey = string; + +import BN from 'bn.js'; + +export class Creator { + address: StringPublicKey; + verified: number; + share: number; + + constructor(args: { + address: StringPublicKey; + verified: number; + share: number; + }) { + this.address = args.address; + this.verified = args.verified; + this.share = args.share; + } +} + +export class Data { + name: string; + symbol: string; + uri: string; + sellerFeeBasisPoints: number; + creators: Creator[] | null; + constructor(args: { + name: string; + symbol: string; + uri: string; + sellerFeeBasisPoints: number; + creators: Creator[] | null; + }) { + this.name = args.name; + this.symbol = args.symbol; + this.uri = args.uri; + this.sellerFeeBasisPoints = args.sellerFeeBasisPoints; + this.creators = args.creators; + } +} + +export class CreateMetadataArgs { + instruction: number = 0; + data: Data; + isMutable: boolean; + + constructor(args: { data: Data; isMutable: boolean }) { + this.data = args.data; + this.isMutable = args.isMutable; + } +} + +export class CreateMasterEditionArgs { + instruction: number = 10; + maxSupply: BN | null; + constructor(args: { maxSupply: BN | null }) { + this.maxSupply = args.maxSupply; + } +} + +export const METADATA_SCHEMA = new Map([ + [ + CreateMetadataArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['data', Data], + ['isMutable', 'u8'], // bool + ], + }, + ], + [ + CreateMasterEditionArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['maxSupply', { kind: 'option', type: 'u64' }], + ], + }, + ], + [ + Data, + { + kind: 'struct', + fields: [ + ['name', 'string'], + ['symbol', 'string'], + ['uri', 'string'], + ['sellerFeeBasisPoints', 'u16'], + ['creators', { kind: 'option', type: [Creator] }], + ], + }, + ], + [ + Creator, + { + kind: 'struct', + fields: [ + ['address', 'pubkeyAsString'], + ['verified', 'u8'], + ['share', 'u8'], + ], + }, + ], +]); + +export const extendBorsh = () => { + (BinaryReader.prototype as any).readPubkey = function () { + const reader = this as unknown as BinaryReader; + const array = reader.readFixedArray(32); + return new PublicKey(array); + }; + + (BinaryWriter.prototype as any).writePubkey = function (value: PublicKey) { + const writer = this as unknown as BinaryWriter; + writer.writeFixedArray(value.toBuffer()); + }; + + (BinaryReader.prototype as any).readPubkeyAsString = function () { + const reader = this as unknown as BinaryReader; + const array = reader.readFixedArray(32); + return base58.encode(array) as StringPublicKey; + }; + + (BinaryWriter.prototype as any).writePubkeyAsString = function ( + value: StringPublicKey, + ) { + const writer = this as unknown as BinaryWriter; + writer.writeFixedArray(base58.decode(value)); + }; +}; + +extendBorsh(); diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/helpers/transactions.ts b/CandyMachine-Storefront/store/js/packages/cli/src/helpers/transactions.ts new file mode 100644 index 0000000..9b61405 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/helpers/transactions.ts @@ -0,0 +1,266 @@ +import { + Blockhash, + Commitment, + Connection, + FeeCalculator, + Keypair, + RpcResponseAndContext, + SignatureStatus, + SimulatedTransactionResponse, + Transaction, + TransactionInstruction, + TransactionSignature, +} from '@solana/web3.js'; +import { getUnixTs, sleep } from './various'; +import { DEFAULT_TIMEOUT } from './constants'; +import log from 'loglevel'; + +interface BlockhashAndFeeCalculator { + blockhash: Blockhash; + feeCalculator: FeeCalculator; +} + +export const sendTransactionWithRetryWithKeypair = async ( + connection: Connection, + wallet: Keypair, + instructions: TransactionInstruction[], + signers: Keypair[], + commitment: Commitment = 'singleGossip', + includesFeePayer: boolean = false, + block?: BlockhashAndFeeCalculator, + beforeSend?: () => void, +) => { + const transaction = new Transaction(); + instructions.forEach(instruction => transaction.add(instruction)); + transaction.recentBlockhash = ( + block || (await connection.getRecentBlockhash(commitment)) + ).blockhash; + + if (includesFeePayer) { + transaction.setSigners(...signers.map(s => s.publicKey)); + } else { + transaction.setSigners( + // fee payed by the wallet owner + wallet.publicKey, + ...signers.map(s => s.publicKey), + ); + } + + if (signers.length > 0) { + transaction.sign(...[wallet, ...signers]); + } else { + transaction.sign(wallet); + } + + if (beforeSend) { + beforeSend(); + } + + const { txid, slot } = await sendSignedTransaction({ + connection, + signedTransaction: transaction, + }); + + return { txid, slot }; +}; + +export async function sendSignedTransaction({ + signedTransaction, + connection, + timeout = DEFAULT_TIMEOUT, +}: { + signedTransaction: Transaction; + connection: Connection; + sendingMessage?: string; + sentMessage?: string; + successMessage?: string; + timeout?: number; +}): Promise<{ txid: string; slot: number }> { + const rawTransaction = signedTransaction.serialize(); + const startTime = getUnixTs(); + let slot = 0; + const txid: TransactionSignature = await connection.sendRawTransaction( + rawTransaction, + { + skipPreflight: true, + }, + ); + + log.debug('Started awaiting confirmation for', txid); + + let done = false; + (async () => { + while (!done && getUnixTs() - startTime < timeout) { + connection.sendRawTransaction(rawTransaction, { + skipPreflight: true, + }); + await sleep(500); + } + })(); + try { + const confirmation = await awaitTransactionSignatureConfirmation( + txid, + timeout, + connection, + 'recent', + true, + ); + + if (!confirmation) + throw new Error('Timed out awaiting confirmation on transaction'); + + if (confirmation.err) { + log.error(confirmation.err); + throw new Error('Transaction failed: Custom instruction error'); + } + + slot = confirmation?.slot || 0; + } catch (err) { + log.error('Timeout Error caught', err); + if (err.timeout) { + throw new Error('Timed out awaiting confirmation on transaction'); + } + let simulateResult: SimulatedTransactionResponse | null = null; + try { + simulateResult = ( + await simulateTransaction(connection, signedTransaction, 'single') + ).value; + } catch (e) { + log.error('Simulate Transaction error', e); + } + if (simulateResult && simulateResult.err) { + if (simulateResult.logs) { + for (let i = simulateResult.logs.length - 1; i >= 0; --i) { + const line = simulateResult.logs[i]; + if (line.startsWith('Program log: ')) { + throw new Error( + 'Transaction failed: ' + line.slice('Program log: '.length), + ); + } + } + } + throw new Error(JSON.stringify(simulateResult.err)); + } + // throw new Error('Transaction failed'); + } finally { + done = true; + } + + log.debug('Latency', txid, getUnixTs() - startTime); + return { txid, slot }; +} + +async function simulateTransaction( + connection: Connection, + transaction: Transaction, + commitment: Commitment, +): Promise> { + // @ts-ignore + transaction.recentBlockhash = await connection._recentBlockhash( + // @ts-ignore + connection._disableBlockhashCaching, + ); + + const signData = transaction.serializeMessage(); + // @ts-ignore + const wireTransaction = transaction._serialize(signData); + const encodedTransaction = wireTransaction.toString('base64'); + const config: any = { encoding: 'base64', commitment }; + const args = [encodedTransaction, config]; + + // @ts-ignore + const res = await connection._rpcRequest('simulateTransaction', args); + if (res.error) { + throw new Error('failed to simulate transaction: ' + res.error.message); + } + return res.result; +} + +async function awaitTransactionSignatureConfirmation( + txid: TransactionSignature, + timeout: number, + connection: Connection, + commitment: Commitment = 'recent', + queryStatus = false, +): Promise { + let done = false; + let status: SignatureStatus | null | void = { + slot: 0, + confirmations: 0, + err: null, + }; + let subId = 0; + // eslint-disable-next-line no-async-promise-executor + status = await new Promise(async (resolve, reject) => { + setTimeout(() => { + if (done) { + return; + } + done = true; + log.warn('Rejecting for timeout...'); + reject({ timeout: true }); + }, timeout); + try { + subId = connection.onSignature( + txid, + (result, context) => { + done = true; + status = { + err: result.err, + slot: context.slot, + confirmations: 0, + }; + if (result.err) { + log.warn('Rejected via websocket', result.err); + reject(status); + } else { + log.debug('Resolved via websocket', result); + resolve(status); + } + }, + commitment, + ); + } catch (e) { + done = true; + log.error('WS error in setup', txid, e); + } + while (!done && queryStatus) { + // eslint-disable-next-line no-loop-func + (async () => { + try { + const signatureStatuses = await connection.getSignatureStatuses([ + txid, + ]); + status = signatureStatuses && signatureStatuses.value[0]; + if (!done) { + if (!status) { + log.debug('REST null result for', txid, status); + } else if (status.err) { + log.error('REST error for', txid, status); + done = true; + reject(status.err); + } else if (!status.confirmations) { + log.error('REST no confirmations for', txid, status); + } else { + log.debug('REST confirmation for', txid, status); + done = true; + resolve(status); + } + } + } catch (e) { + if (!done) { + log.error('REST connection error: txid', txid, e); + } + } + })(); + await sleep(2000); + } + }); + + //@ts-ignore + if (connection._signatureSubscriptions[subId]) + connection.removeSignatureListener(subId); + done = true; + log.debug('Returning status', status); + return status; +} diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/helpers/upload/arweave.ts b/CandyMachine-Storefront/store/js/packages/cli/src/helpers/upload/arweave.ts new file mode 100644 index 0000000..7109d7b --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/helpers/upload/arweave.ts @@ -0,0 +1,73 @@ +import * as anchor from '@project-serum/anchor'; +import FormData from 'form-data'; +import fs from 'fs'; +import log from 'loglevel'; +import fetch from 'node-fetch'; +import { ARWEAVE_PAYMENT_WALLET } from '../constants'; +import { sendTransactionWithRetryWithKeypair } from '../transactions'; + +async function upload(data: FormData, manifest, index) { + log.debug(`trying to upload ${index}.png: ${manifest.name}`); + return await ( + await fetch( + 'https://us-central1-principal-lane-200702.cloudfunctions.net/uploadFile4', + { + method: 'POST', + // @ts-ignore + body: data, + }, + ) + ).json(); +} + +export async function arweaveUpload( + walletKeyPair, + anchorProgram, + env, + image, + manifestBuffer, + manifest, + index, +) { + const storageCost = 2300000; // 0.0023 SOL per file (paid to arweave) + + const instructions = [ + anchor.web3.SystemProgram.transfer({ + fromPubkey: walletKeyPair.publicKey, + toPubkey: ARWEAVE_PAYMENT_WALLET, + lamports: storageCost, + }), + ]; + + const tx = await sendTransactionWithRetryWithKeypair( + anchorProgram.provider.connection, + walletKeyPair, + instructions, + [], + 'single', + ); + log.debug('transaction for arweave payment:', tx); + + const data = new FormData(); + data.append('transaction', tx['txid']); + data.append('env', env); + data.append('file[]', fs.createReadStream(image), { + filename: `image.png`, + contentType: 'image/png', + }); + data.append('file[]', manifestBuffer, 'metadata.json'); + + const result = await upload(data, manifest, index); + + const metadataFile = result.messages?.find( + m => m.filename === 'manifest.json', + ); + if (metadataFile?.transactionId) { + const link = `https://arweave.net/${metadataFile.transactionId}`; + log.debug(`File uploaded: ${link}`); + return link; + } else { + // @todo improve + throw new Error(`No transaction ID for upload: ${index}`); + } +} diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/helpers/upload/aws.ts b/CandyMachine-Storefront/store/js/packages/cli/src/helpers/upload/aws.ts new file mode 100644 index 0000000..0636cf3 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/helpers/upload/aws.ts @@ -0,0 +1,54 @@ +import log from 'loglevel'; +import { basename } from 'path'; +import { createReadStream } from 'fs'; +import { Readable } from 'form-data'; +import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3"; + +async function uploadFile(s3Client: S3Client, awsS3Bucket: string, filename: string, contentType: string, body: string | Readable | ReadableStream | Blob | Uint8Array | Buffer): Promise { + const mediaUploadParams = { + Bucket: awsS3Bucket, + Key: filename, + Body: body, + ACL: "public-read", + ContentType: contentType, + }; + + try { + const data = await s3Client.send(new PutObjectCommand(mediaUploadParams)); + log.info('uploaded filename:', filename); + } catch (err) { + log.debug('Error', err); + }; + + const url = `https://${awsS3Bucket}.s3.amazonaws.com/${filename}` + log.debug("Location:", url); + return url; +} + +export async function awsUpload( + awsS3Bucket: string, + file: string, + manifestBuffer: Buffer, +) { + const REGION = "us-east-1"; // TODO: Parameterize this. + const s3Client = new S3Client({ region: REGION }); + const filename = `assets/${basename(file)}`; + log.debug('file:', file); + log.debug('filename:', filename); + + const fileStream = createReadStream(file); + const mediaUrl = await uploadFile(s3Client, awsS3Bucket, filename, "image/png", fileStream); + + // Copied from ipfsUpload + const manifestJson = JSON.parse(manifestBuffer.toString('utf8')); + manifestJson.image = mediaUrl; + manifestJson.properties.files = manifestJson.properties.files.map(f => { + return { ...f, uri: mediaUrl }; + }); + const updatedManifestBuffer = Buffer.from(JSON.stringify(manifestJson)); + + const metadataFilename = filename.replace(/.png$/, ".json"); + const metadataUrl = await uploadFile(s3Client, awsS3Bucket, metadataFilename, "application/json", updatedManifestBuffer); + + return metadataUrl; +} diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/helpers/upload/ipfs.ts b/CandyMachine-Storefront/store/js/packages/cli/src/helpers/upload/ipfs.ts new file mode 100644 index 0000000..0d06ff7 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/helpers/upload/ipfs.ts @@ -0,0 +1,67 @@ +import log from 'loglevel'; +import fetch from 'node-fetch'; +import { create, globSource } from 'ipfs-http-client'; + +export interface ipfsCreds { + projectId: string; + secretKey: string; +} + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)); +} + +export async function ipfsUpload( + ipfsCredentials: ipfsCreds, + image: string, + manifestBuffer: Buffer, +) { + const tokenIfps = `${ipfsCredentials.projectId}:${ipfsCredentials.secretKey}`; + // @ts-ignore + const ipfs = create('https://ipfs.infura.io:5001'); + + const uploadToIpfs = async source => { + const { cid } = await ipfs.add(source).catch(); + return cid; + }; + + const mediaHash = await uploadToIpfs(globSource(image, { recursive: true })); + log.debug('mediaHash:', mediaHash); + const mediaUrl = `https://ipfs.io/ipfs/${mediaHash}`; + log.debug('mediaUrl:', mediaUrl); + const authIFPS = Buffer.from(tokenIfps).toString('base64'); + await fetch(`https://ipfs.infura.io:5001/api/v0/pin/add?arg=${mediaHash}`, { + headers: { + Authorization: `Basic ${authIFPS}`, + }, + method: 'POST', + }); + log.info('uploaded image for file:', image); + + await sleep(500); + + const manifestJson = JSON.parse(manifestBuffer.toString('utf8')); + manifestJson.image = mediaUrl; + manifestJson.properties.files = manifestJson.properties.files.map(f => { + return { ...f, uri: mediaUrl }; + }); + + const manifestHash = await uploadToIpfs( + Buffer.from(JSON.stringify(manifestJson)), + ); + await fetch( + `https://ipfs.infura.io:5001/api/v0/pin/add?arg=${manifestHash}`, + { + headers: { + Authorization: `Basic ${authIFPS}`, + }, + method: 'POST', + }, + ); + + await sleep(500); + const link = `https://ipfs.io/ipfs/${manifestHash}`; + log.info('uploaded manifest: ', link); + + return link; +} diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/helpers/various.ts b/CandyMachine-Storefront/store/js/packages/cli/src/helpers/various.ts new file mode 100644 index 0000000..c9b8963 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/helpers/various.ts @@ -0,0 +1,200 @@ +import { LAMPORTS_PER_SOL, AccountInfo } from '@solana/web3.js'; +import fs from 'fs'; +import weighted from 'weighted'; +import path from 'path'; + +const { readFile } = fs.promises; + +export async function readJsonFile(fileName: string) { + const file = await readFile(fileName, 'utf-8'); + return JSON.parse(file); +} + +export const generateRandomSet = breakdown => { + const tmp = {}; + Object.keys(breakdown).forEach(attr => { + const randomSelection = weighted.select(breakdown[attr]); + tmp[attr] = randomSelection; + }); + + return tmp; +}; + +export const getUnixTs = () => { + return new Date().getTime() / 1000; +}; + +export function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)); +} + +export function fromUTF8Array(data: number[]) { + // array of bytes + let str = '', + i; + + for (i = 0; i < data.length; i++) { + const value = data[i]; + + if (value < 0x80) { + str += String.fromCharCode(value); + } else if (value > 0xbf && value < 0xe0) { + str += String.fromCharCode(((value & 0x1f) << 6) | (data[i + 1] & 0x3f)); + i += 1; + } else if (value > 0xdf && value < 0xf0) { + str += String.fromCharCode( + ((value & 0x0f) << 12) | + ((data[i + 1] & 0x3f) << 6) | + (data[i + 2] & 0x3f), + ); + i += 2; + } else { + // surrogate pair + const charCode = + (((value & 0x07) << 18) | + ((data[i + 1] & 0x3f) << 12) | + ((data[i + 2] & 0x3f) << 6) | + (data[i + 3] & 0x3f)) - + 0x010000; + + str += String.fromCharCode( + (charCode >> 10) | 0xd800, + (charCode & 0x03ff) | 0xdc00, + ); + i += 3; + } + } + + return str; +} + +export function parsePrice(price: string, mantissa: number = LAMPORTS_PER_SOL) { + return Math.ceil(parseFloat(price) * mantissa); +} + +export function parseDate(date) { + if (date === 'now') { + return Date.now() / 1000; + } + return Date.parse(date) / 1000; +} + +export const getMultipleAccounts = async ( + connection: any, + keys: string[], + commitment: string, +) => { + const result = await Promise.all( + chunks(keys, 99).map(chunk => + getMultipleAccountsCore(connection, chunk, commitment), + ), + ); + + const array = result + .map( + a => + //@ts-ignore + a.array.map(acc => { + if (!acc) { + return undefined; + } + + const { data, ...rest } = acc; + const obj = { + ...rest, + data: Buffer.from(data[0], 'base64'), + } as AccountInfo; + return obj; + }) as AccountInfo[], + ) + //@ts-ignore + .flat(); + return { keys, array }; +}; + +export function chunks(array, size) { + return Array.apply(0, new Array(Math.ceil(array.length / size))).map( + (_, index) => array.slice(index * size, (index + 1) * size), + ); +} + +export function generateRandoms( + numberOfAttrs: number = 1, + total: number = 100, +) { + const numbers = []; + const loose_percentage = total / numberOfAttrs; + + for (let i = 0; i < numberOfAttrs; i++) { + const random = Math.floor(Math.random() * loose_percentage) + 1; + numbers.push(random); + } + + const sum = numbers.reduce((prev, cur) => { + return prev + cur; + }, 0); + + numbers.push(total - sum); + return numbers; +} + +export const getMetadata = ( + name: string = '', + symbol: string = '', + index: number = 0, + creators, + description: string = '', + seller_fee_basis_points: number = 500, + attrs, + collection, +) => { + const attributes = []; + for (const prop in attrs) { + attributes.push({ + trait_type: prop, + value: path.parse(attrs[prop]).name, + }); + } + return { + name: `${name}${index + 1}`, + symbol, + image: `${index}.png`, + properties: { + files: [ + { + uri: `${index}.png`, + type: 'image/png', + }, + ], + category: 'image', + creators, + }, + description, + seller_fee_basis_points, + attributes, + collection, + }; +}; + +const getMultipleAccountsCore = async ( + connection: any, + keys: string[], + commitment: string, +) => { + const args = connection._buildArgs([keys], commitment, 'base64'); + + const unsafeRes = await connection._rpcRequest('getMultipleAccounts', args); + if (unsafeRes.error) { + throw new Error( + 'failed to get info about account ' + unsafeRes.error.message, + ); + } + + if (unsafeRes.result.value) { + const array = unsafeRes.result.value as AccountInfo[]; + return { keys, array }; + } + + // TODO: fix + throw new Error(); +}; diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/tsconfig.json b/CandyMachine-Storefront/store/js/packages/cli/src/tsconfig.json new file mode 100644 index 0000000..393bb0d --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "commonjs", + "outDir": "./../build", + "declaration": false, + "esModuleInterop": true, + "noImplicitAny": false, + "removeComments": false, + "isolatedModules": false, + "experimentalDecorators": true, + "downlevelIteration": true, + "emitDecoratorMetadata": true, + "noLib": false, + "preserveConstEnums": true, + "suppressImplicitAnyIndexErrors": true, + "resolveJsonModule": true, + "lib": ["dom", "es2019"] + }, + "exclude": ["node_modules", "typings/browser", "typings/browser.d.ts"], + "atom": { + "rewriteTsconfig": false + } +} diff --git a/CandyMachine-Storefront/store/js/packages/cli/src/types.ts b/CandyMachine-Storefront/store/js/packages/cli/src/types.ts new file mode 100644 index 0000000..893ab3e --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/cli/src/types.ts @@ -0,0 +1,253 @@ +import { BN } from '@project-serum/anchor'; +import { PublicKey, AccountInfo } from '@solana/web3.js'; + +export class Creator { + address: PublicKey; + verified: boolean; + share: number; + + constructor(args: { address: PublicKey; verified: boolean; share: number }) { + this.address = args.address; + this.verified = args.verified; + this.share = args.share; + } +} + +export interface Config { + authority: PublicKey; + data: ConfigData; +} + +export class ConfigData { + name: string; + symbol: string; + uri: string; + sellerFeeBasisPoints: number; + creators: Creator[] | null; + maxNumberOfLines: BN | number; + isMutable: boolean; + maxSupply: BN; + retainAuthority: boolean; + + constructor(args: { + name: string; + symbol: string; + uri: string; + sellerFeeBasisPoints: number; + creators: Creator[] | null; + maxNumberOfLines: BN; + isMutable: boolean; + maxSupply: BN; + retainAuthority: boolean; + }) { + this.name = args.name; + this.symbol = args.symbol; + this.uri = args.uri; + this.sellerFeeBasisPoints = args.sellerFeeBasisPoints; + this.creators = args.creators; + this.maxNumberOfLines = args.maxNumberOfLines; + this.isMutable = args.isMutable; + this.maxSupply = args.maxSupply; + this.retainAuthority = args.retainAuthority; + } +} + +export type AccountAndPubkey = { + pubkey: string; + account: AccountInfo; +}; + +export enum MetadataKey { + Uninitialized = 0, + MetadataV1 = 4, + EditionV1 = 1, + MasterEditionV1 = 2, + MasterEditionV2 = 6, + EditionMarker = 7, +} + +export class MasterEditionV1 { + key: MetadataKey; + supply: BN; + maxSupply?: BN; + printingMint: PublicKey; + oneTimePrintingAuthorizationMint: PublicKey; + constructor(args: { + key: MetadataKey; + supply: BN; + maxSupply?: BN; + printingMint: PublicKey; + oneTimePrintingAuthorizationMint: PublicKey; + }) { + this.key = MetadataKey.MasterEditionV1; + this.supply = args.supply; + this.maxSupply = args.maxSupply; + this.printingMint = args.printingMint; + this.oneTimePrintingAuthorizationMint = + args.oneTimePrintingAuthorizationMint; + } +} + +export class MasterEditionV2 { + key: MetadataKey; + supply: BN; + maxSupply?: BN; + constructor(args: { key: MetadataKey; supply: BN; maxSupply?: BN }) { + this.key = MetadataKey.MasterEditionV2; + this.supply = args.supply; + this.maxSupply = args.maxSupply; + } +} + +export class EditionMarker { + key: MetadataKey; + ledger: number[]; + constructor(args: { key: MetadataKey; ledger: number[] }) { + this.key = MetadataKey.EditionMarker; + this.ledger = args.ledger; + } +} + +export class Edition { + key: MetadataKey; + parent: PublicKey; + edition: BN; + constructor(args: { key: MetadataKey; parent: PublicKey; edition: BN }) { + this.key = MetadataKey.EditionV1; + this.parent = args.parent; + this.edition = args.edition; + } +} + +export class Data { + name: string; + symbol: string; + uri: string; + sellerFeeBasisPoints: number; + creators: Creator[] | null; + constructor(args: { + name: string; + symbol: string; + uri: string; + sellerFeeBasisPoints: number; + creators: Creator[] | null; + }) { + this.name = args.name; + this.symbol = args.symbol; + this.uri = args.uri; + this.sellerFeeBasisPoints = args.sellerFeeBasisPoints; + this.creators = args.creators; + } +} + +export class Metadata { + key: MetadataKey; + updateAuthority: PublicKey; + mint: PublicKey; + data: Data; + primarySaleHappened: boolean; + isMutable: boolean; + masterEdition?: PublicKey; + edition?: PublicKey; + constructor(args: { + updateAuthority: PublicKey; + mint: PublicKey; + data: Data; + primarySaleHappened: boolean; + isMutable: boolean; + masterEdition?: PublicKey; + }) { + this.key = MetadataKey.MetadataV1; + this.updateAuthority = args.updateAuthority; + this.mint = args.mint; + this.data = args.data; + this.primarySaleHappened = args.primarySaleHappened; + this.isMutable = args.isMutable; + } +} + +export const METADATA_SCHEMA = new Map([ + [ + MasterEditionV1, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['supply', 'u64'], + ['maxSupply', { kind: 'option', type: 'u64' }], + ['printingMint', 'pubkey'], + ['oneTimePrintingAuthorizationMint', [32]], + ], + }, + ], + [ + MasterEditionV2, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['supply', 'u64'], + ['maxSupply', { kind: 'option', type: 'u64' }], + ], + }, + ], + [ + Edition, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['parent', [32]], + ['edition', 'u64'], + ], + }, + ], + [ + Data, + { + kind: 'struct', + fields: [ + ['name', 'string'], + ['symbol', 'string'], + ['uri', 'string'], + ['sellerFeeBasisPoints', 'u16'], + ['creators', { kind: 'option', type: [Creator] }], + ], + }, + ], + [ + Creator, + { + kind: 'struct', + fields: [ + ['address', [32]], + ['verified', 'u8'], + ['share', 'u8'], + ], + }, + ], + [ + Metadata, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['updateAuthority', [32]], + ['mint', [32]], + ['data', Data], + ['primarySaleHappened', 'u8'], + ['isMutable', 'u8'], + ], + }, + ], + [ + EditionMarker, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['ledger', [31]], + ], + }, + ], +]); diff --git a/CandyMachine-Storefront/store/js/packages/common/.prettierignore b/CandyMachine-Storefront/store/js/packages/common/.prettierignore new file mode 100644 index 0000000..1521c8b --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/.prettierignore @@ -0,0 +1 @@ +dist diff --git a/CandyMachine-Storefront/store/js/packages/common/package.json b/CandyMachine-Storefront/store/js/packages/common/package.json new file mode 100644 index 0000000..acba69d --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/package.json @@ -0,0 +1,81 @@ +{ + "name": "@oyster/common", + "version": "0.0.2", + "description": "Oyster common utilities", + "main": "dist/lib/index.js", + "types": "dist/lib/index.d.ts", + "exports": { + ".": "./dist/lib", + "./dist/*": "./dist/*.js", + "./styles.css": "./dist/lib/styles.css" + }, + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "engines": { + "node": ">=10" + }, + "scripts": { + "build": "run-s build-ts build-css", + "build-ts": "tsc", + "build-css": "less-watch-compiler src/ dist/lib/ --run-once", + "start": "npm-run-all --parallel watch watch-css watch-css-src", + "watch-css": "less-watch-compiler src/ dist/lib/", + "watch-css-src": "less-watch-compiler src/ src/", + "watch": "tsc --watch", + "test": "jest test --passWithNoTests", + "clean": "rm -rf dist", + "prepare": "run-s clean build", + "format:fix": "prettier --write \"**/*.+(js|jsx|ts|tsx|json|css|md)\"" + }, + "dependencies": { + "@project-serum/serum": "^0.13.52", + "@solana/spl-token": "0.1.6", + "@solana/spl-token-registry": "0.2.202", + "@solana/wallet-adapter-base": "^0.4.1", + "@solana/wallet-adapter-react": "^0.7.1", + "@solana/wallet-adapter-wallets": "^0.6.1", + "@solana/web3.js": "^1.21.0", + "@testing-library/jest-dom": "^4.2.4", + "@testing-library/react": "^9.5.0", + "@testing-library/user-event": "^7.2.1", + "@types/chart.js": "^2.9.29", + "@types/echarts": "^4.9.0", + "@types/react-router-dom": "^5.1.6", + "@welldone-software/why-did-you-render": "^6.0.5", + "antd": "^4.16.12", + "bignumber.js": "^9.0.1", + "bn.js": "^5.1.3", + "borsh": "^0.4.0", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.0", + "crypto-hash": "^1.3.0", + "eventemitter3": "^4.0.7", + "identicon.js": "^2.3.3", + "jazzicon": "^1.5.0", + "lodash": "^4.17.20", + "react": "17.0.2", + "react-dom": "17.0.2", + "typescript": "^4.1.3" + }, + "devDependencies": { + "@types/bn.js": "^5.1.0", + "@types/bs58": "^4.0.1", + "@types/identicon.js": "^2.3.0", + "@types/jest": "^24.9.1", + "@types/node": "^12.12.62", + "arweave-deploy": "^1.9.1", + "gh-pages": "^3.1.0", + "less": "^4.1.1", + "less-watch-compiler": "v1.14.6", + "prettier": "^2.1.2" + }, + "files": [ + "dist" + ], + "peerDependencies": { + "react": "*", + "react-dom": "*" + } +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/actions/account.ts b/CandyMachine-Storefront/store/js/packages/common/src/actions/account.ts new file mode 100644 index 0000000..133222d --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/actions/account.ts @@ -0,0 +1,335 @@ +import { AccountLayout, MintLayout, Token } from '@solana/spl-token'; +import { + Keypair, + PublicKey, + SystemProgram, + SYSVAR_RENT_PUBKEY, + TransactionInstruction, +} from '@solana/web3.js'; +import { + SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID, + TOKEN_PROGRAM_ID, + WRAPPED_SOL_MINT, +} from '../utils/ids'; +import { programIds } from '../utils/programIds'; +import { TokenAccount } from '../models/account'; +import { cache } from '../contexts/accounts/cache'; +import { TokenAccountParser } from '../contexts/accounts/parsesrs'; + +export function ensureSplAccount( + instructions: TransactionInstruction[], + cleanupInstructions: TransactionInstruction[], + toCheck: TokenAccount, + payer: PublicKey, + amount: number, + signers: Keypair[], +) { + if (!toCheck.info.isNative) { + return toCheck.pubkey; + } + + const account = createUninitializedAccount( + instructions, + payer, + amount, + signers, + ); + + instructions.push( + Token.createInitAccountInstruction( + TOKEN_PROGRAM_ID, + WRAPPED_SOL_MINT, + account, + payer, + ), + ); + + cleanupInstructions.push( + Token.createCloseAccountInstruction( + TOKEN_PROGRAM_ID, + account, + payer, + payer, + [], + ), + ); + + return account; +} + +export const DEFAULT_TEMP_MEM_SPACE = 65548; + +export function createTempMemoryAccount( + instructions: TransactionInstruction[], + payer: PublicKey, + signers: Keypair[], + owner: PublicKey, + space = DEFAULT_TEMP_MEM_SPACE, +) { + const account = Keypair.generate(); + instructions.push( + SystemProgram.createAccount({ + fromPubkey: payer, + newAccountPubkey: account.publicKey, + // 0 will evict/close account since it cannot pay rent + lamports: 0, + space: space, + programId: owner, + }), + ); + + signers.push(account); + + return account.publicKey; +} + +export function createUninitializedMint( + instructions: TransactionInstruction[], + payer: PublicKey, + amount: number, + signers: Keypair[], +) { + const account = Keypair.generate(); + instructions.push( + SystemProgram.createAccount({ + fromPubkey: payer, + newAccountPubkey: account.publicKey, + lamports: amount, + space: MintLayout.span, + programId: TOKEN_PROGRAM_ID, + }), + ); + + signers.push(account); + + return account.publicKey; +} + +export function createUninitializedAccount( + instructions: TransactionInstruction[], + payer: PublicKey, + amount: number, + signers: Keypair[], +) { + const account = Keypair.generate(); + instructions.push( + SystemProgram.createAccount({ + fromPubkey: payer, + newAccountPubkey: account.publicKey, + lamports: amount, + space: AccountLayout.span, + programId: TOKEN_PROGRAM_ID, + }), + ); + + signers.push(account); + + return account.publicKey; +} + +export function createAssociatedTokenAccountInstruction( + instructions: TransactionInstruction[], + associatedTokenAddress: PublicKey, + payer: PublicKey, + walletAddress: PublicKey, + splTokenMintAddress: PublicKey, +) { + const keys = [ + { + pubkey: payer, + isSigner: true, + isWritable: true, + }, + { + pubkey: associatedTokenAddress, + isSigner: false, + isWritable: true, + }, + { + pubkey: walletAddress, + isSigner: false, + isWritable: false, + }, + { + pubkey: splTokenMintAddress, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: TOKEN_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID, + data: Buffer.from([]), + }), + ); +} + +export function createMint( + instructions: TransactionInstruction[], + payer: PublicKey, + mintRentExempt: number, + decimals: number, + owner: PublicKey, + freezeAuthority: PublicKey, + signers: Keypair[], +) { + const account = createUninitializedMint( + instructions, + payer, + mintRentExempt, + signers, + ); + + instructions.push( + Token.createInitMintInstruction( + TOKEN_PROGRAM_ID, + account, + decimals, + owner, + freezeAuthority, + ), + ); + + return account; +} + +export function createTokenAccount( + instructions: TransactionInstruction[], + payer: PublicKey, + accountRentExempt: number, + mint: PublicKey, + owner: PublicKey, + signers: Keypair[], +) { + const account = createUninitializedAccount( + instructions, + payer, + accountRentExempt, + signers, + ); + + instructions.push( + Token.createInitAccountInstruction(TOKEN_PROGRAM_ID, mint, account, owner), + ); + + return account; +} + +export function ensureWrappedAccount( + instructions: TransactionInstruction[], + cleanupInstructions: TransactionInstruction[], + toCheck: TokenAccount | undefined, + payer: PublicKey, + amount: number, + signers: Keypair[], +) { + if (toCheck && !toCheck.info.isNative) { + return toCheck.pubkey; + } + + const TOKEN_PROGRAM_ID = programIds().token; + const account = Keypair.generate(); + instructions.push( + SystemProgram.createAccount({ + fromPubkey: payer, + newAccountPubkey: account.publicKey, + lamports: amount, + space: AccountLayout.span, + programId: TOKEN_PROGRAM_ID, + }), + ); + + instructions.push( + Token.createInitAccountInstruction( + TOKEN_PROGRAM_ID, + WRAPPED_SOL_MINT, + account.publicKey, + payer, + ), + ); + + cleanupInstructions.push( + Token.createCloseAccountInstruction( + TOKEN_PROGRAM_ID, + account.publicKey, + payer, + payer, + [], + ), + ); + + signers.push(account); + + return account.publicKey.toBase58(); +} + +// TODO: check if one of to accounts needs to be native sol ... if yes unwrap it ... +export function findOrCreateAccountByMint( + payer: PublicKey, + owner: PublicKey, + instructions: TransactionInstruction[], + cleanupInstructions: TransactionInstruction[], + accountRentExempt: number, + mint: PublicKey, // use to identify same type + signers: Keypair[], + excluded?: Set, +): PublicKey { + const accountToFind = mint.toBase58(); + const ownerKey = owner.toBase58(); + const account = cache + .byParser(TokenAccountParser) + .map(id => cache.get(id)) + .find( + acc => + acc !== undefined && + acc.info.mint.toBase58() === accountToFind && + acc.info.owner.toBase58() === ownerKey && + (excluded === undefined || !excluded.has(acc.pubkey)), + ); + const isWrappedSol = accountToFind === WRAPPED_SOL_MINT.toBase58(); + + let toAccount: PublicKey; + if (account && !isWrappedSol) { + toAccount = new PublicKey(account.pubkey); + } else { + // creating depositor pool account + toAccount = createTokenAccount( + instructions, + payer, + accountRentExempt, + mint, + owner, + signers, + ); + + if (isWrappedSol) { + cleanupInstructions.push( + Token.createCloseAccountInstruction( + TOKEN_PROGRAM_ID, + toAccount, + payer, + payer, + [], + ), + ); + } + } + + return toAccount; +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/actions/auction.ts b/CandyMachine-Storefront/store/js/packages/common/src/actions/auction.ts new file mode 100644 index 0000000..ad96056 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/actions/auction.ts @@ -0,0 +1,1090 @@ +import { + AccountInfo, + SystemProgram, + SYSVAR_CLOCK_PUBKEY, + SYSVAR_RENT_PUBKEY, + TransactionInstruction, +} from '@solana/web3.js'; +import { programIds } from '../utils/programIds'; +import { deserializeUnchecked, serialize } from 'borsh'; +import BN from 'bn.js'; +import { AccountParser } from '../contexts/accounts/types'; +import moment from 'moment'; +import { findProgramAddress, StringPublicKey, toPublicKey } from '../utils'; +export const AUCTION_PREFIX = 'auction'; +export const METADATA = 'metadata'; +export const EXTENDED = 'extended'; +export const MAX_AUCTION_DATA_EXTENDED_SIZE = 8 + 9 + 2 + 9 + 33 + 158; + +export enum AuctionState { + Created = 0, + Started, + Ended, +} + +export enum BidStateType { + EnglishAuction = 0, + OpenEdition = 1, +} + +export class Bid { + key: StringPublicKey; + amount: BN; + constructor(args: { key: StringPublicKey; amount: BN }) { + this.key = args.key; + this.amount = args.amount; + } +} + +export class BidState { + type: BidStateType; + bids: Bid[]; + max: BN; + + public getWinnerAt(winnerIndex: number): StringPublicKey | null { + const convertedIndex = this.bids.length - winnerIndex - 1; + + if (convertedIndex >= 0 && convertedIndex < this.bids.length) { + return this.bids[convertedIndex].key; + } else { + return null; + } + } + + public getAmountAt(winnerIndex: number): BN | null { + const convertedIndex = this.bids.length - winnerIndex - 1; + + if (convertedIndex >= 0 && convertedIndex < this.bids.length) { + return this.bids[convertedIndex].amount; + } else { + return null; + } + } + + public getWinnerIndex(bidder: StringPublicKey): number | null { + if (!this.bids) return null; + + const index = this.bids.findIndex(b => b.key === bidder); + // auction stores data in reverse order + if (index !== -1) { + const zeroBased = this.bids.length - index - 1; + return zeroBased < this.max.toNumber() ? zeroBased : null; + } else return null; + } + + constructor(args: { type: BidStateType; bids: Bid[]; max: BN }) { + this.type = args.type; + this.bids = args.bids; + this.max = args.max; + } +} + +export const AuctionParser: AccountParser = ( + pubkey: StringPublicKey, + account: AccountInfo, +) => ({ + pubkey, + account, + info: decodeAuction(account.data), +}); + +export const decodeAuction = (buffer: Buffer) => { + return deserializeUnchecked( + AUCTION_SCHEMA, + AuctionData, + buffer, + ) as AuctionData; +}; + +export const BidderPotParser: AccountParser = ( + pubkey: StringPublicKey, + account: AccountInfo, +) => ({ + pubkey, + account, + info: decodeBidderPot(account.data), +}); + +export const decodeBidderPot = (buffer: Buffer) => { + return deserializeUnchecked(AUCTION_SCHEMA, BidderPot, buffer) as BidderPot; +}; + +export const AuctionDataExtendedParser: AccountParser = ( + pubkey: StringPublicKey, + account: AccountInfo, +) => ({ + pubkey, + account, + info: decodeAuctionDataExtended(account.data), +}); + +export const decodeAuctionDataExtended = (buffer: Buffer) => { + return deserializeUnchecked( + AUCTION_SCHEMA, + AuctionDataExtended, + buffer, + ) as AuctionDataExtended; +}; + +export const BidderMetadataParser: AccountParser = ( + pubkey: StringPublicKey, + account: AccountInfo, +) => ({ + pubkey, + account, + info: decodeBidderMetadata(account.data), +}); + +export const decodeBidderMetadata = (buffer: Buffer) => { + return deserializeUnchecked( + AUCTION_SCHEMA, + BidderMetadata, + buffer, + ) as BidderMetadata; +}; + +export const BASE_AUCTION_DATA_SIZE = + 32 + 32 + 32 + 9 + 9 + 9 + 9 + 1 + 32 + 1 + 8 + 8; + +export enum PriceFloorType { + None = 0, + Minimum = 1, + BlindedPrice = 2, +} +export class PriceFloor { + type: PriceFloorType; + // It's an array of 32 u8s, when minimum, only first 8 are used (a u64), when blinded price, the entire + // thing is a hash and not actually a public key, and none is all zeroes + hash: Uint8Array; + + minPrice?: BN; + + constructor(args: { + type: PriceFloorType; + hash?: Uint8Array; + minPrice?: BN; + }) { + this.type = args.type; + this.hash = args.hash || new Uint8Array(32); + if (this.type === PriceFloorType.Minimum) { + if (args.minPrice) { + this.hash.set(args.minPrice.toArrayLike(Buffer, 'le', 8), 0); + } else { + this.minPrice = new BN( + (args.hash || new Uint8Array(0)).slice(0, 8), + 'le', + ); + } + } + } +} + +export class AuctionDataExtended { + /// Total uncancelled bids + totalUncancelledBids: BN; + tickSize: BN | null; + gapTickSizePercentage: number | null; + instantSalePrice: BN | null; + name: number[] | null; + + constructor(args: { + totalUncancelledBids: BN; + tickSize: BN | null; + gapTickSizePercentage: number | null; + instantSalePrice: BN | null; + name: number[] | null; + }) { + this.totalUncancelledBids = args.totalUncancelledBids; + this.tickSize = args.tickSize; + this.gapTickSizePercentage = args.gapTickSizePercentage; + this.instantSalePrice = args.instantSalePrice; + this.name = args.name; + } +} + +export interface CountdownState { + days: number; + hours: number; + minutes: number; + seconds: number; +} + +export class AuctionData { + /// Pubkey of the authority with permission to modify this auction. + authority: StringPublicKey; + /// Token mint for the SPL token being used to bid + tokenMint: StringPublicKey; + /// The time the last bid was placed, used to keep track of auction timing. + lastBid: BN | null; + /// Slot time the auction was officially ended by. + endedAt: BN | null; + /// End time is the cut-off point that the auction is forced to end by. + endAuctionAt: BN | null; + /// Gap time is the amount of time in slots after the previous bid at which the auction ends. + auctionGap: BN | null; + /// Minimum price for any bid to meet. + priceFloor: PriceFloor; + /// The state the auction is in, whether it has started or ended. + state: AuctionState; + /// Auction Bids, each user may have one bid open at a time. + bidState: BidState; + /// Used for precalculation on the front end, not a backend key + bidRedemptionKey?: StringPublicKey; + + auctionDataExtended?: StringPublicKey; + + public timeToEnd(): CountdownState { + const now = moment().unix(); + const ended = { days: 0, hours: 0, minutes: 0, seconds: 0 }; + let endAt = this.endedAt?.toNumber() || 0; + + if (this.auctionGap && this.lastBid) { + endAt = Math.max( + endAt, + this.auctionGap.toNumber() + this.lastBid.toNumber(), + ); + } + + let delta = endAt - now; + + if (!endAt || delta <= 0) return ended; + + const days = Math.floor(delta / 86400); + delta -= days * 86400; + + const hours = Math.floor(delta / 3600) % 24; + delta -= hours * 3600; + + const minutes = Math.floor(delta / 60) % 60; + delta -= minutes * 60; + + const seconds = Math.floor(delta % 60); + + return { days, hours, minutes, seconds }; + } + + public ended() { + const now = moment().unix(); + if (!this.endedAt) return false; + + if (this.endedAt.toNumber() > now) return false; + + if (this.endedAt.toNumber() < now) { + if (this.auctionGap && this.lastBid) { + const newEnding = this.auctionGap.toNumber() + this.lastBid.toNumber(); + return newEnding < now; + } else return true; + } + } + + constructor(args: { + authority: StringPublicKey; + tokenMint: StringPublicKey; + lastBid: BN | null; + endedAt: BN | null; + endAuctionAt: BN | null; + auctionGap: BN | null; + priceFloor: PriceFloor; + state: AuctionState; + bidState: BidState; + totalUncancelledBids: BN; + }) { + this.authority = args.authority; + this.tokenMint = args.tokenMint; + this.lastBid = args.lastBid; + this.endedAt = args.endedAt; + this.endAuctionAt = args.endAuctionAt; + this.auctionGap = args.auctionGap; + this.priceFloor = args.priceFloor; + this.state = args.state; + this.bidState = args.bidState; + } +} + +export const BIDDER_METADATA_LEN = 32 + 32 + 8 + 8 + 1; +export class BidderMetadata { + // Relationship with the bidder who's metadata this covers. + bidderPubkey: StringPublicKey; + // Relationship with the auction this bid was placed on. + auctionPubkey: StringPublicKey; + // Amount that the user bid. + lastBid: BN; + // Tracks the last time this user bid. + lastBidTimestamp: BN; + // 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. + cancelled: boolean; + constructor(args: { + bidderPubkey: StringPublicKey; + auctionPubkey: StringPublicKey; + lastBid: BN; + lastBidTimestamp: BN; + cancelled: boolean; + }) { + this.bidderPubkey = args.bidderPubkey; + this.auctionPubkey = args.auctionPubkey; + this.lastBid = args.lastBid; + this.lastBidTimestamp = args.lastBidTimestamp; + this.cancelled = args.cancelled; + } +} + +export const BIDDER_POT_LEN = 32 + 32 + 32 + 1; +export class BidderPot { + /// Points at actual pot that is a token account + bidderPot: StringPublicKey; + bidderAct: StringPublicKey; + auctionAct: StringPublicKey; + emptied: boolean; + constructor(args: { + bidderPot: StringPublicKey; + bidderAct: StringPublicKey; + auctionAct: StringPublicKey; + emptied: boolean; + }) { + this.bidderPot = args.bidderPot; + this.bidderAct = args.bidderAct; + this.auctionAct = args.auctionAct; + this.emptied = args.emptied; + } +} + +export enum WinnerLimitType { + Unlimited = 0, + Capped = 1, +} + +export class WinnerLimit { + type: WinnerLimitType; + usize: BN; + constructor(args: { type: WinnerLimitType; usize: BN }) { + this.type = args.type; + this.usize = args.usize; + } +} + +export interface IPartialCreateAuctionArgs { + /// How many winners are allowed for this auction. See AuctionData. + winners: WinnerLimit; + /// End time is the cut-off point that the auction is forced to end by. See AuctionData. + endAuctionAt: BN | null; + /// Gap time is how much time after the previous bid where the auction ends. See AuctionData. + auctionGap: BN | null; + /// Token mint for the SPL token used for bidding. + tokenMint: StringPublicKey; + + priceFloor: PriceFloor; + + tickSize: BN | null; + + gapTickSizePercentage: number | null; + + instantSalePrice: BN | null; + + name: number[] | null; +} + +export class CreateAuctionArgs implements IPartialCreateAuctionArgs { + instruction: number = 7; + /// How many winners are allowed for this auction. See AuctionData. + winners: WinnerLimit; + /// End time is the cut-off point that the auction is forced to end by. See AuctionData. + endAuctionAt: BN | null; + /// Gap time is how much time after the previous bid where the auction ends. See AuctionData. + auctionGap: BN | null; + /// Token mint for the SPL token used for bidding. + tokenMint: StringPublicKey; + /// Authority + authority: StringPublicKey; + /// The resource being auctioned. See AuctionData. + resource: StringPublicKey; + + priceFloor: PriceFloor; + + tickSize: BN | null; + + gapTickSizePercentage: number | null; + + instantSalePrice: BN | null; + + name: number[] | null; + + constructor(args: { + winners: WinnerLimit; + endAuctionAt: BN | null; + auctionGap: BN | null; + tokenMint: StringPublicKey; + authority: StringPublicKey; + resource: StringPublicKey; + priceFloor: PriceFloor; + tickSize: BN | null; + gapTickSizePercentage: number | null; + name: number[] | null; + instantSalePrice: BN | null; + }) { + this.winners = args.winners; + this.endAuctionAt = args.endAuctionAt; + this.auctionGap = args.auctionGap; + this.tokenMint = args.tokenMint; + this.authority = args.authority; + this.resource = args.resource; + this.priceFloor = args.priceFloor; + this.tickSize = args.tickSize; + this.gapTickSizePercentage = args.gapTickSizePercentage; + this.name = args.name; + this.instantSalePrice = args.instantSalePrice; + } +} + +class StartAuctionArgs { + instruction: number = 4; + resource: StringPublicKey; + + constructor(args: { resource: StringPublicKey }) { + this.resource = args.resource; + } +} + +class PlaceBidArgs { + instruction: number = 6; + resource: StringPublicKey; + amount: BN; + + constructor(args: { resource: StringPublicKey; amount: BN }) { + this.resource = args.resource; + this.amount = args.amount; + } +} + +class CancelBidArgs { + instruction: number = 0; + resource: StringPublicKey; + + constructor(args: { resource: StringPublicKey }) { + this.resource = args.resource; + } +} + +class SetAuthorityArgs { + instruction: number = 5; +} + +export const AUCTION_SCHEMA = new Map([ + [ + CreateAuctionArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['winners', WinnerLimit], + ['endAuctionAt', { kind: 'option', type: 'u64' }], + ['auctionGap', { kind: 'option', type: 'u64' }], + ['tokenMint', 'pubkeyAsString'], + ['authority', 'pubkeyAsString'], + ['resource', 'pubkeyAsString'], + ['priceFloor', PriceFloor], + ['tickSize', { kind: 'option', type: 'u64' }], + ['gapTickSizePercentage', { kind: 'option', type: 'u8' }], + ['instantSalePrice', { kind: 'option', type: 'u64' }], + ['name', { kind: 'option', type: [32] }], + ], + }, + ], + [ + WinnerLimit, + { + kind: 'struct', + fields: [ + ['type', 'u8'], + ['usize', 'u64'], + ], + }, + ], + [ + StartAuctionArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['resource', 'pubkeyAsString'], + ], + }, + ], + [ + PlaceBidArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['amount', 'u64'], + ['resource', 'pubkeyAsString'], + ], + }, + ], + [ + CancelBidArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['resource', 'pubkeyAsString'], + ], + }, + ], + + [ + SetAuthorityArgs, + { + kind: 'struct', + fields: [['instruction', 'u8']], + }, + ], + [ + AuctionData, + { + kind: 'struct', + fields: [ + ['authority', 'pubkeyAsString'], + ['tokenMint', 'pubkeyAsString'], + ['lastBid', { kind: 'option', type: 'u64' }], + ['endedAt', { kind: 'option', type: 'u64' }], + ['endAuctionAt', { kind: 'option', type: 'u64' }], + ['auctionGap', { kind: 'option', type: 'u64' }], + ['priceFloor', PriceFloor], + ['state', 'u8'], + ['bidState', BidState], + ], + }, + ], + [ + AuctionDataExtended, + { + kind: 'struct', + fields: [ + ['totalUncancelledBids', 'u64'], + ['tickSize', { kind: 'option', type: 'u64' }], + ['gapTickSizePercentage', { kind: 'option', type: 'u8' }], + ['instantSalePrice', { kind: 'option', type: 'u64' }], + ['name', { kind: 'option', type: [32] }], + ], + }, + ], + [ + PriceFloor, + { + kind: 'struct', + fields: [ + ['type', 'u8'], + ['hash', [32]], + ], + }, + ], + [ + BidState, + { + kind: 'struct', + fields: [ + ['type', 'u8'], + ['bids', [Bid]], + ['max', 'u64'], + ], + }, + ], + [ + Bid, + { + kind: 'struct', + fields: [ + ['key', 'pubkeyAsString'], + ['amount', 'u64'], + ], + }, + ], + [ + BidderMetadata, + { + kind: 'struct', + fields: [ + ['bidderPubkey', 'pubkeyAsString'], + ['auctionPubkey', 'pubkeyAsString'], + ['lastBid', 'u64'], + ['lastBidTimestamp', 'u64'], + ['cancelled', 'u8'], + ], + }, + ], + [ + BidderPot, + { + kind: 'struct', + fields: [ + ['bidderPot', 'pubkeyAsString'], + ['bidderAct', 'pubkeyAsString'], + ['auctionAct', 'pubkeyAsString'], + ['emptied', 'u8'], + ], + }, + ], +]); + +export const decodeAuctionData = (buffer: Buffer) => { + return deserializeUnchecked( + AUCTION_SCHEMA, + AuctionData, + buffer, + ) as AuctionData; +}; + +export async function createAuction( + settings: CreateAuctionArgs, + creator: StringPublicKey, + instructions: TransactionInstruction[], +) { + const auctionProgramId = programIds().auction; + + const data = Buffer.from(serialize(AUCTION_SCHEMA, settings)); + + const auctionKey: StringPublicKey = ( + await findProgramAddress( + [ + Buffer.from(AUCTION_PREFIX), + toPublicKey(auctionProgramId).toBuffer(), + toPublicKey(settings.resource).toBuffer(), + ], + toPublicKey(auctionProgramId), + ) + )[0]; + + const keys = [ + { + pubkey: toPublicKey(creator), + isSigner: true, + isWritable: true, + }, + { + pubkey: toPublicKey(auctionKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey( + await getAuctionExtended({ + auctionProgramId, + resource: settings.resource, + }), + ), + isSigner: false, + isWritable: true, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(auctionProgramId), + data: data, + }), + ); +} + +export async function startAuctionWithResource( + resource: StringPublicKey, + creator: StringPublicKey, + instructions: TransactionInstruction[], +) { + const auctionProgramId = programIds().auction; + + const data = Buffer.from( + serialize( + AUCTION_SCHEMA, + new StartAuctionArgs({ + resource, + }), + ), + ); + + const auctionKey: StringPublicKey = ( + await findProgramAddress( + [ + Buffer.from(AUCTION_PREFIX), + toPublicKey(auctionProgramId).toBuffer(), + toPublicKey(resource).toBuffer(), + ], + toPublicKey(auctionProgramId), + ) + )[0]; + + const keys = [ + { + pubkey: toPublicKey(creator), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(auctionKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: SYSVAR_CLOCK_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(auctionProgramId), + data: data, + }), + ); +} + +export async function setAuctionAuthority( + auction: StringPublicKey, + currentAuthority: StringPublicKey, + newAuthority: StringPublicKey, + instructions: TransactionInstruction[], +) { + const auctionProgramId = programIds().auction; + + const data = Buffer.from(serialize(AUCTION_SCHEMA, new SetAuthorityArgs())); + + const keys = [ + { + pubkey: toPublicKey(auction), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(currentAuthority), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(newAuthority), + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(auctionProgramId), + data: data, + }), + ); +} + +export async function placeBid( + bidderPubkey: StringPublicKey, + bidderTokenPubkey: StringPublicKey, + bidderPotTokenPubkey: StringPublicKey, + tokenMintPubkey: StringPublicKey, + transferAuthority: StringPublicKey, + payer: StringPublicKey, + resource: StringPublicKey, + amount: BN, + instructions: TransactionInstruction[], +) { + const auctionProgramId = programIds().auction; + + const data = Buffer.from( + serialize( + AUCTION_SCHEMA, + new PlaceBidArgs({ + resource, + amount, + }), + ), + ); + + const auctionKey: StringPublicKey = ( + await findProgramAddress( + [ + Buffer.from(AUCTION_PREFIX), + toPublicKey(auctionProgramId).toBuffer(), + toPublicKey(resource).toBuffer(), + ], + toPublicKey(auctionProgramId), + ) + )[0]; + + const bidderPotKey = await getBidderPotKey({ + auctionProgramId, + auctionKey, + bidderPubkey, + }); + + const bidderMetaKey: StringPublicKey = ( + await findProgramAddress( + [ + Buffer.from(AUCTION_PREFIX), + toPublicKey(auctionProgramId).toBuffer(), + toPublicKey(auctionKey).toBuffer(), + toPublicKey(bidderPubkey).toBuffer(), + Buffer.from('metadata'), + ], + toPublicKey(auctionProgramId), + ) + )[0]; + + const keys = [ + { + pubkey: toPublicKey(bidderPubkey), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(bidderTokenPubkey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(bidderPotKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(bidderPotTokenPubkey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(bidderMetaKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(auctionKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey( + await getAuctionExtended({ auctionProgramId, resource }), + ), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(tokenMintPubkey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(transferAuthority), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(payer), + isSigner: true, + isWritable: false, + }, + { + pubkey: SYSVAR_CLOCK_PUBKEY, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: programIds().token, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(auctionProgramId), + data: data, + }), + ); + + return { + amount, + }; +} + +export async function getBidderPotKey({ + auctionProgramId, + auctionKey, + bidderPubkey, +}: { + auctionProgramId: StringPublicKey; + auctionKey: StringPublicKey; + bidderPubkey: StringPublicKey; +}): Promise { + return ( + await findProgramAddress( + [ + Buffer.from(AUCTION_PREFIX), + toPublicKey(auctionProgramId).toBuffer(), + toPublicKey(auctionKey).toBuffer(), + toPublicKey(bidderPubkey).toBuffer(), + ], + toPublicKey(auctionProgramId), + ) + )[0]; +} + +export async function getAuctionExtended({ + auctionProgramId, + resource, +}: { + auctionProgramId: StringPublicKey; + resource: StringPublicKey; +}): Promise { + return ( + await findProgramAddress( + [ + Buffer.from(AUCTION_PREFIX), + toPublicKey(auctionProgramId).toBuffer(), + toPublicKey(resource).toBuffer(), + Buffer.from(EXTENDED), + ], + toPublicKey(auctionProgramId), + ) + )[0]; +} + +export async function cancelBid( + bidderPubkey: StringPublicKey, + bidderTokenPubkey: StringPublicKey, + bidderPotTokenPubkey: StringPublicKey, + tokenMintPubkey: StringPublicKey, + resource: StringPublicKey, + instructions: TransactionInstruction[], +) { + const auctionProgramId = programIds().auction; + + const data = Buffer.from( + serialize( + AUCTION_SCHEMA, + new CancelBidArgs({ + resource, + }), + ), + ); + + const auctionKey = ( + await findProgramAddress( + [ + Buffer.from(AUCTION_PREFIX), + toPublicKey(auctionProgramId).toBuffer(), + toPublicKey(resource).toBuffer(), + ], + toPublicKey(auctionProgramId), + ) + )[0]; + + const bidderPotKey = await getBidderPotKey({ + auctionProgramId, + auctionKey, + bidderPubkey, + }); + + const bidderMetaKey = ( + await findProgramAddress( + [ + Buffer.from(AUCTION_PREFIX), + toPublicKey(auctionProgramId).toBuffer(), + toPublicKey(auctionKey).toBuffer(), + toPublicKey(bidderPubkey).toBuffer(), + Buffer.from('metadata'), + ], + toPublicKey(auctionProgramId), + ) + )[0]; + + const keys = [ + { + pubkey: toPublicKey(bidderPubkey), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(bidderTokenPubkey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(bidderPotKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(bidderPotTokenPubkey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(bidderMetaKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(auctionKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey( + await getAuctionExtended({ auctionProgramId, resource }), + ), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(tokenMintPubkey), + isSigner: false, + isWritable: true, + }, + { + pubkey: SYSVAR_CLOCK_PUBKEY, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: programIds().token, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(auctionProgramId), + data: data, + }), + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/actions/index.ts b/CandyMachine-Storefront/store/js/packages/common/src/actions/index.ts new file mode 100644 index 0000000..f11ceca --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/actions/index.ts @@ -0,0 +1,4 @@ +export * from './account'; +export * from './metadata'; +export * from './vault'; +export * from './auction'; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/actions/metadata.ts b/CandyMachine-Storefront/store/js/packages/common/src/actions/metadata.ts new file mode 100644 index 0000000..5bfb9fe --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/actions/metadata.ts @@ -0,0 +1,1240 @@ +import { + PublicKey, + SystemProgram, + SYSVAR_RENT_PUBKEY, + TransactionInstruction, +} from '@solana/web3.js'; +import { programIds } from '../utils/programIds'; +import { deserializeUnchecked, serialize } from 'borsh'; +import BN from 'bn.js'; +import { findProgramAddress, StringPublicKey, toPublicKey } from '../utils'; +export const METADATA_PREFIX = 'metadata'; +export const EDITION = 'edition'; +export const RESERVATION = 'reservation'; + +export const MAX_NAME_LENGTH = 32; + +export const MAX_SYMBOL_LENGTH = 10; + +export const MAX_URI_LENGTH = 200; + +export const MAX_CREATOR_LIMIT = 5; + +export const MAX_CREATOR_LEN = 32 + 1 + 1; +export const MAX_METADATA_LEN = + 1 + + 32 + + 32 + + MAX_NAME_LENGTH + + MAX_SYMBOL_LENGTH + + MAX_URI_LENGTH + + MAX_CREATOR_LIMIT * MAX_CREATOR_LEN + + 2 + + 1 + + 1 + + 198; + +export const MAX_EDITION_LEN = 1 + 32 + 8 + 200; + +export const EDITION_MARKER_BIT_SIZE = 248; + +export enum MetadataKey { + Uninitialized = 0, + MetadataV1 = 4, + EditionV1 = 1, + MasterEditionV1 = 2, + MasterEditionV2 = 6, + EditionMarker = 7, +} + +export enum MetadataCategory { + Audio = 'audio', + Video = 'video', + Image = 'image', + VR = 'vr', + HTML = 'html', +} + +export type MetadataFile = { + uri: string; + type: string; +}; + +export type FileOrString = MetadataFile | string; + +export type Attribute = { + trait_type?: string; + display_type?: string; + value: string | number; +}; + +export interface IMetadataExtension { + name: string; + symbol: string; + + creators: Creator[] | null; + description: string; + // preview image absolute URI + image: string; + animation_url?: string; + + attributes?: Attribute[]; + + // stores link to item on meta + external_url: string; + + seller_fee_basis_points: number; + + properties: { + files?: FileOrString[]; + category: MetadataCategory; + maxSupply?: number; + creators?: { + address: string; + shares: number; + }[]; + }; +} + +export class MasterEditionV1 { + key: MetadataKey; + supply: BN; + maxSupply?: BN; + /// Can be used to mint tokens that give one-time permission to mint a single limited edition. + printingMint: StringPublicKey; + /// If you don't know how many printing tokens you are going to need, but you do know + /// you are going to need some amount in the future, you can use a token from this mint. + /// Coming back to token metadata with one of these tokens allows you to mint (one time) + /// any number of printing tokens you want. This is used for instance by Auction Manager + /// with participation NFTs, where we dont know how many people will bid and need participation + /// printing tokens to redeem, so we give it ONE of these tokens to use after the auction is over, + /// because when the auction begins we just dont know how many printing tokens we will need, + /// but at the end we will. At the end it then burns this token with token-metadata to + /// get the printing tokens it needs to give to bidders. Each bidder then redeems a printing token + /// to get their limited editions. + oneTimePrintingAuthorizationMint: StringPublicKey; + + constructor(args: { + key: MetadataKey; + supply: BN; + maxSupply?: BN; + printingMint: StringPublicKey; + oneTimePrintingAuthorizationMint: StringPublicKey; + }) { + this.key = MetadataKey.MasterEditionV1; + this.supply = args.supply; + this.maxSupply = args.maxSupply; + this.printingMint = args.printingMint; + this.oneTimePrintingAuthorizationMint = + args.oneTimePrintingAuthorizationMint; + } +} + +export class MasterEditionV2 { + key: MetadataKey; + supply: BN; + maxSupply?: BN; + + constructor(args: { key: MetadataKey; supply: BN; maxSupply?: BN }) { + this.key = MetadataKey.MasterEditionV2; + this.supply = args.supply; + this.maxSupply = args.maxSupply; + } +} + +export class EditionMarker { + key: MetadataKey; + ledger: number[]; + + constructor(args: { key: MetadataKey; ledger: number[] }) { + this.key = MetadataKey.EditionMarker; + this.ledger = args.ledger; + } + + editionTaken(edition: number) { + const editionOffset = edition % EDITION_MARKER_BIT_SIZE; + const indexOffset = Math.floor(editionOffset / 8); + + if (indexOffset > 30) { + throw Error('bad index for edition'); + } + + const positionInBitsetFromRight = 7 - (editionOffset % 8); + + const mask = Math.pow(2, positionInBitsetFromRight); + + const appliedMask = this.ledger[indexOffset] & mask; + + return appliedMask != 0; + } +} + +export class Edition { + key: MetadataKey; + /// Points at MasterEdition struct + parent: StringPublicKey; + /// Starting at 0 for master record, this is incremented for each edition minted. + edition: BN; + + constructor(args: { + key: MetadataKey; + parent: StringPublicKey; + edition: BN; + }) { + this.key = MetadataKey.EditionV1; + this.parent = args.parent; + this.edition = args.edition; + } +} +export class Creator { + address: StringPublicKey; + verified: boolean; + share: number; + + constructor(args: { + address: StringPublicKey; + verified: boolean; + share: number; + }) { + this.address = args.address; + this.verified = args.verified; + this.share = args.share; + } +} + +export class Data { + name: string; + symbol: string; + uri: string; + sellerFeeBasisPoints: number; + creators: Creator[] | null; + constructor(args: { + name: string; + symbol: string; + uri: string; + sellerFeeBasisPoints: number; + creators: Creator[] | null; + }) { + this.name = args.name; + this.symbol = args.symbol; + this.uri = args.uri; + this.sellerFeeBasisPoints = args.sellerFeeBasisPoints; + this.creators = args.creators; + } +} + +export class Metadata { + key: MetadataKey; + updateAuthority: StringPublicKey; + mint: StringPublicKey; + data: Data; + primarySaleHappened: boolean; + isMutable: boolean; + editionNonce: number | null; + + // set lazy + masterEdition?: StringPublicKey; + edition?: StringPublicKey; + + constructor(args: { + updateAuthority: StringPublicKey; + mint: StringPublicKey; + data: Data; + primarySaleHappened: boolean; + isMutable: boolean; + editionNonce: number | null; + }) { + this.key = MetadataKey.MetadataV1; + this.updateAuthority = args.updateAuthority; + this.mint = args.mint; + this.data = args.data; + this.primarySaleHappened = args.primarySaleHappened; + this.isMutable = args.isMutable; + this.editionNonce = args.editionNonce ?? null; + } + + public async init() { + const metadata = toPublicKey(programIds().metadata); + /* + This nonce stuff doesnt work - we are doing something wrong here. TODO fix. + if (this.editionNonce !== null) { + this.edition = ( + await PublicKey.createProgramAddress( + [ + Buffer.from(METADATA_PREFIX), + metadata.toBuffer(), + toPublicKey(this.mint).toBuffer(), + new Uint8Array([this.editionNonce || 0]), + ], + metadata, + ) + ).toBase58(); + } else {*/ + this.edition = await getEdition(this.mint); + //} + this.masterEdition = this.edition; + } +} + +class CreateMetadataArgs { + instruction: number = 0; + data: Data; + isMutable: boolean; + + constructor(args: { data: Data; isMutable: boolean }) { + this.data = args.data; + this.isMutable = args.isMutable; + } +} +class UpdateMetadataArgs { + instruction: number = 1; + data: Data | null; + // Not used by this app, just required for instruction + updateAuthority: StringPublicKey | null; + primarySaleHappened: boolean | null; + constructor(args: { + data?: Data; + updateAuthority?: string; + primarySaleHappened: boolean | null; + }) { + this.data = args.data ? args.data : null; + this.updateAuthority = args.updateAuthority ? args.updateAuthority : null; + this.primarySaleHappened = args.primarySaleHappened; + } +} + +class CreateMasterEditionArgs { + instruction: number = 10; + maxSupply: BN | null; + constructor(args: { maxSupply: BN | null }) { + this.maxSupply = args.maxSupply; + } +} + +class MintPrintingTokensArgs { + instruction: number = 9; + supply: BN; + + constructor(args: { supply: BN }) { + this.supply = args.supply; + } +} + +export const METADATA_SCHEMA = new Map([ + [ + CreateMetadataArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['data', Data], + ['isMutable', 'u8'], // bool + ], + }, + ], + [ + UpdateMetadataArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['data', { kind: 'option', type: Data }], + ['updateAuthority', { kind: 'option', type: 'pubkeyAsString' }], + ['primarySaleHappened', { kind: 'option', type: 'u8' }], + ], + }, + ], + + [ + CreateMasterEditionArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['maxSupply', { kind: 'option', type: 'u64' }], + ], + }, + ], + [ + MintPrintingTokensArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['supply', 'u64'], + ], + }, + ], + [ + MasterEditionV1, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['supply', 'u64'], + ['maxSupply', { kind: 'option', type: 'u64' }], + ['printingMint', 'pubkeyAsString'], + ['oneTimePrintingAuthorizationMint', 'pubkeyAsString'], + ], + }, + ], + [ + MasterEditionV2, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['supply', 'u64'], + ['maxSupply', { kind: 'option', type: 'u64' }], + ], + }, + ], + [ + Edition, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['parent', 'pubkeyAsString'], + ['edition', 'u64'], + ], + }, + ], + [ + Data, + { + kind: 'struct', + fields: [ + ['name', 'string'], + ['symbol', 'string'], + ['uri', 'string'], + ['sellerFeeBasisPoints', 'u16'], + ['creators', { kind: 'option', type: [Creator] }], + ], + }, + ], + [ + Creator, + { + kind: 'struct', + fields: [ + ['address', 'pubkeyAsString'], + ['verified', 'u8'], + ['share', 'u8'], + ], + }, + ], + [ + Metadata, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['updateAuthority', 'pubkeyAsString'], + ['mint', 'pubkeyAsString'], + ['data', Data], + ['primarySaleHappened', 'u8'], // bool + ['isMutable', 'u8'], // bool + ['editionNonce', { kind: 'option', type: 'u8' }], + ], + }, + ], + [ + EditionMarker, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['ledger', [31]], + ], + }, + ], +]); + +// eslint-disable-next-line no-control-regex +const METADATA_REPLACE = new RegExp('\u0000', 'g'); + +export const decodeMetadata = (buffer: Buffer): Metadata => { + const metadata = deserializeUnchecked( + METADATA_SCHEMA, + Metadata, + buffer, + ) as Metadata; + metadata.data.name = metadata.data.name.replace(METADATA_REPLACE, ''); + metadata.data.uri = metadata.data.uri.replace(METADATA_REPLACE, ''); + metadata.data.symbol = metadata.data.symbol.replace(METADATA_REPLACE, ''); + return metadata; +}; + +export const decodeEditionMarker = (buffer: Buffer): EditionMarker => { + const editionMarker = deserializeUnchecked( + METADATA_SCHEMA, + EditionMarker, + buffer, + ) as EditionMarker; + return editionMarker; +}; + +export const decodeEdition = (buffer: Buffer) => { + return deserializeUnchecked(METADATA_SCHEMA, Edition, buffer) as Edition; +}; + +export const decodeMasterEdition = ( + buffer: Buffer, +): MasterEditionV1 | MasterEditionV2 => { + if (buffer[0] == MetadataKey.MasterEditionV1) { + return deserializeUnchecked( + METADATA_SCHEMA, + MasterEditionV1, + buffer, + ) as MasterEditionV1; + } else { + return deserializeUnchecked( + METADATA_SCHEMA, + MasterEditionV2, + buffer, + ) as MasterEditionV2; + } +}; + +export async function updateMetadata( + data: Data | undefined, + newUpdateAuthority: string | undefined, + primarySaleHappened: boolean | null | undefined, + mintKey: StringPublicKey, + updateAuthority: StringPublicKey, + instructions: TransactionInstruction[], + metadataAccount?: StringPublicKey, +) { + const metadataProgramId = programIds().metadata; + + metadataAccount = + metadataAccount || + ( + await findProgramAddress( + [ + Buffer.from('metadata'), + toPublicKey(metadataProgramId).toBuffer(), + toPublicKey(mintKey).toBuffer(), + ], + toPublicKey(metadataProgramId), + ) + )[0]; + + const value = new UpdateMetadataArgs({ + data, + updateAuthority: !newUpdateAuthority ? undefined : newUpdateAuthority, + primarySaleHappened: + primarySaleHappened === null || primarySaleHappened === undefined + ? null + : primarySaleHappened, + }); + const txnData = Buffer.from(serialize(METADATA_SCHEMA, value)); + const keys = [ + { + pubkey: toPublicKey(metadataAccount), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(updateAuthority), + isSigner: true, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(metadataProgramId), + data: txnData, + }), + ); + + return metadataAccount; +} + +export async function createMetadata( + data: Data, + updateAuthority: StringPublicKey, + mintKey: StringPublicKey, + mintAuthorityKey: StringPublicKey, + instructions: TransactionInstruction[], + payer: StringPublicKey, +) { + const metadataProgramId = programIds().metadata; + + const metadataAccount = ( + await findProgramAddress( + [ + Buffer.from('metadata'), + toPublicKey(metadataProgramId).toBuffer(), + toPublicKey(mintKey).toBuffer(), + ], + toPublicKey(metadataProgramId), + ) + )[0]; + console.log('Data', data); + const value = new CreateMetadataArgs({ data, isMutable: true }); + const txnData = Buffer.from(serialize(METADATA_SCHEMA, value)); + + const keys = [ + { + pubkey: toPublicKey(metadataAccount), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(mintKey), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(mintAuthorityKey), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(payer), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(updateAuthority), + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(metadataProgramId), + data: txnData, + }), + ); + + return metadataAccount; +} + +export async function createMasterEdition( + maxSupply: BN | undefined, + mintKey: StringPublicKey, + updateAuthorityKey: StringPublicKey, + mintAuthorityKey: StringPublicKey, + payer: StringPublicKey, + instructions: TransactionInstruction[], +) { + const metadataProgramId = programIds().metadata; + + const metadataAccount = ( + await findProgramAddress( + [ + Buffer.from(METADATA_PREFIX), + toPublicKey(metadataProgramId).toBuffer(), + toPublicKey(mintKey).toBuffer(), + ], + toPublicKey(metadataProgramId), + ) + )[0]; + + const editionAccount = ( + await findProgramAddress( + [ + Buffer.from(METADATA_PREFIX), + toPublicKey(metadataProgramId).toBuffer(), + toPublicKey(mintKey).toBuffer(), + Buffer.from(EDITION), + ], + toPublicKey(metadataProgramId), + ) + )[0]; + + const value = new CreateMasterEditionArgs({ maxSupply: maxSupply || null }); + const data = Buffer.from(serialize(METADATA_SCHEMA, value)); + + const keys = [ + { + pubkey: toPublicKey(editionAccount), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(mintKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(updateAuthorityKey), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(mintAuthorityKey), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(payer), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(metadataAccount), + isSigner: false, + isWritable: false, + }, + + { + pubkey: programIds().token, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(metadataProgramId), + data, + }), + ); +} + +export async function deprecatedMintNewEditionFromMasterEditionViaPrintingToken( + newMint: StringPublicKey, + tokenMint: StringPublicKey, + newMintAuthority: StringPublicKey, + printingMint: StringPublicKey, + authorizationTokenHoldingAccount: StringPublicKey, + burnAuthority: StringPublicKey, + updateAuthorityOfMaster: StringPublicKey, + reservationList: StringPublicKey | undefined, + instructions: TransactionInstruction[], + payer: StringPublicKey, +) { + const metadataProgramId = programIds().metadata; + + const newMetadataKey = await getMetadata(newMint); + const masterMetadataKey = await getMetadata(tokenMint); + const newEdition = await getEdition(newMint); + const masterEdition = await getEdition(tokenMint); + + const data = Buffer.from([3]); + + const keys = [ + { + pubkey: toPublicKey(newMetadataKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(newEdition), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(masterEdition), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(newMint), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(newMintAuthority), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(printingMint), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(authorizationTokenHoldingAccount), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(burnAuthority), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(payer), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(updateAuthorityOfMaster), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(masterMetadataKey), + isSigner: false, + isWritable: false, + }, + { + pubkey: programIds().token, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + + if (reservationList) { + keys.push({ + pubkey: toPublicKey(reservationList), + isSigner: false, + isWritable: true, + }); + } + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(metadataProgramId), + data, + }), + ); +} + +export async function mintNewEditionFromMasterEditionViaToken( + newMint: StringPublicKey, + tokenMint: StringPublicKey, + newMintAuthority: StringPublicKey, + newUpdateAuthority: StringPublicKey, + tokenOwner: StringPublicKey, + tokenAccount: StringPublicKey, + instructions: TransactionInstruction[], + payer: StringPublicKey, + edition: BN, +) { + const metadataProgramId = programIds().metadata; + + const newMetadataKey = await getMetadata(newMint); + const masterMetadataKey = await getMetadata(tokenMint); + const newEdition = await getEdition(newMint); + const masterEdition = await getEdition(tokenMint); + const editionMarkPda = await getEditionMarkPda(tokenMint, edition); + + const data = Buffer.from([11, ...edition.toArray('le', 8)]); + + const keys = [ + { + pubkey: toPublicKey(newMetadataKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(newEdition), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(masterEdition), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(newMint), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(editionMarkPda), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(newMintAuthority), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(payer), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(tokenOwner), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(tokenAccount), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(newUpdateAuthority), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(masterMetadataKey), + isSigner: false, + isWritable: false, + }, + { + pubkey: programIds().token, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(metadataProgramId), + data, + }), + ); +} + +export async function updatePrimarySaleHappenedViaToken( + metadata: StringPublicKey, + owner: StringPublicKey, + tokenAccount: StringPublicKey, + instructions: TransactionInstruction[], +) { + const metadataProgramId = programIds().metadata; + + const data = Buffer.from([4]); + + const keys = [ + { + pubkey: toPublicKey(metadata), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(owner), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(tokenAccount), + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(metadataProgramId), + data, + }), + ); +} + +export async function deprecatedCreateReservationList( + metadata: StringPublicKey, + masterEdition: StringPublicKey, + resource: StringPublicKey, + updateAuthority: StringPublicKey, + payer: StringPublicKey, + instructions: TransactionInstruction[], +) { + const metadataProgramId = programIds().metadata; + + const reservationList = await deprecatedGetReservationList( + masterEdition, + resource, + ); + const data = Buffer.from([6]); + + const keys = [ + { + pubkey: toPublicKey(reservationList), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(payer), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(updateAuthority), + isSigner: true, + isWritable: false, + }, + + { + pubkey: toPublicKey(masterEdition), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(resource), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(metadata), + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(metadataProgramId), + data, + }), + ); +} + +export async function signMetadata( + metadata: StringPublicKey, + creator: StringPublicKey, + instructions: TransactionInstruction[], +) { + const metadataProgramId = programIds().metadata; + + const data = Buffer.from([7]); + + const keys = [ + { + pubkey: toPublicKey(metadata), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(creator), + isSigner: true, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(metadataProgramId), + data, + }), + ); +} + +export async function deprecatedMintPrintingTokens( + destination: StringPublicKey, + printingMint: StringPublicKey, + updateAuthority: StringPublicKey, + metadata: StringPublicKey, + masterEdition: StringPublicKey, + supply: BN, + instructions: TransactionInstruction[], +) { + const PROGRAM_IDS = programIds(); + const metadataProgramId = PROGRAM_IDS.metadata; + + const value = new MintPrintingTokensArgs({ supply }); + const data = Buffer.from(serialize(METADATA_SCHEMA, value)); + + const keys = [ + { + pubkey: toPublicKey(destination), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(printingMint), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(updateAuthority), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(metadata), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(masterEdition), + isSigner: false, + isWritable: false, + }, + { + pubkey: PROGRAM_IDS.token, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(metadataProgramId), + data, + }), + ); +} + +export async function convertMasterEditionV1ToV2( + masterEdition: StringPublicKey, + oneTimeAuthMint: StringPublicKey, + printingMint: StringPublicKey, + instructions: TransactionInstruction[], +) { + const metadataProgramId = programIds().metadata; + + const data = Buffer.from([12]); + + const keys = [ + { + pubkey: toPublicKey(masterEdition), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(oneTimeAuthMint), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(printingMint), + isSigner: false, + isWritable: true, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(metadataProgramId), + data, + }), + ); +} + +export async function getEdition( + tokenMint: StringPublicKey, +): Promise { + const PROGRAM_IDS = programIds(); + + return ( + await findProgramAddress( + [ + Buffer.from(METADATA_PREFIX), + toPublicKey(PROGRAM_IDS.metadata).toBuffer(), + toPublicKey(tokenMint).toBuffer(), + Buffer.from(EDITION), + ], + toPublicKey(PROGRAM_IDS.metadata), + ) + )[0]; +} + +export async function getMetadata( + tokenMint: StringPublicKey, +): Promise { + const PROGRAM_IDS = programIds(); + + return ( + await findProgramAddress( + [ + Buffer.from(METADATA_PREFIX), + toPublicKey(PROGRAM_IDS.metadata).toBuffer(), + toPublicKey(tokenMint).toBuffer(), + ], + toPublicKey(PROGRAM_IDS.metadata), + ) + )[0]; +} + +export async function deprecatedGetReservationList( + masterEdition: StringPublicKey, + resource: StringPublicKey, +): Promise { + const PROGRAM_IDS = programIds(); + + return ( + await findProgramAddress( + [ + Buffer.from(METADATA_PREFIX), + toPublicKey(PROGRAM_IDS.metadata).toBuffer(), + toPublicKey(masterEdition).toBuffer(), + Buffer.from(RESERVATION), + toPublicKey(resource).toBuffer(), + ], + toPublicKey(PROGRAM_IDS.metadata), + ) + )[0]; +} + +export async function getEditionMarkPda( + mint: StringPublicKey, + edition: BN, +): Promise { + const PROGRAM_IDS = programIds(); + const editionNumber = Math.floor(edition.toNumber() / 248); + + return ( + await findProgramAddress( + [ + Buffer.from(METADATA_PREFIX), + toPublicKey(PROGRAM_IDS.metadata).toBuffer(), + toPublicKey(mint).toBuffer(), + Buffer.from(EDITION), + Buffer.from(editionNumber.toString()), + ], + toPublicKey(PROGRAM_IDS.metadata), + ) + )[0]; +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/actions/vault.ts b/CandyMachine-Storefront/store/js/packages/common/src/actions/vault.ts new file mode 100644 index 0000000..8e1a58a --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/actions/vault.ts @@ -0,0 +1,769 @@ +import { + SystemProgram, + SYSVAR_RENT_PUBKEY, + TransactionInstruction, +} from '@solana/web3.js'; +import { programIds } from '../utils/programIds'; +import { deserializeUnchecked, serialize } from 'borsh'; +import BN from 'bn.js'; +import { findProgramAddress, StringPublicKey, toPublicKey } from '../utils'; + +export const VAULT_PREFIX = 'vault'; +export enum VaultKey { + Uninitialized = 0, + VaultV1 = 3, + SafetyDepositBoxV1 = 1, + ExternalPriceAccountV1 = 2, +} + +export enum VaultState { + Inactive = 0, + Active = 1, + Combined = 2, + Deactivated = 3, +} + +export const MAX_VAULT_SIZE = + 1 + 32 + 32 + 32 + 32 + 1 + 32 + 1 + 32 + 1 + 1 + 8; + +export const MAX_EXTERNAL_ACCOUNT_SIZE = 1 + 8 + 32 + 1; +export class Vault { + key: VaultKey; + /// Store token program used + tokenProgram: StringPublicKey; + /// Mint that produces the fractional shares + fractionMint: StringPublicKey; + /// Authority who can make changes to the vault + authority: StringPublicKey; + /// treasury where fractional shares are held for redemption by authority + fractionTreasury: StringPublicKey; + /// treasury where monies are held for fractional share holders to redeem(burn) shares once buyout is made + redeemTreasury: StringPublicKey; + /// Can authority mint more shares from fraction_mint after activation + allowFurtherShareCreation: boolean; + + /// Must point at an ExternalPriceAccount, which gives permission and price for buyout. + pricingLookupAddress: StringPublicKey; + /// 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. + tokenTypeCount: number; + 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 + lockedPricePerShare: BN; + + constructor(args: { + tokenProgram: StringPublicKey; + fractionMint: StringPublicKey; + authority: StringPublicKey; + fractionTreasury: StringPublicKey; + redeemTreasury: StringPublicKey; + allowFurtherShareCreation: boolean; + pricingLookupAddress: StringPublicKey; + tokenTypeCount: number; + state: VaultState; + lockedPricePerShare: BN; + }) { + this.key = VaultKey.VaultV1; + this.tokenProgram = args.tokenProgram; + this.fractionMint = args.fractionMint; + this.authority = args.authority; + this.fractionTreasury = args.fractionTreasury; + this.redeemTreasury = args.redeemTreasury; + this.allowFurtherShareCreation = args.allowFurtherShareCreation; + this.pricingLookupAddress = args.pricingLookupAddress; + this.tokenTypeCount = args.tokenTypeCount; + this.state = args.state; + this.lockedPricePerShare = args.lockedPricePerShare; + } +} +export class SafetyDepositBox { + /// Each token type in a vault has it's own box that contains it's mint and a look-back + key: VaultKey; + /// VaultKey pointing to the parent vault + vault: StringPublicKey; + /// This particular token's mint + tokenMint: StringPublicKey; + /// Account that stores the tokens under management + store: StringPublicKey; + /// the order in the array of registries + order: number; + + constructor(args: { + vault: StringPublicKey; + tokenMint: StringPublicKey; + store: StringPublicKey; + order: number; + }) { + this.key = VaultKey.SafetyDepositBoxV1; + this.vault = args.vault; + this.tokenMint = args.tokenMint; + this.store = args.store; + this.order = args.order; + } +} + +export class ExternalPriceAccount { + key: VaultKey; + pricePerShare: BN; + /// 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. + priceMint: StringPublicKey; + /// Whether or not combination has been allowed for this vault. + allowedToCombine: boolean; + + constructor(args: { + pricePerShare: BN; + priceMint: StringPublicKey; + allowedToCombine: boolean; + }) { + this.key = VaultKey.ExternalPriceAccountV1; + this.pricePerShare = args.pricePerShare; + this.priceMint = args.priceMint; + this.allowedToCombine = args.allowedToCombine; + } +} + +class InitVaultArgs { + instruction: number = 0; + allowFurtherShareCreation: boolean = false; + + constructor(args: { allowFurtherShareCreation: boolean }) { + this.allowFurtherShareCreation = args.allowFurtherShareCreation; + } +} + +class AmountArgs { + instruction: number; + amount: BN; + + constructor(args: { instruction: number; amount: BN }) { + this.instruction = args.instruction; + this.amount = args.amount; + } +} + +class NumberOfShareArgs { + instruction: number; + numberOfShares: BN; + + constructor(args: { instruction: number; numberOfShares: BN }) { + this.instruction = args.instruction; + this.numberOfShares = args.numberOfShares; + } +} + +class UpdateExternalPriceAccountArgs { + instruction: number = 9; + externalPriceAccount: ExternalPriceAccount; + + constructor(args: { externalPriceAccount: ExternalPriceAccount }) { + this.externalPriceAccount = args.externalPriceAccount; + } +} + +export const VAULT_SCHEMA = new Map([ + [ + InitVaultArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['allowFurtherShareCreation', 'u8'], + ], + }, + ], + [ + AmountArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['amount', 'u64'], + ], + }, + ], + [ + NumberOfShareArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['numberOfShares', 'u64'], + ], + }, + ], + [ + UpdateExternalPriceAccountArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['externalPriceAccount', ExternalPriceAccount], + ], + }, + ], + [ + Vault, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['tokenProgram', 'pubkeyAsString'], + ['fractionMint', 'pubkeyAsString'], + ['authority', 'pubkeyAsString'], + ['fractionTreasury', 'pubkeyAsString'], + ['redeemTreasury', 'pubkeyAsString'], + ['allowFurtherShareCreation', 'u8'], + ['pricingLookupAddress', 'pubkeyAsString'], + ['tokenTypeCount', 'u8'], + ['state', 'u8'], + ['lockedPricePerShare', 'u64'], + ], + }, + ], + [ + SafetyDepositBox, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['vault', 'pubkeyAsString'], + ['tokenMint', 'pubkeyAsString'], + ['store', 'pubkeyAsString'], + ['order', 'u8'], + ], + }, + ], + [ + ExternalPriceAccount, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['pricePerShare', 'u64'], + ['priceMint', 'pubkeyAsString'], + ['allowedToCombine', 'u8'], + ], + }, + ], +]); + +export const decodeVault = (buffer: Buffer) => { + return deserializeUnchecked(VAULT_SCHEMA, Vault, buffer) as Vault; +}; + +export const decodeExternalPriceAccount = (buffer: Buffer) => { + return deserializeUnchecked( + VAULT_SCHEMA, + ExternalPriceAccount, + buffer, + ) as ExternalPriceAccount; +}; + +export const decodeSafetyDeposit = (buffer: Buffer) => { + return deserializeUnchecked( + VAULT_SCHEMA, + SafetyDepositBox, + buffer, + ) as SafetyDepositBox; +}; + +export async function setVaultAuthority( + vault: StringPublicKey, + currentAuthority: StringPublicKey, + newAuthority: StringPublicKey, + instructions: TransactionInstruction[], +) { + const vaultProgramId = programIds().vault; + + const data = Buffer.from([10]); + + const keys = [ + { + pubkey: toPublicKey(vault), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(currentAuthority), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(newAuthority), + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(vaultProgramId), + data: data, + }), + ); +} + +export async function initVault( + allowFurtherShareCreation: boolean, + fractionalMint: StringPublicKey, + redeemTreasury: StringPublicKey, + fractionalTreasury: StringPublicKey, + vault: StringPublicKey, + vaultAuthority: StringPublicKey, + pricingLookupAddress: StringPublicKey, + instructions: TransactionInstruction[], +) { + const vaultProgramId = programIds().vault; + + const data = Buffer.from( + serialize(VAULT_SCHEMA, new InitVaultArgs({ allowFurtherShareCreation })), + ); + + const keys = [ + { + pubkey: toPublicKey(fractionalMint), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(redeemTreasury), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(fractionalTreasury), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(vault), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(vaultAuthority), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(pricingLookupAddress), + isSigner: false, + isWritable: false, + }, + { + pubkey: programIds().token, + isSigner: false, + isWritable: false, + }, + + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(vaultProgramId), + data: data, + }), + ); +} + +export async function getSafetyDepositBox( + vault: StringPublicKey, + tokenMint: StringPublicKey, +): Promise { + const vaultProgramId = programIds().vault; + + return ( + await findProgramAddress( + [ + Buffer.from(VAULT_PREFIX), + toPublicKey(vault).toBuffer(), + toPublicKey(tokenMint).toBuffer(), + ], + toPublicKey(vaultProgramId), + ) + )[0]; +} + +export async function addTokenToInactiveVault( + amount: BN, + tokenMint: StringPublicKey, + tokenAccount: StringPublicKey, + tokenStoreAccount: StringPublicKey, + vault: StringPublicKey, + vaultAuthority: StringPublicKey, + payer: StringPublicKey, + transferAuthority: StringPublicKey, + instructions: TransactionInstruction[], +) { + const vaultProgramId = programIds().vault; + + const safetyDepositBox = await getSafetyDepositBox(vault, tokenMint); + + const value = new AmountArgs({ + instruction: 1, + amount, + }); + + const data = Buffer.from(serialize(VAULT_SCHEMA, value)); + const keys = [ + { + pubkey: toPublicKey(safetyDepositBox), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(tokenAccount), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(tokenStoreAccount), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(vault), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(vaultAuthority), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(payer), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(transferAuthority), + isSigner: true, + isWritable: false, + }, + { + pubkey: programIds().token, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(vaultProgramId), + data, + }), + ); +} + +export async function activateVault( + numberOfShares: BN, + vault: StringPublicKey, + fractionMint: StringPublicKey, + fractionTreasury: StringPublicKey, + vaultAuthority: StringPublicKey, + instructions: TransactionInstruction[], +) { + const vaultProgramId = programIds().vault; + + const fractionMintAuthority = ( + await findProgramAddress( + [ + Buffer.from(VAULT_PREFIX), + toPublicKey(vaultProgramId).toBuffer(), + toPublicKey(vault).toBuffer(), + ], + toPublicKey(vaultProgramId), + ) + )[0]; + + const value = new NumberOfShareArgs({ instruction: 2, numberOfShares }); + const data = Buffer.from(serialize(VAULT_SCHEMA, value)); + + const keys = [ + { + pubkey: toPublicKey(vault), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(fractionMint), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(fractionTreasury), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(fractionMintAuthority), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(vaultAuthority), + isSigner: true, + isWritable: false, + }, + { + pubkey: programIds().token, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(vaultProgramId), + data, + }), + ); +} + +export async function combineVault( + vault: StringPublicKey, + outstandingShareTokenAccount: StringPublicKey, + payingTokenAccount: StringPublicKey, + fractionMint: StringPublicKey, + fractionTreasury: StringPublicKey, + redeemTreasury: StringPublicKey, + newVaultAuthority: StringPublicKey | undefined, + vaultAuthority: StringPublicKey, + transferAuthority: StringPublicKey, + externalPriceAccount: StringPublicKey, + instructions: TransactionInstruction[], +) { + const vaultProgramId = programIds().vault; + + const burnAuthority = ( + await findProgramAddress( + [ + Buffer.from(VAULT_PREFIX), + toPublicKey(vaultProgramId).toBuffer(), + toPublicKey(vault).toBuffer(), + ], + toPublicKey(vaultProgramId), + ) + )[0]; + + const data = Buffer.from([3]); + + const keys = [ + { + pubkey: toPublicKey(vault), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(outstandingShareTokenAccount), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(payingTokenAccount), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(fractionMint), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(fractionTreasury), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(redeemTreasury), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(newVaultAuthority || vaultAuthority), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(vaultAuthority), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(transferAuthority), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(burnAuthority), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(externalPriceAccount), + isSigner: false, + isWritable: false, + }, + { + pubkey: programIds().token, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(vaultProgramId), + data, + }), + ); +} + +export async function withdrawTokenFromSafetyDepositBox( + amount: BN, + destination: StringPublicKey, + safetyDepositBox: StringPublicKey, + storeKey: StringPublicKey, + vault: StringPublicKey, + fractionMint: StringPublicKey, + vaultAuthority: StringPublicKey, + instructions: TransactionInstruction[], +) { + const vaultProgramId = programIds().vault; + + const transferAuthority = ( + await findProgramAddress( + [ + Buffer.from(VAULT_PREFIX), + toPublicKey(vaultProgramId).toBuffer(), + toPublicKey(vault).toBuffer(), + ], + toPublicKey(vaultProgramId), + ) + )[0]; + + const value = new AmountArgs({ instruction: 5, amount }); + const data = Buffer.from(serialize(VAULT_SCHEMA, value)); + + const keys = [ + { + pubkey: toPublicKey(destination), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(safetyDepositBox), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(storeKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(vault), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(fractionMint), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(vaultAuthority), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(transferAuthority), + isSigner: false, + isWritable: false, + }, + { + pubkey: programIds().token, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(vaultProgramId), + data, + }), + ); +} + +export async function updateExternalPriceAccount( + externalPriceAccountKey: StringPublicKey, + externalPriceAccount: ExternalPriceAccount, + instructions: TransactionInstruction[], +) { + const vaultProgramId = programIds().vault; + + const value = new UpdateExternalPriceAccountArgs({ externalPriceAccount }); + const data = Buffer.from(serialize(VAULT_SCHEMA, value)); + console.log('Data', data); + + const keys = [ + { + pubkey: toPublicKey(externalPriceAccountKey), + isSigner: false, + isWritable: true, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(vaultProgramId), + data, + }), + ); +} + +export async function getSafetyDepositBoxAddress( + vault: StringPublicKey, + tokenMint: StringPublicKey, +): Promise { + const PROGRAM_IDS = programIds(); + return ( + await findProgramAddress( + [ + Buffer.from(VAULT_PREFIX), + toPublicKey(vault).toBuffer(), + toPublicKey(tokenMint).toBuffer(), + ], + toPublicKey(PROGRAM_IDS.vault), + ) + )[0]; +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/components/ActionConfirmation/index.tsx b/CandyMachine-Storefront/store/js/packages/common/src/components/ActionConfirmation/index.tsx new file mode 100644 index 0000000..9eb0ec7 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/components/ActionConfirmation/index.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import { Button } from 'antd'; +import { LABELS } from '../../constants'; +import { Link } from 'react-router-dom'; + +export const ActionConfirmation = (props: { + className?: string; + onClose: () => void; +}) => { + return ( +

+

Congratulations!

+
Your action has been successfully executed
+
+ + + + +
+ ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/components/ActionConfirmation/style.less b/CandyMachine-Storefront/store/js/packages/common/src/components/ActionConfirmation/style.less new file mode 100644 index 0000000..64d27b2 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/components/ActionConfirmation/style.less @@ -0,0 +1,5 @@ +.success-icon { + background-image: url('data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9JzMwMHB4JyB3aWR0aD0nMzAwcHgnICBmaWxsPSIjNzBjMDQxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGRhdGEtbmFtZT0iTGF5ZXIgMSIgdmlld0JveD0iMCAwIDY0IDY0IiB4PSIwcHgiIHk9IjBweCI+PHRpdGxlPmJ1c2luZXNzIGZpbmFuY2UgdXAgcmlzZSBhcnJvdyBkZW1hbmQ8L3RpdGxlPjxwYXRoIGQ9Ik01LDE0YTEsMSwwLDEsMC0xLTFINEExLDEsMCwwLDAsNSwxNFoiPjwvcGF0aD48cGF0aCBkPSJNNyw1Mkg1NWExLDEsMCwwLDAsMC0ySDUwVjI3YTEsMSwwLDAsMC0yLDBWNTBINDRWMzRhMSwxLDAsMCwwLTIsMFY1MEgzOFYzOWExLDEsMCwwLDAtMiwwVjUwSDMyVjQzYTEsMSwwLDAsMC0yLDB2N0gyNlY0NmExLDEsMCwwLDAtMiwwdjRIMjBWNDdhMSwxLDAsMCwwLTIsMHYzSDE0VjQ4YTEsMSwwLDAsMC0yLDB2Mkg3YTEsMSwwLDAsMS0xLTFWMTdhMSwxLDAsMCwwLTIsMFY0OUEzLDMsMCwwLDAsNyw1MloiPjwvcGF0aD48cGF0aCBkPSJNNTksNTBhMSwxLDAsMCwwLTEsMWgwYTEsMSwwLDEsMCwxLTFaIj48L3BhdGg+PHBhdGggZD0iTTExLDQ0aC4wN2E0OS4wNyw0OS4wNywwLDAsMCwyNS41Mi05LjE5QTQ4LjkxLDQ4LjkxLDAsMCwwLDQ5LjcsMjAuNTlMNTIuMzgsMjIsNTIsMTRsLTYuNzEsNC4zMSwyLjYzLDEuMzZBNDYuODEsNDYuODEsMCwwLDEsMzUuNDEsMzMuMTksNDYuOTQsNDYuOTQsMCwwLDEsMTAuOTMsNDIsMSwxLDAsMCwwLDExLDQ0WiI+PC9wYXRoPjwvc3ZnPg=='); + width: 280px; + height: 280px; +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/components/AppBar/index.tsx b/CandyMachine-Storefront/store/js/packages/common/src/components/AppBar/index.tsx new file mode 100644 index 0000000..ece71b2 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/components/AppBar/index.tsx @@ -0,0 +1,49 @@ +import React from 'react'; +import { Button, Popover } from 'antd'; +import { CurrentUserBadge } from '../CurrentUserBadge'; +import { SettingOutlined } from '@ant-design/icons'; +import { Settings } from '../Settings'; +import { LABELS } from '../../constants/labels'; +import { ConnectButton } from '..'; +import { useWallet } from '@solana/wallet-adapter-react'; + +export const AppBar = (props: { + left?: JSX.Element; + right?: JSX.Element; + useWalletBadge?: boolean; + additionalSettings?: JSX.Element; +}) => { + const { connected } = useWallet(); + + const TopBar = ( +
+ {props.left} + {connected ? ( + + ) : ( + + )} + } + trigger="click" + > +
+ ); + + return TopBar; +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/components/AppBar/style.less b/CandyMachine-Storefront/store/js/packages/common/src/components/AppBar/style.less new file mode 100644 index 0000000..0c8bfca --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/components/AppBar/style.less @@ -0,0 +1,57 @@ +.App-Bar { + -webkit-box-pack: justify; + justify-content: space-between !important; + -webkit-box-align: center; + align-items: center; + flex-direction: row; + display: flex; + width: 100%; + top: 0px; + position: relative; + padding: 1rem; + z-index: 2; + + .ant-menu-horizontal { + border-bottom-color: transparent; + background-color: transparent; + line-height: inherit; + font-size: 16px; + margin: 0 10px; + + .ant-menu-item { + margin: 0 10px; + color: lightgrey; + height: 35px; + line-height: 35px; + border-width: 0px !important; + } + + .ant-menu-item:hover { + color: white; + border-width: 0px !important; + } + + .ant-menu-item-selected { + font-weight: bold; + } + } +} + +.App-Bar-left { + box-sizing: border-box; + margin: 0px; + min-width: 0px; + display: flex; + padding: 0px; + -webkit-box-align: center; + align-items: center; + width: fit-content; +} + +.App-Bar-right { + display: flex; + flex-direction: row; + -webkit-box-align: center; + align-items: center; + justify-self: flex-end; +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/components/BackButton/index.tsx b/CandyMachine-Storefront/store/js/packages/common/src/components/BackButton/index.tsx new file mode 100644 index 0000000..82ce886 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/components/BackButton/index.tsx @@ -0,0 +1,13 @@ +import React from 'react'; +import { Button } from 'antd'; +import { LABELS } from '../../constants'; +import { useHistory } from 'react-router-dom'; + +export const BackButton = () => { + const history = useHistory(); + return ( + + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/components/ConnectButton/index.tsx b/CandyMachine-Storefront/store/js/packages/common/src/components/ConnectButton/index.tsx new file mode 100644 index 0000000..de642b8 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/components/ConnectButton/index.tsx @@ -0,0 +1,48 @@ +import { Button, Dropdown, Menu } from 'antd'; +import { ButtonProps } from 'antd/lib/button'; +import React, { useCallback } from 'react'; +import { useWallet } from '@solana/wallet-adapter-react'; +import { useWalletModal } from '../../contexts'; + +export interface ConnectButtonProps + extends ButtonProps, + React.RefAttributes { + allowWalletChange?: boolean; +} + +export const ConnectButton = (props: ConnectButtonProps) => { + const { onClick, children, disabled, allowWalletChange, ...rest } = props; + + const { wallet, connect, connected } = useWallet(); + const { setVisible } = useWalletModal(); + const open = useCallback(() => setVisible(true), [setVisible]); + + const handleClick = useCallback( + () => (wallet ? connect().catch(() => {}) : open()), + [wallet, connect, open], + ); + + // only show if wallet selected or user connected + + if (!wallet || !allowWalletChange) { + return ( + + ); + } + + return ( + + Change Wallet + + } + > + Connect + + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/components/CurrentUserBadge/index.tsx b/CandyMachine-Storefront/store/js/packages/common/src/components/CurrentUserBadge/index.tsx new file mode 100644 index 0000000..b9eb2a0 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/components/CurrentUserBadge/index.tsx @@ -0,0 +1,65 @@ +import React from 'react'; +import { LAMPORTS_PER_SOL } from '@solana/web3.js'; +import { useWallet } from '@solana/wallet-adapter-react'; +import { useNativeAccount } from '../../contexts/accounts'; +import { formatNumber } from '../../utils'; +import { Popover } from 'antd'; +import { Settings } from '../Settings'; + +export const CurrentUserBadge = (props: { + showBalance?: boolean; + showAddress?: boolean; + iconSize?: number; +}) => { + const { wallet, publicKey } = useWallet(); + const { account } = useNativeAccount(); + + if (!wallet || !publicKey) { + return null; + } + + const iconStyle: React.CSSProperties = props.showAddress + ? { + marginLeft: '0.5rem', + display: 'flex', + width: props.iconSize || 20, + borderRadius: 50, + } + : { + display: 'flex', + width: props.iconSize || 20, + paddingLeft: 0, + borderRadius: 50, + }; + + const baseWalletKey: React.CSSProperties = { + height: props.iconSize, + cursor: 'pointer', + userSelect: 'none', + }; + const walletKeyStyle: React.CSSProperties = props.showAddress + ? baseWalletKey + : { ...baseWalletKey, paddingLeft: 0 }; + + return ( +
+ {props.showBalance && ( + + {formatNumber.format((account?.lamports || 0) / LAMPORTS_PER_SOL)} SOL + + )} + + } + trigger="click" + > +
+ {wallet.name} + +
+
+
+ ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/components/CurrentUserBadge/styles.less b/CandyMachine-Storefront/store/js/packages/common/src/components/CurrentUserBadge/styles.less new file mode 100644 index 0000000..5940a94 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/components/CurrentUserBadge/styles.less @@ -0,0 +1,15 @@ +.wallet-wrapper { + padding-left: 0.7rem; + border-radius: 0.5rem; + display: flex; + align-items: center; + white-space: nowrap; +} + +.wallet-key { + padding: 0.1rem 0.5rem 0.1rem 0.7rem; + margin-left: 0.3rem; + border-radius: 0.5rem; + display: flex; + align-items: center; +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/components/EtherscanLink/index.tsx b/CandyMachine-Storefront/store/js/packages/common/src/components/EtherscanLink/index.tsx new file mode 100644 index 0000000..745daf3 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/components/EtherscanLink/index.tsx @@ -0,0 +1,39 @@ +import React from 'react'; +import { Typography } from 'antd'; +import { shortenAddress } from '../../utils/utils'; + +export const EtherscanLink = (props: { + address: string; + type: string; + code?: boolean; + style?: React.CSSProperties; + length?: number; +}) => { + const { type, code } = props; + + const address = props.address; + + if (!address) { + return null; + } + + const length = props.length ?? 9; + + return ( +
+ {code ? ( + + {shortenAddress(address, length)} + + ) : ( + shortenAddress(address, length) + )} + + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/components/ExplorerLink/index.tsx b/CandyMachine-Storefront/store/js/packages/common/src/components/ExplorerLink/index.tsx new file mode 100644 index 0000000..32fcc06 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/components/ExplorerLink/index.tsx @@ -0,0 +1,43 @@ +import React from 'react'; +import { Typography } from 'antd'; +import { shortenAddress } from '../../utils/utils'; +import { PublicKey } from '@solana/web3.js'; + +export const ExplorerLink = (props: { + address: string | PublicKey; + type: string; + code?: boolean; + style?: React.CSSProperties; + length?: number; +}) => { + const { type, code } = props; + + const address = + typeof props.address === 'string' + ? props.address + : props.address?.toBase58(); + + if (!address) { + return null; + } + + const length = props.length ?? 9; + + return ( + + {code ? ( + + {shortenAddress(address, length)} + + ) : ( + shortenAddress(address, length) + )} + + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/components/Icons/info.tsx b/CandyMachine-Storefront/store/js/packages/common/src/components/Icons/info.tsx new file mode 100644 index 0000000..6ef9758 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/components/Icons/info.tsx @@ -0,0 +1,20 @@ +import { Button, Popover } from 'antd'; +import React from 'react'; + +import { InfoCircleOutlined } from '@ant-design/icons'; + +export const Info = (props: { + text: React.ReactElement; + style?: React.CSSProperties; +}) => { + return ( + {props.text}
} + > + + + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/components/Identicon/index.tsx b/CandyMachine-Storefront/store/js/packages/common/src/components/Identicon/index.tsx new file mode 100644 index 0000000..bb9d7e8 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/components/Identicon/index.tsx @@ -0,0 +1,45 @@ +import React, { useEffect, useRef } from 'react'; + +import Jazzicon from 'jazzicon'; +import bs58 from 'bs58'; +import { PublicKey } from '@solana/web3.js'; + +export const Identicon = (props: { + address?: string | PublicKey; + style?: React.CSSProperties; + className?: string; + alt?: string; +}) => { + const { style, className, alt } = props; + const address = + typeof props.address === 'string' + ? props.address + : props.address?.toBase58(); + const ref = useRef(); + + useEffect(() => { + if (address && ref.current) { + try { + ref.current.innerHTML = ''; + ref.current.className = className || ''; + ref.current.appendChild( + Jazzicon( + style?.width || 16, + parseInt(bs58.decode(address).toString('hex').slice(5, 15), 16), + ), + ); + } catch (err) { + // TODO + } + } + }, [address, style, className]); + + return ( +
+ ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/components/Identicon/style.less b/CandyMachine-Storefront/store/js/packages/common/src/components/Identicon/style.less new file mode 100644 index 0000000..4b04246 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/components/Identicon/style.less @@ -0,0 +1,8 @@ +.identicon-wrapper { + display: flex; + height: 1rem; + width: 1rem; + border-radius: 1.125rem; + margin: 0.2rem 0.2rem 0.2rem 0.1rem; + /* background-color: ${({ theme }) => theme.bg4}; */ +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/components/Input/numeric.tsx b/CandyMachine-Storefront/store/js/packages/common/src/components/Input/numeric.tsx new file mode 100644 index 0000000..84ebc77 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/components/Input/numeric.tsx @@ -0,0 +1,43 @@ +import React from 'react'; +import { Input } from 'antd'; + +export class NumericInput extends React.Component { + onChange = (e: any) => { + const { value } = e.target; + const reg = /^-?\d*(\.\d*)?$/; + if (reg.test(value) || value === '' || value === '-') { + this.props.onChange(value); + } + }; + + // '.' at the end or only '-' in the input box. + onBlur = () => { + const { value, onBlur, onChange } = this.props; + let valueTemp = value; + if (value === undefined || value === null) return; + if ( + value.charAt && + (value.charAt(value.length - 1) === '.' || value === '-') + ) { + valueTemp = value.slice(0, -1); + } + if (value.startsWith && (value.startsWith('.') || value.startsWith('-.'))) { + valueTemp = valueTemp.replace('.', '0.'); + } + if (valueTemp.replace) onChange?.(valueTemp.replace(/0*(\d+)/, '$1')); + if (onBlur) { + onBlur(); + } + }; + + render() { + return ( + + ); + } +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/components/MetaplexModal/index.less b/CandyMachine-Storefront/store/js/packages/common/src/components/MetaplexModal/index.less new file mode 100644 index 0000000..13f8a90 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/components/MetaplexModal/index.less @@ -0,0 +1,9 @@ +.ant-scrolling-effect { + #root>.ant-layout { + filter: blur(10px) brightness(0.5); + } +} + +.ant-modal-content { + border-radius: 16px; +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/components/MetaplexModal/index.tsx b/CandyMachine-Storefront/store/js/packages/common/src/components/MetaplexModal/index.tsx new file mode 100644 index 0000000..05b7be3 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/components/MetaplexModal/index.tsx @@ -0,0 +1,25 @@ +import React from 'react'; +import { Modal } from 'antd'; + +export const MetaplexModal = (props: any) => { + const { children, bodyStyle, ...rest } = props; + + return ( + + {children} + + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/components/MetaplexOverlay/index.tsx b/CandyMachine-Storefront/store/js/packages/common/src/components/MetaplexOverlay/index.tsx new file mode 100644 index 0000000..8ff1133 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/components/MetaplexOverlay/index.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import { Modal } from 'antd'; + +export const MetaplexOverlay = (props: any) => { + const { children, ...rest } = props; + + const content = ( +
+ {children} +
+ ); + + return ( + content} + width={'100vw'} + mask={false} + {...rest} + > + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/components/Settings/index.tsx b/CandyMachine-Storefront/store/js/packages/common/src/components/Settings/index.tsx new file mode 100644 index 0000000..4e6fd46 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/components/Settings/index.tsx @@ -0,0 +1,71 @@ +import React, { useCallback } from 'react'; +import { Button, Select } from 'antd'; +import { useWallet } from '@solana/wallet-adapter-react'; +import { ENDPOINTS, useConnectionConfig } from '../../contexts/connection'; +import { useWalletModal } from '../../contexts'; +import { notify, shortenAddress } from '../../utils'; +import { CopyOutlined } from '@ant-design/icons'; + +export const Settings = ({ + additionalSettings, +}: { + additionalSettings?: JSX.Element; +}) => { + const { connected, disconnect, publicKey } = useWallet(); + const { endpoint, setEndpoint } = useConnectionConfig(); + const { setVisible } = useWalletModal(); + const open = useCallback(() => setVisible(true), [setVisible]); + + return ( + <> +
+ Network:{' '} + + {connected && ( + <> + Wallet: + {publicKey && ( + + )} + + + + + )} + {additionalSettings} +
+ + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/components/TokenDisplay/index.tsx b/CandyMachine-Storefront/store/js/packages/common/src/components/TokenDisplay/index.tsx new file mode 100644 index 0000000..223dd81 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/components/TokenDisplay/index.tsx @@ -0,0 +1,58 @@ +import React from 'react'; +import { useMint } from '../../contexts/accounts'; +import { useAccountByMint } from '../../hooks'; +import { TokenIcon } from '../TokenIcon'; + +export const TokenDisplay = (props: { + name: string; + mintAddress: string; + icon?: JSX.Element; + showBalance?: boolean; +}) => { + const { showBalance, mintAddress, name, icon } = props; + const tokenMint = useMint(mintAddress); + const tokenAccount = useAccountByMint(mintAddress); + + let balance: number = 0; + let hasBalance: boolean = false; + if (showBalance) { + if (tokenAccount && tokenMint) { + balance = + tokenAccount.info.amount.toNumber() / Math.pow(10, tokenMint.decimals); + hasBalance = balance > 0; + } + } + + return ( + <> +
+
+ {icon || } + {name} +
+ {showBalance ? ( + +  {' '} + {hasBalance + ? balance < 0.001 + ? '<0.001' + : balance.toFixed(3) + : '-'} + + ) : null} +
+ + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/components/TokenIcon/index.tsx b/CandyMachine-Storefront/store/js/packages/common/src/components/TokenIcon/index.tsx new file mode 100644 index 0000000..c70a793 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/components/TokenIcon/index.tsx @@ -0,0 +1,73 @@ +import React from 'react'; +import { PublicKey } from '@solana/web3.js'; +import { getTokenIcon, KnownTokenMap } from '../../utils'; +import { useConnectionConfig } from '../../contexts/connection'; +import { Identicon } from '../Identicon'; + +export const TokenIcon = (props: { + mintAddress?: string | PublicKey; + style?: React.CSSProperties; + size?: number; + className?: string; + tokenMap?: KnownTokenMap; +}) => { + let icon: string | undefined = ''; + if (props.tokenMap) { + icon = getTokenIcon(props.tokenMap, props.mintAddress); + } else { + const { tokenMap } = useConnectionConfig(); + icon = getTokenIcon(tokenMap, props.mintAddress); + } + + const size = props.size || 20; + + if (icon) { + return ( + Token icon + ); + } + return ( + + ); +}; + +export const PoolIcon = (props: { + mintA: string; + mintB: string; + style?: React.CSSProperties; + className?: string; +}) => { + return ( +
+ + +
+ ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/components/index.tsx b/CandyMachine-Storefront/store/js/packages/common/src/components/index.tsx new file mode 100644 index 0000000..bf58f3e --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/components/index.tsx @@ -0,0 +1,15 @@ +export { ExplorerLink } from './ExplorerLink/index'; +export { ConnectButton } from './ConnectButton/index'; +export { CurrentUserBadge } from './CurrentUserBadge/index'; +export { Identicon } from './Identicon/index'; +export { Info } from './Icons/info'; +export { NumericInput } from './Input/numeric'; +export { AppBar } from './AppBar/index'; +export { Settings } from './Settings/index'; +export { ActionConfirmation } from './ActionConfirmation/index'; +export { BackButton } from './BackButton/index'; +export { TokenIcon } from './TokenIcon'; +export { TokenDisplay } from './TokenDisplay'; +export { EtherscanLink } from './EtherscanLink'; +export { MetaplexModal } from './MetaplexModal'; +export { MetaplexOverlay } from './MetaplexOverlay'; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/constants/index.ts b/CandyMachine-Storefront/store/js/packages/common/src/constants/index.ts new file mode 100644 index 0000000..7d6bf06 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/constants/index.ts @@ -0,0 +1,2 @@ +export * from './math'; +export * from './labels'; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/constants/labels.ts b/CandyMachine-Storefront/store/js/packages/common/src/constants/labels.ts new file mode 100644 index 0000000..be5c639 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/constants/labels.ts @@ -0,0 +1,15 @@ +export const LABELS = { + CONNECT_LABEL: 'Connect Wallet', + AUDIT_WARNING: + 'Oyster is an unaudited software project used for internal purposes at the Solana Foundation. This app is not for public use.', + FOOTER: + 'This page was produced by the Solana Foundation ("SF") for internal educational and inspiration purposes only. SF does not encourage, induce or sanction the deployment, integration or use of Oyster or any similar application (including its code) in violation of applicable laws or regulations and hereby prohibits any such deployment, integration or use. Anyone using this code or a derivation thereof must comply with applicable laws and regulations when releasing related software.', + MENU_HOME: 'Home', + MENU_DASHBOARD: 'Dashboard', + CONNECT_BUTTON: 'Connect', + WALLET_TOOLTIP: 'Wallet public key', + WALLET_BALANCE: 'Wallet balance', + SETTINGS_TOOLTIP: 'Settings', + DASHBOARD_ACTION: 'Go to dashboard', + GO_BACK_ACTION: 'Go back', +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/constants/math.ts b/CandyMachine-Storefront/store/js/packages/common/src/constants/math.ts new file mode 100644 index 0000000..6e06293 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/constants/math.ts @@ -0,0 +1,7 @@ +import BN from 'bn.js'; + +export const TEN = new BN(10); +export const HALF_WAD = TEN.pow(new BN(18)); +export const WAD = TEN.pow(new BN(18)); +export const RAY = TEN.pow(new BN(27)); +export const ZERO = new BN(0); diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/accounts.tsx b/CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/accounts.tsx new file mode 100644 index 0000000..656f85d --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/accounts.tsx @@ -0,0 +1,286 @@ +import React, { useCallback, useContext, useEffect, useState } from 'react'; +import { useWallet } from '@solana/wallet-adapter-react'; +import { AccountInfo, Connection, PublicKey } from '@solana/web3.js'; +import { AccountLayout, MintInfo, u64 } from '@solana/spl-token'; +import { useConnection } from '../../contexts/connection'; +import { TokenAccount } from '../../models'; +import { StringPublicKey, WRAPPED_SOL_MINT } from '../../utils/ids'; +import { programIds } from '../../utils/programIds'; +import { genericCache, cache } from './cache'; +import { deserializeAccount } from './deserialize'; +import { TokenAccountParser, MintParser } from './parsesrs'; + +const AccountsContext = React.createContext(null); + +export const useAccountsContext = () => { + const context = useContext(AccountsContext); + + return context; +}; + +function wrapNativeAccount( + pubkey: StringPublicKey, + account?: AccountInfo, +): TokenAccount | undefined { + if (!account) { + return undefined; + } + + const key = new PublicKey(pubkey); + + return { + pubkey: pubkey, + account, + info: { + address: key, + mint: WRAPPED_SOL_MINT, + owner: key, + amount: new u64(account.lamports), + delegate: null, + delegatedAmount: new u64(0), + isInitialized: true, + isFrozen: false, + isNative: true, + rentExemptReserve: null, + closeAuthority: null, + }, + }; +} + +const UseNativeAccount = () => { + const connection = useConnection(); + const { publicKey } = useWallet(); + + const [nativeAccount, setNativeAccount] = useState>(); + + const updateCache = useCallback( + account => { + if (publicKey) { + const wrapped = wrapNativeAccount(publicKey.toBase58(), account); + if (wrapped !== undefined) { + const id = publicKey.toBase58(); + cache.registerParser(id, TokenAccountParser); + genericCache.set(id, wrapped as TokenAccount); + cache.emitter.raiseCacheUpdated(id, false, TokenAccountParser, true); + } + } + }, + [publicKey], + ); + + useEffect(() => { + let subId = 0; + const updateAccount = (account: AccountInfo | null) => { + if (account) { + updateCache(account); + setNativeAccount(account); + } + }; + + (async () => { + if (!connection || !publicKey) { + return; + } + + const account = await connection.getAccountInfo(publicKey); + updateAccount(account); + + subId = connection.onAccountChange(publicKey, updateAccount); + })(); + + return () => { + if (subId) { + connection.removeAccountChangeListener(subId); + } + }; + }, [setNativeAccount, publicKey, connection, updateCache]); + + return { nativeAccount }; +}; + +const PRECACHED_OWNERS = new Set(); +const precacheUserTokenAccounts = async ( + connection: Connection, + owner?: PublicKey, +) => { + if (!owner) { + return; + } + + // used for filtering account updates over websocket + PRECACHED_OWNERS.add(owner.toBase58()); + + // user accounts are updated via ws subscription + const accounts = await connection.getTokenAccountsByOwner(owner, { + programId: programIds().token, + }); + + accounts.value.forEach(info => { + cache.add(info.pubkey.toBase58(), info.account, TokenAccountParser); + }); +}; + +export function AccountsProvider({ children = null as any }) { + const connection = useConnection(); + const { publicKey } = useWallet(); + const [tokenAccounts, setTokenAccounts] = useState([]); + const [userAccounts, setUserAccounts] = useState([]); + const { nativeAccount } = UseNativeAccount(); + const walletKey = publicKey?.toBase58(); + + const selectUserAccounts = useCallback(() => { + return cache + .byParser(TokenAccountParser) + .map(id => cache.get(id)) + .filter(a => a && a.info.owner.toBase58() === walletKey) + .map(a => a as TokenAccount); + }, [walletKey]); + + useEffect(() => { + const accounts = selectUserAccounts().filter( + a => a !== undefined, + ) as TokenAccount[]; + setUserAccounts(accounts); + }, [nativeAccount, tokenAccounts, selectUserAccounts]); + + useEffect(() => { + const subs: number[] = []; + cache.emitter.onCache(args => { + if (args.isNew && args.isActive) { + let id = args.id; + let deserialize = args.parser; + connection.onAccountChange(new PublicKey(id), info => { + cache.add(id, info, deserialize); + }); + } + }); + + return () => { + subs.forEach(id => connection.removeAccountChangeListener(id)); + }; + }, [connection]); + + useEffect(() => { + if (!connection || !publicKey) { + setTokenAccounts([]); + } else { + precacheUserTokenAccounts(connection, publicKey).then(() => { + setTokenAccounts(selectUserAccounts()); + }); + + // This can return different types of accounts: token-account, mint, multisig + // TODO: web3.js expose ability to filter. + // this should use only filter syntax to only get accounts that are owned by user + const tokenSubID = connection.onProgramAccountChange( + programIds().token, + info => { + // TODO: fix type in web3.js + const id = info.accountId as unknown as string; + // TODO: do we need a better way to identify layout (maybe a enum identifing type?) + if (info.accountInfo.data.length === AccountLayout.span) { + const data = deserializeAccount(info.accountInfo.data); + + if (PRECACHED_OWNERS.has(data.owner.toBase58())) { + cache.add(id, info.accountInfo, TokenAccountParser); + setTokenAccounts(selectUserAccounts()); + } + } + }, + 'singleGossip', + ); + + return () => { + connection.removeProgramAccountChangeListener(tokenSubID); + }; + } + }, [connection, publicKey, selectUserAccounts]); + + return ( + + {children} + + ); +} + +export function useNativeAccount() { + const context = useContext(AccountsContext); + return { + account: context.nativeAccount as AccountInfo, + }; +} + +export function useMint(key?: string | PublicKey) { + const connection = useConnection(); + const [mint, setMint] = useState(); + + const id = typeof key === 'string' ? key : key?.toBase58(); + + useEffect(() => { + if (!id) { + return; + } + + cache + .query(connection, id, MintParser) + .then(acc => setMint(acc.info as any)) + .catch(err => console.log(err)); + + const dispose = cache.emitter.onCache(e => { + const event = e; + if (event.id === id) { + cache + .query(connection, id, MintParser) + .then(mint => setMint(mint.info as any)); + } + }); + return () => { + dispose(); + }; + }, [connection, id]); + + return mint; +} + +export function useAccount(pubKey?: PublicKey) { + const connection = useConnection(); + const [account, setAccount] = useState(); + + const key = pubKey?.toBase58(); + useEffect(() => { + const query = async () => { + try { + if (!key) { + return; + } + + const acc = await cache + .query(connection, key, TokenAccountParser) + .catch(err => console.log(err)); + if (acc) { + setAccount(acc); + } + } catch (err) { + console.error(err); + } + }; + + query(); + + const dispose = cache.emitter.onCache(e => { + const event = e; + if (event.id === key) { + query(); + } + }); + return () => { + dispose(); + }; + }, [connection, key]); + + return account; +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/cache.ts b/CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/cache.ts new file mode 100644 index 0000000..5e88ffe --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/cache.ts @@ -0,0 +1,193 @@ +import { AccountInfo, Connection, PublicKey } from '@solana/web3.js'; +import { MintInfo } from '@solana/spl-token'; +import { TokenAccount } from '../../models'; +import { EventEmitter } from '../../utils/eventEmitter'; +import { ParsedAccountBase, AccountParser } from './types'; +import { deserializeMint } from './deserialize'; + +export const genericCache = new Map(); +const mintCache = new Map(); +const pendingCalls = new Map>(); +const pendingMintCalls = new Map>(); + +const keyToAccountParser = new Map(); + +const getMintInfo = async (connection: Connection, pubKey: PublicKey) => { + const info = await connection.getAccountInfo(pubKey); + if (info === null) { + throw new Error('Failed to find mint account'); + } + + const data = Buffer.from(info.data); + + return deserializeMint(data); +}; + +export const cache = { + emitter: new EventEmitter(), + query: async ( + connection: Connection, + pubKey: string | PublicKey, + parser?: AccountParser, + ) => { + let id: PublicKey; + if (typeof pubKey === 'string') { + id = new PublicKey(pubKey); + } else { + id = pubKey; + } + + const address = id.toBase58(); + + const account = genericCache.get(address); + if (account) { + return account; + } + + let query = pendingCalls.get(address); + if (query) { + return query; + } + + // TODO: refactor to use multiple accounts query with flush like behavior + query = connection.getAccountInfo(id).then(data => { + if (!data) { + throw new Error('Account not found'); + } + + return cache.add(id, data, parser); + }) as Promise; + pendingCalls.set(address, query as any); + + return query; + }, + add: ( + id: PublicKey | string, + obj: AccountInfo, + parser?: AccountParser, + isActive?: boolean | undefined | ((parsed: any) => boolean), + ) => { + const address = typeof id === 'string' ? id : id?.toBase58(); + const deserialize = parser ? parser : keyToAccountParser.get(address); + if (!deserialize) { + throw new Error( + 'Deserializer needs to be registered or passed as a parameter', + ); + } + + cache.registerParser(id, deserialize); + pendingCalls.delete(address); + const account = deserialize(address, obj); + if (!account) { + return; + } + + if (isActive === undefined) isActive = true; + else if (isActive instanceof Function) isActive = isActive(account); + + const isNew = !genericCache.has(address); + + genericCache.set(address, account); + cache.emitter.raiseCacheUpdated(address, isNew, deserialize, isActive); + return account; + }, + get: (pubKey: string | PublicKey) => { + let key: string; + if (typeof pubKey !== 'string') { + key = pubKey.toBase58(); + } else { + key = pubKey; + } + + return genericCache.get(key); + }, + delete: (pubKey: string | PublicKey) => { + let key: string; + if (typeof pubKey !== 'string') { + key = pubKey.toBase58(); + } else { + key = pubKey; + } + + if (genericCache.get(key)) { + genericCache.delete(key); + cache.emitter.raiseCacheDeleted(key); + return true; + } + return false; + }, + + byParser: (parser: AccountParser) => { + const result: string[] = []; + for (const id of keyToAccountParser.keys()) { + if (keyToAccountParser.get(id) === parser) { + result.push(id); + } + } + + return result; + }, + registerParser: (pubkey: PublicKey | string, parser: AccountParser) => { + if (pubkey) { + const address = typeof pubkey === 'string' ? pubkey : pubkey?.toBase58(); + keyToAccountParser.set(address, parser); + } + + return pubkey; + }, + queryMint: async (connection: Connection, pubKey: string | PublicKey) => { + let id: PublicKey; + if (typeof pubKey === 'string') { + id = new PublicKey(pubKey); + } else { + id = pubKey; + } + + const address = id.toBase58(); + const mint = mintCache.get(address); + if (mint) { + return mint; + } + + let query = pendingMintCalls.get(address); + if (query) { + return query; + } + + query = getMintInfo(connection, id).then(data => { + pendingMintCalls.delete(address); + + mintCache.set(address, data); + return data; + }) as Promise; + pendingMintCalls.set(address, query as any); + + return query; + }, + getMint: (pubKey: string | PublicKey) => { + let key: string; + if (typeof pubKey !== 'string') { + key = pubKey.toBase58(); + } else { + key = pubKey; + } + + return mintCache.get(key); + }, + addMint: (pubKey: PublicKey, obj: AccountInfo) => { + const mint = deserializeMint(obj.data); + const id = pubKey.toBase58(); + mintCache.set(id, mint); + return mint; + }, +}; + +export const getCachedAccount = ( + predicate: (account: TokenAccount) => boolean, +) => { + for (const account of genericCache.values()) { + if (predicate(account)) { + return account as TokenAccount; + } + } +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/deserialize.ts b/CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/deserialize.ts new file mode 100644 index 0000000..a5ef201 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/deserialize.ts @@ -0,0 +1,63 @@ +import { PublicKey } from '@solana/web3.js'; +import { AccountLayout, MintInfo, MintLayout, u64 } from '@solana/spl-token'; + +// TODO: expose in spl package +export const deserializeAccount = (data: Buffer) => { + const accountInfo = AccountLayout.decode(data); + accountInfo.mint = new PublicKey(accountInfo.mint); + accountInfo.owner = new PublicKey(accountInfo.owner); + accountInfo.amount = u64.fromBuffer(accountInfo.amount); + + if (accountInfo.delegateOption === 0) { + accountInfo.delegate = null; + accountInfo.delegatedAmount = new u64(0); + } else { + accountInfo.delegate = new PublicKey(accountInfo.delegate); + accountInfo.delegatedAmount = u64.fromBuffer(accountInfo.delegatedAmount); + } + + accountInfo.isInitialized = accountInfo.state !== 0; + accountInfo.isFrozen = accountInfo.state === 2; + + if (accountInfo.isNativeOption === 1) { + accountInfo.rentExemptReserve = u64.fromBuffer(accountInfo.isNative); + accountInfo.isNative = true; + } else { + accountInfo.rentExemptReserve = null; + accountInfo.isNative = false; + } + + if (accountInfo.closeAuthorityOption === 0) { + accountInfo.closeAuthority = null; + } else { + accountInfo.closeAuthority = new PublicKey(accountInfo.closeAuthority); + } + + return accountInfo; +}; + +// TODO: expose in spl package +export const deserializeMint = (data: Buffer) => { + if (data.length !== MintLayout.span) { + throw new Error('Not a valid Mint'); + } + + const mintInfo = MintLayout.decode(data); + + if (mintInfo.mintAuthorityOption === 0) { + mintInfo.mintAuthority = null; + } else { + mintInfo.mintAuthority = new PublicKey(mintInfo.mintAuthority); + } + + mintInfo.supply = u64.fromBuffer(mintInfo.supply); + mintInfo.isInitialized = mintInfo.isInitialized !== 0; + + if (mintInfo.freezeAuthorityOption === 0) { + mintInfo.freezeAuthority = null; + } else { + mintInfo.freezeAuthority = new PublicKey(mintInfo.freezeAuthority); + } + + return mintInfo as MintInfo; +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/getMultipleAccounts.ts b/CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/getMultipleAccounts.ts new file mode 100644 index 0000000..d0611c4 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/getMultipleAccounts.ts @@ -0,0 +1,56 @@ +import { AccountInfo } from '@solana/web3.js'; +import { chunks } from '../../utils/utils'; + +export const getMultipleAccounts = async ( + connection: any, + keys: string[], + commitment: string, +) => { + const result = await Promise.all( + chunks(keys, 99).map(chunk => + getMultipleAccountsCore(connection, chunk, commitment), + ), + ); + + const array = result + .map( + a => + a.array.map(acc => { + if (!acc) { + return undefined; + } + + const { data, ...rest } = acc; + const obj = { + ...rest, + data: Buffer.from(data[0], 'base64'), + } as AccountInfo; + return obj; + }) as AccountInfo[], + ) + .flat(); + return { keys, array }; +}; + +const getMultipleAccountsCore = async ( + connection: any, + keys: string[], + commitment: string, +) => { + const args = connection._buildArgs([keys], commitment, 'base64'); + + const unsafeRes = await connection._rpcRequest('getMultipleAccounts', args); + if (unsafeRes.error) { + throw new Error( + 'failed to get info about account ' + unsafeRes.error.message, + ); + } + + if (unsafeRes.result.value) { + const array = unsafeRes.result.value as AccountInfo[]; + return { keys, array }; + } + + // TODO: fix + throw new Error(); +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/index.ts b/CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/index.ts new file mode 100644 index 0000000..8c602f0 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/index.ts @@ -0,0 +1,6 @@ +export * from './accounts'; +export * from './cache'; +export * from './getMultipleAccounts'; +export * from './parsesrs'; +export * from './deserialize'; +export * from './types'; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/parsesrs.ts b/CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/parsesrs.ts new file mode 100644 index 0000000..174ab9b --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/parsesrs.ts @@ -0,0 +1,64 @@ +import { AccountInfo } from '@solana/web3.js'; +import { TokenAccount } from '../../models'; +import { ParsedAccountBase } from './types'; +import { deserializeMint, deserializeAccount } from './deserialize'; +import { StringPublicKey } from '../../utils'; + +export const MintParser = ( + pubKey: StringPublicKey, + info: AccountInfo, +) => { + const buffer = Buffer.from(info.data); + + const data = deserializeMint(buffer); + + const details = { + pubkey: pubKey, + account: { + ...info, + }, + info: data, + } as ParsedAccountBase; + + return details; +}; + +export const TokenAccountParser = ( + pubKey: StringPublicKey, + info: AccountInfo, +) => { + // Sometimes a wrapped sol account gets closed, goes to 0 length, + // triggers an update over wss which triggers this guy to get called + // since your UI already logged that pubkey as a token account. Check for length. + if (info.data.length > 0) { + const buffer = Buffer.from(info.data); + const data = deserializeAccount(buffer); + + const details = { + pubkey: pubKey, + account: { + ...info, + }, + info: data, + } as TokenAccount; + + return details; + } +}; + +export const GenericAccountParser = ( + pubKey: StringPublicKey, + info: AccountInfo, +) => { + const buffer = Buffer.from(info.data); + + const details = { + pubkey: pubKey, + account: { + ...info, + }, + info: buffer, + } as ParsedAccountBase; + + return details; +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/types.ts b/CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/types.ts new file mode 100644 index 0000000..a44a3ca --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contexts/accounts/types.ts @@ -0,0 +1,17 @@ +import { AccountInfo } from '@solana/web3.js'; +import { StringPublicKey } from '../../utils'; + +export interface ParsedAccountBase { + pubkey: StringPublicKey; + account: AccountInfo; + info: any; // TODO: change to unknown +} + +export type AccountParser = ( + pubkey: StringPublicKey, + data: AccountInfo, +) => ParsedAccountBase | undefined; + +export interface ParsedAccount extends ParsedAccountBase { + info: T; +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contexts/connection.tsx b/CandyMachine-Storefront/store/js/packages/common/src/contexts/connection.tsx new file mode 100644 index 0000000..f777dc7 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contexts/connection.tsx @@ -0,0 +1,706 @@ +import { sleep, useLocalStorageState } from '../utils/utils'; +import { + Keypair, + clusterApiUrl, + Commitment, + Connection, + RpcResponseAndContext, + SignatureStatus, + SimulatedTransactionResponse, + Transaction, + TransactionInstruction, + TransactionSignature, + Blockhash, + FeeCalculator, +} from '@solana/web3.js'; +import React, { useContext, useEffect, useMemo, useState } from 'react'; +import { notify } from '../utils/notifications'; +import { ExplorerLink } from '../components/ExplorerLink'; +import { useQuerySearch } from '../hooks'; +import { + TokenInfo, + TokenListProvider, + ENV as ChainId, +} from '@solana/spl-token-registry'; +import { WalletSigner } from './wallet'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; + +interface BlockhashAndFeeCalculator { + blockhash: Blockhash; + feeCalculator: FeeCalculator; +} + +export type ENV = + | 'mainnet-beta' + | 'mainnet-beta (Solana)' + | 'mainnet-beta (Serum)' + | 'testnet' + | 'devnet' + | 'localnet' + | 'lending'; + +export const ENDPOINTS = [ + { + name: 'mainnet-beta' as ENV, + endpoint: 'https://api.metaplex.solana.com/', + ChainId: ChainId.MainnetBeta, + }, + { + name: 'mainnet-beta (Solana)' as ENV, + endpoint: 'https://api.mainnet-beta.solana.com', + ChainId: ChainId.MainnetBeta, + }, + { + name: 'mainnet-beta (Serum)' as ENV, + endpoint: 'https://solana-api.projectserum.com/', + ChainId: ChainId.MainnetBeta, + }, + { + name: 'testnet' as ENV, + endpoint: clusterApiUrl('testnet'), + ChainId: ChainId.Testnet, + }, + { + name: 'devnet' as ENV, + endpoint: clusterApiUrl('devnet'), + ChainId: ChainId.Devnet, + }, +]; + +const DEFAULT = ENDPOINTS[0].endpoint; + +interface ConnectionConfig { + connection: Connection; + endpoint: string; + env: ENV; + setEndpoint: (val: string) => void; + tokens: TokenInfo[]; + tokenMap: Map; +} + +const ConnectionContext = React.createContext({ + endpoint: DEFAULT, + setEndpoint: () => {}, + connection: new Connection(DEFAULT, 'recent'), + env: ENDPOINTS[0].name, + tokens: [], + tokenMap: new Map(), +}); + +export function ConnectionProvider({ children = undefined as any }) { + const searchParams = useQuerySearch(); + const network = searchParams.get('network'); + const queryEndpoint = + network && ENDPOINTS.find(({ name }) => name.startsWith(network))?.endpoint; + + const [savedEndpoint, setEndpoint] = useLocalStorageState( + 'connectionEndpoint', + ENDPOINTS[0].endpoint, + ); + const endpoint = queryEndpoint || savedEndpoint; + + const connection = useMemo( + () => new Connection(endpoint, 'recent'), + [endpoint], + ); + + const env = + ENDPOINTS.find(end => end.endpoint === endpoint)?.name || ENDPOINTS[0].name; + + const [tokens, setTokens] = useState([]); + const [tokenMap, setTokenMap] = useState>(new Map()); + useEffect(() => { + // fetch token files + new TokenListProvider().resolve().then(container => { + const list = container + .excludeByTag('nft') + .filterByChainId( + ENDPOINTS.find(end => end.endpoint === endpoint)?.ChainId || + ChainId.MainnetBeta, + ) + .getList(); + + const knownMints = [...list].reduce((map, item) => { + map.set(item.address, item); + return map; + }, new Map()); + + setTokenMap(knownMints); + setTokens(list); + }); + }, [env]); + + // The websocket library solana/web3.js uses closes its websocket connection when the subscription list + // is empty after opening its first time, preventing subsequent subscriptions from receiving responses. + // This is a hack to prevent the list from every getting empty + useEffect(() => { + const id = connection.onAccountChange( + Keypair.generate().publicKey, + () => {}, + ); + return () => { + connection.removeAccountChangeListener(id); + }; + }, [connection]); + + useEffect(() => { + const id = connection.onSlotChange(() => null); + return () => { + connection.removeSlotChangeListener(id); + }; + }, [connection]); + + return ( + + {children} + + ); +} + +export function useConnection() { + return useContext(ConnectionContext).connection as Connection; +} + +export function useConnectionConfig() { + const context = useContext(ConnectionContext); + return { + endpoint: context.endpoint, + setEndpoint: context.setEndpoint, + env: context.env, + tokens: context.tokens, + tokenMap: context.tokenMap, + }; +} + +export const getErrorForTransaction = async ( + connection: Connection, + txid: string, +) => { + // wait for all confirmation before geting transaction + await connection.confirmTransaction(txid, 'max'); + + const tx = await connection.getParsedConfirmedTransaction(txid); + + const errors: string[] = []; + if (tx?.meta && tx.meta.logMessages) { + tx.meta.logMessages.forEach(log => { + const regex = /Error: (.*)/gm; + let m; + while ((m = regex.exec(log)) !== null) { + // This is necessary to avoid infinite loops with zero-width matches + if (m.index === regex.lastIndex) { + regex.lastIndex++; + } + + if (m.length > 1) { + errors.push(m[1]); + } + } + }); + } + + return errors; +}; + +export enum SequenceType { + Sequential, + Parallel, + StopOnFailure, +} + +export async function sendTransactionsWithManualRetry( + connection: Connection, + wallet: WalletSigner, + instructions: TransactionInstruction[][], + signers: Keypair[][], +) { + let stopPoint = 0; + let tries = 0; + let lastInstructionsLength = null; + let toRemoveSigners: Record = {}; + instructions = instructions.filter((instr, i) => { + if (instr.length > 0) { + return true; + } else { + toRemoveSigners[i] = true; + return false; + } + }); + let filteredSigners = signers.filter((_, i) => !toRemoveSigners[i]); + + while (stopPoint < instructions.length && tries < 3) { + instructions = instructions.slice(stopPoint, instructions.length); + filteredSigners = filteredSigners.slice(stopPoint, filteredSigners.length); + + if (instructions.length === lastInstructionsLength) tries = tries + 1; + else tries = 0; + + try { + if (instructions.length === 1) { + await sendTransactionWithRetry( + connection, + wallet, + instructions[0], + filteredSigners[0], + 'single', + ); + stopPoint = 1; + } else { + stopPoint = await sendTransactions( + connection, + wallet, + instructions, + filteredSigners, + SequenceType.StopOnFailure, + 'single', + ); + } + } catch (e) { + console.error(e); + } + console.log( + 'Died on ', + stopPoint, + 'retrying from instruction', + instructions[stopPoint], + 'instructions length is', + instructions.length, + ); + lastInstructionsLength = instructions.length; + } +} + +export const sendTransactions = async ( + connection: Connection, + wallet: WalletSigner, + instructionSet: TransactionInstruction[][], + signersSet: Keypair[][], + sequenceType: SequenceType = SequenceType.Parallel, + commitment: Commitment = 'singleGossip', + successCallback: (txid: string, ind: number) => void = (txid, ind) => {}, + failCallback: (reason: string, ind: number) => boolean = (txid, ind) => false, + block?: BlockhashAndFeeCalculator, +): Promise => { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const unsignedTxns: Transaction[] = []; + + if (!block) { + block = await connection.getRecentBlockhash(commitment); + } + + for (let i = 0; i < instructionSet.length; i++) { + const instructions = instructionSet[i]; + const signers = signersSet[i]; + + if (instructions.length === 0) { + continue; + } + + let transaction = new Transaction(); + instructions.forEach(instruction => transaction.add(instruction)); + transaction.recentBlockhash = block.blockhash; + transaction.setSigners( + // fee payed by the wallet owner + wallet.publicKey, + ...signers.map(s => s.publicKey), + ); + + if (signers.length > 0) { + transaction.partialSign(...signers); + } + + unsignedTxns.push(transaction); + } + + const signedTxns = await wallet.signAllTransactions(unsignedTxns); + + const pendingTxns: Promise<{ txid: string; slot: number }>[] = []; + + let breakEarlyObject = { breakEarly: false, i: 0 }; + console.log( + 'Signed txns length', + signedTxns.length, + 'vs handed in length', + instructionSet.length, + ); + for (let i = 0; i < signedTxns.length; i++) { + const signedTxnPromise = sendSignedTransaction({ + connection, + signedTransaction: signedTxns[i], + }); + + signedTxnPromise + .then(({ txid, slot }) => { + successCallback(txid, i); + }) + .catch(reason => { + // @ts-ignore + failCallback(signedTxns[i], i); + if (sequenceType === SequenceType.StopOnFailure) { + breakEarlyObject.breakEarly = true; + breakEarlyObject.i = i; + } + }); + + if (sequenceType !== SequenceType.Parallel) { + try { + await signedTxnPromise; + } catch (e) { + console.log('Caught failure', e); + if (breakEarlyObject.breakEarly) { + console.log('Died on ', breakEarlyObject.i); + return breakEarlyObject.i; // Return the txn we failed on by index + } + } + } else { + pendingTxns.push(signedTxnPromise); + } + } + + if (sequenceType !== SequenceType.Parallel) { + await Promise.all(pendingTxns); + } + + return signedTxns.length; +}; + +export const sendTransaction = async ( + connection: Connection, + wallet: WalletSigner, + instructions: TransactionInstruction[], + signers: Keypair[], + awaitConfirmation = true, + commitment: Commitment = 'singleGossip', + includesFeePayer: boolean = false, + block?: BlockhashAndFeeCalculator, +) => { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + let transaction = new Transaction(); + instructions.forEach(instruction => transaction.add(instruction)); + transaction.recentBlockhash = ( + block || (await connection.getRecentBlockhash(commitment)) + ).blockhash; + + if (includesFeePayer) { + transaction.setSigners(...signers.map(s => s.publicKey)); + } else { + transaction.setSigners( + // fee payed by the wallet owner + wallet.publicKey, + ...signers.map(s => s.publicKey), + ); + } + + if (signers.length > 0) { + transaction.partialSign(...signers); + } + if (!includesFeePayer) { + transaction = await wallet.signTransaction(transaction); + } + + const rawTransaction = transaction.serialize(); + let options = { + skipPreflight: true, + commitment, + }; + + const txid = await connection.sendRawTransaction(rawTransaction, options); + let slot = 0; + + if (awaitConfirmation) { + const confirmation = await awaitTransactionSignatureConfirmation( + txid, + DEFAULT_TIMEOUT, + connection, + commitment, + ); + + if (!confirmation) + throw new Error('Timed out awaiting confirmation on transaction'); + slot = confirmation?.slot || 0; + + if (confirmation?.err) { + const errors = await getErrorForTransaction(connection, txid); + notify({ + message: 'Transaction failed...', + description: ( + <> + {errors.map(err => ( +
{err}
+ ))} + + + ), + type: 'error', + }); + + throw new Error( + `Raw transaction ${txid} failed (${JSON.stringify(status)})`, + ); + } + } + + return { txid, slot }; +}; + +export const sendTransactionWithRetry = async ( + connection: Connection, + wallet: WalletSigner, + instructions: TransactionInstruction[], + signers: Keypair[], + commitment: Commitment = 'singleGossip', + includesFeePayer: boolean = false, + block?: BlockhashAndFeeCalculator, + beforeSend?: () => void, +) => { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + let transaction = new Transaction(); + instructions.forEach(instruction => transaction.add(instruction)); + transaction.recentBlockhash = ( + block || (await connection.getRecentBlockhash(commitment)) + ).blockhash; + + if (includesFeePayer) { + transaction.setSigners(...signers.map(s => s.publicKey)); + } else { + transaction.setSigners( + // fee payed by the wallet owner + wallet.publicKey, + ...signers.map(s => s.publicKey), + ); + } + + if (signers.length > 0) { + transaction.partialSign(...signers); + } + if (!includesFeePayer) { + transaction = await wallet.signTransaction(transaction); + } + + if (beforeSend) { + beforeSend(); + } + + const { txid, slot } = await sendSignedTransaction({ + connection, + signedTransaction: transaction, + }); + + return { txid, slot }; +}; + +export const getUnixTs = () => { + return new Date().getTime() / 1000; +}; + +const DEFAULT_TIMEOUT = 15000; + +export async function sendSignedTransaction({ + signedTransaction, + connection, + timeout = DEFAULT_TIMEOUT, +}: { + signedTransaction: Transaction; + connection: Connection; + sendingMessage?: string; + sentMessage?: string; + successMessage?: string; + timeout?: number; +}): Promise<{ txid: string; slot: number }> { + const rawTransaction = signedTransaction.serialize(); + const startTime = getUnixTs(); + let slot = 0; + const txid: TransactionSignature = await connection.sendRawTransaction( + rawTransaction, + { + skipPreflight: true, + }, + ); + + console.log('Started awaiting confirmation for', txid); + + let done = false; + (async () => { + while (!done && getUnixTs() - startTime < timeout) { + connection.sendRawTransaction(rawTransaction, { + skipPreflight: true, + }); + await sleep(500); + } + })(); + try { + const confirmation = await awaitTransactionSignatureConfirmation( + txid, + timeout, + connection, + 'recent', + true, + ); + + if (!confirmation) + throw new Error('Timed out awaiting confirmation on transaction'); + + if (confirmation.err) { + console.error(confirmation.err); + throw new Error('Transaction failed: Custom instruction error'); + } + + slot = confirmation?.slot || 0; + } catch (err) { + console.error('Timeout Error caught', err); + if (err.timeout) { + throw new Error('Timed out awaiting confirmation on transaction'); + } + let simulateResult: SimulatedTransactionResponse | null = null; + try { + simulateResult = ( + await simulateTransaction(connection, signedTransaction, 'single') + ).value; + } catch (e) {} + if (simulateResult && simulateResult.err) { + if (simulateResult.logs) { + for (let i = simulateResult.logs.length - 1; i >= 0; --i) { + const line = simulateResult.logs[i]; + if (line.startsWith('Program log: ')) { + throw new Error( + 'Transaction failed: ' + line.slice('Program log: '.length), + ); + } + } + } + throw new Error(JSON.stringify(simulateResult.err)); + } + // throw new Error('Transaction failed'); + } finally { + done = true; + } + + console.log('Latency', txid, getUnixTs() - startTime); + return { txid, slot }; +} + +async function simulateTransaction( + connection: Connection, + transaction: Transaction, + commitment: Commitment, +): Promise> { + // @ts-ignore + transaction.recentBlockhash = await connection._recentBlockhash( + // @ts-ignore + connection._disableBlockhashCaching, + ); + + const signData = transaction.serializeMessage(); + // @ts-ignore + const wireTransaction = transaction._serialize(signData); + const encodedTransaction = wireTransaction.toString('base64'); + const config: any = { encoding: 'base64', commitment }; + const args = [encodedTransaction, config]; + + // @ts-ignore + const res = await connection._rpcRequest('simulateTransaction', args); + if (res.error) { + throw new Error('failed to simulate transaction: ' + res.error.message); + } + return res.result; +} + +async function awaitTransactionSignatureConfirmation( + txid: TransactionSignature, + timeout: number, + connection: Connection, + commitment: Commitment = 'recent', + queryStatus = false, +): Promise { + let done = false; + let status: SignatureStatus | null | void = { + slot: 0, + confirmations: 0, + err: null, + }; + let subId = 0; + status = await new Promise(async (resolve, reject) => { + setTimeout(() => { + if (done) { + return; + } + done = true; + console.log('Rejecting for timeout...'); + reject({ timeout: true }); + }, timeout); + try { + subId = connection.onSignature( + txid, + (result, context) => { + done = true; + status = { + err: result.err, + slot: context.slot, + confirmations: 0, + }; + if (result.err) { + console.log('Rejected via websocket', result.err); + reject(status); + } else { + console.log('Resolved via websocket', result); + resolve(status); + } + }, + commitment, + ); + } catch (e) { + done = true; + console.error('WS error in setup', txid, e); + } + while (!done && queryStatus) { + // eslint-disable-next-line no-loop-func + (async () => { + try { + const signatureStatuses = await connection.getSignatureStatuses([ + txid, + ]); + status = signatureStatuses && signatureStatuses.value[0]; + if (!done) { + if (!status) { + console.log('REST null result for', txid, status); + } else if (status.err) { + console.log('REST error for', txid, status); + done = true; + reject(status.err); + } else if (!status.confirmations) { + console.log('REST no confirmations for', txid, status); + } else { + console.log('REST confirmation for', txid, status); + done = true; + resolve(status); + } + } + } catch (e) { + if (!done) { + console.log('REST connection error: txid', txid, e); + } + } + })(); + await sleep(2000); + } + }); + + //@ts-ignore + if (connection._signatureSubscriptions[subId]) + connection.removeSignatureListener(subId); + done = true; + console.log('Returning status', status); + return status; +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contexts/index.tsx b/CandyMachine-Storefront/store/js/packages/common/src/contexts/index.tsx new file mode 100644 index 0000000..55bff1c --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contexts/index.tsx @@ -0,0 +1,8 @@ +export * as Accounts from './accounts'; +export * from './accounts'; +export * as Connection from './connection'; +export * from './connection'; +export * as Wallet from './wallet'; +export * from './wallet'; +export * from './store'; +export * from './meta'; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/getEmptyMetaState.ts b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/getEmptyMetaState.ts new file mode 100644 index 0000000..36a5e3f --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/getEmptyMetaState.ts @@ -0,0 +1,29 @@ +import { MetaState } from './types'; + +export const getEmptyMetaState = (): MetaState => ({ + metadata: [], + metadataByMetadata: {}, + metadataByMint: {}, + metadataByAuction: {}, + masterEditions: {}, + masterEditionsByPrintingMint: {}, + masterEditionsByOneTimeAuthMint: {}, + metadataByMasterEdition: {}, + editions: {}, + auctionManagersByAuction: {}, + bidRedemptions: {}, + auctions: {}, + auctionDataExtended: {}, + vaults: {}, + payoutTickets: {}, + store: null, + whitelistedCreatorsByCreator: {}, + bidderMetadataByAuctionAndBidder: {}, + bidderPotsByAuctionAndBidder: {}, + safetyDepositBoxesByVaultAndIndex: {}, + prizeTrackingTickets: {}, + safetyDepositConfigsByAuctionManagerAndIndex: {}, + bidRedemptionV2sByAuctionManagerAndWinningIndex: {}, + auctionCaches: {}, + storeIndexer: [], +}); diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/index.ts b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/index.ts new file mode 100644 index 0000000..cdf9404 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/index.ts @@ -0,0 +1,11 @@ +export * from './meta'; +export * from './isMetadataPartOfStore'; +export * from './loadAccounts'; +export * from './onChangeAccount'; +export * from './subscribeAccountsChange'; +export * from './processAuctions'; +export * from './processMetaData'; +export * from './processMetaplexAccounts'; +export * from './processVaultData'; +export * from './queryExtendedMetadata'; +export * from './types'; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/isMetadataPartOfStore.ts b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/isMetadataPartOfStore.ts new file mode 100644 index 0000000..455cb18 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/isMetadataPartOfStore.ts @@ -0,0 +1,23 @@ +import { Metadata } from '../../actions'; +import { Store, WhitelistedCreator } from '../../models/metaplex'; +import { ParsedAccount } from '../accounts/types'; + +export const isMetadataPartOfStore = ( + m: ParsedAccount, + whitelistedCreatorsByCreator: Record< + string, + ParsedAccount + >, + store?: ParsedAccount | null, +) => { + if (!m?.info?.data?.creators) { + return false; + } + + return m.info.data.creators.some( + c => + c.verified && + (store?.info.public || + whitelistedCreatorsByCreator[c.address]?.info?.activated), + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/loadAccounts.ts b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/loadAccounts.ts new file mode 100644 index 0000000..da7012f --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/loadAccounts.ts @@ -0,0 +1,1031 @@ +import { + AUCTION_ID, + METADATA_PROGRAM_ID, + METAPLEX_ID, + StringPublicKey, + toPublicKey, + VAULT_ID, +} from '../../utils/ids'; +import { MAX_WHITELISTED_CREATOR_SIZE, TokenAccount } from '../../models'; +import { + getEdition, + Metadata, + MAX_CREATOR_LEN, + MAX_CREATOR_LIMIT, + MAX_NAME_LENGTH, + MAX_SYMBOL_LENGTH, + MAX_URI_LENGTH, + METADATA_PREFIX, + decodeMetadata, + getAuctionExtended, + getMetadata, +} from '../../actions'; +import { uniqWith } from 'lodash'; +import { + decodeStoreIndexer, + getAuctionCache, + getStoreIndexer, + MAX_PAYOUT_TICKET_SIZE, + StoreIndexer, + WhitelistedCreator, +} from '../../models/metaplex'; +import { Connection, PublicKey } from '@solana/web3.js'; +import { + AccountAndPubkey, + MetaState, + ProcessAccountsFunc, + UpdateStateValueFunc, + UnPromise, +} from './types'; +import { isMetadataPartOfStore } from './isMetadataPartOfStore'; +import { processAuctions } from './processAuctions'; +import { processMetaplexAccounts } from './processMetaplexAccounts'; +import { processMetaData } from './processMetaData'; +import { processVaultData } from './processVaultData'; +import { ParsedAccount } from '../accounts/types'; +import { getEmptyMetaState } from './getEmptyMetaState'; +import { getMultipleAccounts } from '../accounts/getMultipleAccounts'; +import { getProgramAccounts } from './web3'; +import { createPipelineExecutor } from '../../utils/createPipelineExecutor'; +import { programIds } from '../..'; +const MULTIPLE_ACCOUNT_BATCH_SIZE = 100; + +export const USE_SPEED_RUN = false; +const WHITELISTED_METADATA = ['98vYFjBYS9TguUMWQRPjy2SZuxKuUMcqR4vnQiLjZbte']; +const WHITELISTED_AUCTION = ['D8wMB5iLZnsV7XQjpwqXaDynUtFuDs7cRXvEGNj1NF1e']; +const AUCTION_TO_METADATA: Record = { + D8wMB5iLZnsV7XQjpwqXaDynUtFuDs7cRXvEGNj1NF1e: [ + '98vYFjBYS9TguUMWQRPjy2SZuxKuUMcqR4vnQiLjZbte', + ], +}; +const AUCTION_TO_VAULT: Record = { + D8wMB5iLZnsV7XQjpwqXaDynUtFuDs7cRXvEGNj1NF1e: + '3wHCBd3fYRPWjd5GqzrXanLJUKRyU3nECKbTPKfVwcFX', +}; +const WHITELISTED_AUCTION_MANAGER = [ + '3HD2C8oCL8dpqbXo8hq3CMw6tRSZDZJGajLxnrZ3ZkYx', +]; +const WHITELISTED_VAULT = ['3wHCBd3fYRPWjd5GqzrXanLJUKRyU3nECKbTPKfVwcFX']; + +export const pullStoreMetadata = async ( + connection: Connection, + tempCache: MetaState, +) => { + const updateTemp = makeSetter(tempCache); + + const loadMetadata = () => + pullMetadataByCreators(connection, tempCache, updateTemp); + const loadEditions = () => + pullEditions(connection, updateTemp, tempCache, tempCache.metadata); + + console.log('-------->Loading all metadata for store.'); + + await loadMetadata(); + await loadEditions(); + + await postProcessMetadata(tempCache); + console.log('-------->Metadata processing complete.'); + return tempCache; +}; + +export const pullYourMetadata = async ( + connection: Connection, + userTokenAccounts: TokenAccount[], + tempCache: MetaState, +) => { + const updateTemp = makeSetter(tempCache); + + console.log('--------->Pulling metadata for user.'); + let currBatch: string[] = []; + let batches = []; + const editions = []; + for (let i = 0; i < userTokenAccounts.length; i++) { + if (userTokenAccounts[i].info.amount.toNumber() == 1) { + if (2 + currBatch.length > MULTIPLE_ACCOUNT_BATCH_SIZE) { + batches.push(currBatch); + currBatch = []; + } else { + const edition = await getEdition( + userTokenAccounts[i].info.mint.toBase58(), + ); + let newAdd = [ + await getMetadata(userTokenAccounts[i].info.mint.toBase58()), + edition, + ]; + editions.push(edition); + currBatch = currBatch.concat(newAdd); + } + } + } + + if (currBatch.length > 0 && currBatch.length <= MULTIPLE_ACCOUNT_BATCH_SIZE) { + batches.push(currBatch); + } + + console.log( + '------> From token accounts for user', + 'produced', + batches.length, + 'batches of accounts to pull', + ); + for (let i = 0; i < batches.length; i++) { + const accounts = await getMultipleAccounts( + connection, + batches[i], + 'single', + ); + if (accounts) { + console.log( + '------->Pulled batch', + i, + 'with', + batches[i].length, + 'accounts, processing....', + ); + for (let j = 0; j < accounts.keys.length; j++) { + const pubkey = accounts.keys[j]; + await processMetaData( + { + pubkey, + account: accounts.array[j], + }, + updateTemp, + ); + } + } else { + console.log('------->Failed to pull batch', i, 'skipping'); + } + } + + console.log('------> Pulling master editions for user'); + currBatch = []; + batches = []; + for (let i = 0; i < editions.length; i++) { + if (1 + currBatch.length > MULTIPLE_ACCOUNT_BATCH_SIZE) { + batches.push(currBatch); + currBatch = []; + } else if (tempCache.editions[editions[i]]) { + currBatch.push(tempCache.editions[editions[i]].info.parent); + } + } + + if (currBatch.length > 0 && currBatch.length <= MULTIPLE_ACCOUNT_BATCH_SIZE) { + batches.push(currBatch); + } + + console.log( + '------> From token accounts for user', + 'produced', + batches.length, + 'batches of accounts to pull', + ); + for (let i = 0; i < batches.length; i++) { + const accounts = await getMultipleAccounts( + connection, + batches[i], + 'single', + ); + if (accounts) { + console.log( + '------->Pulled batch', + i, + 'with', + batches[i].length, + 'accounts, processing....', + ); + for (let j = 0; j < accounts.keys.length; j++) { + const pubkey = accounts.keys[j]; + await processMetaData( + { + pubkey, + account: accounts.array[j], + }, + updateTemp, + ); + } + } else { + console.log('------->Failed to pull batch', i, 'skipping'); + } + } + + await postProcessMetadata(tempCache); + + console.log('-------->User metadata processing complete.'); + return tempCache; +}; + +export const pullPayoutTickets = async ( + connection: Connection, + tempCache: MetaState, +) => { + const updateTemp = makeSetter(tempCache); + + const forEach = + (fn: ProcessAccountsFunc) => async (accounts: AccountAndPubkey[]) => { + for (const account of accounts) { + await fn(account, updateTemp); + } + }; + getProgramAccounts(connection, METAPLEX_ID, { + filters: [ + { + dataSize: MAX_PAYOUT_TICKET_SIZE, + }, + ], + }).then(forEach(processMetaplexAccounts)); + + return tempCache; +}; + +export const pullAuctionSubaccounts = async ( + connection: Connection, + auction: StringPublicKey, + tempCache: MetaState, +) => { + const updateTemp = makeSetter(tempCache); + let cacheKey; + try { + cacheKey = await getAuctionCache(auction); + } catch (e) { + console.log(e); + console.log('Failed to get auction cache key'); + return tempCache; + } + const cache = tempCache.auctionCaches[cacheKey]?.info; + if (!cache) { + console.log('-----> No auction cache exists for', auction, 'returning'); + return tempCache; + } + const forEach = + (fn: ProcessAccountsFunc) => async (accounts: AccountAndPubkey[]) => { + for (const account of accounts) { + await fn(account, updateTemp); + } + }; + const auctionExtKey = await getAuctionExtended({ + auctionProgramId: AUCTION_ID, + resource: cache.vault, + }); + const promises = [ + // pull editions + pullEditions( + connection, + updateTemp, + tempCache, + cache.metadata.map(m => tempCache.metadataByMetadata[m]), + ), + // pull auction data ext + connection + .getAccountInfo(toPublicKey(auctionExtKey)) + .then(a => + a + ? processAuctions({ pubkey: auctionExtKey, account: a }, updateTemp) + : null, + ), + // bidder metadata pull + getProgramAccounts(connection, AUCTION_ID, { + filters: [ + { + memcmp: { + offset: 32, + bytes: auction, + }, + }, + ], + }).then(forEach(processAuctions)), + + // bidder pot pull + getProgramAccounts(connection, AUCTION_ID, { + filters: [ + { + memcmp: { + offset: 64, + bytes: auction, + }, + }, + ], + }).then(forEach(processAuctions)), + // safety deposit pull + getProgramAccounts(connection, VAULT_ID, { + filters: [ + { + memcmp: { + offset: 1, + bytes: cache.vault, + }, + }, + ], + }).then(forEach(processVaultData)), + + // bid redemptions + ...WHITELISTED_AUCTION_MANAGER.map(a => + getProgramAccounts(connection, METAPLEX_ID, { + filters: [ + { + memcmp: { + offset: 9, + bytes: cache.auctionManager, + }, + }, + ], + }).then(forEach(processMetaplexAccounts)), + ), + // safety deposit configs + getProgramAccounts(connection, METAPLEX_ID, { + filters: [ + { + memcmp: { + offset: 1, + bytes: cache.auctionManager, + }, + }, + ], + }).then(forEach(processMetaplexAccounts)), + // prize tracking tickets + ...cache.metadata + .map(md => + getProgramAccounts(connection, METAPLEX_ID, { + filters: [ + { + memcmp: { + offset: 1, + bytes: md, + }, + }, + ], + }).then(forEach(processMetaplexAccounts)), + ) + .flat(), + ]; + await Promise.all(promises); + console.log('---------->Pulled sub accounts for auction', auction); + + return tempCache; +}; + +export const pullPages = async ( + connection: Connection, +): Promise[]> => { + let i = 0; + + let pageKey = await getStoreIndexer(i); + let account = await connection.getAccountInfo(new PublicKey(pageKey)); + const pages: ParsedAccount[] = []; + while (account) { + pages.push({ + info: decodeStoreIndexer(account.data), + pubkey: pageKey, + account, + }); + i++; + + pageKey = await getStoreIndexer(i); + account = await connection.getAccountInfo(new PublicKey(pageKey)); + } + return pages; +}; + +export const pullPage = async ( + connection: Connection, + page: number, + tempCache: MetaState, +) => { + const updateTemp = makeSetter(tempCache); + const forEach = + (fn: ProcessAccountsFunc) => async (accounts: AccountAndPubkey[]) => { + for (const account of accounts) { + await fn(account, updateTemp); + } + }; + const pageKey = await getStoreIndexer(page); + const account = await connection.getAccountInfo(new PublicKey(pageKey)); + + if (account) { + processMetaplexAccounts( + { + pubkey: pageKey, + account, + }, + updateTemp, + ); + + const newPage = tempCache.storeIndexer.find(s => s.pubkey == pageKey); + + const auctionCaches = await getMultipleAccounts( + connection, + newPage?.info.auctionCaches || [], + 'single', + ); + + if (auctionCaches && auctionCaches.keys.length) { + console.log( + '-------->Page ', + page, + ' found', + auctionCaches.keys.length, + ' cached auction data', + ); + auctionCaches.keys.map((pubkey, i) => { + processMetaplexAccounts( + { + pubkey, + account: auctionCaches.array[i], + }, + updateTemp, + ); + }); + + const batches: Array = []; + + let currBatch: StringPublicKey[] = []; + for (let i = 0; i < auctionCaches.keys.length; i++) { + const cache = tempCache.auctionCaches[auctionCaches.keys[i]]; + + const totalNewAccountsToAdd = cache.info.metadata.length + 3; + + if ( + totalNewAccountsToAdd + currBatch.length > + MULTIPLE_ACCOUNT_BATCH_SIZE + ) { + batches.push(currBatch); + currBatch = []; + } else { + let newAdd = [ + ...cache.info.metadata, + cache.info.auction, + cache.info.auctionManager, + cache.info.vault, + ]; + currBatch = currBatch.concat(newAdd); + } + } + + if ( + currBatch.length > 0 && + currBatch.length <= MULTIPLE_ACCOUNT_BATCH_SIZE + ) { + batches.push(currBatch); + } + + console.log( + '------> From account caches for page', + page, + 'produced', + batches.length, + 'batches of accounts to pull', + ); + for (let i = 0; i < batches.length; i++) { + const accounts = await getMultipleAccounts( + connection, + batches[i], + 'single', + ); + if (accounts) { + console.log( + '------->Pulled batch', + i, + 'with', + batches[i].length, + 'accounts, processing....', + ); + for (let i = 0; i < accounts.keys.length; i++) { + const pubkey = accounts.keys[i]; + await processMetaplexAccounts( + { + pubkey, + account: accounts.array[i], + }, + updateTemp, + ); + await processVaultData( + { + pubkey, + account: accounts.array[i], + }, + updateTemp, + ); + await processMetaData( + { + pubkey, + account: accounts.array[i], + }, + updateTemp, + ); + await processAuctions( + { + pubkey, + account: accounts.array[i], + }, + updateTemp, + ); + } + } else { + console.log('------->Failed to pull batch', i, 'skipping'); + } + } + + for (let i = 0; i < auctionCaches.keys.length; i++) { + const auctionCache = tempCache.auctionCaches[auctionCaches.keys[i]]; + + const metadata = auctionCache.info.metadata.map( + s => tempCache.metadataByMetadata[s], + ); + tempCache.metadataByAuction[auctionCache.info.auction] = metadata; + } + } + + if (page == 0) { + console.log('-------->Page 0, pulling creators and store'); + await getProgramAccounts(connection, METAPLEX_ID, { + filters: [ + { + dataSize: MAX_WHITELISTED_CREATOR_SIZE, + }, + ], + }).then(forEach(processMetaplexAccounts)); + const store = programIds().store; + if (store) { + const storeAcc = await connection.getAccountInfo(store); + if (storeAcc) { + await processMetaplexAccounts( + { pubkey: store.toBase58(), account: storeAcc }, + updateTemp, + ); + } + } + } + + await postProcessMetadata(tempCache); + } + + return tempCache; +}; + +export const limitedLoadAccounts = async (connection: Connection) => { + const tempCache: MetaState = getEmptyMetaState(); + const updateTemp = makeSetter(tempCache); + + const forEach = + (fn: ProcessAccountsFunc) => async (accounts: AccountAndPubkey[]) => { + for (const account of accounts) { + await fn(account, updateTemp); + } + }; + + const pullMetadata = async (metadata: string) => { + const mdKey = new PublicKey(metadata); + const md = await connection.getAccountInfo(mdKey); + const mdObject = decodeMetadata( + Buffer.from(md?.data || new Uint8Array([])), + ); + const editionKey = await getEdition(mdObject.mint); + const editionData = await connection.getAccountInfo( + new PublicKey(editionKey), + ); + if (md) { + //@ts-ignore + md.owner = md.owner.toBase58(); + processMetaData( + { + pubkey: metadata, + account: md, + }, + updateTemp, + ); + if (editionData) { + //@ts-ignore + editionData.owner = editionData.owner.toBase58(); + processMetaData( + { + pubkey: editionKey, + account: editionData, + }, + updateTemp, + ); + } + } + }; + + const pullAuction = async (auction: string) => { + const auctionExtendedKey = await getAuctionExtended({ + auctionProgramId: AUCTION_ID, + resource: AUCTION_TO_VAULT[auction], + }); + + const auctionData = await getMultipleAccounts( + connection, + [auction, auctionExtendedKey], + 'single', + ); + + if (auctionData) { + auctionData.keys.map((pubkey, i) => { + processAuctions( + { + pubkey, + account: auctionData.array[i], + }, + updateTemp, + ); + }); + } + }; + + const pullAuctionManager = async (auctionManager: string) => { + const auctionManagerKey = new PublicKey(auctionManager); + const auctionManagerData = await connection.getAccountInfo( + auctionManagerKey, + ); + if (auctionManagerData) { + //@ts-ignore + auctionManagerData.owner = auctionManagerData.owner.toBase58(); + processMetaplexAccounts( + { + pubkey: auctionManager, + account: auctionManagerData, + }, + updateTemp, + ); + } + }; + + const pullVault = async (vault: string) => { + const vaultKey = new PublicKey(vault); + const vaultData = await connection.getAccountInfo(vaultKey); + if (vaultData) { + //@ts-ignore + vaultData.owner = vaultData.owner.toBase58(); + processVaultData( + { + pubkey: vault, + account: vaultData, + }, + updateTemp, + ); + } + }; + + const promises = [ + ...WHITELISTED_METADATA.map(md => pullMetadata(md)), + ...WHITELISTED_AUCTION.map(a => pullAuction(a)), + ...WHITELISTED_AUCTION_MANAGER.map(a => pullAuctionManager(a)), + ...WHITELISTED_VAULT.map(a => pullVault(a)), + // bidder metadata pull + ...WHITELISTED_AUCTION.map(a => + getProgramAccounts(connection, AUCTION_ID, { + filters: [ + { + memcmp: { + offset: 32, + bytes: a, + }, + }, + ], + }).then(forEach(processAuctions)), + ), + // bidder pot pull + ...WHITELISTED_AUCTION.map(a => + getProgramAccounts(connection, AUCTION_ID, { + filters: [ + { + memcmp: { + offset: 64, + bytes: a, + }, + }, + ], + }).then(forEach(processAuctions)), + ), + // safety deposit pull + ...WHITELISTED_VAULT.map(v => + getProgramAccounts(connection, VAULT_ID, { + filters: [ + { + memcmp: { + offset: 1, + bytes: v, + }, + }, + ], + }).then(forEach(processVaultData)), + ), + // bid redemptions + ...WHITELISTED_AUCTION_MANAGER.map(a => + getProgramAccounts(connection, METAPLEX_ID, { + filters: [ + { + memcmp: { + offset: 9, + bytes: a, + }, + }, + ], + }).then(forEach(processMetaplexAccounts)), + ), + // safety deposit configs + ...WHITELISTED_AUCTION_MANAGER.map(a => + getProgramAccounts(connection, METAPLEX_ID, { + filters: [ + { + memcmp: { + offset: 1, + bytes: a, + }, + }, + ], + }).then(forEach(processMetaplexAccounts)), + ), + // prize tracking tickets + ...Object.keys(AUCTION_TO_METADATA) + .map(key => + AUCTION_TO_METADATA[key] + .map(md => + getProgramAccounts(connection, METAPLEX_ID, { + filters: [ + { + memcmp: { + offset: 1, + bytes: md, + }, + }, + ], + }).then(forEach(processMetaplexAccounts)), + ) + .flat(), + ) + .flat(), + // whitelisted creators + getProgramAccounts(connection, METAPLEX_ID, { + filters: [ + { + dataSize: MAX_WHITELISTED_CREATOR_SIZE, + }, + ], + }).then(forEach(processMetaplexAccounts)), + ]; + + await Promise.all(promises); + + await postProcessMetadata(tempCache); + + return tempCache; +}; + +export const loadAccounts = async (connection: Connection) => { + const state: MetaState = getEmptyMetaState(); + const updateState = makeSetter(state); + const forEachAccount = processingAccounts(updateState); + + const forEach = + (fn: ProcessAccountsFunc) => async (accounts: AccountAndPubkey[]) => { + for (const account of accounts) { + await fn(account, updateState); + } + }; + + const loadVaults = () => + getProgramAccounts(connection, VAULT_ID).then( + forEachAccount(processVaultData), + ); + const loadAuctions = () => + getProgramAccounts(connection, AUCTION_ID).then( + forEachAccount(processAuctions), + ); + const loadMetaplex = () => + getProgramAccounts(connection, METAPLEX_ID).then( + forEachAccount(processMetaplexAccounts), + ); + const loadCreators = () => + getProgramAccounts(connection, METAPLEX_ID, { + filters: [ + { + dataSize: MAX_WHITELISTED_CREATOR_SIZE, + }, + ], + }).then(forEach(processMetaplexAccounts)); + const loadMetadata = () => + pullMetadataByCreators(connection, state, updateState); + const loadEditions = () => + pullEditions(connection, updateState, state, state.metadata); + + const loading = [ + loadCreators().then(loadMetadata).then(loadEditions), + loadVaults(), + loadAuctions(), + loadMetaplex(), + ]; + + await Promise.all(loading); + + state.metadata = uniqWith( + state.metadata, + (a: ParsedAccount, b: ParsedAccount) => + a.pubkey === b.pubkey, + ); + + return state; +}; + +const pullEditions = async ( + connection: Connection, + updater: UpdateStateValueFunc, + state: MetaState, + metadataArr: ParsedAccount[], +) => { + console.log('Pulling editions for optimized metadata'); + + type MultipleAccounts = UnPromise>; + let setOf100MetadataEditionKeys: string[] = []; + const editionPromises: Promise[] = []; + + const loadBatch = () => { + editionPromises.push( + getMultipleAccounts( + connection, + setOf100MetadataEditionKeys, + 'recent', + ).then(processEditions), + ); + setOf100MetadataEditionKeys = []; + }; + + const processEditions = (returnedAccounts: MultipleAccounts) => { + for (let j = 0; j < returnedAccounts.array.length; j++) { + processMetaData( + { + pubkey: returnedAccounts.keys[j], + account: returnedAccounts.array[j], + }, + updater, + ); + } + }; + + for (const metadata of metadataArr) { + let editionKey: StringPublicKey; + // TODO the nonce builder isnt working here, figure out why + //if (metadata.info.editionNonce === null) { + editionKey = await getEdition(metadata.info.mint); + /*} else { + editionKey = ( + await PublicKey.createProgramAddress( + [ + Buffer.from(METADATA_PREFIX), + toPublicKey(METADATA_PROGRAM_ID).toBuffer(), + toPublicKey(metadata.info.mint).toBuffer(), + new Uint8Array([metadata.info.editionNonce || 0]), + ], + toPublicKey(METADATA_PROGRAM_ID), + ) + ).toBase58(); + }*/ + + setOf100MetadataEditionKeys.push(editionKey); + + if (setOf100MetadataEditionKeys.length >= 100) { + loadBatch(); + } + } + + if (setOf100MetadataEditionKeys.length >= 0) { + loadBatch(); + } + + await Promise.all(editionPromises); + + console.log( + 'Edition size', + Object.keys(state.editions).length, + Object.keys(state.masterEditions).length, + ); +}; + +const pullMetadataByCreators = ( + connection: Connection, + state: MetaState, + updater: UpdateStateValueFunc, +): Promise => { + console.log('pulling optimized nfts'); + + const whitelistedCreators = Object.values(state.whitelistedCreatorsByCreator); + + const setter: UpdateStateValueFunc = async (prop, key, value) => { + if (prop === 'metadataByMint') { + await initMetadata(value, state.whitelistedCreatorsByCreator, updater); + } else { + updater(prop, key, value); + } + }; + const forEachAccount = processingAccounts(setter); + + const additionalPromises: Promise[] = []; + for (const creator of whitelistedCreators) { + for (let i = 0; i < MAX_CREATOR_LIMIT; i++) { + const promise = getProgramAccounts(connection, METADATA_PROGRAM_ID, { + filters: [ + { + memcmp: { + offset: + 1 + // key + 32 + // update auth + 32 + // mint + 4 + // name string length + MAX_NAME_LENGTH + // name + 4 + // uri string length + MAX_URI_LENGTH + // uri + 4 + // symbol string length + MAX_SYMBOL_LENGTH + // symbol + 2 + // seller fee basis points + 1 + // whether or not there is a creators vec + 4 + // creators vec length + i * MAX_CREATOR_LEN, + bytes: creator.info.address, + }, + }, + ], + }).then(forEachAccount(processMetaData)); + additionalPromises.push(promise); + } + } + + return Promise.all(additionalPromises); +}; + +export const makeSetter = + (state: MetaState): UpdateStateValueFunc => + (prop, key, value) => { + if (prop === 'store') { + state[prop] = value; + } else if (prop === 'metadata') { + state.metadata.push(value); + } else if (prop === 'storeIndexer') { + state.storeIndexer = state.storeIndexer.filter( + p => p.info.page.toNumber() != value.info.page.toNumber(), + ); + state.storeIndexer.push(value); + state.storeIndexer = state.storeIndexer.sort((a, b) => + a.info.page.sub(b.info.page).toNumber(), + ); + } else { + state[prop][key] = value; + } + return state; + }; + +export const processingAccounts = + (updater: UpdateStateValueFunc) => + (fn: ProcessAccountsFunc) => + async (accounts: AccountAndPubkey[]) => { + await createPipelineExecutor( + accounts.values(), + account => fn(account, updater), + { + sequence: 10, + delay: 1, + jobsCount: 3, + }, + ); + }; + +const postProcessMetadata = async (state: MetaState) => { + const values = Object.values(state.metadataByMint); + + for (const metadata of values) { + await metadataByMintUpdater(metadata, state); + } +}; + +export const metadataByMintUpdater = async ( + metadata: ParsedAccount, + state: MetaState, +) => { + const key = metadata.info.mint; + if (isMetadataPartOfStore(metadata, state.whitelistedCreatorsByCreator)) { + await metadata.info.init(); + const masterEditionKey = metadata.info?.masterEdition; + if (masterEditionKey) { + state.metadataByMasterEdition[masterEditionKey] = metadata; + } + state.metadataByMint[key] = metadata; + if (!state.metadataByMint[key]) state.metadata.push(metadata); + } else { + delete state.metadataByMint[key]; + } + return state; +}; + +export const initMetadata = async ( + metadata: ParsedAccount, + whitelistedCreators: Record>, + setter: UpdateStateValueFunc, +) => { + if (isMetadataPartOfStore(metadata, whitelistedCreators)) { + await metadata.info.init(); + setter('metadataByMint', metadata.info.mint, metadata); + setter('metadata', '', metadata); + const masterEditionKey = metadata.info?.masterEdition; + if (masterEditionKey) { + setter('metadataByMasterEdition', masterEditionKey, metadata); + } + } +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/meta.tsx b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/meta.tsx new file mode 100644 index 0000000..5b6a930 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/meta.tsx @@ -0,0 +1,328 @@ +import React, { useCallback, useContext, useEffect, useState } from 'react'; +import { queryExtendedMetadata } from './queryExtendedMetadata'; +import { subscribeAccountsChange } from './subscribeAccountsChange'; +import { getEmptyMetaState } from './getEmptyMetaState'; +import { + limitedLoadAccounts, + loadAccounts, + pullYourMetadata, + USE_SPEED_RUN, +} from './loadAccounts'; +import { MetaContextState, MetaState } from './types'; +import { useConnection } from '../connection'; +import { useStore } from '../store'; +import { AuctionData, BidderMetadata, BidderPot } from '../../actions'; +import { + pullAuctionSubaccounts, + pullPage, + pullPayoutTickets, + pullStoreMetadata, +} from '.'; +import { StringPublicKey, TokenAccount, useUserAccounts } from '../..'; + +const MetaContext = React.createContext({ + ...getEmptyMetaState(), + isLoading: false, + // @ts-ignore + update: () => [AuctionData, BidderMetadata, BidderPot], +}); + +export function MetaProvider({ children = null as any }) { + const connection = useConnection(); + const { isReady, storeAddress } = useStore(); + + const [state, setState] = useState(getEmptyMetaState()); + const [page, setPage] = useState(0); + const [metadataLoaded, setMetadataLoaded] = useState(false); + const [lastLength, setLastLength] = useState(0); + const { userAccounts } = useUserAccounts(); + + const [isLoading, setIsLoading] = useState(true); + + const updateMints = useCallback( + async metadataByMint => { + try { + const { metadata, mintToMetadata } = await queryExtendedMetadata( + connection, + metadataByMint, + ); + setState(current => ({ + ...current, + metadata, + metadataByMint: mintToMetadata, + })); + } catch (er) { + console.error(er); + } + }, + [setState], + ); + async function pullAllMetadata() { + if (isLoading) return false; + if (!storeAddress) { + if (isReady) { + setIsLoading(false); + } + return; + } else if (!state.store) { + setIsLoading(true); + } + setIsLoading(true); + const nextState = await pullStoreMetadata(connection, state); + setIsLoading(false); + setState(nextState); + await updateMints(nextState.metadataByMint); + return []; + } + + async function pullBillingPage(auctionAddress: StringPublicKey) { + if (isLoading) return false; + if (!storeAddress) { + if (isReady) { + setIsLoading(false); + } + return; + } else if (!state.store) { + setIsLoading(true); + } + const nextState = await pullAuctionSubaccounts( + connection, + auctionAddress, + state, + ); + + console.log('-----> Pulling all payout tickets'); + await pullPayoutTickets(connection, nextState); + + setState(nextState); + await updateMints(nextState.metadataByMint); + return []; + } + + async function pullAuctionPage(auctionAddress: StringPublicKey) { + if (isLoading) return state; + if (!storeAddress) { + if (isReady) { + setIsLoading(false); + } + return state; + } else if (!state.store) { + setIsLoading(true); + } + const nextState = await pullAuctionSubaccounts( + connection, + auctionAddress, + state, + ); + setState(nextState); + await updateMints(nextState.metadataByMint); + return nextState; + } + + async function update( + auctionAddress?: any, + bidderAddress?: any, + userTokenAccounts?: TokenAccount[], + ) { + if (!storeAddress) { + if (isReady) { + //@ts-ignore + window.loadingData = false; + setIsLoading(false); + } + return; + } else if (!state.store) { + //@ts-ignore + window.loadingData = true; + setIsLoading(true); + } + + console.log('-----> Query started'); + + let nextState = await pullPage(connection, page, state); + + if (nextState.storeIndexer.length) { + if (USE_SPEED_RUN) { + nextState = await limitedLoadAccounts(connection); + + console.log('------->Query finished'); + + setState(nextState); + + //@ts-ignore + window.loadingData = false; + setIsLoading(false); + } else { + console.log('------->Pagination detected, pulling page', page); + + // Ensures we get the latest so beat race conditions and avoid double pulls. + let currMetadataLoaded = false; + setMetadataLoaded(loaded => { + currMetadataLoaded = loaded; + return loaded; + }); + if ( + userTokenAccounts && + userTokenAccounts.length && + !currMetadataLoaded + ) { + console.log('--------->User metadata loading now.'); + + setMetadataLoaded(true); + nextState = await pullYourMetadata( + connection, + userTokenAccounts, + nextState, + ); + } + + const auction = window.location.href.match(/#\/auction\/(\w+)/); + const billing = window.location.href.match( + /#\/auction\/(\w+)\/billing/, + ); + if (auction && page == 0) { + console.log( + '---------->Loading auction page on initial load, pulling sub accounts', + ); + + nextState = await pullAuctionSubaccounts( + connection, + auction[1], + nextState, + ); + + if (billing) { + console.log('-----> Pulling all payout tickets'); + await pullPayoutTickets(connection, nextState); + } + } + + let currLastLength; + setLastLength(last => { + currLastLength = last; + return last; + }); + if (nextState.storeIndexer.length != currLastLength) { + setPage(page => page + 1); + } + setLastLength(nextState.storeIndexer.length); + + //@ts-ignore + window.loadingData = false; + setIsLoading(false); + setState(nextState); + } + } else { + console.log('------->No pagination detected'); + nextState = !USE_SPEED_RUN + ? await loadAccounts(connection) + : await limitedLoadAccounts(connection); + + console.log('------->Query finished'); + + setState(nextState); + + //@ts-ignore + window.loadingData = false; + setIsLoading(false); + } + + console.log('------->set finished'); + + await updateMints(nextState.metadataByMint); + + if (auctionAddress && bidderAddress) { + const auctionBidderKey = auctionAddress + '-' + bidderAddress; + return [ + nextState.auctions[auctionAddress], + nextState.bidderPotsByAuctionAndBidder[auctionBidderKey], + nextState.bidderMetadataByAuctionAndBidder[auctionBidderKey], + ]; + } + } + + useEffect(() => { + //@ts-ignore + if (window.loadingData) { + console.log('currently another update is running, so queue for 3s...'); + const interval = setInterval(() => { + //@ts-ignore + if (window.loadingData) { + console.log('not running queued update right now, still loading'); + } else { + console.log('running queued update'); + update(undefined, undefined, userAccounts); + clearInterval(interval); + } + }, 3000); + } else { + console.log('no update is running, updating.'); + update(undefined, undefined, userAccounts); + } + }, [ + connection, + setState, + updateMints, + storeAddress, + isReady, + page, + userAccounts.length > 0, + ]); + + useEffect(() => { + if (isLoading) { + return; + } + + return subscribeAccountsChange(connection, () => state, setState); + }, [connection, setState, isLoading, state]); + + // TODO: fetch names dynamically + // TODO: get names for creators + // useEffect(() => { + // (async () => { + // const twitterHandles = await connection.getProgramAccounts(NAME_PROGRAM_ID, { + // filters: [ + // { + // dataSize: TWITTER_ACCOUNT_LENGTH, + // }, + // { + // memcmp: { + // offset: VERIFICATION_AUTHORITY_OFFSET, + // bytes: TWITTER_VERIFICATION_AUTHORITY.toBase58() + // } + // } + // ] + // }); + + // const handles = twitterHandles.map(t => { + // const owner = new PublicKey(t.account.data.slice(32, 64)); + // const name = t.account.data.slice(96, 114).toString(); + // }); + + // console.log(handles); + + // })(); + // }, [whitelistedCreatorsByCreator]); + + return ( + + {children} + + ); +} + +export const useMeta = () => { + const context = useContext(MetaContext); + return context; +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/onChangeAccount.ts b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/onChangeAccount.ts new file mode 100644 index 0000000..8ddd312 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/onChangeAccount.ts @@ -0,0 +1,25 @@ +import { ProgramAccountChangeCallback } from '@solana/web3.js'; +import { pubkeyToString } from '../../utils'; +import { ProcessAccountsFunc, UpdateStateValueFunc } from './types'; + +export const onChangeAccount = + ( + process: ProcessAccountsFunc, + setter: UpdateStateValueFunc, + ): ProgramAccountChangeCallback => + async info => { + const pubkey = pubkeyToString(info.accountId); + const account = info.accountInfo + + await process( + { + pubkey, + account: { + ...account, + // to make sure these accounts get processed by processAuctions, processVaultData, etc + owner: account.owner.toBase58() as unknown as any + }, + }, + setter, + ); + }; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/processAuctions.ts b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/processAuctions.ts new file mode 100644 index 0000000..11355cb --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/processAuctions.ts @@ -0,0 +1,104 @@ +import { + AuctionData, + AuctionDataExtended, + AuctionDataExtendedParser, + AuctionParser, + BidderMetadata, + BidderMetadataParser, + BidderPot, + BidderPotParser, + BIDDER_METADATA_LEN, + BIDDER_POT_LEN, + MAX_AUCTION_DATA_EXTENDED_SIZE, +} from '../../actions'; +import { AUCTION_ID, pubkeyToString } from '../../utils'; +import { ParsedAccount } from '../accounts'; +import { cache } from '../accounts'; +import { CheckAccountFunc, ProcessAccountsFunc } from './types'; + +export const processAuctions: ProcessAccountsFunc = ( + { account, pubkey }, + setter, +) => { + if (!isAuctionAccount(account)) return; + + try { + const parsedAccount = cache.add( + pubkey, + account, + AuctionParser, + false, + ) as ParsedAccount; + setter('auctions', pubkey, parsedAccount); + } catch (e) { + // ignore errors + // add type as first byte for easier deserialization + } + + try { + if (isExtendedAuctionAccount(account)) { + const parsedAccount = cache.add( + pubkey, + account, + AuctionDataExtendedParser, + false, + ) as ParsedAccount; + setter('auctionDataExtended', pubkey, parsedAccount); + } + } catch { + // ignore errors + // add type as first byte for easier deserialization + } + + try { + if (isBidderMetadataAccount(account)) { + const parsedAccount = cache.add( + pubkey, + account, + BidderMetadataParser, + false, + ) as ParsedAccount; + setter( + 'bidderMetadataByAuctionAndBidder', + parsedAccount.info.auctionPubkey + + '-' + + parsedAccount.info.bidderPubkey, + parsedAccount, + ); + } + } catch { + // ignore errors + // add type as first byte for easier deserialization + } + + try { + if (isBidderPotAccount(account)) { + const parsedAccount = cache.add( + pubkey, + account, + BidderPotParser, + false, + ) as ParsedAccount; + setter( + 'bidderPotsByAuctionAndBidder', + parsedAccount.info.auctionAct + '-' + parsedAccount.info.bidderAct, + parsedAccount, + ); + } + } catch { + // ignore errors + // add type as first byte for easier deserialization + } +}; + +const isAuctionAccount: CheckAccountFunc = account => + account && pubkeyToString(account.owner) === AUCTION_ID; + +const isExtendedAuctionAccount: CheckAccountFunc = account => + account.data.length === MAX_AUCTION_DATA_EXTENDED_SIZE; + +const isBidderMetadataAccount: CheckAccountFunc = account => + account.data.length === BIDDER_METADATA_LEN; + +const isBidderPotAccount: CheckAccountFunc = account => + account.data.length === BIDDER_POT_LEN; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/processMetaData.ts b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/processMetaData.ts new file mode 100644 index 0000000..62577fb --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/processMetaData.ts @@ -0,0 +1,105 @@ +import { AccountInfo } from '@solana/web3.js'; +import { ProcessAccountsFunc } from './types'; +import { isValidHttpUrl } from '../../utils/isValidHttpUrl'; +import { + decodeEdition, + decodeMasterEdition, + decodeMetadata, + Edition, + MasterEditionV1, + MasterEditionV2, + Metadata, + MetadataKey, +} from '../../actions'; +import { ParsedAccount } from '../accounts/types'; +import { METADATA_PROGRAM_ID, pubkeyToString } from '../../utils'; + +export const processMetaData: ProcessAccountsFunc = async ( + { account, pubkey }, + setter, +) => { + if (!isMetadataAccount(account)) return; + try { + if (isMetadataV1Account(account)) { + const metadata = decodeMetadata(account.data); + + if ( + isValidHttpUrl(metadata.data.uri) && + metadata.data.uri.indexOf('arweave') >= 0 + ) { + const parsedAccount: ParsedAccount = { + pubkey, + account, + info: metadata, + }; + + await setter('metadataByMint', metadata.mint, parsedAccount); + await setter('metadataByMetadata', pubkey, parsedAccount); + } + } + + if (isEditionV1Account(account)) { + const edition = decodeEdition(account.data); + const parsedAccount: ParsedAccount = { + pubkey, + account, + info: edition, + }; + setter('editions', pubkey, parsedAccount); + } + + if (isMasterEditionAccount(account)) { + const masterEdition = decodeMasterEdition(account.data); + + if (isMasterEditionV1(masterEdition)) { + const parsedAccount: ParsedAccount = { + pubkey, + account, + info: masterEdition, + }; + setter('masterEditions', pubkey, parsedAccount); + + setter( + 'masterEditionsByPrintingMint', + masterEdition.printingMint, + parsedAccount, + ); + + setter( + 'masterEditionsByOneTimeAuthMint', + masterEdition.oneTimePrintingAuthorizationMint, + parsedAccount, + ); + } else { + const parsedAccount: ParsedAccount = { + pubkey, + account, + info: masterEdition, + }; + setter('masterEditions', pubkey, parsedAccount); + } + } + } catch { + // ignore errors + // add type as first byte for easier deserialization + } +}; + +const isMetadataAccount = (account: AccountInfo) => + account && pubkeyToString(account.owner) === METADATA_PROGRAM_ID; + +const isMetadataV1Account = (account: AccountInfo) => + account.data[0] === MetadataKey.MetadataV1; + +const isEditionV1Account = (account: AccountInfo) => + account.data[0] === MetadataKey.EditionV1; + +const isMasterEditionAccount = (account: AccountInfo) => + account.data[0] === MetadataKey.MasterEditionV1 || + account.data[0] === MetadataKey.MasterEditionV2; + +const isMasterEditionV1 = ( + me: MasterEditionV1 | MasterEditionV2, +): me is MasterEditionV1 => { + return me.key === MetadataKey.MasterEditionV1; +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/processMetaplexAccounts.ts b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/processMetaplexAccounts.ts new file mode 100644 index 0000000..c18e909 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/processMetaplexAccounts.ts @@ -0,0 +1,218 @@ +import { AccountInfo, PublicKey } from '@solana/web3.js'; +import { + AuctionManagerV1, + AuctionManagerV2, + BidRedemptionTicket, + decodeAuctionManager, + decodeBidRedemptionTicket, + decodeStore, + isCreatorPartOfTheStore, + MetaplexKey, + Store, + WhitelistedCreator, + WhitelistedCreatorParser, + PayoutTicket, + decodePayoutTicket, + PrizeTrackingTicket, + decodePrizeTrackingTicket, + BidRedemptionTicketV2, + decodeSafetyDepositConfig, + SafetyDepositConfig, + decodeAuctionCache, + AuctionCache, + decodeStoreIndexer, + StoreIndexer, +} from '../../models'; +import { ProcessAccountsFunc } from './types'; +import { METAPLEX_ID, programIds, pubkeyToString } from '../../utils'; +import { ParsedAccount } from '../accounts'; +import { cache } from '../accounts'; + +export const processMetaplexAccounts: ProcessAccountsFunc = async ( + { account, pubkey }, + setter, +) => { + if (!isMetaplexAccount(account)) return; + + try { + const STORE_ID = programIds().store; + + if ( + isAuctionManagerV1Account(account) || + isAuctionManagerV2Account(account) + ) { + const storeKey = new PublicKey(account.data.slice(1, 33)); + + if (STORE_ID && storeKey.equals(STORE_ID)) { + const auctionManager = decodeAuctionManager(account.data); + + const parsedAccount: ParsedAccount< + AuctionManagerV1 | AuctionManagerV2 + > = { + pubkey, + account, + info: auctionManager, + }; + setter( + 'auctionManagersByAuction', + auctionManager.auction, + parsedAccount, + ); + } + } + + if ( + isBidRedemptionTicketV1Account(account) || + isBidRedemptionTicketV2Account(account) + ) { + const ticket = decodeBidRedemptionTicket(account.data); + const parsedAccount: ParsedAccount = { + pubkey, + account, + info: ticket, + }; + setter('bidRedemptions', pubkey, parsedAccount); + + if (ticket.key == MetaplexKey.BidRedemptionTicketV2) { + const asV2 = ticket as BidRedemptionTicketV2; + if (asV2.winnerIndex) { + setter( + 'bidRedemptionV2sByAuctionManagerAndWinningIndex', + asV2.auctionManager + '-' + asV2.winnerIndex.toNumber(), + parsedAccount, + ); + } + } + } + + if (isPayoutTicketV1Account(account)) { + const ticket = decodePayoutTicket(account.data); + const parsedAccount: ParsedAccount = { + pubkey, + account, + info: ticket, + }; + setter('payoutTickets', pubkey, parsedAccount); + } + + if (isAuctionCacheV1Account(account)) { + const cache = decodeAuctionCache(account.data); + const parsedAccount: ParsedAccount = { + pubkey, + account, + info: cache, + }; + setter('auctionCaches', pubkey, parsedAccount); + } + + if (isStoreIndexerV1Account(account)) { + const indexer = decodeStoreIndexer(account.data); + const parsedAccount: ParsedAccount = { + pubkey, + account, + info: indexer, + }; + if (parsedAccount.info.store == STORE_ID?.toBase58()) { + setter('storeIndexer', pubkey, parsedAccount); + } + } + + if (isPrizeTrackingTicketV1Account(account)) { + const ticket = decodePrizeTrackingTicket(account.data); + const parsedAccount: ParsedAccount = { + pubkey, + account, + info: ticket, + }; + setter('prizeTrackingTickets', pubkey, parsedAccount); + } + + if (isStoreV1Account(account)) { + const store = decodeStore(account.data); + const parsedAccount: ParsedAccount = { + pubkey, + account, + info: store, + }; + if (STORE_ID && pubkey === STORE_ID.toBase58()) { + setter('store', pubkey, parsedAccount); + } + } + + if (isSafetyDepositConfigV1Account(account)) { + const config = decodeSafetyDepositConfig(account.data); + const parsedAccount: ParsedAccount = { + pubkey, + account, + info: config, + }; + setter( + 'safetyDepositConfigsByAuctionManagerAndIndex', + config.auctionManager + '-' + config.order.toNumber(), + parsedAccount, + ); + } + + if (isWhitelistedCreatorV1Account(account)) { + const parsedAccount = cache.add( + pubkey, + account, + WhitelistedCreatorParser, + false, + ) as ParsedAccount; + + // TODO: figure out a way to avoid generating creator addresses during parsing + // should we store store id inside creator? + if (STORE_ID) { + const isWhitelistedCreator = await isCreatorPartOfTheStore( + parsedAccount.info.address, + pubkey, + ); + if (isWhitelistedCreator) { + setter( + 'whitelistedCreatorsByCreator', + parsedAccount.info.address, + parsedAccount, + ); + } + } + } + } catch { + // ignore errors + // add type as first byte for easier deserialization + } +}; + +const isMetaplexAccount = (account: AccountInfo) => + account && pubkeyToString(account.owner) === METAPLEX_ID; + +const isAuctionManagerV1Account = (account: AccountInfo) => + account.data[0] === MetaplexKey.AuctionManagerV1; + +const isAuctionManagerV2Account = (account: AccountInfo) => + account.data[0] === MetaplexKey.AuctionManagerV2; + +const isBidRedemptionTicketV1Account = (account: AccountInfo) => + account.data[0] === MetaplexKey.BidRedemptionTicketV1; + +const isBidRedemptionTicketV2Account = (account: AccountInfo) => + account.data[0] === MetaplexKey.BidRedemptionTicketV2; + +const isPayoutTicketV1Account = (account: AccountInfo) => + account.data[0] === MetaplexKey.PayoutTicketV1; + +const isPrizeTrackingTicketV1Account = (account: AccountInfo) => + account.data[0] === MetaplexKey.PrizeTrackingTicketV1; + +const isStoreV1Account = (account: AccountInfo) => + account.data[0] === MetaplexKey.StoreV1; + +const isSafetyDepositConfigV1Account = (account: AccountInfo) => + account.data[0] === MetaplexKey.SafetyDepositConfigV1; + +const isWhitelistedCreatorV1Account = (account: AccountInfo) => + account.data[0] === MetaplexKey.WhitelistedCreatorV1; +const isAuctionCacheV1Account = (account: AccountInfo) => + account.data[0] === MetaplexKey.AuctionCacheV1; +const isStoreIndexerV1Account = (account: AccountInfo) => + account.data[0] === MetaplexKey.StoreIndexerV1; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/processVaultData.ts b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/processVaultData.ts new file mode 100644 index 0000000..29c8b13 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/processVaultData.ts @@ -0,0 +1,56 @@ +import { AccountInfo } from '@solana/web3.js'; +import { + decodeSafetyDeposit, + decodeVault, + SafetyDepositBox, + Vault, + VaultKey, +} from '../../actions'; +import { VAULT_ID, pubkeyToString } from '../../utils'; +import { ParsedAccount } from '../accounts/types'; +import { ProcessAccountsFunc } from './types'; + +export const processVaultData: ProcessAccountsFunc = ( + { account, pubkey }, + setter, +) => { + if (!isVaultAccount(account)) return; + + try { + if (isSafetyDepositBoxV1Account(account)) { + const safetyDeposit = decodeSafetyDeposit(account.data); + const parsedAccount: ParsedAccount = { + pubkey, + account: account, + info: safetyDeposit, + }; + setter( + 'safetyDepositBoxesByVaultAndIndex', + safetyDeposit.vault + '-' + safetyDeposit.order, + parsedAccount, + ); + } + if (isVaultV1Account(account)) { + const vault = decodeVault(account.data); + const parsedAccount: ParsedAccount = { + pubkey, + account: account, + info: vault, + }; + + setter('vaults', pubkey, parsedAccount); + } + } catch { + // ignore errors + // add type as first byte for easier deserialization + } +}; + +const isVaultAccount = (account: AccountInfo) => + account && pubkeyToString(account.owner) === VAULT_ID; + +const isSafetyDepositBoxV1Account = (account: AccountInfo) => + account.data[0] === VaultKey.SafetyDepositBoxV1; + +const isVaultV1Account = (account: AccountInfo) => + account.data[0] === VaultKey.VaultV1; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/queryExtendedMetadata.ts b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/queryExtendedMetadata.ts new file mode 100644 index 0000000..10f429b --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/queryExtendedMetadata.ts @@ -0,0 +1,46 @@ +import { MintInfo } from '@solana/spl-token'; +import { Connection } from '@solana/web3.js'; +import { Metadata } from '../../actions'; +import { ParsedAccount } from '../accounts'; +import { cache } from '../accounts'; +import { getMultipleAccounts } from '../accounts'; +import { MintParser } from '../accounts'; + +export const queryExtendedMetadata = async ( + connection: Connection, + mintToMeta: Record>, +) => { + const mintToMetadata = { ...mintToMeta }; + + const mints = await getMultipleAccounts( + connection, + [...Object.keys(mintToMetadata)].filter(k => !cache.get(k)), + 'single', + ); + + mints.keys.forEach((key, index) => { + const mintAccount = mints.array[index]; + if (mintAccount) { + const mint = cache.add( + key, + mintAccount, + MintParser, + false, + ) as ParsedAccount; + if (!mint.info.supply.eqn(1) || mint.info.decimals !== 0) { + // naive not NFT check + delete mintToMetadata[key]; + } else { + // const metadata = mintToMetadata[key]; + } + } + }); + + // await Promise.all([...extendedMetadataFetch.values()]); + const metadata = [...Object.values(mintToMetadata)]; + + return { + metadata, + mintToMetadata, + }; +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/subscribeAccountsChange.ts b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/subscribeAccountsChange.ts new file mode 100644 index 0000000..d9ad9f2 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/subscribeAccountsChange.ts @@ -0,0 +1,84 @@ +import { Connection } from '@solana/web3.js'; +import { + AUCTION_ID, + METADATA_PROGRAM_ID, + METAPLEX_ID, + toPublicKey, + VAULT_ID, +} from '../../utils'; +import { makeSetter, initMetadata } from './loadAccounts'; +import { onChangeAccount } from './onChangeAccount'; +import { processAuctions } from './processAuctions'; +import { processMetaData } from './processMetaData'; +import { processMetaplexAccounts } from './processMetaplexAccounts'; +import { processVaultData } from './processVaultData'; +import { MetaState, UpdateStateValueFunc } from './types'; + +export const subscribeAccountsChange = ( + connection: Connection, + getState: () => MetaState, + setState: (v: MetaState) => void, +) => { + const subscriptions: number[] = []; + + const updateStateValue: UpdateStateValueFunc = (prop, key, value) => { + const state = getState(); + const nextState = makeSetter({ ...state })(prop, key, value); + setState(nextState); + }; + + subscriptions.push( + connection.onProgramAccountChange( + toPublicKey(VAULT_ID), + onChangeAccount(processVaultData, updateStateValue), + ), + ); + + subscriptions.push( + connection.onProgramAccountChange( + toPublicKey(AUCTION_ID), + onChangeAccount(processAuctions, updateStateValue), + ), + ); + + subscriptions.push( + connection.onProgramAccountChange( + toPublicKey(METAPLEX_ID), + onChangeAccount(processMetaplexAccounts, updateStateValue), + ), + ); + + subscriptions.push( + connection.onProgramAccountChange( + toPublicKey(METADATA_PROGRAM_ID), + onChangeAccount(processMetaData, async (prop, key, value) => { + const state = { ...getState() }; + const setter = makeSetter(state); + let hasChanges = false; + const updater: UpdateStateValueFunc = (...args) => { + hasChanges = true; + setter(...args); + }; + + if (prop === 'metadataByMint') { + await initMetadata( + value, + state.whitelistedCreatorsByCreator, + updater, + ); + } else { + updater(prop, key, value); + } + if (hasChanges) { + setState(state); + } + }), + ), + ); + + return () => { + subscriptions.forEach(subscriptionId => { + connection.removeProgramAccountChangeListener(subscriptionId); + }); + }; +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/types.ts b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/types.ts new file mode 100644 index 0000000..31b5a96 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/types.ts @@ -0,0 +1,120 @@ +import { AccountInfo } from '@solana/web3.js'; +import { TokenAccount } from '../..'; +import { + AuctionData, + AuctionDataExtended, + BidderMetadata, + BidderPot, + Edition, + MasterEditionV1, + MasterEditionV2, + Metadata, + SafetyDepositBox, + Vault, +} from '../../actions'; +import { + AuctionCache, + AuctionManagerV1, + AuctionManagerV2, + BidRedemptionTicket, + BidRedemptionTicketV2, + PayoutTicket, + PrizeTrackingTicket, + SafetyDepositConfig, + Store, + StoreIndexer, + WhitelistedCreator, +} from '../../models/metaplex'; +import { PublicKeyStringAndAccount, StringPublicKey } from '../../utils'; +import { ParsedAccount } from '../accounts/types'; + +export interface MetaState { + metadata: ParsedAccount[]; + metadataByMint: Record>; + metadataByMetadata: Record>; + + metadataByAuction: Record[]>; + metadataByMasterEdition: Record>; + editions: Record>; + masterEditions: Record< + string, + ParsedAccount + >; + masterEditionsByPrintingMint: Record>; + masterEditionsByOneTimeAuthMint: Record< + string, + ParsedAccount + >; + prizeTrackingTickets: Record>; + auctionManagersByAuction: Record< + string, + ParsedAccount + >; + safetyDepositConfigsByAuctionManagerAndIndex: Record< + string, + ParsedAccount + >; + bidRedemptionV2sByAuctionManagerAndWinningIndex: Record< + string, + ParsedAccount + >; + auctions: Record>; + auctionDataExtended: Record>; + vaults: Record>; + store: ParsedAccount | null; + bidderMetadataByAuctionAndBidder: Record< + string, + ParsedAccount + >; + safetyDepositBoxesByVaultAndIndex: Record< + string, + ParsedAccount + >; + bidderPotsByAuctionAndBidder: Record>; + bidRedemptions: Record>; + whitelistedCreatorsByCreator: Record< + string, + ParsedAccount + >; + payoutTickets: Record>; + auctionCaches: Record>; + storeIndexer: ParsedAccount[]; +} + +export interface MetaContextState extends MetaState { + isLoading: boolean; + update: ( + auctionAddress?: any, + bidderAddress?: any, + ) => [ + ParsedAccount, + ParsedAccount, + ParsedAccount, + ]; + pullAuctionPage: (auctionAddress: StringPublicKey) => Promise; + pullBillingPage: (auctionAddress: StringPublicKey) => void; + + pullAllMetadata: () => void; +} + +export type AccountAndPubkey = { + pubkey: string; + account: AccountInfo; +}; + +export type UpdateStateValueFunc = ( + prop: keyof MetaState, + key: string, + value: ParsedAccount, +) => T; + +export type ProcessAccountsFunc = ( + account: PublicKeyStringAndAccount, + setter: UpdateStateValueFunc, +) => void; + +export type CheckAccountFunc = (account: AccountInfo) => boolean; + +export type UnPromise> = T extends Promise + ? U + : never; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/web3.ts b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/web3.ts new file mode 100644 index 0000000..4449101 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contexts/meta/web3.ts @@ -0,0 +1,61 @@ +import { AccountInfo, Connection } from '@solana/web3.js'; +import { StringPublicKey } from '../../utils/ids'; +import { AccountAndPubkey } from './types'; + +export async function getProgramAccounts( + connection: Connection, + programId: StringPublicKey, + configOrCommitment?: any, +): Promise> { + const extra: any = {}; + let commitment; + //let encoding; + + if (configOrCommitment) { + if (typeof configOrCommitment === 'string') { + commitment = configOrCommitment; + } else { + commitment = configOrCommitment.commitment; + //encoding = configOrCommitment.encoding; + + if (configOrCommitment.dataSlice) { + extra.dataSlice = configOrCommitment.dataSlice; + } + + if (configOrCommitment.filters) { + extra.filters = configOrCommitment.filters; + } + } + } + + const args = connection._buildArgs([programId], commitment, 'base64', extra); + const unsafeRes = await (connection as any)._rpcRequest( + 'getProgramAccounts', + args, + ); + + return unsafeResAccounts(unsafeRes.result); +} + +export function unsafeAccount(account: AccountInfo<[string, string]>) { + return { + // TODO: possible delay parsing could be added here + data: Buffer.from(account.data[0], 'base64'), + executable: account.executable, + lamports: account.lamports, + // TODO: maybe we can do it in lazy way? or just use string + owner: account.owner, + } as AccountInfo; +} + +export function unsafeResAccounts( + data: Array<{ + account: AccountInfo<[string, string]>; + pubkey: string; + }>, +) { + return data.map(item => ({ + account: unsafeAccount(item.account), + pubkey: item.pubkey, + })); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contexts/store.tsx b/CandyMachine-Storefront/store/js/packages/common/src/contexts/store.tsx new file mode 100644 index 0000000..2649120 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contexts/store.tsx @@ -0,0 +1,73 @@ +import React, { + createContext, + FC, + useState, + useContext, + useEffect, + useMemo, +} from 'react'; +import { getStoreID, setProgramIds, StringPublicKey } from '../utils'; +import { useQuerySearch } from '../hooks'; + +interface StoreConfig { + // Store Address + storeAddress?: StringPublicKey; + // Store was configured via ENV or query params + isConfigured: boolean; + // Initial calculating of store address completed (successfully or not) + isReady: boolean; + // recalculate store address for specified owner address + setStoreForOwner: (ownerAddress?: string) => Promise; +} + +export const StoreContext = createContext(null!); + +export const StoreProvider: FC<{ + ownerAddress?: string; + storeAddress?: string; +}> = ({ children, ownerAddress, storeAddress }) => { + const searchParams = useQuerySearch(); + const ownerAddressFromQuery = searchParams.get('store'); + + const initOwnerAddress = ownerAddressFromQuery || ownerAddress; + const initStoreAddress = !ownerAddressFromQuery ? storeAddress : undefined; + const isConfigured = Boolean(initStoreAddress || initOwnerAddress); + + const [store, setStore] = useState< + Pick + >({ + storeAddress: initStoreAddress, + isReady: Boolean(!initOwnerAddress || initStoreAddress), + }); + + const setStoreForOwner = useMemo( + () => async (ownerAddress?: string) => { + const storeAddress = await getStoreID(ownerAddress); + setProgramIds(storeAddress); // fallback + setStore({ storeAddress, isReady: true }); + console.log(`CUSTOM STORE: ${storeAddress}`); + return storeAddress; + }, + [], + ); + + useEffect(() => { + console.log(`STORE_OWNER_ADDRESS: ${initOwnerAddress}`); + if (initOwnerAddress && !initStoreAddress) { + setStoreForOwner(initOwnerAddress); + } else { + setProgramIds(initStoreAddress); // fallback + console.log(`CUSTOM STORE FROM ENV: ${initStoreAddress}`); + } + }, [initOwnerAddress]); + + return ( + + {children} + + ); +}; + +export const useStore = () => { + return useContext(StoreContext); +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contexts/wallet.less b/CandyMachine-Storefront/store/js/packages/common/src/contexts/wallet.less new file mode 100644 index 0000000..cd08541 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contexts/wallet.less @@ -0,0 +1,6 @@ +p { + color: #6d6d6d; + font-family: Inter, sans-serif; + font-style: normal; + font-size: 0.9rem; +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contexts/wallet.tsx b/CandyMachine-Storefront/store/js/packages/common/src/contexts/wallet.tsx new file mode 100644 index 0000000..513179e --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contexts/wallet.tsx @@ -0,0 +1,231 @@ +import { WalletAdapter, WalletError } from '@solana/wallet-adapter-base'; +import { + useWallet, + WalletProvider as BaseWalletProvider, +} from '@solana/wallet-adapter-react'; +import { + getLedgerWallet, + getMathWallet, + getPhantomWallet, + getSolflareWallet, + getSolletWallet, + getSolongWallet, + getTorusWallet, + WalletName, +} from '@solana/wallet-adapter-wallets'; +import { Button } from 'antd'; +import React, { + createContext, + FC, + ReactNode, + useCallback, + useContext, + useEffect, + useMemo, + useState, +} from 'react'; +import { notify } from '../utils'; +import { MetaplexModal } from '../components'; + +export interface WalletModalContextState { + visible: boolean; + setVisible: (open: boolean) => void; +} + +export const WalletModalContext = createContext( + {} as WalletModalContextState, +); + +export function useWalletModal(): WalletModalContextState { + return useContext(WalletModalContext); +} + +export const WalletModal: FC = () => { + const { wallets, wallet: selected, select } = useWallet(); + const { visible, setVisible } = useWalletModal(); + const [showWallets, setShowWallets] = useState(false); + const close = useCallback(() => { + setVisible(false); + setShowWallets(false); + }, [setVisible, setShowWallets]); + + return ( + +
+ M +
+ +

{selected ? 'Change provider' : 'Welcome to Metaplex'}

+

+ {selected + ? 'Feel free to switch wallet provider' + : 'You must be signed in to place a bid'} +

+ +
+ {selected || showWallets ? ( + wallets.map(wallet => { + return ( + + ); + }) + ) : ( + <> + +

setShowWallets(true)} + style={{ cursor: 'pointer', marginTop: 10 }} + > + Select a different Solana wallet +

+ + )} +
+ ); +}; + +export const WalletModalProvider: FC<{ children: ReactNode }> = ({ + children, +}) => { + const { publicKey } = useWallet(); + const [connected, setConnected] = useState(!!publicKey); + const [visible, setVisible] = useState(false); + + useEffect(() => { + if (publicKey) { + const base58 = publicKey.toBase58(); + const keyToDisplay = + base58.length > 20 + ? `${base58.substring(0, 7)}.....${base58.substring( + base58.length - 7, + base58.length, + )}` + : base58; + + notify({ + message: 'Wallet update', + description: 'Connected to wallet ' + keyToDisplay, + }); + } + }, [publicKey]); + + useEffect(() => { + if (!publicKey && connected) { + notify({ + message: 'Wallet update', + description: 'Disconnected from wallet', + }); + } + setConnected(!!publicKey); + }, [publicKey, connected, setConnected]); + + return ( + + {children} + + + ); +}; + +export const WalletProvider: FC<{ children: ReactNode }> = ({ children }) => { + const wallets = useMemo( + () => [ + getPhantomWallet(), + getSolflareWallet(), + getTorusWallet({ + options: { + // @FIXME: this should be changed for Metaplex, and by each Metaplex storefront + clientId: + 'BOM5Cl7PXgE9Ylq1Z1tqzhpydY0RVr8k90QQ85N7AKI5QGSrr9iDC-3rvmy0K_hF0JfpLMiXoDhta68JwcxS1LQ', + }, + }), + getLedgerWallet(), + getSolongWallet(), + getMathWallet(), + getSolletWallet(), + ], + [], + ); + + const onError = useCallback((error: WalletError) => { + console.error(error); + notify({ + message: 'Wallet error', + description: error.message, + }); + }, []); + + return ( + + {children} + + ); +}; + +export type WalletSigner = Pick< + WalletAdapter, + 'publicKey' | 'signTransaction' | 'signAllTransactions' +>; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/contracts/token.ts b/CandyMachine-Storefront/store/js/packages/common/src/contracts/token.ts new file mode 100644 index 0000000..581a368 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/contracts/token.ts @@ -0,0 +1,116 @@ +import { MintLayout, AccountLayout, Token } from '@solana/spl-token'; +import { + Connection, + PublicKey, + Transaction, + Account, + SystemProgram, +} from '@solana/web3.js'; +import { WalletSigner } from '../contexts'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; + +export const mintNFT = async ( + connection: Connection, + wallet: WalletSigner, + // SOL account + owner: PublicKey, +) => { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const TOKEN_PROGRAM_ID = new PublicKey( + 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA', + ); + //const SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID = new PublicKey( + // 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL', + //); + const mintAccount = new Account(); + const tokenAccount = new Account(); + + // Allocate memory for the account + const mintRent = await connection.getMinimumBalanceForRentExemption( + MintLayout.span, + ); + + const accountRent = await connection.getMinimumBalanceForRentExemption( + AccountLayout.span, + ); + + let transaction = new Transaction(); + const signers = [mintAccount, tokenAccount]; + transaction.recentBlockhash = ( + await connection.getRecentBlockhash('max') + ).blockhash; + + transaction.add( + SystemProgram.createAccount({ + fromPubkey: wallet.publicKey, + newAccountPubkey: mintAccount.publicKey, + lamports: mintRent, + space: MintLayout.span, + programId: TOKEN_PROGRAM_ID, + }), + ); + + transaction.add( + SystemProgram.createAccount({ + fromPubkey: wallet.publicKey, + newAccountPubkey: tokenAccount.publicKey, + lamports: accountRent, + space: AccountLayout.span, + programId: TOKEN_PROGRAM_ID, + }), + ); + + transaction.add( + Token.createInitMintInstruction( + TOKEN_PROGRAM_ID, + mintAccount.publicKey, + 0, + wallet.publicKey, + wallet.publicKey, + ), + ); + transaction.add( + Token.createInitAccountInstruction( + TOKEN_PROGRAM_ID, + mintAccount.publicKey, + tokenAccount.publicKey, + owner, + ), + ); + transaction.add( + Token.createMintToInstruction( + TOKEN_PROGRAM_ID, + mintAccount.publicKey, + tokenAccount.publicKey, + wallet.publicKey, + [], + 1, + ), + ); + transaction.add( + Token.createSetAuthorityInstruction( + TOKEN_PROGRAM_ID, + mintAccount.publicKey, + null, + 'MintTokens', + wallet.publicKey, + [], + ), + ); + + transaction.setSigners(wallet.publicKey, ...signers.map(s => s.publicKey)); + if (signers.length > 0) { + transaction.partialSign(...signers); + } + transaction = await wallet.signTransaction(transaction); + const rawTransaction = transaction.serialize(); + const options = { + skipPreflight: true, + commitment: 'singleGossip', + }; + + const txid = await connection.sendRawTransaction(rawTransaction, options); + + return { txid, mint: mintAccount.publicKey, account: tokenAccount.publicKey }; +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/hooks/index.ts b/CandyMachine-Storefront/store/js/packages/common/src/hooks/index.ts new file mode 100644 index 0000000..9cdf818 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/hooks/index.ts @@ -0,0 +1,5 @@ +export * from './useUserAccounts'; +export * from './useAccountByMint'; +export * from './useTokenName'; +export * from './useThatState'; +export * from './useQuerySearch'; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/hooks/useAccountByMint.ts b/CandyMachine-Storefront/store/js/packages/common/src/hooks/useAccountByMint.ts new file mode 100644 index 0000000..0271d94 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/hooks/useAccountByMint.ts @@ -0,0 +1,17 @@ +import { PublicKey } from '@solana/web3.js'; +import { useUserAccounts } from '../hooks/useUserAccounts'; + +export const useAccountByMint = (mint?: string | PublicKey) => { + const { userAccounts } = useUserAccounts(); + const mintAddress = typeof mint === 'string' ? mint : mint?.toBase58(); + + const index = userAccounts.findIndex( + acc => acc.info.mint.toBase58() === mintAddress, + ); + + if (index !== -1) { + return userAccounts[index]; + } + + return; +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/hooks/useQuerySearch.ts b/CandyMachine-Storefront/store/js/packages/common/src/hooks/useQuerySearch.ts new file mode 100644 index 0000000..7fa6f85 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/hooks/useQuerySearch.ts @@ -0,0 +1,5 @@ +import { useLocation } from 'react-router-dom'; + +export function useQuerySearch() { + return new URLSearchParams(useLocation().search); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/hooks/useThatState.ts b/CandyMachine-Storefront/store/js/packages/common/src/hooks/useThatState.ts new file mode 100644 index 0000000..86ecf10 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/hooks/useThatState.ts @@ -0,0 +1,16 @@ +import { useState } from 'react'; + +// Extends useState() hook with async getThatState getter which can be used to get state value in contexts (ex. async callbacks) where up to date state is not available +export function useThatState(initialState: T) { + const [state, setState] = useState(initialState); + const getThatState = () => + new Promise(resolve => { + // Use NOP setState call to retrieve current state value + setState(s => { + resolve(s); + return s; + }); + }); + + return [state, setState, getThatState] as const; +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/hooks/useTokenName.ts b/CandyMachine-Storefront/store/js/packages/common/src/hooks/useTokenName.ts new file mode 100644 index 0000000..b4a6b60 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/hooks/useTokenName.ts @@ -0,0 +1,10 @@ +import { PublicKey } from '@solana/web3.js'; +import { useConnectionConfig } from '../contexts/connection'; +import { getTokenName } from '../utils/utils'; + +export function useTokenName(mintAddress?: string | PublicKey) { + const { tokenMap } = useConnectionConfig(); + const address = + typeof mintAddress === 'string' ? mintAddress : mintAddress?.toBase58(); + return getTokenName(tokenMap, address); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/hooks/useUserAccounts.ts b/CandyMachine-Storefront/store/js/packages/common/src/hooks/useUserAccounts.ts new file mode 100644 index 0000000..43bacbf --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/hooks/useUserAccounts.ts @@ -0,0 +1,21 @@ +import { TokenAccount } from '../models'; +import { useAccountsContext } from '../contexts/accounts'; + +export function useUserAccounts(): { + userAccounts: TokenAccount[]; + accountByMint: Map; +} { + const context = useAccountsContext(); + + const accountByMint = context.userAccounts.reduce( + (prev: Map, acc: TokenAccount) => { + prev.set(acc.info.mint.toBase58(), acc); + return prev; + }, + new Map(), + ); + return { + userAccounts: context.userAccounts as TokenAccount[], + accountByMint, + }; +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/index.tsx b/CandyMachine-Storefront/store/js/packages/common/src/index.tsx new file mode 100644 index 0000000..dbff96b --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/index.tsx @@ -0,0 +1,14 @@ +export * as actions from './actions'; +export * from './actions'; +export * as components from './components'; +export * from './components'; +export * as constants from './constants'; +export * from './constants'; +export * as hooks from './hooks'; +export * from './hooks'; +export * as contexts from './contexts'; +export * from './contexts'; +export * as models from './models'; +export * from './models'; +export * as utils from './utils'; +export * from './utils'; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/models/account.ts b/CandyMachine-Storefront/store/js/packages/common/src/models/account.ts new file mode 100644 index 0000000..f2590d0 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/models/account.ts @@ -0,0 +1,85 @@ +import { + AccountInfo, + Keypair, + PublicKey, + TransactionInstruction, +} from '@solana/web3.js'; + +import { AccountInfo as TokenAccountInfo, Token } from '@solana/spl-token'; +import { TOKEN_PROGRAM_ID } from '../utils/ids'; +import BufferLayout from 'buffer-layout'; + +export interface TokenAccount { + pubkey: string; + account: AccountInfo; + info: TokenAccountInfo; +} + +export interface ParsedDataAccount { + amount: number; + rawAmount: string; + parsedAssetAddress: string; + parsedAccount: any; + assetDecimals: number; + assetIcon: any; + name: string; + symbol: string; + sourceAddress: string; + targetAddress: string; +} + +export const ParsedDataLayout = BufferLayout.struct([ + BufferLayout.blob(32, 'amount'), + BufferLayout.u8('toChain'), + BufferLayout.blob(32, 'sourceAddress'), + BufferLayout.blob(32, 'targetAddress'), + BufferLayout.blob(32, 'assetAddress'), + BufferLayout.u8('assetChain'), + BufferLayout.u8('assetDecimals'), + BufferLayout.seq(BufferLayout.u8(), 1), // 4 byte alignment because a u32 is following + BufferLayout.u32('nonce'), + BufferLayout.blob(1001, 'vaa'), + BufferLayout.seq(BufferLayout.u8(), 3), // 4 byte alignment because a u32 is following + BufferLayout.u32('vaaTime'), + BufferLayout.u32('lockupTime'), + BufferLayout.u8('pokeCounter'), + BufferLayout.blob(32, 'signatureAccount'), + BufferLayout.u8('initialized'), +]); + +export function approve( + instructions: TransactionInstruction[], + cleanupInstructions: TransactionInstruction[], + account: PublicKey, + owner: PublicKey, + amount: number, + autoRevoke = true, + + // if delegate is not passed ephemeral transfer authority is used + delegate?: PublicKey, + existingTransferAuthority?: Keypair, +): Keypair { + const tokenProgram = TOKEN_PROGRAM_ID; + + const transferAuthority = existingTransferAuthority || Keypair.generate(); + //const delegateKey = delegate ?? transferAuthority.publicKey; + + instructions.push( + Token.createApproveInstruction( + tokenProgram, + account, + delegate ?? transferAuthority.publicKey, + owner, + [], + amount, + ), + ); + + if (autoRevoke) { + cleanupInstructions.push( + Token.createRevokeInstruction(tokenProgram, account, owner, []), + ); + } + + return transferAuthority; +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/models/index.ts b/CandyMachine-Storefront/store/js/packages/common/src/models/index.ts new file mode 100644 index 0000000..5f3bcc6 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/models/index.ts @@ -0,0 +1,2 @@ +export * from './account'; +export * from './metaplex'; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/claimBid.ts b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/claimBid.ts new file mode 100644 index 0000000..b18dadf --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/claimBid.ts @@ -0,0 +1,114 @@ +import { SYSVAR_CLOCK_PUBKEY, TransactionInstruction } from '@solana/web3.js'; +import { serialize } from 'borsh'; + +import { getAuctionKeys, ClaimBidArgs, SCHEMA } from '.'; +import { getBidderPotKey, getAuctionExtended } from '../../actions'; +import { programIds, StringPublicKey, toPublicKey } from '../../utils'; + +export async function claimBid( + acceptPayment: StringPublicKey, + bidder: StringPublicKey, + bidderPotToken: StringPublicKey, + vault: StringPublicKey, + tokenMint: StringPublicKey, + instructions: TransactionInstruction[], +) { + const PROGRAM_IDS = programIds(); + const store = PROGRAM_IDS.store; + if (!store) { + throw new Error('Store not initialized'); + } + + const { auctionKey, auctionManagerKey } = await getAuctionKeys(vault); + + const bidderPotKey = await getBidderPotKey({ + auctionProgramId: PROGRAM_IDS.auction, + auctionKey, + bidderPubkey: bidder, + }); + + const value = new ClaimBidArgs(); + const data = Buffer.from(serialize(SCHEMA, value)); + + const auctionExtendedKey = await getAuctionExtended({ + auctionProgramId: PROGRAM_IDS.auction, + resource: vault, + }); + + const keys = [ + { + pubkey: toPublicKey(acceptPayment), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(bidderPotToken), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(bidderPotKey), + isSigner: false, + isWritable: true, + }, + + { + pubkey: toPublicKey(auctionManagerKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(auctionKey), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(bidder), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(tokenMint), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(vault), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(store), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(PROGRAM_IDS.auction), + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_CLOCK_PUBKEY, + isSigner: false, + isWritable: false, + }, + { + pubkey: PROGRAM_IDS.token, + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(auctionExtendedKey), + isSigner: false, + isWritable: false, + }, + ]; + + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(PROGRAM_IDS.metaplex), + data, + }), + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/decommissionAuctionManager.ts b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/decommissionAuctionManager.ts new file mode 100644 index 0000000..4c48bc8 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/decommissionAuctionManager.ts @@ -0,0 +1,75 @@ +import { SYSVAR_CLOCK_PUBKEY, TransactionInstruction } from '@solana/web3.js'; +import { serialize } from 'borsh'; + +import { DecommissionAuctionManagerArgs, SCHEMA } from '.'; +import { programIds, StringPublicKey, toPublicKey } from '../../utils'; + +export async function decommissionAuctionManager( + auctionManager: StringPublicKey, + auction: StringPublicKey, + authority: StringPublicKey, + vault: StringPublicKey, + instructions: TransactionInstruction[], +) { + const PROGRAM_IDS = programIds(); + const store = PROGRAM_IDS.store; + if (!store) { + throw new Error('Store not initialized'); + } + + const value = new DecommissionAuctionManagerArgs(); + const data = Buffer.from(serialize(SCHEMA, value)); + + const keys = [ + { + pubkey: toPublicKey(auctionManager), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(auction), + isSigner: false, + isWritable: true, + }, + + { + pubkey: toPublicKey(authority), + isSigner: true, + isWritable: false, + }, + + { + pubkey: toPublicKey(vault), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(store), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(PROGRAM_IDS.auction), + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_CLOCK_PUBKEY, + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(programIds().vault), + isSigner: false, + isWritable: false, + }, + ]; + + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(PROGRAM_IDS.metaplex), + data, + }), + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/deprecatedInitAuctionManagerV1.ts b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/deprecatedInitAuctionManagerV1.ts new file mode 100644 index 0000000..cd65f3e --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/deprecatedInitAuctionManagerV1.ts @@ -0,0 +1,88 @@ +import { + SystemProgram, + SYSVAR_RENT_PUBKEY, + TransactionInstruction, +} from '@solana/web3.js'; +import { serialize } from 'borsh'; + +import { getAuctionKeys, SCHEMA } from '.'; +import { programIds, StringPublicKey, toPublicKey } from '../../utils'; +import { + AuctionManagerSettingsV1, + DeprecatedInitAuctionManagerV1Args, +} from './deprecatedStates'; + +export async function deprecatedInitAuctionManagerV1( + vault: StringPublicKey, + auctionManagerAuthority: StringPublicKey, + payer: StringPublicKey, + acceptPaymentAccount: StringPublicKey, + store: StringPublicKey, + settings: AuctionManagerSettingsV1, + instructions: TransactionInstruction[], +) { + const PROGRAM_IDS = programIds(); + const { auctionKey, auctionManagerKey } = await getAuctionKeys(vault); + + const value = new DeprecatedInitAuctionManagerV1Args({ + settings, + }); + + const data = Buffer.from(serialize(SCHEMA, value)); + + const keys = [ + { + pubkey: toPublicKey(auctionManagerKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(vault), + isSigner: false, + isWritable: false, + }, + + { + pubkey: toPublicKey(auctionKey), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(auctionManagerAuthority), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(payer), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(acceptPaymentAccount), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(store), + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(PROGRAM_IDS.metaplex), + data, + }), + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/deprecatedPopulateParticipationPrintingAccount.ts b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/deprecatedPopulateParticipationPrintingAccount.ts new file mode 100644 index 0000000..17b5387 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/deprecatedPopulateParticipationPrintingAccount.ts @@ -0,0 +1,164 @@ +import { SYSVAR_RENT_PUBKEY, TransactionInstruction } from '@solana/web3.js'; +import { serialize } from 'borsh'; +import { SCHEMA } from '.'; +import { getAuctionExtended, VAULT_PREFIX } from '../../actions'; +import { + findProgramAddress, + programIds, + StringPublicKey, + toPublicKey, +} from '../../utils'; +import { DeprecatedPopulateParticipationPrintingAccountArgs } from './deprecatedStates'; + +export async function deprecatedPopulateParticipationPrintingAccount( + vault: StringPublicKey, + auctionManager: StringPublicKey, + auction: StringPublicKey, + safetyDepositTokenStore: StringPublicKey, + transientOneTimeAccount: StringPublicKey, + printingTokenAccount: StringPublicKey, + safetyDeposit: StringPublicKey, + fractionMint: StringPublicKey, + printingMint: StringPublicKey, + oneTimePrintingAuthorizationMint: StringPublicKey, + masterEdition: StringPublicKey, + metadata: StringPublicKey, + payer: StringPublicKey, + instructions: TransactionInstruction[], +) { + const PROGRAM_IDS = programIds(); + const store = PROGRAM_IDS.store; + if (!store) { + throw new Error('Store not initialized'); + } + + const transferAuthority = ( + await findProgramAddress( + [ + Buffer.from(VAULT_PREFIX), + toPublicKey(PROGRAM_IDS.vault).toBuffer(), + toPublicKey(vault).toBuffer(), + ], + toPublicKey(PROGRAM_IDS.vault), + ) + )[0]; + + const value = new DeprecatedPopulateParticipationPrintingAccountArgs(); + const data = Buffer.from(serialize(SCHEMA, value)); + + const keys = [ + { + pubkey: toPublicKey(safetyDepositTokenStore), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(transientOneTimeAccount), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(printingTokenAccount), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(oneTimePrintingAuthorizationMint), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(printingMint), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(safetyDeposit), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(vault), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(fractionMint), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(auction), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey( + await getAuctionExtended({ + auctionProgramId: PROGRAM_IDS.auction, + resource: vault, + }), + ), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(auctionManager), + isSigner: false, + isWritable: false, + }, + { + pubkey: PROGRAM_IDS.token, + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(PROGRAM_IDS.vault), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(PROGRAM_IDS.metadata), + isSigner: false, + isWritable: false, + }, + { + pubkey: store, + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(masterEdition), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(metadata), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(transferAuthority), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(payer), + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(PROGRAM_IDS.metaplex), + data, + }), + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/deprecatedRedeemParticipationBid.ts b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/deprecatedRedeemParticipationBid.ts new file mode 100644 index 0000000..0ab4d95 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/deprecatedRedeemParticipationBid.ts @@ -0,0 +1,165 @@ +import { + SystemProgram, + SYSVAR_RENT_PUBKEY, + TransactionInstruction, +} from '@solana/web3.js'; +import { serialize } from 'borsh'; + +import { + getAuctionKeys, + getBidderKeys, + SCHEMA, + getSafetyDepositConfig, +} from '.'; +import { programIds, StringPublicKey, toPublicKey } from '../../utils'; +import { DeprecatedRedeemParticipationBidArgs } from './deprecatedStates'; + +export async function deprecatedRedeemParticipationBid( + vault: StringPublicKey, + safetyDepositTokenStore: StringPublicKey, + destination: StringPublicKey, + safetyDeposit: StringPublicKey, + bidder: StringPublicKey, + payer: StringPublicKey, + instructions: TransactionInstruction[], + participationPrintingAccount: StringPublicKey, + transferAuthority: StringPublicKey, + acceptPaymentAccount: StringPublicKey, + tokenPaymentAccount: StringPublicKey, +) { + const PROGRAM_IDS = programIds(); + const store = PROGRAM_IDS.store; + if (!store) { + throw new Error('Store not initialized'); + } + + const { auctionKey, auctionManagerKey } = await getAuctionKeys(vault); + + const { bidRedemption, bidMetadata } = await getBidderKeys( + auctionKey, + bidder, + ); + + const safetyDepositConfig = await getSafetyDepositConfig( + auctionManagerKey, + safetyDeposit, + ); + + const value = new DeprecatedRedeemParticipationBidArgs(); + const data = Buffer.from(serialize(SCHEMA, value)); + const keys = [ + { + pubkey: toPublicKey(auctionManagerKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(safetyDepositTokenStore), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(destination), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(bidRedemption), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(safetyDeposit), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(vault), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(safetyDepositConfig), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(auctionKey), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(bidMetadata), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(bidder), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(payer), + isSigner: true, + isWritable: false, + }, + { + pubkey: PROGRAM_IDS.token, + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(PROGRAM_IDS.vault), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(PROGRAM_IDS.metadata), + isSigner: false, + isWritable: false, + }, + { + pubkey: store, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(transferAuthority), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(acceptPaymentAccount), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(tokenPaymentAccount), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(participationPrintingAccount), + isSigner: false, + isWritable: true, + }, + ]; + + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(PROGRAM_IDS.metaplex), + data, + }), + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/deprecatedStates.ts b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/deprecatedStates.ts new file mode 100644 index 0000000..fecf8d7 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/deprecatedStates.ts @@ -0,0 +1,338 @@ +import BN from 'bn.js'; +import { + AuctionManagerStatus, + BidRedemptionTicket, + MetaplexKey, + METAPLEX_PREFIX, + NonWinningConstraint, + WinningConfigType, + WinningConstraint, +} from '.'; +import { findProgramAddress, programIds, toPublicKey } from '../../utils'; + +export const MAX_BID_REDEMPTION_TICKET_V1_SIZE = 3; + +export class AuctionManagerV1 { + key: MetaplexKey; + store: string; + authority: string; + auction: string; + vault: string; + acceptPayment: string; + state: AuctionManagerStateV1; + settings: AuctionManagerSettingsV1; + + constructor(args: { + store: string; + authority: string; + auction: string; + vault: string; + acceptPayment: string; + state: AuctionManagerStateV1; + settings: AuctionManagerSettingsV1; + }) { + this.key = MetaplexKey.AuctionManagerV1; + this.store = args.store; + this.authority = args.authority; + this.auction = args.auction; + this.vault = args.vault; + this.acceptPayment = args.acceptPayment; + this.state = args.state; + this.settings = args.settings; + } +} + +export class DeprecatedInitAuctionManagerV1Args { + instruction = 0; + settings: AuctionManagerSettingsV1; + + constructor(args: { settings: AuctionManagerSettingsV1 }) { + this.settings = args.settings; + } +} + +export class DeprecatedValidateSafetyDepositBoxV1Args { + instruction = 1; +} + +export class DeprecatedRedeemParticipationBidArgs { + instruction = 4; +} + +export class DeprecatedPopulateParticipationPrintingAccountArgs { + instruction = 11; +} + +export class DeprecatedValidateParticipationArgs { + instruction = 10; +} + +export class AuctionManagerSettingsV1 { + winningConfigs: WinningConfig[] = []; + participationConfig: ParticipationConfigV1 | null = null; + + constructor(args?: AuctionManagerSettingsV1) { + Object.assign(this, args); + } +} + +export class ParticipationStateV1 { + collectedToAcceptPayment: BN = new BN(0); + primarySaleHappened: boolean = false; + validated: boolean = false; + printingAuthorizationTokenAccount: string | null = null; + + constructor(args?: ParticipationStateV1) { + Object.assign(this, args); + } +} + +export class ParticipationConfigV1 { + winnerConstraint: WinningConstraint = WinningConstraint.NoParticipationPrize; + nonWinningConstraint: NonWinningConstraint = + NonWinningConstraint.GivenForFixedPrice; + safetyDepositBoxIndex: number = 0; + fixedPrice: BN | null = new BN(0); + + constructor(args?: ParticipationConfigV1) { + Object.assign(this, args); + } +} + +export class WinningConfig { + items: WinningConfigItem[] = []; + + constructor(args?: WinningConfig) { + Object.assign(this, args); + } +} + +export class WinningConfigItem { + safetyDepositBoxIndex: number = 0; + amount: number = 0; + winningConfigType: WinningConfigType = WinningConfigType.TokenOnlyTransfer; + + constructor(args?: WinningConfigItem) { + Object.assign(this, args); + } +} + +export class WinningConfigState { + items: WinningConfigStateItem[] = []; + moneyPushedToAcceptPayment: boolean = false; + + constructor(args?: WinningConfigState) { + Object.assign(this, args); + } +} + +export class WinningConfigStateItem { + primarySaleHappened: boolean = false; + claimed: boolean = false; + + constructor(args?: WinningConfigStateItem) { + Object.assign(this, args); + } +} +export class AuctionManagerStateV1 { + status: AuctionManagerStatus = AuctionManagerStatus.Initialized; + winningConfigItemsValidated: number = 0; + + winningConfigStates: WinningConfigState[] = []; + + participationState: ParticipationStateV1 | null = null; + + constructor(args?: AuctionManagerStateV1) { + Object.assign(this, args); + } +} + +export class BidRedemptionTicketV1 implements BidRedemptionTicket { + key: MetaplexKey = MetaplexKey.BidRedemptionTicketV1; + participationRedeemed: boolean = false; + itemsRedeemed: number = 0; + + constructor(args?: BidRedemptionTicketV1) { + Object.assign(this, args); + } + + getBidRedeemed(): boolean { + return this.participationRedeemed; + } +} + +export async function getSafetyDepositBoxValidationTicket( + auctionManager: string, + safetyDepositBox: string, +) { + const PROGRAM_IDS = programIds(); + return ( + await findProgramAddress( + [ + Buffer.from(METAPLEX_PREFIX), + toPublicKey(PROGRAM_IDS.metaplex).toBuffer(), + toPublicKey(auctionManager).toBuffer(), + toPublicKey(safetyDepositBox).toBuffer(), + ], + toPublicKey(PROGRAM_IDS.metaplex), + ) + )[0]; +} + +export const DEPRECATED_SCHEMA = new Map([ + [ + AuctionManagerV1, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['store', 'pubkeyAsString'], + ['authority', 'pubkeyAsString'], + ['auction', 'pubkeyAsString'], + ['vault', 'pubkeyAsString'], + ['acceptPayment', 'pubkeyAsString'], + ['state', AuctionManagerStateV1], + ['settings', AuctionManagerSettingsV1], + ], + }, + ], + [ + ParticipationConfigV1, + { + kind: 'struct', + fields: [ + ['winnerConstraint', 'u8'], // enum + ['nonWinningConstraint', 'u8'], + ['safetyDepositBoxIndex', 'u8'], + ['fixedPrice', { kind: 'option', type: 'u64' }], + ], + }, + ], + [ + AuctionManagerSettingsV1, + { + kind: 'struct', + fields: [ + ['winningConfigs', [WinningConfig]], + [ + 'participationConfig', + { kind: 'option', type: ParticipationConfigV1 }, + ], + ], + }, + ], + [ + WinningConfig, + { + kind: 'struct', + fields: [['items', [WinningConfigItem]]], + }, + ], + [ + WinningConfigItem, + { + kind: 'struct', + fields: [ + ['safetyDepositBoxIndex', 'u8'], + ['amount', 'u8'], + ['winningConfigType', 'u8'], + ], + }, + ], + [ + WinningConfigState, + { + kind: 'struct', + fields: [ + ['items', [WinningConfigStateItem]], + ['moneyPushedToAcceptPayment', 'u8'], // bool + ], + }, + ], + [ + WinningConfigStateItem, + { + kind: 'struct', + fields: [ + ['primarySaleHappened', 'u8'], //bool + ['claimed', 'u8'], // bool + ], + }, + ], + [ + AuctionManagerStateV1, + { + kind: 'struct', + fields: [ + ['status', 'u8'], + ['winningConfigItemsValidated', 'u8'], + ['winningConfigStates', [WinningConfigState]], + ['participationState', { kind: 'option', type: ParticipationStateV1 }], + ], + }, + ], + [ + ParticipationStateV1, + { + kind: 'struct', + fields: [ + ['collectedToAcceptPayment', 'u64'], + ['primarySaleHappened', 'u8'], //bool + ['validated', 'u8'], //bool + [ + 'printingAuthorizationTokenAccount', + { kind: 'option', type: 'pubkeyAsString' }, + ], + ], + }, + ], + [ + BidRedemptionTicketV1, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['participationRedeemed', 'u8'], // bool + ['itemsRedeemed', 'u8'], // bool + ], + }, + ], + [ + DeprecatedPopulateParticipationPrintingAccountArgs, + { + kind: 'struct', + fields: [['instruction', 'u8']], + }, + ], + [ + DeprecatedInitAuctionManagerV1Args, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['settings', AuctionManagerSettingsV1], + ], + }, + ], + [ + DeprecatedValidateSafetyDepositBoxV1Args, + { + kind: 'struct', + fields: [['instruction', 'u8']], + }, + ], + [ + DeprecatedRedeemParticipationBidArgs, + { + kind: 'struct', + fields: [['instruction', 'u8']], + }, + ], + [ + DeprecatedValidateParticipationArgs, + { + kind: 'struct', + fields: [['instruction', 'u8']], + }, + ], +]); diff --git a/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/deprecatedValidateParticipation.ts b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/deprecatedValidateParticipation.ts new file mode 100644 index 0000000..9f8c77f --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/deprecatedValidateParticipation.ts @@ -0,0 +1,103 @@ +import { + SystemProgram, + SYSVAR_RENT_PUBKEY, + TransactionInstruction, +} from '@solana/web3.js'; +import { serialize } from 'borsh'; + +import { SCHEMA } from '.'; +import { programIds, StringPublicKey, toPublicKey } from '../../utils'; +import { DeprecatedValidateParticipationArgs } from './deprecatedStates'; + +export async function deprecatedValidateParticipation( + auctionManager: StringPublicKey, + openEditionMetadata: StringPublicKey, + openEditionMasterAccount: StringPublicKey, + printingAuthorizationHoldingAccount: StringPublicKey, + auctionManagerAuthority: StringPublicKey, + whitelistedCreatorEntry: StringPublicKey | undefined, + store: StringPublicKey, + safetyDepositBox: StringPublicKey, + safetyDepositBoxTokenStore: StringPublicKey, + vault: StringPublicKey, + instructions: TransactionInstruction[], +) { + const PROGRAM_IDS = programIds(); + + const value = new DeprecatedValidateParticipationArgs(); + + const data = Buffer.from(serialize(SCHEMA, value)); + + const keys = [ + { + pubkey: toPublicKey(auctionManager), + isSigner: false, + isWritable: true, + }, + + { + pubkey: toPublicKey(openEditionMetadata), + isSigner: false, + isWritable: false, + }, + + { + pubkey: toPublicKey(openEditionMasterAccount), + isSigner: false, + isWritable: false, + }, + + { + pubkey: toPublicKey(printingAuthorizationHoldingAccount), + isSigner: false, + isWritable: false, + }, + + { + pubkey: toPublicKey(auctionManagerAuthority), + isSigner: true, + isWritable: false, + }, + + { + pubkey: toPublicKey(whitelistedCreatorEntry || SystemProgram.programId), + isSigner: false, + isWritable: false, + }, + + { + pubkey: toPublicKey(store), + isSigner: false, + isWritable: false, + }, + + { + pubkey: toPublicKey(safetyDepositBox), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(safetyDepositBoxTokenStore), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(vault), + isSigner: false, + isWritable: false, + }, + + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(PROGRAM_IDS.metaplex), + data, + }), + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/deprecatedValidateSafetyDepositBoxV1.ts b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/deprecatedValidateSafetyDepositBoxV1.ts new file mode 100644 index 0000000..f985be4 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/deprecatedValidateSafetyDepositBoxV1.ts @@ -0,0 +1,158 @@ +import { + SystemProgram, + SYSVAR_RENT_PUBKEY, + TransactionInstruction, +} from '@solana/web3.js'; +import { serialize } from 'borsh'; + +import { getAuctionKeys, getOriginalAuthority, SCHEMA } from '.'; +import { programIds, StringPublicKey, toPublicKey } from '../../utils'; + +import { + getSafetyDepositBoxValidationTicket, + DeprecatedValidateSafetyDepositBoxV1Args, +} from './deprecatedStates'; + +export async function deprecatedValidateSafetyDepositBoxV1( + vault: StringPublicKey, + metadata: StringPublicKey, + safetyDepositBox: StringPublicKey, + safetyDepositTokenStore: StringPublicKey, + tokenMint: StringPublicKey, + auctionManagerAuthority: StringPublicKey, + metadataAuthority: StringPublicKey, + payer: StringPublicKey, + instructions: TransactionInstruction[], + edition: StringPublicKey, + whitelistedCreator: StringPublicKey | undefined, + store: StringPublicKey, + printingMint?: StringPublicKey, + printingMintAuthority?: StringPublicKey, +) { + const PROGRAM_IDS = programIds(); + + const { auctionKey, auctionManagerKey } = await getAuctionKeys(vault); + + const originalAuthorityLookup = await getOriginalAuthority( + auctionKey, + metadata, + ); + + const value = new DeprecatedValidateSafetyDepositBoxV1Args(); + + const data = Buffer.from(serialize(SCHEMA, value)); + const keys = [ + { + pubkey: toPublicKey( + await getSafetyDepositBoxValidationTicket( + auctionManagerKey, + safetyDepositBox, + ), + ), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(auctionManagerKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(metadata), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(originalAuthorityLookup), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(whitelistedCreator || SystemProgram.programId), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(store), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(safetyDepositBox), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(safetyDepositTokenStore), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(tokenMint), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(edition), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(vault), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(auctionManagerAuthority), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(metadataAuthority), + isSigner: true, + isWritable: false, + }, + + { + pubkey: toPublicKey(payer), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(PROGRAM_IDS.metadata), + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + + if (printingMint && printingMintAuthority) { + keys.push({ + pubkey: toPublicKey(printingMint), + isSigner: false, + isWritable: true, + }); + + keys.push({ + pubkey: toPublicKey(printingMintAuthority), + isSigner: true, + isWritable: false, + }); + } + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(PROGRAM_IDS.metaplex), + data, + }), + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/emptyPaymentAccount.ts b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/emptyPaymentAccount.ts new file mode 100644 index 0000000..aac9a8a --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/emptyPaymentAccount.ts @@ -0,0 +1,155 @@ +import { + SystemProgram, + SYSVAR_RENT_PUBKEY, + TransactionInstruction, +} from '@solana/web3.js'; +import { serialize } from 'borsh'; + +import { + EmptyPaymentAccountArgs, + getAuctionWinnerTokenTypeTracker, + getPayoutTicket, + getSafetyDepositConfig, + SCHEMA, +} from '.'; +import { programIds, StringPublicKey, toPublicKey } from '../../utils'; + +export async function emptyPaymentAccount( + acceptPayment: StringPublicKey, + destination: StringPublicKey, + auctionManager: StringPublicKey, + metadata: StringPublicKey, + masterEdition: StringPublicKey | undefined, + safetyDepositBox: StringPublicKey, + vault: StringPublicKey, + auction: StringPublicKey, + payer: StringPublicKey, + recipient: StringPublicKey, + winningConfigIndex: number | null, + winningConfigItemIndex: number | null, + creatorIndex: number | null, + instructions: TransactionInstruction[], +) { + const PROGRAM_IDS = programIds(); + const store = PROGRAM_IDS.store; + if (!store) { + throw new Error('Store not initialized'); + } + + const safetyDepositConfig = await getSafetyDepositConfig( + auctionManager, + safetyDepositBox, + ); + + const tokenTracker = await getAuctionWinnerTokenTypeTracker(auctionManager); + + const value = new EmptyPaymentAccountArgs({ + winningConfigIndex, + winningConfigItemIndex, + creatorIndex, + }); + + const data = Buffer.from(serialize(SCHEMA, value)); + + const keys = [ + { + pubkey: toPublicKey(acceptPayment), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(destination), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(auctionManager), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey( + await getPayoutTicket( + auctionManager, + winningConfigIndex, + winningConfigItemIndex, + creatorIndex, + safetyDepositBox, + recipient, + ), + ), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(payer), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(metadata), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(masterEdition || SystemProgram.programId), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(safetyDepositBox), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(store), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(vault), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(auction), + isSigner: false, + isWritable: false, + }, + { + pubkey: PROGRAM_IDS.token, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + + { + pubkey: toPublicKey(tokenTracker), + isSigner: false, + isWritable: false, + }, + + { + pubkey: toPublicKey(safetyDepositConfig), + isSigner: false, + isWritable: false, + }, + ]; + + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(PROGRAM_IDS.metaplex), + data, + }), + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/index.ts b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/index.ts new file mode 100644 index 0000000..12603ac --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/index.ts @@ -0,0 +1,1423 @@ +import { AccountInfo, SystemProgram } from '@solana/web3.js'; +import BN from 'bn.js'; +import bs58 from 'bs58'; +import { deserializeUnchecked } from 'borsh'; +import { + AuctionData, + AUCTION_PREFIX, + MasterEditionV1, + MasterEditionV2, + METADATA, + Metadata, + SafetyDepositBox, + Vault, + getAuctionExtended, +} from '../../actions'; +import { AccountParser, ParsedAccount } from '../../contexts'; +import { + findProgramAddress, + programIds, + toPublicKey, + StringPublicKey, +} from '../../utils'; +import { + AuctionManagerV1, + BidRedemptionTicketV1, + DEPRECATED_SCHEMA, + ParticipationConfigV1, +} from './deprecatedStates'; + +export * from './deprecatedInitAuctionManagerV1'; +export * from './redeemBid'; +export * from './redeemFullRightsTransferBid'; +export * from './deprecatedRedeemParticipationBid'; +export * from './startAuction'; +export * from './deprecatedValidateSafetyDepositBoxV1'; +export * from './redeemParticipationBidV3'; +export * from './redeemPrintingV2Bid'; +export * from './withdrawMasterEdition'; +export * from './deprecatedStates'; + +export const METAPLEX_PREFIX = 'metaplex'; +export const INDEX = 'index'; +export const CACHE = 'cache'; +export const TOTALS = 'totals'; +export const MAX_INDEXED_ELEMENTS = 100; +export const ORIGINAL_AUTHORITY_LOOKUP_SIZE = 33; +export const MAX_PRIZE_TRACKING_TICKET_SIZE = 1 + 32 + 8 + 8 + 8 + 50; +export const MAX_WHITELISTED_CREATOR_SIZE = 2 + 32 + 10; +export const MAX_PAYOUT_TICKET_SIZE = 1 + 32 + 8; +export enum MetaplexKey { + Uninitialized = 0, + OriginalAuthorityLookupV1 = 1, + BidRedemptionTicketV1 = 2, + StoreV1 = 3, + WhitelistedCreatorV1 = 4, + PayoutTicketV1 = 5, + SafetyDepositValidationTicketV1 = 6, + AuctionManagerV1 = 7, + PrizeTrackingTicketV1 = 8, + SafetyDepositConfigV1 = 9, + AuctionManagerV2 = 10, + BidRedemptionTicketV2 = 11, + AuctionWinnerTokenTypeTrackerV1 = 12, + StoreIndexerV1 = 13, + AuctionCacheV1 = 14, +} +export class PrizeTrackingTicket { + key: MetaplexKey = MetaplexKey.PrizeTrackingTicketV1; + metadata: string; + supplySnapshot: BN; + expectedRedemptions: BN; + redemptions: BN; + + constructor(args: { + metadata: string; + supplySnapshot: BN; + expectedRedemptions: BN; + redemptions: BN; + }) { + this.key = MetaplexKey.PrizeTrackingTicketV1; + this.metadata = args.metadata; + this.supplySnapshot = args.supplySnapshot; + this.expectedRedemptions = args.expectedRedemptions; + this.redemptions = args.redemptions; + } +} +export class PayoutTicket { + key: MetaplexKey = MetaplexKey.PayoutTicketV1; + recipient: StringPublicKey; + amountPaid: BN; + + constructor(args: { recipient: StringPublicKey; amountPaid: BN }) { + this.key = MetaplexKey.PayoutTicketV1; + this.recipient = args.recipient; + this.amountPaid = args.amountPaid; + } +} + +export class StoreIndexer { + key: MetaplexKey = MetaplexKey.StoreIndexerV1; + store: StringPublicKey; + page: BN; + auctionCaches: StringPublicKey[]; + + constructor(args: { + store: StringPublicKey; + page: BN; + auctionCaches: StringPublicKey[]; + }) { + this.key = MetaplexKey.StoreIndexerV1; + this.store = args.store; + this.page = args.page; + this.auctionCaches = args.auctionCaches; + } +} + +export class AuctionCache { + key: MetaplexKey = MetaplexKey.AuctionCacheV1; + store: StringPublicKey; + timestamp: BN; + metadata: StringPublicKey[]; + auction: StringPublicKey; + vault: StringPublicKey; + auctionManager: StringPublicKey; + + constructor(args: { + store: StringPublicKey; + timestamp: BN; + metadata: StringPublicKey[]; + auction: StringPublicKey; + vault: StringPublicKey; + auctionManager: StringPublicKey; + }) { + this.key = MetaplexKey.AuctionCacheV1; + this.store = args.store; + this.timestamp = args.timestamp; + this.metadata = args.metadata; + this.auction = args.auction; + this.vault = args.vault; + this.auctionManager = args.auctionManager; + } +} + +export class AuctionManager { + pubkey: StringPublicKey; + store: StringPublicKey; + authority: StringPublicKey; + auction: StringPublicKey; + vault: StringPublicKey; + acceptPayment: StringPublicKey; + numWinners: BN; + safetyDepositConfigs: ParsedAccount[]; + bidRedemptions: ParsedAccount[]; + instance: ParsedAccount; + status: AuctionManagerStatus; + safetyDepositBoxesExpected: BN; + participationConfig?: ParticipationConfigV1; + + constructor(args: { + instance: ParsedAccount; + auction: ParsedAccount; + vault: ParsedAccount; + safetyDepositConfigs: ParsedAccount[]; + bidRedemptions: ParsedAccount[]; + }) { + this.pubkey = args.instance.pubkey; + this.instance = args.instance; + this.numWinners = args.auction.info.bidState.max; + this.safetyDepositBoxesExpected = + this.instance.info.key == MetaplexKey.AuctionManagerV2 + ? new BN(args.vault.info.tokenTypeCount) + : new BN( + ( + this.instance.info as AuctionManagerV1 + ).state.winningConfigItemsValidated, + ); + this.store = this.instance.info.store; + this.authority = this.instance.info.authority; + this.vault = this.instance.info.vault; + this.acceptPayment = this.instance.info.acceptPayment; + this.auction = this.instance.info.auction; + this.status = this.instance.info.state.status; + this.safetyDepositConfigs = args.safetyDepositConfigs; + this.bidRedemptions = args.bidRedemptions; + this.participationConfig = + this.instance.info.key == MetaplexKey.AuctionManagerV2 + ? this.safetyDepositConfigs + ?.filter(s => s.info.participationConfig) + .map(s => ({ + winnerConstraint: + s.info.participationConfig?.winnerConstraint || + WinningConstraint.NoParticipationPrize, + nonWinningConstraint: + s.info.participationConfig?.nonWinningConstraint || + NonWinningConstraint.GivenForFixedPrice, + fixedPrice: s.info.participationConfig?.fixedPrice || null, + safetyDepositBoxIndex: s.info.order.toNumber(), + }))[0] || undefined + : (this.instance.info as AuctionManagerV1).settings + .participationConfig || undefined; + } + + isItemClaimed(winnerIndex: number, safetyDepositBoxIndex: number): boolean { + if (this.instance.info.key == MetaplexKey.AuctionManagerV1) { + const asV1 = this.instance.info as AuctionManagerV1; + const itemIndex = asV1.settings.winningConfigs[ + winnerIndex + ].items.findIndex(i => i.safetyDepositBoxIndex == safetyDepositBoxIndex); + + return asV1.state.winningConfigStates[winnerIndex].items[itemIndex] + .claimed; + } else { + const winner = this.bidRedemptions.find( + b => b.info.winnerIndex && b.info.winnerIndex.eq(new BN(winnerIndex)), + ); + if (!winner) { + return false; + } else { + return winner.info.getBidRedeemed(safetyDepositBoxIndex); + } + } + } + + getAmountForWinner(winnerIndex: number, safetyDepositBoxIndex: number): BN { + if (this.instance.info.key == MetaplexKey.AuctionManagerV1) { + return new BN( + (this.instance.info as AuctionManagerV1).settings.winningConfigs[ + winnerIndex + ].items.find(i => i.safetyDepositBoxIndex == safetyDepositBoxIndex) + ?.amount || 0, + ); + } else { + const safetyDepositConfig = + this.safetyDepositConfigs[safetyDepositBoxIndex]; + return safetyDepositConfig.info.getAmountForWinner(new BN(winnerIndex)); + } + } + + getItemsFromSafetyDepositBoxes( + metadataByMint: Record>, + masterEditionsByPrintingMint: Record< + string, + ParsedAccount + >, + metadataByMasterEdition: Record>, + masterEditions: Record< + string, + ParsedAccount + >, + boxes: ParsedAccount[], + ): AuctionViewItem[][] { + if (this.instance.info.key == MetaplexKey.AuctionManagerV1) { + return ( + this.instance.info as AuctionManagerV1 + ).settings.winningConfigs.map(w => { + return w.items.map(it => { + let metadata = + metadataByMint[boxes[it.safetyDepositBoxIndex]?.info.tokenMint]; + if (!metadata) { + // Means is a limited edition v1, so the tokenMint is the printingMint + const masterEdition = + masterEditionsByPrintingMint[ + boxes[it.safetyDepositBoxIndex]?.info.tokenMint + ]; + if (masterEdition) { + metadata = metadataByMasterEdition[masterEdition.pubkey]; + } + } + return { + metadata, + winningConfigType: it.winningConfigType, + safetyDeposit: boxes[it.safetyDepositBoxIndex], + amount: new BN(it.amount), + masterEdition: metadata?.info?.masterEdition + ? masterEditions[metadata.info.masterEdition] + : undefined, + }; + }); + }); + } else { + const items: AuctionViewItem[][] = []; + for (let i = 0; i < this.numWinners.toNumber(); i++) { + const newWinnerArr: AuctionViewItem[] = []; + items.push(newWinnerArr); + this.safetyDepositConfigs?.forEach(s => { + const amount = s.info.getAmountForWinner(new BN(i)); + if (amount.gt(new BN(0))) { + const safetyDeposit = boxes[s.info.order.toNumber()]; + const metadata = metadataByMint[safetyDeposit.info.tokenMint]; + newWinnerArr.push({ + metadata, + winningConfigType: s.info.winningConfigType, + safetyDeposit, + amount, + masterEdition: metadata?.info?.masterEdition + ? masterEditions[metadata.info.masterEdition] + : undefined, + }); + } + }); + } + return items; + } + } +} + +export class AuctionManagerV2 { + key: MetaplexKey; + store: StringPublicKey; + authority: StringPublicKey; + auction: StringPublicKey; + vault: StringPublicKey; + acceptPayment: StringPublicKey; + state: AuctionManagerStateV2; + auctionDataExtended?: StringPublicKey; + + constructor(args: { + store: StringPublicKey; + authority: StringPublicKey; + auction: StringPublicKey; + vault: StringPublicKey; + acceptPayment: StringPublicKey; + state: AuctionManagerStateV2; + }) { + this.key = MetaplexKey.AuctionManagerV2; + this.store = args.store; + this.authority = args.authority; + this.auction = args.auction; + this.vault = args.vault; + this.acceptPayment = args.acceptPayment; + this.state = args.state; + + const auction = programIds().auction; + + getAuctionExtended({ + auctionProgramId: auction, + resource: this.vault, + }).then(val => (this.auctionDataExtended = val)); + } +} + +export class AuctionManagerStateV2 { + status: AuctionManagerStatus = AuctionManagerStatus.Initialized; + safetyConfigItemsValidated: BN = new BN(0); + bidsPushedToAcceptPayment: BN = new BN(0); + hasParticipation: boolean = false; + + constructor(args?: AuctionManagerStateV2) { + Object.assign(this, args); + } +} + +export class ParticipationStateV2 { + collectedToAcceptPayment: BN = new BN(0); + + constructor(args?: ParticipationStateV2) { + Object.assign(this, args); + } +} + +export class ParticipationConfigV2 { + winnerConstraint: WinningConstraint = WinningConstraint.NoParticipationPrize; + nonWinningConstraint: NonWinningConstraint = + NonWinningConstraint.GivenForFixedPrice; + fixedPrice: BN | null = new BN(0); + + constructor(args?: ParticipationConfigV2) { + Object.assign(this, args); + } +} + +export class RedeemBidArgs { + instruction = 2; +} + +export class RedeemFullRightsTransferBidArgs { + instruction = 3; +} + +export class StartAuctionArgs { + instruction = 5; +} + +export class EndAuctionArgs { + instruction = 20; + reveal: BN[] | null; + constructor(args: { reveal: BN[] | null }) { + this.reveal = args.reveal; + } +} + +export class ClaimBidArgs { + instruction = 6; +} + +export enum ProxyCallAddress { + RedeemBid = 0, + RedeemFullRightsTransferBid = 1, +} +export class RedeemUnusedWinningConfigItemsAsAuctioneerArgs { + instruction = 12; + winningConfigItemIndex: number; + proxyCall: ProxyCallAddress; + constructor(args: { + winningConfigItemIndex: number; + proxyCall: ProxyCallAddress; + }) { + this.winningConfigItemIndex = args.winningConfigItemIndex; + this.proxyCall = args.proxyCall; + } +} + +export class EmptyPaymentAccountArgs { + instruction = 7; + winningConfigIndex: number | null; + winningConfigItemIndex: number | null; + creatorIndex: number | null; + constructor(args: { + winningConfigIndex: number | null; + winningConfigItemIndex: number | null; + creatorIndex: number | null; + }) { + this.winningConfigIndex = args.winningConfigIndex; + this.winningConfigItemIndex = args.winningConfigItemIndex; + this.creatorIndex = args.creatorIndex; + } +} + +export class SetStoreArgs { + instruction = 8; + public: boolean; + constructor(args: { public: boolean }) { + this.public = args.public; + } +} + +export class SetWhitelistedCreatorArgs { + instruction = 9; + activated: boolean; + constructor(args: { activated: boolean }) { + this.activated = args.activated; + } +} + +export class DecommissionAuctionManagerArgs { + instruction = 13; +} + +export class RedeemPrintingV2BidArgs { + instruction = 14; + editionOffset: BN; + winIndex: BN; + constructor(args: { editionOffset: BN; winIndex: BN }) { + this.editionOffset = args.editionOffset; + this.winIndex = args.winIndex; + } +} +export class WithdrawMasterEditionArgs { + instruction = 15; +} +export class RedeemParticipationBidV3Args { + instruction = 19; + winIndex: BN | null; + constructor(args: { winIndex: BN | null }) { + this.winIndex = args.winIndex; + } +} + +export class SetStoreIndexArgs { + instruction = 21; + page: BN; + offset: BN; + constructor(args: { page: BN; offset: BN }) { + this.page = args.page; + this.offset = args.offset; + } +} + +export class SetAuctionCacheArgs { + instruction = 22; +} + +export enum WinningConstraint { + NoParticipationPrize = 0, + ParticipationPrizeGiven = 1, +} + +export enum NonWinningConstraint { + NoParticipationPrize = 0, + GivenForFixedPrice = 1, + GivenForBidPrice = 2, +} + +export 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, + /// Means you are using a MasterEditionV2 as a participation prize. + Participation, +} + +export const decodeStoreIndexer = (buffer: Buffer) => { + return deserializeUnchecked(SCHEMA, StoreIndexer, buffer) as StoreIndexer; +}; + +export const decodeAuctionCache = (buffer: Buffer) => { + return deserializeUnchecked(SCHEMA, AuctionCache, buffer) as AuctionCache; +}; + +export const decodePrizeTrackingTicket = (buffer: Buffer) => { + return deserializeUnchecked( + SCHEMA, + PrizeTrackingTicket, + buffer, + ) as PrizeTrackingTicket; +}; + +export const decodeWhitelistedCreator = (buffer: Buffer) => { + return deserializeUnchecked( + SCHEMA, + WhitelistedCreator, + buffer, + ) as WhitelistedCreator; +}; + +export const WhitelistedCreatorParser: AccountParser = ( + pubkey: StringPublicKey, + account: AccountInfo, +) => ({ + pubkey, + account, + info: decodeWhitelistedCreator(account.data), +}); + +export const decodeStore = (buffer: Buffer) => { + return deserializeUnchecked(SCHEMA, Store, buffer) as Store; +}; + +export const decodeAuctionManager = ( + buffer: Buffer, +): AuctionManagerV1 | AuctionManagerV2 => { + return buffer[0] == MetaplexKey.AuctionManagerV1 + ? deserializeUnchecked(SCHEMA, AuctionManagerV1, buffer) + : deserializeUnchecked(SCHEMA, AuctionManagerV2, buffer); +}; + +export const decodeBidRedemptionTicket = (buffer: Buffer) => { + return ( + buffer[0] == MetaplexKey.BidRedemptionTicketV1 + ? deserializeUnchecked(SCHEMA, BidRedemptionTicketV1, buffer) + : new BidRedemptionTicketV2({ + key: MetaplexKey.BidRedemptionTicketV2, + data: buffer.toJSON().data, + }) + ) as BidRedemptionTicket; +}; + +export const decodeSafetyDepositConfig = (buffer: Buffer) => { + return new SafetyDepositConfig({ + data: buffer, + }); +}; + +export const decodePayoutTicket = (buffer: Buffer) => { + return deserializeUnchecked(SCHEMA, PayoutTicket, buffer) as PayoutTicket; +}; + +export class WhitelistedCreator { + key: MetaplexKey = MetaplexKey.WhitelistedCreatorV1; + address: StringPublicKey; + activated: boolean = true; + + // Populated from name service + twitter?: string; + name?: string; + image?: string; + description?: string; + + constructor(args: { address: string; activated: boolean }) { + this.address = args.address; + this.activated = args.activated; + } +} + +export class Store { + key: MetaplexKey = MetaplexKey.StoreV1; + public: boolean = true; + auctionProgram: StringPublicKey; + tokenVaultProgram: StringPublicKey; + tokenMetadataProgram: StringPublicKey; + tokenProgram: StringPublicKey; + + constructor(args: { + public: boolean; + auctionProgram: StringPublicKey; + tokenVaultProgram: StringPublicKey; + tokenMetadataProgram: StringPublicKey; + tokenProgram: StringPublicKey; + }) { + this.key = MetaplexKey.StoreV1; + this.public = args.public; + this.auctionProgram = args.auctionProgram; + this.tokenVaultProgram = args.tokenVaultProgram; + this.tokenMetadataProgram = args.tokenMetadataProgram; + this.tokenProgram = args.tokenProgram; + } +} + +export interface BidRedemptionTicket { + key: MetaplexKey; + + getBidRedeemed(order: number): boolean; +} + +export interface AuctionViewItem { + winningConfigType: WinningConfigType; + amount: BN; + metadata: ParsedAccount; + safetyDeposit: ParsedAccount; + masterEdition?: ParsedAccount; +} +export class BidRedemptionTicketV2 implements BidRedemptionTicket { + key: MetaplexKey = MetaplexKey.BidRedemptionTicketV2; + winnerIndex: BN | null; + auctionManager: StringPublicKey; + data: number[] = []; + + constructor(args: { key: MetaplexKey; data: number[] }) { + Object.assign(this, args); + let offset = 2; + if (this.data[1] == 0) { + this.winnerIndex = null; + } else { + this.winnerIndex = new BN(this.data.slice(2, 8), 'le'); + offset += 8; + } + + this.auctionManager = bs58.encode(this.data.slice(offset, offset + 32)); + } + + getBidRedeemed(order: number): boolean { + let offset = 42; + if (this.data[1] == 0) { + offset -= 8; + } + const index = Math.floor(order / 8) + offset; + const positionFromRight = 7 - (order % 8); + const mask = Math.pow(2, positionFromRight); + + const appliedMask = this.data[index] & mask; + + return appliedMask != 0; + } +} + +export enum AuctionManagerStatus { + Initialized, + Validated, + Running, + Disbursing, + Finished, +} + +export enum TupleNumericType { + U8 = 1, + U16 = 2, + U32 = 4, + U64 = 8, +} + +export class AmountRange { + amount: BN; + length: BN; + constructor(args: { amount: BN; length: BN }) { + this.amount = args.amount; + this.length = args.length; + } +} + +export class InitAuctionManagerV2Args { + instruction = 17; + amountType: TupleNumericType = TupleNumericType.U8; + lengthType: TupleNumericType = TupleNumericType.U8; + maxRanges: BN = new BN(1); + + constructor(args: { + amountType: TupleNumericType; + lengthType: TupleNumericType; + maxRanges: BN; + }) { + this.amountType = args.amountType; + this.lengthType = args.lengthType; + this.maxRanges = args.maxRanges; + } +} + +export class SafetyDepositConfig { + key: MetaplexKey = MetaplexKey.SafetyDepositConfigV1; + auctionManager: StringPublicKey = SystemProgram.programId.toBase58(); + order: BN = new BN(0); + winningConfigType: WinningConfigType = WinningConfigType.PrintingV2; + amountType: TupleNumericType = TupleNumericType.U8; + lengthType: TupleNumericType = TupleNumericType.U8; + amountRanges: AmountRange[] = []; + participationConfig: ParticipationConfigV2 | null = null; + participationState: ParticipationStateV2 | null = null; + + constructor(args: { + data?: Uint8Array; + directArgs?: { + auctionManager: StringPublicKey; + order: BN; + winningConfigType: WinningConfigType; + amountType: TupleNumericType; + lengthType: TupleNumericType; + amountRanges: AmountRange[]; + participationConfig: ParticipationConfigV2 | null; + participationState: ParticipationStateV2 | null; + }; + }) { + if (args.directArgs) { + Object.assign(this, args.directArgs); + } else if (args.data) { + this.auctionManager = bs58.encode(args.data.slice(1, 33)); + this.order = new BN(args.data.slice(33, 41), 'le'); + this.winningConfigType = args.data[41]; + this.amountType = args.data[42]; + this.lengthType = args.data[43]; + const lengthOfArray = new BN(args.data.slice(44, 48), 'le'); + this.amountRanges = []; + let offset = 48; + for (let i = 0; i < lengthOfArray.toNumber(); i++) { + const amount = this.getBNFromData(args.data, offset, this.amountType); + offset += this.amountType; + const length = this.getBNFromData(args.data, offset, this.lengthType); + offset += this.lengthType; + this.amountRanges.push(new AmountRange({ amount, length })); + } + + if (args.data[offset] == 0) { + offset += 1; + this.participationConfig = null; + } else { + // pick up participation config manually + const winnerConstraintAsNumber = args.data[offset + 1]; + const nonWinnerConstraintAsNumber = args.data[offset + 2]; + let fixedPrice: BN | null = null; + offset += 3; + + if (args.data[offset] == 1) { + fixedPrice = new BN(args.data.slice(offset + 1, offset + 9), 'le'); + offset += 9; + } else { + offset += 1; + } + this.participationConfig = new ParticipationConfigV2({ + winnerConstraint: winnerConstraintAsNumber, + nonWinningConstraint: nonWinnerConstraintAsNumber, + fixedPrice: fixedPrice, + }); + } + + if (args.data[offset] == 0) { + offset += 1; + this.participationState = null; + } else { + // pick up participation state manually + const collectedToAcceptPayment = new BN( + args.data.slice(offset + 1, offset + 9), + 'le', + ); + offset += 9; + this.participationState = new ParticipationStateV2({ + collectedToAcceptPayment, + }); + } + } + } + + getBNFromData( + data: Uint8Array, + offset: number, + dataType: TupleNumericType, + ): BN { + switch (dataType) { + case TupleNumericType.U8: + return new BN(data[offset], 'le'); + case TupleNumericType.U16: + return new BN(data.slice(offset, offset + 2), 'le'); + case TupleNumericType.U32: + return new BN(data.slice(offset, offset + 4), 'le'); + case TupleNumericType.U64: + return new BN(data.slice(offset, offset + 8), 'le'); + } + } + + getAmountForWinner(winner: BN): BN { + let start = new BN(0); + for (let i = 0; i < this.amountRanges.length; i++) { + const end = start.add(this.amountRanges[i].length); + if (winner.gte(start) && winner.lt(end)) { + return this.amountRanges[i].amount; + } + start = end; + } + return new BN(0); + } +} + +export class ValidateSafetyDepositBoxV2Args { + instruction = 18; + safetyDepositConfig: SafetyDepositConfig; + constructor(safetyDeposit: SafetyDepositConfig) { + this.safetyDepositConfig = safetyDeposit; + } +} + +export const SCHEMA = new Map([ + ...DEPRECATED_SCHEMA, + [ + StoreIndexer, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['store', 'pubkeyAsString'], + ['page', 'u64'], + ['auctionCaches', ['pubkeyAsString']], + ], + }, + ], + [ + AuctionCache, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['store', 'pubkeyAsString'], + ['timestamp', 'u64'], + ['metadata', ['pubkeyAsString']], + ['auction', 'pubkeyAsString'], + ['vault', 'pubkeyAsString'], + ['auctionManager', 'pubkeyAsString'], + ], + }, + ], + [ + PrizeTrackingTicket, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['metadata', 'pubkeyAsString'], + ['supplySnapshot', 'u64'], + ['expectedRedemptions', 'u64'], + ['redemptions', 'u64'], + ], + }, + ], + [ + AuctionManagerV2, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['store', 'pubkeyAsString'], + ['authority', 'pubkeyAsString'], + ['auction', 'pubkeyAsString'], + ['vault', 'pubkeyAsString'], + ['acceptPayment', 'pubkeyAsString'], + ['state', AuctionManagerStateV2], + ], + }, + ], + [ + ParticipationConfigV2, + { + kind: 'struct', + fields: [ + ['winnerConstraint', 'u8'], // enum + ['nonWinningConstraint', 'u8'], + ['fixedPrice', { kind: 'option', type: 'u64' }], + ], + }, + ], + + [ + WhitelistedCreator, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['address', 'pubkeyAsString'], + ['activated', 'u8'], + ], + }, + ], + [ + Store, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['public', 'u8'], + ['auctionProgram', 'pubkeyAsString'], + ['tokenVaultProgram', 'pubkeyAsString'], + ['tokenMetadataProgram', 'pubkeyAsString'], + ['tokenProgram', 'pubkeyAsString'], + ], + }, + ], + [ + AuctionManagerStateV2, + { + kind: 'struct', + fields: [ + ['status', 'u8'], + ['safetyConfigItemsValidated', 'u64'], + ['bidsPushedToAcceptPayment', 'u64'], + ['hasParticipation', 'u8'], + ], + }, + ], + [ + ParticipationStateV2, + { + kind: 'struct', + fields: [['collectedToAcceptPayment', 'u64']], + }, + ], + [ + PayoutTicket, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['recipient', 'pubkeyAsString'], + ['amountPaid', 'u64'], + ], + }, + ], + [ + AmountRange, + { + kind: 'struct', + fields: [ + ['amount', 'u64'], + ['length', 'u64'], + ], + }, + ], + [ + SafetyDepositConfig, + { + kind: 'struct', + fields: [ + ['key', 'u8'], + ['auctionManager', 'pubkeyAsString'], + ['order', 'u64'], + ['winningConfigType', 'u8'], + ['amountType', 'u8'], + ['lengthType', 'u8'], + ['amountRanges', [AmountRange]], + [ + 'participationConfig', + { kind: 'option', type: ParticipationConfigV2 }, + ], + ['participationState', { kind: 'option', type: ParticipationStateV2 }], + ], + }, + ], + [ + RedeemUnusedWinningConfigItemsAsAuctioneerArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['winningConfigItemIndex', 'u8'], + ['proxyCall', 'u8'], + ], + }, + ], + [ + DecommissionAuctionManagerArgs, + { + kind: 'struct', + fields: [['instruction', 'u8']], + }, + ], + [ + RedeemPrintingV2BidArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['editionOffset', 'u64'], + ['winIndex', 'u64'], + ], + }, + ], + [ + WithdrawMasterEditionArgs, + { + kind: 'struct', + fields: [['instruction', 'u8']], + }, + ], + + [ + RedeemParticipationBidV3Args, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['winIndex', { kind: 'option', type: 'u64' }], + ], + }, + ], + [ + InitAuctionManagerV2Args, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['amountType', 'u8'], + ['lengthType', 'u8'], + ['maxRanges', 'u64'], + ], + }, + ], + [ + ValidateSafetyDepositBoxV2Args, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['safetyDepositConfig', SafetyDepositConfig], + ], + }, + ], + [ + RedeemBidArgs, + { + kind: 'struct', + fields: [['instruction', 'u8']], + }, + ], + [ + RedeemFullRightsTransferBidArgs, + { + kind: 'struct', + fields: [['instruction', 'u8']], + }, + ], + + [ + StartAuctionArgs, + { + kind: 'struct', + fields: [['instruction', 'u8']], + }, + ], + [ + EndAuctionArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['reveal', { kind: 'option', type: [BN] }], + ], + }, + ], + [ + ClaimBidArgs, + { + kind: 'struct', + fields: [['instruction', 'u8']], + }, + ], + [ + SetAuctionCacheArgs, + { + kind: 'struct', + fields: [['instruction', 'u8']], + }, + ], + [ + SetStoreIndexArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['page', 'u64'], + ['offset', 'u64'], + ], + }, + ], + [ + EmptyPaymentAccountArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['winningConfigIndex', { kind: 'option', type: 'u8' }], + ['winningConfigItemIndex', { kind: 'option', type: 'u8' }], + ['creatorIndex', { kind: 'option', type: 'u8' }], + ], + }, + ], + [ + SetStoreArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['public', 'u8'], //bool + ], + }, + ], + [ + SetWhitelistedCreatorArgs, + { + kind: 'struct', + fields: [ + ['instruction', 'u8'], + ['activated', 'u8'], //bool + ], + }, + ], +]); + +export async function getAuctionManagerKey( + vault: string, + auctionKey: string, +): Promise { + const PROGRAM_IDS = programIds(); + + return ( + await findProgramAddress( + [Buffer.from(METAPLEX_PREFIX), toPublicKey(auctionKey).toBuffer()], + toPublicKey(PROGRAM_IDS.metaplex), + ) + )[0]; +} + +export async function getAuctionKeys( + vault: string, +): Promise<{ auctionKey: string; auctionManagerKey: string }> { + const PROGRAM_IDS = programIds(); + + const auctionKey = ( + await findProgramAddress( + [ + Buffer.from(AUCTION_PREFIX), + toPublicKey(PROGRAM_IDS.auction).toBuffer(), + toPublicKey(vault).toBuffer(), + ], + toPublicKey(PROGRAM_IDS.auction), + ) + )[0]; + + const auctionManagerKey = await getAuctionManagerKey(vault, auctionKey); + + return { auctionKey, auctionManagerKey }; +} + +export async function getBidRedemption( + auctionKey: string, + bidMetadata: string, +): Promise { + const PROGRAM_IDS = programIds(); + + return ( + await findProgramAddress( + [ + Buffer.from(METAPLEX_PREFIX), + toPublicKey(auctionKey).toBuffer(), + toPublicKey(bidMetadata).toBuffer(), + ], + toPublicKey(PROGRAM_IDS.metaplex), + ) + )[0]; +} + +export async function getBidderKeys( + auctionKey: string, + bidder: string, +): Promise<{ bidMetadata: string; bidRedemption: string }> { + const PROGRAM_IDS = programIds(); + + const bidMetadata = ( + await findProgramAddress( + [ + Buffer.from(AUCTION_PREFIX), + toPublicKey(PROGRAM_IDS.auction).toBuffer(), + toPublicKey(auctionKey).toBuffer(), + toPublicKey(bidder).toBuffer(), + Buffer.from(METADATA), + ], + toPublicKey(PROGRAM_IDS.auction), + ) + )[0]; + + const bidRedemption = await getBidRedemption(auctionKey, bidMetadata); + + return { bidMetadata, bidRedemption }; +} + +export async function getOriginalAuthority( + auctionKey: string, + metadata: string, +): Promise { + const PROGRAM_IDS = programIds(); + + return ( + await findProgramAddress( + [ + Buffer.from(METAPLEX_PREFIX), + toPublicKey(auctionKey).toBuffer(), + toPublicKey(metadata).toBuffer(), + ], + toPublicKey(PROGRAM_IDS.metaplex), + ) + )[0]; +} + +export const isCreatorPartOfTheStore = async ( + creatorAddress: StringPublicKey, + pubkey: StringPublicKey, + store?: StringPublicKey, +) => { + const creatorKeyInStore = await getWhitelistedCreator(creatorAddress, store); + + return creatorKeyInStore === pubkey; +}; + +export async function getWhitelistedCreator( + creator: StringPublicKey, + storeId?: StringPublicKey, +) { + const PROGRAM_IDS = programIds(); + const store = storeId || PROGRAM_IDS.store; + if (!store) { + throw new Error('Store not initialized'); + } + + return ( + await findProgramAddress( + [ + Buffer.from(METAPLEX_PREFIX), + toPublicKey(PROGRAM_IDS.metaplex).toBuffer(), + toPublicKey(store).toBuffer(), + toPublicKey(creator).toBuffer(), + ], + toPublicKey(PROGRAM_IDS.metaplex), + ) + )[0]; +} + +export async function getPrizeTrackingTicket( + auctionManager: string, + mint: string, +) { + const PROGRAM_IDS = programIds(); + const store = PROGRAM_IDS.store; + if (!store) { + throw new Error('Store not initialized'); + } + + return ( + await findProgramAddress( + [ + Buffer.from(METAPLEX_PREFIX), + toPublicKey(PROGRAM_IDS.metaplex).toBuffer(), + toPublicKey(auctionManager).toBuffer(), + toPublicKey(mint).toBuffer(), + ], + toPublicKey(PROGRAM_IDS.metaplex), + ) + )[0]; +} + +export async function getAuctionWinnerTokenTypeTracker(auctionManager: string) { + const PROGRAM_IDS = programIds(); + const store = PROGRAM_IDS.store; + if (!store) { + throw new Error('Store not initialized'); + } + + return ( + await findProgramAddress( + [ + Buffer.from(METAPLEX_PREFIX), + toPublicKey(PROGRAM_IDS.metaplex).toBuffer(), + toPublicKey(auctionManager).toBuffer(), + Buffer.from(TOTALS), + ], + toPublicKey(PROGRAM_IDS.metaplex), + ) + )[0]; +} + +export async function getSafetyDepositConfig( + auctionManager: string, + safetyDeposit: string, +) { + const PROGRAM_IDS = programIds(); + const store = PROGRAM_IDS.store; + if (!store) { + throw new Error('Store not initialized'); + } + + return ( + await findProgramAddress( + [ + Buffer.from(METAPLEX_PREFIX), + toPublicKey(PROGRAM_IDS.metaplex).toBuffer(), + toPublicKey(auctionManager).toBuffer(), + toPublicKey(safetyDeposit).toBuffer(), + ], + toPublicKey(PROGRAM_IDS.metaplex), + ) + )[0]; +} + +export async function getStoreIndexer(page: number) { + const PROGRAM_IDS = programIds(); + const store = PROGRAM_IDS.store; + if (!store) { + throw new Error('Store not initialized'); + } + + return ( + await findProgramAddress( + [ + Buffer.from(METAPLEX_PREFIX), + toPublicKey(PROGRAM_IDS.metaplex).toBuffer(), + toPublicKey(store).toBuffer(), + Buffer.from(INDEX), + Buffer.from(page.toString()), + ], + toPublicKey(PROGRAM_IDS.metaplex), + ) + )[0]; +} + +export async function getAuctionCache(auction: StringPublicKey) { + const PROGRAM_IDS = programIds(); + const store = PROGRAM_IDS.store; + if (!store) { + throw new Error('Store not initialized'); + } + console.log('Auction', auction); + return ( + await findProgramAddress( + [ + Buffer.from(METAPLEX_PREFIX), + toPublicKey(PROGRAM_IDS.metaplex).toBuffer(), + toPublicKey(store).toBuffer(), + toPublicKey(auction).toBuffer(), + Buffer.from(CACHE), + ], + toPublicKey(PROGRAM_IDS.metaplex), + ) + )[0]; +} + +export async function getPayoutTicket( + auctionManager: string, + winnerConfigIndex: number | null | undefined, + winnerConfigItemIndex: number | null | undefined, + creatorIndex: number | null | undefined, + safetyDepositBox: string, + recipient: string, +) { + const PROGRAM_IDS = programIds(); + + return ( + await findProgramAddress( + [ + Buffer.from(METAPLEX_PREFIX), + toPublicKey(auctionManager).toBuffer(), + Buffer.from( + winnerConfigIndex !== null && winnerConfigIndex !== undefined + ? winnerConfigIndex.toString() + : 'participation', + ), + Buffer.from( + winnerConfigItemIndex !== null && winnerConfigItemIndex !== undefined + ? winnerConfigItemIndex.toString() + : '0', + ), + Buffer.from( + creatorIndex !== null && creatorIndex !== undefined + ? creatorIndex.toString() + : 'auctioneer', + ), + toPublicKey(safetyDepositBox).toBuffer(), + toPublicKey(recipient).toBuffer(), + ], + toPublicKey(PROGRAM_IDS.metaplex), + ) + )[0]; +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/initAuctionManagerV2.ts b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/initAuctionManagerV2.ts new file mode 100644 index 0000000..9e76393 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/initAuctionManagerV2.ts @@ -0,0 +1,104 @@ +import { + SystemProgram, + SYSVAR_RENT_PUBKEY, + TransactionInstruction, +} from '@solana/web3.js'; +import BN from 'bn.js'; +import { serialize } from 'borsh'; + +import { + getAuctionKeys, + getAuctionWinnerTokenTypeTracker, + InitAuctionManagerV2Args, + SCHEMA, + TupleNumericType, +} from '.'; +import { programIds, StringPublicKey, toPublicKey } from '../../utils'; + +export async function initAuctionManagerV2( + vault: StringPublicKey, + auctionManagerAuthority: StringPublicKey, + payer: StringPublicKey, + acceptPaymentAccount: StringPublicKey, + store: StringPublicKey, + amountType: TupleNumericType, + lengthType: TupleNumericType, + maxRanges: BN, + instructions: TransactionInstruction[], +) { + const PROGRAM_IDS = programIds(); + const { auctionKey, auctionManagerKey } = await getAuctionKeys(vault); + + const value = new InitAuctionManagerV2Args({ + amountType, + lengthType, + maxRanges, + }); + + const tokenTracker = await getAuctionWinnerTokenTypeTracker( + auctionManagerKey, + ); + + const data = Buffer.from(serialize(SCHEMA, value)); + + const keys = [ + { + pubkey: toPublicKey(auctionManagerKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(tokenTracker), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(vault), + isSigner: false, + isWritable: false, + }, + + { + pubkey: toPublicKey(auctionKey), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(auctionManagerAuthority), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(payer), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(acceptPaymentAccount), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(store), + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(PROGRAM_IDS.metaplex), + data, + }), + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/redeemBid.ts b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/redeemBid.ts new file mode 100644 index 0000000..9d3bb7f --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/redeemBid.ts @@ -0,0 +1,207 @@ +import { + SystemProgram, + SYSVAR_RENT_PUBKEY, + TransactionInstruction, +} from '@solana/web3.js'; +import { serialize } from 'borsh'; + +import { + getAuctionKeys, + getBidderKeys, + getSafetyDepositConfig, + ProxyCallAddress, + RedeemBidArgs, + RedeemUnusedWinningConfigItemsAsAuctioneerArgs, + SCHEMA, +} from '.'; +import { VAULT_PREFIX, getAuctionExtended } from '../../actions'; +import { + findProgramAddress, + programIds, + StringPublicKey, + toPublicKey, +} from '../../utils'; + +export async function redeemBid( + vault: StringPublicKey, + safetyDepositTokenStore: StringPublicKey, + destination: StringPublicKey, + safetyDeposit: StringPublicKey, + fractionMint: StringPublicKey, + bidder: StringPublicKey, + payer: StringPublicKey, + masterEdition: StringPublicKey | undefined, + reservationList: StringPublicKey | undefined, + isPrintingType: boolean, + instructions: TransactionInstruction[], + // If this is an auctioneer trying to reclaim a specific winning index, pass it here, + // and this will instead call the proxy route instead of the real one, wrapping the original + // redemption call in an override call that forces the winning index if the auctioneer is authorized. + auctioneerReclaimIndex?: number, +) { + const PROGRAM_IDS = programIds(); + const store = PROGRAM_IDS.store; + if (!store) { + throw new Error('Store not initialized'); + } + + const { auctionKey, auctionManagerKey } = await getAuctionKeys(vault); + + const { bidRedemption, bidMetadata } = await getBidderKeys( + auctionKey, + bidder, + ); + + const transferAuthority: StringPublicKey = ( + await findProgramAddress( + [ + Buffer.from(VAULT_PREFIX), + toPublicKey(PROGRAM_IDS.vault).toBuffer(), + toPublicKey(vault).toBuffer(), + ], + toPublicKey(PROGRAM_IDS.vault), + ) + )[0]; + + const safetyDepositConfig = await getSafetyDepositConfig( + auctionManagerKey, + safetyDeposit, + ); + + const auctionExtended = await getAuctionExtended({ + auctionProgramId: PROGRAM_IDS.auction, + resource: vault, + }); + + const value = + auctioneerReclaimIndex !== undefined + ? new RedeemUnusedWinningConfigItemsAsAuctioneerArgs({ + winningConfigItemIndex: auctioneerReclaimIndex, + proxyCall: ProxyCallAddress.RedeemBid, + }) + : new RedeemBidArgs(); + const data = Buffer.from(serialize(SCHEMA, value)); + const keys = [ + { + pubkey: toPublicKey(auctionManagerKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(safetyDepositTokenStore), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(destination), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(bidRedemption), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(safetyDeposit), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(vault), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(fractionMint), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(auctionKey), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(bidMetadata), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(bidder), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(payer), + isSigner: true, + isWritable: false, + }, + { + pubkey: PROGRAM_IDS.token, + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(PROGRAM_IDS.vault), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(PROGRAM_IDS.metadata), + isSigner: false, + isWritable: false, + }, + { + pubkey: store, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(transferAuthority), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(safetyDepositConfig), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(auctionExtended), + isSigner: false, + isWritable: false, + }, + ]; + + if (isPrintingType && masterEdition && reservationList) { + keys.push({ + pubkey: toPublicKey(masterEdition), + isSigner: false, + isWritable: true, + }); + keys.push({ + pubkey: toPublicKey(reservationList), + isSigner: false, + isWritable: true, + }); + } + + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(PROGRAM_IDS.metaplex), + data, + }), + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/redeemFullRightsTransferBid.ts b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/redeemFullRightsTransferBid.ts new file mode 100644 index 0000000..ec0839c --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/redeemFullRightsTransferBid.ts @@ -0,0 +1,204 @@ +import { + SystemProgram, + SYSVAR_RENT_PUBKEY, + TransactionInstruction, +} from '@solana/web3.js'; +import { serialize } from 'borsh'; + +import { + getAuctionKeys, + getBidderKeys, + getSafetyDepositConfig, + ProxyCallAddress, + RedeemFullRightsTransferBidArgs, + RedeemUnusedWinningConfigItemsAsAuctioneerArgs, + SCHEMA, +} from '.'; +import { VAULT_PREFIX, getAuctionExtended } from '../../actions'; +import { + findProgramAddress, + programIds, + StringPublicKey, + toPublicKey, +} from '../../utils'; + +export async function redeemFullRightsTransferBid( + vault: StringPublicKey, + safetyDepositTokenStore: StringPublicKey, + destination: StringPublicKey, + safetyDeposit: StringPublicKey, + fractionMint: StringPublicKey, + bidder: StringPublicKey, + payer: StringPublicKey, + instructions: TransactionInstruction[], + masterMetadata: StringPublicKey, + newAuthority: StringPublicKey, + // If this is an auctioneer trying to reclaim a specific winning index, pass it here, + // and this will instead call the proxy route instead of the real one, wrapping the original + // redemption call in an override call that forces the winning index if the auctioneer is authorized. + auctioneerReclaimIndex?: number, +) { + const PROGRAM_IDS = programIds(); + const store = PROGRAM_IDS.store; + if (!store) { + throw new Error('Store not initialized'); + } + + const { auctionKey, auctionManagerKey } = await getAuctionKeys(vault); + + const { bidRedemption, bidMetadata } = await getBidderKeys( + auctionKey, + bidder, + ); + + const transferAuthority = ( + await findProgramAddress( + [ + Buffer.from(VAULT_PREFIX), + toPublicKey(PROGRAM_IDS.vault).toBuffer(), + toPublicKey(vault).toBuffer(), + ], + toPublicKey(PROGRAM_IDS.vault), + ) + )[0]; + + const safetyDepositConfig = await getSafetyDepositConfig( + auctionManagerKey, + safetyDeposit, + ); + + const auctionExtended = await getAuctionExtended({ + auctionProgramId: PROGRAM_IDS.auction, + resource: vault, + }); + + const value = + auctioneerReclaimIndex !== undefined + ? new RedeemUnusedWinningConfigItemsAsAuctioneerArgs({ + winningConfigItemIndex: auctioneerReclaimIndex, + proxyCall: ProxyCallAddress.RedeemFullRightsTransferBid, + }) + : new RedeemFullRightsTransferBidArgs(); + const data = Buffer.from(serialize(SCHEMA, value)); + const keys = [ + { + pubkey: toPublicKey(auctionManagerKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(safetyDepositTokenStore), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(destination), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(bidRedemption), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(safetyDeposit), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(vault), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(fractionMint), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(auctionKey), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(bidMetadata), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(bidder), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(payer), + isSigner: true, + isWritable: false, + }, + { + pubkey: PROGRAM_IDS.token, + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(PROGRAM_IDS.vault), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(PROGRAM_IDS.metadata), + isSigner: false, + isWritable: false, + }, + { + pubkey: store, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(masterMetadata), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(newAuthority), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(transferAuthority), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(safetyDepositConfig), + isSigner: false, + isWritable: false, + }, + + { + pubkey: toPublicKey(auctionExtended), + isSigner: false, + isWritable: false, + }, + ]; + + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(PROGRAM_IDS.metaplex), + data, + }), + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/redeemParticipationBidV3.ts b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/redeemParticipationBidV3.ts new file mode 100644 index 0000000..b46cdfc --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/redeemParticipationBidV3.ts @@ -0,0 +1,237 @@ +import { + SystemProgram, + SYSVAR_RENT_PUBKEY, + TransactionInstruction, +} from '@solana/web3.js'; +import BN from 'bn.js'; +import { serialize } from 'borsh'; + +import { + getAuctionKeys, + getBidderKeys, + RedeemParticipationBidV3Args, + SCHEMA, + getPrizeTrackingTicket, + getSafetyDepositConfig, +} from '.'; +import { + getAuctionExtended, + getEdition, + getEditionMarkPda, + getMetadata, +} from '../../actions'; +import { programIds, StringPublicKey, toPublicKey } from '../../utils'; + +export async function redeemParticipationBidV3( + vault: StringPublicKey, + safetyDepositTokenStore: StringPublicKey, + destination: StringPublicKey, + safetyDeposit: StringPublicKey, + bidder: StringPublicKey, + payer: StringPublicKey, + metadata: StringPublicKey, + masterEdition: StringPublicKey, + originalMint: StringPublicKey, + transferAuthority: StringPublicKey, + acceptPaymentAccount: StringPublicKey, + tokenPaymentAccount: StringPublicKey, + newMint: StringPublicKey, + edition: BN, + winIndex: BN | null, + instructions: TransactionInstruction[], +) { + const PROGRAM_IDS = programIds(); + const store = PROGRAM_IDS.store; + if (!store) { + throw new Error('Store not initialized'); + } + + const { auctionKey, auctionManagerKey } = await getAuctionKeys(vault); + const auctionDataExtended = await getAuctionExtended({ + auctionProgramId: PROGRAM_IDS.auction, + resource: vault, + }); + + const { bidRedemption, bidMetadata } = await getBidderKeys( + auctionKey, + bidder, + ); + + const prizeTrackingTicket = await getPrizeTrackingTicket( + auctionManagerKey, + originalMint, + ); + + const newMetadata = await getMetadata(newMint); + const newEdition = await getEdition(newMint); + + const editionMarkPda = await getEditionMarkPda(originalMint, edition); + + const safetyDepositConfig = await getSafetyDepositConfig( + auctionManagerKey, + safetyDeposit, + ); + + const value = new RedeemParticipationBidV3Args({ winIndex }); + const data = Buffer.from(serialize(SCHEMA, value)); + const keys = [ + { + pubkey: toPublicKey(auctionManagerKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(safetyDepositTokenStore), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(destination), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(bidRedemption), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(safetyDeposit), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(vault), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(safetyDepositConfig), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(auctionKey), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(bidMetadata), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(bidder), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(payer), + isSigner: true, + isWritable: true, + }, + { + pubkey: PROGRAM_IDS.token, + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(PROGRAM_IDS.vault), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(PROGRAM_IDS.metadata), + isSigner: false, + isWritable: false, + }, + { + pubkey: store, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(transferAuthority), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(acceptPaymentAccount), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(tokenPaymentAccount), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(prizeTrackingTicket), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(newMetadata), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(newEdition), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(masterEdition), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(newMint), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(editionMarkPda), + isSigner: false, + isWritable: true, + }, + { + // Mint authority (this) is going to be the payer since the bidder + // may not be signer hre - we may be redeeming for someone else (permissionless) + // and during the txn, mint authority is removed from us and given to master edition. + // The ATA account is already owned by bidder by default. No signing needed + pubkey: toPublicKey(payer), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(metadata), + isSigner: false, + isWritable: false, + }, + + { + pubkey: toPublicKey(auctionDataExtended), + isSigner: false, + isWritable: false, + }, + ]; + + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(PROGRAM_IDS.metaplex), + data, + }), + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/redeemPrintingV2Bid.ts b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/redeemPrintingV2Bid.ts new file mode 100644 index 0000000..f7cc5ba --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/redeemPrintingV2Bid.ts @@ -0,0 +1,219 @@ +import { + SystemProgram, + SYSVAR_RENT_PUBKEY, + TransactionInstruction, +} from '@solana/web3.js'; +import BN from 'bn.js'; +import { serialize } from 'borsh'; + +import { + getAuctionKeys, + getBidderKeys, + RedeemPrintingV2BidArgs, + getPrizeTrackingTicket, + SCHEMA, + getSafetyDepositConfig, +} from '.'; +import { + getEdition, + getEditionMarkPda, + getMetadata, + getAuctionExtended, +} from '../../actions'; +import { programIds, StringPublicKey, toPublicKey } from '../../utils'; + +export async function redeemPrintingV2Bid( + vault: StringPublicKey, + safetyDepositTokenStore: StringPublicKey, + tokenAccount: StringPublicKey, + safetyDeposit: StringPublicKey, + bidder: StringPublicKey, + payer: StringPublicKey, + metadata: StringPublicKey, + masterEdition: StringPublicKey, + originalMint: StringPublicKey, + newMint: StringPublicKey, + edition: BN, + editionOffset: BN, + winIndex: BN, + instructions: TransactionInstruction[], +) { + const PROGRAM_IDS = programIds(); + const store = PROGRAM_IDS.store; + if (!store) { + throw new Error('Store not initialized'); + } + + const { auctionKey, auctionManagerKey } = await getAuctionKeys(vault); + + const { bidRedemption, bidMetadata } = await getBidderKeys( + auctionKey, + bidder, + ); + + const prizeTrackingTicket = await getPrizeTrackingTicket( + auctionManagerKey, + originalMint, + ); + + const safetyDepositConfig = await getSafetyDepositConfig( + auctionManagerKey, + safetyDeposit, + ); + + const newMetadata = await getMetadata(newMint); + const newEdition = await getEdition(newMint); + + const editionMarkPda = await getEditionMarkPda(originalMint, edition); + + const value = new RedeemPrintingV2BidArgs({ editionOffset, winIndex }); + const data = Buffer.from(serialize(SCHEMA, value)); + const extended = await getAuctionExtended({ + auctionProgramId: PROGRAM_IDS.auction, + resource: vault, + }); + const keys = [ + { + pubkey: toPublicKey(auctionManagerKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(safetyDepositTokenStore), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(tokenAccount), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(bidRedemption), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(safetyDeposit), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(vault), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(safetyDepositConfig), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(auctionKey), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(bidMetadata), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(bidder), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(payer), + isSigner: true, + isWritable: true, + }, + { + pubkey: PROGRAM_IDS.token, + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(PROGRAM_IDS.vault), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(PROGRAM_IDS.metadata), + isSigner: false, + isWritable: false, + }, + { + pubkey: store, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(prizeTrackingTicket), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(newMetadata), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(newEdition), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(masterEdition), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(newMint), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(editionMarkPda), + isSigner: false, + isWritable: true, + }, + { + // Mint authority (this) is going to be the payer since the bidder + // may not be signer hre - we may be redeeming for someone else (permissionless) + // and during the txn, mint authority is removed from us and given to master edition. + // The ATA account is already owned by bidder by default. No signing needed + pubkey: toPublicKey(payer), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(metadata), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(extended), + isSigner: false, + isWritable: false, + }, + ]; + + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(PROGRAM_IDS.metaplex), + data, + }), + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/setAuctionCache.ts b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/setAuctionCache.ts new file mode 100644 index 0000000..05c1973 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/setAuctionCache.ts @@ -0,0 +1,88 @@ +import { + SYSVAR_CLOCK_PUBKEY, + SYSVAR_RENT_PUBKEY, + TransactionInstruction, +} from '@solana/web3.js'; +import BN from 'bn.js'; +import { serialize } from 'borsh'; + +import { SCHEMA, SetAuctionCacheArgs } from '.'; +import { programIds, StringPublicKey, toPublicKey } from '../../utils'; + +export async function setAuctionCache( + auctionCache: StringPublicKey, + payer: StringPublicKey, + auction: StringPublicKey, + safetyDepositBox: StringPublicKey, + auctionManager: StringPublicKey, + page: BN, + instructions: TransactionInstruction[], +) { + const PROGRAM_IDS = programIds(); + const store = PROGRAM_IDS.store; + if (!store) { + throw new Error('Store not initialized'); + } + + const value = new SetAuctionCacheArgs(); + const data = Buffer.from(serialize(SCHEMA, value)); + + const keys = [ + { + pubkey: toPublicKey(auctionCache), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(payer), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(auction), + isSigner: false, + isWritable: false, + }, + + { + pubkey: toPublicKey(safetyDepositBox), + isSigner: false, + isWritable: false, + }, + + { + pubkey: toPublicKey(auctionManager), + isSigner: false, + isWritable: false, + }, + + { + pubkey: toPublicKey(store), + isSigner: false, + isWritable: false, + }, + { + pubkey: PROGRAM_IDS.system, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_CLOCK_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(PROGRAM_IDS.metaplex), + data, + }), + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/setStore.ts b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/setStore.ts new file mode 100644 index 0000000..b381683 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/setStore.ts @@ -0,0 +1,73 @@ +import { SYSVAR_RENT_PUBKEY, TransactionInstruction } from '@solana/web3.js'; +import { serialize } from 'borsh'; + +import { SCHEMA, SetStoreArgs } from '.'; +import { programIds, StringPublicKey, toPublicKey } from '../../utils'; + +export async function setStore( + isPublic: boolean, + admin: StringPublicKey, + payer: StringPublicKey, + instructions: TransactionInstruction[], +) { + const PROGRAM_IDS = programIds(); + const store = PROGRAM_IDS.store; + if (!store) { + throw new Error('Store not initialized'); + } + + const value = new SetStoreArgs({ public: isPublic }); + const data = Buffer.from(serialize(SCHEMA, value)); + + const keys = [ + { + pubkey: toPublicKey(store), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(admin), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(payer), + isSigner: true, + isWritable: false, + }, + { pubkey: PROGRAM_IDS.token, isSigner: false, isWritable: false }, + { + pubkey: toPublicKey(PROGRAM_IDS.vault), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(PROGRAM_IDS.metadata), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(PROGRAM_IDS.auction), + isSigner: false, + isWritable: false, + }, + { + pubkey: PROGRAM_IDS.system, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(PROGRAM_IDS.metaplex), + data, + }), + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/setStoreIndex.ts b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/setStoreIndex.ts new file mode 100644 index 0000000..d203e17 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/setStoreIndex.ts @@ -0,0 +1,87 @@ +import { + SYSVAR_CLOCK_PUBKEY, + SYSVAR_RENT_PUBKEY, + TransactionInstruction, +} from '@solana/web3.js'; +import BN from 'bn.js'; +import { serialize } from 'borsh'; + +import { SCHEMA, SetStoreIndexArgs } from '.'; +import { programIds, StringPublicKey, toPublicKey } from '../../utils'; + +export async function setStoreIndex( + storeIndex: StringPublicKey, + auctionCache: StringPublicKey, + payer: StringPublicKey, + page: BN, + offset: BN, + instructions: TransactionInstruction[], + belowCache?: StringPublicKey, + aboveCache?: StringPublicKey, +) { + const PROGRAM_IDS = programIds(); + const store = PROGRAM_IDS.store; + if (!store) { + throw new Error('Store not initialized'); + } + + const value = new SetStoreIndexArgs({ page, offset }); + const data = Buffer.from(serialize(SCHEMA, value)); + + const keys = [ + { + pubkey: toPublicKey(storeIndex), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(payer), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(auctionCache), + isSigner: false, + isWritable: false, + }, + + { + pubkey: toPublicKey(store), + isSigner: false, + isWritable: false, + }, + { + pubkey: PROGRAM_IDS.system, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + + if (aboveCache) { + keys.push({ + pubkey: toPublicKey(aboveCache), + isSigner: false, + isWritable: false, + }); + } + + if (belowCache) { + keys.push({ + pubkey: toPublicKey(belowCache), + isSigner: false, + isWritable: false, + }); + } + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(PROGRAM_IDS.metaplex), + data, + }), + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/setWhitelistedCreator.ts b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/setWhitelistedCreator.ts new file mode 100644 index 0000000..1f9768d --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/setWhitelistedCreator.ts @@ -0,0 +1,70 @@ +import { SYSVAR_RENT_PUBKEY, TransactionInstruction } from '@solana/web3.js'; +import { serialize } from 'borsh'; + +import { getWhitelistedCreator, SCHEMA, SetWhitelistedCreatorArgs } from '.'; +import { programIds, StringPublicKey, toPublicKey } from '../../utils'; + +export async function setWhitelistedCreator( + creator: StringPublicKey, + activated: boolean, + admin: StringPublicKey, + payer: StringPublicKey, + instructions: TransactionInstruction[], +) { + const PROGRAM_IDS = programIds(); + const store = PROGRAM_IDS.store; + if (!store) { + throw new Error('Store not initialized'); + } + + const whitelistedCreatorPDAKey = await getWhitelistedCreator(creator); + + const value = new SetWhitelistedCreatorArgs({ activated }); + const data = Buffer.from(serialize(SCHEMA, value)); + + const keys = [ + { + pubkey: toPublicKey(whitelistedCreatorPDAKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(admin), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(payer), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(creator), + isSigner: false, + isWritable: false, + }, + { + pubkey: store, + isSigner: false, + isWritable: false, + }, + { + pubkey: PROGRAM_IDS.system, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(PROGRAM_IDS.metaplex), + data, + }), + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/startAuction.ts b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/startAuction.ts new file mode 100644 index 0000000..9e75802 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/startAuction.ts @@ -0,0 +1,64 @@ +import { SYSVAR_CLOCK_PUBKEY, TransactionInstruction } from '@solana/web3.js'; +import { serialize } from 'borsh'; + +import { getAuctionKeys, SCHEMA, StartAuctionArgs } from '.'; +import { programIds, StringPublicKey, toPublicKey } from '../../utils'; + +export async function startAuction( + vault: StringPublicKey, + auctionManagerAuthority: StringPublicKey, + instructions: TransactionInstruction[], +) { + const PROGRAM_IDS = programIds(); + const store = PROGRAM_IDS.store; + if (!store) { + throw new Error('Store not initialized'); + } + + const { auctionKey, auctionManagerKey } = await getAuctionKeys(vault); + + const value = new StartAuctionArgs(); + const data = Buffer.from(serialize(SCHEMA, value)); + + const keys = [ + { + pubkey: toPublicKey(auctionManagerKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(auctionKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(auctionManagerAuthority), + isSigner: true, + isWritable: false, + }, + { + pubkey: store, + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(PROGRAM_IDS.auction), + isSigner: false, + isWritable: false, + }, + + { + pubkey: SYSVAR_CLOCK_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(PROGRAM_IDS.metaplex), + data, + }), + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/validateSafetyDepositBoxV2.ts b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/validateSafetyDepositBoxV2.ts new file mode 100644 index 0000000..d671435 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/validateSafetyDepositBoxV2.ts @@ -0,0 +1,156 @@ +import { + SystemProgram, + SYSVAR_RENT_PUBKEY, + TransactionInstruction, +} from '@solana/web3.js'; +import { serialize } from 'borsh'; + +import { + getAuctionKeys, + getAuctionWinnerTokenTypeTracker, + getOriginalAuthority, + getSafetyDepositConfig, + SafetyDepositConfig, + SCHEMA, + ValidateSafetyDepositBoxV2Args, +} from '.'; +import { programIds, toPublicKey, StringPublicKey } from '../../utils'; + +export async function validateSafetyDepositBoxV2( + vault: StringPublicKey, + metadata: StringPublicKey, + safetyDepositBox: StringPublicKey, + safetyDepositTokenStore: StringPublicKey, + tokenMint: StringPublicKey, + auctionManagerAuthority: StringPublicKey, + metadataAuthority: StringPublicKey, + payer: StringPublicKey, + instructions: TransactionInstruction[], + edition: StringPublicKey, + whitelistedCreator: StringPublicKey | undefined, + store: StringPublicKey, + safetyDepositConfig: SafetyDepositConfig, +) { + const PROGRAM_IDS = programIds(); + + const { auctionKey, auctionManagerKey } = await getAuctionKeys(vault); + + const originalAuthorityLookup = await getOriginalAuthority( + auctionKey, + metadata, + ); + + const safetyDepositConfigKey = await getSafetyDepositConfig( + auctionManagerKey, + safetyDepositBox, + ); + + const tokenTracker = await getAuctionWinnerTokenTypeTracker( + auctionManagerKey, + ); + + const value = new ValidateSafetyDepositBoxV2Args(safetyDepositConfig); + const data = Buffer.from(serialize(SCHEMA, value)); + + const keys = [ + { + pubkey: toPublicKey(safetyDepositConfigKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(tokenTracker), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(auctionManagerKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(metadata), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(originalAuthorityLookup), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(whitelistedCreator || SystemProgram.programId), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(store), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(safetyDepositBox), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(safetyDepositTokenStore), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(tokenMint), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(edition), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(vault), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(auctionManagerAuthority), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(metadataAuthority), + isSigner: true, + isWritable: false, + }, + + { + pubkey: toPublicKey(payer), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(PROGRAM_IDS.metadata), + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(PROGRAM_IDS.metaplex), + data, + }), + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/withdrawMasterEdition.ts b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/withdrawMasterEdition.ts new file mode 100644 index 0000000..9c6053e --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/models/metaplex/withdrawMasterEdition.ts @@ -0,0 +1,155 @@ +import { SYSVAR_RENT_PUBKEY, TransactionInstruction } from '@solana/web3.js'; +import { serialize } from 'borsh'; + +import { + getAuctionKeys, + WithdrawMasterEditionArgs, + SCHEMA, + getPrizeTrackingTicket, + getSafetyDepositConfig, +} from '.'; +import { AUCTION_PREFIX, EXTENDED, VAULT_PREFIX } from '../../actions'; +import { + findProgramAddress, + programIds, + toPublicKey, + StringPublicKey, +} from '../../utils'; + +export async function withdrawMasterEdition( + vault: StringPublicKey, + safetyDepositTokenStore: StringPublicKey, + destination: StringPublicKey, + safetyDeposit: StringPublicKey, + fractionMint: StringPublicKey, + mint: StringPublicKey, + instructions: TransactionInstruction[], +) { + const PROGRAM_IDS = programIds(); + const store = PROGRAM_IDS.store; + if (!store) { + throw new Error('Store not initialized'); + } + + const { auctionKey, auctionManagerKey } = await getAuctionKeys(vault); + + const prizeTrackingTicket = await getPrizeTrackingTicket( + auctionManagerKey, + mint, + ); + const vaultAuthority = ( + await findProgramAddress( + [ + Buffer.from(VAULT_PREFIX), + toPublicKey(PROGRAM_IDS.vault).toBuffer(), + toPublicKey(vault).toBuffer(), + ], + toPublicKey(PROGRAM_IDS.vault), + ) + )[0]; + + const auctionExtended = ( + await findProgramAddress( + [ + Buffer.from(AUCTION_PREFIX), + toPublicKey(PROGRAM_IDS.auction).toBuffer(), + toPublicKey(vault).toBuffer(), + Buffer.from(EXTENDED), + ], + toPublicKey(PROGRAM_IDS.auction), + ) + )[0]; + + const safetyDepositConfig = await getSafetyDepositConfig( + auctionManagerKey, + safetyDeposit, + ); + + const value = new WithdrawMasterEditionArgs(); + const data = Buffer.from(serialize(SCHEMA, value)); + const keys = [ + { + pubkey: toPublicKey(auctionManagerKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(safetyDepositTokenStore), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(destination), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(safetyDeposit), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(vault), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(fractionMint), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(prizeTrackingTicket), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(vaultAuthority), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(auctionKey), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(auctionExtended), + isSigner: false, + isWritable: false, + }, + { + pubkey: PROGRAM_IDS.token, + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(PROGRAM_IDS.vault), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(store), + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(safetyDepositConfig), + isSigner: false, + isWritable: false, + }, + ]; + + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(PROGRAM_IDS.metaplex), + data, + }), + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/styles.less b/CandyMachine-Storefront/store/js/packages/common/src/styles.less new file mode 100644 index 0000000..d0e235e --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/styles.less @@ -0,0 +1,6 @@ +@import './contexts/wallet.less'; +@import './components/AppBar/style.less'; +@import './components/ActionConfirmation/style.less'; +@import './components/Identicon/style.less'; +@import './components/MetaplexModal/index.less'; +@import './components/CurrentUserBadge/styles.less'; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/types/buffer-layout.d.ts b/CandyMachine-Storefront/store/js/packages/common/src/types/buffer-layout.d.ts new file mode 100644 index 0000000..32e44d0 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/types/buffer-layout.d.ts @@ -0,0 +1,9 @@ +declare module 'buffer-layout' { + const bl: any; + export = bl; +} + +declare module 'jazzicon' { + const jazzicon: any; + export = jazzicon; +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/types/jazzicon.d.ts b/CandyMachine-Storefront/store/js/packages/common/src/types/jazzicon.d.ts new file mode 100644 index 0000000..3c462ee --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/types/jazzicon.d.ts @@ -0,0 +1,4 @@ +declare module 'jazzicon' { + const jazzicon: any; + export = jazzicon; +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/types/u64.d.ts b/CandyMachine-Storefront/store/js/packages/common/src/types/u64.d.ts new file mode 100644 index 0000000..6c349cf --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/types/u64.d.ts @@ -0,0 +1,6 @@ +import BN from 'bn.js'; + +export class u64 extends BN { + toBuffer(): Buffer; + static fromBuffer(buffer: Buffer): u64; +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/utils/borsh.ts b/CandyMachine-Storefront/store/js/packages/common/src/utils/borsh.ts new file mode 100644 index 0000000..2e540cc --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/utils/borsh.ts @@ -0,0 +1,32 @@ +import { PublicKey } from '@solana/web3.js'; +import { BinaryReader, BinaryWriter } from 'borsh'; +import base58 from 'bs58'; +import { StringPublicKey } from './ids'; + +export const extendBorsh = () => { + (BinaryReader.prototype as any).readPubkey = function () { + const reader = this as unknown as BinaryReader; + const array = reader.readFixedArray(32); + return new PublicKey(array); + }; + + (BinaryWriter.prototype as any).writePubkey = function (value: PublicKey) { + const writer = this as unknown as BinaryWriter; + writer.writeFixedArray(value.toBuffer()); + }; + + (BinaryReader.prototype as any).readPubkeyAsString = function () { + const reader = this as unknown as BinaryReader; + const array = reader.readFixedArray(32); + return base58.encode(array) as StringPublicKey; + }; + + (BinaryWriter.prototype as any).writePubkeyAsString = function ( + value: StringPublicKey, + ) { + const writer = this as unknown as BinaryWriter; + writer.writeFixedArray(base58.decode(value)); + }; +}; + +extendBorsh(); diff --git a/CandyMachine-Storefront/store/js/packages/common/src/utils/createPipelineExecutor.ts b/CandyMachine-Storefront/store/js/packages/common/src/utils/createPipelineExecutor.ts new file mode 100644 index 0000000..44bc937 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/utils/createPipelineExecutor.ts @@ -0,0 +1,54 @@ +export async function createPipelineExecutor( + data: IterableIterator, + executor: (d: T) => void, + { + delay = 0, + jobsCount = 1, + sequence = 1, + }: { + delay?: number; + jobsCount?: number; + sequence?: number; + } = {}, +) { + function execute(iter: IteratorResult) { + executor(iter.value); + } + + async function next() { + if (sequence <= 1) { + const iter = data.next(); + if (iter.done) { + return; + } + await execute(iter); + } else { + const promises: any[] = []; + let isDone = false; + for (let i = 0; i < sequence; i++) { + const iter = data.next(); + if (!iter.done) { + promises.push(execute(iter)); + } else { + isDone = true; + break; + } + } + await Promise.all(promises); + if (isDone) { + return; + } + } + if (delay > 0) { + await new Promise(resolve => setTimeout(resolve, delay)); + } else { + await Promise.resolve(); + } + await next(); + } + const result = new Array>(jobsCount); + for (let i = 0; i < jobsCount; i++) { + result[i] = next(); + } + await Promise.all(result); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/utils/eventEmitter.ts b/CandyMachine-Storefront/store/js/packages/common/src/utils/eventEmitter.ts new file mode 100644 index 0000000..6d111ce --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/utils/eventEmitter.ts @@ -0,0 +1,67 @@ +import { EventEmitter as Emitter } from 'eventemitter3'; + +export class CacheUpdateEvent { + static type = 'CacheUpdate'; + id: string; + parser: any; + isNew: boolean; + isActive: boolean; + constructor(id: string, isNew: boolean, parser: any, isActive: boolean) { + this.id = id; + this.parser = parser; + this.isNew = isNew; + this.isActive = isActive; + } +} + +export class CacheDeleteEvent { + static type = 'CacheUpdate'; + id: string; + constructor(id: string) { + this.id = id; + } +} + +export class MarketUpdateEvent { + static type = 'MarketUpdate'; + ids: Set; + constructor(ids: Set) { + this.ids = ids; + } +} + +export class EventEmitter { + private emitter = new Emitter(); + + onMarket(callback: (args: MarketUpdateEvent) => void) { + this.emitter.on(MarketUpdateEvent.type, callback); + + return () => this.emitter.removeListener(MarketUpdateEvent.type, callback); + } + + onCache(callback: (args: CacheUpdateEvent) => void) { + this.emitter.on(CacheUpdateEvent.type, callback); + + return () => this.emitter.removeListener(CacheUpdateEvent.type, callback); + } + + raiseMarketUpdated(ids: Set) { + this.emitter.emit(MarketUpdateEvent.type, new MarketUpdateEvent(ids)); + } + + raiseCacheUpdated( + id: string, + isNew: boolean, + parser: any, + isActive: boolean, + ) { + this.emitter.emit( + CacheUpdateEvent.type, + new CacheUpdateEvent(id, isNew, parser, isActive), + ); + } + + raiseCacheDeleted(id: string) { + this.emitter.emit(CacheDeleteEvent.type, new CacheDeleteEvent(id)); + } +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/utils/ids.ts b/CandyMachine-Storefront/store/js/packages/common/src/utils/ids.ts new file mode 100644 index 0000000..6f53b00 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/utils/ids.ts @@ -0,0 +1,80 @@ +import { PublicKey, AccountInfo } from '@solana/web3.js'; + +export type StringPublicKey = string; + +export class LazyAccountInfoProxy { + executable: boolean = false; + owner: StringPublicKey = ''; + lamports: number = 0; + + get data() { + // + return undefined as unknown as T; + } +} + +export interface LazyAccountInfo { + executable: boolean; + owner: StringPublicKey; + lamports: number; + data: [string, string]; +} + +const PubKeysInternedMap = new Map(); + +export const toPublicKey = (key: string | PublicKey) => { + if (typeof key !== 'string') { + return key; + } + + let result = PubKeysInternedMap.get(key); + if (!result) { + result = new PublicKey(key); + PubKeysInternedMap.set(key, result); + } + + return result; +}; + +export const pubkeyToString = (key: PublicKey | null | string = '') => { + return typeof key === 'string' ? key : key?.toBase58() || ''; +}; + +export interface PublicKeyStringAndAccount { + pubkey: string; + account: AccountInfo; +} + +export const WRAPPED_SOL_MINT = new PublicKey( + 'So11111111111111111111111111111111111111112', +); + +export const TOKEN_PROGRAM_ID = new PublicKey( + 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA', +); + +export const SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID = new PublicKey( + 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL', +); + +export const BPF_UPGRADE_LOADER_ID = new PublicKey( + 'BPFLoaderUpgradeab1e11111111111111111111111', +); + +export const MEMO_ID = new PublicKey( + 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr', +); + +export const METADATA_PROGRAM_ID = + 'metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s' as StringPublicKey; + +export const VAULT_ID = + 'vau1zxA2LbssAUEF7Gpw91zMM1LvXrvpzJtmZ58rPsn' as StringPublicKey; + +export const AUCTION_ID = + 'auctxRXPeJoc4817jDhf4HbjnhEcr1cCXenosMhK5R8' as StringPublicKey; + +export const METAPLEX_ID = + 'p1exdMJcjVao65QdewkaZRUnU6VPSXhus9n2GzWfh98' as StringPublicKey; + +export const SYSTEM = new PublicKey('11111111111111111111111111111111'); diff --git a/CandyMachine-Storefront/store/js/packages/common/src/utils/index.tsx b/CandyMachine-Storefront/store/js/packages/common/src/utils/index.tsx new file mode 100644 index 0000000..c01f409 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/utils/index.tsx @@ -0,0 +1,12 @@ +export * from './eventEmitter'; +export * from './ids'; +export * from './programIds'; +export * as Layout from './layout'; +export * from './notifications'; +export * from './utils'; +export * from './useLocalStorage'; +export * from './strings'; +export * as shortvec from './shortvec'; +export * from './isValidHttpUrl'; +export * from './borsh'; +export * from './createPipelineExecutor'; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/utils/isValidHttpUrl.ts b/CandyMachine-Storefront/store/js/packages/common/src/utils/isValidHttpUrl.ts new file mode 100644 index 0000000..876a28d --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/utils/isValidHttpUrl.ts @@ -0,0 +1,7 @@ +export function isValidHttpUrl(text: string) { + if (text.startsWith('http:') || text.startsWith('https:')) { + return true; + } + + return false; +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/utils/layout.ts b/CandyMachine-Storefront/store/js/packages/common/src/utils/layout.ts new file mode 100644 index 0000000..38931a4 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/utils/layout.ts @@ -0,0 +1,121 @@ +import { PublicKey } from '@solana/web3.js'; +import BN from 'bn.js'; +import * as BufferLayout from 'buffer-layout'; + +/** + * Layout for a public key + */ +export const publicKey = (property = 'publicKey'): unknown => { + const publicKeyLayout = BufferLayout.blob(32, property); + + const _decode = publicKeyLayout.decode.bind(publicKeyLayout); + const _encode = publicKeyLayout.encode.bind(publicKeyLayout); + + publicKeyLayout.decode = (buffer: Buffer, offset: number) => { + const data = _decode(buffer, offset); + return new PublicKey(data); + }; + + publicKeyLayout.encode = (key: PublicKey, buffer: Buffer, offset: number) => { + return _encode(key.toBuffer(), buffer, offset); + }; + + return publicKeyLayout; +}; + +/** + * Layout for a 64bit unsigned value + */ +export const uint64 = (property = 'uint64'): unknown => { + const layout = BufferLayout.blob(8, property); + + const _decode = layout.decode.bind(layout); + const _encode = layout.encode.bind(layout); + + layout.decode = (buffer: Buffer, offset: number) => { + const data = _decode(buffer, offset); + return new BN( + [...data] + .reverse() + .map(i => `00${i.toString(16)}`.slice(-2)) + .join(''), + 16, + ); + }; + + layout.encode = (num: BN, buffer: Buffer, offset: number) => { + const a = num.toArray().reverse(); + let b = Buffer.from(a); + if (b.length !== 8) { + const zeroPad = Buffer.alloc(8); + b.copy(zeroPad); + b = zeroPad; + } + return _encode(b, buffer, offset); + }; + + return layout; +}; + +// TODO: wrap in BN (what about decimals?) +export const uint128 = (property = 'uint128'): unknown => { + const layout = BufferLayout.blob(16, property); + + const _decode = layout.decode.bind(layout); + const _encode = layout.encode.bind(layout); + + layout.decode = (buffer: Buffer, offset: number) => { + const data = _decode(buffer, offset); + return new BN( + [...data] + .reverse() + .map(i => `00${i.toString(16)}`.slice(-2)) + .join(''), + 16, + ); + }; + + layout.encode = (num: BN, buffer: Buffer, offset: number) => { + const a = num.toArray().reverse(); + let b = Buffer.from(a); + if (b.length !== 16) { + const zeroPad = Buffer.alloc(16); + b.copy(zeroPad); + b = zeroPad; + } + + return _encode(b, buffer, offset); + }; + + return layout; +}; + +/** + * Layout for a Rust String type + */ +export const rustString = (property = 'string'): unknown => { + const rsl = BufferLayout.struct( + [ + BufferLayout.u32('length'), + BufferLayout.u32('lengthPadding'), + BufferLayout.blob(BufferLayout.offset(BufferLayout.u32(), -8), 'chars'), + ], + property, + ); + const _decode = rsl.decode.bind(rsl); + const _encode = rsl.encode.bind(rsl); + + rsl.decode = (buffer: Buffer, offset: number) => { + const data = _decode(buffer, offset); + return data.chars.toString('utf8'); + }; + + rsl.encode = (str: string, buffer: Buffer, offset: number) => { + const data = { + chars: Buffer.from(str, 'utf8'), + }; + return _encode(data, buffer, offset); + }; + + return rsl; +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/utils/notifications.tsx b/CandyMachine-Storefront/store/js/packages/common/src/utils/notifications.tsx new file mode 100644 index 0000000..a6d2ad8 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/utils/notifications.tsx @@ -0,0 +1,33 @@ +import React from 'react'; +import { notification } from 'antd'; +// import Link from '../components/Link'; + +export function notify({ + message = '', + description = undefined as any, + txid = '', + type = 'info', + placement = 'bottomLeft', +}) { + if (txid) { + // + // View transaction {txid.slice(0, 8)}...{txid.slice(txid.length - 8)} + // + + description = <>; + } + (notification as any)[type]({ + message: {message}, + description: ( + {description} + ), + placement, + style: { + backgroundColor: 'white', + }, + }); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/utils/programIds.ts b/CandyMachine-Storefront/store/js/packages/common/src/utils/programIds.ts new file mode 100644 index 0000000..97102bd --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/utils/programIds.ts @@ -0,0 +1,55 @@ +import { PublicKey } from '@solana/web3.js'; +import { findProgramAddress } from '../utils'; + +import { + METADATA_PROGRAM_ID, + TOKEN_PROGRAM_ID, + SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID, + METAPLEX_ID, + BPF_UPGRADE_LOADER_ID, + SYSTEM, + MEMO_ID, + VAULT_ID, + AUCTION_ID, + toPublicKey, +} from './ids'; + +export const getStoreID = async (storeOwnerAddress?: string) => { + if (!storeOwnerAddress) { + return undefined; + } + + console.log('Store owner', storeOwnerAddress, METAPLEX_ID); + const programs = await findProgramAddress( + [ + Buffer.from('metaplex'), + toPublicKey(METAPLEX_ID).toBuffer(), + toPublicKey(storeOwnerAddress).toBuffer(), + ], + toPublicKey(METAPLEX_ID), + ); + const storeAddress = programs[0]; + + return storeAddress; +}; + +export const setProgramIds = async (store?: string) => { + STORE = store ? toPublicKey(store) : undefined; +}; + +let STORE: PublicKey | undefined; + +export const programIds = () => { + return { + token: TOKEN_PROGRAM_ID, + associatedToken: SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID, + bpf_upgrade_loader: BPF_UPGRADE_LOADER_ID, + system: SYSTEM, + metadata: METADATA_PROGRAM_ID, + memo: MEMO_ID, + vault: VAULT_ID, + auction: AUCTION_ID, + metaplex: METAPLEX_ID, + store: STORE, + }; +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/utils/shortvec.ts b/CandyMachine-Storefront/store/js/packages/common/src/utils/shortvec.ts new file mode 100644 index 0000000..077966e --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/utils/shortvec.ts @@ -0,0 +1,30 @@ +export function decodeLength(bytes: Array): number { + let len = 0; + let size = 0; + for (;;) { + const elem = bytes.shift(); + //@ts-ignore + len |= (elem & 0x7f) << (size * 7); + size += 1; + //@ts-ignore + if ((elem & 0x80) === 0) { + break; + } + } + return len; +} + +export function encodeLength(bytes: Array, len: number) { + let rem_len = len; + for (;;) { + let elem = rem_len & 0x7f; + rem_len >>= 7; + if (rem_len === 0) { + bytes.push(elem); + break; + } else { + elem |= 0x80; + bytes.push(elem); + } + } +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/utils/strings.ts b/CandyMachine-Storefront/store/js/packages/common/src/utils/strings.ts new file mode 100644 index 0000000..c0272a4 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/utils/strings.ts @@ -0,0 +1,74 @@ +// credit https://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array +export function toUTF8Array(str: string) { + const utf8: number[] = []; + for (let i = 0; i < str.length; i++) { + let charcode = str.charCodeAt(i); + if (charcode < 0x80) utf8.push(charcode); + else if (charcode < 0x800) { + utf8.push(0xc0 | (charcode >> 6), 0x80 | (charcode & 0x3f)); + } else if (charcode < 0xd800 || charcode >= 0xe000) { + utf8.push( + 0xe0 | (charcode >> 12), + 0x80 | ((charcode >> 6) & 0x3f), + 0x80 | (charcode & 0x3f), + ); + } + // surrogate pair + else { + i++; + // UTF-16 encodes 0x10000-0x10FFFF by + // subtracting 0x10000 and splitting the + // 20 bits of 0x0-0xFFFFF into two halves + charcode = + 0x10000 + (((charcode & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff)); + utf8.push( + 0xf0 | (charcode >> 18), + 0x80 | ((charcode >> 12) & 0x3f), + 0x80 | ((charcode >> 6) & 0x3f), + 0x80 | (charcode & 0x3f), + ); + } + } + return utf8; +} + +//courtesy https://gist.github.com/joni/3760795 +export function fromUTF8Array(data: number[]) { + // array of bytes + let str = '', + i; + + for (i = 0; i < data.length; i++) { + const value = data[i]; + + if (value < 0x80) { + str += String.fromCharCode(value); + } else if (value > 0xbf && value < 0xe0) { + str += String.fromCharCode(((value & 0x1f) << 6) | (data[i + 1] & 0x3f)); + i += 1; + } else if (value > 0xdf && value < 0xf0) { + str += String.fromCharCode( + ((value & 0x0f) << 12) | + ((data[i + 1] & 0x3f) << 6) | + (data[i + 2] & 0x3f), + ); + i += 2; + } else { + // surrogate pair + const charCode = + (((value & 0x07) << 18) | + ((data[i + 1] & 0x3f) << 12) | + ((data[i + 2] & 0x3f) << 6) | + (data[i + 3] & 0x3f)) - + 0x010000; + + str += String.fromCharCode( + (charCode >> 10) | 0xd800, + (charCode & 0x03ff) | 0xdc00, + ); + i += 3; + } + } + + return str; +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/utils/useLocalStorage.ts b/CandyMachine-Storefront/store/js/packages/common/src/utils/useLocalStorage.ts new file mode 100644 index 0000000..e030fce --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/utils/useLocalStorage.ts @@ -0,0 +1,32 @@ +type UseStorageReturnValue = { + getItem: (key: string) => string; + setItem: (key: string, value: string) => boolean; + removeItem: (key: string) => void; +}; + +export const useLocalStorage = (): UseStorageReturnValue => { + const isBrowser: boolean = ((): boolean => typeof window !== 'undefined')(); + + const getItem = (key: string): string => { + return isBrowser ? window.localStorage[key] : ''; + }; + + const setItem = (key: string, value: string): boolean => { + if (isBrowser) { + window.localStorage.setItem(key, value); + return true; + } + + return false; + }; + + const removeItem = (key: string): void => { + window.localStorage.removeItem(key); + }; + + return { + getItem, + setItem, + removeItem, + }; +}; diff --git a/CandyMachine-Storefront/store/js/packages/common/src/utils/utils.ts b/CandyMachine-Storefront/store/js/packages/common/src/utils/utils.ts new file mode 100644 index 0000000..e03c887 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/src/utils/utils.ts @@ -0,0 +1,300 @@ +import { useCallback, useState } from 'react'; +import { MintInfo } from '@solana/spl-token'; + +import { TokenAccount } from './../models'; +import { PublicKey } from '@solana/web3.js'; +import BN from 'bn.js'; +import { WAD, ZERO } from '../constants'; +import { TokenInfo } from '@solana/spl-token-registry'; +import { useLocalStorage } from './useLocalStorage'; + +export type KnownTokenMap = Map; + +export const formatPriceNumber = new Intl.NumberFormat('en-US', { + style: 'decimal', + minimumFractionDigits: 2, + maximumFractionDigits: 8, +}); + +export function useLocalStorageState(key: string, defaultState?: string) { + const localStorage = useLocalStorage(); + const [state, setState] = useState(() => { + // NOTE: Not sure if this is ok + const storedState = localStorage.getItem(key); + if (storedState) { + return JSON.parse(storedState); + } + return defaultState; + }); + + const setLocalStorageState = useCallback( + newState => { + const changed = state !== newState; + if (!changed) { + return; + } + setState(newState); + if (newState === null) { + localStorage.removeItem(key); + } else { + try { + localStorage.setItem(key, JSON.stringify(newState)); + } catch { + // ignore + } + } + }, + [state, key], + ); + + return [state, setLocalStorageState]; +} + +export const findProgramAddress = async ( + seeds: (Buffer | Uint8Array)[], + programId: PublicKey, +) => { + const localStorage = useLocalStorage(); + const key = + 'pda-' + + seeds.reduce((agg, item) => agg + item.toString('hex'), '') + + programId.toString(); + const cached = localStorage.getItem(key); + if (cached) { + const value = JSON.parse(cached); + + return [value.key, parseInt(value.nonce)] as [string, number]; + } + + const result = await PublicKey.findProgramAddress(seeds, programId); + + try { + localStorage.setItem( + key, + JSON.stringify({ + key: result[0].toBase58(), + nonce: result[1], + }), + ); + } catch { + // ignore + } + + return [result[0].toBase58(), result[1]] as [string, number]; +}; + +// shorten the checksummed version of the input address to have 4 characters at start and end +export function shortenAddress(address: string, chars = 4): string { + return `${address.slice(0, chars)}...${address.slice(-chars)}`; +} + +export function getTokenName( + map: KnownTokenMap, + mint?: string | PublicKey, + shorten = true, +): string { + const mintAddress = typeof mint === 'string' ? mint : mint?.toBase58(); + + if (!mintAddress) { + return 'N/A'; + } + + const knownSymbol = map.get(mintAddress)?.symbol; + if (knownSymbol) { + return knownSymbol; + } + + return shorten ? `${mintAddress.substring(0, 5)}...` : mintAddress; +} +export function getVerboseTokenName( + map: KnownTokenMap, + mint?: string | PublicKey, + shorten = true, +): string { + const mintAddress = typeof mint === 'string' ? mint : mint?.toBase58(); + + if (!mintAddress) { + return 'N/A'; + } + + const knownName = map.get(mintAddress)?.name; + if (knownName) { + return knownName; + } + + return shorten ? `${mintAddress.substring(0, 5)}...` : mintAddress; +} + +export function getTokenByName(tokenMap: KnownTokenMap, name: string) { + let token: TokenInfo | null = null; + for (const val of tokenMap.values()) { + if (val.symbol === name) { + token = val; + break; + } + } + return token; +} + +export function getTokenIcon( + map: KnownTokenMap, + mintAddress?: string | PublicKey, +): string | undefined { + const address = + typeof mintAddress === 'string' ? mintAddress : mintAddress?.toBase58(); + if (!address) { + return; + } + + return map.get(address)?.logoURI; +} + +export function isKnownMint(map: KnownTokenMap, mintAddress: string) { + return !!map.get(mintAddress); +} + +export const STABLE_COINS = new Set(['USDC', 'wUSDC', 'USDT']); + +export function chunks(array: T[], size: number): T[][] { + return Array.apply( + 0, + new Array(Math.ceil(array.length / size)), + ).map((_, index) => array.slice(index * size, (index + 1) * size)); +} + +export function toLamports( + account?: TokenAccount | number, + mint?: MintInfo, +): number { + if (!account) { + return 0; + } + + const amount = + typeof account === 'number' ? account : account.info.amount?.toNumber(); + + const precision = Math.pow(10, mint?.decimals || 0); + return Math.floor(amount * precision); +} + +export function wadToLamports(amount?: BN): BN { + return amount?.div(WAD) || ZERO; +} + +export function fromLamports( + account?: TokenAccount | number | BN, + mint?: MintInfo, + rate: number = 1.0, +): number { + if (!account) { + return 0; + } + + const amount = Math.floor( + typeof account === 'number' + ? account + : BN.isBN(account) + ? account.toNumber() + : account.info.amount.toNumber(), + ); + + const precision = Math.pow(10, mint?.decimals || 9); + return (amount / precision) * rate; +} + +export const tryParseKey = (key: string): PublicKey | null => { + try { + return new PublicKey(key); + } catch (error) { + return null; + } +}; + +const SI_SYMBOL = ['', 'k', 'M', 'G', 'T', 'P', 'E'] as const; + +const abbreviateNumber = (number: number, precision: number) => { + const tier = (Math.log10(number) / 3) | 0; + let scaled = number; + const suffix = SI_SYMBOL[tier]; + if (tier !== 0) { + const scale = Math.pow(10, tier * 3); + scaled = number / scale; + } + + return scaled.toFixed(precision) + suffix; +}; + +export const formatAmount = ( + val: number, + precision: number = 2, + abbr: boolean = true, +) => (abbr ? abbreviateNumber(val, precision) : val.toFixed(precision)); + +export function formatTokenAmount( + account?: TokenAccount | number | BN, + mint?: MintInfo, + rate: number = 1.0, + prefix = '', + suffix = '', + precision = 2, + abbr = false, +): string { + if (!account) { + return ''; + } + + return `${[prefix]}${formatAmount( + fromLamports(account, mint, rate), + precision, + abbr, + )}${suffix}`; +} + +export const formatUSD = new Intl.NumberFormat('en-US', { + style: 'currency', + currency: 'USD', +}); + +const numberFormater = new Intl.NumberFormat('en-US', { + style: 'decimal', + minimumFractionDigits: 2, + maximumFractionDigits: 2, +}); + +export const formatNumber = { + format: (val?: number) => { + if (!val) { + return '--'; + } + + return numberFormater.format(val); + }, +}; + +export const formatPct = new Intl.NumberFormat('en-US', { + style: 'percent', + minimumFractionDigits: 2, + maximumFractionDigits: 2, +}); + +export function convert( + account?: TokenAccount | number, + mint?: MintInfo, + rate: number = 1.0, +): number { + if (!account) { + return 0; + } + + const amount = + typeof account === 'number' ? account : account.info.amount?.toNumber(); + + const precision = Math.pow(10, mint?.decimals || 0); + const result = (amount / precision) * rate; + + return result; +} + +export function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)); +} diff --git a/CandyMachine-Storefront/store/js/packages/common/src/wallet-adapters/torus/index.tsx b/CandyMachine-Storefront/store/js/packages/common/src/wallet-adapters/torus/index.tsx new file mode 100644 index 0000000..e69de29 diff --git a/CandyMachine-Storefront/store/js/packages/common/tsconfig.json b/CandyMachine-Storefront/store/js/packages/common/tsconfig.json new file mode 100644 index 0000000..4d65d0b --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/common/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es2019", + + "outDir": "./dist/lib", + "rootDir": "./src", + + "composite": true, + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "jsx": "react", + "strict": true, + "esModuleInterop": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "typeRoots": ["types", "../../types", "../../node_modules/@types"] + }, + "include": ["src/**/*"], + "exclude": ["src/**/*.test.ts", "**/node_modules"] +} diff --git a/CandyMachine-Storefront/store/js/packages/fair-launch/package.json b/CandyMachine-Storefront/store/js/packages/fair-launch/package.json new file mode 100644 index 0000000..24a0762 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/fair-launch/package.json @@ -0,0 +1,62 @@ +{ + "name": "candy-machine-mint", + "version": "0.1.0", + "private": true, + "dependencies": { + "@material-ui/core": "^4.12.3", + "@material-ui/icons": "^4.11.2", + "@material-ui/lab": "^4.0.0-alpha.60", + "@project-serum/anchor": "^0.14.0", + "@solana/spl-token": "^0.1.8", + "@solana/wallet-adapter-base": "^0.5.2", + "@solana/wallet-adapter-material-ui": "^0.8.3", + "@solana/wallet-adapter-react": "^0.9.1", + "@solana/wallet-adapter-react-ui": "^0.1.0", + "@solana/wallet-adapter-wallets": "^0.7.5", + "canvas-confetti": "^1.4.0", + "@solana/web3.js": "^1.24.1", + "@testing-library/jest-dom": "^5.11.4", + "@testing-library/react": "^11.1.0", + "@testing-library/user-event": "^12.1.10", + "@types/jest": "^26.0.15", + "@types/node": "^12.0.0", + "@types/react": "^17.0.0", + "@types/react-dom": "^17.0.0", + "react": "^17.0.2", + "react-countdown": "^2.3.2", + "react-dom": "^17.0.2", + "react-scripts": "4.0.3", + "styled-components": "^5.3.1", + "typescript": "^4.1.2", + "web-vitals": "^1.0.1" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject", + "deploy:gh": "gh-pages -d ./build/ --repo https://github.com/metaplex-foundation/metaplex -t true --branch gh-pages", + "deploy": "cross-env ASSET_PREFIX=/metaplex/ yarn build && yarn deploy:gh" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "devDependencies": { + "@types/styled-components": "^5.1.14" + } +} diff --git a/CandyMachine-Storefront/store/js/packages/fair-launch/public/favicon.ico b/CandyMachine-Storefront/store/js/packages/fair-launch/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a11777cc471a4344702741ab1c8a588998b1311a GIT binary patch literal 3870 zcma);c{J4h9>;%nil|2-o+rCuEF-(I%-F}ijC~o(k~HKAkr0)!FCj~d>`RtpD?8b; zXOC1OD!V*IsqUwzbMF1)-gEDD=A573Z-&G7^LoAC9|WO7Xc0Cx1g^Zu0u_SjAPB3vGa^W|sj)80f#V0@M_CAZTIO(t--xg= z!sii`1giyH7EKL_+Wi0ab<)&E_0KD!3Rp2^HNB*K2@PHCs4PWSA32*-^7d{9nH2_E zmC{C*N*)(vEF1_aMamw2A{ZH5aIDqiabnFdJ|y0%aS|64E$`s2ccV~3lR!u<){eS` z#^Mx6o(iP1Ix%4dv`t@!&Za-K@mTm#vadc{0aWDV*_%EiGK7qMC_(`exc>-$Gb9~W!w_^{*pYRm~G zBN{nA;cm^w$VWg1O^^<6vY`1XCD|s_zv*g*5&V#wv&s#h$xlUilPe4U@I&UXZbL z0)%9Uj&@yd03n;!7do+bfixH^FeZ-Ema}s;DQX2gY+7g0s(9;`8GyvPY1*vxiF&|w z>!vA~GA<~JUqH}d;DfBSi^IT*#lrzXl$fNpq0_T1tA+`A$1?(gLb?e#0>UELvljtQ zK+*74m0jn&)5yk8mLBv;=@}c{t0ztT<v;Avck$S6D`Z)^c0(jiwKhQsn|LDRY&w(Fmi91I7H6S;b0XM{e zXp0~(T@k_r-!jkLwd1_Vre^v$G4|kh4}=Gi?$AaJ)3I+^m|Zyj#*?Kp@w(lQdJZf4 z#|IJW5z+S^e9@(6hW6N~{pj8|NO*>1)E=%?nNUAkmv~OY&ZV;m-%?pQ_11)hAr0oAwILrlsGawpxx4D43J&K=n+p3WLnlDsQ$b(9+4 z?mO^hmV^F8MV{4Lx>(Q=aHhQ1){0d*(e&s%G=i5rq3;t{JC zmgbn5Nkl)t@fPH$v;af26lyhH!k+#}_&aBK4baYPbZy$5aFx4}ka&qxl z$=Rh$W;U)>-=S-0=?7FH9dUAd2(q#4TCAHky!$^~;Dz^j|8_wuKc*YzfdAht@Q&ror?91Dm!N03=4=O!a)I*0q~p0g$Fm$pmr$ zb;wD;STDIi$@M%y1>p&_>%?UP($15gou_ue1u0!4(%81;qcIW8NyxFEvXpiJ|H4wz z*mFT(qVx1FKufG11hByuX%lPk4t#WZ{>8ka2efjY`~;AL6vWyQKpJun2nRiZYDij$ zP>4jQXPaP$UC$yIVgGa)jDV;F0l^n(V=HMRB5)20V7&r$jmk{UUIe zVjKroK}JAbD>B`2cwNQ&GDLx8{pg`7hbA~grk|W6LgiZ`8y`{Iq0i>t!3p2}MS6S+ zO_ruKyAElt)rdS>CtF7j{&6rP-#c=7evGMt7B6`7HG|-(WL`bDUAjyn+k$mx$CH;q2Dz4x;cPP$hW=`pFfLO)!jaCL@V2+F)So3}vg|%O*^T1j>C2lx zsURO-zIJC$^$g2byVbRIo^w>UxK}74^TqUiRR#7s_X$e)$6iYG1(PcW7un-va-S&u zHk9-6Zn&>T==A)lM^D~bk{&rFzCi35>UR!ZjQkdSiNX*-;l4z9j*7|q`TBl~Au`5& z+c)*8?#-tgUR$Zd%Q3bs96w6k7q@#tUn`5rj+r@_sAVVLqco|6O{ILX&U-&-cbVa3 zY?ngHR@%l{;`ri%H*0EhBWrGjv!LE4db?HEWb5mu*t@{kv|XwK8?npOshmzf=vZA@ zVSN9sL~!sn?r(AK)Q7Jk2(|M67Uy3I{eRy z_l&Y@A>;vjkWN5I2xvFFTLX0i+`{qz7C_@bo`ZUzDugfq4+>a3?1v%)O+YTd6@Ul7 zAfLfm=nhZ`)P~&v90$&UcF+yXm9sq!qCx3^9gzIcO|Y(js^Fj)Rvq>nQAHI92ap=P z10A4@prk+AGWCb`2)dQYFuR$|H6iDE8p}9a?#nV2}LBCoCf(Xi2@szia7#gY>b|l!-U`c}@ zLdhvQjc!BdLJvYvzzzngnw51yRYCqh4}$oRCy-z|v3Hc*d|?^Wj=l~18*E~*cR_kU z{XsxM1i{V*4GujHQ3DBpl2w4FgFR48Nma@HPgnyKoIEY-MqmMeY=I<%oG~l!f<+FN z1ZY^;10j4M4#HYXP zw5eJpA_y(>uLQ~OucgxDLuf}fVs272FaMxhn4xnDGIyLXnw>Xsd^J8XhcWIwIoQ9} z%FoSJTAGW(SRGwJwb=@pY7r$uQRK3Zd~XbxU)ts!4XsJrCycrWSI?e!IqwqIR8+Jh zlRjZ`UO1I!BtJR_2~7AbkbSm%XQqxEPkz6BTGWx8e}nQ=w7bZ|eVP4?*Tb!$(R)iC z9)&%bS*u(lXqzitAN)Oo=&Ytn>%Hzjc<5liuPi>zC_nw;Z0AE3Y$Jao_Q90R-gl~5 z_xAb2J%eArrC1CN4G$}-zVvCqF1;H;abAu6G*+PDHSYFx@Tdbfox*uEd3}BUyYY-l zTfEsOqsi#f9^FoLO;ChK<554qkri&Av~SIM*{fEYRE?vH7pTAOmu2pz3X?Wn*!ROX ztd54huAk&mFBemMooL33RV-*1f0Q3_(7hl$<#*|WF9P!;r;4_+X~k~uKEqdzZ$5Al zV63XN@)j$FN#cCD;ek1R#l zv%pGrhB~KWgoCj%GT?%{@@o(AJGt*PG#l3i>lhmb_twKH^EYvacVY-6bsCl5*^~L0 zonm@lk2UvvTKr2RS%}T>^~EYqdL1q4nD%0n&Xqr^cK^`J5W;lRRB^R-O8b&HENO||mo0xaD+S=I8RTlIfVgqN@SXDr2&-)we--K7w= zJVU8?Z+7k9dy;s;^gDkQa`0nz6N{T?(A&Iz)2!DEecLyRa&FI!id#5Z7B*O2=PsR0 zEvc|8{NS^)!d)MDX(97Xw}m&kEO@5jqRaDZ!+%`wYOI<23q|&js`&o4xvjP7D_xv@ z5hEwpsp{HezI9!~6O{~)lLR@oF7?J7i>1|5a~UuoN=q&6N}EJPV_GD`&M*v8Y`^2j zKII*d_@Fi$+i*YEW+Hbzn{iQk~yP z>7N{S4)r*!NwQ`(qcN#8SRQsNK6>{)X12nbF`*7#ecO7I)Q$uZsV+xS4E7aUn+U(K baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/fair-launch/public/index.html b/CandyMachine-Storefront/store/js/packages/fair-launch/public/index.html new file mode 100644 index 0000000..aa069f2 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/fair-launch/public/index.html @@ -0,0 +1,43 @@ + + + + + + + + + + + + + React App + + + +
+ + + diff --git a/CandyMachine-Storefront/store/js/packages/fair-launch/public/logo192.png b/CandyMachine-Storefront/store/js/packages/fair-launch/public/logo192.png new file mode 100644 index 0000000000000000000000000000000000000000..fc44b0a3796c0e0a64c3d858ca038bd4570465d9 GIT binary patch literal 5347 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/fair-launch/public/manifest.json b/CandyMachine-Storefront/store/js/packages/fair-launch/public/manifest.json new file mode 100644 index 0000000..080d6c7 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/fair-launch/public/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/CandyMachine-Storefront/store/js/packages/fair-launch/public/robots.txt b/CandyMachine-Storefront/store/js/packages/fair-launch/public/robots.txt new file mode 100644 index 0000000..e9e57dc --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/fair-launch/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/CandyMachine-Storefront/store/js/packages/fair-launch/src/App.test.tsx b/CandyMachine-Storefront/store/js/packages/fair-launch/src/App.test.tsx new file mode 100644 index 0000000..2a68616 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/fair-launch/src/App.test.tsx @@ -0,0 +1,9 @@ +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import App from './App'; + +test('renders learn react link', () => { + render(); + const linkElement = screen.getByText(/learn react/i); + expect(linkElement).toBeInTheDocument(); +}); diff --git a/CandyMachine-Storefront/store/js/packages/fair-launch/src/App.tsx b/CandyMachine-Storefront/store/js/packages/fair-launch/src/App.tsx new file mode 100644 index 0000000..bbdb4ab --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/fair-launch/src/App.tsx @@ -0,0 +1,76 @@ +import './App.css'; +import { useMemo } from 'react'; + +import Home from './Home'; + +import * as anchor from '@project-serum/anchor'; +import { clusterApiUrl } from '@solana/web3.js'; +import { WalletAdapterNetwork } from '@solana/wallet-adapter-base'; +import { + getPhantomWallet, + getSolflareWallet, + getSolletWallet, +} from '@solana/wallet-adapter-wallets'; + +import { + ConnectionProvider, + WalletProvider, +} from '@solana/wallet-adapter-react'; + +import { WalletDialogProvider } from '@solana/wallet-adapter-material-ui'; +import { ThemeProvider, createTheme } from '@material-ui/core'; +import { ConfettiProvider } from './confetti'; + +const theme = createTheme({ + palette: { + type: 'dark', + }, +}); + +const candyMachineId = process.env.REACT_APP_CANDY_MACHINE_ID + ? new anchor.web3.PublicKey(process.env.REACT_APP_CANDY_MACHINE_ID) + : undefined; + +const fairLaunchId = new anchor.web3.PublicKey( + process.env.REACT_APP_FAIR_LAUNCH_ID!, +); + +const network = process.env.REACT_APP_SOLANA_NETWORK as WalletAdapterNetwork; + +const rpcHost = process.env.REACT_APP_SOLANA_RPC_HOST!; +const connection = new anchor.web3.Connection(rpcHost); + +const startDateSeed = parseInt(process.env.REACT_APP_CANDY_START_DATE!, 10); + +const txTimeout = 30000; // milliseconds (confirm this works for your project) + +const App = () => { + const endpoint = useMemo(() => clusterApiUrl(network), []); + + const wallets = useMemo( + () => [getPhantomWallet(), getSolflareWallet(), getSolletWallet()], + [], + ); + + return ( + + + + + + + + + + + + ); +}; + +export default App; diff --git a/CandyMachine-Storefront/store/js/packages/fair-launch/src/Home.tsx b/CandyMachine-Storefront/store/js/packages/fair-launch/src/Home.tsx new file mode 100644 index 0000000..9019a98 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/fair-launch/src/Home.tsx @@ -0,0 +1,1204 @@ +import { useEffect, useMemo, useState } from 'react'; +import styled from 'styled-components'; +import { + CircularProgress, + Container, + IconButton, + Link, + Slider, + Snackbar, +} from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Paper from '@material-ui/core/Paper'; +import Typography from '@material-ui/core/Typography'; +import Grid from '@material-ui/core/Grid'; +import { createStyles, Theme } from '@material-ui/core/styles'; +import { PhaseCountdown } from './countdown'; +import Dialog from '@material-ui/core/Dialog'; +import MuiDialogTitle from '@material-ui/core/DialogTitle'; +import MuiDialogContent from '@material-ui/core/DialogContent'; +import CloseIcon from '@material-ui/icons/Close'; + +import Alert from '@material-ui/lab/Alert'; + +import * as anchor from '@project-serum/anchor'; + +import { LAMPORTS_PER_SOL } from '@solana/web3.js'; + +import { useWallet } from '@solana/wallet-adapter-react'; +import { WalletDialogButton } from '@solana/wallet-adapter-material-ui'; + +import { + awaitTransactionSignatureConfirmation, + CandyMachineAccount, + getCandyMachineState, + mintOneToken, +} from './candy-machine'; + +import { + FairLaunchAccount, + getFairLaunchState, + punchTicket, + purchaseTicket, + receiveRefund, +} from './fair-launch'; + +import { formatNumber, getAtaForMint, toDate } from './utils'; +import Countdown from 'react-countdown'; + +const ConnectButton = styled(WalletDialogButton)` + width: 100%; + height: 60px; + margin-top: 10px; + margin-bottom: 5px; + background: linear-gradient(180deg, #604ae5 0%, #813eee 100%); + color: white; + font-size: 16px; + font-weight: bold; +`; + +const MintContainer = styled.div``; // add your styles here + +const MintButton = styled(Button)` + width: 100%; + height: 60px; + margin-top: 10px; + margin-bottom: 5px; + background: linear-gradient(180deg, #604ae5 0%, #813eee 100%); + color: white; + font-size: 16px; + font-weight: bold; +`; // add your styles here + +const dialogStyles: any = (theme: Theme) => + createStyles({ + root: { + margin: 0, + padding: theme.spacing(2), + }, + closeButton: { + position: 'absolute', + right: theme.spacing(1), + top: theme.spacing(1), + color: theme.palette.grey[500], + }, + }); + +const ValueSlider = styled(Slider)({ + color: '#C0D5FE', + height: 8, + '& > *': { + height: 4, + }, + '& .MuiSlider-track': { + border: 'none', + height: 4, + }, + '& .MuiSlider-thumb': { + height: 24, + width: 24, + marginTop: -10, + background: 'linear-gradient(180deg, #604AE5 0%, #813EEE 100%)', + border: '2px solid currentColor', + '&:focus, &:hover, &.Mui-active, &.Mui-focusVisible': { + boxShadow: 'inherit', + }, + '&:before': { + display: 'none', + }, + }, + '& .MuiSlider-valueLabel': { + '& > *': { + background: 'linear-gradient(180deg, #604AE5 0%, #813EEE 100%)', + }, + lineHeight: 1.2, + fontSize: 12, + padding: 0, + width: 32, + height: 32, + marginLeft: 9, + }, +}); + +enum Phase { + Phase0, + Phase1, + Phase2, + Lottery, + Phase3, + Phase4, + Unknown, +} + +const Header = (props: { + phaseName: string; + desc: string; + date: anchor.BN | undefined; + status?: string; +}) => { + const { phaseName, desc, date, status } = props; + return ( + + + + {phaseName} + + + {desc} + + + + + + + ); +}; + +function getPhase( + fairLaunch: FairLaunchAccount | undefined, + candyMachine: CandyMachineAccount | undefined, +): Phase { + const curr = new Date().getTime(); + + const phaseOne = toDate(fairLaunch?.state.data.phaseOneStart)?.getTime(); + const phaseOneEnd = toDate(fairLaunch?.state.data.phaseOneEnd)?.getTime(); + const phaseTwoEnd = toDate(fairLaunch?.state.data.phaseTwoEnd)?.getTime(); + const candyMachineGoLive = toDate(candyMachine?.state.goLiveDate)?.getTime(); + + if (phaseOne && curr < phaseOne) { + return Phase.Phase0; + } else if (phaseOneEnd && curr <= phaseOneEnd) { + return Phase.Phase1; + } else if (phaseTwoEnd && curr <= phaseTwoEnd) { + return Phase.Phase2; + } else if (!fairLaunch?.state.phaseThreeStarted) { + return Phase.Lottery; + } else if ( + fairLaunch?.state.phaseThreeStarted && + candyMachineGoLive && + curr > candyMachineGoLive + ) { + return Phase.Phase4; + } else if (fairLaunch?.state.phaseThreeStarted) { + return Phase.Phase3; + } + + return Phase.Unknown; +} + +export interface HomeProps { + candyMachineId?: anchor.web3.PublicKey; + fairLaunchId: anchor.web3.PublicKey; + connection: anchor.web3.Connection; + startDate: number; + txTimeout: number; +} + +const FAIR_LAUNCH_LOTTERY_SIZE = + 8 + // discriminator + 32 + // fair launch + 1 + // bump + 8; // size of bitmask ones + +const isWinner = ( + fairLaunch: FairLaunchAccount | undefined, + fairLaunchBalance: number, +): boolean => { + if (fairLaunchBalance > 0) return true; + if ( + !fairLaunch?.lottery.data || + !fairLaunch?.lottery.data.length || + !fairLaunch?.ticket.data?.seq || + !fairLaunch?.state.phaseThreeStarted + ) { + return false; + } + + const myByte = + fairLaunch.lottery.data[ + FAIR_LAUNCH_LOTTERY_SIZE + + Math.floor(fairLaunch.ticket.data?.seq.toNumber() / 8) + ]; + + const positionFromRight = 7 - (fairLaunch.ticket.data?.seq.toNumber() % 8); + const mask = Math.pow(2, positionFromRight); + const isWinner = myByte & mask; + return isWinner > 0; +}; + +const Home = (props: HomeProps) => { + const [fairLaunchBalance, setFairLaunchBalance] = useState(0); + const [yourSOLBalance, setYourSOLBalance] = useState(null); + + const [isMinting, setIsMinting] = useState(false); // true when user got to press MINT + const [contributed, setContributed] = useState(0); + + const wallet = useWallet(); + + const anchorWallet = useMemo(() => { + if ( + !wallet || + !wallet.publicKey || + !wallet.signAllTransactions || + !wallet.signTransaction + ) { + return; + } + + return { + publicKey: wallet.publicKey, + signAllTransactions: wallet.signAllTransactions, + signTransaction: wallet.signTransaction, + } as anchor.Wallet; + }, [wallet]); + + const [alertState, setAlertState] = useState({ + open: false, + message: '', + severity: undefined, + }); + + const [fairLaunch, setFairLaunch] = useState(); + const [candyMachine, setCandyMachine] = useState(); + const [howToOpen, setHowToOpen] = useState(false); + const [refundExplainerOpen, setRefundExplainerOpen] = useState(false); + const [antiRugPolicyOpen, setAnitRugPolicyOpen] = useState(false); + + const onMint = async () => { + try { + setIsMinting(true); + if (wallet.connected && candyMachine?.program && wallet.publicKey) { + if ( + fairLaunch?.ticket.data?.state.unpunched && + isWinner(fairLaunch, fairLaunchBalance) + ) { + await onPunchTicket(); + } + + const mintTxId = await mintOneToken(candyMachine, wallet.publicKey); + + const status = await awaitTransactionSignatureConfirmation( + mintTxId, + props.txTimeout, + props.connection, + 'singleGossip', + false, + ); + + if (!status?.err) { + setAlertState({ + open: true, + message: 'Congratulations! Mint succeeded!', + severity: 'success', + }); + } else { + setAlertState({ + open: true, + message: 'Mint failed! Please try again!', + severity: 'error', + }); + } + } + } catch (error: any) { + // TODO: blech: + let message = error.msg || 'Minting failed! Please try again!'; + if (!error.msg) { + if (!error.message) { + message = 'Transaction Timeout! Please try again.'; + } else if (error.message.indexOf('0x138')) { + } else if (error.message.indexOf('0x137')) { + message = `SOLD OUT!`; + } else if (error.message.indexOf('0x135')) { + message = `Insufficient funds to mint. Please fund your wallet.`; + } + } else { + if (error.code === 311) { + message = `SOLD OUT!`; + window.location.reload(); + } else if (error.code === 312) { + message = `Minting period hasn't started yet.`; + } + } + + setAlertState({ + open: true, + message, + severity: 'error', + }); + } finally { + setIsMinting(false); + } + }; + + useEffect(() => { + (async () => { + if (!anchorWallet) { + return; + } + + try { + const balance = await props.connection.getBalance( + anchorWallet.publicKey, + ); + setYourSOLBalance(balance); + + const state = await getFairLaunchState( + anchorWallet, + props.fairLaunchId, + props.connection, + ); + + setFairLaunch(state); + + try { + if (state.state.tokenMint) { + const fairLaunchBalance = + await props.connection.getTokenAccountBalance( + ( + await getAtaForMint( + state.state.tokenMint, + anchorWallet.publicKey, + ) + )[0], + ); + + if (fairLaunchBalance.value) { + setFairLaunchBalance(fairLaunchBalance.value.uiAmount || 0); + } + } + } catch (e) { + console.log('Problem getting fair launch token balance'); + console.log(e); + } + setContributed( + ( + state.state.currentMedian || state.state.data.priceRangeStart + ).toNumber() / LAMPORTS_PER_SOL, + ); + } catch (e) { + console.log('Problem getting fair launch state'); + console.log(e); + } + if (props.candyMachineId) { + try { + const cndy = await getCandyMachineState( + anchorWallet, + props.candyMachineId, + props.connection, + ); + setCandyMachine(cndy); + } catch (e) { + console.log('Problem getting candy machine state'); + console.log(e); + } + } else { + console.log('No candy machine detected in configuration.'); + } + })(); + }, [ + anchorWallet, + props.candyMachineId, + props.connection, + props.fairLaunchId, + ]); + + const min = formatNumber.asNumber(fairLaunch?.state.data.priceRangeStart); + const max = formatNumber.asNumber(fairLaunch?.state.data.priceRangeEnd); + const step = formatNumber.asNumber(fairLaunch?.state.data.tickSize); + const median = formatNumber.asNumber(fairLaunch?.state.currentMedian); + const marks = [ + { + value: min || 0, + label: `${min} SOL`, + }, + // TODO:L + { + value: median || 0, + label: `${median}`, + }, + // display user comitted value + // { + // value: 37, + // label: '37°C', + // }, + { + value: max || 0, + label: `${max} SOL`, + }, + ].filter(_ => _ !== undefined && _.value !== 0) as any; + + const onDeposit = async () => { + if (!anchorWallet) { + return; + } + + console.log('deposit'); + setIsMinting(true); + try { + await purchaseTicket(contributed, anchorWallet, fairLaunch); + setIsMinting(false); + setAlertState({ + open: true, + message: `Congratulations! Bid ${ + fairLaunch?.ticket.data ? 'updated' : 'inserted' + }!`, + severity: 'success', + }); + } catch (e) { + console.log(e); + setIsMinting(false); + setAlertState({ + open: true, + message: 'Something went wrong.', + severity: 'error', + }); + } + }; + const onRugRefund = async () => { + if (!anchorWallet) { + return; + } + + console.log('refund'); + try { + setIsMinting(true); + await receiveRefund(anchorWallet, fairLaunch); + setIsMinting(false); + setAlertState({ + open: true, + message: + 'Congratulations! You have received a refund. This is an irreversible action.', + severity: 'success', + }); + } catch (e) { + console.log(e); + setIsMinting(false); + setAlertState({ + open: true, + message: 'Something went wrong.', + severity: 'error', + }); + } + }; + const onRefundTicket = async () => { + if (!anchorWallet) { + return; + } + + console.log('refund'); + try { + setIsMinting(true); + await purchaseTicket(0, anchorWallet, fairLaunch); + setIsMinting(false); + setAlertState({ + open: true, + message: + 'Congratulations! Funds withdrawn. This is an irreversible action.', + severity: 'success', + }); + } catch (e) { + console.log(e); + setIsMinting(false); + setAlertState({ + open: true, + message: 'Something went wrong.', + severity: 'error', + }); + } + }; + + const onPunchTicket = async () => { + if (!anchorWallet || !fairLaunch || !fairLaunch.ticket) { + return; + } + + console.log('punch'); + setIsMinting(true); + try { + await punchTicket(anchorWallet, fairLaunch); + setIsMinting(false); + setAlertState({ + open: true, + message: 'Congratulations! Ticket punched!', + severity: 'success', + }); + } catch (e) { + console.log(e); + setIsMinting(false); + setAlertState({ + open: true, + message: 'Something went wrong.', + severity: 'error', + }); + } + }; + + const phase = getPhase(fairLaunch, candyMachine); + + const candyMachinePredatesFairLaunch = + candyMachine?.state.goLiveDate && + fairLaunch?.state.data.phaseTwoEnd && + candyMachine?.state.goLiveDate.lt(fairLaunch?.state.data.phaseTwoEnd); + + const notEnoughSOL = !!( + yourSOLBalance != null && + fairLaunch?.state.data.priceRangeStart && + fairLaunch?.state.data.fee && + yourSOLBalance + (fairLaunch?.ticket?.data?.amount.toNumber() || 0) < + contributed * LAMPORTS_PER_SOL + + fairLaunch?.state.data.fee.toNumber() + + 0.01 + ); + + return ( + + +
+ { + setAnitRugPolicyOpen(true); + }} + > + Anti-Rug Policy + +
+
+ + + + {phase === Phase.Phase0 && ( +
+ )} + {phase === Phase.Phase1 && ( +
+ )} + + {phase === Phase.Phase2 && ( +
+ )} + + {phase === Phase.Lottery && ( +
+ )} + + {phase === Phase.Phase3 && !candyMachine && ( +
+ )} + + {phase === Phase.Phase3 && candyMachine && ( +
+ )} + + {phase === Phase.Phase4 && ( +
+ )} + + {fairLaunch && ( + + {fairLaunch.ticket.data ? ( + <> + Your bid + + {formatNumber.format( + (fairLaunch?.ticket.data?.amount.toNumber() || 0) / + LAMPORTS_PER_SOL, + )}{' '} + SOL + + + ) : [Phase.Phase0, Phase.Phase1].includes(phase) ? ( + + You haven't entered this raffle yet.
+ {fairLaunch?.state?.data?.fee && ( + + + All initial bids will incur a ◎{' '} + {fairLaunch?.state?.data?.fee.toNumber() / + LAMPORTS_PER_SOL}{' '} + fee. + + + )} +
+ ) : ( + + You didn't participate in this raffle. + + )} +
+ )} + + {fairLaunch && ( + <> + {[ + Phase.Phase1, + Phase.Phase2, + Phase.Phase3, + Phase.Lottery, + ].includes(phase) && + fairLaunch?.ticket?.data?.state.withdrawn && ( +
+ + Your bid was withdrawn and cannot be adjusted or + re-inserted. + +
+ )} + {[Phase.Phase1, Phase.Phase2].includes(phase) && + fairLaunch.state.currentMedian && + fairLaunch?.ticket?.data?.amount && + !fairLaunch?.ticket?.data?.state.withdrawn && + fairLaunch.state.currentMedian.gt( + fairLaunch?.ticket?.data?.amount, + ) && ( +
+ + Your bid is currently below the median and will not be + eligible for the raffle. + +
+ )} + {[Phase.Phase3, Phase.Lottery].includes(phase) && + fairLaunch.state.currentMedian && + fairLaunch?.ticket?.data?.amount && + !fairLaunch?.ticket?.data?.state.withdrawn && + fairLaunch.state.currentMedian.gt( + fairLaunch?.ticket?.data?.amount, + ) && ( +
+ + Your bid was below the median and was not included in + the raffle. You may click Withdraw when the + raffle ends or you will be automatically issued one when + the Fair Launch authority withdraws from the treasury. + +
+ )} + {notEnoughSOL && ( + + You do not have enough SOL in your account to place this + bid. + + )} + + )} + + {[Phase.Phase1, Phase.Phase2].includes(phase) && ( + <> + + setContributed(val as any)} + valueLabelDisplay="auto" + style={{ + width: 'calc(100% - 40px)', + marginLeft: 20, + height: 30, + }} + /> + + + )} + + {!wallet.connected ? ( + + Connect{' '} + {[Phase.Phase1].includes(phase) ? 'to bid' : 'to see status'} + + ) : ( +
+ {[Phase.Phase1, Phase.Phase2].includes(phase) && ( + <> + + {isMinting ? ( + + ) : !fairLaunch?.ticket.data ? ( + 'Place bid' + ) : ( + 'Change bid' + )} + {} + + + )} + + {[Phase.Phase3].includes(phase) && ( + <> + {isWinner(fairLaunch, fairLaunchBalance) && ( + + {isMinting ? : 'Punch Ticket'} + + )} + + {!isWinner(fairLaunch, fairLaunchBalance) && ( + + {isMinting ? : 'Withdraw'} + + )} + + )} + + {phase === Phase.Phase4 && ( + <> + {(!fairLaunch || + isWinner(fairLaunch, fairLaunchBalance)) && ( + + + {fairLaunch?.ticket?.data?.state.punched && + fairLaunchBalance === 0 ? ( + 'MINTED' + ) : candyMachine?.state.isSoldOut ? ( + 'SOLD OUT' + ) : isMinting ? ( + + ) : ( + 'MINT' + )} + + + )} + + {!isWinner(fairLaunch, fairLaunchBalance) && ( + + {isMinting ? : 'Withdraw'} + + )} + + )} +
+ )} + + + { + setHowToOpen(true); + }} + > + How this raffle works + + {fairLaunch?.ticket.data && ( + { + if ( + !fairLaunch || + phase === Phase.Lottery || + isWinner(fairLaunch, fairLaunchBalance) + ) { + setRefundExplainerOpen(true); + } else { + onRefundTicket(); + } + }} + > + Withdraw funds + + )} + + setRefundExplainerOpen(false)} + PaperProps={{ + style: { backgroundColor: '#222933', borderRadius: 6 }, + }} + > + + During raffle phases, or if you are a winner, or if this website + is not configured to be a fair launch but simply a candy + machine, refunds are disallowed. + + + { + setAnitRugPolicyOpen(false); + }} + PaperProps={{ + style: { backgroundColor: '#222933', borderRadius: 6 }, + }} + > + + {!fairLaunch?.state.data.antiRugSetting && ( + This Fair Launch has no anti-rug settings. + )} + {fairLaunch?.state.data.antiRugSetting && + fairLaunch.state.data.antiRugSetting.selfDestructDate && ( +
+

Anti-Rug Policy

+

+ This raffle is governed by a smart contract to prevent + the artist from running away with your money. +

+

How it works:

+ This project will retain{' '} + {fairLaunch.state.data.antiRugSetting.reserveBp / 100}% (◎{' '} + {(fairLaunch?.treasury * + fairLaunch.state.data.antiRugSetting.reserveBp) / + (LAMPORTS_PER_SOL * 10000)} + ) of the pledged amount in a locked state until all but{' '} + {fairLaunch.state.data.antiRugSetting.tokenRequirement.toNumber()}{' '} + NFTs (out of up to{' '} + {fairLaunch.state.data.numberOfTokens.toNumber()}) have + been minted. +

+ If more than{' '} + {fairLaunch.state.data.antiRugSetting.tokenRequirement.toNumber()}{' '} + NFTs remain as of{' '} + {toDate( + fairLaunch.state.data.antiRugSetting.selfDestructDate, + )?.toLocaleDateString()}{' '} + at{' '} + {toDate( + fairLaunch.state.data.antiRugSetting.selfDestructDate, + )?.toLocaleTimeString()} + , you will have the option to get a refund of{' '} + {fairLaunch.state.data.antiRugSetting.reserveBp / 100}% + of the cost of your token. +

+ {fairLaunch?.ticket?.data && + !fairLaunch?.ticket?.data.state.withdrawn && ( + + {isMinting ? ( + + ) : Date.now() / 1000 < + fairLaunch.state.data.antiRugSetting.selfDestructDate.toNumber() ? ( + + Refund in... + + + ) : ( + 'Refund' + )} + {} + + )} +
+ {fairLaunch?.ticket?.data && + !fairLaunch?.ticket?.data?.state.punched && ( + + You currently have a ticket but it has not been + punched yet, so cannot be refunded. + + )} +
+
+ )} +
+
+ setHowToOpen(false)} + PaperProps={{ + style: { backgroundColor: '#222933', borderRadius: 6 }, + }} + > + + { + setHowToOpen(true); + }} + > + How it works + + setHowToOpen(false)} + > + + + + + + Phase 1 - Set the fair price: + + + Enter a bid in the range provided by the artist. The median of + all bids will be the "fair" price of the raffle ticket.{' '} + {fairLaunch?.state?.data?.fee && ( + + + All bids will incur a ◎{' '} + {fairLaunch?.state?.data?.fee.toNumber() / + LAMPORTS_PER_SOL}{' '} + fee. + + + )} + + Phase 2 - Grace period: + + If your bid was at or above the fair price, you automatically + get a raffle ticket at that price. There's nothing else you + need to do. Your excess SOL will be returned to you when the + Fair Launch authority withdraws from the treasury. If your bid + is below the median price, you can still opt in at the fair + price during this phase. + + {candyMachinePredatesFairLaunch ? ( + <> + + Phase 3 - The Candy Machine: + + + Everyone who got a raffle ticket at the fair price is + entered to win an NFT. If you win an NFT, congrats. If you + don’t, no worries, your SOL will go right back into your + wallet. + + + ) : ( + <> + Phase 3 - The Lottery: + + Everyone who got a raffle ticket at the fair price is + entered to win a Fair Launch Token that entitles them to + an NFT at a later date using a Candy Machine here. If you + don’t win, no worries, your SOL will go right back into + your wallet. + + + Phase 4 - The Candy Machine: + + + On{' '} + {candyMachine?.state.goLiveDate + ? toDate( + candyMachine?.state.goLiveDate, + )?.toLocaleString() + : ' some later date'} + , you will be able to exchange your Fair Launch token for + an NFT using the Candy Machine at this site by pressing + the Mint Button. + + + )} + + + + {/* {wallet.connected && ( +

+ Address: {shortenAddress(wallet.publicKey?.toBase58() || '')} +

+ )} + + {wallet.connected && ( +

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

+ )} */} + + + + + {fairLaunch && ( + +
+ + + + Bids + + + {fairLaunch?.state.numberTicketsSold.toNumber() || 0} + + + + + Median bid + + + ◎ {formatNumber.format(median)} + + + + + Total raised + + + ◎{' '} + {formatNumber.format( + (fairLaunch?.treasury || 0) / LAMPORTS_PER_SOL, + )} + + + +
+
+ )} + setAlertState({ ...alertState, open: false })} + > + setAlertState({ ...alertState, open: false })} + severity={alertState.severity} + > + {alertState.message} + + + + ); +}; + +interface AlertState { + open: boolean; + message: string; + severity: 'success' | 'info' | 'warning' | 'error' | undefined; +} + +export default Home; diff --git a/CandyMachine-Storefront/store/js/packages/fair-launch/src/candy-machine.ts b/CandyMachine-Storefront/store/js/packages/fair-launch/src/candy-machine.ts new file mode 100644 index 0000000..36dbe38 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/fair-launch/src/candy-machine.ts @@ -0,0 +1,337 @@ +import * as anchor from '@project-serum/anchor'; + +import { MintLayout, TOKEN_PROGRAM_ID, Token } from '@solana/spl-token'; +import { SystemProgram } from '@solana/web3.js'; +import { sendTransactionWithRetry } from './connection'; + +import { + getAtaForMint, + SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID, +} from './utils'; + +export const CANDY_MACHINE_PROGRAM = new anchor.web3.PublicKey( + 'cndyAnrLdpjq1Ssp1z8xxDsB8dxe7u4HL5Nxi2K5WXZ', +); + +const TOKEN_METADATA_PROGRAM_ID = new anchor.web3.PublicKey( + 'metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s', +); + +interface CandyMachineState { + itemsAvailable: number; + itemsRedeemed: number; + itemsRemaining: number; + config: anchor.web3.PublicKey; + treasury: anchor.web3.PublicKey; + tokenMint: anchor.web3.PublicKey; + isSoldOut: boolean; + isActive: boolean; + goLiveDate: anchor.BN; + price: anchor.BN; +} + +export interface CandyMachineAccount { + id: anchor.web3.PublicKey; + program: anchor.Program; + state: CandyMachineState; +} + +export const awaitTransactionSignatureConfirmation = async ( + txid: anchor.web3.TransactionSignature, + timeout: number, + connection: anchor.web3.Connection, + commitment: anchor.web3.Commitment = 'recent', + queryStatus = false, +): Promise => { + let done = false; + let status: anchor.web3.SignatureStatus | null | void = { + slot: 0, + confirmations: 0, + err: null, + }; + let subId = 0; + status = await new Promise(async (resolve, reject) => { + setTimeout(() => { + if (done) { + return; + } + done = true; + console.log('Rejecting for timeout...'); + reject({ timeout: true }); + }, timeout); + while (!done && queryStatus) { + // eslint-disable-next-line no-loop-func + (async () => { + try { + const signatureStatuses = await connection.getSignatureStatuses([ + txid, + ]); + status = signatureStatuses && signatureStatuses.value[0]; + if (!done) { + if (!status) { + console.log('REST null result for', txid, status); + } else if (status.err) { + console.log('REST error for', txid, status); + done = true; + reject(status.err); + } else if (!status.confirmations) { + console.log('REST no confirmations for', txid, status); + } else { + console.log('REST confirmation for', txid, status); + done = true; + resolve(status); + } + } + } catch (e) { + if (!done) { + console.log('REST connection error: txid', txid, e); + } + } + })(); + await sleep(2000); + } + }); + + //@ts-ignore + if (connection._signatureSubscriptions[subId]) { + connection.removeSignatureListener(subId); + } + done = true; + console.log('Returning status', status); + return status; +}; + +/* export */ const createAssociatedTokenAccountInstruction = ( + associatedTokenAddress: anchor.web3.PublicKey, + payer: anchor.web3.PublicKey, + walletAddress: anchor.web3.PublicKey, + splTokenMintAddress: anchor.web3.PublicKey, +) => { + const keys = [ + { pubkey: payer, isSigner: true, isWritable: true }, + { pubkey: associatedTokenAddress, isSigner: false, isWritable: true }, + { pubkey: walletAddress, isSigner: false, isWritable: false }, + { pubkey: splTokenMintAddress, isSigner: false, isWritable: false }, + { + pubkey: anchor.web3.SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, + { + pubkey: anchor.web3.SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + return new anchor.web3.TransactionInstruction({ + keys, + programId: SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID, + data: Buffer.from([]), + }); +}; + +export const getCandyMachineState = async ( + anchorWallet: anchor.Wallet, + candyMachineId: anchor.web3.PublicKey, + connection: anchor.web3.Connection, +): Promise => { + const provider = new anchor.Provider(connection, anchorWallet, { + preflightCommitment: 'recent', + }); + + const idl = await anchor.Program.fetchIdl(CANDY_MACHINE_PROGRAM, provider); + + const program = new anchor.Program(idl, CANDY_MACHINE_PROGRAM, provider); + + const state: any = await program.account.candyMachine.fetch(candyMachineId); + const itemsAvailable = state.data.itemsAvailable.toNumber(); + const itemsRedeemed = state.itemsRedeemed.toNumber(); + const itemsRemaining = itemsAvailable - itemsRedeemed; + + return { + id: candyMachineId, + program, + state: { + itemsAvailable, + itemsRedeemed, + itemsRemaining, + isSoldOut: itemsRemaining === 0, + isActive: state.data.goLiveDate.toNumber() < new Date().getTime() / 1000, + goLiveDate: state.data.goLiveDate, + treasury: state.wallet, + tokenMint: state.tokenMint, + config: state.config, + price: state.data.price, + }, + }; +}; + +const getMasterEdition = async ( + mint: anchor.web3.PublicKey, +): Promise => { + return ( + await anchor.web3.PublicKey.findProgramAddress( + [ + Buffer.from('metadata'), + TOKEN_METADATA_PROGRAM_ID.toBuffer(), + mint.toBuffer(), + Buffer.from('edition'), + ], + TOKEN_METADATA_PROGRAM_ID, + ) + )[0]; +}; + +const getMetadata = async ( + mint: anchor.web3.PublicKey, +): Promise => { + return ( + await anchor.web3.PublicKey.findProgramAddress( + [ + Buffer.from('metadata'), + TOKEN_METADATA_PROGRAM_ID.toBuffer(), + mint.toBuffer(), + ], + TOKEN_METADATA_PROGRAM_ID, + ) + )[0]; +}; + +export const mintOneToken = async ( + candyMachine: CandyMachineAccount, + payer: anchor.web3.PublicKey, +): Promise => { + const mint = anchor.web3.Keypair.generate(); + + const userTokenAccountAddress = ( + await getAtaForMint(mint.publicKey, payer) + )[0]; + + const userPayingAccountAddress = ( + await getAtaForMint(candyMachine.state.tokenMint, payer) + )[0]; + + const candyMachineAddress = candyMachine.id; + + const remainingAccounts = []; + const signers: anchor.web3.Keypair[] = [mint]; + const instructions = [ + anchor.web3.SystemProgram.createAccount({ + fromPubkey: payer, + newAccountPubkey: mint.publicKey, + space: MintLayout.span, + lamports: + await candyMachine.program.provider.connection.getMinimumBalanceForRentExemption( + MintLayout.span, + ), + programId: TOKEN_PROGRAM_ID, + }), + Token.createInitMintInstruction( + TOKEN_PROGRAM_ID, + mint.publicKey, + 0, + payer, + payer, + ), + createAssociatedTokenAccountInstruction( + userTokenAccountAddress, + payer, + payer, + mint.publicKey, + ), + Token.createMintToInstruction( + TOKEN_PROGRAM_ID, + mint.publicKey, + userTokenAccountAddress, + payer, + [], + 1, + ), + ]; + + let tokenAccount; + if (candyMachine.state.tokenMint) { + const transferAuthority = anchor.web3.Keypair.generate(); + + signers.push(transferAuthority); + remainingAccounts.push({ + pubkey: userPayingAccountAddress, + isWritable: true, + isSigner: false, + }); + remainingAccounts.push({ + pubkey: transferAuthority.publicKey, + isWritable: false, + isSigner: true, + }); + + instructions.push( + Token.createApproveInstruction( + TOKEN_PROGRAM_ID, + userPayingAccountAddress, + transferAuthority.publicKey, + payer, + [], + candyMachine.state.price.toNumber(), + ), + ); + } + const metadataAddress = await getMetadata(mint.publicKey); + const masterEdition = await getMasterEdition(mint.publicKey); + + instructions.push( + await candyMachine.program.instruction.mintNft({ + accounts: { + config: candyMachine.state.config, + candyMachine: candyMachineAddress, + payer, + wallet: candyMachine.state.treasury, + mint: mint.publicKey, + metadata: metadataAddress, + masterEdition, + mintAuthority: payer, + updateAuthority: payer, + tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID, + tokenProgram: TOKEN_PROGRAM_ID, + systemProgram: SystemProgram.programId, + rent: anchor.web3.SYSVAR_RENT_PUBKEY, + clock: anchor.web3.SYSVAR_CLOCK_PUBKEY, + }, + remainingAccounts: + remainingAccounts.length > 0 ? remainingAccounts : undefined, + }), + ); + + if (tokenAccount) { + instructions.push( + Token.createRevokeInstruction( + TOKEN_PROGRAM_ID, + userPayingAccountAddress, + payer, + [], + ), + ); + } + try { + return ( + await sendTransactionWithRetry( + candyMachine.program.provider.connection, + candyMachine.program.provider.wallet, + instructions, + signers, + ) + ).txid; + } catch (e) { + console.log(e); + } + return 'j'; +}; + +export const shortenAddress = (address: string, chars = 4): string => { + return `${address.slice(0, chars)}...${address.slice(-chars)}`; +}; + +const sleep = (ms: number): Promise => { + return new Promise(resolve => setTimeout(resolve, ms)); +}; diff --git a/CandyMachine-Storefront/store/js/packages/fair-launch/src/confetti.tsx b/CandyMachine-Storefront/store/js/packages/fair-launch/src/confetti.tsx new file mode 100644 index 0000000..4dd11d4 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/fair-launch/src/confetti.tsx @@ -0,0 +1,74 @@ +import React, { useContext, useEffect, useMemo, useRef } from 'react'; +import confetti from 'canvas-confetti'; + +export interface ConfettiContextState { + dropConfetti: () => void; +} + +const ConfettiContext = React.createContext(null); + +export const ConfettiProvider = ({ children = null as any }) => { + const canvasRef = useRef(); + const confettiRef = useRef(); + + const dropConfetti = useMemo( + () => () => { + if (confettiRef.current && canvasRef.current) { + canvasRef.current.style.visibility = 'visible'; + confettiRef + .current({ + particleCount: 400, + spread: 160, + origin: { y: 0.3 }, + }) + ?.finally(() => { + if (canvasRef.current) { + canvasRef.current.style.visibility = 'hidden'; + } + }); + } + }, + [], + ); + + useEffect(() => { + if (canvasRef.current && !confettiRef.current) { + canvasRef.current.style.visibility = 'hidden'; + confettiRef.current = confetti.create(canvasRef.current, { + resize: true, + useWorker: true, + }); + } + }, []); + + const canvasStyle: React.CSSProperties = { + width: '100vw', + height: '100vh', + position: 'absolute', + zIndex: 1, + top: 0, + left: 0, + }; + + return ( + + + {children} + + ); +}; + +export const Confetti = () => { + const { dropConfetti } = useConfetti(); + + useEffect(() => { + dropConfetti(); + }, [dropConfetti]); + + return <>; +}; + +export const useConfetti = () => { + const context = useContext(ConfettiContext); + return context as ConfettiContextState; +}; diff --git a/CandyMachine-Storefront/store/js/packages/fair-launch/src/connection.tsx b/CandyMachine-Storefront/store/js/packages/fair-launch/src/connection.tsx new file mode 100644 index 0000000..8f8bb84 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/fair-launch/src/connection.tsx @@ -0,0 +1,536 @@ +import { + Keypair, + Commitment, + Connection, + RpcResponseAndContext, + SignatureStatus, + SimulatedTransactionResponse, + Transaction, + TransactionInstruction, + TransactionSignature, + Blockhash, + FeeCalculator, +} from '@solana/web3.js'; + +import { + WalletNotConnectedError, +} from '@solana/wallet-adapter-base'; + +interface BlockhashAndFeeCalculator { + blockhash: Blockhash; + feeCalculator: FeeCalculator; +} + +export const getErrorForTransaction = async ( + connection: Connection, + txid: string, +) => { + // wait for all confirmation before geting transaction + await connection.confirmTransaction(txid, 'max'); + + const tx = await connection.getParsedConfirmedTransaction(txid); + + const errors: string[] = []; + if (tx?.meta && tx.meta.logMessages) { + tx.meta.logMessages.forEach(log => { + const regex = /Error: (.*)/gm; + let m; + while ((m = regex.exec(log)) !== null) { + // This is necessary to avoid infinite loops with zero-width matches + if (m.index === regex.lastIndex) { + regex.lastIndex++; + } + + if (m.length > 1) { + errors.push(m[1]); + } + } + }); + } + + return errors; +}; + +export enum SequenceType { + Sequential, + Parallel, + StopOnFailure, +} + +export async function sendTransactionsWithManualRetry( + connection: Connection, + wallet: any, + instructions: TransactionInstruction[][], + signers: Keypair[][], +) { + let stopPoint = 0; + let tries = 0; + let lastInstructionsLength = null; + let toRemoveSigners: Record = {}; + instructions = instructions.filter((instr, i) => { + if (instr.length > 0) { + return true; + } else { + toRemoveSigners[i] = true; + return false; + } + }); + let filteredSigners = signers.filter((_, i) => !toRemoveSigners[i]); + + while (stopPoint < instructions.length && tries < 3) { + instructions = instructions.slice(stopPoint, instructions.length); + filteredSigners = filteredSigners.slice(stopPoint, filteredSigners.length); + + if (instructions.length === lastInstructionsLength) tries = tries + 1; + else tries = 0; + + try { + if (instructions.length === 1) { + await sendTransactionWithRetry( + connection, + wallet, + instructions[0], + filteredSigners[0], + 'single', + ); + stopPoint = 1; + } else { + stopPoint = await sendTransactions( + connection, + wallet, + instructions, + filteredSigners, + SequenceType.StopOnFailure, + 'single', + ); + } + } catch (e) { + console.error(e); + } + console.log( + 'Died on ', + stopPoint, + 'retrying from instruction', + instructions[stopPoint], + 'instructions length is', + instructions.length, + ); + lastInstructionsLength = instructions.length; + } +} + +export const sendTransactions = async ( + connection: Connection, + wallet: any, + instructionSet: TransactionInstruction[][], + signersSet: Keypair[][], + sequenceType: SequenceType = SequenceType.Parallel, + commitment: Commitment = 'singleGossip', + successCallback: (txid: string, ind: number) => void = (txid, ind) => {}, + failCallback: (reason: string, ind: number) => boolean = (txid, ind) => false, + block?: BlockhashAndFeeCalculator, +): Promise => { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const unsignedTxns: Transaction[] = []; + + if (!block) { + block = await connection.getRecentBlockhash(commitment); + } + + for (let i = 0; i < instructionSet.length; i++) { + const instructions = instructionSet[i]; + const signers = signersSet[i]; + + if (instructions.length === 0) { + continue; + } + + let transaction = new Transaction(); + instructions.forEach(instruction => transaction.add(instruction)); + transaction.recentBlockhash = block.blockhash; + transaction.setSigners( + // fee payed by the wallet owner + wallet.publicKey, + ...signers.map(s => s.publicKey), + ); + + if (signers.length > 0) { + transaction.partialSign(...signers); + } + + unsignedTxns.push(transaction); + } + + const signedTxns = await wallet.signAllTransactions(unsignedTxns); + + const pendingTxns: Promise<{ txid: string; slot: number }>[] = []; + + let breakEarlyObject = { breakEarly: false, i: 0 }; + console.log( + 'Signed txns length', + signedTxns.length, + 'vs handed in length', + instructionSet.length, + ); + for (let i = 0; i < signedTxns.length; i++) { + const signedTxnPromise = sendSignedTransaction({ + connection, + signedTransaction: signedTxns[i], + }); + + signedTxnPromise + .then(({ txid, slot }) => { + successCallback(txid, i); + }) + .catch(reason => { + // @ts-ignore + failCallback(signedTxns[i], i); + if (sequenceType === SequenceType.StopOnFailure) { + breakEarlyObject.breakEarly = true; + breakEarlyObject.i = i; + } + }); + + if (sequenceType !== SequenceType.Parallel) { + try { + await signedTxnPromise; + } catch (e) { + console.log('Caught failure', e); + if (breakEarlyObject.breakEarly) { + console.log('Died on ', breakEarlyObject.i); + return breakEarlyObject.i; // Return the txn we failed on by index + } + } + } else { + pendingTxns.push(signedTxnPromise); + } + } + + if (sequenceType !== SequenceType.Parallel) { + await Promise.all(pendingTxns); + } + + return signedTxns.length; +}; + +export const sendTransaction = async ( + connection: Connection, + wallet: any, + instructions: TransactionInstruction[], + signers: Keypair[], + awaitConfirmation = true, + commitment: Commitment = 'singleGossip', + includesFeePayer: boolean = false, + block?: BlockhashAndFeeCalculator, +) => { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + let transaction = new Transaction(); + instructions.forEach(instruction => transaction.add(instruction)); + transaction.recentBlockhash = ( + block || (await connection.getRecentBlockhash(commitment)) + ).blockhash; + + if (includesFeePayer) { + transaction.setSigners(...signers.map(s => s.publicKey)); + } else { + transaction.setSigners( + // fee payed by the wallet owner + wallet.publicKey, + ...signers.map(s => s.publicKey), + ); + } + + if (signers.length > 0) { + transaction.partialSign(...signers); + } + if (!includesFeePayer) { + transaction = await wallet.signTransaction(transaction); + } + + const rawTransaction = transaction.serialize(); + let options = { + skipPreflight: true, + commitment, + }; + + const txid = await connection.sendRawTransaction(rawTransaction, options); + let slot = 0; + + if (awaitConfirmation) { + const confirmation = await awaitTransactionSignatureConfirmation( + txid, + DEFAULT_TIMEOUT, + connection, + commitment, + ); + + if (!confirmation) + throw new Error('Timed out awaiting confirmation on transaction'); + slot = confirmation?.slot || 0; + + if (confirmation?.err) { + const errors = await getErrorForTransaction(connection, txid); + + console.log(errors); + throw new Error(`Raw transaction ${txid} failed`); + } + } + + return { txid, slot }; +}; + +export const sendTransactionWithRetry = async ( + connection: Connection, + wallet: any, + instructions: TransactionInstruction[], + signers: Keypair[], + commitment: Commitment = 'singleGossip', + includesFeePayer: boolean = false, + block?: BlockhashAndFeeCalculator, + beforeSend?: () => void, +) => { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + let transaction = new Transaction(); + instructions.forEach(instruction => transaction.add(instruction)); + transaction.recentBlockhash = ( + block || (await connection.getRecentBlockhash(commitment)) + ).blockhash; + + if (includesFeePayer) { + transaction.setSigners(...signers.map(s => s.publicKey)); + } else { + transaction.setSigners( + // fee payed by the wallet owner + wallet.publicKey, + ...signers.map(s => s.publicKey), + ); + } + + if (signers.length > 0) { + transaction.partialSign(...signers); + } + if (!includesFeePayer) { + transaction = await wallet.signTransaction(transaction); + } + + if (beforeSend) { + beforeSend(); + } + + const { txid, slot } = await sendSignedTransaction({ + connection, + signedTransaction: transaction, + }); + + return { txid, slot }; +}; + +export const getUnixTs = () => { + return new Date().getTime() / 1000; +}; + +const DEFAULT_TIMEOUT = 15000; + +export async function sendSignedTransaction({ + signedTransaction, + connection, + timeout = DEFAULT_TIMEOUT, +}: { + signedTransaction: Transaction; + connection: Connection; + sendingMessage?: string; + sentMessage?: string; + successMessage?: string; + timeout?: number; +}): Promise<{ txid: string; slot: number }> { + const rawTransaction = signedTransaction.serialize(); + const startTime = getUnixTs(); + let slot = 0; + const txid: TransactionSignature = await connection.sendRawTransaction( + rawTransaction, + { + skipPreflight: true, + }, + ); + + console.log('Started awaiting confirmation for', txid); + + let done = false; + (async () => { + while (!done && getUnixTs() - startTime < timeout) { + connection.sendRawTransaction(rawTransaction, { + skipPreflight: true, + }); + await sleep(500); + } + })(); + try { + const confirmation = await awaitTransactionSignatureConfirmation( + txid, + timeout, + connection, + 'recent', + true, + ); + + if (!confirmation) + throw new Error('Timed out awaiting confirmation on transaction'); + + if (confirmation.err) { + console.error(confirmation.err); + throw new Error('Transaction failed: Custom instruction error'); + } + + slot = confirmation?.slot || 0; + } catch (err: any) { + console.error('Timeout Error caught', err); + if (err.timeout) { + throw new Error('Timed out awaiting confirmation on transaction'); + } + let simulateResult: SimulatedTransactionResponse | null = null; + try { + simulateResult = ( + await simulateTransaction(connection, signedTransaction, 'single') + ).value; + } catch (e) {} + if (simulateResult && simulateResult.err) { + if (simulateResult.logs) { + for (let i = simulateResult.logs.length - 1; i >= 0; --i) { + const line = simulateResult.logs[i]; + if (line.startsWith('Program log: ')) { + throw new Error( + 'Transaction failed: ' + line.slice('Program log: '.length), + ); + } + } + } + throw new Error(JSON.stringify(simulateResult.err)); + } + // throw new Error('Transaction failed'); + } finally { + done = true; + } + + console.log('Latency', txid, getUnixTs() - startTime); + return { txid, slot }; +} + +async function simulateTransaction( + connection: Connection, + transaction: Transaction, + commitment: Commitment, +): Promise> { + // @ts-ignore + transaction.recentBlockhash = await connection._recentBlockhash( + // @ts-ignore + connection._disableBlockhashCaching, + ); + + const signData = transaction.serializeMessage(); + // @ts-ignore + const wireTransaction = transaction._serialize(signData); + const encodedTransaction = wireTransaction.toString('base64'); + const config: any = { encoding: 'base64', commitment }; + const args = [encodedTransaction, config]; + + // @ts-ignore + const res = await connection._rpcRequest('simulateTransaction', args); + if (res.error) { + throw new Error('failed to simulate transaction: ' + res.error.message); + } + return res.result; +} + +async function awaitTransactionSignatureConfirmation( + txid: TransactionSignature, + timeout: number, + connection: Connection, + commitment: Commitment = 'recent', + queryStatus = false, +): Promise { + let done = false; + let status: SignatureStatus | null | void = { + slot: 0, + confirmations: 0, + err: null, + }; + let subId = 0; + status = await new Promise(async (resolve, reject) => { + setTimeout(() => { + if (done) { + return; + } + done = true; + console.log('Rejecting for timeout...'); + reject({ timeout: true }); + }, timeout); + try { + subId = connection.onSignature( + txid, + (result, context) => { + done = true; + status = { + err: result.err, + slot: context.slot, + confirmations: 0, + }; + if (result.err) { + console.log('Rejected via websocket', result.err); + reject(status); + } else { + console.log('Resolved via websocket', result); + resolve(status); + } + }, + commitment, + ); + } catch (e) { + done = true; + console.error('WS error in setup', txid, e); + } + while (!done && queryStatus) { + // eslint-disable-next-line no-loop-func + (async () => { + try { + const signatureStatuses = await connection.getSignatureStatuses([ + txid, + ]); + status = signatureStatuses && signatureStatuses.value[0]; + if (!done) { + if (!status) { + console.log('REST null result for', txid, status); + } else if (status.err) { + console.log('REST error for', txid, status); + done = true; + reject(status.err); + } else if (!status.confirmations) { + console.log('REST no confirmations for', txid, status); + } else { + console.log('REST confirmation for', txid, status); + done = true; + resolve(status); + } + } + } catch (e) { + if (!done) { + console.log('REST connection error: txid', txid, e); + } + } + })(); + await sleep(2000); + } + }); + + //@ts-ignore + if (connection._signatureSubscriptions[subId]) + connection.removeSignatureListener(subId); + done = true; + console.log('Returning status', status); + return status; +} +export function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)); +} diff --git a/CandyMachine-Storefront/store/js/packages/fair-launch/src/countdown.tsx b/CandyMachine-Storefront/store/js/packages/fair-launch/src/countdown.tsx new file mode 100644 index 0000000..9de103a --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/fair-launch/src/countdown.tsx @@ -0,0 +1,136 @@ +import { Paper } from '@material-ui/core'; +import Countdown from 'react-countdown'; +import { Theme, createStyles, makeStyles } from '@material-ui/core/styles'; +import { useState } from 'react'; + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + root: { + display: 'flex', + padding: theme.spacing(0), + '& > *': { + margin: theme.spacing(0.5), + marginRight: 0, + width: theme.spacing(6), + height: theme.spacing(6), + display: 'flex', + flexDirection: 'column', + alignContent: 'center', + alignItems: 'center', + justifyContent: 'center', + background: '#384457', + color: 'white', + borderRadius: 5, + fontSize: 10, + }, + }, + done: { + display: 'flex', + margin: theme.spacing(1), + marginRight: 0, + padding: theme.spacing(1), + flexDirection: 'column', + alignContent: 'center', + alignItems: 'center', + justifyContent: 'center', + background: '#384457', + color: 'white', + borderRadius: 5, + fontWeight: 'bold', + fontSize: 18, + }, + item: { + fontWeight: 'bold', + fontSize: 18, + } + }), +); + + +interface PhaseCountdownProps { + date: Date | undefined; + style?: React.CSSProperties; + status?: string; + onComplete?: () => void; + start?: Date; + end?: Date; +} + +interface CountdownRender { + days: number; + hours: number; + minutes: number; + seconds: number; + completed: boolean; +} + +export const PhaseCountdown: React.FC = ({ + date, + status, + style, + start, + end, + onComplete, +}) => { + const classes = useStyles(); + + const [isFixed, setIsFixed] = useState(start && end && date ? start.getTime() - Date.now() < 0 : false); + + const renderCountdown = ({ days, hours, minutes, seconds, completed }: CountdownRender) => { + hours += days * 24 + if (completed) { + return status ? {status} : null; + } else { + return ( +
+ {isFixed && + + + + + } + + + {hours < 10 ? `0${hours}` : hours} + + hrs + + + + {minutes < 10 ? `0${minutes}` : minutes} + + mins + + + + {seconds < 10 ? `0${seconds}` : seconds} + + secs + +
+ ) + } + } + + if (date && start && end) { + if (isFixed) { + end.getTime()} + onComplete={() => setIsFixed(false)} + renderer={renderCountdown} + /> + } + } + + if (date) { + return ( + + ) + } else { + return null + } +} diff --git a/CandyMachine-Storefront/store/js/packages/fair-launch/src/fair-launch.ts b/CandyMachine-Storefront/store/js/packages/fair-launch/src/fair-launch.ts new file mode 100644 index 0000000..eeac85d --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/fair-launch/src/fair-launch.ts @@ -0,0 +1,634 @@ +import * as anchor from '@project-serum/anchor'; + +import { TOKEN_PROGRAM_ID, Token } from '@solana/spl-token'; +import { LAMPORTS_PER_SOL, TransactionInstruction } from '@solana/web3.js'; +import { + createAssociatedTokenAccountInstruction, + getAtaForMint, + getFairLaunchTicketSeqLookup, +} from './utils'; + +export const FAIR_LAUNCH_PROGRAM = new anchor.web3.PublicKey( + 'faircnAB9k59Y4TXmLabBULeuTLgV7TkGMGNkjnA15j', +); + +export interface FairLaunchAccount { + id: anchor.web3.PublicKey; + program: anchor.Program; + state: FairLaunchState; + + ticket: { + pubkey: anchor.web3.PublicKey; + bump: number; + data?: FairLaunchTicket; + }; + lottery: { + pubkey: anchor.web3.PublicKey; + data?: Uint8Array; + }; + treasury: number; +} + +export interface FairLaunchTicket { + fairLaunch: anchor.web3.PublicKey; + buyer: anchor.web3.PublicKey; + amount: anchor.BN; + state: { + punched?: {}; + unpunched?: {}; + withdrawn?: {}; + no_sequence_struct: {}; + }; + bump: number; + seq: anchor.BN; +} + +export interface AntiRugSetting { + reserveBp: number; + tokenRequirement: anchor.BN; + selfDestructDate: anchor.BN; +} +export interface FairLaunchState { + authority: anchor.web3.PublicKey; + bump: number; + + currentMedian: anchor.BN; + currentEligibleHolders: anchor.BN; + data: { + antiRugSetting?: AntiRugSetting; + fee: anchor.BN; + numberOfTokens: anchor.BN; + phaseOneEnd: anchor.BN; + phaseOneStart: anchor.BN; + phaseTwoEnd: anchor.BN; + priceRangeEnd: anchor.BN; + priceRangeStart: anchor.BN; + lotteryDuration: anchor.BN; + tickSize: anchor.BN; + uuid: string; + }; + numberTicketsDropped: anchor.BN; + numberTicketsPunched: anchor.BN; + numberTicketsSold: anchor.BN; + numberTicketsUnSeqed: anchor.BN; + numberTokensBurnedForRefunds: anchor.BN; + numberTokensPreminted: anchor.BN; + phaseThreeStarted: boolean; + tokenMint: anchor.web3.PublicKey; + tokenMintBump: number; + treasury: anchor.web3.PublicKey; + treasuryBump: number; + treasuryMint: anchor.web3.PublicKey; // only for SPL tokens + treasurySnapshot: null; +} + +export enum LotteryState { + Brewing = 'Brewing', + Finished = 'Finished', + PastDue = 'Past Due', +} + +export const getLotteryState = ( + phaseThree: boolean | undefined, + lottery: Uint8Array | null, + lotteryDuration: anchor.BN, + phaseTwoEnd: anchor.BN, +): LotteryState => { + if ( + !phaseThree && + (!lottery || lottery.length === 0) && + phaseTwoEnd.add(lotteryDuration).lt(new anchor.BN(Date.now() / 1000)) + ) { + return LotteryState.PastDue; + } else if (phaseThree) { + return LotteryState.Finished; + } else { + return LotteryState.Brewing; + } +}; + +export const getFairLaunchState = async ( + anchorWallet: anchor.Wallet, + fairLaunchId: anchor.web3.PublicKey, + connection: anchor.web3.Connection, +): Promise => { + const provider = new anchor.Provider(connection, anchorWallet, { + preflightCommitment: 'recent', + }); + + const idl = await anchor.Program.fetchIdl(FAIR_LAUNCH_PROGRAM, provider); + + const program = new anchor.Program(idl, FAIR_LAUNCH_PROGRAM, provider); + const state: any = await program.account.fairLaunch.fetch(fairLaunchId); + + const [fairLaunchTicket, bump] = await getFairLaunchTicket( + //@ts-ignore + state.tokenMint, + anchorWallet.publicKey, + ); + + let fairLaunchData: any; + + try { + fairLaunchData = await program.account.fairLaunchTicket.fetch( + fairLaunchTicket, + ); + } catch { + console.log('No ticket'); + } + + const treasury = await program.provider.connection.getBalance(state.treasury); + + let lotteryData: Uint8Array = new Uint8Array([]); + let fairLaunchLotteryBitmap = ( + await getFairLaunchLotteryBitmap( + //@ts-ignore + state.tokenMint, + ) + )[0]; + + try { + const fairLaunchLotteryBitmapObj = + await program.provider.connection.getAccountInfo(fairLaunchLotteryBitmap); + + lotteryData = new Uint8Array(fairLaunchLotteryBitmapObj?.data || []); + } catch (e) { + console.log('Could not find fair launch lottery.'); + console.log(e); + } + + return { + id: fairLaunchId, + state, + program, + ticket: { + pubkey: fairLaunchTicket, + bump, + data: fairLaunchData, + }, + lottery: { + pubkey: fairLaunchLotteryBitmap, + data: lotteryData, + }, + treasury, + }; +}; + +export const punchTicket = async ( + anchorWallet: anchor.Wallet, + fairLaunch: FairLaunchAccount, +) => { + const fairLaunchTicket = ( + await getFairLaunchTicket( + //@ts-ignore + fairLaunch.state.tokenMint, + anchorWallet.publicKey, + ) + )[0]; + + const ticket = fairLaunch.ticket.data; + + const fairLaunchLotteryBitmap = //@ts-ignore + (await getFairLaunchLotteryBitmap(fairLaunch.state.tokenMint))[0]; + + const buyerTokenAccount = ( + await getAtaForMint( + //@ts-ignore + fairLaunch.state.tokenMint, + anchorWallet.publicKey, + ) + )[0]; + + if (ticket?.amount.gt(fairLaunch.state.currentMedian)) { + console.log( + 'Adjusting down...', + ticket?.amount.toNumber(), + fairLaunch.state.currentMedian.toNumber(), + ); + const { remainingAccounts, instructions, signers } = + await getSetupForTicketing( + fairLaunch.program, + fairLaunch.state.currentMedian.toNumber(), + anchorWallet, + fairLaunch, + fairLaunchTicket, + ); + await fairLaunch.program.rpc.adjustTicket(fairLaunch.state.currentMedian, { + accounts: { + fairLaunchTicket, + fairLaunch: fairLaunch.id, + fairLaunchLotteryBitmap, + //@ts-ignore + treasury: fairLaunch.state.treasury, + systemProgram: anchor.web3.SystemProgram.programId, + clock: anchor.web3.SYSVAR_CLOCK_PUBKEY, + }, + __private: { logAccounts: true }, + instructions: instructions.length > 0 ? instructions : undefined, + remainingAccounts: [ + { + pubkey: anchorWallet.publicKey, + isSigner: true, + isWritable: true, + }, + ...remainingAccounts, + ], + signers, + }); + } + + const accountExists = + await fairLaunch.program.provider.connection.getAccountInfo( + buyerTokenAccount, + ); + + const instructions = !accountExists + ? [ + createAssociatedTokenAccountInstruction( + buyerTokenAccount, + anchorWallet.publicKey, + anchorWallet.publicKey, + //@ts-ignore + fairLaunch.state.tokenMint, + ), + ] + : []; + + await fairLaunch.program.rpc.punchTicket({ + accounts: { + fairLaunchTicket, + fairLaunch: fairLaunch.id, + fairLaunchLotteryBitmap, + payer: anchorWallet.publicKey, + buyerTokenAccount, + //@ts-ignore + tokenMint: fairLaunch.state.tokenMint, + tokenProgram: TOKEN_PROGRAM_ID, + }, + instructions: instructions.length > 0 ? instructions : undefined, + }); +}; + +export const getFairLaunchTicket = async ( + tokenMint: anchor.web3.PublicKey, + buyer: anchor.web3.PublicKey, +): Promise<[anchor.web3.PublicKey, number]> => { + return await anchor.web3.PublicKey.findProgramAddress( + [Buffer.from('fair_launch'), tokenMint.toBuffer(), buyer.toBuffer()], + FAIR_LAUNCH_PROGRAM, + ); +}; + +export const getFairLaunchLotteryBitmap = async ( + tokenMint: anchor.web3.PublicKey, +): Promise<[anchor.web3.PublicKey, number]> => { + return await anchor.web3.PublicKey.findProgramAddress( + [Buffer.from('fair_launch'), tokenMint.toBuffer(), Buffer.from('lottery')], + FAIR_LAUNCH_PROGRAM, + ); +}; + +const getSetupForTicketing = async ( + anchorProgram: anchor.Program, + amount: number, + anchorWallet: anchor.Wallet, + fairLaunch: FairLaunchAccount | undefined, + ticketKey: anchor.web3.PublicKey, +): Promise<{ + remainingAccounts: { + pubkey: anchor.web3.PublicKey | null; + isWritable: boolean; + isSigner: boolean; + }[]; + instructions: TransactionInstruction[]; + signers: anchor.web3.Keypair[]; + amountLamports: number; +}> => { + if (!fairLaunch) { + return { + remainingAccounts: [], + instructions: [], + signers: [], + amountLamports: 0, + }; + } + const ticket = fairLaunch.ticket; + + const remainingAccounts = []; + const instructions = []; + const signers = []; + + let amountLamports = 0; + //@ts-ignore + if (!fairLaunch.state.treasuryMint) { + if (!ticket && amount === 0) { + amountLamports = fairLaunch.state.data.priceRangeStart.toNumber(); + } else { + amountLamports = Math.ceil(amount * LAMPORTS_PER_SOL); + } + } else { + const transferAuthority = anchor.web3.Keypair.generate(); + signers.push(transferAuthority); + // NOTE this token impl will not work till you get decimal mantissa and multiply... + /// ex from cli wont work since you dont have a Signer, but an anchor.Wallet + /* + const token = new Token( + anchorProgram.provider.connection, + //@ts-ignore + fairLaunchObj.treasuryMint, + TOKEN_PROGRAM_ID, + walletKeyPair, + ); + const mintInfo = await token.getMintInfo(); + amountNumber = Math.ceil(amountNumber * 10 ** mintInfo.decimals); + */ + instructions.push( + Token.createApproveInstruction( + TOKEN_PROGRAM_ID, + //@ts-ignore + fairLaunch.state.treasuryMint, + transferAuthority.publicKey, + anchorWallet.publicKey, + [], + //@ts-ignore + + // TODO: get mint decimals + amountNumber + fairLaunch.state.data.fees.toNumber(), + ), + ); + + remainingAccounts.push({ + //@ts-ignore + pubkey: fairLaunch.state.treasuryMint, + isWritable: true, + isSigner: false, + }); + remainingAccounts.push({ + pubkey: ( + await getAtaForMint( + //@ts-ignore + fairLaunch.state.treasuryMint, + anchorWallet.publicKey, + ) + )[0], + isWritable: true, + isSigner: false, + }); + remainingAccounts.push({ + pubkey: transferAuthority.publicKey, + isWritable: false, + isSigner: true, + }); + remainingAccounts.push({ + pubkey: TOKEN_PROGRAM_ID, + isWritable: false, + isSigner: false, + }); + } + + if (ticket.data) { + const [fairLaunchTicketSeqLookup, seqBump] = + await getFairLaunchTicketSeqLookup( + fairLaunch.state.tokenMint, + ticket.data?.seq, + ); + + const seq = await anchorProgram.provider.connection.getAccountInfo( + fairLaunchTicketSeqLookup, + ); + if (!seq) { + instructions.push( + await anchorProgram.instruction.createTicketSeq(seqBump, { + accounts: { + fairLaunchTicketSeqLookup, + fairLaunch: fairLaunch.id, + fairLaunchTicket: ticketKey, + payer: anchorWallet.publicKey, + systemProgram: anchor.web3.SystemProgram.programId, + rent: anchor.web3.SYSVAR_RENT_PUBKEY, + }, + signers: [], + }), + ); + } + } + + return { + remainingAccounts, + instructions, + signers, + amountLamports, + }; +}; + +export const receiveRefund = async ( + anchorWallet: anchor.Wallet, + fairLaunch: FairLaunchAccount | undefined, +) => { + if (!fairLaunch) { + return; + } + + const buyerTokenAccount = ( + await getAtaForMint(fairLaunch.state.tokenMint, anchorWallet.publicKey) + )[0]; + + const transferAuthority = anchor.web3.Keypair.generate(); + + const signers = [transferAuthority]; + const instructions = [ + Token.createApproveInstruction( + TOKEN_PROGRAM_ID, + buyerTokenAccount, + transferAuthority.publicKey, + anchorWallet.publicKey, + [], + 1, + ), + ]; + + const remainingAccounts = []; + + if (fairLaunch.state.treasuryMint) { + remainingAccounts.push({ + pubkey: fairLaunch.state.treasuryMint, + isWritable: true, + isSigner: false, + }); + remainingAccounts.push({ + pubkey: ( + await getAtaForMint( + fairLaunch.state.treasuryMint, + anchorWallet.publicKey, + ) + )[0], + isWritable: true, + isSigner: false, + }); + } + + console.log( + 'tfr', + fairLaunch.state.treasury.toBase58(), + anchorWallet.publicKey.toBase58(), + buyerTokenAccount.toBase58(), + ); + await fairLaunch.program.rpc.receiveRefund({ + accounts: { + fairLaunch: fairLaunch.id, + treasury: fairLaunch.state.treasury, + buyer: anchorWallet.publicKey, + buyerTokenAccount, + transferAuthority: transferAuthority.publicKey, + tokenMint: fairLaunch.state.tokenMint, + tokenProgram: TOKEN_PROGRAM_ID, + systemProgram: anchor.web3.SystemProgram.programId, + clock: anchor.web3.SYSVAR_CLOCK_PUBKEY, + }, + + __private: { logAccounts: true }, + remainingAccounts, + instructions, + signers, + }); +}; +export const purchaseTicket = async ( + amount: number, + anchorWallet: anchor.Wallet, + fairLaunch: FairLaunchAccount | undefined, +) => { + if (!fairLaunch) { + return; + } + + const ticket = fairLaunch.ticket.data; + + const [fairLaunchTicket, bump] = await getFairLaunchTicket( + //@ts-ignore + fairLaunch.state.tokenMint, + anchorWallet.publicKey, + ); + + const { remainingAccounts, instructions, signers, amountLamports } = + await getSetupForTicketing( + fairLaunch.program, + amount, + anchorWallet, + fairLaunch, + fairLaunchTicket, + ); + + if (ticket) { + const fairLaunchLotteryBitmap = ( //@ts-ignore + await getFairLaunchLotteryBitmap(fairLaunch.state.tokenMint) + )[0]; + console.log( + 'Anchor wallet', + anchorWallet.publicKey.toBase58(), + amountLamports, + ); + await fairLaunch.program.rpc.adjustTicket(new anchor.BN(amountLamports), { + accounts: { + fairLaunchTicket, + fairLaunch: fairLaunch.id, + fairLaunchLotteryBitmap, + //@ts-ignore + treasury: fairLaunch.state.treasury, + systemProgram: anchor.web3.SystemProgram.programId, + clock: anchor.web3.SYSVAR_CLOCK_PUBKEY, + }, + __private: { logAccounts: true }, + remainingAccounts: [ + { + pubkey: anchorWallet.publicKey, + isSigner: true, + isWritable: true, + }, + ...remainingAccounts, + ], + signers, + instructions: instructions.length > 0 ? instructions : undefined, + }); + + return; + } + try { + console.log('Amount', amountLamports); + await fairLaunch.program.rpc.purchaseTicket( + bump, + new anchor.BN(amountLamports), + { + accounts: { + fairLaunchTicket, + fairLaunch: fairLaunch.id, + //@ts-ignore + treasury: fairLaunch.state.treasury, + buyer: anchorWallet.publicKey, + payer: anchorWallet.publicKey, + systemProgram: anchor.web3.SystemProgram.programId, + rent: anchor.web3.SYSVAR_RENT_PUBKEY, + clock: anchor.web3.SYSVAR_CLOCK_PUBKEY, + }, + //__private: { logAccounts: true }, + remainingAccounts, + signers, + instructions: instructions.length > 0 ? instructions : undefined, + }, + ); + } catch (e) { + console.log(e); + throw e; + } +}; + +export const withdrawFunds = async ( + anchorWallet: anchor.Wallet, + fairLaunch: FairLaunchAccount | undefined, +) => { + if (!fairLaunch) { + return; + } + + // TODO: create sequence ticket + + const remainingAccounts = []; + + //@ts-ignore + if (fairLaunch.state.treasuryMint) { + remainingAccounts.push({ + //@ts-ignore + pubkey: fairLaunch.state.treasuryMint, + isWritable: true, + isSigner: false, + }); + remainingAccounts.push({ + pubkey: ( + await getAtaForMint( + //@ts-ignore + fairLaunch.state.treasuryMint, + anchorWallet.publicKey, + ) + )[0], + isWritable: true, + isSigner: false, + }); + remainingAccounts.push({ + pubkey: TOKEN_PROGRAM_ID, + isWritable: false, + isSigner: false, + }); + } + + await fairLaunch.program.rpc.withdrawFunds({ + accounts: { + fairLaunch: fairLaunch.id, + // @ts-ignore + treasury: fairLaunch.state.treasury, + authority: anchorWallet.publicKey, + // @ts-ignore + tokenMint: fairLaunch.state.tokenMint, + systemProgram: anchor.web3.SystemProgram.programId, + }, + remainingAccounts, + }); +}; diff --git a/CandyMachine-Storefront/store/js/packages/fair-launch/src/index.tsx b/CandyMachine-Storefront/store/js/packages/fair-launch/src/index.tsx new file mode 100644 index 0000000..ef2edf8 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/fair-launch/src/index.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import './index.css'; +import App from './App'; +import reportWebVitals from './reportWebVitals'; + +ReactDOM.render( + + + , + document.getElementById('root') +); + +// If you want to start measuring performance in your app, pass a function +// to log results (for example: reportWebVitals(console.log)) +// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals +reportWebVitals(); diff --git a/CandyMachine-Storefront/store/js/packages/fair-launch/src/logo.svg b/CandyMachine-Storefront/store/js/packages/fair-launch/src/logo.svg new file mode 100644 index 0000000..9dfc1c0 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/fair-launch/src/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/CandyMachine-Storefront/store/js/packages/fair-launch/src/react-app-env.d.ts b/CandyMachine-Storefront/store/js/packages/fair-launch/src/react-app-env.d.ts new file mode 100644 index 0000000..6431bc5 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/fair-launch/src/react-app-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/CandyMachine-Storefront/store/js/packages/fair-launch/src/reportWebVitals.ts b/CandyMachine-Storefront/store/js/packages/fair-launch/src/reportWebVitals.ts new file mode 100644 index 0000000..49a2a16 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/fair-launch/src/reportWebVitals.ts @@ -0,0 +1,15 @@ +import { ReportHandler } from 'web-vitals'; + +const reportWebVitals = (onPerfEntry?: ReportHandler) => { + if (onPerfEntry && onPerfEntry instanceof Function) { + import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { + getCLS(onPerfEntry); + getFID(onPerfEntry); + getFCP(onPerfEntry); + getLCP(onPerfEntry); + getTTFB(onPerfEntry); + }); + } +}; + +export default reportWebVitals; diff --git a/CandyMachine-Storefront/store/js/packages/fair-launch/src/setupTests.ts b/CandyMachine-Storefront/store/js/packages/fair-launch/src/setupTests.ts new file mode 100644 index 0000000..8f2609b --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/fair-launch/src/setupTests.ts @@ -0,0 +1,5 @@ +// jest-dom adds custom jest matchers for asserting on DOM nodes. +// allows you to do things like: +// expect(element).toHaveTextContent(/react/i) +// learn more: https://github.com/testing-library/jest-dom +import '@testing-library/jest-dom'; diff --git a/CandyMachine-Storefront/store/js/packages/fair-launch/src/utils.ts b/CandyMachine-Storefront/store/js/packages/fair-launch/src/utils.ts new file mode 100644 index 0000000..33ce251 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/fair-launch/src/utils.ts @@ -0,0 +1,130 @@ +import * as anchor from '@project-serum/anchor'; +import { TOKEN_PROGRAM_ID } from '@solana/spl-token'; +import { SystemProgram } from '@solana/web3.js'; +import { + LAMPORTS_PER_SOL, + SYSVAR_RENT_PUBKEY, + TransactionInstruction, +} from '@solana/web3.js'; + +export const FAIR_LAUNCH_PROGRAM_ID = new anchor.web3.PublicKey( + 'faircnAB9k59Y4TXmLabBULeuTLgV7TkGMGNkjnA15j', +); + +export const toDate = (value?: anchor.BN) => { + if (!value) { + return; + } + + return new Date(value.toNumber() * 1000); +}; + +const numberFormater = new Intl.NumberFormat('en-US', { + style: 'decimal', + minimumFractionDigits: 2, + maximumFractionDigits: 2, +}); + +export const formatNumber = { + format: (val?: number) => { + if (!val) { + return '--'; + } + + return numberFormater.format(val); + }, + asNumber: (val?: anchor.BN) => { + if (!val) { + return undefined; + } + + return val.toNumber() / LAMPORTS_PER_SOL; + }, +}; + +export const SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID = + new anchor.web3.PublicKey('ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'); + +export const getFairLaunchTicketSeqLookup = async ( + tokenMint: anchor.web3.PublicKey, + seq: anchor.BN, +): Promise<[anchor.web3.PublicKey, number]> => { + return await anchor.web3.PublicKey.findProgramAddress( + [ + Buffer.from('fair_launch'), + tokenMint.toBuffer(), + seq.toArrayLike(Buffer, 'le', 8), + ], + FAIR_LAUNCH_PROGRAM_ID, + ); +}; + +export const getAtaForMint = async ( + mint: anchor.web3.PublicKey, + buyer: anchor.web3.PublicKey, +): Promise<[anchor.web3.PublicKey, number]> => { + return await anchor.web3.PublicKey.findProgramAddress( + [buyer.toBuffer(), TOKEN_PROGRAM_ID.toBuffer(), mint.toBuffer()], + SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID, + ); +}; + +export const getFairLaunchTicket = async ( + tokenMint: anchor.web3.PublicKey, + buyer: anchor.web3.PublicKey, +): Promise<[anchor.web3.PublicKey, number]> => { + return await anchor.web3.PublicKey.findProgramAddress( + [Buffer.from('fair_launch'), tokenMint.toBuffer(), buyer.toBuffer()], + FAIR_LAUNCH_PROGRAM_ID, + ); +}; + +export function createAssociatedTokenAccountInstruction( + associatedTokenAddress: anchor.web3.PublicKey, + payer: anchor.web3.PublicKey, + walletAddress: anchor.web3.PublicKey, + splTokenMintAddress: anchor.web3.PublicKey, +) { + const keys = [ + { + pubkey: payer, + isSigner: true, + isWritable: true, + }, + { + pubkey: associatedTokenAddress, + isSigner: false, + isWritable: true, + }, + { + pubkey: walletAddress, + isSigner: false, + isWritable: false, + }, + { + pubkey: splTokenMintAddress, + isSigner: false, + isWritable: false, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + { + pubkey: TOKEN_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, + { + pubkey: SYSVAR_RENT_PUBKEY, + isSigner: false, + isWritable: false, + }, + ]; + return new TransactionInstruction({ + keys, + programId: SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID, + data: Buffer.from([]), + }); +} diff --git a/CandyMachine-Storefront/store/js/packages/fair-launch/tsconfig.json b/CandyMachine-Storefront/store/js/packages/fair-launch/tsconfig.json new file mode 100644 index 0000000..a273b0c --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/fair-launch/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx" + }, + "include": [ + "src" + ] +} diff --git a/CandyMachine-Storefront/store/js/packages/web/.env.production b/CandyMachine-Storefront/store/js/packages/web/.env.production new file mode 100644 index 0000000..e69de29 diff --git a/CandyMachine-Storefront/store/js/packages/web/.gitignore b/CandyMachine-Storefront/store/js/packages/web/.gitignore new file mode 100644 index 0000000..c13e26c --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/.gitignore @@ -0,0 +1,3 @@ +target +.next +.env.local diff --git a/CandyMachine-Storefront/store/js/packages/web/.prettierignore b/CandyMachine-Storefront/store/js/packages/web/.prettierignore new file mode 100644 index 0000000..ed0d3af --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/.prettierignore @@ -0,0 +1,2 @@ +.next +public diff --git a/CandyMachine-Storefront/store/js/packages/web/next-env.d.ts b/CandyMachine-Storefront/store/js/packages/web/next-env.d.ts new file mode 100644 index 0000000..c6643fd --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/next-env.d.ts @@ -0,0 +1,3 @@ +/// +/// +/// diff --git a/CandyMachine-Storefront/store/js/packages/web/next.config.js b/CandyMachine-Storefront/store/js/packages/web/next.config.js new file mode 100644 index 0000000..933f34c --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/next.config.js @@ -0,0 +1,46 @@ +const withPlugins = require('next-compose-plugins'); +const withLess = require('next-with-less'); + +const assetPrefix = process.env.ASSET_PREFIX || ''; + +const plugins = [ + [ + withLess, + { + lessLoaderOptions: { + lessOptions: { + modifyVars: { + '@primary-color': '#768BF9', + '@text-color': 'rgba(255, 255, 255)', + '@assetPrefix': assetPrefix || "''", + }, + javascriptEnabled: true, + }, + }, + }, + ], +]; + +module.exports = withPlugins(plugins, { + assetPrefix, + reactStrictMode: true, + eslint: { + ignoreDuringBuilds: true, + }, + env: { + NEXT_PUBLIC_STORE_OWNER_ADDRESS: + process.env.STORE_OWNER_ADDRESS || + process.env.REACT_APP_STORE_OWNER_ADDRESS_ADDRESS, + NEXT_PUBLIC_STORE_ADDRESS: process.env.STORE_ADDRESS, + NEXT_PUBLIC_BIG_STORE: process.env.REACT_APP_BIG_STORE, + NEXT_PUBLIC_CLIENT_ID: process.env.REACT_APP_CLIENT_ID, + }, + async rewrites() { + return [ + { + source: '/:any*', + destination: '/', + }, + ]; + }, +}); diff --git a/CandyMachine-Storefront/store/js/packages/web/package.json b/CandyMachine-Storefront/store/js/packages/web/package.json new file mode 100644 index 0000000..8882a30 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/package.json @@ -0,0 +1,97 @@ +{ + "name": "web", + "version": "0.1.0", + "dependencies": { + "@ant-design/icons": "^4.4.0", + "@babel/preset-typescript": "^7.12.13", + "@cloudflare/stream-react": "^1.1.0", + "@google/model-viewer": "^1.7.2", + "@oyster/common": "0.0.2", + "@project-serum/serum": "^0.13.52", + "@solana/spl-name-service": "0.1.3", + "@solana/spl-token": "0.1.6", + "@solana/spl-token-registry": "^0.2.202", + "@solana/wallet-adapter-base": "^0.4.1", + "@solana/wallet-adapter-react": "^0.7.1", + "@solana/web3.js": "^1.21.0", + "@welldone-software/why-did-you-render": "^6.0.5", + "bn.js": "^5.1.3", + "borsh": "^0.4.0", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.0", + "canvas-confetti": "^1.4.0", + "chart.js": "^3.5.0", + "eventemitter3": "^4.0.7", + "less": "^4.1.1", + "less-loader": "^10.0.1", + "lodash": "^4.17.20", + "next": "^11.0.1", + "next-compose-plugins": "^2.2.1", + "next-with-less": "^1.0.0", + "react": "17.0.2", + "react-chartjs-2": "^3.0.4", + "react-content-loader": "^6.0.3", + "react-dom": "17.0.2", + "react-intersection-observer": "^8.32.0", + "react-masonry-css": "^1.0.16", + "react-router-dom": "^5.2.0", + "react-virtualized": "^9.22.3", + "three": "^0.128.0" + }, + "scripts": { + "prestart": "npm-link-shared ../common/node_modules/ . react", + "start": "next dev", + "build": "next build", + "export": "next export -o ../../build/web", + "start:prod": "next start", + "test": "jest --passWithNoTests", + "deploy:ar": "yarn export && arweave deploy-dir ../../build/web --key-file ", + "deploy:gh": "yarn export && gh-pages-clean && gh-pages -d ../../build/web --repo https://github.com/SOLBROS/solhunt-store -t true", + "deploy": "cross-env ASSET_PREFIX=/solhunt-store/ yarn build && yarn deploy:gh", + "format:fix": "prettier --write \"**/*.+(js|jsx|ts|tsx|json|css|md)\"" + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "repository": { + "type": "git", + "url": "https://github.com/metaplex-foundation/metaplex" + }, + "homepage": ".", + "devDependencies": { + "@testing-library/jest-dom": "^4.2.4", + "@testing-library/react": "^9.5.0", + "@testing-library/user-event": "^7.2.1", + "@typechain/ethers-v4": "^1.0.0", + "@types/bn.js": "^5.1.0", + "@types/bs58": "^4.0.1", + "@types/canvas-confetti": "^1.4.0", + "@types/jest": "^24.9.1", + "@types/node": "^12.12.62", + "@types/react-router-dom": "^5.1.6", + "@types/testing-library__react": "^10.2.0", + "@types/three": "^0.128.0", + "arweave-deploy": "^1.9.1", + "cross-env": "^7.0.3", + "gh-pages": "^3.1.0", + "npm-link-shared": "0.5.6", + "prettier": "^2.1.2", + "typescript": "^4.1.3", + "webpack-dev-server": "3.11.0" + }, + "peerDependencies": { + "next": "*", + "react": "*", + "react-dom": "*" + }, + "license": "MIT" +} diff --git a/CandyMachine-Storefront/store/js/packages/web/public/.nojekyll b/CandyMachine-Storefront/store/js/packages/web/public/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/favicon-16x16.png b/CandyMachine-Storefront/store/js/packages/web/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..f90c68647ebced7f92c0747c67d7dfe7d0ad44a1 GIT binary patch literal 1742 zcmZ{j3pCVO9LH}5QT2_w2fd<2pW(`2-IshV~ z0r&`~B1QlRL;x7`0)Tu9faL*a#P&u2d>3wK=gr*XU;!0X> zO$tkr?)mrxOHx1`FE@S_7u0itDS?<(K{W(S%5ND}m6006NOOsH+jY&ZLXG}>^~ZV3 zMst;)=PZ1EWoO1+*Q^FwZtXWb+VYiGgZx;o@{8<%gjV+PKj>$g)^-=Jl3ZIdo)Z|? z4kvw&-NQ~bdu7~pzj((fyAD>T7FAKi6~?#A4Qoqv@7~1Szp=KbP!!W4h;R2#x(}0h zr!{$;Yjnw~r~OuIl@F~}e70Insu!cp#fiNBgZ#ee;GXb(4@06K$f6jjO>q0Jml|M{ zb$<2MqN*c)14p<6c6l|nS8L$LkFz9BSLz+J>r%ZRoy3NY`3@cq=#LHRjojO{H?lJ* zt|Q>^wA&W1bm+Fh`Eq@cb>@kCHi(MF0K+!ruL%-C^MmgJT}> z54G_U@833hT}*kAzjZv583E$=vg2kyfD_u6d*RpuoXn{VCPP+dm6BSu<^wc4*A+T9;3 z>WSFfwI`}``m%N<-@{Hf!+UqnY=8%K)OXM=v!QhJ%Nyp;uUU=f*pFRu89D3m1Rh`t zTav^bh!^xtO-&7*e7hJv!9pR;M*6mAYq1VaCj6SE=f-847-Fx;{PZSBA*{8%?TcFZ z^HhHLDit|)@==)*$XhzPj1Ahm%n>e6rrlHpwUsjcv`qP^L^3#|p>AK53O -ey5*Ur?$P0|yHNEZqbE%#D|}Ib3$S^e3F8QcN6G z+ZbM(6%JcXeivn0wdR8N(2`@cR>H!j0{$z-gIgQ5a(0cWrMh=7B#T4Siv9X-gw?lr zl)f8LS0$*fNIR8!db_K;ThGJpt_{}^1F~UhiTLK8;Lwo2-+#;}Anz6A=gp0aj*YRP zn48rj`Djhucwg~UMdg;bq?H?kjEp1GBY#Fm<#&wu@D=5LaoOb_YR+^HvhnxaXF^wz zlN0Txa@<19FsDFku1A=hoGrsau+4Y-9t)O>$dWv+T34y9Kqa!rEz8c#J?U<}W0Z?I0=u=;f(W{5QgzpKORI&&uP#3B>?nYMOGv_!(Ssp0(seqXH(!4};ssbNz*WJQkiw z58^O*{sR2hi@_uM20n(Uo*~oQ2lZy?)4fS3!;qni(TNDrKvz#62P1IM-{62@C#(Rd MW;T>OQ?ICh0o9HHc>n+a literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/favicon-32x32.png b/CandyMachine-Storefront/store/js/packages/web/public/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..0b6246b26232ea5bc257f0271a977b74c2ad7809 GIT binary patch literal 1856 zcmZ{k3ozT+9>-5YEK*lg>an%m=v+#POM?{ZtnKpy%yH4}ddnJG8anS(cQv0w+y@8`BMdmVERE2L-PYvH%7RG>)3R*d}>i z0ZagrECEoa1F#NnDW3xnM+D#{8vv>b0AuN;TmCL^L5u6dpo6XLQPFdy2;R|=dWFdV zKxJ(QLKJfu)@!zT)7^qX`xZl(nI*y4)N67! zA$^FEFGACDl3;Mhk0qAbYTfl3h&G)h^U5eOt^ft@88o!+2(=z*W6nEUc z%vCyT_gvF0O_So1zFKQPl=>mr_Fplfq=jqNX4M_#dwtVUZU)%5x5}`+Cz_6ZdwY6= z;rC;|w{}+_`NnL3ztQkkJS#HT=&OR>cOhYB-?Ts3AMH1;Lce;_8WgtZSv?VPbt0kn z(lI|@`<2#6-f*qf9DyQYw9Il_8s$Aq&gFgP&KKFO82gepzf=T$K6Sj<#pdNz-Hy?= zPQxMI54wv-jCej55i>zoh~I(yc-7u!s%#yn=zE&z=+9i*3d zEhijdTuAbnvBEG)?_=lmPdZYdV~Io1rw7kyA66o<1@{07=UTbZn0L5$fm99UHF`IuHu>BA1DmEjnUbnWZuyS7*^C1ve8Ju3 z(mv>m)#qUGPPdROThTA}VZ=<9{5M`N%O1ZD$%w5F2RXo zyX)=3O$vqg>qc#v>zK?3ZehNQF3nYedS^4NQr>=PTE9muDt3_Q-b2SrLr%XP$hy1q z-6?2O{VT;5I~TcUIsY^wJMLhHxbsCC{HIySJwoMC966uLi{--!*c0s`JkbFU5rc>% zDv?MflWpLcNSw3K%>5sMND?KCR{VcKabh<+-N+2X8B-jbJX*gioP7*74dVUc$1SZ>#K{0V6 zE|p4`@Zv;#v7Aa}!Ke&CSGKwce`0>`Nu|c{g@PD4fSm31LF_r0G5*Ns59X*aN*=R~ zj5U~R!-(le2vaEH%N0^S`2AD_saSBRHRQ;je3(Hn1t3R=>_BpIB9pBhHm|~n{zpE6 z!X!Q*(rCq12i0&XfH#O1p5nvTCy2!IQxX9oniDVNNyIY3e;Ly&GyefMS^Nk9 literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/favicon-96x96.png b/CandyMachine-Storefront/store/js/packages/web/public/favicon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..7c767b10a641e5cc771555a4fc7947dc2d588514 GIT binary patch literal 6104 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 z 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 ErFEWdpa1{> literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Black-Web.woff2 b/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Black-Web.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..30b8ab34aa564329a6d2706e3466181413214ee4 GIT binary patch literal 36561 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 ZWo~n2Iv_GJFf}bhSWr$*S0GMPMPJ7p-5~$~ literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-BlackItalic-Web.woff b/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-BlackItalic-Web.woff new file mode 100644 index 0000000000000000000000000000000000000000..6ffba9141dd7aacafb0f5c4ba4a8625303efb4c8 GIT binary patch literal 51825 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 rJZT=}`@tXdJr{m=&0p literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-BlackItalic-Web.woff2 b/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-BlackItalic-Web.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..d08e63587f1b6ef94c00f4d26bf2a271e69930c9 GIT binary patch literal 39013 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

jz5U-Sn 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 literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Bold-Web.woff b/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Bold-Web.woff new file mode 100644 index 0000000000000000000000000000000000000000..95f3a55656fabef611d7eb1a3ec8435322e344b8 GIT binary patch literal 50305 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%0AkZ_C&XsgM;O! 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%0AE$U9 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 XEhBf0RexoN>uXvQu?$ literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Bold-Web.woff2 b/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Bold-Web.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..d5d1d5856a108a687de9af31c3502339c0842bd7 GIT binary patch literal 37813 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

    3G_8zMXA#KzB$h# z;RlRmS*<}J90Tf945`i~C$E3ic3Hr)u{U1onOB}{Dsw%Lz|)jMhtRgNqcawIFWfY` zyH6hcBops%nV3gsiiY}-2&j`T@!1@I4D*dzMIRnETk=6osw*gMTd|zao8^@xA-XauwxoQXN&~GcO3TYwl zq}MvcJ;%HQWUnhzz_tUkE1MDQB8smM)ppDOIFOf}o*uk4vA#T<&iqa{#o^ zKJ-NJ{k&IhrL{Kkav)Mk1-wvpwWqD1(bB%rCRRo4K6t>-eC@ii+0GnbDOfV|Dt6uC zp&>Ik{~u4%`~PI>o50lci#@;Xv(b?^J!QYA<*WY%f4x7(h&4=jEquXRlE%Qfwyd4i zu4}T+ncHo)1=C7RH7MAPr8FkGa}v2zPIp0uy+_Nsy;IKtA(SbV_S8ACOij~Q(z zV<$E3e#U@Err!%Z*_i`khb#yh6N^ROVH{DH6OPlXoF`mAxAjXCYhez3PQ)LB-igb$ z{HASRk{jC0ak6}_FNL5aHZrAEN!R@t;GD_Sb@Y#Fv$#=ARw{qfdOPz=U)ie^en%xL zuIrH+5|lRl4*G*((*+!s=Ozo|aF~XyQ%x{G9Z=cpJr}wAgGC%IAPOGGNMf`R0KYda zk|uci5lAX{6qS+#lmx`1iI`Vf-mg=%PS}GbNr!jj;OzfQb{zATy~ZqMQ2lWoag&at zD*Ds2@HjkkxA2`N40$j5hArZ#s-E-vc0Mulnk8VuheD;+{MEa@YRPa;-Tvg%uSAV zdH2+&YP%GZ(emkEx>HBzi50wS)hTO4E0@Oc&qaUn$?nd< zs~QsSj=CioGYG>>m7NQ<-tjUoV?*}i9(dVHN^pV_aqa#0Wy*cja)onC9vH@Re)Jt) zY)E_M=~MNKU{i9ACjf=z)I25pLprPz_AbhEy=WUaa#Ub{&!q*HT(v@yitvO-)Dk8r z&{?RP)wKb8^mKmps5~3};8TpGaqwe~3DxI;XS?kLEhTWbCx4%*EQONMWvGEqic}h z1mq54>prbOwJIXZAF^$f2>!acZS+LSu0{6YZql0_eyNP1qI*{|o&@C?z%&0^=Dtnb zB8+OOR;g7I;p?_5oa3g-k@=)X3;DIv#4j?6b5Fj&5Rfg8EJq17=BGjJoKN&N*hyCs z$DvnsE+Ke_BLdEvj+=CYBv0c-nqSKsDyIE3%uYLZWAqN{no5JzX@^42mS310mGVxP zRzmSJOJ(ouXh9#>Y~i-NM^J)333}$-kDeci!$4`vZfJ6U7(*PAILUrc?zw{10=X5oBg&r`i(Z ziJF{%-E5jGi-0e|T(mr_9UiHi7*|jeDn|@w?58dEdJ<=d`UvHePw zIpC2e4yjV*s2YuqX=ZcA+b~=SiD<}Am^k;d#1cLllBCdRan|IP@rwH=ultcYzxp?O z{>&Q=+5`-;Supl8qK!pm$ zfPg@Sgal?mK|;f@z`_GK2muKZk&hCRaAafvhoO+7qKZaCBSS~$p^8C{i6sIXn*s+% zBrdKfJbV!Z1fmHEdD)C{Ym?mr`zSLP?U8NtR3`MT*%{r7D*ujZwNR0JoAYP>uoscTgx!ks<(h zQY=ASvRZS6YtlrfSu?2??PNOih|p`kXbTLAF=R-n#g@}sVFkODRx(>< zgxy*{O0wR1X*Sp_-4>;z)UUvKJqc!FjfcHAVYTUSN zC!Lh*lpN7c%Qev%dE%UvFWNapz$X-oc1a2FDW!&+P-dh_4}mXxWVD+eOLWT<0^jl) z_^vAbJx~pNUk$T|YLOP|(0-y`g2x&Jd!kW4Pc;EQ(`=yUT1@srt3WTcv3jLljMqB! z_eLi_Z`t(m&KuzO-Wu0AZ6cfLY~E>wh<;)o6mob($7iAC%@}pC#v0UzFx+Um^OlzZK_a z{{ZAa{VOiN`wt-h>wlEK^$n!&o(L@RsZu>KAQ&1_Ju)H~8{<}D0%vN<&6ydTxj8o% z7I2o9JX%?CeQgbAV*|0>12`Nwk4FHfvy#h2-1W+GyUTk#J*H z1(gH_#tIJ3B}kA2!Gf8D2oWn(C6ch`QZ3Uinh@C-Pgy?k_c7bpaydxJD zfpCFvfkfGIgm#RL)Fbpx3XgI7XYH$=D1At z(KQosvL&8w7fK!lfrgmk0%0rl*Y_%TpAV7E!J2@qLRMu75ai16sdPXc`f3XlJH(Xo z<@0~-a+9xG#8k!H$akM#`o3*HkmH^ozGFs#aY1GY9l8a{z_L|>O?816SR=^zQ}tBj z2z2ej3J@-kC|hVu*wzXrK*p0J>;gbJ30t$K|0%a4)cG0+$O1+-x>eP7CX1b7n7Q)t zRy9F2Z6U69!LM#1ss2h-!z5Wew?t+}PIiXGW#**(1P<&05g5Cx+T&B}n^57sP@k^> zi-=0CQfs-@617AN)#fzF+iB2Lj~2F#(H;O-w<<%qdl_Qq`JtUH;ij1rLXYBTOVMiv(%%l&R6I zThGi?!d5`N6)Fa>8EGFJ5YGRHe3^ihmEBhX+%YH%D%NxqJ>)|1Nfo}i3~Hf<|6QO7 zh_d#eLkjC!eL%JQ1uUd17l9d`#0F2{gk|s`YO#PFQVXDz;2V$t;RyCl+;{m8J6vJo zpm6c<(FBA<4owU22p9q+d#L7M8$FB22Qw6rkpRvj5hZFa$@HRAhr1O;!4ZBpa;f8sA~~v%`7_i+prRxj~DA zJ|srYjnwu;w>{{jm5%iP)nQ*gMwn-xOwW8SFzo0OlX=jkMz989JTGU;7NPNL@^!vkTv0B7TjwXB1z*)y}^+=FTO zE-cT)UbkVbILMm4GQr0c6^3tuK99A&hP8S^*6fiHpSt##Vq)?DbG-;Aedl4)xuEVa z5@(9)sBy+R9BN7+Yj(`sh_k&-(G9{Q*N#wg2(o6U%(_tV%pR}~7_rs&f@->FIbz9KCY9dcp#+STh5HYJmYw74dj$YP23i6JPDiNxR+PP-sGgDdh?Q1m=`7!q%#J z$;ZK~eo^4e0K`h))(^g&(j!-}KEmyF7#PbYSXV=PgJm7&G7r|5(|)A8Sj!`@zC-Ot z*@L~D2kV>DKAQxbr3Ka(**@DrsHH2M&Y9n#<)ZFPEyVyThrx>FFADO>9zssBMO$ID z#&czDQ`D++Z?iB6`3f}76eQ9ue}zz9S+l0?&2n7yXSo0 zGVj~NNOn2pmS3SNe&B_F(w`pYlN~>_*dV-A^{B@^>1oe;-iu!Ls@GMoK+R`WTQ${I zSA7jN)>LyXwbl+J@bQ5?s33>e&E58SrAKFe7H3J8W?9Qy(aKh}x-~7#qAY-sn3!A5 zIPsZ^wvu0utX>oY^mzCe9Rq^Lo z#x`}RBW-Sf8#>;xPIbD&9qd}yyV1>3ODnyMGP~97?sT_%hF&L!^>*~%x9|Tqm1IRo zQJpH~<=cypoOlW_c=59~m~P&fg}OX>Sb*7>k2#paH0Gke17ZgHGXM_8m;j~|1~J_mdux=)@%U!P=wJ z(fi)^wl96?Q}6oF=T9;w%%Myh_~ zIhmVzh5POFAIdRHEUn}UN-3%IiYuwG^76~BsA1)lS6QVEFSm?R%YrD;)UssDktj}m&*J4fL;X6_dGmY|x9PWE>HBxE zGe>&IoOad~>9SR-_1-7{C(Gh~F0|pjuopj;IUf=6ds69e!1j$}do^u4zDU8`-MH!d zFD-0-0hkRVS}fa{EQERE@~)HC-9Di$zux|-0pQ2Sy7PXUFPfa(&ObMQO&MHxoWG|$cCDwmIP-Ts^)>&_ZjjC<3*%n)EQ=?YB23LGY z;C*}_6Z%q^Z-x7w)Yl|_B-7!IKSlbP-0u|r7UkDsAoe6yU0N?D#DH627K{^RN7&E~ zWZT)8$c1yucw~KeFTr1jj>pdDRyx{simG zm{kJu>k#yF6vehp5W9wLyZ&&SCB3i_Aw!Ta2@*02DjGTlCKfghE*?GsArY}K65*s| zGFP)!Jq8R~ zVzFV%EVbN9tF5xeh##!A&X3mHXoIXtL6&c`!%pYS1e~9O`7TH_q(q@BtO{JU$b0~I zbIn8XW&tus1H8aiHD^c7x0oWxSb7oR`5N>$3;_q(iZB=wruTaLx+Mf5qKeB4B{?Nu zNd$Z8I_+9?>e8)4FjauZONH}Ux7&V4l{)B?0__sNlWs@db8fvETH8y1XZBIp?(iBX@KET%DExOys9%|K=^<;K4+FQY)^ z$qk#O&vs^=lQh$y?u~1;gwgA+^<7Etl1wjHBk+B%gzE)mTO+;6PNxUu&-ujry!tO2 znhZ?6Hxp}o7CP&Rtob&CU)AvOuP z2POtCZXzt$gr^m8n;woJl;-p{Q;d<4vgO$J5x3mf{5yw1ib) z$)^~_p@L8`iE&+~fg@SRLouIEQkg;+E60GM%bYpF8(nC2)mP_8a?L`G1D?|fUJCLR z7hnKuh^)XmOAH|t44@zZG@CgR$ymw;1S^KhGsyoNYy*3P|(!?>6n zm|83)j^{KwQ%eOQ>MkY3{VL^dUI@m-c+^?$^5PrV!db!Xj5zGAgt4h<)el3y%T#zx z9v#d^>QyA80EMZkwfD|YCVTo$YP|kRehZW>pR?87ZuMBgMc5}=4Fv=LuW|a>==F`m^R#-o9bwmgTi&0_a26r zeaLy!bTrqE?Yes)@!c%UEgac_p-FTn3F_@*o+XJN$|Blr;Ly=K(7^qCRqordMMaIg<4|uY8 zlt6ob3rFx?3Bv{4Z*Mb^1>}$g-J;}l+2B!3i&Iwuo>Op({SY6o#CZnHu>9ez-Okz7 zf^#6&vrMyMz2d+q3 zZhQw~39Uf*)EV7h1rDc}xd@p9N1%ren$z2LFD4cn@+X+oDsRhK>Rv@_i}4Gr+_XUt zC2IZ9xE8BPY05m~Eq7;3BvR@%nW!Iu{-$6gr*;7rdWssSA?z1~J`s52>PJUsw+^^} ze%l>h_0WNdDAP&`b#AMDoQs3}TygayKX9qfG>M}yxbeM6)8sjymAS=}v-%p*2@!W_ zqkXs%5fs*Q{2&nXQEc4(vw(utIYdERP4=m&gr)KIIZVx^=}CyR56{kbia0FLS;(F+ z4^=2!8K#nug5&(Oka{ZbirNnQvj?NJ?5&r>)70+jQ4bNydXgo3?O_iRiJPlk<`Q%I zbytrb%T#HBbmU4nZ(2FgCc6PJao3us-imTrUMs zI;+w4w=&UcU72K!ZiXKI{tNAt5JBGAN2uPb2jEjSs(!=ui0O4jyS(l@O78i75u9uFDydlAg|jhLg{CT6x&GYj zd0Vi!QLKy?$LyJQvnF*`S+rv3Edf-V);YOC5u`OEhCc+a2|IaK_)??o60$E-J~#VR z(`?eh?Dh;kLaOF=e@7IURLa>fDmzGgp%s~e)KSSyL?rUq6m=NWtfr{!w0a6R&XPye zq~H9D7vPQaa4MQ+?Q`^TGjiyBS~Nhud&i@pKn@x8T?{kB{LQ+#GSs#kB+IsI!5#lmQdV4V3@bIB;%cd?KF1^<>p>GYX6m$9| za1=0P%xJ(2>kn*)h;dl%zA3gngo-Y$RdW7Hyv!G+(m2Q+OX0vk4{2!d{BNl9<>Mr1}x`i3j*oMJH3GvJR!N)`?y*ALZzC-Fk%UIrDtj!50yuPoF&ur>WLEsgSvun_o#AHTPQKm5c>@^?xtD8WPtivi`( zJL()D3vQnsv$!a>NucH$$C>9FmTIbK??R&CGo$z=r{be#!)sEnoqCiqy^4C|#g@@h zYjn|Ct)Mrpa%P4yxpJY z4Hj0Qg(|=QYZom<+XRH#EH!)yp;QhPiAv&`*$MFmX(Tm9A!FHzL?3lo9bfAHX^jYb zvsN3@q}@`h2^cwghZ-D~Sjf_icp3v9nedP{Si35f(Vo+b4>4h4SiX5;8l8{(-cIwX zI`~_TOsT1t;Ncg~_6|orRZ?e8RH{bH)?axn4XMFaf4;WxEBai*`@Erckol3+R9WEa zV+r3Bu|-e1$&#uQrh4^2Ca*p22MGK|eK2UNm!n%dnlSIUJa1)<>u=ZII8OJT7Wg{Z z3iL|Bie!fjtrzAa6(F7NGx=OdbN0;&tMsjqf%h5lQOC#$NTceSg~3DYpj0Ucxgd0R zj3327Ue}5#IwsAo5>ToG9VU>U?v*Y>3FLeKcFm+?eB?>wsd?wx!)vam3_~FMN?#Yq zGWcJFHfh(=m2vm(XdVXnS(pin*##{NdbF3a zx-B*Fn4A=^aI6s-B&e2dM6P%mXE`2dfZ(I1{!e~%F||hNq730~tX?cVAl4=xqPwVp zX4%YvXxcWS-X}vbmhjs;IB2 zZb9J3-gGUcS-Wz=CRjmSROSm|8tM1bo{y(aXu1m8{MEUtFEk=c8%ymMk>_of35@lY zw^NXVYZ1Y4O`QUcws?x?lfP|Q6s@r@5=A^5XM*7vrtG&g%nP&f<|xr>vlR9iQ#uyF zsomQT7zF-6Gd-C#nxY8=+NO?aDqf53TCNf1BcaX-YCC{(7YI=2iC&*NGmf^jTP9nr zQ;ur4&&jr?kYDP2Y$TZf&&tYbN5a02;PSw!R3r3A+Y(T{eLTjH!nYWn&tBj^~3Y+&S zNqClz!y0Fndyc(+zgPB~Z-hF_5yth+zs%hfFd;#WxW601u_pXzu@(IbMki+|0g(v` zU$JPo%RO?Mg&l5kaeCf__ubX};tpp#vRGQh>!mFVw~OXMOBoa%6@Y%u;oORu;$)pA zW~_gzLeuz7N~z^s{f_~|Cfu5no@*bjdB?}NjBR#~Q__%CNR{4>JT>d!xw6l8&e_@_ zgZ%g`XovNQ(Q31>$slx+0rnZn5;m$5EQIio!!ZDj4AqFiyj!Rfb|Ceh4Ty8hhXWEh zY&+v|4BZXs#u@Yq3FOj#|Ev3e1V(?W7l9;0=nI9)to_|$*z>%S*(;<1GlU2 zrK%UpAqD&M75*Z%rt7b0nMxsN^AWe->Kxo4MrtR&60ne6NKs0j-C|0 zXkkYxa`FFY(@pFdhiPGpT=oA={e7ERbpP)Q8r7EtnTfsZO01uV`N&J|{BkY7Avbl# zvq^ehOe8&G*>6ME!M)PNdPVa&y6WopI4!slzt=bOWN#e%%%zuG{@?MRx|#d> zWB>Or38LT&8stXW1$)%vC0#N<|^U@dny=fSb56L9qVr=g}WYCme z&2fV^#P<4bZ}=@2a%XQ_5aj!e&Q0`BB+?}``UQ#l0$IS;qUw4PDjF57T;8ieGUyt_ zvfisy8d6=~r$gnYXMdQ;exHiDL?&Itpz7cK=ZL~b(;|9$uF}5zx7Q8T4!v4}bdzmcrL6}=H-7}|Bw z0(b(2&q9Vyg(3kB^oiYYXb)|2$r*W4eLbe%;as@mexozDY5>@YLg{2R|U*;k`+|Xc{NX4DAi|S>hXm*0Od?VV}- zvt&6O>HsZ*Jz295R=!v*&CJE*$g|X{h|FAUt|B91t*M?nvWC;?#3l$jjvue*>UH(3 ziDQBe7dnC4z4OFeK7BJ_?a=KTD)&xa;WYgXa!03g$SG9nlk%g$?iIZq>Kp>bk7yTA zU`ju1=>43`k1L~PTJX}r4zH?%=GzkfFI46$o~$*D|B{ODVKCpP93WE@dE7i=Omq&4 zjv(tfifD7&eY0JizoapxtS{BVnEvxX>VnjH=Yc_}ACSpHu)ctV;}H`fM~OSPtpX!B z^H}^K9=jRd=)dvtvN*31g_Rp4u;Ql1vB`27Emav`OzKGoC)SG6(+I5=n2X=Hdshu# z)6ie&TXa0ugBlT)<(XV<=BNb;=>PtsBuHhn6lHuVNju1raXAPMN5cYwRQGC#! z2d=U7U`-jSxR_xTN2!v&J{21zd}eH{AqyEU%SK3Lj97lSM1Si`v@24~j4vrE!>AXr zGFU7ti`l|vm9rQm9|{>kBKeRhh-8&-+rl#6{NqLyQz=dJNXa#D)gm|g|5@Y&nUtOy zA74t=#McPR(kZQRp}T)Pwz8dLVDXI{mYmB8?Of&?Y`t>7R-fs?Wor$8lpqXyC2Pl> zvW{?k;_cp>)Z_1m# z5XUcE>z4n~xSKbLfE5Wy>;oKrBz9LQEisavfst1?WhD!ly895@cMybttkDK948vQM%qyx=zl5 zj98#9%|vu`3i8q=R16as8DYMv@-@esfSE1%-D-57;1@cO@ls;lYN7BesX$6QFK#$* z7@R&Jdia6UV+YwKJplpTqBva@e$S8Mf*HD-iAN;b_=0RuR$QS`qLa?O4Ag`bt>0He zQm95!9hteH0!MN>XVDclaQxK4QIM10`M>`ne!3T3Gx2^caqf%7FFJ&4za?oVp8OEB z;=%F<|4-SMf>Q>pSkRtjb2gt9CUJJ2YP_`sv6 z{QbYedltpJHLU8RM>}{X&BPSs4dlw?733S_l-V$Gb@D1^JxDY^d1a6b$7D*Urml6g zwG(P?2XzN|XNC#Z^6m$qme@e_wCr{52J@pSQ$ zvB?X-Q>XW*uN*eJO0z(j?jp0tcoCh&@l%a(7wvd+wnRVjIT+sM_?I96rX z(i$=sJn>-g%g~oouO?n`{3foZoX9wFu;6s&>G9EtJ7wo*pTAW0xqLGDRr#&5TQ^QR z?$^HV`XV0prsJdF<%);(AOBDExd$tRQ<4k3V4o3oFe@0dR^tYeK!VQZWzC%eEPw=B z1iQIrAuO|LSyLx}4WDpyVq}AAW%BOi-OD5Z@d9rYJ9b5~4J<%Cl}5z#B%%0_dxz(NBkV$%ZS2#S zIL{iU;93dSuM_iPKpJB1wd?VO(ms(WMg`JJ)O>+NqXxxD)D9LnB8Q+-GIG=)6)Vqf z&n3(G?jSmYZHw6A%%|~1YBfkJ(uk=48h`Z4?yS{)1#_(UYuAXm8c+-&@5c3bA}`9s zE8vfP8cUGc!#(>1;p!NWTC5R@L@^qWI!x^lgQE(FDjPFL35sUrIvfR*2uTJ`$!F&2 zcom{PKBqHw3)tPAfimN+vl)W&L)Jlcqnevlo}PxtgLf{j3c!yexy6meL;K8((=k~{ z5Q3~T?@R3wDA6S>hQUV(A!VeN2TTL!;XI#Xg5 zibP5YNRrVi{x~K#IHhWHdSN(QIzGHE<{+e(VHi6{7u^?9Ezr-u!!|W18eZJVn zv7=)-th)RMXS~>VtgzoMKDF8Akr)>J*O<-&T+x)|>Dpv|MTA_j}3 ze0IwQ=kVhpH*Z?w*2liWVeUX-bG{_T2d&?*l9|?;`2DH?C#5H*y^3y(E*mQ=Xe_vk z+KvpU+TRC6XnzM&zZTRX4Z?&mDceM0d>8c^1CQAZaU%6h-;<^B#qrz6ea}XKe2XdHV~+P%-g}a{!z+5qVDLnBu>IyC7ogX}rS`9(ON~JUu`br2b`U}x54u|?UQz#w)m$XPw1SK5` zNoHs>;?l>==z9}nlW=3?&jsj13i1drxvDbXr#a5hE2C)G2ozNvKAW&i6jOo-XE-h9 zT#Q_sOT-2c+>~RfNo4X)Iy{WDw|)eJ@`so#%dfz(@6d;_DC?RvCcJ=pb>7M!pds~; zTsyvx`PK(m&b-U65$~r-pSM$=-X{ary!82W82dec;xZzgm-UA@jNcc_U?g$$QL+>@7@vPxjb<3@pcgM zITuB_qM*lT=nN)@L1)M~Oc`BE`KPY-IEg&oZSW6;{7-G&IGJ?(vdKS+Th2Y5do~Vk zy!@PH)8KB|=i1Mz18?^iZfawFH<;YIv>XFM!!o}$5rNFxJs;2Sh168c?mmft4)5PqxsJRapKkQ(w{cG|0 zsG+k8R6hjX+IaQv4H!zx%qscp*_0*|@Z-6sUc8}-6a$FQ^84uj+v=RnXf!A_x2&Fn zduK3j)fm=r8%@yYFAkTkn)uL`7`5NxF3kdADyqE#9XZ{XQDydTetaIz;x5dtX!0R= z-|X$E34|fO|S{7U5Vnz(~?a^)BcH8!&y?1rw`}#~e1|HL5n6z9P?9t_8 zSU8M3dHfMnQWG7i`b?(1}wAHg{c3wP)sn@*OFuxJ7vqu+V*JL}t<{lnlBGQ?853+IjZy z463|KewX|&f}3xUuaP6kkftoM_QC-poP!7=_pHx>;JDU+vN;VMF~96n{}LN9?@e3H z`sRy=<|_T)G+(^f*tot`dBJE%w0W7zgI9!x9tkQ3nv!hBi)yBwM$Kk0>{OZ^ez6_C zIyhuC9KJdvcy)B>kKg|u3Js-y|K8<2>w<4z5x%)_KoCQx!rmV{{^ZYmr5WP?zrW8T zd;INt_?gBapF6jUX3g@zWC7!%%sja7v)lc%{2y_$W?0nb)~vVl&6`T@Z!(WlEatdR z7oGO`)VhjXKA7M8zUES`Kp5kO6*wa9`wF9~t-v+n-mmEGC5`xQ1h?O9rbe61`-*G- zxum6}W~ipy%xg&8K3!5-k~@@p88zPBr}iVOafu{R9u}J?A|~SSIw2{ccM>+|rt?Qm zP9|*E$B%vMXVgU!=>iIMhe-YzQNY$9>*^3HDg~|V?GblOr^g_AdZwr}gsQGji^@r+ zu3j!)r=Tv8h=+Sc1?U44XykKzkxXl75b0@9D@91Hv2MIhD?e_C4IDFmiivby_q%;e z@Y(1AQEpXL5lz`K-0s_YB8S8gSbJ83bxXwkU|nNPtVo0?I_}@Tc+r5Sh~~)QW;aIZ z%E!ckw&B_{JHPH;Ia4)H0S-FSNf z`EZ!8V>h2}Uei3>%m@q&$~Ephn6p2 zwK6?p_$!P}O{hG1u$EDpkWfTdDGJDTJ2PJeR?yM`0Y4Gh)F%ZWF7N0U zZrj)Ew+h3ap9{qw$HZ#+FA#*rKg+#>8H*|#i`)?K!~K7s)dkjFPTe=-TlKg4eZpZ#zDvk>qoo0pP2G-DH|Ibvv`tbsZjZ`*9RE@dSp*He-8lKpva!e zev^GATal^o!Aow|M=>2|ePacjN|UKhzTpe|8I^#Ed# z_lo#K9k{;Es{nC$q0VT2Aw>-%W&ze^Ez9r+?%pWcT0*8mS^yi;r2kNGB?||EtClXI zBJQNr)}zOV;4WQ!>hJ$wK*=n)2RNE0xi?sQkN=cw{U;iY4>TB_bwK>zo&AyGZ*RR# zBniGp0*2Ehe^GH!*G_x*o8`x4@6vpq>HYstWW0#>Re*h00lXSA-I#85=IUYn^@EsX zfW>`STc`Pg)o7sfu21UB2lq z50kO^k&^2Y^E{Q5rvUuEiq;yPPtg|S6z~mCh1W?xkSZGRG>clPcZQgw)$c9I;!~8d z1`rp6^sL!wF(>eDa{{m@5%d*Y0b0L#vniO1XGC%T4QXs>#n8UlIhPrGMxfb;eW*;4 zgeeO0xtU6S_dnjs+t2^#TJSOnKk*aNC}iP{Z(h5IIj%T&5vV=~l(WY;e6hPA8U5E^ zL_-)GZGG@Qh4!RAZlOMORbjjL=P3(fwQKH|j{`vmqUH&*vhDfQsFp=dzH<-R0@?h? z>J_sziv&Hsn!0MKKrplLpkLF%`Mv6Vs#?v?Xo%Fx1hVhO)Gv%F3YE}piik|KEG7%@ z{|%o2Kai>;kp^fmF>!m%3Jk&@Vl*$`3B$adHHJZ&2i6#He9G>5eXYcOSOj&3T;jczl<=N4rL}M!RP8(&&hGL^N{2)*TV%um{^D_6V6Y-X7wR z*~5l3<@CB9R;4k-$gS$_DQBqF<+Sb|?i^EykzL)}H-|yrxU(z%$C1)aCF7iJkMB8@ zRwg!#Ou6aU!Jww_c-e#~MJn3oZ@htpmm-<)U(LGv1Gp$@L2NOB7fo{0c13=b2);2` z43WG+5_XwNnnz^{%{vL?1Rgez6w}aE>{djYs^07441A)M&CbVFm(ns+9FGrY)7sLy z#(`eKt%3wrfi{nb;SwEz`v|+XZD%7nU=F{U$6hd_)_=?0VH0q4c041RYr$MTflZLg zC@FkpAu-bmwpR)j3Vf51=;HRQT~Nu>RCg8n<{vN#sj`TC&tkhp7|nN}|9wMpgojg; ztkxo;x}Ouv;mA1LBo;5pCAmTzK?i&7xy*_JtBO&{$&5I0l-~XPW`sd1U>If6bc7^4 z13_odjeM!XaQ3z?F;Ya2Pbn$JDErx2ET)aaYGt!4SR4wNNdn6-TbPuZqO=wfW9*fJ$VhyP1?Qx9&u*^bt9m)fEN&8G zeE2Olb7uN9fabP(W$z(=Dj2%!CLWzYn#CNv`R%WXBuA1tIUiJ00LtHCs<}AN<;J{x zMKDRY==iCt$@H_$=IDjU5m(!nPd_;k1BUJwPp9CB$X~0u;B!1rB|VQwNFzxliKzeH zl9G9&Dqkvdm4|W&tm_sv&C-`+8#uJm@D0F@*1EdtzWy1VJOfX}`wctD(WIkfR3~~? z3OcN%y56gLla)jy6>@@Pi@@_7{MK6zca2f;8<*4>`IfFvZi@pc+pA&tyE0TB1g!x2tpC9#JF;Ba0UH8 zKr?0gxyAb@uW-s9c#D-0={(Xi90}&7I)=vOczw>M=-OJVGbuqaJbu)}#H42nu!BD9p+=db_HiuQ5g0$JKrR zwSLUdYnXSyD*(3uYaxTXn;N~U_Rzz*3>}a2m`&$=sr4H@zgz-b7ir{1WEVA-DM%R* zLM~~J6l^TwAQ<>Mqsqx_FD)rytHTmPU%nz*soO1QiIVViKt5l~k6@cn6UXpQnT(hc z7??>?E~N#rxLyppfXx?YN76&q!-D=laD~MJN9CfJa;jAvsYo8(D9}szG$R6(gcOOB zksu#REI(YRU$RN=iWF1hSrNII$YC0r$@HVsBAHADjf}rXBHbh4?~=%`Oi17AwnFdH z9hP8j?Dnx$%LNa-0ZH)>+r7A;fYIcw*i}Gt#$V5}tF559##ek3Hge+!wS+l}KB zk9=7_nKN0mHr)E#WVU;84}T#Z{$fhFH&S6EY@~O3ST}^}WYep_)$EkESc5YpBj;_c zcf@G9dqc_IC6&S?g8|v^a4y_&zfonYmX`6?->{yzIN~&imac^Xm&8}3|NR#S-`lTk zJz<;EacP+66VUsbxP5Uo@3G&OpFV5e6HrSQ6jmbYAg;>o(-qU(DZw#;-M{#>(w$GMz8eBwV3xI*g+Di?%-eCk2< zbG0@9*zIzmU)&|chOtrBE5EsE zXY0-V`p|xN``0Iz%!mQ~+-JW7LJo4dv}_0$fBu(iOJrs}GSuAUjKTpd@)1%wW;VhkbS3`Ybj4JB%5to5qcYgs}d2D4#g$kMuQ zw69-aggH?GLEgjc^2#cl<03@M47k9caL95z*I8(`!u@2NI6zc+&sOb4*Q9fD*Cy>k z?K06a?Xs~`V}sg3(IBAL0Eehl$E(Ro4#%pttIKK2o97L8+tsuJ5;2P+muC_ML|TEy z7DFx~le4LS8SPzje!R3`Q^`rdhK75Nus8<(3yHMEvBSHnzq2tS8U6Pw7_pO%L;}As zejb1U=!Lp`VgQbq-U-|$iQ}3|vKeVMC#Ulnx2ZCIRGNLjfB>$JfLf?TogR3+lV-N6l;@8NhtwRC@og5H<3kK7`pUE3Qr-SXa;PzFsCw5$iM z<u@kEe7JZ!27AC}p{{>$~l-Sg3FRVBwSPeM(n(yN4 z+Pv0unLFM4OpJYaKF7Bn{T(g}g272J2q!k*_bDQ6+|#=E1T*YkxhlcfciF_(pxiFF zh6!e)w0(6k2)e4T@$%8_xq0lPGV4ylMP!;H( z9T1pZb;M+_M;aQD@1U4c?^6^K`acXh0i5k#!RrQv)&7>ct9#HK^jV0IjCfTSgHM7F}f zEr>-08p5sNUVR+&;BmBK6^AcUYq|cII1&a8jfS$ZvdqTJp|PkB2PCgeEfszAT4ZTm z^SxySWqIMP4}?j6T?O1^7ZfIYSXLvFgJAYhzkQoGf0M=@4#bsUNHl#oGX#gFvZDn- zV^AqQ(PGKNMoN-{roTip*rtR8YanRV!BN#n%E%vo5b$h_dg*9vP`sbXpk?znLA9AV znXkrP836T$?8CW8#vT|@u)%3psytb?`zagS&HbSRO{;%JEerMvT7o1b5mRhXivVli zck_3q!5#~E3wb`ACghbhEyA+ro@uN*Q>V+IrEF7cXgbpb1=>-osy$PSvG6l53jPtR zI#9(r6Kx2;oON36s;$9v#>Fl9+S+NO(*rfU)L>djt3i*;Q$u)Z)fnHbYF-+R`kp(! zSFV}Ax9YT-+7rGa?Zp5|0fLU^!sZSEE4Qhzse@n2r_W7W(OCqo_0`yS%bVr9?7lIu z#_s&(o$VSM$Y~FYDQyzR*g;N)dh06rDZOKlaob8YBg->hQ)yVVflbrixx6bM+UOf> zyi49J-);BRKx;dTR+vp3K8v7B(iXu0q~WiU&a{OvV3kjES~G0Yn!7eCKVP=QnH{_C z?xl5+F85N=?AejsHX}Lz;WaawuF}#shbvk9SXXwU7@M$bM2BZ^AzQMS;QgY6$e_fR zFCb=#ic_?7Q$53E?i2vY0-VmV!64^vud`wL{0U*Iqz6L@3VjAAM=)#4Rx#=Y%KwtUEeXd zu654PvWg2Ij0y2TeKouNSM&0_sL>Fw;9(RxHNe$fsy)k~UUh2Q zH+A&ePo;Shi#PN16qUJ~!8;ZfkWk=A^T=lYub)A0UrnZ_QrYzaKU2Eh?eS2(iG`T9 zs_vjN`QAXAV6<=F+U+l;vg(WDOv6a?|5Q1tB9BpLinTJM2mh16gHVD(l%k_6WM6o@ zkKVDGG-MYD7tEwN*KztSQ}v!i{vAgiqk4XBZcOpOlJwbNQ z#8V#kqdHH%r|S=%Q~>Ee0AU#j*aXlr3;>8>fSoZMuzfcIkQAT^1#D*8cSr^{Gy&EO z2=KW8f)L<5>pxdKHY|RR zurG!K_E^X-)C2**ivJC-z4fN}uTQ-;i`>33O-^=~dHoy&!T*-(TW=dly|qj(S7Q!7 z{RHMJK5wq#liu=Q+_el2jXRpbZ&D%k&g$DnCd_0Ca1j4>C;#@I+N14 zFR@jE;H-DfCXqSWeK*7Vk+c))K9m`kPZ8@phf&Y8Uf8$canb?gNh4cg!be=cI)6zF zGqsgPDfz4}E`#Icwldl9tyDhUC}gRtQ@vV$LH=MF8NPzz0U|MB?UpbVrvapl{g7nY zOrua@yVKpI)_3GT>x}|}_?O_6zbZY|y}tW9=;|fMvm5CoKVvsq<(rr}&&QJDFH}8h z6;-C102xt_Q1vBf$p*n8)DvoF*E*6?8dhV_I!hh{#uQlS6% z_I-iAkt(e?=I|=NH5)I_e`#`gPR!+xT*vsUZ8C|e>1O>pBA}JtR`9b1`}s)tmijo$ zN$&;^GQDwc?lyCvM?^xL>s_@MxykTt4F5ka^~2z+#nR)U>fy{R$O=4vJPySA%YFM9 zXWwv?koSMjy!oGZ3%lO^Q|?!I+tRMDzdrhxz$yUDuFnao{sq7RKNm1yZcNrJ`sXO=cf}Y-&#<5W=G;GplcIt(a77%^QQ75Nu1K~k}zVIDpxMh8F1_gT8{CxEpz*Dho)czCG*1jP zuu9GaYyy1Gg_SORclE8e?FCrhvP%(K+f%z1izP&NFL`4Md1eF~dZvxO9HtU2M7g5) zru%@X__Ut9N2W^QjGMZ!{Q# zaNqg+1$GjEA}dOJja-=_q#p(N>vuP@x*B=wF-n_JvnLYLN$&3kT1*Q3ws{c9C0R_I zBg3$R+*@2UNubawLcpa6G>_V%`>QfU_^|D5i~-W?V+&w8`w9;OXfW2WgHi-^v}0dQ zAq0f5YcW0y5Ph(jVS=QdHa-fZEnr(PfPqHgq0+=y!wyOj7ac87XbK@91VJ%=P$0@@ z4z6T{OH~0a3RD#{(iz)oCEfgCfCb}$%S+o(Anz?bdHwqPI&AM4kPG+j9S>KPxO=Uj zPkH9Degblhua&Nqjys>i8Q4XX8%iQWe+)993{@G0S;^moo;+mbZefY#&^?|d;QX>5G zylh9j|G}`c_F(al`J8us1rx0YVM!mJ$IV&b3I2An%!BC(njR=_KCYD3f4bOX zOsqf_xz41mjm0&|1gWP=jvYCH0Fj!z8TlAJ${yGH)=(eOKVh&f$Z?PD-EZAdCc4T* zS{ZwTj4op(3zqcpj)Fa0@9)0Et09R`UynCm$E{fB9__t#JS6)_L>W3mI$OpQ9;S9@ z`&i6TF#!11%7>s9{#d@>(WOBnl?dxg|1Mjl^p2s!J8&ejSA;df5i7RQWH1xUboA9| zkdN~6prNB5<`|kRBNFspc7z!q7iFVn&KM{#y+>y0aos32mYk+e63Esw0iPf69W)PO zqhX*qMwFBa1^|@CR@V_xA~!kgqtq~meEUEc1E>wKhoA{X2a|rxOLmn2sK_OF#Gjwh z(Iq0?NN#A2SOvl?W@{FBve!CG@fk&I1am#AL3kW^MFNS*J z#QSh$6ti245QDcv5XKVZQZl0Zr8bQT1fX)jCaR9cPY>1yS03eP^ce^Y-n-$f$-`}b zNz`@a0I0c(nZJ+IV*F2*?QUG5NoFX$)LrnVv}MRG#`E&Pf+(tG#hg_MRJ|@!a0DMfr0n>sRgLbnfEfP_omDVR!$zN_?B9|Twp@m?&M@!mH`IsVB7Zt6& z-KTV70bT>=y?r9u8ZqIc@i;dvSL>w;O zh{IS3OxA8wSz}c!3AZ^oyC=2HHTQzCHbtQ7G~nxV6m$yH_Dqn0d70p6fTt5XA$i}i z8-R3KTCfWvcU?Qd=E{W*L|muL{6eYVm$!<-$)e zl~t@8C#a67rN=Usd1fPLGnfb=0;$AFc{11d1eEfuw`cSiWNZHzcQRd=Gd0`J>MbX> zhc?2HXRJ7Dwa}aEZdo3#fxvY*!`AM)3=>$}bKYM{WK)M&=*z-W^w9aJtUql!Tp=tk z81Cv~nyEYWHi>VyM&cJD@1FOa1Dtz8a27ov^6X3hsk7VsveOp6Z2EjENqCq)|2}>- z=ECAd4(zCWi6}0)`|3#(uA)wQIK_y8+0CO=1jwt4I+7b}dYzNbgM# z9kBaP*D(3utn;F%sxl!kuS!tHSNGIsCI*)oeWz;AVI3Jmyf>bInj@vCO0`fJ0`x^J zFb`BN5&8g8M8m590inIJM{Fe~kHa#7gC!74lTOPvZ-_2*l`-Uy3+W=V+V-Qd4}d#Y z?VGK^QC+R9hB0o5Z>1C&KAl}H`~svt0-BqeQH@k=UvKp_K)YHobWbXZT6hC5Ayc7# zhR_(+06aD=Z&lLgBgtu2P65T0;%#8=ngQ@Rwk#|*HX;_^2oPf z$kJgHb>`8t49hUnv{u-qKA_v%ZC`m755!`V*6zToBbi`BHe1!%ui!Q}G}^3he_4 zB--rYp+ic$0G!J<2mTIQzU*_FYlqmovrdtRY7)fZhnh@PLe%=1Y*hO?!qRq7YrRNI<2m!ZoSWG%<{wLsbHh@^*F%Dw0e)oVb>9MJ--b5`$PJ zSYsc+@uHFli5p_x z$^0}FTS(9a+^v>^U>`I}3?0j7!TLU>fYRy`Qz$bTcyvwCt`D<_`Hmu^4CO)hOrO=- zKik?}YI25I@4QS(pAeD7_KBJ_6Ehji$nW&S1Y-H&Q6i6aO(utweDYx;Q{9s&B*K&& z5z}7|V(^nu6luB~YW3pJYF)Q=S6dzRWSh^7m(NYj3Ue$cyJ2`;p_)^N!WamLvau{c zt}Bn*pnrz%mH1#;pqo$@Le+usgV&O_nKIUK8+WnA5m$T^q3UULF;-Yqb>LEjrR6su zva;2+<4fE&*A@@KK{?`O#}25wEqR+m(2JYJK;;-9S>X@s*->7=#&A_ig;GsBTqVzYC%xM{|1>s4zu>sHjKnY?@Q4#MwpQ1C}B7%dR8# zg88o#8TCzL49WC2ZT?{DpU zSK@v44<5rEye^^H{RhORM4D*aq9yIS8@m^~YnSmm@74*6BdZSkowvl;N&j?u+!5v| zZ@7!o)I^NWASN(+=<%J(rAVLY|72*HSct5m*D_F^MF;a3HH>bCSB2lhSjOOPk0W8| z7>SI0hO_Th^Qhd%(6KrD3o^#B>K(@Oj~{*+W0Y}_ae@0iXE1^o6h_!g<^EyD#)(_= z3F8l1L-^Iw#Igo)>F741V`eL zqDe0F4XLtDgM74QrP1)2!RavTh>2#H5(SA8 zkU%K33CfPx3bz7y)(SgnbdtA(Ku@6@s!OurH{pCieigf+~P1 zfDK2R$0|@j!3TY-IL4<5W3vrgjh!d)rRsp3p4M3r!c6*M2KepZ|Jl>`n8O^G0cIU-ON7HD;pP%(qPB{eC(E3<9y(OC z#b{fU<1sr1Hl}bVvJm*p>O4I#Ye*mk^bMrDH60ZqkEXi@k*V$*-^dV@lYKWZ|#ne^SB4tO?li8Mex5o~lm|e3b6UUfiBg;(F!M?j$l6N+ngp|&jT&t!t_eL7c(KA!a zHADL)Lk6VV?=N$7pIEHWxQeBe43DEA15#M@#UMJ$l_8$1^X%5jkL-2~DeUs@}o}Gg+?6 zn-t42SG^dU)ZDPeD=A4HgQjZlPYfnN0}3qSZByp5WIIRDg;c;uL}}`Lngl})SO|*T zfP;y)w`y*n5^wNi^^-EQPOrpOIK7PNpKpC!xcn--gIYQ9DIxSSpFq_DqLURyu)Buc zQ3kY_1>O{AqC^juvs(eky-o#OW+!cBM^_`90EDblDO*y$pR=T)kM;hZE1nTvm@imc zx7O1NSYjmrq^$f()boVJu^k(a)gopi=0RfGgsd_7)Xv0QVeTBqL7$PRM`xu2Xj+5C zPgE!}Bie-r4J~HZN;lf*0gTa&m}jSA37rx5*V{Axl~@nUeBDjTE{Pb(aaJK5ylRNC z1ywzBoUwS5{)h=}9jgE{X1L9l)*H9uJ2%FFpuE)#yNg?Ily)^1Lzzn)i_G}N{&<)r zxY10{+F3WVS>WYjp?suZ z3J-xzLppmdV)6=beZ-YoH7m2)^~&!2uzL2XJG!YUqnE-dG)lK#>*$$KM-4hKd&lVs zb~uG#_NI(zYSaMEp@pbw_nADCO`K*Qe%5Q-*nABwT2PKSdlsr_3RAd7@_fLb zd;)!9SjfuLl2Lh;Rr?$N+TZzyiq+^Tu|Rdu`dMTkK+O$b+5%%zXI)0EJ8BO7HRo>Y zF8(`N!C#~;V>vN1d$k0I4>_4nTgl2ZLD#I1G^lQj0wN)yLfRW$+kGGw%YaldQk_b3O2x6Q~nx}4%q-YMzjoE3)VlLwZjIQ7|#7{aG z1jRXb#d<@t2Gf|@XpW|tPDLaj&Mj`T!IPye7pf`*74F1LKG_Z1vq6~X8KB;FRR1uhZkQ68ZprvAr5Z87?~J#^V1hsEm&IQo*{1HFcZSi zmxMTqO59`2sU@vqGW<>)mzU!zQ8E%sI)If>(gR`T~qN63>VavgdoRX5qM=yILzJJXPv=AmWa(*grRO0be8 zT>$}*6vrpcSsuxaG0zFgAI7Lj1;u$mqGd8we6HOA?}hfgI@Gcz5`DWJ!5Oe%rm4)e zsHPdR0Ms91Cu8{lQYC7AxOUbI=n%o$iJtk3;$Gh#215cpQ@d}h2!xhF!9yJIn0ge(ua1+kTOwlTs2n&ti&DbfK^k~o=v)%U zoX;-t(uGSMH*<-47$~H(ocQL(#N;)p7;;x@@-|!B%H@nC10dXx6CD%xPq`=dzM){ic|>MXsYr5-HImLQ(# zT3YwSBtsS}MCc4i&MIPDIl|?zPDeAUPZup5RUqsT@+>;*uJp*(UIbNAXOv9!Th23P zn>ZA7H2fZoL<%aj6jAjoB*O)Pr&A2n+2uVnYt`{yVl}sEKgSs%2+6!8+`Gf;=S%Z>aLw@ImqceG? z&YClGc98m+gR@&Ft-pjYo1bQznnB4c+~omCnS?!G<1wp*_*_D5C+NL4$IAB6N$Xh9 zZr1rMSY606c0Snp7=+SeZPx#@VRxtM7+_K?d5$Smb|*(0@7M}u`@}HOpfhX1OZM() z|B+F|Rv5LqkcyIzuSOm<>U*czrF6g-wHlN_(GJa(rbRjGaT7Pi8{EJRDyeK;!C<-J zF>`Gq`m_nbS#AGTCDRQX4PLg6!3F>~$Ju=d>dDeipb?2?vM)ZT71u8q z^hPT=|frccUpB<9YmA~E^|O`rMX`jYf}dQ+roklyoSTk@Sc+k2idWj%QKSeLVFP4y@4178fm;x< zGq5?0*lzF;O53D4ddyRoy*Nja zYtI+&-ZuW<=kCj%PZzbG$2+a8&p-bUf8hG&?TMP=vgY_(rJ1qTW5qLtPIa#h9D$FPCM2ltg;Ua^0 z+Hk6qJ8CrUM1yIgVFTv9vpP+4OFkt|14nW&dm3*u4Zp=uJq#8yNiP~a3807(QA2$S zaHDSncX4+bnmH;#8kjX}WE_+|8fTdR!^bz8$*J9$hlGhIJxN;DG+R$HQL<5wB`Y{d zAOQ2Eo% zN?dW4C}*@-4nTMrNLK?nZ5T>JCOps~qKD_ZbD`4qv{WfihUD_Nkl9t9CM~?RmFm2d zg(Q_$*TJXp9M1$;uZO&w)r0pLc}R8(v_ zksn6k$O17;WjJYV^1OHW8JV-I8s+#D8xdr%&FEex$>qDFAa(kF`2Xtd14@9 z`x8pHvc?W2Z7+P3ZdH51qR|Zq!dkUNTssfT&*I~t;uxEPW9{oNaw|j5fnRPy*OE$Kd`CGX1K=QF{V;Q!OIf>l5in&O* zD(qSY%K8==`A-0r95P~b;|8|_@L_mjJC5y{My_(k zT+C%?d&i&0(Q--_>kSbRf$*znZwM4YC)&3o^i`sw%Pfd3+JGav`x7X|h?A$T(i+x0 zErP1Ypwl7Srt-oHBe}B4l`KRWK?^%22rw_0*&i#B!KLQui3!ls*NcTU?<3P zE%}aJS`Lv#p#5?yqbCs3snFL5rN+!}dl-=2e3CMxkYowm)*%@Jk;80MR5n*f@hq*iv)WXO_B+=@5iUL2&!kR{vy z8vD{DT~-wfomKLLMrnm9#Zp2apKCQ$u%ZP>cLfIL=~yz4LQ;Vme|FOo7OnBh-Sn#g zJSSZIB;+aummA~iw&F)OUqn?^pk6H=hZX5!$0HXP(9FzVRBhKAfia_I?uhfC7OV(A z%P=w(`4j$zf8l?eIQ`7C`G#Nf9Y35r{mj$-C+HlilTxV1OzYA!5v8aAxGgEFy%U$x zmeYFE=(Oyc&Fct#5Dau!Q`nEdU~Q!<$Vgj8_t`69YYz`uU!`I=S(U6BQX%^euvP2B zL!!|A;ZdX#un?1gN+~uzsuILb;0wMu#m3o9efbt&}GrGKn(W~B4-fs6bG4J54f#|ZnmyYsp~=A z`5wuxEJ>`-hBzn^Tu1~A>Xs^rTm&YUl^d7kws{Z2g!m;ddE8%ZcN^-luB!m+y;PSnav^I)C&2{UGf&J? zqL`)bk|k%c!Wgh}m{>cW?o+?sZXqD2grpHbTGNEsU(+5M%nxKJ0>nA*rR#dQ$J|&r z91IyUw6G3_3=t9Dl$FJ{vzbVH>+g0`Ig}@qf!jV4PsqJ=Xvz&<>sE?K<64vhQw^_pthlF}UX^PoD7APhbLL9MG)mySirYA%l@M3~k&*<6_G*Ip7OUv|W zx>Yy+q2QKTQp=rte)LsSuD!p8$~ji=G0bkVedc$b#TQWJTA$mZT+Fr~>5<%KO!y8M z13XA!$rW5h+}Nq-MDgxX^MbcMO4sFX$W#v|8$_%2Ol23|s42~$L+Rzj=%$X+C1ha{ zWe2LC)EHT#RZZ4F&1-hm9Qmji@l!lU3!hby~%=VC-9N8@kmEv|G+e5KpH0PKQ=6loA zXabT@aIj%I5kNrqca(2l#}4lY`iJ`9jhCbM=Dty833l{GOb{l%g{#c9rt7ApBN)(O24r4y0viuz z>wZoF&Td=$mcLbQE!&ta%k+hLIql6@F2ERFuKv~q`~9~X+O=A`+4@afK7HMECdABt z>%cg+3eIFIoiZ*DH=y5AAt2!W|48gc3;O&mgNZi4XP%1(0N?ob8C%V|LO*tWBmr9( zAYgp$`hvyBkKg4-UV)78^Bq0CGokjeyZ`WfUbiV3*30fiQ0^c20B}^fT+78xCiUc8 z5)#(JI~KS0-Fj7=JHv4W*xkfoqr|IYzxAA_WVa!jZJIr6o2Eyaq-_8(M8($~W^pxwMS|Vi~=q_is3Z`g0qs@P& zVv5T5ZD68SY&NBjxHsD2Z7&elEnn2ib2jV|fzwgAjlj-tzBxhLEC}MebDcLhdP3Fjw3`9y2Dx>f7ytJkw7dom-Gd@ZfhN7|3OrCsI9KyZ`7S5QdggoT-}OHFNv8K$(cPTv+4WoZ(7}{ROiaF4A?~<@?1qpn4dU zNPY8%pu|F%LmZa$p(q|pjwUC1-k@Ft=Tt?mD{7^bgq2R!Hcj24^^(ks$tgJb%{zbb zu`5513Ud@KW`Q^q2POs!GXfKM&-ta_ zs3)4!frRD;<)aNuM`Uufh#Bn+t<|C4%91Pj6U0S6}@?~t)!GHVTM9P1?;GduRa8F`@I+}`gZb;?UlziO*m~=J zgSecVC2gMLGFl4MRlXI9F=3NVC*SAK$JHIz`8J2okCS{3~O%CsU>oruyP&j&JQLC5Vm7^mKyadg+Nc2h~-}l2w(?L#I+F+ za8QfSkM^9^5Gsaj3&Q@Cvjkmr-A%XMu{+tB58>X0vKy{J|J{+I5YU1H;6y_Kf~|xB zB{q3BAA`~AGO;APj7<{`hjWp*yvoA!PfPGkNjaK-y$Q)zLxkOp&k|l+^7gB~cy7A^ zB~YxV>}^wq7)9HK<%kftuv-yWt=C!+qp&=8{gC1>mq&Q|B>3X5->vi?L_ken1uRM( zY=ngFX5govVwyFihVfLNJ73cLhu^;Q;Ml9Xb0Y2=dm| zBkl+Yz{l&@cP zR5=kiEEb7Rpy8NKBEcv-F-?W(Y^8y zSq?jILr7R@r_I)d0X2@e;DpOc6}w`he{B<|T)Yxx9;oo2`zCp;(nD8Gw%s#NJT=97 z(@ZtpOfw`n#wtmoWGQBwWsbS#Szx|}7F#6KaZ4?+%yPFq@4x>}nD9cq*Q!*j^HQxF zZc3M-K&mu_R>-r~MMbh?yBij4a@JP6><$}ofYj!rKYa4Vw69)y?~OM)*u2%CQIlpZ zT771Ll9neUD-e?8$dou5Dvi!yve->994?QqsANr9pkiIshMKxfTSCe0`@L(=z5|Dj z96NF9%()w42@X#nlE@S)jm}`Q*c>je2w)WmMPi9m79`u*J2=8`!z+|3pw?)0dV|qK zJ}%eY7ME?C?YRvAM3~CkyZCv-D&s;bZ7kby>AdFiu{7cJVo+~e3B766wP~TX>4Cs% zl}#@LR@=-1b(zhZ+WpRZpL~ArnD)ijllsTM{`0?YzDs!m=JnXj*u<31OA7xxu>Nwb zl#`Xbs_BMl*#(D#E!U(d!Io5mrDBoD zx}2y$BI}2yqso9V)Afiej!gd;%!S3BqO?qVZ^ns4n#YM&jh5g{E=cxqcmqYuFrf-{ zrUWOESc*eMBt^lkFkHG*GkD1w=e9V79w+%Uqo7{r!g(EsAgyi z{jseNRvWJGrj*5Iy15k@N;@2v9?U9KWZMt5r?kONLgn6RqeZL8%~{cA!zpuTRi&~8 z$@$;Sey5DZfkRqB+PdPn=F2YWG>3g{757}jpfal#VsLX4Y zh(hw_T`AtMc4%vKL%L`e?TjvYe}%*2UZa&A#t3n^C8DeOT#lQG1Fhl;i|O7pN{7_AOTKymSj}fy$JhrOPtms9dy8(-EwUM#aUFWyay70)@5bGDY7 z$V|4oUv;0z2EOy;3?8t7={bL9*)=TF#AHK%w!b7Pe{Svmj8DbAF6Kz*muYcsPgTg2 zpe~WZ@-Ra{06IX=&-EDcu9`Z&>p+2ohzXz>5yVzGm`KFAR>wlD-MWCXZG$XK%%m*! z<}j>vE620^pVmY?w_X)px7>3=t8RRh5NBMMh#4M}dD(8OIm)rYm5|1V>)2=z9VwK^H&S?kwLKn*2Esauiy0*Ueml36gj z5wjhb)r?eC;0Q|`Lj$u{Fhd}^KwK9XZD-auhr9v_5feZ&BFOo4RvS-&gop{C84=_( zTbiUmLc|2nj0j@>G$a|Nh^ZNyu^n5n6`Qdg+p!f}u^xpt5dRdmLiV-I@Fb|}vMBr; z@py@GugBAAa>WQLtnyh@EzhLDGM!C%)Q55mPT4vhG>}hTdo68*OJre?ofZdRY+4|A zj?d$>5tM{PZmbb(Z6t0SDGh#Zs)w7h!WmxC_8vE*49&F`WrODQGOca5GAni94Wsrf z7VLRzT&Tsafc0+R6LmZ!mI} zY6+G#L8zq~2COuGZ39Fe3*!h&xDMgibY%C(3=MO+UODqqTA!3Or*A3uK)mdAGNEK$ z-957BFkRYY+t*K$(RZ{gXU+AobXlF*){VEnj;&bkfWu)Sh4M zj%?oUywN53E%`tBJ?W~CDHEMbKF>b)L3;0&A3k_^9xo2kXFaN zFC)wy|C?D79}gDE@dq~EQ_4>Iq$; z4TpfG(Be>605OMJT2*%!4?EUo<7}!Y-vs^foc652dMss25Uehj_1O>vv!_K~R2KjM d08D9PWo~n2Iv_GJFf}bhSWr$*S0GMPMPGJ<#bf{g literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-BoldItalic-Web.woff b/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-BoldItalic-Web.woff new file mode 100644 index 0000000000000000000000000000000000000000..b282dfdd1d893bfdb3f7d26fcccd38277e94497a GIT binary patch literal 52535 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 S*UmvVB})45R3u-EGt4U*4*i_~ literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-BoldItalic-Web.woff2 b/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-BoldItalic-Web.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..eeea360866310fefea5c39103d4210a1eb72f861 GIT binary patch literal 39337 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%0DcH)_bnRyf zv9>^wRvlJzXuHQ_uzgjvEh}iC!O~NEQ7EyXcIu)P%u$>p&2l z)!k+JPGEgx^icPQ)yb+RsJ+@8d@CVKdqi)GVF6AkQ~Sq-L@rNFi&j}g2}4tb%EkEKIZGtkcBZ(51fqbPWuvTf z3&YdM<}}%GG#`3dd#p7N^dJxR0BWH0=Xb2{EiB}I;D1~J4)&^f*;oc(HX5fP|6A2* zCR-NVA`@rpv0RmZpib0b=l*X8vTd|A;78;_IEarU!P)``shTe#hqDB8lUsM7BiuF6 zR^`c8cq|;sLpuN)4(_$!fXM@A{=U9xMQxU(&K*p2mW8EWVXsKKJ_cip|AgXuR*2HQIzqp;pZhr?-Og-!hjad*X(@TSba5pKtRmjd4 z{Of8Zh(-nnH;E${WFY<^H)EN2Y=c_RW^JBekn~3j@3~liR(+ZsokGyi|_OM#zL@*#4$} z_cHLAnhZ@#^@N>#QsQTuy4;gN(^=ULhXKeh(+Wu`#d4|aNjGgtgFnhQuw%8Vee?y~ zx3!^-w<)B^Lc@|^I;W#;puP2~Eg2$jI-UL6zw!&#@@)@oo80%3oF~Og>|5RJoQbX7 zhNZd%ZVYTGpWWs$c7j&Y_O{ak??ieKfB^wt{cq3tg`~;fXCRyy@Y%QYziz;{UkQKq z2jjILCP%4|RS-bHsr*eL3ynUqgwYrN>c7rMecP<|D=+YT{NwdVz967BTUQ&&!I)8h zV+err5=qINKDCKm8BtNvy1CTlVLIK54b$|Z&E+>yK6bkrRg2y@%~VVq#BKstF}CWK z!az3xPK$sZ-{u>}>z8J_gxlXVTL>i&WVi?ir*&Xlv&j2X!@kY1QrQpoQKVJ1e?_w& zS9PLRJo5nu!n)68c*Uh2x7bBamD+;mK;FW(2rE)78cz421!Bq-srDk5h1Io?DH+F= z_^s-&N|dOg%j(U9C|QSo6Da9MtDlHfQ&t%|*K|p9I1(iZ6eZFuP+QwjWRsDG+w8+J zkaBOySVUxGJSr!lr=DIVQbl7n4X0W@3K<~5)N5+)9!(9-X&1Zn;yJ+lDjJYNaVc;a zpTct3Zp+cNmfB6Xki%3qhiKGRR4@fOY-Pprlud6Md8=t%6XwH3#!B&&cERPPF5M&3 z2OedCtz8A!GO5a}ZA+bYDsvrf7;3WUN%Z#->79`Bnd$aFeqp$yf?jJY#?i#EYj2Pn zmNxV{Nffq{RMCvzo6Lkt4bi#I#?U2bZXfMYXB=@0P4$Cd0l?aK0cXy1t2;QgMaR>E z2F4}GF;@db3;AT5`BR7eWI4vMoh>6+qw;)ovN{A;)m*r|4VBp{z5wUp$Ihit1FWf< zE;;7WTGE6ALf(UI4Fr+_Ko+pEQE$k}HXMVw7?(g3CdC5dSXx4N>t2byCF!IHG$~_d zJMt`Vu~n!<(iODgAbPpJ3|1vW2HkFykCYn(dVO>A)O-K}<-{LC#N=2DEa`l0rNQujLb<2yqAf+(M)np7~n^uJ;`sX-IBYP7nEU1OW2(`lTdGqf@{T_ULG zw^39V^;uUKl~&`_hZ0Rt=UP?1xVca&q|H}VL=Xy3jVPbC@*~Me7p0Lg6x2*pjIkrL z7{o|mqQ*c98XE?vA%{0Q?@zU42J*4wH>DO@H2PtMr(41-UbxpY>*xG2%fv3DNEI+H$8^=oWoHy%a5@WtYE9WRq-qudc5^5VGkX)46HQ zc7lY^9MWubXSCkrOXs8+0`SR#4!s;~E2_-X)fjyL8l%d@$oitdNxPC#^ccw_$C*pS=pR6-4p(J6`Tt&MHR4)~yte^;rHP}RoEzvypmWo9 zr&9ccm~s3EXo)14);FFbF|94jDWSe{K z)2Xx3i{c6V2NQ2I8EIUN=@X72&SKW5wd2L^#j#}5k_++(MGvWjNOoCaz|DJ(>Q;!!2qqu;@!c2xyO z9-V?wuxjun@wi?V-(q%?3m_KoDYUrEBOGO&YbCn@CL)FmsaihKok5fvx|=IYuSK_k zjtiHDh}kGC0QzzfVqswzj}w7oK%^{7zT|iTouw&>VG$2C1*inTfIy8ML9Uivp}fnJOUDM5sz6+T8alng~-n0q6v6KDUg(ynPbz>kn|{t z(8Qq}L@EGF11Sj+4nV?O3=j)BA%eh6IQKD<0$5f-$s*Mvna&709jz&&EXHBVMkLQn z>X484D7#DuIJ;H|IQ!C=bS(`HP?xTvpw2YV3u&f0SM;4X(U-|I2Q1l^Wbr@d9yf|1 zaC#?&acYH@M#`{K*6*cN|J!xEn0P%r zGX8R`My&>oy6V*H-lOAyfAzFzb*G+ummG7_sfLW;#UDPt|NQC8{JX{Fg{3!>Q`0lE zb03MWkz|dc)k(|9%2k9F6u}TE3|^ugX%B_QU~x*yDynMgcmk0`)^6<`t}~b{Hiyg8 z(A3h_(N(ZZXMl=I$||aA>Kd9_+BzY6xJoQEFf@V?3hLvb1BZ@y=q}9S^$x<-)mUQF zd{c!GkXTx*d0N~W#6VYTgdKb4occxmS znd*jSu8W_WsTv zhqR2WoV-9Z~@cd5JUQhNunjk3;*yFu`ar9wPPd@C*rF#A$uW!c4|Qj0pc!4fS!b9~i_caVtMlrA; zKFT#Oa}|%om)THqYgnTz(XxjB$Q@wqcGlWokyYA;0H-L1fDs=4LVm-}V4c(-#x^Cp)o@M=UZruVHl_ z&dpdsa95GCOq2)+zyp~1%?*|kU4;Vy>;WJHQ-Om30PG7e6##+52DJe>!+u%q`0WuG zsaule5Sj5R4~B1(y(*uze^Ilkz0InvzD>Piym`9i8}W?cDzcon0u-BrOPz>F-cYd- zSSODnIoNy)J{y;rup_=q(U;%TCx-FvKM#t{a{j+bD>iNjEonpfV>-aM0-?TELTj_I zLi$SJ`H27)QpP~)IY`+S0#-p9SfwO(kTMlg-UVSV2%{?r-&vT~i3bhHNL&CbNRYWM z_%JgdBXI$&AVH>ux>^QgBrbpzB#2v*CJhLVE2H5woJP|~8cD-xG>xW_G?E6B@ZAwF zn6Vwjc8}n@psvqF;fut#OZ0E!l@IIIsDTYJDhc&A5JYj+12F>D&_met zroMXmz)JCZN1SZcG_Xl)j5EuXM3NOjuB{3NEHw@`0jS55v4K@sg``+_$ouI5P2!sS zs?aa6YvTM!-_`92_H-W%PV3sB{`4HY#Ql;w+q-?3Rej&vVm3G^TZ0XqY}GjGb!sH5 zw`O667{m#@=EQ!JRBI%l+w-&8d3yIIfbNnfH?A`qq;5RtCTZd(0`xG!wP^#>h{+RbeBTH4#FLJ|?&p tB%8A_ki!bB2y*tSJ%bMb08D9PWo~n2Iv_GJFf}bhSWr$*S0GMPMPDuGkn{im literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Extralight-Web.woff b/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Extralight-Web.woff new file mode 100644 index 0000000000000000000000000000000000000000..65b37ea1fced81c2dd6bd7ef754b574185fb7e55 GIT binary patch literal 48892 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 literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-ExtralightItalic-Web.woff2 b/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-ExtralightItalic-Web.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..0cf9303093c4fb9119a5ba0f3a4eedeac1a00bbc GIT binary patch literal 36861 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⪻W#Xdsy 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 NSWr$*S0GMPMPH@reG>ox literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Light-Web.woff b/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Light-Web.woff new file mode 100644 index 0000000000000000000000000000000000000000..90469e3b80878fe6ee2ef759f4dd7e451a112de8 GIT binary patch literal 45415 zcmXte19WE1@9nr0svqm000E1 z+K79Ai5rj@0DxEg=HdJg;6y<5%pEQ4003CvH~##s!ze*$?Vp9Mr}?+;69B+`4*(ct zTq_yqwKOv_{r;}`&By*9KoVl^T7DD1X>s59k8dD@A_u>=v;%s4_u;!Q;JyF=^o=#A z)1|G0$u}Q-*f-7a8@zO=sDIiSd3@Uk((o-u{2zd;gLc~+*_iD z?FRtHJ5s)F0RWaCc@4jazi7efz(u}M7y#&hQ~b0gefZ0wOWe1tVWrPm%bqT^vyZ-}A*o1H zHs2`UTu4Z7$xUoP()dt|h*jH1u|Aq@QDQuBHk6I2wpI?!_b*I1e?z$Pza4Tl8 z^2M4@3pf5cP&w5EgQ*M0qc`)Z_i3)&%0D;H79do;g`zWb-G9`JP!w$}l`N2jVq8Fg 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 DbV{zQ literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-LightItalic-Web.woff2 b/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-LightItalic-Web.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e4e3404132be7357444ed68c3c3e7ff3b290c054 GIT binary patch literal 35425 zcmV(+K;6H0Pew8T0RR910E%G%4*&oF0f5{90Ey}V0RR910000000000000000E$Qe z000>qf%Fm_p-u*10E##WI0=Gb3WJYag4}umHUcCAk#Gx$dH@6<1&DVCq*e@qGF$Uu zkprc2e_E~h%?NZG0uasTXin@q73>yxbyw$RRK9^)bw+nP5JW2dBbELC|NsB*NEUKf zyAx(NNdWZ9q1E>KuV_w*(N)qJ6(MX|i$awpst!5o8x#i{Da>MGnv;c^A|?Ta0W%lf zMU>3oWc@9QN0QS2n3KFSiR-d%F)B*K#S`-KYhae2Z8yCQxKub`!hFEtgpVg&40SZ* z2HC!$3fa(|A6v1|&L!1xSvBr+4H!{{`9bmV3TgYVA9T)==gvXd{4CODX zGxl_f^6LGcs^y=-%m5e+fB`TF1i%b3ixjyc6>rH+ndg)!rzkl^$)Sqc&MEfVqLYfo zzSeoK@^iQ6*V}8^a*J`FEF^nDcL)0ZsqL2D6c%AF2#FDcdvD3# zLdyA%A*jNo1HUkz0y+KDs?CfkWF4GS6#9A>=E4^c0%aP-@E(K{4-}H&^!8ozM`-y- zozXKQz2us18F1ee|6k$m3kNJE4)Am9hXV#fSaiNMu!v%8V;fN;qz#P3iqkXxou^); ze&epKz&p>&_M$!GA~$t?Z`qL(JEYBe9bX=U4(KD6zpjuff}*@Dy3_RfN$8>m5^B$A8n6so%3h=*TN=6>h1j@u)`giD}H zodyM*X-R2WGweOZeuMC3x)%D!HA@z#4A~yBJDI8j6l#ok6dGS4YmO9V+AfY+yqBq85yFCB~yR%CN z;soppG)Fm-X8=;3k_zC06b!|4*3n2RN^g01W1P*5V=)phdMZ=)7k+rz)ra0?|5@;# zM-R{co2It^axl`2@Dd(>5~RqebPgf}0bFgUx%0){XR(h0jl0YV9k0F+iS z*3O-ei-sYE%BfPN)4OO~I+t#JTs2guwy+_d=H4um5UR%g%)IQjn-A>DhoFwr15)+> zU)8dG_k-Y&3TqM0UCc!%abxHz@O=s�L}r&5V|mCXh4ZU24*5W<%x&z&R4A4I%Y= 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

    nJW_(qp_m{+!>RT^;H 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 FMPJWq(E9)Y literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Regular-Web.woff b/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Regular-Web.woff new file mode 100644 index 0000000000000000000000000000000000000000..63a3e0d31e82ffa40eb3cf5d3318f443a7a88ac0 GIT binary patch literal 48540 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 literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Regular-Web.woff2 b/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Regular-Web.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..11dabfcbac91b3e77ff42d12b9192077a17bcf95 GIT binary patch literal 36525 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 literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Semibold-Web.woff b/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Semibold-Web.woff new file mode 100644 index 0000000000000000000000000000000000000000..c1107b52f3d787175e93c5a89adc8520d29b2afc GIT binary patch literal 53525 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 z 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%0A$?0Ru4@>m!n_srMivP4_1#v&Cm@QA+iZS& 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 Ag#Z8m literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Semibold-Web.woff2 b/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Semibold-Web.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..438fefc74f9888f8cc9469ba2b00804063d98fad GIT binary patch literal 40841 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 literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-SemiboldItalic-Web.woff b/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-SemiboldItalic-Web.woff new file mode 100644 index 0000000000000000000000000000000000000000..d7d8ba1f0285e3a8048cc2a6b11c1f61fc3953cf GIT binary patch literal 55566 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

    _)zpZN*z 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%0A6ja$L^gHlYJKsqZSvNlboYBnB!c|K+rh~7j z%Zgesr#jM0xP(G0aH%!^eN1A!ZI>y@uvULoAS9~o{~|(CHSd11pG=7Ni3{*P@w14}lB}TZddT9U zU$^|mh=2Z_$=%%V=3WPV8`sGIbL_H`H&(L5FoKMzFw=Z2$@n@Df@QG<>S<9-yIS6c z?*xXXR}lx34{EN*hfaY`gndJHp^+Bappe(C<;G?mJhjpsvr}tXL#$e)PFIF7c~G-b|47mdhBhU%9Yz>bLS!b7WQA^{S^~9{YRhW>Pg;zv-bXr8|wAP{uwSE9o^iBVSA&7VS8zCX^h;= zs>by1)Y1>Fpy~X%pRvQ_{b%Q4>Tvv;uM@oG8d`sAJ$;7wX=wV3D%!5!0)5V~YL-h! zN2ePx7jM-t7st#D7pKNW;?xW=S8zJ|0MXI&QgdBLcT*kR9h**L9o?OVyK`c*(G1Ue zwPYU6D@r3Z)x4FTfU8m1QdiB5is>HsAiP~_RZK@gUi7vY=LfcFRM!8#P&Y!Vs(*fg zs-9Z0?r%oGakQ^USQcpMJ(7(>e#St!3-D7}Ty4?x#yIy&m3 z^lsr|>Da;614(gKEie(sCHA1S@UbhQg@{x>!3?m~!`W$OoTKb`l)mSj2B*ssI={hUIJb6y6 zHEMy^Oj?XKE8EBigBMBS#3c=rQZt^e&xZL0T4;0H(jY1UJyhs15D zsdFsLvu-H*imfm`-IuBb0?Le9MM{lsflpD>W{4LT#RjUjmFyp&ZGCxlBMn}yrB|`H zH2x2!*#?H{ZU5Sk{$?%x1?HO#>95z)_cGsJGM`>NFV=91Z`N>%Reg@8zg0``Ei_`S z-l}1(j)j)SV13t9U0-F`U-1|wHgAnv)rhp#HEtVQ7-6quP>{n%nr5)SSV%UHX(*x^ zABtokE0l<=P{JUI5f~I!DRPVAS}qmm5`E%Ry{CHn75x&SC*9|><6xIMrPIR~KfQGL zOZ0IZ?sCrniGV4*nBU}bv@Z;YNyiMd`#Na1k2Mp0dkpQYrQgz!K7nXl;q;t^d2{Yp zpgTy33mnlSbTRlh-EsZJFMLW%eMH8&_t{_1+Y@UcKA3N#17uGue*U{9o_`G;C(pBU zf94tKo>?A!zLER=naUG*&-dK>yk_$IZ*b4Yx#tg(-z(rb{ry+D{HM75KS`dqK>0r< zzyB8ZT*3W*M+KkesGYlp-Okf8Atnjd=s~h8cV2&^*)nKx+;(G@MkQ&c2^z9o4Ojh4 z*`gtSrktf|S-hZwxgkW{5;5YBjpNAV|NDb%ErXgZ$I-ng7`7)z6UNrT zZEdmvSzs__WAEbm?3ToM#?m^xv+H_K+>-71zB6Wuciec5{P5O5r}X(2XDr_upJ=zE zb(;j1#9-7H6iv4{qg{c_+7A2otX{=AUJ~uFxD=n@MY*#GA7h_~v9g0`kALqh7(q{dcjVL&;pdAj)t&Hc^hs3$e5yw~uNW4$|i9lgz6;x6=T=S73Q zDPA-UU#*BV0(LaCl@DZ3$(MytYmN-YP+Lk3qzh5LIgl>AdQxZ zLlp9h0rdDJ1{nNi9ByLTMUDq76-cX=3Ow|IVTbSuRwV3DXO3k({oA`z>k94%kuTv0 zn3}($d|E2=6pdED;7)-J`p?ysji`-g-iao)wbiIYXeGK%=}~7l^?D4c)g6(PzBO%W z+h(!1nIu}fCpeh0D78w9%9se)MS*q^7k4O){V43Spu3GxOx^!ww4qgZ-ue$~KK{}F zx~utd@ng-886Pz~j=!M|XsU7^@hWG!^WBd=+MQ?c`QGoaSF*<$6%%G`OvxFW7q)g< zKsN%CZHa0UvnN$OofM;D)k_{=`T~#b=qrxM_&m0=c#ZXNVfV0~$MPlFm3#ADJBR%& zkFR?IC6#trab*2^o6;#O4o_G9!QH>Dpl~W}1N(=)?%r)(3Xjru_q{;7BoOdg_F|Y} z+G@0`M%2RrDUOtj`0_lMbokrU2cJ~>FCWvMz4@Yt(GND?eE9r_FwXFo&@Vn{zXM~* zRI$aUlcI&ElalywUV1ud{R}j6SOxTf(}LvsOw<+*L<_Pz#L=OtY+_B`h0KZm;Qqg= z&c9>)nJSXZn0@|yp?yP_Lm%yr_o6Z?JD@%>9G}X8&Aajn2HM4UEQs2q zaB%U#o?Wiks<=eKn>zOk#hVItipT~B0Wz1(j_T2xtqOU=xfMDJ>f#P0O@F|Fr0UKc zL#=o53dPLep_C$*DW*g5o|Zesk-@DUvDHQIU@?^sjqcoM?OdPlETE3|ZF}M!k=C|s za&@Oe7a53muh%F?ikUSXc4G7X&)jKtirr7nBJF1=q=0rE?lszzxD(HRwZb!>lMYGZ#ZIvmTa?8ZlNI*sUKSA5anv1UfX z#oZ&Vrp&4~>}$aBFAuRlW<2%tC6_*r)GV!byHaYV5g5pMq^Np^DrO?Q&%oSxzGRvV z>;_Y-@jOz&ywfx@-52$_kf4cgEnOF1Rq&wungX%nI-PN{J3N}ThnDUA3~KAN#9Zo3 z&XVwGC7zzmZN?6R^E02*#Ya<~;L$5waU8C->!JbgYso&HFKvq!HSPpw1Ds}80-w~* zJ_IgdanG>0kMOtWG2WS;XL4?ZV4HxQsvkvqyz*@|=X-V!H1F7NTzN$niTm` zTSvpjaNZRN2ZyIp!8QHCk&bkGcw+BU`K%%8(za(zF}JoS9Ss#zp-7L!kQhm}_9k3n zOTL&@SAt!{a`ZC!`$l}Ju*kJ=(xxjlk3zIZ0(Pvn4K)WGkXL6%^CDG=1H z6gVD3@6C*qV-S^D+Hhd)2Qmn%OLzB@XOZgDjVGO<^*!5roJ~yv>t}CFt}Xh|ef&sl zaFyP;z8D_M+QZ}fK9%jnXx}Vh5B9jXcdFeSGda(GN}pVo35E_|=}eeXqw)MjgZ|$n zdN}^@CP`n)=B{AZ@FFl{rI-%p1XB-lu<$H0Zmo))EsJ=18kiGf@1)Sq7Mh?}lnk@@ zYMLoq^*kE-A4ffC!!zGZIY-lS7}S8x^Y{!#@+Yun2|_2z%QdK$se0JO4^S=L>OM_k zdCtP#fr3$cawKl>4{mFh^~u-mMmO{P4r_cYZT1cBDBR#lSTkKOJEG=nN^`VDd>Mc(5aKX z4CZxDHSQ$YytOFqB;Lw8i?5QIvRqU>c|t^DePXu_L(aAQV)4XQn>-X{P?zk!z-ig)*UU| zH~PY&$`|;F6lmL49CUKG0Sz?oAo4*9V|fzBa-@obop+KYIm{c6V_B1%(;Y#P6uO&e zP*Z&5i-erPPLwD`Ni~c0D}07Gj&ng@v*BI5rPdj&U4uoTRFuL*+al4|g>E`wa!QwA z9srXnV8M*>-b0rhlG(`rcf_fB=1e1kg+efesP&6UvJ&c+yBN0;TO-;u|xtI~5Rp>62Pt!Kl=e_t? zEN%oP7YEmrdkfZPt<}3_uTrZrYclJVu?~?^%+z$;8~%@DYhnQJ0&REoscTM;KJ>^N z4@s!Dd)oL&^GC&x;Mkh)zhC)CZ@&NZ>Ha*_Z{OS~8)JV|k7d8~-Y^y28%C_I>h>@d zJt@X;fzvat*k=%jI!64CR=HAQ)i_dO?JbJiH=ml?jUKxuHNaLJX>A25VBw6H8tzKmbOlrUJ%H( z=Vke$S0NrxuYcg^vCG*eT?Bd6E`=drQ;u)E+iy>HuUcQ}yZWHsr@80uJ5L@|`?Ysh zeg`x=LVP^nVWHkXJbp}|yav2sAIs;S-thQfh!8+Grhrd89ujh)*Ez33E@ znnI5DVl0zT<->(YFxD--TY2x{;L4uXp+Yj(I=oY2>DX8>h8(Jnyf1Memh%NuZTqj( zgoaW*8&vYq_UvTd0lX#vn&-$FnSWz9@&8uo?yG!5jCMUgyi7H&doY;(#og^Jzmh(B z_Z%9jaA)e`*b75YwyUbO62@MvwQ8$c>%7zW#Kh1iR*jY%63D42Rf0Ay9@Ld@N<~@Q z#-bCb7|nDRQ`tyCzit$rRad_5FpQ-pcl$^7Ni1z^+hds(z412Cx*xvktjTxrmg4?p z!Rq*2P4w;L->YxSslF{I>XdrEIz`(NRydSjkkz$7xQZVL`&tp34WpUSqi_oZ{@s9P<$=4xHsm>arkQ+me^PuN{p6$M2* zH5SY791Xl4>08kiDyrQ{?%XtJh?f#M7#bY<1rlw}gqn}MB%n7enYHGE#4>e!3FX}&d#1#QuI?=IfGOS}CO&o6Gvc{cj_(n(0 z0pgJusi0KG6(v8pcFdL{WH(xEKiS{fjJD|cvqrbuV|4o5?e4CK(VXlHxbtD7InjqM zn>zo(X7r4KK6kabyTaV_|F5+xfo`ih)9=1#$<|`+yZmIy+BZwGWXZBEuko5Vb{5BR z5{Jau_XS8;;}k+#$O(j!CIkvIX-iIF+G5KoOwUjP3F|OSUG`FU=u9asrJZ)BFznLY zy7@4kEg`~TnPN6%@K$p`A)CV%}iT2GzBH80BQyh*#OEy{ug zU)CN&Pd!Hb6o$@=TJY2M8tgAtitJ68r=e`*ST<3r1IlK@oc?=7^2v*2rvIJ-%O~%@ z=bq)i*Mt4{R_FZp`1?r2qd~?7Ut;{{`N4xCBxWY&J^P_rr!tfaRPZVjI2slLt*^<` zut4i=0wXKGe0C+cU!zs)WdgMpMi4sL8mCs5i}4wkRr2t)`bvYt zBR9gU_hfgQt21uxYIkjQfq2LBF?R6mtLEP<1#c=c-d`hh9hF629+u|+%OUNQ>nzF~)(-g}%C&_` z(?0MPwwclJOD~;9EHb22^g95aP-Ny+gC~@k4q)5_T$}M&Xr%h->aWxPZ0qIy&!W`r zbOQVz_5^@mH-BhcKHH~HgK_c^dzU_h&nOT_;Pkk23K{sY1k=N>7>`bkM`!r-6}D`1 z`}8f94%Ad6W7tz~xp*ML*2i)leNN7!4?W?${qQqk-lK1z@6!H!tEp}{9vX?h4V}PE zrvWXzLPxsQCE!KPr>|;2l6~)+dv6-Ue(XK8lui}&cW`Gw9P=o&O~~g*0e*g*lN>D- zWD?p>UeSOB?0etZd(#2(E=J(ReR==CE3P*3|J$7N|631E&h-C-du>{FdH+A5_$&DT z^|L%D6cfi z_if#~c9+X^+|oI?A$1y94;;$;>i%mUYQTHa3os9DE)P)%V?(Qv5|4(PGZj*yoXh9o zHZnqzN#?f)4gojG1nFtEgAJGFF^*y$WBcKEl+KaHn~13Gdnb;fMF^cSEdvuyH*TRskql*(HY|Rl-#s^ z$Xz2DVdQ#?YG>m>M6*_`_f+m`ZdYm+v=27b3J6ck>#&Zsu#SA5A;Oh(WjsSdpp;q=v$fa|f#58h|U< z1S{CrKA4IN@HY|JC@f&Kln1VTR>g)T(Y#>gE7sg23LCUIG{u~Xfq zS-X=t1iT^3RU^*!k%X*GwqzYRP~x((p`NJ8Id4tlSXG3LHNIpGnqpD$^#|m8S9zNx z=Z!-Hq5e86ShhmCW|hZR_EV`XnDW*xX{da;(y4fyj)L`OhvH$T296_SpSXxVM+K>7 z*#0tD|5629lv0x>p&d4&&M2>~Ov*5h%O$$m_C!8SBd8z#-t5?EEK6qzELb6sY}8%+b!1CK|h#v>>M zxgU+!PmR}On4T2u%1CIks?3W$8d}k9PvrMY6;%y-)-60(e$`TIUD&JAo0vUiwbe#qci_~-SF}1d z?+Atro@j;KT)sx>Xsi%xEshl%09rt$zm!^~Ssh)f3?_*}7Of{KdLOnqXu|U%jUBk9 z*jl(uAc8F_LoG@JIc9Pz!G8!r0|!?m$~iL5sd!y+^uPmsCyxH^Zt;ES$8@jpg!qK` zBp3xtKm0KBqt=GjhaPHeAm48f99vD;&cH_@%MUm?o)rm=Lijep6icLRh|ZIg|uAi#lLO5r_l_0`sRPsWRj(Tv;Z<-okvPXepr>;%Qp)M_8aDk(9`U zp-{X@BBL39WcL_N%f#XC)pd2t8?6j2(;VI1(=%){M&k>*hLx-=n7r}2Eo!TBIJLIT zZfjf`m0K0V2fj(xPdnh{18kq5r-+w)ni7x&JN{EphStBVdH3+>z2KKOAHJK|AAF4Q zH}_F2RW+$Wb52ew8shhF7FM9wO^BVBh}i*8VVJi%5CE|;<})u2HkKbz-?_uTsM!hF zNSkZx$I1+4{FSCU5;ZSuY`XRaZD3y5*WQq@aP|hJ*^{{ZAk{S~L_SoLUa1t-LTZ%a znQlTW{cyrA{V?s4VnvOYObH_7pFL?2A|GItKn`a~ms~YVD;MXhIp@%F${R*Io!}^) zOx3o6+Gs=(uWgKa*Bb6n9Np<#-0E&^k0yQHqgyNu%NrU~_4U;?n`)8)&(1CT)q#$h z=9L;nZ&Q3}gN4}Cf0F$k?cwYT%=jzLgeE1(D!HJ?ES;^vtj$~~1sk5|U94EFzuTAi zQ>ca(WrCZJegu|hen|AfC*eMD8~ncZp@qB@G)7IxPTFDO zZ1g7?VI}H8JdbG6TbEXev;^;SZq;SMZXodh6OK1G)+7QcIGSG3r{?&`$iHh*)a8GQG;pPSqjvEJ&&P4j&f@kNO04Er_@(yznsZkQT`-!tUN zXOa4$NGuBE6EmTNwKXuv$M>wzuCvo4XGMOaAGXJ$7_WiVcj1nf3XyrZSx^lVN@2oM zn5f#E0|w{6VLa1;S;yc);J$85P*PT2zj$*)WFTp|opx8(E!P?sH4crsIz}I=Nt%OJ zbtsYOk=%NvsPk(vCo)f=%79Z<=ABufetgQiSC* z371glP08shZ_E6<8hplNZYvlAFmMh05nYdUl_B_@*g9#&uBNIU>-mu4EtJOl}Ge8N^swXTkqZH;anf18CD89`A@|3!m z(LnS58%s*c*!vDfmZa?94#pp{#XPLUIMCqhtTB6g);$=31G^4YL`^ECsj{O(YV@++Ca-%T z;>IPMQgG$ZG0ET~K91E*!1B*}m=DtmmNRTiXBEiaM*;RA-Y8Zvp@&aRYPPeO|eDW?9a_h)`ZtE3iKwGHEa@B>dh*xUvgF1(pF>GrT5rOcB8Kj49hIxD!oZ- zaJFbPN_8;VBG$PotO2pWS;hKU#OLXPG9Kg3(iY9=P4RSkjTlK5T@+#{*>Ut=n7i!Z zpRX}t%vel&90v_^Ye$&%&=UsQ9z79jV?t=BG%<(*6 zz+6tQVG5OvOb5g0V$$T~CNLEX9Ia$!$i#X=i@UvG-oq_55;+$>omMD(hK+fRU<0ku zYb$~(gQ(A+DW8x_y;Z?_unY_%7Fwm2t?UwoWWrfU2iovtRQXVsx`&vd%1+QS{5>G9!N6@w4YV!4i-`LVgo+1XS@B47?U zHF~2bW;WKi4NYdVIaoJeuh&=&I*rw&S87apwbBfRB?dR^tCotbdb8J5F3~$p&02}a zR2g8)uTdKGMzz6sol>pUDl}T$|M10v?@Uqu=aKK=JCo}OytoY6|bli3Ryf-O@HTlssi4Thb|zL>$j{Mk3)VDW<8 zFzhK9kA!^=(`NLo8<5^IW`7VZ1u99fnNmTGGN$qx%%O9+i=+P`LMrdkAeYEg4>bK#JG6JsaL5iZpY(X z*uQ3v0~VAZ7PfrYyV*NI6%gQdOk@a_(wi_|n9AaIOmOl30OPp;MWc2+&c*u#hNXaj zM(xOjeG1e1aJkPGrFG*np39f|&`2{MT(c0$ybas~{(%uwLhvN0hxhZr zeef+7AYQ*xbZ>(9JMij{gk4 z?}71ez|Wt}$KQ|he-7U#;r&4z|9O1h2g7&L??4$%Q+>1mkCQ&y55um9VZR|^94E$d zS`XJm-rSeD2-VyIZ!B}7n&+WOO+-ft=bSR6U?f=PZiR`g|BB$#7(TRGlt8YbR~FPG zLX=poCF;~Q+>Yp}UG1yu+7>8f$C70N`X~eFiUII28|(HrcCxj-frj?Xg35-awO!XP z4K;X%GT*7~wQ0h-a4qUTKfK&b-vq}(d=9?%919aVtSOv$T@*}r-+aY<)!nL%ij8e| zgC8IV%FHSbe_%24hXa2i{&1Y%9+BqKXY`Qd-ehi_iS&*y*g z`Q$hlNcao+@SST5xCf{o!&D2k5rJV8Ff_avL&HljH1PhtmD97NE%+YoXwC}bx;R43 zsKhvbj?knZyYiZ`D{m43XQXAyBzC`yn0Y&yB8ST2zAgA(GQ}Wz=LtR=#>#*lo1D?% zd_T<7yn#``$iQ7)SwC3l|7ef3;EqXO#UCjJxgq~cPHr!+8%V!wNm|Le8G*!gjYA$k$=Hp%saz(Lqh_**qa1tdTOV5o*6tw z?ULCXTe1=iSHvk$&Uibb>;c+rG1>i9Dm$w*ID8I6&|Nc6GI(s6sHW$txTi1WG&uYY z1457pB-m(=NbOGfEjGBKsnSWzR;P}wcG+xI+RDnhmM`CBf`&!cek6xHu3x*g7!rA6mppwyiJH`E{8O8?~% z?W2SPImg2-qx5jzXr_*)-4Vt=sgt6?FOaI>uy0@)e_9l2;3!?BQ)fjgqlz9m`!@S0 zmL6#_BXm43n`C>~VRj39J$pNQihY><8T%qz4xb{FN|!tC?sPA6Z*=c-A9kN`pK(9t ze$HJ!a`tui@7?ssc!OfRb(%^W0--1BynF=;ns&Rhv!H=tgpd*S}$lLDqY9`U*yraSE6 z&#vuRM1S%VVmk%?M!$yfuVXx>w3%EVJfc?TbXw-*7(c!mQS0HaMAZ6kS5DMQ=357B zd<3=y*-yCUut3M)@n{w(!DpK^6b78gitG5?_tx)o73%P3ScoH|meY3Fon+cx(zEva+b8xOW1kZmT!TjF=qTnxAh>7j}?#@#y zHi5_!Po9Tql`yS2mlnQn0+?0+E{ch5CW*Z$F_tGP`yHJA>*YxIp4@g~^@f2H+fJ<7 z0Kz{%_w@NE&p!#v)4}pyDwN0PJ0_V^Q>0uT=P{`OkM$UrI)nH4rITAvtX|)La_e_i zt_Qwcfux_Z4}yPW;NA`OfwK6F8htBu`coPgtGad1O|?rKtl_FrOZVWqaYHStlex2lVbM0V*HDY5FB%{pVceLD$GJ1sYgDA6S zz@tq0rOv8t_^jG?KhP*|-F&Mu^Jk`f+n2kxk$U_MraziXKj(RM0-aae7#p}{^DRoC zz9aJ&C4Kj{FHRA8xU)Y1Pcm|H9;_s1)=K`Fb?!Vke`bx(g9W)WYh4_lS?duL6VdSC zb7BxZyxFOiJ6aX(QMl)`b!_cY+N;fy)_B~h(rBE`t4j9mt_vjT4ImiqPA!S*z!o4i z`>hL_TcxsrWK(lgfZO+1Sii%JtmwR&QeOFawTpLNU0XP>zJXsoVC~q_t%Pd^Nn35) zsaC`4F|v|tcP9gN%mxq$_rUsTw_+3UzNU7GtiL|h94jI6e=YkX@IE6V?=+1Lo;l3; z-PdQA%A6IQuAdj-m^_LimzOaM!>NDnW~5!kt9umt+iZb`Go+)YORA zl$d>S`lEriSgb1U(!g?FVJL77a|-so?J_+-gN_N|c~!w*hC){7v%ainfgHz1Q zSYHxFD4Az>Nynt9=2BF1={YH?xwKi@FGV%~YBWtwEo;&dnx;xb&t%~KG9HUTZ>cnJ zG);)SNonyCnkLM3^#%A9^DX#oP87G1lWM+|v&ogPslvr*l~!qN6$VMUu4G6$FQ~S% zMrnm)S$PNjg|u9%QFe7mWm0En2U&+4f#c(2JZ4MLtWSrqpD`v^I=hP=qfssBX1bqd zE<(0+?zUy?{&;BFC>(P~j^wd$zz^Vl(Fk{p1)t-bJ_0+S>1Gg2BB#Tz!j+DkR04##jcR2)ucP$gLiDjvN+GeHoUrswx zejSbE)e0^E1;&zA&(L0zy$)l)<<8BU=$A5|P~3UP1@H=vpXZd~rQi&ebDUDhG=$3m zFn4ak*?=;bRbh`Rf#tfX283LYCp*sVH$3phgA@(o8V`4f2N%#HAm;F50QR61VJ;^R zcB`x*Zo9cHraia6ypru@;P}A8fu8DZccmJg#>;Ij!}D60mgXa`#hIFInIB)twi4sj zRbc%B+}FR1_w^KqwV1sZl!F(bELbX-Hd`vWvv)9s&6c&u`T`x1P+B-+X%*#_vA0^X)yf$MNP)tMGMoE%7ieTrwCtl`rfqZ`-<@YA9cIXF-T23w^mQ8L2tP*kzR z%z#x^4`XqL9QGPrb!X@;tGfi>MRdW=5G|vPTH0l?1w(#EW5Co{e2c~~sAOJ@dvU*I~0?Wj&2p*PW;quL2Yf@*ji)zE3R1$ZJU+~Rrg z6?y<{gzJ1IRgso(G7%xdo^(IL0bxW+qRNH^$9V-Oz#5B#HdZ-Ui%Vgz^V0uGtJT0{ zFjiXa27i?npuCYRL|7J%w3sLFoD9+;RiW8)v=&g8Yz~&U2(IssQ9s7=o|je;d8>%L zMWOUlBKYl6h^!)dPkIgfKTU}+ha`bM<;EYDc5W2vFFOjAuvRP*IUaX!Sv|DHksE~u z+N42M42C(07u_P8#H^M2Wp*0Y*O!*%<=rBoM5vZwQHw}0f~4QVmp-bKkY9!Ng76)6 zp0k|nEtOdIxL?KDd#Nev3@pc-mgmbUZvGsNRaFJ@b3kv@JLAPioCR4cH#dENaj*UF zQXCGxm0pdxB?u0_|2h(`fZ+`U`xIlG`q$?06|H=HMcQAU!veMPF-~d!3mh&#%x8?? z?_(T)KlOdwPT2p{)42Zwymscg95ok@0o?hQYIt#{&ge#r|8GS+2o%SIK>M%GVar?j z*z&Z0HHTpc!+BgAu)e?KVGzr5Si`huFvl-o<#Rj0_>XZ|npQrRChh0kf}59^fn zKcCa-TlrY6wEsXMe;&^Q%zuKS{vY5_-M9b%0C?J+lFM!rF%*V>Pt%)vq1~`Ss!k*p zuz;iym7q(ys3M_&6hslbnZ)UgnvAQ7t0=recikaYEO`nRYp>xM85jUckRXoDyz-v*=Ix2h*ynzFC6nGO4RX^|+I%*bp z8_(6(z&ps*&%nEQnREm1;eK)*cpnGJm%u;JNxq#{>1AGA$eGThuO~%j#zX1abX*L2 z#)>tPX}Ox}p^Qu=X*sufQJ#yjxvs?KX(=;ij!bD?R5OyRsqw-mc#IB**2W76PX-e% z%_|Q$$P{B*-(rqS+MaT~^S&v41|@wi^N{woU$WFXWmL+noRJr_7t9e_1lD_o)S2+V z@?L|{KdZOUr!~jSXIXsY$lyVL(^`ewydHP!XW?#;QBiQkXwA6@XJHsGUSZA{H^UO=eopSBz1Pv=9y409kXL%$ zg;w)FZq%Z!AZy>fzVnV}zEf-i z!>!Rta2uj}5RPHp0f(1e;q9kCAPxW*aq8TJ8X{~up@TD&e#Rb*cB~km6_Wy1yj+1X_$@~*bTd556r}#*b953 z6SL5T+33a`%*8zPU_KV07yFOdDO@YgB zJWjv`cpoR?Oq_-baRn#fR94_PoQp5<70$rPti-GM0vF**e1os?EiT2?cnA;R8Vn(Z zvk}K5aPS}=#uIoHkKu8AfMGn1C-D@nMFOAW96X0-@GM5~5kA2wSPmB}kc5X6E{2bl zNF#$R0_3m?qxcZ3u?Ax}3`gK_+=feV6pqBvI0hf%Q{0Z{@h0BFb+{gH;~m_Ackv!A zynr|G5?;nDcpWd|HQaz3aSLw6y|@WC<31dVdvFr2!u_}lcjHc0;dFe4%W)RY!}+Xc z4I_-QmUXOW0~^`IiTD9OaS|tU9j?puxIQ=FhWL&fabs@6O}QC2=N8`8 zx91Mrkvnl`?!sp7$`-b=jqRMmsqEl1PUj5n#@)FGXL3*O#l6|dS?uC$c5@Eravpm) zp9|Q_eb~o-{77(L?#G2(!~qU+e=f%NJb+8Mln3%49?V0yjEBJd@n{~yV|g5p=LtNKC-G#S!c%z~Pv;pt zlV|a4p2MH#aUU+|aw6@Sg&@Iqe1-|}K!!b^D>f5+eR54@azt5e4a1xMgEg7@nyckSNR%W=No*JZ}Dxu!*}@}-{%MXkRS15 ze!@@r89(P2{E}bsYktFT`7eIQ@A+^3hyUdd{Ex{OF?jYk^vn9jMP3TS~M9+LHZhDUFxy!B2p^UT2sp>Q`Rh@pqPdO_hof$Wk zuwy|^4t47`+7)v%u^>6@IjbXGaX)9rR5mGY%ZXOE*0H*EFVbBYuj&q!yNz;mZc)Zm z+13`BTcB6W8?rOec}0%ZqlF_qMa7;_vBxM{JvrBlJJI>$h1)xP^$@Y#JW2`a8 zSX0>L3B${V<*zG$y}E4LjycOzQSEIVH8QE=CPs22)e_}K+)TVSHoUFTAb973LbY4wLxkji)ucyRe`b%3se+cpa!Zy#Zd(+jww(fQ=lU00wsvb>pfpigT%QJKgimtxF)5& zAgkvk-IPIfDpcszCIc_$roAzfv3@TWlG=?LEK*T&pI*Yb)h&*4furBK)-C{3oXPlJh4D039>s}_m1r0;;gIeL_ z^23c`zd)!{0jDrq_lko>Z>a_3?WJ@}9i}P{O{QphpQ&(YH3dVrsr@P#PSNw8(>S!9 z;)l-D#>tycbqfAd6Y>@;*e4YvwS82pGRiizk3_~k8mL5yqp~QDNuiL@S0pX2fL4w> zDXpwpr7YV}St6sXfl^i+rK~tcSs|mWNLpC|t(*;vWRx{f%8H|u6~`zm zWRw+2D=VOFt;URzRVYlB4wI$BWa&b(bUs-+pDZ0FOBa%*3(3;?Wa)gebRk)~(r&iB zTxCxEjoA7|G*I8d3O3lqt5fys?EKwoi25>BFd9Cn2Ahjo;Trw0DpX&5V$EEAf9sKi zlS#@ieaO?Q)#{bd6!TIj*jV~ns6f+NSF~2iI0-ka|25Q!3v(M*22M8T`l+}-nraSW zb<4arwk)lnha0B5=K|tlQIHUl4051k48*QamT==SnF$kf+oZ zzkZp%|^FJ7WD)H-oxATM$06SD^@)SyGfep8;J z_e@15jdM<`@``2^D1}Kwc2+yGwQ>BUh`HhwoIKu(T4K@o8BHt7BDu1NR~A_~J~Bxc zr!7|~uc^0e-auJoZdoKz7Fkdh$(BVjWsy`_q;GuWf8H|hzW@LL0ssgA0{{O219;li zoeO+b#kK#}?3|puUqAv05CNYEDxx3)RumOfK#Qn|@A{}!QS^FS+k3UX|Nr*3x4r+5 z+WT+4wzWR~qFAdItq&B4f(Xc4-i83-kwD0UBqTYR|995j=j4PW2o|EA`RsG{*=J_W znl)?IZ>^cxXNwV$RC&^P;+=QFxJiCA}oXb+J}FK9c1G37<3N{5~>x^f{CI z$jH$XdB0%7xbynRr4uh1-$$lQns{*^xj86dBqccWpzWU}NLp|flJwv#Q8I$Fuw({j zNs=YmH%7@*(LWnN7M_=90$AC#3PRi8MjB%TBpO zcAMTZ(Hvz?l1EI$%aZ?6Nh7bGbHsRsPW~n};jM&{kc7H~MrKaQysuzN=s!d6gsKt; zCH^w8JUlV{R?^_4XOe1@k4c`A{Cwv2XP*t$D zXD`lIW&J+&nyiJ{!wYUGD9@Rc^W%czg7VbodcImvn)+7i+MKazp|mb(qtdQRdnj#L z=JvQ$6-|z&pVIrJUlcvhTA2P!`m&rKyOds&adO7k98$)D%=0p-+trveA#+0JBwFFW z-mdCyl}Dk#l3(1LUv_`B`{M5PJqmja>v2(!$vy7v@v9!s^(g95nxCCNH2>24pB0=?Ft}h? z!4!Jsu7W?2W|5i-ifCam+?CVbCfeT%Nxa(g4RmBQ8XDGdnXDr$6)jCCh0x4Qe#=Hv z!%`@H(Aj=+jO5DkjNl$}q70G(8I11smG6-T$_1p8WGv}qboF961udOGuFGT+`K}EH8;rX<_>d@yk&lBo{;y< zEVE8NH5<(~*=A}@tyG$NQ!iB}Vw$De3wvSN>!o`cQtM?g8tc8DUN70_9qSz@joyjg zi4yS!dIP1|JJ}l|)*I#xGfCcXZ@5YJMtUPn3f8SFJZ-PhS++2J@h#o1aVA zJR~9Wuw8E+lMM5?ZNkcRH5KX! zl*xknR?4JNCPFP)t`-?aiQycRIqxQ2pwv}zg4`eY)Tyn&)~W>?Za34To_WC5!e7|u z&qm*aoOmGE08Icuml zMD7Z5HOTE8chd$xM}?VXYs?(z7jb;TG0!%5N#xI>WG$RWD4ij>nwzi zo0MWX)T&)cFAIM1)MBUG?a~!4bD@;S(VY@K_%$DiIVm}Q3hA4^Tz7m;wbfAC0B^NW z`x4&j0^aK2t$DnG8)2A z-wgG=P~QvnJy5TL`d)aq^h_c=rqiM>@UAs*_-&}84K=i(mfAMah6uIQQdQ9SQL1*Hjj?r9pctm-9S+>wz@#`K^E&ds3nh zj`}#f(_XBnCMWk2YO0i{pi^RZP*a3H@Tj2yeMoSKPR=y7MPX{$iynrlB}^@QsAU%I zaW$3E>M%9!pr%G@S}I3Tt}oYavPAndZfd`u&!@~SIxh)Lb?wYkNv7Lv)X+>{MfI&R(6?r4*%;{CUTSI9kUo-Ym(?)8l3Zz&< zZ8{#1TQ^$nbgR4SSA(x#SdO35`iD3k=KK*_|0vfpuKoenzL_fsm{ zp;7^rDyZyLoAM#;qaSEdGGjN*Ss*7vuJ%JahjBg}dXtg)6iQCz_vsw3(5tVKa|S-y zM^KsPdJ|qoOLucVe2tMlW-Q;YRGZ`UrWtFUjAo|eul9vPKfVt`7Q>OxWb}Co=TrIh zRd|?zb@TaZf>Jh=x`7i}Y8^KPtx2Qw3QDhowDU zltQUmO6{W5Zmsh<@=YhtE6B%hRWEs+k^TlFvh z6V3UO0H1~MnL~@q0$W)DE+inQWcX1okfF0B{m_PCP@8O5!a)SSx5(4vnL+-Uj3}+i zHU?ByQ8Gbo$#%61CFDraD^8ke+Oh=Xk$@DFv^5`5Cz5lXiq^hMYwkyXPevwgw7-TF zXL8NYSx(t;T%C#TjOEiwwiFpPE5^|;pjR{6)}-jAh{gHid_F;*BrHIK+MPVSq$t7` zaPBZ5nK97B7-(V)fE~`tD?+9QqqZrAp^1To+)b`$f{{|rNU0}hsY4{V*v)uLWVAG) z^9|_y&loM$a8wJ1rohn_II4n{QbhjUNUqNA(R#V27;fL9ZJ*(1g`rwb+t$*y97b`N zai0yvEwr%&iZyWRIQK_wIk}tQ!6UcxF>1-#M9v0sTIw1KLJXrf&(v|YSVq`I@;!9x z4}5-X7nxp+_ud>JqdAJ>IJ?~(&v61re~uH$Gr%tLGVEG!2(&WjK_^3}J6q75TKYMc z8a6?F5&doGojvrZ=kUn4n(&((=*tF5?4(3;;Mr88KV{_H#OOK?UAu^5JjVo%_i6pP z92atM-CWEuj$^#jXhNk^B*#0Id|_zUVf&k)y&c+KFpkQ=FUQ|l)tYL#3T<;&ujc$3 zbo@O&Kj4_h`EvSo1vY&ZpI_K*=7(6o+c> zIO;j}F+T7Jyj~n9A)`XtJd-|nN&ELqZ0ra-9r?e>=-NXcOh?0oewYpiFT=rfICvQj zrqeGk(JwF2FE7zAFVQbW^h*)_QbfNL(J#~Km+AD&o8GbZ&)#ty$8+@O7(#tW0l80M zEEvYt3Vr_^Sv`&In28=eU{|5FjcChKG-WIKgJ00v`L@h_ir#$&1}?O7%_7bh+fwtn z^e{_orCAD!g#!;Zq}bDfRxTd7kT#9OUOmkynF)=vh-JUWaW=;&jZ`VfbF1{2cX33xJhm`u9QtweJLaD8k zN}*I9{qi1`{cWuJTUd3XBy4aImS7&9$m#ZNgXUn>-!`L>!}<87W6=Mx_&*c5K8fQ> z^4)>ezmxW+B7u5vBMa&|P(Kyv?eh^3D>X*?I!U_GgY3siSH5-Cvv6Q#pCb-@g}Cqy zN*7Ujo(wgoOFuJAdYVfm-&}!?Un%FATXaq+f&NG%9_&kBpDm{`g7X={`NWaA(9C5d z=QEP?iT6%}asqtiLOld;xqi>W$NT(Vgk0xAaRtA9!LdtnY56`ze?GkDn)5i$=eU4l z498fG3;B(@unPHDg?y|+J{&skx?madu?+dD^HscqB2b@BZLcDk8MN^=#_(u*$nP!Z z7oe6Zmt^w*XMViajJFkvx2Hb3kRyb(Z&D9ObI|XPLGcOnAt8wOJpGoa808~FITV^T zqRI`d;Zpp=hQJGTzTuuAYSIK|6vd1yA12hhi-h(^M{slvv!y(QLm}l|d9%Ny{po@2$Kp zhvGUYRzk5HiW{IfABtO`_&IzwLUp(Lo)0^}m-EL!vlglqLGr<|Wa&^$>HQqq9xu?$lq%+nFvFk@U4PqSjgVODc z+No&x-Jt3HTvO^u7cpvDm%)T^QXcc|9|UP=gq2B8rVwGJ5n*KzVP#O8 zFC`aQt*6FK)Ywd0sLkO#(((1BoZ6h{wt?EJea}oazdq1iH?L3=NU4(A_5|^^>yxTz ztO}NBZEik`wiRkz>1nS!Z_vZ)K zdWUcH;~f1hg4HR;uKFb+{_n02`PLlE9rnw*+3euAM#?rKSzrGfT~4JIrY7V`**Ubh zh+044d>&L1wbohWn}aiKz^y*{u;@jX_ zRvr5#WLD6QRg_sn{5S0&Q&dw zXqNL01Tw3jq`#720 z7=AaA+g;hh=T?qV{bdt0OZc{h)@AK@*GoSviEtFHuM!tQiTqQuq8fOXpocj!MKRN5oHkHdp%J_UF1pM28UVV&S zd>dTLs#|Kps?-v7Ml?!D2RHiSWBIYJv&RdFI_t0`OJo2(OmA_%&_#UWTj0m!{2(Ka^UnL*UA|KBpA77<6zDjR=mEQO& zz429gn`^N)*Ku6WaRbNQ@IQ^?9*#B&iu&M z#e6xzEO9s%)kbHCok!#}?P>cZo?#hWx;dxT^MQ52Y?g~n*9G&vE~$HU?{EbLyOaC?FqEDK4#WN9Q&tMPwg zs|dx9PPXaqdo+I^{OQl+PeihR#(#Q_<7K-Leli2!ZV2xS*~#`(a|*{WqMH#Mqa`o!1^d&6Ed1)Z_|?13)!^Ap_}90pkG&ZmyHusO zftpg`a+9{UQCpEL-oz8#y4}RxSKTc4$h9K2(e9x~!gi-^wv`rZBq6(5R~$or6m2)# zU7E_o*d}r{*eY8=kAA~1yVOo6W)Zh8>t>4JYqMn8Qd`4Wjs1|`aN3eYOHycEgc228 zud(I2VvtHpwsWPDHf_@q^`vsHEk5F$FR}m6zJt`=d9&SN%c#G>?t{w)uDk%pVK;>R>WfMIC}@*O6;eOYnA_2 zzHLIHF3)ydpAIW`O`5}hdAeF1($5yUM_ili20NEAA=n2&mp{f+OyIkVy4;7? z8!o^Ju8PHIemx+O9a( z=yZ?c8}}5xh76pYsn?jgbLv};7S{yU1RTXDD8ZV1*>2wIcuNu|^F17U>A7+z`A(D6 z{MgwpeP0dItigx%oKNDo!md}hTe7KT{Cs2m9A}Z8{G*!utjh5ax5-p&{TKP`D@E;p|$zm6q@L1M>_p5!KZ_j$PCsF5b zF+%s^J@4(j5qj7p5K*hx5ky*g7P>0+}yqH*ZJU z&_hS)PJEudivOMQO17WH&O9iT`XFV>but)@ypEZ@NwXwcYcbzxRpL($@Ip&gsk>f3ho#l>+4 zt1Z4A$@s>&U*=YhqO(=1@AcoZe#lVH_SkpqCcD7?G3J%O7st;G`-V$8Us1zoU2B(9 zW@Xe1Z}GTPzr%hkcf?;|jhe%DvE4_+`F?Z`+E(IgRmC`e+y2$Qzn^^feG7Fz%PvR$ z8{vJ1t(F}43A?rKHu-eTLRZNGd~Ly5`;K~HZohrDetx%J3F>L3S=(vzif)Z_y&oOf zy}B#Q-S3jsf#)0Z3tP=Fy7f?Z*IqZ|oq^mthx4VuTuYs8#9ykyQ>~;e?aj}5y0#mM z+MO2r6W4}j`R=_E{8iod{P!d1w?up|SLYF{k$laeA$rSPZ)e&Yr=xD>Jn&Jr*lnZ| zw;tV*9c()vsq^X)T3z+s^>I6IZjQQU`_V;IcaZl+-q*LAx1*RoQ~l#gMt4Pi(rC%U60TlY36>m80+*ydD8@)3wE+2nWY?HP>3NHi|Oj;{Si=0`rm7Oo9i zu^U_rtL&TjrCDu!bBnd$YMG8*w`U+WTW*UxD`wu0_XW|p2D=TeD|C))Yuk0gcGg&0 z)H=*mR}4K8^NPB2%T49Uq zbltf!i`t4opPiD5p1)#WvcI!0+CS*-g(`SiW9O4^new)pD<%FuDSypeua@!qei0p| z|E96{-#FW%`Jq9*Z?wOra1b+SyBTjO{z?`8ZN1*rA^yF?%1xb)!)Eox({)}ZEJnS* z6z81>@7XHXaFEj5AbuF@ga5;O4fe^;mEzt(ICs}VJIhl;&HBZcaz%YA>a9~xzNWS9#skafC~Ap%a}t}Iww3OV-b0po4SiiH20duDJMG8tv)ZL~U=PZ%gfqDm!NzE8*4M$z5vyuYCra z_>_Htu~?>7ajDz8gU-5n)a7uz!G6(tp9Z5PqaB2OU8(;!w4D`gqV)UrbtupOT3Wr0 zy0=-2Bpc!V?{*U-zhy`9E~K#uYhR4Ki(Bm|u8Z|?u%p=DPaUJXv7Onp6&fdQ3g(Rx z)xW59J5l2!nS*|L+PizC<f7h z{eJ4{hT>!&!{s(HHP#ay`4aoP!=VLe;HgdAi=3*zj#ad??M(X*-Jk9DWv9Z?T<~Wx z9>6@i77bsm|1ssPb*f$ERtI?Bz%QlLr8~FnLi?`j{X8TvNBgP7eiXL?A2+7>&F!?_ zr53zW=Nz-S`US_DL*{%t)}dt{vyML4r=Px;yFK1&X*7X7kr6Rii6t_C#(>`>WFT$$K)qh73wQ>!Npkzkn8jhXzL#%}R#ocF-jE-9LV2|=w zg;fiwf3_PNx0Uf%>a3!2UdQL!cJ_p&x$%gPRHM>S@4@*l>U&imGUxBxXYF4pm#P*L z|Hr-yPQPmZg1uT{f1|c`hg#nRTDXJsIoFrb;+4wzCi}MiqnoX!mD|x0H-494quT87 z)qTqi_EYGsRixOZ`}FH+36#Euzvu;2!+H-+Sg+(T3f;c52F6nbvi5gAhgA=pE!n2` zUz8~4I~ZeIb+=$$%#(6hnYkaf__osvR*AO-c5HW{(e`&D0DT35Xb*-Wy=6koL z(b4{U&qcYhm}?u9W;xC~-mm`^o{O{O%dly$Ge#@zQysLZ42$e`bT21b3P;x-9lq!e z-WbeY&w;NQlia_%T;}Ox2P9o!T+w!|0cWzJgx373cA} z)7y-tggBp~(ymaX`$tT3)6`E|hA+6zk8)J%)mW6~Sb4A2=K)5nb$9M&`sk{6&AWTA zc0+yl*SQ-eHlH>dE&d!2wD~|*LQ&Mk+~o(@l@RK{(u5d`?XF|HeOA<4r}(r_{jmo1 z_f{gIhUi|K=zf{FQMbbVj`rhI*q7U1nF#V)cc{nc?qrO_BZ9Qv!_wZ|Tr#$GNk@7P z#YRPh+Q0*>@>lQ!j%)Gvyx3f3FpCCuJI>!F_Y%DPgSZn2d2I3L7~}P=P4pga$Ge-= zzVD=KQyQJ?ohh|YcQZ@@gcp10MgF~-v}uR>9L=qJ3LEEk5YOlLVlaQxK`Yu<&0D3n zi7Zz7DD;&Pb>RIwWLBF}9ayWco+J}eNL>~>YOSPrmYG4b6(yWah;iN+gc!5m3#>oIVU zb04#V-@|Hc+<}lYiaJkEqzbVe!^Rx{-a@*^bn)}<|%<^=4*C_yKAadOzOu? zD?6Gc(SPP^SqJN(|CO6@c;-yq-j?{7QtxJLIK&-j$sMj5mBo2nE_x~cdMjZuTRESz z4g2q5Y3G%&|4#nEP9?_ssU6%Ou(ad5kaU+pZLlg;hwW|9xfy@YTTQFzsU{X*RqFRO zx-K#I;4%Hs(VuwYKxk1DeOK*sqhMPUv)ii|ZZ~2r_t|&ge3|{7f6sYGv-!FcEkd3( zad(4;4uC$bNB)QH#??9pNSx#%T$jqJXD7D061%Y2Uw!BM4&8~hPc=;E4Dl;{B$@-} zZm@qkkW|`>rVj8*X%qP`#3Slh=1$X%@>UU`)2cWL?~eKO2l7rjVgFd`$p5fW{pap( z&1j`Voy&RoKSkC1reyBs%XnWAL^?HbbJf*uMpWlXLM>hi<7xf=K4`~&8y<2bh=H2? zb)`T~hX;w?ZRJfa$F8o#0<8(|R*X>l&VRx-E{a2<9Yny34|pHMp}Z39^w`W>1ixiA zc4sa~wZP$nqD2|eZA0M0MfaZV+fN5N9OZbr39*=HJGSj3^;@28fSD>Yc-U$(!y$oKHD$u9aY zb92ey<7@VH`w8h|WVS*7RoU1Nu&a&H9c6GpeqE7mCjV^xPqL0%84jLv5wDpk!F$Sn zwtWBnjVZ(8 zt~V%`(UIWqO>qCq9Mk!P4)83!104znJ300`Z_oa>?h?q>T2ghbA)RmQhE`@Fs1t>y6fh|X#0QzaOK)$w=7>%QQ4gi1jR8zf2p zDyF+=0wfRU+Fo-k(7%99^^Ybalg}Mzp+H@3Coy<7brK@9Z?j zUj-3DgWJ=|D2($h?0>bY`xBkZ{X*{&TJP3m^y**rz0$to`xd&};g$A%!S*@VIgoY8 z)6Mz(hrJ1_yV9+FtIStW(+>Qxh^}eQ#~*tVj$O__+F#gT>D<1%*RLL#uZW}h@_s8+ zAsy4r`Y$iL;am+ z{nIZ`=g)nKCDF!}^uFt}Vt<^&Rdo=N1$SSxvu4}e;l9vNFozPIKQ9BL_qe;fzsB0! z@2&f{>TW6lw@x&>!@M85wMEd{-AVU(bVgYJ&CB)nyZRqLu1^=(nfCd1^gP_bo%c>_ zKT{m4Vf_6c^k#|vzeI*c92;rhD(J66-&eK&?;0^{yf(IGq5n0bnvmdXj`tB-dxou7 zOTJ?5Bss31l7qRA!>|_h_2x#YxGHj0#`&t!S+4Xg1Z~0~YL}aXY^BDFugx^J?AQS`w`6_)j?t>Hlme1phmi zs@C6^Yc_eeE9ZOT?zhvM$;%N^cWwDqz5dkLz&ZiJ@j9uZ%| z6N6_^xmTB9)hOI*H&j&{-A&kU^hW(n$N6FVAA@h@-C1p;-9Gy7gU(*0x@Q+jZ{+Eo z%GF&)%e68@pR{$U{D|~@xq~!OeoDGb9*`$xk~}T*YQ^|D?eFB`Mnf zK=*|74elgM*InJt7r0UHce+8`(^D?hT^~2#OXtwiE~FvSl~kzD$rvQLq?7RR^Z4ve z>LNY#IcE8!7;YucZi%TLrJ6M4AObj zHVj#uNjjezhNIsjNEbk3q>O>~S#q&HeeEJ>p9@!`Nno82Z~i zn{5)mTqu`Q;v%_DpVKx)#*wZe?|8Ij0%@9Df;6u~TfQ&Xqb(CDaT)1oN>7p>Qu=ba zO`qs?yIe`SQ=jX0np{Pi3cV?`=4#SiP`yU(hU&G{a~-`Us*BljlRh`mY2+o)xSeyS zmsddPe$JhCPL`j^zjOWo=~#JC9z_z5k%r6Tq%-9S`32{{lwTu>|0IplC&rDG-=fo_ zRkMz z^18f*9R5zaQJ+G0y}T{&!mE20-CgoN=|X)X-CZ(^bf-SE@of2sRG?3894>Q6m+6!0 z&Xpq4ZSpbc0)3X_7{=c`q%>b#_ezB$nhkPFN}bCQfPC!14ctQl+u%Vp*? zGgQXw)A%NuVP+&(&N8Fqa&wM3SFSUo&G|CLTwpGctIZfQhV!vztXyL*G#ARX<|1>E zOfwgoizzz}J2lOWH{;=Ig84pWCz{LUdVQ+j56xBP8o5oM?RUGm(cC0=nw!nd(7eUm z%J~nmNmI=o=1#fGOf`4O-G(HS%rrBN8t*apK>1#SeqsS1kTcAK=0WLWer|p)gUv(c zAvwi7Y#x^G<`MIVbTf~dM`fUS%seLj&Ew{A$-rtpA-&E2G9N%;mYF3(&4=bgIm&!w zK9W<-Y%^O0687rSIKk_oX47te5^zc9R z35cm)ws$n=$9Tuc1bq(Tt={q8@p7|wf_DPf`+NO4cTYyV!5iQW;EH=b;tk$O-br$Y zcd~b~oa>$9og&wIgS}5#AZz z8FIOMwxWE`JJUN;ZgWpqlplH{yb*Gpd(I-Gz%!nr&RL2&T>>v8iFB%B&zXunU4nm- zb=Y&BV$X2Jo*c!VY{j0V6??K3drng9xl*xbykgJgianPp_FSmgGgh(Z`-(l6DE3^S z$aAq`PkJ2oj8g0wq1a>Mu%{5@ajVG=ZweJ}MDZqp`UmOC@~K>R7$b@?g^Dqv7!y*A zNmPspE5@9m7?Y$JGfXiiSurL>F-8<)(y(b~%TaI?MVeGanjwlb{_{WkDbfs7q&ZfR z<~T)~A&NBp6=_b?=YkGVj2WO9Gf**RfMQHP#h3w#G2InodML&eD8`IdjOnQubG~9s zFU6SNAk1}ebv@}Q>|qpXu8BjMzHvyCft9|K^QokBu-j48IRVu9H{|#4q|+38u2$?Z zianlUPoX}cR1|eiR@4ziox(WODOA)6E9xXG>WHGw@u1H0$n6D?W}qTXe?^*siZlZh zX$C6N!4tD8^(f#+<4clc5-Mf<9qYz?l*>!XZsg9MYVuPhJ(p zn0{bPIo$3d^;e`ZiZq@gO(8hrqEv@5g+L7UMbRYzbjjx2VM(E4i71wY6iX5nOTvmJ zNs1-OiX|yv$zVxU6d9-}(oa!jprXiepvXDUITtJ$qR)EmulR8y_%WU<6U+qc>?P(B z@>~jL3{cD%sF*Q8F{8U;Mh`IKRw+=N=&3l-OL3w%IB}003pU&fg?};k$sqHu=3nJB z^JDX4P~j)$Cvv*E-`o#Q{4|CilNCQED1Ka__%TWG<08e6s}w&bDt=t5_%TNDV;uM~ z3knW71}So!uE=qkB8Mn)oTA7fiX4MMjwo96Q?$qjE%tKm5aM`6i2OK&=o^O+QxqXY z5#ks{h)hL@EJcV+MTjg#2vLMMTMcMwiDrdFgma1!6_t^i6%~;ZsTnAuUC=2wNzr?;Y%qt>5!G z-*bM?<-F%P?>W!&ydZ#hZU|0>DJU$SgX9%UYAZ1b0r7GEJbI~%2nQe=qc9OuQHT=E z#Ud<2CF*e}Mj$kO{&m?XnK^w4<9fFzajtFQ(eJUs^q=z|Ol z#bp?at1unc<7V7~C0LHnU@h+U^a4mk8ZwcC%aM=Cn1LHmiuqWI3RI&38$G=slF%1} zFbpFx4p(C)X5r)b6w2^v)L!Sd#J!$g7%AwF z!5EG!Fag)#I?To=un@OlCF-yq_hD1nk`=X1Zcni0HYcz9SYBDR(#h{WE~{Qr=1l57 zu2_Ei5@%iyu&Qi@v&!Nk-?-djMLVamZe_Jo-+io7=QQ>JtII2$jorr@cjq_v0GC%T za~|vg){GhJZ0!-|J3D%W(eaHuZUVmdeY@U&bKkVottInP17iV_chM5qYpJIwlj~^9G#zTq&>>+hCBCA`r16rU#BpWe@RKp3-icbwDpm4rF=DEfgu;y%2yNQ)wwMK4BrU%{ zXtDfYxVW8gSQ>|Y+WRD%*iP7Ixq)!DOV}ytPM_vxNfKSs$mKbqwose$9Mxi4OT}*u zwW@bHCUi_0n`$wQY2rR7bpKO%-EA>x)HW*%ZErt$wuernd%Akt)8(FLs~@V@9?kXS zoh1wOoT;4BrEHp384X35-K8{&K*$nJmvVz(@KihDovt*3dI!4i9^pWjI{Oh0HpR&9 z_oZ6f5DBjFld7$*^ePb-ys0zkCU&J+fcRkU#bkH)!XCHyENtuvrh1WPnC`uiT&IeM zdDKRl4$Z)6?ae0jFL=7K$WyBr-Aff$p{k=h#J^D2t&?2~Utq26UsMg|_Ajx<_D9_K z#MPe6*m|qc)2Q=l)ceM3I>tf%oCo*|{*uqfB4c0%pYi=0&%GW0jOw>U{*kZnRUYGO zJkHno27kxj^A9}X)5?<8X}-y~*uuB@4o@nQy~|d<$3IExDElNyH&yw9I4Mf-*+!Af zwOr3Tc^5bEZf@i~yqEWJ6W6hk4blk6%TR}XxoX4&ye&%V^iHB)Ope;Qb6sy`o2)&~ zRL*i^bjaqyB+b)Dnthew+-x;ayPhEr1}l$Vqq=*cYHs%#tMD+M)>BU66y8NE-qR`@ z?3%h*tIwYbvk&&*Q*powy4%W)q1ct3JW~WTVV5H9D2~xvh}q>J zMRp(X+@-c1&r6a0T&<@GkD?imsaD#hc}8=Lw~APla9grneUZKGiL7$>*<`|)4150F zC^AjoSk-vQ%NMB~HAt?lVT!Dcqq|%n-VJUH+0_3xDW5!Pb3sZw;&Pw*DKV+Nn=$EDTUo_y*Xw<_D@)K$H7LS0;sk40%R1I`HP`rdZxRNY zJdOfwk&}@==)8_)c$wkRDT`n<$}H|}QEFu=vmn$`-~MI8 zva4dSanu+|ZP&Rli~8`B&%uE^GTj`ESXJ)1zw6Z(O&`Uo-^vtRqHTH{Xcu>sC_k%wgdX8>(u47Y3llXdEzCX?9Z@q(lN?9~~ LsUr9Wf*#Gxu=W;< literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-SemiboldItalic-Web.woff2 b/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-SemiboldItalic-Web.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ae3f510b882068b12ae5a70b323b9e8332b1f5dc GIT binary patch literal 42461 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

    +m#tPbmHdf+pjdV3ARMJ^at1v<&GFne-5lAHU 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 ZxSnQjPs`j0E{aD0RR910000000000000000E~

    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 literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Thin-Web.woff b/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Thin-Web.woff new file mode 100644 index 0000000000000000000000000000000000000000..e166e713143d97b40a76085ecde556bab4829cbe GIT binary patch literal 44005 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 M{G&Yj2Ej_nTT~3V9{>OV literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Thin-Web.woff2 b/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-Thin-Web.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..d51ee82d86ac200c4d25c0483cfbb3f50ed23b49 GIT binary patch literal 32037 zcmV)0K+eB+Pew8T0RR910DUC@5C8xG0gp5Q0DP+e0RR910000000000000000DTMq z000>qf$LTrp-u*10E##WFbRTT5ey20wMc`40|7PyBm7R|lk441s7{ z+Ha8piihhM0z7xyfCtF3djET=VH*Rje{~n_tjur1bq(95#W9q-njV+EEQ7ND|NsAg zK~j-1(+<*h+W-NDE8_K6&;;G#4kB`?Ee~TZEE6tsWahmgYYH|hL8tN$M5e_GqO@(dll#8cyHUJOdrEvvr<=;MYVLJ%EWDht=(tclK$m) z2gMhUb2jm9C3k*U@{d?3p9A)n8P4R9YNpDRRc*S95sNTk3OA*>?x02)l0{!})pCDF zOs9dK~;i-XJLj!W*iq5d%so(H=&Wu$431LP0#^o z5<6jFn>!ihU>~9IV@|)GWJ#7~Syl{+W5=O}>qc#Vr@uJO$036A!apx|fd+eCVDxdJ z3y0$zZp%OazaO-H?jKRCigj%?QAzHJsA-^4k~gg^DiyD8kN>CN*SodP?e0IxB*@@q zVMm1#I0~T*C>3EDCH4HiHC-bU{u5G}ph^_&U7$oeMN$=}5?JYf?!4)%|F5q6C&>=n zYbT$e&Pmgz`$Z#JyQA6hU;xl=<#qv}4MDa0izYxZxewS*+5+@0otejiRe}qt#&rsv ziz*haM;wAIt&;tJV5e7w=0gEk4*OE*-@k{PYjBv!-5V}fOfug+WQ}%D)L0tul zZF@tgmevG0|6^`5%t9j+PaKh7ky1B*x7@$sk;J7=L(`xVk0DfuT_B&}ZI+xw4tMHx zTRYMJuI+D_Z4Mr_@d%OB=_e&o8YxUqQie-Z-W~3ze`%V+y}e~{g}iY(76w=mIwD0N z>}2f#QKIetY)8O9wDWxkqLSDm8rqC^K8j+x`=x~v0vcz~Wq^O(Bo1f_B$ShKmlI|} z$-kFoi31=$IPa=|t56AJTDpfCsQfs1cix(X62ZC>e_8{->5yT3>5UY3u+C zfP1|oYR~-ftn~futKF#;=0#s4$+Fz8_P|mBDGg9+ZJKwJj`G3+0}u_*|Np(I@64X* zH1@$q57A1Gx~f^Pej=B#vQ)U0|q4 zoxc`PDk}u{VT?N%^T>Uh^X;=E_q@##!eSoA1S5Oa%vscbQUm=aFf4*TmT0+Gy_t8DgpRUqEj7<_&pAmM^yu;o7^3>@C$*S{z5hy!S6 zfQZrJm;BPSi2U3!!^{QeZd+_uAPr048XUEhT}Sox`r@F7ccYDDv?Cquk&X5#jSeWk zHwvjxz2oWk3*5u~(F2E{C-`0tK)|HT&Z?S46iDz5{(IGEh{FRyVnhR390jH{TC~#H zkv9pQ!bs_Lm9&Fu>6tW1-v=KUm^H`Hk|oAgtS~`GXKKS1GmMCeVkBo#&v%4#VE`j( z{@_qL0~5g19~+ESV{O<9>=289GWmt`i{@`?x9HnD_auLd`^5e6!~L=LvF&l}@mDQO zoj^|}Cg_qi$&(3-6Q+_6B%esQlClW{r<_W;f&7+gNTsK0Fab;i(~_#eEXQobOkxgT zo>I?-5HBxLowz)eUMz7}GBM>;64QeftVH$llYCKEQfTjMQPPg2siZGcZlr4Dosxb* zR3x*lxRNc#4jk|&M*oq$0jIbd(^KP8xmp@*Q4BQuAnc9SkXoDCle#>0W9t6YFVn?z$&l@90NCkd%-i{=iv9?Ul0}&KnlnO)k6!QjnEP33iLJf z42EGcEQdXCEj$8mgAc&x;Gf{9NE|{$6o?CHM#hkh$P{u4xrF?N{Dqxrg8g5M07_sU zf+r*Gnz6JUX7&K(q2qu(q(P%OY zqC%-s!vKH~jG!1!kQB|Z950BHT&31%b$Wx*WcIutW3bx1kYy2)a{_ZC0UpGci;02V zFk9GY5o|Gu^F&q<8woizd8NjnIeJ4}2=b781wY9`Vxk-<4~i5W5aNw|y`l7;^)5EZ zYikY-<_#B(Uh_u&O zzsTptS@1LOoU5Jcd0nK-NLjlyfP@GhAm&8CN~)9wOL4-q8vpG598E&PPJ=OaN+h|^F{rq}4FapNcQfcmGY zU4UIO?y_kTXnNgl*(VahWD7G;qry;n+6V~=+mMI#5Emc9$_YL@4Kk$_lIaBTnEjAi z5#X$_vnothASd(QnQwyNA)jtAoow+f%gL~^g0RQ2oqeeZ-q zg}2&UHG+D8ok?UM7{NqV=J!w>wgKkZvhTKek4b(u* z&x*%drFt|2IxwvKtSk_KupqmZ7MWT$oC0oh_{u&`0*V*YWW^FYJZ1o^q@$|OPT%#c z-sXlcPC`>{H8Yhol^HbPYC7w5j{3qp7O-e-n5@TSgV@9twz11QC8wlkwPUQrX1N9x z)X*Rw1<*n_5mXYIlQ0pXVg=H;xHDp`h^+u#XgCW50O(yxxX4!mw_s_BTF=-;J41YS zCV~vO>cdBjcv#;9Hf)xE3=YnQNpVAmVFbxsIGOa#{pWy-!5v(7(kE;%ikAq1F^d%( zbWQj}bAElWT|nc>ph%lRy%A~Bu)0oLulq(L4?E9J&_8gOQXUmICIIAkh%4E+!W!?U z)QoG45=zCwEbC>)Y6z?Zq~$iIZs2{99w;P>LKp*^qwIoLVf#ThfqM?WG8=pa08Dz2 zO^Tqy03V`Q4|)MV!p&+SOT2kQFXx2CSqzQrQsSVF0V!AX_!RCIRB1+uVE~+XWzp$6 za%=_<(>q8ytC028BDIJXsYSFcUNjZ>C>V-5T&1Tb!YRs1l%`e(n}x0e*=P_K33*KZ zZY&*FY~w=MLT@TUhztOm7XwwFiG6CIC83BE)e{{Q_#-xiAaUR@83kfbtn-|(@IM8l zZx9HWONfQb1tlTza)Cpl5SeSNwjk{!QTdFo;J}+{8u4jGD2b(`9C470tU)I+Q0nF$ zpq|-tv7K@5XV(BPHZOh0S>SPQwb!U&L z(V#_#fku^0LgJ-I4rvdOxyEV>(oPbU&-hx6>Um<(LMawSMJ2Ixlp_uiBMFrtI^5fs z_bnfODSLSb*X1%m0M>i^hyP1!@-lClTG#(s-X4BS&!QbUV;PGq$NJSDq+j6{Kk(;0 z*Z%p7W@JdHuo%aAxe6o11o^JQ$RMS8@Mnd+uW0KR`n8DY#GT%jB8!ssSH2P+Z3&*W z-O)>|=g?7QU*%)ix9#V92d(Q&k5^uxXqZ^{LW&x9-a14Q2Fzh62zc2ELVzKc1i+|M z=z=rRM3d9G;1VWyu?Yct;YT=J2VD1;S)Em>>+{y6^}bbSyv+61p7xfL@IH?(zwPX6 z>}bW)pY)V2jsCV?__-nm7hVG4aLwz!ur!*+SReAGUHJ`KAyL3W*rUPz-&X)) zf6M{j_92C|vpo{9SUJ&sMOX@`%fV;8nw|3s4`|+l0J#e|7gISXnUTKpPw3 z^r;K2)*N=XCBgRLpfb<+L7OC2pYOW?>wL&kyuZr#@xYOZ98gp9rk&#%eF5AV99j*n8~Ru?EzKd zZe_x=W%VWl^F32TTfOWYOn{*QqEuPvXWpf@6SFtH2u?D5gqkFh7mcYiU!j#a(V?BN ztZ|$yPX1J-zF4`dVyaCxX8R|wWmQ645g7$}4X{4joxf~&_)^>>g=?)?Ojo?nBoN!JkO zh6X|Hu1=`HjtF`(Ti6q&YO*QruOg2~e+e9Rn5^=b1$yRaf%;R=HMasBb+PV;Vtj?m z|3&qJ$Ix+%|7k(|k~efX_9hTYDS1nI64WEtPWrjz0%mGC6AX-`QP96CK89aX9+$@) zdcfIuWK$vLh@kV7ML&;yr39h;RX2s0%D)51$70q@9E%;o7ulP+PY6x9GaN!_O5G^3 z2FGOFj92mWj}JH|H>2zU2fm$)NrIop8Tm*jO#lmo+T^MjJs#`Emb^$Ozf73Bnxy7{ zJEzeJ?5P_R+}Z9%Awcj9#1B^L45~Jd?TJbD#MTuq7fZI1<88{%MZ`QKV&VAXfP2BU z0DV(6Z#vi2Lf(B)0p3i9|L*RD*07-30)`!WV-%`53evlJuDxHfz`46_ADdRdqeDI< zt%c!`C)`Zc&s^mTlDc9pP<~aI;4dN2CcNaBhBtSFX^LmpyDy*}okeQ>s<2H6ekyl# zJfFk^J0OuchK|v=&Ljh{pPUw11_=TpM&CaX1$Cv!7i$@oO5`1($&u_OP&* z|C)r!g~MFCI%_v;S)x0Ml{Hboc9%j_ks2h)kzJ*VMx3rE138WW7vB-Y19v?%J4;^I zeO)i5=xGwMj!sI%-pCd$`5;k^7ik5Y)ya19iW#TfYKn=ALhvYFwby58r2Wp#R2Bo62 zHPZ`o#}s9z_mgkUjz4_Qa8$UJ3>y}ZaXB&p^MWr|;h>2w_lsiIimg+F8v5)XN0gyZ z&$hOTv}bo5Zj}l_EtJ{5!`6{T>`8Rx>b%6lOD*e!$gne}YDQQO0_xWA*)zAemZ{^> zh=8KnjzxDh*EUIqF+p@yQ(f0B#3qfE<<7s%-0lfsCeuE=^iz~k2FqMlV`qJzPl_P7xG9FT{&6DV8q`vD#1}8yNgmj54jXG* zJIfM7BL}W#Jz20H*ckkQWj{(B?qH-vYu^tSfQo=2h(N}KxCVqvMqyklF@lRJeYk%1 z2m}onaHNY)efy&>qIVms>oibRRB(>o^cGMsfUy(9gT*|fOuLA>_{j3^EVR_-lG|1l zGl;0jBR_;LsQ29U0l1_di%wJwJA&P}(3c!$d90ZEYE_#lqlD_dTvO;>#}3Vj2M7&XS5hB zD}Wd$Ct3D{7tJ2kc|*I36Vpvr!*aRjTQfu(+G`(2-F{i7F={sv4aJYs4Rcj{e_C8(GhPA>}wr+1eW_VjsJN!xiJbFABag2C30~T1Tu+8 z(8%dAS-6l_$Ab|+evAbOU?NI7Q@QFn=`hkhf4iq#L6*ZNVbd{BLRMY`n)X>t@)Yj6{*VcyV=%93U(Rz9qeSHfE!~_a8 zgTc(2^XbGxhhk}MY$@0s#ObCqeh@wwbV_igQ{0g zTZ0bZeO=6S>*lUU4^O>%QS|BKu3tY-0|rnG8U{Wxf@0Jt@Ub!0#*MQz;TiCW=j^@k zf~l9@1E2cfwC~ISpPQv^&KxG+n|Ig`76ezm^$*PV0Oxr^NZ9JB|Kxcw%-pbwL5ULPbwDZe zJE$@XI-)v2jo9d7kCQ&Gcp0K5z!))EZAirAjx34Lx!Ra8%{QY5--GME+QeLG~r?ve+e%Y z`HGRp4FO%ol+&iDXSk$i`9$Z0GR}*^7ZeFDD&t*Jm4f`#k*@dzZ1~o4N7L;8`_=N7 zzbgCNgIXSX82*tb&3@`>z;FNNedbxfU(e(G=fA*__C*9tLylcz#J(Zw&=_;fn&1?0 zOFf=*AYAJ4T?6UXSzxV0xd)*w9)2JO1#(|Xlo%bAIBp%6=R6)E#peT%q|1Z?yF`?V zSSTSO;Up!cAS0tACpV;^fKpN#Q&FL*sr6}SbZKdkbaZffdTj;<2qP1_bSTQzmwcRi zfn3x>L>t+Y2o#_|ALBZU+u;!)^36aj=Y&GCT!>VNbX>Uv5w0K?3;|086Ct56pfaO{ z{#p$H*M2RQ$8xQx?C@5&*2zn9fv+4&OhfNwlpFo|3*ftdcn4x}Fc*ncVx_JK6<5!Q zkpZSmXrT$cMvsG<2iK|p~%#>IIN=SSj8fmk38_tmR211(2X&YdJhAX4XkDr{c~2$&Jb zg!{Z1FT>+Q#GfPSdcS`?HD_bQ%*%&or)L=doQ0T2$ohQ8tK&Hbbbk4`L?j*TfBE~ikQC7<@nXP#{?_3q6So68VB9(YMJNT}%9nXyITBSef8 z(9Vk?p^k`&PfE=|pE*0Oe1(dY+EYK4lm-&k`7x8pV`RXBJvV;B#7RT0I5L{Z*aUb? zG)xSk9JuorE?zpGax^76P;dz4$Y*B6k|PfRA|%Lo)_*)@I#F?DQ#?)x7_-Vxyk8wm zlv%!UmOzCrG&~|oT2>~kIRgZIp$}icSe=?9;r_Ti1x>Q=k38G#Lgb16AGzxjQQuz$ z&gv8?xr9B>q$9m*J?iU_p zeErQ&&Ntosa`=v$my%E3oe~DJPaAijjij|HfGz;Upx)F^%cs$Qi-?$nl#CK(DpWxo zN5jA|f`(2#a!mvJ^%+XX?>D;O@fEos4=t7xepa46=h9id?e)gr(A$FBuG{B#@cZvY z_jm5+?rRU>hyUZBr>Q5#bN2J5=Tp!BylB46ewDwLyq#MYjqC1$K9E3+u$PXx0id}rT zaO@D>=D8|AT!TVJAevA}@67EpquUhY_rgI6*#gmoB6>=yWw8*a0Gu)S)1?RL2Ncll zn)*3$bFZDY1+OxPuuhgPP6Cf2r+}EeNJy+8DVc&x^ybD2EvR5!{6kqPH3kQHv{9}x z_QY=i6D;iH;jG25K{0h7|BZ$Vae?k-=Ni8MsctP^$o~-De^~c=_PW;||5Dw1aIK5% z^$*d#=1UEgeJ<=MuHECb#@?(O{(MZB2?!PCKQjk&L7-nlqBDt*v4 z{SfV+F7EcG22=4)Z)t~j4^OZB(;Lej)Vt@6r)N6cy#1FakUzf;gZnkd>!E=R^$0J0 zVC>xsX*%>QbkgG)=?xda;1Lpzns?+)pX<#J`C%_YF`NQMe!BH>RH&h#LNQSSDH-K6 z=WFX2xNtq*9HR8yc^b`A&&*gqw>@!{Hl{z#%k_4DJYVk*$9rBO);65MxgQSsE4wPx6oIQGDsrO8IPMlX3v~8b zy9$B9Td4M=RV=cS#gwQWTAbKT5Q} zf$`CShwK-DX>91MMX5ZE+dp+hAma}!ubvN8}%WZd(rVt5$z$8yle%^{zVF<{yFAS>= zS&a3G2Yjjwtc1G)3y8Y@;6~y?X*qK)+mjBg&J3bu`QdShl_2^Q!e}U9)HAFDFA7aA z2E(>#0QY$ux)Z|u8EnhM1Q(RbF|Lz9MN%T3a*wq4-iEmMo>y;u$bEawMi{9HO?)CF zO?1MOnDSJoxD!*D%#@}w*~#zt)TcJNNlt9iQ1nPAf1`sZIz*|;s>c~`#58i}D_B`o z)zsC~70QlUf}|&1qkXt*`~hY2?uuXmIKcC_3_qwNS*>L zHRsF%b3n+r*=1LvD3HNF!@hQD0WD7d2?6JW6-A%Hk1j=bR|JE9=)?!6;n!!Js{_~$ z8IA%#iKFBzQm#RlX|r}QJWI9YCVH`AsvF+S$1Q#CasKznp@a$==%9}wJZ|C%8dQj& z>`JHdOJ!c^Rz|hM;cfZzPyfFJlo+%_p<-2~$q$BFNJU#i(0(W~UP>^6DUU@B4m~au^h!oYJPl69})M0q6%Ft zp%#3z2+SeUrbn-CbIsGI(-A!P0^Sk;ff%o6qxH__w+u^bkbdk8l?w-g&j^R0c{3ib`xL@VfeF zMCx9_OZ<>sj;!rrO0$H-7*@+4_<5)F&E(1PK`$Gf;4N^B`*yo2T)m7mYIy3*dVxtNCe3dDJ{qdG@bVgB%u57aE6{Y0^83`-5{G8P* zy=rAAL_RO%OJ5Ba03*WMmj$r-0Pqe0`U%jw!olRr9HfVV@I|oRtB+Nj-TMw7hth2W zW_DOvg*V=%7TDrdE3k~hB}=b5!8aTrkuAsL5g(@8Q{X#o(|$`KCE!sWam6}(49s@P zE6Lk+9AS3=L^Q5=C9BYU9B~reP1otvWQss1IjDM@Gz6 z{h{G152d}~S!5-#-i!A10&xl$v5V)D;fWzywoFBMD7$+lK}efa zzMCW@Nv2wpW;47(+Bbcz-R_a^tj-d5nk2JCN+MlC+_Ah>b0-#Ju9OrDNi-uY5XNYg z=ds%1ksC-)aKc?e`eAP7xoLatg~^E&k`c0&8@nY4%;%Ja?3Lds#1 zlp$lGXJ&ULA+c;5!`N7Aa&0FF_RogiqRiH$Ns+FRo8i#PkF4yU-qP5A zG_t6ILR;w7n# z<2LyagNEToazF$m6;hEzWl02zr@EX~o(axg_*8he@hWpjY_N1zYSsD4VJ=xO_5g<@ zR>|U5D~CGR-S*;Q98^_cMFh8VkG4?5VZYRRm#HgEEaq0}MHeaMsp8zpcq4HqCsg!z zz%-#&BHP-nGh2Z~gQ zXvrc@l5Wy1ACm48zxKhZfmnOO{ce zZFDwvp~dmQv2nD2#&|0cnl?5GON@Ihp430;q0JW+k$&Z zq@iXxMH!lsIG7Y!^1=Da1jnfxDH3KwA(yz5b}8aW)v{t%DsJJXpP%6(=n?0yy43I( z)U2da4f#zZSw-pQS75)l(lu$C;enp-nib0QJhJZ^a-k@&*^%ifi-yt~ve|TE^Uzn+ zS~;G+d|;D$K}?1_8m6vj+I72=3WC6Poq8j>_WMW+Pom9N8L&ITV;;j3v-D*_gtB{) zT2SMVW>K6t_(^13$mK}>fkFoY|j;O=E1cuHaRyS6yLKbmdUC9q7dl` z>Q(rEg{`))XET?J5e7gy`vpYfS0-Avv~uL`?oe#^MvG=3+BjgRfJP0sOZe0iOZCq7uzZ z1nRBCaxO{`-w?o`!IdCz0wq{DN4%35tNqGPwqry3hdqx;ftED8gGPy?z-7>rNkqZi z-IWx~^&7*Iv16-N-L0oN|ISzpqE~?hb$DS?->gDlvccT{_k*90>&R*0_ z#q`|MyuH5O4%l=x`B3pOX6 z)@t9#uG7Bd-jMb@0UC>`3>yf|#xik;KI40>1{?bgSRy-7CsqRQ^I1>pP(1A|+3=|9 z+2H*CAn?tfs@DK9X0XDd|JvhspRuVydao7C2gDFDq>;V9>_FiMcl9~F;e(!wiAO#2auE+CWh-wZ7z zR~%ZRU?uHmHUyXBU!F;&gfYXw zscn?NBo&2yHhD(HZylH7qP2e2T#aO-aZ2Wd;vB*^#`*Pje&^=m$(UVjArTb?T>skn zRzlT^X#Qn#`YrKt%gPloA;ZSOEr+v)T(WRlPL=+5E6r!@EPm+BS77wnmoyHDbZnBN zXuOYKT>pqB<|EmhsW(4&i{)j~Mvj7VTJT=s-POYl9Xlw$UAiX!EffBRHH)=>g?~op z3+)Po6xT3gXlb-0iAbQQ+Cm|!14vp^{FN5`p7?`;OW0(wG^-p&Wy5snaY<}*BblsZ zFfO-fIt#VEFaC7Q?<)JsB}E0eQGu^t`u(7dTYhV4nh+R)A-WoGGy{hq3rj@6xUQHE=+ky z@AlIMEsB*ir1s%St$G?_x@f}OL!)G2As&T6zVAIgIR&ZfFuC~@6(~~}s4=*?DOQX+ z1lcKg(V4XRgynZ*n^%xu8jDiPruaZ7vovEmwHit6zgCKJ!T?y}IV%@&$NvEajN`qn z1L|e+a2?KND9*^Ry;N}57b}z`v{4bt2MaNZEGK@XI@KDVVI^& zsFTFb4w~TkF;Y?FgPnR~p|XtK?O4tg97P@_e6q^(K7H z*Z6qE^^|WD19*#&UV9v>B>`$E0=IyuR zxEhv*nmQiF=UxLn7RKjM6UUE#@KV`-hOtP~6jeldQJFefUK{u?s=9tts=$U~JZ@gv zS~_hUN*`avxmbsva=}N6{jdZpM}0l6VT(s17AkOx%Szch_!4h^XkYhPB6|*H<|B6p zso~pkoQHe;O3c4Awmq}C2rjl@DaR=@+eI+qI&Uxc16-)@&xNTgBhVZ&Crey4B5J=2_7vht2&h5|dUI53xnEvE&Qa^UZ zXBkL@ByH#RhlT5(voFuaeaDXV-=Cx(r}O$-Qs4zg+j}IwX(hz`VBQ#N%~f zBk=@8IMs)^XMsD?ow z{*MZ{qBy1@m}*DfFY^RYrek43KhZ4XQLH;dRMkTGM}ug9=f^kI=6Fd}`zMzfBknn% zz7*9Qm^ine_=DU;r??$Oi|rJyL48(MD%*IV>`L=hvU<-@h|^ z8e1OWJ!G$W^4WtIkDm9q?BVxJM3!76bhe~V9otUH)mrn&pFon%0?fTsy84T&^+o7|TShTW; z{xa2;0kg;ksf!}dcHp#RtBC16Z6=CkkXX34Jf6g^*!LAb%S3o~N(OW3rhtPa%(jsJ z#G84P*xzp)ep*!NmQvk|{KTSH_6?%j@Ql{|vq9qjtU!SUZz#Cy5(d z=hjQ9o?<(NZ!K56j+xU3HL6c$oo}IuytKWHkU~X|oC?!?LbR@wuW^v;^2_Tv%Prwb zj+$)%S(sut$x^1bD3af zWw{AcET@#4=@Aw3ijN%M4jn@?FJk2xXlaP>1Is1nO#>#{+|On$9cS_XYq8__d^@h< zKQ6nZ+4)(6fqHK{U(R%&3lTtxH*=6`l?ds^RUVvB=*8`4nuHR%Ws4_MGRXe>VH=;Z z=T~DUk7vwyyobe0$~C~DG&IKyH_Ylq(#-W%hayDCv(g4?gYP^zX8{>`5&8;pp)7|H zoC(nthB9HEgBVo~HZT_IU1ekiTi_*p$hL`jnE`zfKmVLKk(#@9Dh{`qjtTWE51-Ju zI%Z$rQ&%I=#SdRY>P}Ae5DV||dT{+77GUNs`9Pv#`z7zb_!Z^7@!UpB&hF>b01z5ZYcK3SJ$0o#ur>LC2z=5&x=NFX@=7hJt z0UtjcUZ^at6b-vEF2TY`^{A@!kg{rK9W-LdgYrryp#K@FW|l$o3|UatETm`&+CQi$ z&claW09{aS(Y|YO)AJSgEB;9(s6&2?mQw=gB5eJ(eIB;g**8`TZ^ZmG}h}D_aR~ zd`%0V%sSBxjqz<1jlMf;H`Oh9RC*+lcjPG2@_1i==P+`O_|eHzh-YPzb*>^(AscjJ z9J2mM**t~K)=Mu`E**3jD|&YYbPcL1ql!gtj7K?I5gp8RIApM*TFJf_tQk-#t7i5o zBgl6Qhayf%cfB9ZP;NED`-3tcyntes$H{1>rG8MlsZn2|+tI|zi|o@}v3c!F;o_4_ zwkk>=S}=UFf23W%ER-*Md7@ABHw>#RPDC;a?YKk#FUh5* z-y{EZXFP0r+?25Zwme&s@n`p~ZtUG9R>c4EFH`5C?-PER`T_b+8=r$Y22Ku4g2y;9 zpNunZ?&!{+UR#dwKc7jT#A06sHUU^6Ft7+(gzNkT>zaVrKgNfmE~_a2lfqQ-234`! zUude)rdS{gS7C(M<-w|wayYtyB01>?DCC$ktidHCl|GU8^$%nfFB=#x{C+J|>@8vE4%#X89TSc@-LrhFyL$z=#s# z<;5JMl@ra!6mX+PYY9irvt=&#SYT78(txleh0G6FR#E}~t#x^cUzs=Lq}p_Zp%Fx)JdUqdBAMdzWNqaf}iRnBXk1SkK6ONhtRg@omgv~a~o99M>1 z@uW&u12W62hy$%J$Q)vm$DY znqIucLlcPt)NfhEdGDXin|-uqbSxU~U0Q81W^jcT9E#}6HN)om@-iRCL0HRjO0}@3 zFbPhE6V?pglK=kd;&vZO%kjeAf>(^_Iu&o61LgQttl9X^JCqzmrcm~6->&SvmdkVW!fYQ^rk=8WG>Pw zDBK0NE+74Ajh;#AzGTP@eHNc{-832i1HEwXCUDbeevTmH!KdJbpWWzqp(P`oQ2NhQ zInH|W6CTHoU&C}r4RA6%f0bk^ zTW{l!{+fR3Y39_u{r57CJ-wcuc`o*JY{uAa=7+x`mp?x9F~UBBgm?8mC7<^yl@&lkBP`TbG4DL#?Z?eJ?Fza5!^y`GdRI9>5Bq}Va zR>I)x$%guSS)e_B6a#O8iQM6=d-X|%i2%Ndw;QS>7u(=X@$SxM8zi<%|FrDn;Fin| zXHZh|;e8Z-N!e-3=DrJ}mOk;tK zX!K9u69=j}l1}0QQqMDAL5aUsm?ktNm5fE zP4K}0wA+2zV(n+W%>Qh7-x ztbd*T!b6%M&Ac|)r>U6!t~KM!hN}(O_ghbbXZy~AXD=cbFM=2QE_Np_W&ic}a|Yrn zF<9(2tA;5Wd3*(ht@HyUTYOx^3+Hcx3$u!q?(yiTTG@9 zl1~yZp?XVfv@BDl;WT{Mm#60%$p4TW!gvwE@uQKHr4Jg8LCJ=w!?waTtgNb1j<}tQ z;mXRPT=&_KTi|pnhpS$mm5wye5>;)jda=)=UQ$~(ruO=lsB3Cfi#qc7e<)oPc{nxhk{4W{!vL&+OuMinOIMqhtV{;vxj~FP5_Pn<})7vI%M;t>sDT??DEw@(jrO-ufqPen#R9BOWmVM%A zUbisY+m%Kab-y^kIKlKw#Eihn08=6X^&}|}OPGNZvu2mR{0%f^o&JP4l`g~+guoOL zzMz1RfET7uZKtq90W!HT#Gz0)p+Yh_5MoQzzc1BmwR^$6y2M|w-U*1E*qkPIW9Qt@ z7SqfF?u_h15}3A-2Ahh+#s6{zeew|-ZA7xXG&-F~ZzMoX!Es3t=G$^R?(1-@N48sT z=9Qa7voKyrG~YPNWPEv(WER8=h^CuY)43)xi|i1^iz!aIiNrk`iOhUSyyT%wGf8r! zz)C?6V?w_ga2pyM!&sL*QS?el8Jf8bYTqSyq&>GYUiz1R+BLiR65f|&`z)~?YG0*b z$OE?*P{kNx*v4|umM1R%i}#DhRL}lEHtd9n(WWlZm!XycYt=WBBFFxMTD%3+qZC<3WPU2YFWjoY-nZh<9TB=i-Amap$ zx(HJS3Z9;bP~-GopQo_6HfVxPVxl9)LJ|lbohW6*Y2A^#VJG)3R*^g*pXFQV#D>c2 zh4o5&S$lbgN8P&Fk--VoIIJSU*}@d@W^J+0U&z>hA5{ohxE3SCE)Irc{h990QopQ_ zu|^0nAM9_-YxwHe>OrORY`B*HxaFILuEc?Vg!+i?92V8y(p@fc)A|`fWPe;8oP#fT zv(y%PnM%Y83R3(fZ&-D>%uFtGASvBEpQ9U2hC}tz@yY7m!XmH#{;KF03rbni2tuMBcjy_V-!f#t!@A|0O z;DNOivjlzoY*~X62GPgucc{xCgoGuFq37X+ijvCgVRy7#f#dBbTpq4@ql6j{IzCJU zZo&`Q_AM*;_6ZkJAQsm3%Y3ADTwDLXqN8)mLtG=+bh?ZcA_rKSLK!P39%wn)O(o$T zq9-4R!=IvUC?Ou$0qzWC!=daF)9DYet^L@#ISq5LLErZqwcYsy6kV>9?v=t>5T7T@ zgQZ_9`vVd>^>3hY#0d&AeC;xuJ)g^(15*iGc9p=68R=YA2vw6MkWpggO8YK%4ms{0qvq zYR7-pEM*8Sm72M^83$f;@;b$BXc@Y`C)xhpV;b?4R?bi?%!{wCRD;-kh*H;Ew$NeOoz$O`E~8sZ+*u)-0o| zf?v?o+LT-jCkN^(tJM)szKvd+k|Ig$`%7{^m0F)~E9T_Y&1z1GKq)oz+M0Bge7&1F z3osf%W1q2CG(+kHJ3&$oOz9;j^pYviL1r!ZIaterJDKMVXGN5q8`qK9d20AqPoPbE zqZ@f^e>W_K=enO)cLIzNU!_WSd9@0omiPVP49$r_i0zxwRfCsxhCTQ(^p@HY&b zB2K}ue-lBJn-0ToUX=O4ajHQUC!-n0{OQt7CC?%r+Q;#n_Jv_-_MGCtdbpm9;V9#e&$WDVlYtx zo3{1f)~%|?&7ifgI0omwBSC=if|~_T@sZae%brw1^DKHdG$uG^t4W&YRYhQDp#}l( z8}ODvE90Z5V0PtRa4%GfLEyv*BB&pR!Qv5pdGQo-joSHi{;@36y!Q~mU3zr@9w-D0 z=fhjoprf8}6=}aaePG`132)0=%vL2YQ?e2m)9PtG1Q>WuA1oreR~+i)tXw+G7( z({b-H@O{v_p6P?(z0<(H)EW<$I7lU(0YgSdO4yizDUs?K{5S z0d$|%kTX8-GIFi{71q&lkr{-%1^RXi?$sTDo*d8BewK$Gq?xSf&rB6M$pBX(K>y|) zR4S+s>TBR@E0L8ufcg155sa^xBO^)J&?YL)Lsr5Yk9A>O#A^?Ro&8#mBU{*QD4H+Nnp^|91WpjPsJ?Hh#XI?eiI@_Kg%fGZq;2d;uw z@2LETn_mc&jZPXUCM*V|-+CE(*|^|;);t<5WwT@8WSfh%(UvHI0>rfw&Yh-U-zo^Xk&d!2uiN% znNwd-#?v|&O=)^i-=m);EqCvPTw)Q$R_h{)s%k0|+;E~j5(o>-_*9~iFNU4F{s8Z6 zPc>#yKi(NnyYl{HMoykVjl>!q4i(#gzp;_R{nCi_b*e7>MCGTMwgS z)Kz@5n={8Ews2cufJ&ZPRmHWqxO1#xE5{+YN_o<6R^w*Bysm%t9cAuZC(Bvp^?94h z5{uvhmNn`iWC_d}#JBjIwxwg_pRY`SN8Kq6>M;EX-If8dsD?rxMJaM-dMFkVYfZY1 zEY1aUgkR0irEmsM8Ss1oy|R?+a)`??MR(0cLJ>`Toh`KapViZ=xl)>AB0xZ#drUi? z&Q)i7+#vIjhtrvm?n_jJD6a45X&j}rk&3nTfOWc4S)W`%wwJPuUi9)=gpb!n_-Z?$ zM%`M&9Wxh|vvWNa?qm!6W|74z4>NRr)<{)o{pUN45G^l6UrzFgrS!nwA{tHVri95Z zkqGZp_{d7WlkgJLE@Ef6$bM?wU-}BTKMNuU(UKzk4{RqYzW=^~7P+M9ZHh{-u;F<; zS>Eyj>e!uvi?$ozZL6}fTptJVFT|eARWu8VW|+3PGX(WYxMbFx)kF6rclth+e6*-(Rcl36Elk_aoaSgx_p9St zP}`?%%SDwqiq}mNUCQjij1+|hW+F)3e+>1>3!`Ev)E1jd&5AP6u2Q%&_2n7XM=tzA zy=v=swWDop2)8vYTJE*raxXx;ig8r^+>SO{{ra}o_ZNP}Iqbynf6tL@r92(P`Z+|C9I1;gy^ z%C}!TeA4eoG;rSLfDsPDLN=%}0<_!)YGb}V%u!X=Mw3J6NiPkDo7$H4|0%iG^M&No z!8yxjmsZuJ1fk@rmZr+idFw|-sX+#4yz3UIT@1*^w00~VwN3)OC4a?`wP36{y=!Qs zb!^a}`z*vd-oGC3`|cb;{yB}A4FR?|p=mGy+1|AUcAEgo#V8$V4CuTK-dr2mLS0S| z{-R@quZ5^Uj(2|G{$K}$-e3eM-k<%z{-IpG#m%&tY)XZ}W@oufX1&hk^D}+UfL81A z`B;93U*2)B%8WERlS*MFu5Zy`1483I<_JG>Lh{{GNw)xAE&9;hHtQUC>z!BI@{AfT ztS^*{h&;x(0uo5z&7v@V<%-_dL!9v(@j@;QH~HBt|2IABZ76k%H0y9R2_H zJN{*DIZNcQ=NqAjEy}iV=%1g#96Sl`9p8J7EV{19y%XKuM*r;Mc^akK5ma+S5zzZC zQ=)T(k*dgaLc02tG{=~)&+Zlqa>UsDqo_<|YPo;j%@ZGjzsIc$VdY!f6jq6ho6SA4 zhlZqoHYY=PmrL(E!h6bpJLSKyUH&oA;9xo|k>QNiu77nweLNhUYdmG_oc-zXnYCGivftN8& z-Q1HkE`~7MN1{6|>V8@UR`tTYE5Vij!p5J~TlQ+mR*9lcUiAFO)A7HK0zI)=mp60} zV2;KV;u`%n9hs*m-n^fPNyXxJjr_5AA4Tocn#Fc1hTxSlVP+0F)Z(Sfyb-&O_V&x) zZ+{I7J^uOd=|3vEDj2M>$wRdnk*Zx;rn}@fTkWvD3OLxT9sfCR2~J^{ZScwqVsbxL zET6$HyHax%p7mv(DJwT7*UVR!oUNRt!+c*dm=KFb(k38A!XL)8Rh#F^P1v*4`tt9g z$s#EqfGm>ozn~7%Yz%p5wsIgzAF6znr0>i2MNL9pwV(wzV6(|+L2F(W21%@=1at8H z4hIk(omZKNuxT}Z=}NAOVlwpB6RKPCsuQ69_?)C;;G}L6JSO3qf5%oGlS?8Ji+e!f z^>FQJh09aI11Mal;o9}Qr9^mo0~qw1bvGGS7LspvwgiT zP`q3jtx_y>>+xlKm(!)kFhzU2RWwUcsZT~N6q*=p(ntCQ>ZBF~|Mei(tD$6Bu|bVP z(qCS-SRV4ODws3dur}+58lCZ*n)ZV{lAdh zVu#(=nPBeAaP+|PghNQBHk$xeb@EWL=92$@h;8e^*4H=IWA$<855%g? zOzrY^s~}}GL2A-T;j9gO-Vrs7bEK|iNpY@u=H-9&JnLgXIcTgI9}8x@uhWU-@M9tD zpFZ-F*Y#o5J<#?Z-_EpY+P<*abQceez79?70y9=TXY#$K(N`&tR#>9l(Gq}b2Fsa* z80(7R$=muWoo0@~tJKF-*$t(q;Mv#mOd@rR%8ZWH()WVJ{d2{hV09@~6MI?k@_xm~ z_hB%bQqWM&pFYv6vB-y2aNxVkj5S}ax!yk=I1s)(6m5*@hg1cWc$ZOi^qLp6q=i3+ zeFz?|4;L}fEYm&8@)F&R+uw~vVliA`1A1T*3iMSQaW4`9wDL)5D=Yy%5jWyCB%DBz zO{9$YV-kg+x$MIeUcolt734mFD?W#JhXT%5BjxEx+fY9cST41KB&FFFu;g4U%`HD3 zKXN z;3({NUCr@qpOs||7jpx*v#9t-j+fjHmX?S(A*r?{9;UJ-1R!Lqyk60i37*~i#UDWY z24F$?zu#g3*IxwTI>KSQ!A~}r>2hSPa(4{-eF^W(3#$Wff|H?v|DKd1NvE;~3j%Z% z9J7Mtc-bw1?`j^7M`0IU(d-XN!A82U%-o6!krR$0?v&Vzq(AU7D6Y}tJA{t6ZX05m>_C%%9e^R!ElI4w|}SQSU?p(XC@w1-$cYG_nv zk9^^HHL!Ui|N7M#QwR{-3S1~8filB_-NSCHS{)M;r;xbHh6*myP?N(e{WopF)NR0~ zHD3>mieg>_b5MJR_qeLo<# zQiuzFv`9-*EX`*_M|D%a_dL5bjMA4)`Mpz;A(0^*HN>P&$x$sf|ABPiL)HBDU6B%x z2IyHu)zu|GyYBj+9fPTbk7kO`d;IhwI+F;DUP;C3omN@I_tuUz<{Q zRMOd{UUNk(j88;Nv3xXsxoVW+ZX{x3RAQP7vZpgH#nsu-LB&NpH6p@p!g3`oR1;-~ zEL#qIj&@Ym-Cx%~pSGViTLpl=pI@cw_lN%8f4A**za8$w|GNzE@ad-AFIVOCcL0Nj z&;1D%V4Ivi2oXVP-iSiIRcgpRE{-7QY~&u}^|y&HxFaT>L6qF;M3C0gEvGJu6jtV6 z&t}vVJa|fy^`w^lDtss$&U;f`N0@2$yvBxo5E8_$(u&Fzfy0mVFlPW z05;eTi1cugj~FNx>vDBrbi(WD_Q%|U>ruD%11^B&o0S`&J7#;XXRTpD!{vxMs<(P? z%@bR0*~pdda8Fv551XgXeHqAjFcY@ICKlSXk_GxWn`a;GZ9OHoK7H2%0G~Z^PJp8} z<@F4}`}6^0t71D_SqMMMj-rTzak=ge4bo8;F+Oa9{|3b z#;acrFC+9ME?b8Vn$-a}Y&)QUM>iY;%f^30@8KOeYEks-HjwI5!WKq}XCg#Sp!=(5 zZRWwAdy^iyTMeMGuK`aW*^ww@zgBz*+jBxP*ONF8j%>FrT}9T8aOw8e*|Rr|Q5n59 zdi7`?HKRv8qame7P+|9LSl9CUf6m^uyFXzWjZCU8^)qP!I4*#{{m4pFoxRknkg=iZ-jZKP`UT0nHT|Ikhr{PT-u>n-~+J#%DV01s%(Kk zdYc6x-Wr?*TxG^2#E3K^ah63+*HD zbkhN8eIxbFx0U}1un1(2VR%QelC^7ZpNPlSJ4l0^0m=Z95Hcp_uFc)pg4K6K(d$!j zY{>@NXj1JJ$5fKu_9=^~W*MEmb!iQtU8IJ+8myMmhI8^rkso`S5|dVui2*1hOa-OX z(OofwxjH7(*{DgjCk&Euf@Wb;4)PObn2kvjAzztVfHpqb*=suAZtPhjn>4SYoSM|x zr#+2s4LK(H@usGZ-WNt(yfaJ}iG<(|+-XZNbjlq}%TvtDb1a>uNIE)AfdxdZL?u&*S_h@>!<9H9rAJxUgHEvqcMCZPxUx@cE@*NY{5CE>Ef@_ew;Vv z!e~AwVS?)f7{F%d%4)M?>>0$Oh{C8BtdLg1aWA!$;V`kpTB&vbvTjmG62`HdF=+6L z42f}_SRnipBdeYCZKk%VIJNtrA)?{bayZJM)i$yQPa&c?*;fv>OEHgt5~Sbj zkj&@+n|*O`z=`M_98h8|3y^juc0mW7MjehACFud&qQa6a{HwVscLtDoKKA+R^7Y6D z0K1lvp5PN*Wj{(#9*Gm^F!S^V#G?|KC_7SpGW^SKFiQsuZ$4%8lW8YE_s+^~j`bTF z`62p7zz|U8D|y^ctzl>fu^%dg3z2t81~o?)!Qr9*)&jXvg%$(QI6dcb_Xd0seh7c; zfUDVXqQ7|<_Zx2kQ#KguvBAku5S#+E`_1;`Qml@<8&y4Pt3kby{wtTrfkW-| zRzA$VitvSBx)6rS$?w2z3;|#c^F5$@;8{a#uw}_2pUiYlho6ousiA=e2j~tZ#Ccxl zgKU*5pv-XN`}5_rq1mGj!7Xirl>1S)$8ggb+S%3Gfv2Hd)yjFT1Wd~H3u&Zp5eNuo zl48Ap`xGp)H}3mVhzwrlR;S&xGzI?q=sez`a|KmDm1wa7B!JQ7ib=FWAj-=)VV_k zS#JZG{=7^l$)mdX1M;A?$%o$D(g;5M2+@2uZJ(e&*1lfV0xo3gnt+c85}8epm`>UC z{c6qFGV4nVeYf9ALoKH+_kG!kxF{{uzNx}O`c)NF&&Z=Gx(c;*ObRpA+MWTgE8rNF zLB{l8CiJigJ<~{EACx`GT{{0e#D3Txd_ja7u}}yQ97rI{Lc|a}A+{zQ$?%js+|J{= zJLl-ucV$W6s9RZdX@Rsd=+c0?G*;k}m*K%Y7A;x~MWdCduAI)E&16q-y$=&}%|+Da zYH2SWzLKnh6!@7=uLwA^eJlT(o}AD|xd^TKO5um$kJj5|(pElw<~;Ft{x5we{bp5b zU1XtcDlP>Mk9tuFXk`R<1-FNk=~v<(@*i8@t|r^ccb=I?dq}@h{7(GMtmZn&Ts_LW z*smAx(rhDH9&Sn3Ql~^EBVZN?KqHD6HAk*hz)mD2&=4ca)Tdi)6ripkAlxlMoCvT) zT6qhys_UZSG_u}kq>Q4tsCVZ4rn~@BR_c3{C$X3a*7tRAihHm)@)Q7IgD?jn`a{q3 z3k+F0h1}PH{o~$O`pQiwSEB1%=FWB(xN%7et=s`^gC59pC+V0mjXeck;}OE+Lq1fI zV$$9SdS0(`m`ww@#-wYx zaJ5pwXUeY<^<2#Pa{0A#`!p=d`ck%=N-2suSgy(eDy!C|z0auEE~U9gq0D;+ZX2qn zAPPnNEL#z|OSG1pDcA;W8ZRmEpqw}mH;5;n<1$!=+}&aSYlU*nQbm|;E9h}B0iIZuMn7Z$Av5xIxlr< z4GM&F@IKBP42wcwwz~;X-SXZzp=&gZ(zSSk zQh4p49S?3J+ET>#4!QFnRT+VmD+>9dC}A1v>}HMC5e{0$;;w=SKH20@g)`wn4IKF$ z4SlCi%CxwtRQE*EQo}O$;_INLgWw6}jPrj;;c0Bwwh0z`QA?PJmNzvm(wIDG5wzT- z^@&(=uh!Wy(qH}^C$ z?fAvbs{v=*>#fW8q2)cE)qGRzRb6E+8Jp5XC0GQkWv;~V#t(YfRM^jUPQv-xd5xW= z9r6{2r#P<RYS(V^ z^*#Ft-mrUi21=BGC9iacb~LU8@FwVl3=+ZLT@grDLSXkIONw?_hGAhTSojh-P;L3^ zgthNxNp<7aZHvJvtL4c9RdIIk(V)Xoi69$%?Z7@h8g%TD>VRhKX%jK&@cIn3i0Leo z%4}VOb`0>8vyhjYXpEt!ITdG zaRaGS;A)OzFW?pM4N#5qp^5AsW({E0R^xPm1x0=u$yY^cA0J8Eo5Ri6q+UlPaQsrc zwd{~-U>lc`FjXJMdQEx76EA@vsFVp2h)MK)$5`$=fvWdLm0&E-;(WpB<^o?1u5v|9 z+02BWG|4}Aqb8PBwa$Vwk7%#=Mp$Xph$8 zTC!x^&HT*;>mwZ04|Jf{^Wx)MZf;AoAL{qIsg~5|lxfSJ_;Xat_P8Ts-M>7Rz7;Op z1G+}fN9yOP`!nilit4JBx>D~|g=$d)3X`xBk}jjFoT(nau5mW5G#yf^ugmHCKfL^^ zoqGy{^9)3zFC95YfAsM#u8!N|;h0yYsdJ__kjGqo= zJjWxlO)R_t?0(mhlgU2KV4%r{{ZnOAzG~?c37W`=+ZE*S)9za2Jx?rjRY&G$Vs0mYv)w+$^vnsxoFAW% zA}grDU^pHQx$sX|0Av@m;q?@XG0TE7AtKj`Xte5!RYYgK9?xliL#d(bqOu^*Ni#B{D@AZ#QxrV5SKUq@ zP-6{<$yY8+Uhgdn>EM&eKg2Dq?!Lut8`s0CemQg@DT!T&KG@2hM?j>SRkp!dV$MpT7_ z3^l&_g4is=LZZxIP81%)pyHxHDoQYbN zAmE^;&DGlieX5+dEO)IGXW3v^MLYb#p2%@k`PPNo3Y%ewynt|<=f&eAAYICt!>6t0 zVA)OzA^p9=(h+a@c55F1l4iJyN}wvFh4>^Yf*pKlvKeHe|G9ZQv&HohfeG_$CT?;w zN3#C`@>+NcWT7NohXCymG^o+xU$yuBbBP)F?$lknkDu;E>qjihOFT=@T6U3#<_O8D zUB9!&wx);adi{DfeTQkJE|fG3tpZMqtsjJ1-_OynVuX>Lw3cJmMLbkyY+9%Wrxuko zY9^s{nPjKse#T?2$s9SU8CRMTvjDrbv~_M>8-3NZ#EnVNREVb7#?W=S^2yDF#LUxH zL~EF6SIQeHC5ck%^s~RP_hAwF>7>k!Be*p&sWtr$*ekxK9u>4gJxsJsA>)03`IlU3 zh7(lTS=O^wNDH@ZFxgFOegU6os8W`QQXCY_CBryP^Atj!3uiTs$F>7n0XD%#l-d>< zwl=|iqP30EE7gg4ENARRViGgkDeHh3VmKj5%kFtH0Vjc7+8Yw6H%E%nb{}D;Bip+g zK9Xj;2$TjnMw8b4s4{opAxC(UV{i3|6MGcPAtH&8WsA_%eMesALo_LI@6hS>0~{MQ zcIZ@FFqOuDk@J>DVySU5#unqXBmD@o+Q_NuaZ2;i4#E4u!@3AEFE~Ww^&bsFL94rx#ojhh? z-wmWiOc=Qp5pQSGDHfr$(&XU6fay-yXT^2t4E=H3#Hf9e#doRbD zv$kY_SDM2QQdY0WPnJ;I9 zwOmzaz+DKM0=wjfdSdq`KXdj~5^8qD3;EZZv`v2@%Ka-UPrR`RN-Dmv2|$kd%VBwm z*$pOCu41Fk{Ab`^DWRlpR%f2yTxm;l%%kYL{pcFDmT7crUO$9S0$!cZvEZV5o=HM)Hk|~(#K|n4AV&AG14wvlt!5$g&L1FMgQTadf5NY`P5U(mpY7TXjPOG zJ$+O=y#80# z=r$H&aOWp8Kxk-S=Dxf4wz`PQ% z`8a&Dy(?x?k6&t!4__B!&!OuR(Iy{VMntzviNmbwGA%;%k;W;|p}63vx)c2{%hiOl z%>(>Lg&IwJh4CR>xBL%$mgelUwHv_fa~ck7=E9?KwVvoG2hjC@(kf41Vfk#K>&~;* zxMSw5IgZQ7oVhc1<}~kV&fkZ<=A!*cxBg|n$CEsa>TPq%OlPBG5Gk0$PV0&Vo@fzD z(duz-(Uno!P7Dw}w90=Vx}PRn$cgFrxCoZ)l1Hj^nKEm~Kj7^n;nzPpe&3&zS6qVg z?km@B+8`P>|_G5B~Ql{H8CcJm4_xI=;U`Eh2pKv`cxz!kd8lRjvO zPs-q4)Acjp10>|&vL-kJ0$LaWJpG) z<%$E#c5kkWEKZDGLTFySL{GK}wC6JMEwf8krT4pHx9owvvc6SO>k8OW(u%F=wYJf^um$kI;@CWyPV+gy zffIF8P%J9Z;&D7@pnqBs&s`(lh_ApW2hU--pXW1|AFAMUkOLwraPdlt>^eHQjnXSs zpGH(5QOTm{29Y~bO+7D#E_yP!sRF5Xi0Ey)dVcmyu3R^1G)~@Nljm*~QtN?Z6-BKq z2G<$-obZD*%deg**)Jl4yJ#f0)?X`&g6TxC z^=&h`KiPmW#y0Lar3I)hHs!hy0s}{IsSD`(a$3xcJGM5uL>p62@*JK&0Fj&3Yrb=A zejo+(?B%3k@b^%b47IqTP6rq$kC4Ys281VY=VweQ03Mi=ae@x?vqZfJ z)>)8m%Ii5eoW^-19A2*#tqJ&hLMjjceyqkVJ#)b>7`vi<;aq(?h#2lZqv7J;hI_L+ z+>X)-AKdTNyvF<)R$QBy-D`0(4c)t2U7PUV@^Oq--h!)ZjPXM}BT1obKSCCB4uU6( zU63lrM}dY^0Smzn{=_($97ioB+wsxS5zz~uns*b>E$nQA3~kd1Xrs*ec%o;kLkI@t6k{ZKk`(3eQMzl!Bs`1IT&!3kC}Kzw7~xnMB)@~=RF^>E`aOTo*M7i{`W^mAaa^1fUoU>{ z*S<=egle703&Fu{N}EZTMU1&$|E8x`0jN>#mG{az0uhal7-`4tq2uiMWDY9;s1&AR(; zzEC>D=ZWWAtMjlkF?*sc5Y;+S0z@}?%f>A- z*V}PBo2EurSPyKtugmy;^wJG_!Cs()KoAW&f|2sLJSo3k{yadSt zr^8DBZNgFMRrV_S1WxpHoRNOqPx{yU&rf>144r7fl}*F>%nMZvnxDlp+qAY;Y#maq zJ!QpG_G3(?fk*q~jJ4Vwn^d3;`3yw*=86zvASs&Jk zr<@Vi!P7AZ85(t@Va6B@C!5DHQp9tb$UZtMa78EIGV$nCnhB27NZ zG`G{9e=M`iMutx@M?lGHYJliG2i6u9Z zGDibfnmpZQB>>T)ZVB zP6Vzt39-xM`Sow$5Xne|%!kF8DbUrSAa8UV!6>yGdLV>-&oK z(a=fO5ZM~m=bN^E5poY_2gi`(5++(NTeyd_h;xKAb|0x&KeoY$qic`q_G05hgNBV7H*KcGbl@$wR3)?gT@%OJu*i#n z$$}t^;~7BR^|CR~XS5{^gzTqML>^I0t5Z_wb6<_IL+ebWT{Cr>9CMkQYXP&@#}8@i zO1;8qD5(T8BqS-wsX9T*G+Nv^KEvWb zk(m1=b^{@1q}GSbW&eOf8cB0VY~E0Wm<5xyR~Te)CwrLJ3sA`vL1EhZzzw~dBQ^$% zXNDnU#X9=b&Xc068tCc4#;RJ%x^$XJ&8O>Xqzda(SQj(BOBa*-C4Aoj&>(t8h@^0_ zY0ggMB6^Fxi{Oq(!iinr%zo~q{K zs#jik$=6x_`~(ORDA*Gr!h{MJAxb3Wv^1WX6D0XsP#H@;zOA--twyc(m@h4O?}Hih z-kMXVUXx}68Z;V|u1}6~L%MY9$hA_j%Wk+CZ~DzA2tZ)eiQ%?w!O4(;fmWwC zsH&-JkX}oBj3Nwih-(qZ{z0*pz!(@B&7SnLjLn@}Sc0z+BGUZ51A-8Xbk5byeT{38 zHv7RwYdV>>wG+uy8m_M89ERQAHe2mZx7QyGN8<^6oqxUnEJKJp1=OyoFm?*^*)k{Z zcJ&`-(D~FgCV|BHwzg@_UB;h(jhFoA!NZuR|2`x7b|P^@t3%K_gs{s&Mv)R_DvS)z zvQDE~t2dghcE?kGHwdF%e*niSQf&&zZCbnqtk#?D-u}Vi(ecUY+4;rg)%8uRjV80j zYO_0>F1N?)^9Krxf+6-=OZ2tRPa2Bh;i38f{zC4tuT(aypQ$>QI8z_9vG?hN2oXac zq;G~=(fU**Sag@IHgFffJllaXUC0_9TF#1CO_FcypF~;h#l+1|Q8T>mEUS|@Shh$O zW{E1dkzCB-bQ?d6g9Bnuj~cMiz2SXU1Z@M%3fVnpAn&(+#uIGONV% z23|Q>96g~=qmQ-3q~TO`KR8P+uR#9}(hf^utY;g)JPr5@0VA79h8 z_U367xi&N;PinOX9)wfsVQv1v2R#zDBw;bV`YrWT0Z(3Xhkx!Mo`=y+B;isa5F<4K zXU4<@0s{c(H&^03GqK!~Z8kQx?0#pFW_gh}t7l#iduawbleheey>>@Zu}HCGERilR z^X+K8mS!zBx8&lUeOH1%s~2O5de$J^#33PJ2o-AOt8Ar}Z?w@i+y056wL$DfM) zo?|I4d}AuRdADb)^f9j&)H0`ly&zT5obUHstt@vx6y!SR{f1cP2UES*ux}O5Y4WAg zejZHcxThO1kI@$HsT5jYR4cpAOOp-B%^H*`e`#U=vp7w+MpzQIS?BF}yo;)?2-X^F zEjMd~3IQRo@{{3NKlqLg18@Kmh~NqUP6iPW+)c@x+N(L&*QM&BjQ}yvrdja|let!U z!?jh656t@iswR4&jjMX1!p$ZD20cLIXFxd{!=hWIVA1m!oI zi?cN=<-I@4;7U^y2^rA!yXI=kH~-6;&eeI+QJ=icO*EuYZtI3dDmj(QiqV%!mp`;% zQz&KBoQ7sUD_a#>uqo9*%~jD%D4|eFmm25JqDc!5Kmrk50l>*10-|fDi;Xro00~5J z1pp_52#BsMhE(GKBoM(B0GtdWAh@2>AbMp_ZERx~JJ`WCcCm{c>|hh+O-^pr9CKyu z3-S=u_q8a0*5rOk^r$3{(^QH(sBFros6l>`!a9GNa%!%sJ^08r^TY)I%6rq)bBAl} z#bADVIl#>31%b?N@6UEn`4HIl8qK!W@8_ByarZx+%RhtVP%V*H+}dETz3Fk^sL<2) zpEq3^=HHUZjaS6FTeZwzp7mm57$w`qjZfbdvtV;&=A80A5RKxdhcIECLH`QNFY-%A z4OYF`&k0-66tE=+jD{s4!BP-pS`jd7dksSwAouuVEMSd_5ROAfeSiEy!(2DUNBfc+ zx|x2{_u}arDg4&YPcTjRgR_lA_&S4_TW>VEbXNmI=D8n+vt z8uuIjHvVb+Y>55c#rXh2Qz(qD$P`EVx1NUBZt%2z=Yf!j=Wk&eK=nWp;qL}edfnY@ z?}_L8HRFw^;>Lq(4gdde&(ttOrFH3J<>;MhTI*+ZXV~A*>)O}4dhN7#Itn&#oENlR zWOes-`et!@9vqzru*mBqopciD5MFnxH@Sjzrdh!d%Mt;hJ2vC?6RH~kOlf0fZgXWi UATlv9H7!F}P)<%)AWl<7U+3>-3IG5A literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-ThinItalic-Web.woff b/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-ThinItalic-Web.woff new file mode 100644 index 0000000000000000000000000000000000000000..1ae13a43804e8704b0e81814f4a28b1b1e22d273 GIT binary patch literal 46175 zcmX6?18`+=wr$(CZDV8GwrykMWMkXL&G+A_dTOS-`k9&TIn&jr#!XIC z6aWPHX-#?n#Gei*rRhHj0BFSh5rhB$;DG;^0RS<1IVAufya)gwUIhT${&?x;zKAKQ z2m%0=-T(kZ9sqziqXeUgE~iAt_`^N<;VJ(>-$c_+$jHXP9smIU002M+0RS*|RdP39 zBUfia007qf$Au+WTPCwl6v>zSp{{R7iFtheB z1ptsh0RU@m0AR=d3T(I3+{D26hhzO?!}=e{^3 z|D!+pv2z;C#gn(Ub8-d%{3rncC_4ZES(SdQ=-J-U_QR|F!3np!l5dxX{>FI%sf`@KPPpN%x zFw)cOnXp&&_0eOILM*yu2mnEP0D9ixP2AUGQf$O?R4_-sS02+W&a&vBO77uU?*DoF zEpFnM+Mem!^H>xqw72k9^##^73$m`J5(g_F3fCdvL^p*G$o=gRMw}0ie9Nn{IdNRJ zgd-_?c;Fj-pWiqo+#Pkv*>~YP=3RN!`@SDTR{gH=tjfdV+tp}~M!xKW?+ys!4Ajm# z&_>Q69iJNWVkeg>>+@(NWKQ?27$YcM0GVj2$*YG4A(}qvQEg_6VR*^3Fl9zd zEUP&`^-A6z5x*rIHkHYz5f<+~{y13H&(cL{;G{z?KmOd(TKxsi%mne}j>W-goLZfleIGn%0Aq^I3O!mxxVxlPRc*Xyr>>qo$ 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

    Cw)4r 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 literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/ftxpay.png b/CandyMachine-Storefront/store/js/packages/web/public/ftxpay.png new file mode 100644 index 0000000000000000000000000000000000000000..d204cae91cfd05c70990fba9faad7ba17946c6cd GIT binary patch literal 45315 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 literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/img/artist1.jpeg b/CandyMachine-Storefront/store/js/packages/web/public/img/artist1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..c884b07c5a9f16191e9ccd05900c57f101c86ac2 GIT binary patch literal 17967 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%0DO6U^T9q0ZB-7OTV`oqNcwWfz` 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 KKm`C40RP!vIMHqZ literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/img/artist2.jpeg b/CandyMachine-Storefront/store/js/packages/web/public/img/artist2.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..bbe3a5f9da5933ec8134427c5bfb300e5d8c15d9 GIT binary patch literal 17896 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 literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/img/artist4.jpeg b/CandyMachine-Storefront/store/js/packages/web/public/img/artist4.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..c13843c19b332865a53441a1d5d80e1a52863c52 GIT binary patch literal 11364 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 (p&L|tjsTT2A2! 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%0D0d4V%DF7aKHAum2N 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 ZQ>!`DoSw6(DNat>E6Po`Wu~uS|JlYb+&TaN literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/logo.ico b/CandyMachine-Storefront/store/js/packages/web/public/logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..da4839396bd02f30766830af208d273bcc7641f7 GIT binary patch literal 5430 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 literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/logo.svg b/CandyMachine-Storefront/store/js/packages/web/public/logo.svg new file mode 100644 index 0000000..296cefe --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/public/logo.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CandyMachine-Storefront/store/js/packages/web/public/manifest.json b/CandyMachine-Storefront/store/js/packages/web/public/manifest.json new file mode 100644 index 0000000..cc33f00 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/public/manifest.json @@ -0,0 +1,25 @@ +{ + "name": "Metaplex NFT Marketplace", + "short_name": "Metaplex NFT Marketplace", + "display": "standalone", + "start_url": "./", + "theme_color": "#002140", + "background_color": "#001529", + "icons": [ + { + "src": "/favicon-16x16.png", + "sizes": "16x16", + "type": "image/png" + }, + { + "src": "/favicon-32x32.png", + "sizes": "32x32", + "type": "image/png" + }, + { + "src": "/favicon-96x96.png", + "sizes": "96x96", + "type": "image/png" + } + ] +} diff --git a/CandyMachine-Storefront/store/js/packages/web/public/robots.txt b/CandyMachine-Storefront/store/js/packages/web/public/robots.txt new file mode 100644 index 0000000..e9e57dc --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/CandyMachine-Storefront/store/js/packages/web/public/site.webmanifest b/CandyMachine-Storefront/store/js/packages/web/public/site.webmanifest new file mode 100644 index 0000000..45dc8a2 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/public/site.webmanifest @@ -0,0 +1 @@ +{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file diff --git a/CandyMachine-Storefront/store/js/packages/web/public/sol.svg b/CandyMachine-Storefront/store/js/packages/web/public/sol.svg new file mode 100644 index 0000000..19ce038 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/public/sol.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/CandyMachine-Storefront/store/js/packages/web/src/App.tsx b/CandyMachine-Storefront/store/js/packages/web/src/App.tsx new file mode 100644 index 0000000..de7a4a7 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/App.tsx @@ -0,0 +1,8 @@ +import React from 'react'; +import { Routes } from './routes'; + +function App() { + return ; +} + +export default App; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/addTokensToVault.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/addTokensToVault.ts new file mode 100644 index 0000000..d83cedc --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/addTokensToVault.ts @@ -0,0 +1,128 @@ +import { Keypair, Connection, TransactionInstruction } from '@solana/web3.js'; +import { + utils, + findProgramAddress, + MetadataKey, + StringPublicKey, + toPublicKey, + WalletSigner, +} from '@oyster/common'; +import { SafetyDepositConfig } from '@oyster/common/dist/lib/models/metaplex/index'; +import { approve } from '@oyster/common/dist/lib/models/account'; +import { createTokenAccount } from '@oyster/common/dist/lib/actions/account'; +import { + addTokenToInactiveVault, + VAULT_PREFIX, +} from '@oyster/common/dist/lib/actions/vault'; + +import { AccountLayout } from '@solana/spl-token'; +import BN from 'bn.js'; +import { SafetyDepositDraft } from './createAuctionManager'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; + +export interface SafetyDepositInstructionTemplate { + box: { + tokenAccount?: StringPublicKey; + tokenMint: StringPublicKey; + amount: BN; + }; + draft: SafetyDepositDraft; + config: SafetyDepositConfig; +} + +const BATCH_SIZE = 1; +// This command batches out adding tokens to a vault using a prefilled payer account, and then activates and combines +// the vault for use. It issues a series of transaction instructions and signers for the sendTransactions batch. +export async function addTokensToVault( + connection: Connection, + wallet: WalletSigner, + vault: StringPublicKey, + nfts: SafetyDepositInstructionTemplate[], +): Promise<{ + instructions: Array; + signers: Array; + safetyDepositTokenStores: StringPublicKey[]; +}> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const PROGRAM_IDS = utils.programIds(); + + const accountRentExempt = await connection.getMinimumBalanceForRentExemption( + AccountLayout.span, + ); + + const vaultAuthority = ( + await findProgramAddress( + [ + Buffer.from(VAULT_PREFIX), + toPublicKey(PROGRAM_IDS.vault).toBuffer(), + toPublicKey(vault).toBuffer(), + ], + toPublicKey(PROGRAM_IDS.vault), + ) + )[0]; + + let batchCounter = 0; + + const signers: Array = []; + const instructions: Array = []; + const newStores: StringPublicKey[] = []; + + let currSigners: Keypair[] = []; + let currInstructions: TransactionInstruction[] = []; + for (let i = 0; i < nfts.length; i++) { + const nft = nfts[i]; + if (nft.box.tokenAccount) { + const newStoreAccount = createTokenAccount( + currInstructions, + wallet.publicKey, + accountRentExempt, + toPublicKey(nft.box.tokenMint), + toPublicKey(vaultAuthority), + currSigners, + ); + newStores.push(newStoreAccount.toBase58()); + + const transferAuthority = approve( + currInstructions, + [], + toPublicKey(nft.box.tokenAccount), + wallet.publicKey, + nft.box.amount.toNumber(), + ); + + currSigners.push(transferAuthority); + + await addTokenToInactiveVault( + nft.draft.masterEdition && + nft.draft.masterEdition.info.key === MetadataKey.MasterEditionV2 + ? new BN(1) + : nft.box.amount, + nft.box.tokenMint, + nft.box.tokenAccount, + newStoreAccount.toBase58(), + vault, + wallet.publicKey.toBase58(), + wallet.publicKey.toBase58(), + transferAuthority.publicKey.toBase58(), + currInstructions, + ); + + if (batchCounter === BATCH_SIZE) { + signers.push(currSigners); + instructions.push(currInstructions); + batchCounter = 0; + currSigners = []; + currInstructions = []; + } + batchCounter++; + } + } + + if (instructions[instructions.length - 1] !== currInstructions) { + signers.push(currSigners); + instructions.push(currInstructions); + } + + return { signers, instructions, safetyDepositTokenStores: newStores }; +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/cacheAllAuctions.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/cacheAllAuctions.ts new file mode 100644 index 0000000..64e8a8a --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/cacheAllAuctions.ts @@ -0,0 +1,107 @@ +import { Connection, Keypair, TransactionInstruction } from '@solana/web3.js'; +import { + getAuctionCache, + loadAccounts, + MetaplexKey, + MetaState, + ParsedAccount, + programIds, + pullPages, + SafetyDepositBox, + sendTransactions, + sendTransactionWithRetry, + SequenceType, + WalletSigner, +} from '@oyster/common'; +import { cacheAuctionIndexer } from './cacheAuctionInIndexer'; +import { buildListWhileNonZero } from '../hooks'; +import { BN } from 'bn.js'; + +// This command caches an auction at position 0, page 0, and moves everything up +export async function cacheAllAuctions( + wallet: WalletSigner, + connection: Connection, + tempCache: MetaState, +) { + if (!programIds().store) { + return false; + } + const store = programIds().store?.toBase58(); + + if (tempCache.storeIndexer.length) { + console.log('----> Previously indexed. Pulling all.'); + // well now we need to pull first. + tempCache = await loadAccounts(connection); + } + + let auctionManagersToCache = Object.values(tempCache.auctionManagersByAuction) + .filter(a => a.info.store == store) + .sort((a, b) => + ( + tempCache.auctions[b.info.auction].info.endedAt || + new BN(Date.now() / 1000) + ) + .sub( + tempCache.auctions[a.info.auction].info.endedAt || + new BN(Date.now() / 1000), + ) + .toNumber(), + ); + + const indexedInStoreIndexer = {}; + + tempCache.storeIndexer.forEach(s => { + s.info.auctionCaches.forEach(a => (indexedInStoreIndexer[a] = true)); + }); + + const alreadyIndexed = Object.values(tempCache.auctionCaches).reduce( + (hash, val) => { + hash[val.info.auctionManager] = indexedInStoreIndexer[val.pubkey]; + + return hash; + }, + {}, + ); + auctionManagersToCache = auctionManagersToCache.filter( + a => !alreadyIndexed[a.pubkey], + ); + + console.log( + '----> Found ', + auctionManagersToCache.length, + 'auctions to cache.', + ); + + let storeIndex = tempCache.storeIndexer; + for (let i = 0; i < auctionManagersToCache.length; i++) { + const auctionManager = auctionManagersToCache[i]; + const boxes: ParsedAccount[] = buildListWhileNonZero( + tempCache.safetyDepositBoxesByVaultAndIndex, + auctionManager.info.vault, + ); + if (auctionManager.info.key === MetaplexKey.AuctionManagerV2) { + const { instructions, signers } = await cacheAuctionIndexer( + wallet, + auctionManager.info.vault, + auctionManager.info.auction, + auctionManager.pubkey, + boxes.map(a => a.info.tokenMint), + storeIndex, + !!tempCache.auctionCaches[ + await getAuctionCache(auctionManager.info.auction) + ], + ); + + await sendTransactions( + connection, + wallet, + instructions, + signers, + SequenceType.StopOnFailure, + 'max', + ); + + storeIndex = await pullPages(connection); + } + } +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/cacheAuctionInIndexer.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/cacheAuctionInIndexer.ts new file mode 100644 index 0000000..eaa270a --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/cacheAuctionInIndexer.ts @@ -0,0 +1,210 @@ +import { Keypair, TransactionInstruction } from '@solana/web3.js'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; +import { ParsedAccount, StringPublicKey, WalletSigner } from '@oyster/common'; +import { getSafetyDepositBoxAddress } from '@oyster/common/dist/lib/actions/vault'; +import { + StoreIndexer, + getStoreIndexer, + getAuctionCache, + MAX_INDEXED_ELEMENTS, +} from '@oyster/common/dist/lib/models/metaplex/index'; +import { setStoreIndex } from '@oyster/common/dist/lib/models/metaplex/setStoreIndex'; +import { setAuctionCache } from '@oyster/common/dist/lib/models/metaplex/setAuctionCache'; +import BN from 'bn.js'; + +// This command caches an auction at position 0, page 0, and moves everything up +export async function cacheAuctionIndexer( + wallet: WalletSigner, + vault: StringPublicKey, + auction: StringPublicKey, + auctionManager: StringPublicKey, + tokenMints: StringPublicKey[], + storeIndexer: ParsedAccount[], + skipCache?: boolean, +): Promise<{ + instructions: TransactionInstruction[][]; + signers: Keypair[][]; +}> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + const payer = wallet.publicKey.toBase58(); + + const instructions: TransactionInstruction[] = []; + + const { + auctionCache, + instructions: createAuctionCacheInstructions, + signers: createAuctionCacheSigners, + } = await createAuctionCache( + wallet, + vault, + auction, + auctionManager, + tokenMints, + ); + + let above = + storeIndexer.length == 0 + ? undefined + : storeIndexer[0].info.auctionCaches[0]; + + const storeIndexKey = await getStoreIndexer(0); + await setStoreIndex( + storeIndexKey, + auctionCache, + payer, + new BN(0), + new BN(0), + instructions, + undefined, + above, + ); + + const { instructions: propagationInstructions, signers: propagationSigners } = + await propagateIndex(wallet, storeIndexer); + + return { + instructions: [ + ...(skipCache ? [] : createAuctionCacheInstructions), + instructions, + ...propagationInstructions, + ], + signers: [ + ...(skipCache ? [] : createAuctionCacheSigners), + [], + ...propagationSigners, + ], + }; +} + +const INDEX_TRANSACTION_SIZE = 10; +async function propagateIndex( + wallet: WalletSigner, + storeIndexer: ParsedAccount[], +): Promise<{ instructions: TransactionInstruction[][]; signers: Keypair[][] }> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const payer = wallet.publicKey.toBase58(); + + let currSignerBatch: Array = []; + let currInstrBatch: Array = []; + + let indexSigners: Keypair[] = []; + let indexInstructions: TransactionInstruction[] = []; + + let currPage: ParsedAccount | null = storeIndexer[0]; + let lastPage: ParsedAccount | null = null; + while ( + currPage && + currPage.info.auctionCaches.length == MAX_INDEXED_ELEMENTS + ) { + const cacheLeavingThePage = + currPage.info.auctionCaches[currPage.info.auctionCaches.length - 1]; + const nextPage = storeIndexer[currPage.info.page.toNumber() + 1]; + if (nextPage) { + lastPage = currPage; + currPage = nextPage; + } else { + lastPage = currPage; + currPage = null; + } + + const storeIndexKey = currPage + ? currPage.pubkey + : await getStoreIndexer(lastPage.info.page.toNumber() + 1); + const above = currPage ? currPage.info.auctionCaches[0] : undefined; + + await setStoreIndex( + storeIndexKey, + cacheLeavingThePage, + payer, + lastPage.info.page.add(new BN(1)), + new BN(0), + indexInstructions, + undefined, + above, + ); + + if (indexInstructions.length >= INDEX_TRANSACTION_SIZE) { + currSignerBatch.push(indexSigners); + currInstrBatch.push(indexInstructions); + indexSigners = []; + indexInstructions = []; + } + } + + if ( + indexInstructions.length < INDEX_TRANSACTION_SIZE && + indexInstructions.length > 0 + ) { + currSignerBatch.push(indexSigners); + currInstrBatch.push(indexInstructions); + } + + return { + instructions: currInstrBatch, + signers: currSignerBatch, + }; +} + +const TRANSACTION_SIZE = 10; + +async function createAuctionCache( + wallet: WalletSigner, + vault: StringPublicKey, + auction: StringPublicKey, + auctionManager: StringPublicKey, + tokenMints: StringPublicKey[], +): Promise<{ + auctionCache: StringPublicKey; + instructions: TransactionInstruction[][]; + signers: Keypair[][]; +}> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const payer = wallet.publicKey.toBase58(); + + let currSignerBatch: Array = []; + let currInstrBatch: Array = []; + + let cacheSigners: Keypair[] = []; + let cacheInstructions: TransactionInstruction[] = []; + const auctionCache = await getAuctionCache(auction); + + for (let i = 0; i < tokenMints.length; i++) { + const safetyDeposit = await getSafetyDepositBoxAddress( + vault, + tokenMints[i], + ); + + await setAuctionCache( + auctionCache, + payer, + auction, + safetyDeposit, + auctionManager, + new BN(0), + cacheInstructions, + ); + + if (cacheInstructions.length >= TRANSACTION_SIZE) { + currSignerBatch.push(cacheSigners); + currInstrBatch.push(cacheInstructions); + cacheSigners = []; + cacheInstructions = []; + } + } + + if ( + cacheInstructions.length < TRANSACTION_SIZE && + cacheInstructions.length > 0 + ) { + currSignerBatch.push(cacheSigners); + currInstrBatch.push(cacheInstructions); + } + + return { + auctionCache, + instructions: currInstrBatch, + signers: currSignerBatch, + }; +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/cancelBid.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/cancelBid.ts new file mode 100644 index 0000000..c33f13d --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/cancelBid.ts @@ -0,0 +1,146 @@ +import { + TokenAccount, + cancelBid, + cache, + ensureWrappedAccount, + sendTransactionWithRetry, + AuctionState, + SequenceType, + sendTransactions, + ParsedAccount, + BidderMetadata, + StringPublicKey, + WalletSigner, + toPublicKey, +} from '@oyster/common'; +import { AccountLayout } from '@solana/spl-token'; +import { TransactionInstruction, Keypair, Connection } from '@solana/web3.js'; +import { AuctionView } from '../hooks'; +import { + BidRedemptionTicket, + PrizeTrackingTicket, +} from '@oyster/common/dist/lib/models/metaplex/index'; +import { claimUnusedPrizes } from './claimUnusedPrizes'; +import { setupPlaceBid } from './sendPlaceBid'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; + +export async function sendCancelBid( + connection: Connection, + wallet: WalletSigner, + payingAccount: StringPublicKey, + auctionView: AuctionView, + accountsByMint: Map, + bids: ParsedAccount[], + bidRedemptions: Record>, + prizeTrackingTickets: Record>, +) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const signers: Array = []; + const instructions: Array = []; + + if ( + auctionView.auction.info.ended() && + auctionView.auction.info.state !== AuctionState.Ended + ) { + await setupPlaceBid( + connection, + wallet, + payingAccount, + auctionView, + accountsByMint, + 0, + instructions, + signers, + ); + } + + const accountRentExempt = await connection.getMinimumBalanceForRentExemption( + AccountLayout.span, + ); + + await setupCancelBid( + auctionView, + accountsByMint, + accountRentExempt, + wallet, + signers, + instructions, + ); + + if ( + wallet.publicKey.equals( + toPublicKey(auctionView.auctionManager.authority), + ) && + auctionView.auction.info.ended() + ) { + await claimUnusedPrizes( + connection, + wallet, + auctionView, + accountsByMint, + bids, + bidRedemptions, + prizeTrackingTickets, + signers, + instructions, + ); + } + + instructions.length === 1 + ? await sendTransactionWithRetry( + connection, + wallet, + instructions[0], + signers[0], + 'single', + ) + : await sendTransactions( + connection, + wallet, + instructions, + signers, + SequenceType.StopOnFailure, + 'single', + ); +} + +export async function setupCancelBid( + auctionView: AuctionView, + accountsByMint: Map, + accountRentExempt: number, + wallet: WalletSigner, + signers: Array, + instructions: Array, +) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const cancelSigners: Keypair[] = []; + const cancelInstructions: TransactionInstruction[] = []; + const cleanupInstructions: TransactionInstruction[] = []; + + const tokenAccount = accountsByMint.get(auctionView.auction.info.tokenMint); + const mint = cache.get(auctionView.auction.info.tokenMint); + + if (mint && auctionView.myBidderPot) { + const receivingSolAccount = ensureWrappedAccount( + cancelInstructions, + cleanupInstructions, + tokenAccount, + wallet.publicKey, + accountRentExempt, + cancelSigners, + ); + + await cancelBid( + wallet.publicKey.toBase58(), + receivingSolAccount, + auctionView.myBidderPot.info.bidderPot, + auctionView.auction.info.tokenMint, + auctionView.vault.pubkey, + cancelInstructions, + ); + signers.push(cancelSigners); + instructions.push([...cancelInstructions, ...cleanupInstructions]); + } +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/claimUnusedPrizes.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/claimUnusedPrizes.ts new file mode 100644 index 0000000..d01804e --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/claimUnusedPrizes.ts @@ -0,0 +1,487 @@ +import { Keypair, Connection, TransactionInstruction } from '@solana/web3.js'; +import { + ParsedAccount, + TokenAccount, + SafetyDepositBox, + deprecatedGetReservationList, + MasterEditionV1, + findProgramAddress, + programIds, + createAssociatedTokenAccountInstruction, + MetadataKey, + BidderMetadata, + toPublicKey, + WalletSigner, +} from '@oyster/common'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; +import { AccountLayout, MintLayout } from '@solana/spl-token'; +import { AuctionView } from '../hooks'; +import { + WinningConfigType, + redeemBid, + redeemFullRightsTransferBid, + withdrawMasterEdition, + BidRedemptionTicket, + getBidRedemption, + PrizeTrackingTicket, + AuctionViewItem, +} from '@oyster/common/dist/lib/models/metaplex/index'; +import { createTokenAccount } from '@oyster/common/dist/lib/actions/account'; +import { + eligibleForParticipationPrizeGivenWinningIndex, + setupRedeemParticipationInstructions, + setupRedeemPrintingV2Instructions, +} from './sendRedeemBid'; + +export async function findEligibleParticipationBidsForRedemption( + auctionView: AuctionView, + bids: ParsedAccount[], + bidRedemptions: Record>, +): Promise< + { + bid: ParsedAccount; + bidRedemption: ParsedAccount; + }[] +> { + const unredeemedParticipations: { + bid: ParsedAccount; + bidRedemption: ParsedAccount; + }[] = []; + for (let i = 0; i < bids.length; i++) { + const bid = bids[i]; + if (!bid.info.cancelled) { + const winnerIndex = auctionView.auction.info.bidState.getWinnerIndex( + bid.info.bidderPubkey, + ); + const bidRedemption = + bidRedemptions[ + await getBidRedemption(auctionView.auction.pubkey, bid.pubkey) + ]; + const eligible = eligibleForParticipationPrizeGivenWinningIndex( + winnerIndex, + auctionView, + bid, + bidRedemption, + ); + console.log(bid.pubkey, 'eligible?', eligible); + if (eligible) { + unredeemedParticipations.push({ bid, bidRedemption }); + } + } + } + return unredeemedParticipations; +} + +export async function claimUnusedPrizes( + connection: Connection, + wallet: WalletSigner, + auctionView: AuctionView, + accountsByMint: Map, + bids: ParsedAccount[], + bidRedemptions: Record>, + prizeTrackingTickets: Record>, + signers: Array, + instructions: Array, +) { + const accountRentExempt = await connection.getMinimumBalanceForRentExemption( + AccountLayout.span, + ); + const mintRentExempt = await connection.getMinimumBalanceForRentExemption( + MintLayout.span, + ); + + if ( + auctionView.participationItem && + auctionView.participationItem.safetyDeposit && + auctionView.participationItem.masterEdition?.info.key == + MetadataKey.MasterEditionV2 + ) { + const balance = await connection.getTokenAccountBalance( + toPublicKey(auctionView.participationItem.safetyDeposit.info.store), + ); + if (balance.value.uiAmount || 0 > 0) { + // before we can redeem, check if we need to print other people's stuff. + + const unredeemedParticipations = + await findEligibleParticipationBidsForRedemption( + auctionView, + bids, + bidRedemptions, + ); + + await Promise.all( + unredeemedParticipations.map( + p => + auctionView.participationItem && + setupRedeemParticipationInstructions( + connection, + auctionView, + accountsByMint, + accountRentExempt, + mintRentExempt, + wallet, + p.bid.info.bidderPubkey, + auctionView.participationItem.safetyDeposit, + p.bidRedemption, + p.bid, + auctionView.participationItem, + signers, + instructions, + ), + ), + ); + + await setupWithdrawMasterEditionInstructions( + connection, + auctionView, + wallet, + auctionView.participationItem.safetyDeposit, + auctionView.participationItem, + signers, + instructions, + ); + } + } + + const printingV2ByMint: Record = {}; + + for ( + let winnerIndex = 0; + winnerIndex < auctionView.auctionManager.numWinners.toNumber(); + winnerIndex++ + ) { + const winningSet = auctionView.items[winnerIndex]; + + for (let i = 0; i < winningSet.length; i++) { + const item = winningSet[i]; + + const safetyDeposit = item.safetyDeposit; + const tokenBalance = await connection.getTokenAccountBalance( + toPublicKey(safetyDeposit.info.store), + ); + // If box is empty, we cant redeem this. Could be broken AM we are claiming against. + if (tokenBalance.value.uiAmount === 0) { + console.log('Skipping', i, ' due to empty balance'); + continue; + } + if ( + winnerIndex < auctionView.auction.info.bidState.bids.length && + item.winningConfigType != WinningConfigType.PrintingV2 + ) { + continue; + } + + switch (item.winningConfigType) { + case WinningConfigType.PrintingV1: + console.log( + 'Redeeming printing v1 same way we redeem a normal bid because we arent printing it', + ); + await deprecatedSetupRedeemPrintingInstructions( + auctionView, + accountsByMint, + accountRentExempt, + wallet, + safetyDeposit, + item, + signers, + instructions, + winnerIndex, + ); + break; + case WinningConfigType.PrintingV2: { + const winningBidder = + auctionView.auction.info.bidState.getWinnerAt(winnerIndex); + if (winningBidder) { + const bidderMetadata = bids.find( + b => b.info.bidderPubkey === winningBidder, + ); + if (bidderMetadata) { + console.log('Redeeming v2 for bid by wallet', winningBidder); + await setupRedeemPrintingV2Instructions( + connection, + auctionView, + mintRentExempt, + wallet, + winningBidder, + item.safetyDeposit, + item, + signers, + instructions, + winnerIndex, + prizeTrackingTickets, + ); + } + } + printingV2ByMint[item.metadata.info.mint] = item; + break; + } + case WinningConfigType.FullRightsTransfer: + console.log('Redeeming Full Rights'); + await setupRedeemFullRightsTransferInstructions( + auctionView, + accountsByMint, + accountRentExempt, + wallet, + safetyDeposit, + item, + signers, + instructions, + winnerIndex, + ); + break; + case WinningConfigType.TokenOnlyTransfer: + console.log('Redeeming Token only'); + await setupRedeemInstructions( + auctionView, + accountsByMint, + accountRentExempt, + wallet, + safetyDeposit, + signers, + instructions, + winnerIndex, + ); + break; + } + } + } + + const allV2s = Object.values(printingV2ByMint); + for (let i = 0; i < allV2s.length; i++) { + const item = allV2s[i]; + await setupWithdrawMasterEditionInstructions( + connection, + auctionView, + wallet, + item.safetyDeposit, + item, + signers, + instructions, + ); + } +} + +async function setupRedeemInstructions( + auctionView: AuctionView, + accountsByMint: Map, + accountRentExempt: number, + wallet: WalletSigner, + safetyDeposit: ParsedAccount, + signers: Array, + instructions: Array, + winningConfigIndex: number, +) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const winningPrizeSigner: Keypair[] = []; + const winningPrizeInstructions: TransactionInstruction[] = []; + + signers.push(winningPrizeSigner); + instructions.push(winningPrizeInstructions); + const claimed = auctionView.auctionManager.isItemClaimed( + winningConfigIndex, + safetyDeposit.info.order, + ); + + if (!claimed) { + let newTokenAccount = accountsByMint.get( + safetyDeposit.info.tokenMint, + )?.pubkey; + if (!newTokenAccount) + newTokenAccount = createTokenAccount( + winningPrizeInstructions, + wallet.publicKey, + accountRentExempt, + toPublicKey(safetyDeposit.info.tokenMint), + wallet.publicKey, + winningPrizeSigner, + ).toBase58(); + + await redeemBid( + auctionView.auctionManager.vault, + safetyDeposit.info.store, + newTokenAccount, + safetyDeposit.pubkey, + auctionView.vault.info.fractionMint, + wallet.publicKey.toBase58(), + wallet.publicKey.toBase58(), + undefined, + undefined, + false, + winningPrizeInstructions, + winningConfigIndex, + ); + } +} + +async function setupRedeemFullRightsTransferInstructions( + auctionView: AuctionView, + accountsByMint: Map, + accountRentExempt: number, + wallet: WalletSigner, + safetyDeposit: ParsedAccount, + item: AuctionViewItem, + signers: Array, + instructions: Array, + winningConfigIndex: number, +) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const winningPrizeSigner: Keypair[] = []; + const winningPrizeInstructions: TransactionInstruction[] = []; + const claimed = auctionView.auctionManager.isItemClaimed( + winningConfigIndex, + safetyDeposit.info.order, + ); + signers.push(winningPrizeSigner); + instructions.push(winningPrizeInstructions); + if (!claimed) { + let newTokenAccount = accountsByMint.get( + safetyDeposit.info.tokenMint, + )?.pubkey; + if (!newTokenAccount) + newTokenAccount = createTokenAccount( + winningPrizeInstructions, + wallet.publicKey, + accountRentExempt, + toPublicKey(safetyDeposit.info.tokenMint), + wallet.publicKey, + winningPrizeSigner, + ).toBase58(); + + await redeemFullRightsTransferBid( + auctionView.auctionManager.vault, + safetyDeposit.info.store, + newTokenAccount, + safetyDeposit.pubkey, + auctionView.vault.info.fractionMint, + wallet.publicKey.toBase58(), + wallet.publicKey.toBase58(), + winningPrizeInstructions, + item.metadata.pubkey, + wallet.publicKey.toBase58(), + winningConfigIndex, + ); + } +} + +async function setupWithdrawMasterEditionInstructions( + connection: Connection, + auctionView: AuctionView, + wallet: WalletSigner, + safetyDeposit: ParsedAccount, + item: AuctionViewItem, + signers: Array, + instructions: Array, +) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + if (!item.masterEdition || !item.metadata) { + return; + } + + const myInstructions: TransactionInstruction[] = []; + const mySigners: Keypair[] = []; + const ata = ( + await findProgramAddress( + [ + wallet.publicKey.toBuffer(), + programIds().token.toBuffer(), + toPublicKey(item.metadata.info.mint).toBuffer(), + ], + programIds().associatedToken, + ) + )[0]; + + const existingAta = await connection.getAccountInfo(toPublicKey(ata)); + console.log('Existing ata?', existingAta); + if (!existingAta) { + createAssociatedTokenAccountInstruction( + myInstructions, + toPublicKey(ata), + wallet.publicKey, + wallet.publicKey, + toPublicKey(item.metadata.info.mint), + ); + } + + await withdrawMasterEdition( + auctionView.vault.pubkey, + safetyDeposit.info.store, + ata, + safetyDeposit.pubkey, + auctionView.vault.info.fractionMint, + item.metadata.info.mint, + myInstructions, + ); + + instructions.push(myInstructions); + signers.push(mySigners); +} + +async function deprecatedSetupRedeemPrintingInstructions( + auctionView: AuctionView, + accountsByMint: Map, + accountRentExempt: number, + wallet: WalletSigner, + safetyDeposit: ParsedAccount, + item: AuctionViewItem, + signers: Array, + instructions: Array, + winningConfigIndex: number, +) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + if (!item.masterEdition || !item.metadata) { + return; + } + const updateAuth = item.metadata.info.updateAuthority; + const me = item.masterEdition as ParsedAccount; + const reservationList = await deprecatedGetReservationList( + item.masterEdition.pubkey, + auctionView.auctionManager.pubkey, + ); + + const newTokenAccount = accountsByMint.get(me.info.printingMint); + let newTokenAccountKey = newTokenAccount?.pubkey; + + if (updateAuth) { + const claimed = auctionView.auctionManager.isItemClaimed( + winningConfigIndex, + safetyDeposit.info.order, + ); + console.log('This state item is', claimed); + if (!claimed) { + const winningPrizeSigner: Keypair[] = []; + const winningPrizeInstructions: TransactionInstruction[] = []; + + signers.push(winningPrizeSigner); + instructions.push(winningPrizeInstructions); + if (!newTokenAccountKey) + // TODO: switch to ATA + newTokenAccountKey = createTokenAccount( + winningPrizeInstructions, + wallet.publicKey, + accountRentExempt, + toPublicKey(me.info.printingMint), + wallet.publicKey, + winningPrizeSigner, + ).toBase58(); + + await redeemBid( + auctionView.auctionManager.vault, + safetyDeposit.info.store, + newTokenAccountKey, + safetyDeposit.pubkey, + auctionView.vault.info.fractionMint, + wallet.publicKey.toBase58(), + wallet.publicKey.toBase58(), + item.masterEdition.pubkey, + reservationList, + true, + winningPrizeInstructions, + winningConfigIndex, + ); + } + } +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/closePersonalEscrow.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/closePersonalEscrow.ts new file mode 100644 index 0000000..f4e3b6b --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/closePersonalEscrow.ts @@ -0,0 +1,45 @@ +import { Connection, Keypair, TransactionInstruction } from '@solana/web3.js'; +import { + utils, + sendTransactionWithRetry, + StringPublicKey, + toPublicKey, + WalletSigner, +} from '@oyster/common'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; +import { Token } from '@solana/spl-token'; +// When you are an artist and you receive royalties, due to the design of the system +// it is to a permanent ATA WSOL account. This is because the auctioneer can't transfer monies +// from your WSOL to your SOL wallet since you own both, and having the auctioneer temporarily +// own your WSOL account to the transfer is one hell of a security vulnerability for a little convenience. +// Instead we make the WSOL permanent, and you have to accept it on the UI via your "unsettled funds" +// notification. All we do is then transfer the lamports out of the account. +export async function closePersonalEscrow( + connection: Connection, + wallet: WalletSigner, + ata: StringPublicKey, +) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const PROGRAM_IDS = utils.programIds(); + + const signers: Keypair[] = []; + + const instructions: TransactionInstruction[] = [ + Token.createCloseAccountInstruction( + PROGRAM_IDS.token, + toPublicKey(ata), + wallet.publicKey, + wallet.publicKey, + [], + ), + ]; + + await sendTransactionWithRetry( + connection, + wallet, + instructions, + signers, + 'single', + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/closeVault.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/closeVault.ts new file mode 100644 index 0000000..2eb2e44 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/closeVault.ts @@ -0,0 +1,107 @@ +import { Keypair, Connection, TransactionInstruction } from '@solana/web3.js'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; +import { StringPublicKey, toPublicKey, WalletSigner } from '@oyster/common'; +import { createTokenAccount } from '@oyster/common/dist/lib/actions/account'; +import { + activateVault, + combineVault, +} from '@oyster/common/dist/lib/actions/vault'; +import { approve } from '@oyster/common/dist/lib/models/account'; + +import { AccountLayout } from '@solana/spl-token'; +import BN from 'bn.js'; + +// This command "closes" the vault, by activating & combining it in one go, handing it over to the auction manager +// authority (that may or may not exist yet.) +export async function closeVault( + connection: Connection, + wallet: WalletSigner, + vault: StringPublicKey, + fractionMint: StringPublicKey, + fractionTreasury: StringPublicKey, + redeemTreasury: StringPublicKey, + priceMint: StringPublicKey, + externalPriceAccount: StringPublicKey, +): Promise<{ + instructions: TransactionInstruction[]; + signers: Keypair[]; +}> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const accountRentExempt = await connection.getMinimumBalanceForRentExemption( + AccountLayout.span, + ); + const signers: Keypair[] = []; + const instructions: TransactionInstruction[] = []; + + await activateVault( + new BN(0), + vault, + fractionMint, + fractionTreasury, + wallet.publicKey.toBase58(), + instructions, + ); + + const outstandingShareAccount = createTokenAccount( + instructions, + wallet.publicKey, + accountRentExempt, + toPublicKey(fractionMint), + wallet.publicKey, + signers, + ); + + const payingTokenAccount = createTokenAccount( + instructions, + wallet.publicKey, + accountRentExempt, + toPublicKey(priceMint), + wallet.publicKey, + signers, + ); + + const transferAuthority = Keypair.generate(); + + // Shouldn't need to pay anything since we activated vault with 0 shares, but we still + // need this setup anyway. + approve( + instructions, + [], + payingTokenAccount, + wallet.publicKey, + 0, + false, + undefined, + transferAuthority, + ); + + approve( + instructions, + [], + outstandingShareAccount, + wallet.publicKey, + 0, + false, + undefined, + transferAuthority, + ); + + signers.push(transferAuthority); + + await combineVault( + vault, + outstandingShareAccount.toBase58(), + payingTokenAccount.toBase58(), + fractionMint, + fractionTreasury, + redeemTreasury, + wallet.publicKey.toBase58(), + wallet.publicKey.toBase58(), + transferAuthority.publicKey.toBase58(), + externalPriceAccount, + instructions, + ); + + return { instructions, signers }; +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/convertMasterEditions.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/convertMasterEditions.ts new file mode 100644 index 0000000..004aeca --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/convertMasterEditions.ts @@ -0,0 +1,267 @@ +import { Keypair, Connection, TransactionInstruction } from '@solana/web3.js'; +import { + ParsedAccount, + sendTransactions, + SequenceType, + sendTransactionWithRetry, + Metadata, + MasterEditionV1, + MasterEditionV2, + MetadataKey, + convertMasterEditionV1ToV2, + TokenAccount, + programIds, + toPublicKey, + WalletSigner, +} from '@oyster/common'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; +import { Token } from '@solana/spl-token'; + +const BATCH_SIZE = 10; +const CONVERT_TRANSACTION_SIZE = 10; + +export async function filterMetadata( + connection: Connection, + metadata: ParsedAccount[], + masterEditions: Record< + string, + ParsedAccount + >, + accountsByMint: Map, +): Promise<{ + available: ParsedAccount[]; + unavailable: ParsedAccount[]; +}> { + const available: ParsedAccount[] = []; + const unavailable: ParsedAccount[] = []; + let batchWaitCounter = 0; + + for (let i = 0; i < metadata.length; i++) { + const md = metadata[i]; + const masterEdition = masterEditions[ + md.info.masterEdition || '' + ] as ParsedAccount; + if ( + masterEdition && + masterEdition?.info.key == MetadataKey.MasterEditionV1 + ) { + if (batchWaitCounter == 10) { + console.log('Waiting 10s before continuing to avoid rate limits'); + await new Promise(resolve => setTimeout(resolve, 10000)); + batchWaitCounter = 0; + } + console.log('Reviewing', masterEdition.pubkey); + let printingBal = 0; + try { + const printingBalResp = await connection.getTokenSupply( + toPublicKey(masterEdition.info.printingMint), + ); + printingBal = printingBalResp.value.uiAmount || 0; + } catch (e) { + console.error(e); + } + + const myAcct = accountsByMint.get(masterEdition.info.printingMint); + if (myAcct) { + console.log( + 'Existing print account subtracts', + myAcct.info.amount.toNumber(), + 'from', + printingBal, + ); + printingBal -= myAcct.info.amount.toNumber(); + } + + if (printingBal > 0) { + console.log( + 'Reject', + masterEdition.pubkey, + 'due to printing bal of', + printingBal, + ); + unavailable.push(masterEdition); + } else { + let oneTimeBal = 0; + try { + const oneTimeBalResp = await connection.getTokenSupply( + toPublicKey(masterEdition.info.oneTimePrintingAuthorizationMint), + ); + oneTimeBal = oneTimeBalResp.value.uiAmount || 0; + } catch (e) { + console.error(e); + } + + const myAcct = accountsByMint.get( + masterEdition.info.oneTimePrintingAuthorizationMint, + ); + if (myAcct) { + console.log( + 'Existing one time account subtracts', + myAcct.info.amount.toNumber(), + 'from', + oneTimeBal, + ); + oneTimeBal -= myAcct.info.amount.toNumber(); + } + + if (oneTimeBal > 0) { + console.log( + 'Reject', + masterEdition.pubkey, + 'due to one time auth bal of', + oneTimeBal, + ); + unavailable.push(masterEdition); + } else { + available.push(masterEdition); + } + } + + batchWaitCounter++; + } + } + + return { available, unavailable }; +} +// Given a vault you own, unwind all the tokens out of it. +export async function convertMasterEditions( + connection: Connection, + wallet: WalletSigner, + masterEditions: ParsedAccount[], + accountsByMint: Map, +) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const PROGRAM_IDS = programIds(); + const signers: Array> = []; + const instructions: Array> = []; + + let currSignerBatch: Array = []; + let currInstrBatch: Array = []; + + let convertSigners: Keypair[] = []; + let convertInstructions: TransactionInstruction[] = []; + + // TODO replace all this with payer account so user doesnt need to click approve several times. + + for (let i = 0; i < masterEditions.length; i++) { + const masterEdition = masterEditions[i] as ParsedAccount; + + console.log('Converting', masterEdition.pubkey); + const printingMintAcct = accountsByMint.get( + masterEdition.info.printingMint, + ); + const oneTimeAuthMintAcct = accountsByMint.get( + masterEdition.info.oneTimePrintingAuthorizationMint, + ); + if (printingMintAcct) { + if (printingMintAcct.info.amount.toNumber() > 0) { + convertInstructions.push( + Token.createBurnInstruction( + PROGRAM_IDS.token, + toPublicKey(masterEdition.info.printingMint), + toPublicKey(printingMintAcct.pubkey), + wallet.publicKey, + [], + printingMintAcct.info.amount, + ), + ); + } + + convertInstructions.push( + Token.createCloseAccountInstruction( + PROGRAM_IDS.token, + toPublicKey(printingMintAcct.pubkey), + wallet.publicKey, + wallet.publicKey, + [], + ), + ); + } + + if (oneTimeAuthMintAcct) { + if (oneTimeAuthMintAcct.info.amount.toNumber() > 0) { + convertInstructions.push( + Token.createBurnInstruction( + PROGRAM_IDS.token, + toPublicKey(masterEdition.info.oneTimePrintingAuthorizationMint), + toPublicKey(oneTimeAuthMintAcct.pubkey), + wallet.publicKey, + [], + oneTimeAuthMintAcct.info.amount, + ), + ); + } + + convertInstructions.push( + Token.createCloseAccountInstruction( + PROGRAM_IDS.token, + toPublicKey(oneTimeAuthMintAcct.pubkey), + wallet.publicKey, + wallet.publicKey, + [], + ), + ); + } + + await convertMasterEditionV1ToV2( + masterEdition.pubkey, + masterEdition.info.oneTimePrintingAuthorizationMint, + masterEdition.info.printingMint, + convertInstructions, + ); + + if (convertInstructions.length === CONVERT_TRANSACTION_SIZE) { + currSignerBatch.push(convertSigners); + currInstrBatch.push(convertInstructions); + convertSigners = []; + convertInstructions = []; + } + + if (currInstrBatch.length === BATCH_SIZE) { + signers.push(currSignerBatch); + instructions.push(currInstrBatch); + currSignerBatch = []; + currInstrBatch = []; + } + } + + if ( + convertInstructions.length < CONVERT_TRANSACTION_SIZE && + convertInstructions.length > 0 + ) { + currSignerBatch.push(convertSigners); + currInstrBatch.push(convertInstructions); + } + + if (currInstrBatch.length <= BATCH_SIZE && currInstrBatch.length > 0) { + // add the last one on + signers.push(currSignerBatch); + instructions.push(currInstrBatch); + } + console.log('Instructions', instructions); + for (let i = 0; i < instructions.length; i++) { + const instructionBatch = instructions[i]; + const signerBatch = signers[i]; + console.log('Running batch', i); + if (instructionBatch.length >= 2) + // Pump em through! + await sendTransactions( + connection, + wallet, + instructionBatch, + signerBatch, + SequenceType.StopOnFailure, + 'single', + ); + else + await sendTransactionWithRetry( + connection, + wallet, + instructionBatch[0], + signerBatch[0], + 'single', + ); + console.log('Done'); + } +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/createAuctionManager.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/createAuctionManager.ts new file mode 100644 index 0000000..424f35b --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/createAuctionManager.ts @@ -0,0 +1,813 @@ +import { + Keypair, + Connection, + TransactionInstruction, + SystemProgram, +} from '@solana/web3.js'; +import { + Metadata, + ParsedAccount, + MasterEditionV1, + MasterEditionV2, + SequenceType, + sendTransactions, + getSafetyDepositBox, + Edition, + getEdition, + programIds, + Creator, + getSafetyDepositBoxAddress, + createAssociatedTokenAccountInstruction, + sendTransactionWithRetry, + findProgramAddress, + IPartialCreateAuctionArgs, + MetadataKey, + StringPublicKey, + toPublicKey, + WalletSigner, +} from '@oyster/common'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; +import { AccountLayout, Token } from '@solana/spl-token'; +import BN from 'bn.js'; +import { + WinningConfigType, + getAuctionKeys, + getWhitelistedCreator, + startAuction, + WhitelistedCreator, + AmountRange, + ParticipationConfigV2, + TupleNumericType, + SafetyDepositConfig, + ParticipationStateV2, + AuctionCache, + StoreIndexer, +} from '@oyster/common/dist/lib/models/metaplex/index'; +import { createTokenAccount } from '@oyster/common/dist/lib/actions/account'; +import { createVault } from './createVault'; +import { closeVault } from './closeVault'; +import { + addTokensToVault, + SafetyDepositInstructionTemplate, +} from './addTokensToVault'; +import { makeAuction } from './makeAuction'; +import { createExternalPriceAccount } from './createExternalPriceAccount'; +import { deprecatedValidateParticipation } from '@oyster/common/dist/lib/models/metaplex/deprecatedValidateParticipation'; +import { deprecatedCreateReservationListForTokens } from './deprecatedCreateReservationListsForTokens'; +import { deprecatedPopulatePrintingTokens } from './deprecatedPopulatePrintingTokens'; +import { setVaultAndAuctionAuthorities } from './setVaultAndAuctionAuthorities'; +import { markItemsThatArentMineAsSold } from './markItemsThatArentMineAsSold'; +import { validateSafetyDepositBoxV2 } from '@oyster/common/dist/lib/models/metaplex/validateSafetyDepositBoxV2'; +import { initAuctionManagerV2 } from '@oyster/common/dist/lib/models/metaplex/initAuctionManagerV2'; +import { cacheAuctionIndexer } from './cacheAuctionInIndexer'; + +interface normalPattern { + instructions: TransactionInstruction[]; + signers: Keypair[]; +} + +interface arrayPattern { + instructions: TransactionInstruction[][]; + signers: Keypair[][]; +} + +interface byType { + markItemsThatArentMineAsSold: arrayPattern; + addTokens: arrayPattern; + deprecatedCreateReservationList: arrayPattern; + validateBoxes: arrayPattern; + createVault: normalPattern; + closeVault: normalPattern; + makeAuction: normalPattern; + initAuctionManager: normalPattern; + startAuction: normalPattern; + setVaultAndAuctionAuthorities: normalPattern; + externalPriceAccount: normalPattern; + deprecatedValidateParticipation?: normalPattern; + deprecatedBuildAndPopulateOneTimeAuthorizationAccount?: normalPattern; + deprecatedPopulatePrintingTokens: arrayPattern; + cacheAuctionIndexer: arrayPattern; +} + +export interface SafetyDepositDraft { + metadata: ParsedAccount; + masterEdition?: ParsedAccount; + edition?: ParsedAccount; + holding: StringPublicKey; + printingMintHolding?: StringPublicKey; + winningConfigType: WinningConfigType; + amountRanges: AmountRange[]; + participationConfig?: ParticipationConfigV2; +} + +// This is a super command that executes many transactions to create a Vault, Auction, and AuctionManager starting +// from some AuctionManagerSettings. +export async function createAuctionManager( + connection: Connection, + wallet: WalletSigner, + whitelistedCreatorsByCreator: Record< + string, + ParsedAccount + >, + auctionSettings: IPartialCreateAuctionArgs, + safetyDepositDrafts: SafetyDepositDraft[], + participationSafetyDepositDraft: SafetyDepositDraft | undefined, + paymentMint: StringPublicKey, + storeIndexer: ParsedAccount[], +): Promise<{ + vault: StringPublicKey; + auction: StringPublicKey; + auctionManager: StringPublicKey; +}> { + const accountRentExempt = await connection.getMinimumBalanceForRentExemption( + AccountLayout.span, + ); + + const { + externalPriceAccount, + priceMint, + instructions: epaInstructions, + signers: epaSigners, + } = await createExternalPriceAccount(connection, wallet); + + const { + instructions: createVaultInstructions, + signers: createVaultSigners, + vault, + fractionalMint, + redeemTreasury, + fractionTreasury, + } = await createVault(connection, wallet, priceMint, externalPriceAccount); + + const { + instructions: makeAuctionInstructions, + signers: makeAuctionSigners, + auction, + } = await makeAuction(wallet, vault, auctionSettings); + + const safetyDepositConfigsWithPotentiallyUnsetTokens = + await buildSafetyDepositArray( + wallet, + safetyDepositDrafts, + participationSafetyDepositDraft, + ); + + // Only creates for PrintingV1 deprecated configs + const { + instructions: populateInstr, + signers: populateSigners, + safetyDepositConfigs, + } = await deprecatedPopulatePrintingTokens( + connection, + wallet, + safetyDepositConfigsWithPotentiallyUnsetTokens, + ); + + const { + instructions: auctionManagerInstructions, + signers: auctionManagerSigners, + auctionManager, + } = await setupAuctionManagerInstructions( + wallet, + vault, + paymentMint, + accountRentExempt, + safetyDepositConfigs, + auctionSettings, + ); + + const { + instructions: addTokenInstructions, + signers: addTokenSigners, + safetyDepositTokenStores, + } = await addTokensToVault(connection, wallet, vault, safetyDepositConfigs); + + // Only creates for deprecated PrintingV1 configs + const { + instructions: createReservationInstructions, + signers: createReservationSigners, + } = await deprecatedCreateReservationListForTokens( + wallet, + auctionManager, + safetyDepositConfigs, + ); + + const lookup: byType = { + markItemsThatArentMineAsSold: await markItemsThatArentMineAsSold( + wallet, + safetyDepositDrafts, + ), + externalPriceAccount: { + instructions: epaInstructions, + signers: epaSigners, + }, + createVault: { + instructions: createVaultInstructions, + signers: createVaultSigners, + }, + closeVault: await closeVault( + connection, + wallet, + vault, + fractionalMint, + fractionTreasury, + redeemTreasury, + priceMint, + externalPriceAccount, + ), + addTokens: { instructions: addTokenInstructions, signers: addTokenSigners }, + deprecatedCreateReservationList: { + instructions: createReservationInstructions, + signers: createReservationSigners, + }, + makeAuction: { + instructions: makeAuctionInstructions, + signers: makeAuctionSigners, + }, + initAuctionManager: { + instructions: auctionManagerInstructions, + signers: auctionManagerSigners, + }, + setVaultAndAuctionAuthorities: await setVaultAndAuctionAuthorities( + wallet, + vault, + auction, + auctionManager, + ), + startAuction: await setupStartAuction(wallet, vault), + deprecatedValidateParticipation: participationSafetyDepositDraft + ? await deprecatedValidateParticipationHelper( + wallet, + auctionManager, + whitelistedCreatorsByCreator, + vault, + safetyDepositTokenStores[safetyDepositTokenStores.length - 1], // The last one is always the participation + participationSafetyDepositDraft, + accountRentExempt, + ) + : undefined, + deprecatedBuildAndPopulateOneTimeAuthorizationAccount: + participationSafetyDepositDraft + ? await deprecatedBuildAndPopulateOneTimeAuthorizationAccount( + connection, + wallet, + ( + participationSafetyDepositDraft?.masterEdition as ParsedAccount + )?.info.oneTimePrintingAuthorizationMint, + ) + : undefined, + validateBoxes: await validateBoxes( + wallet, + whitelistedCreatorsByCreator, + vault, + // Participation NFTs validate differently, with above + safetyDepositConfigs.filter( + c => + !participationSafetyDepositDraft || + // Only V1s need to skip normal validation and use special endpoint + (participationSafetyDepositDraft.masterEdition?.info.key == + MetadataKey.MasterEditionV1 && + c.draft.metadata.pubkey !== + participationSafetyDepositDraft.metadata.pubkey) || + participationSafetyDepositDraft.masterEdition?.info.key == + MetadataKey.MasterEditionV2, + ), + safetyDepositTokenStores, + ), + deprecatedPopulatePrintingTokens: { + instructions: populateInstr, + signers: populateSigners, + }, + cacheAuctionIndexer: await cacheAuctionIndexer( + wallet, + vault, + auction, + auctionManager, + safetyDepositConfigs.map(s => s.draft.metadata.info.mint), + storeIndexer, + ), + }; + + const signers: Keypair[][] = [ + ...lookup.markItemsThatArentMineAsSold.signers, + lookup.externalPriceAccount.signers, + lookup.deprecatedBuildAndPopulateOneTimeAuthorizationAccount?.signers || [], + ...lookup.deprecatedPopulatePrintingTokens.signers, + lookup.createVault.signers, + ...lookup.addTokens.signers, + ...lookup.deprecatedCreateReservationList.signers, + lookup.closeVault.signers, + lookup.makeAuction.signers, + lookup.initAuctionManager.signers, + lookup.setVaultAndAuctionAuthorities.signers, + lookup.deprecatedValidateParticipation?.signers || [], + ...lookup.validateBoxes.signers, + lookup.startAuction.signers, + ...lookup.cacheAuctionIndexer.signers, + ]; + const toRemoveSigners: Record = {}; + let instructions: TransactionInstruction[][] = [ + ...lookup.markItemsThatArentMineAsSold.instructions, + lookup.externalPriceAccount.instructions, + lookup.deprecatedBuildAndPopulateOneTimeAuthorizationAccount + ?.instructions || [], + ...lookup.deprecatedPopulatePrintingTokens.instructions, + lookup.createVault.instructions, + ...lookup.addTokens.instructions, + ...lookup.deprecatedCreateReservationList.instructions, + lookup.closeVault.instructions, + lookup.makeAuction.instructions, + lookup.initAuctionManager.instructions, + lookup.setVaultAndAuctionAuthorities.instructions, + lookup.deprecatedValidateParticipation?.instructions || [], + ...lookup.validateBoxes.instructions, + lookup.startAuction.instructions, + ...lookup.cacheAuctionIndexer.instructions, + ].filter((instr, i) => { + if (instr.length > 0) { + return true; + } else { + toRemoveSigners[i] = true; + return false; + } + }); + + let filteredSigners = signers.filter((_, i) => !toRemoveSigners[i]); + + let stopPoint = 0; + let tries = 0; + let lastInstructionsLength: number | null = null; + while (stopPoint < instructions.length && tries < 3) { + instructions = instructions.slice(stopPoint, instructions.length); + filteredSigners = filteredSigners.slice(stopPoint, filteredSigners.length); + + if (instructions.length === lastInstructionsLength) tries = tries + 1; + else tries = 0; + + try { + if (instructions.length === 1) { + await sendTransactionWithRetry( + connection, + wallet, + instructions[0], + filteredSigners[0], + 'single', + ); + stopPoint = 1; + } else { + stopPoint = await sendTransactions( + connection, + wallet, + instructions, + filteredSigners, + SequenceType.StopOnFailure, + 'single', + ); + } + } catch (e) { + console.error(e); + } + console.log( + 'Died on ', + stopPoint, + 'retrying from instruction', + instructions[stopPoint], + 'instructions length is', + instructions.length, + ); + lastInstructionsLength = instructions.length; + } + + if (stopPoint < instructions.length) throw new Error('Failed to create'); + + return { vault, auction, auctionManager }; +} + +async function buildSafetyDepositArray( + wallet: WalletSigner, + safetyDeposits: SafetyDepositDraft[], + participationSafetyDepositDraft: SafetyDepositDraft | undefined, +): Promise { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const safetyDepositTemplates: SafetyDepositInstructionTemplate[] = []; + safetyDeposits.forEach((s, i) => { + const maxAmount = [...s.amountRanges.map(a => a.amount)] + .sort() + .reverse()[0]; + + const maxLength = [...s.amountRanges.map(a => a.length)] + .sort() + .reverse()[0]; + safetyDepositTemplates.push({ + box: { + tokenAccount: + s.winningConfigType !== WinningConfigType.PrintingV1 + ? s.holding + : s.printingMintHolding, + tokenMint: + s.winningConfigType !== WinningConfigType.PrintingV1 + ? s.metadata.info.mint + : (s.masterEdition as ParsedAccount)?.info + .printingMint, + amount: + s.winningConfigType == WinningConfigType.PrintingV2 || + s.winningConfigType == WinningConfigType.FullRightsTransfer + ? new BN(1) + : new BN( + s.amountRanges.reduce( + (acc, r) => acc.add(r.amount.mul(r.length)), + new BN(0), + ), + ), + }, + config: new SafetyDepositConfig({ + directArgs: { + auctionManager: SystemProgram.programId.toBase58(), + order: new BN(i), + amountRanges: s.amountRanges, + amountType: maxAmount.gte(new BN(254)) + ? TupleNumericType.U16 + : TupleNumericType.U8, + lengthType: maxLength.gte(new BN(254)) + ? TupleNumericType.U16 + : TupleNumericType.U8, + winningConfigType: s.winningConfigType, + participationConfig: null, + participationState: null, + }, + }), + draft: s, + }); + }); + + if ( + participationSafetyDepositDraft && + participationSafetyDepositDraft.masterEdition + ) { + const maxAmount = [ + ...participationSafetyDepositDraft.amountRanges.map(s => s.amount), + ] + .sort() + .reverse()[0]; + const maxLength = [ + ...participationSafetyDepositDraft.amountRanges.map(s => s.length), + ] + .sort() + .reverse()[0]; + const config = new SafetyDepositConfig({ + directArgs: { + auctionManager: SystemProgram.programId.toBase58(), + order: new BN(safetyDeposits.length), + amountRanges: participationSafetyDepositDraft.amountRanges, + amountType: maxAmount?.gte(new BN(255)) + ? TupleNumericType.U32 + : TupleNumericType.U8, + lengthType: maxLength?.gte(new BN(255)) + ? TupleNumericType.U32 + : TupleNumericType.U8, + winningConfigType: WinningConfigType.Participation, + participationConfig: + participationSafetyDepositDraft.participationConfig || null, + participationState: new ParticipationStateV2({ + collectedToAcceptPayment: new BN(0), + }), + }, + }); + + if ( + participationSafetyDepositDraft.masterEdition.info.key == + MetadataKey.MasterEditionV1 + ) { + const me = + participationSafetyDepositDraft.masterEdition as ParsedAccount; + safetyDepositTemplates.push({ + box: { + tokenAccount: ( + await findProgramAddress( + [ + wallet.publicKey.toBuffer(), + programIds().token.toBuffer(), + toPublicKey( + me?.info.oneTimePrintingAuthorizationMint, + ).toBuffer(), + ], + programIds().associatedToken, + ) + )[0], + tokenMint: me?.info.oneTimePrintingAuthorizationMint, + amount: new BN(1), + }, + config, + draft: participationSafetyDepositDraft, + }); + } else { + safetyDepositTemplates.push({ + box: { + tokenAccount: participationSafetyDepositDraft.holding, + tokenMint: participationSafetyDepositDraft.metadata.info.mint, + amount: new BN(1), + }, + config, + draft: participationSafetyDepositDraft, + }); + } + } + console.log('Temps', safetyDepositTemplates); + return safetyDepositTemplates; +} + +async function setupAuctionManagerInstructions( + wallet: WalletSigner, + vault: StringPublicKey, + paymentMint: StringPublicKey, + accountRentExempt: number, + safetyDeposits: SafetyDepositInstructionTemplate[], + auctionSettings: IPartialCreateAuctionArgs, +): Promise<{ + instructions: TransactionInstruction[]; + signers: Keypair[]; + auctionManager: StringPublicKey; +}> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const store = programIds().store?.toBase58(); + if (!store) { + throw new Error('Store not initialized'); + } + + const signers: Keypair[] = []; + const instructions: TransactionInstruction[] = []; + + const { auctionManagerKey } = await getAuctionKeys(vault); + + const acceptPayment = createTokenAccount( + instructions, + wallet.publicKey, + accountRentExempt, + toPublicKey(paymentMint), + toPublicKey(auctionManagerKey), + signers, + ).toBase58(); + + let maxRanges = [ + auctionSettings.winners.usize.toNumber(), + safetyDeposits.length, + 100, + ].sort()[0]; + if (maxRanges < 10) { + maxRanges = 10; + } + + await initAuctionManagerV2( + vault, + wallet.publicKey.toBase58(), + wallet.publicKey.toBase58(), + acceptPayment, + store, + safetyDeposits.length >= 254 ? TupleNumericType.U16 : TupleNumericType.U8, + auctionSettings.winners.usize.toNumber() >= 254 + ? TupleNumericType.U16 + : TupleNumericType.U8, + new BN(maxRanges), + instructions, + ); + + return { instructions, signers, auctionManager: auctionManagerKey }; +} + +async function setupStartAuction( + wallet: WalletSigner, + vault: StringPublicKey, +): Promise<{ + instructions: TransactionInstruction[]; + signers: Keypair[]; +}> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const signers: Keypair[] = []; + const instructions: TransactionInstruction[] = []; + + await startAuction(vault, wallet.publicKey.toBase58(), instructions); + + return { instructions, signers }; +} + +async function deprecatedValidateParticipationHelper( + wallet: WalletSigner, + auctionManager: StringPublicKey, + whitelistedCreatorsByCreator: Record< + string, + ParsedAccount + >, + vault: StringPublicKey, + tokenStore: StringPublicKey, + participationSafetyDepositDraft: SafetyDepositDraft, + accountRentExempt: number, +): Promise<{ instructions: TransactionInstruction[]; signers: Keypair[] }> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const store = programIds().store?.toBase58(); + if (!store) { + throw new Error('Store not initialized'); + } + + const instructions: TransactionInstruction[] = []; + const signers: Keypair[] = []; + const whitelistedCreator = participationSafetyDepositDraft.metadata.info.data + .creators + ? await findValidWhitelistedCreator( + whitelistedCreatorsByCreator, + //@ts-ignore + participationSafetyDepositDraft.metadata.info.data.creators, + ) + : undefined; + + const { auctionManagerKey } = await getAuctionKeys(vault); + + // V2s do not need to call this special endpoint. + if ( + participationSafetyDepositDraft.masterEdition && + participationSafetyDepositDraft.masterEdition.info.key == + MetadataKey.MasterEditionV1 + ) { + const me = + participationSafetyDepositDraft.masterEdition as ParsedAccount; + const printingTokenHoldingAccount = createTokenAccount( + instructions, + wallet.publicKey, + accountRentExempt, + toPublicKey(me.info.printingMint), + toPublicKey(auctionManagerKey), + signers, + ).toBase58(); + await deprecatedValidateParticipation( + auctionManager, + participationSafetyDepositDraft.metadata.pubkey, + participationSafetyDepositDraft.masterEdition?.pubkey, + printingTokenHoldingAccount, + wallet.publicKey.toBase58(), + whitelistedCreator, + store, + await getSafetyDepositBoxAddress( + vault, + me.info.oneTimePrintingAuthorizationMint, + ), + tokenStore, + vault, + instructions, + ); + } + + return { instructions, signers }; +} + +async function findValidWhitelistedCreator( + whitelistedCreatorsByCreator: Record< + string, + ParsedAccount + >, + creators: Creator[], +): Promise { + for (let i = 0; i < creators.length; i++) { + const creator = creators[i]; + + if (whitelistedCreatorsByCreator[creator.address]?.info.activated) + return whitelistedCreatorsByCreator[creator.address].pubkey; + } + return await getWhitelistedCreator(creators[0]?.address); +} + +async function validateBoxes( + wallet: WalletSigner, + whitelistedCreatorsByCreator: Record< + string, + ParsedAccount + >, + vault: StringPublicKey, + safetyDeposits: SafetyDepositInstructionTemplate[], + safetyDepositTokenStores: StringPublicKey[], +): Promise<{ + instructions: TransactionInstruction[][]; + signers: Keypair[][]; +}> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const store = programIds().store?.toBase58(); + if (!store) { + throw new Error('Store not initialized'); + } + const signers: Keypair[][] = []; + const instructions: TransactionInstruction[][] = []; + + for (let i = 0; i < safetyDeposits.length; i++) { + const tokenSigners: Keypair[] = []; + const tokenInstructions: TransactionInstruction[] = []; + + let safetyDepositBox: StringPublicKey; + + const me = safetyDeposits[i].draft + .masterEdition as ParsedAccount; + if ( + safetyDeposits[i].config.winningConfigType === + WinningConfigType.PrintingV1 && + me && + me.info.printingMint + ) { + safetyDepositBox = await getSafetyDepositBox( + vault, + //@ts-ignore + safetyDeposits[i].draft.masterEdition.info.printingMint, + ); + } else { + safetyDepositBox = await getSafetyDepositBox( + vault, + safetyDeposits[i].draft.metadata.info.mint, + ); + } + const edition: StringPublicKey = await getEdition( + safetyDeposits[i].draft.metadata.info.mint, + ); + + const whitelistedCreator = safetyDeposits[i].draft.metadata.info.data + .creators + ? await findValidWhitelistedCreator( + whitelistedCreatorsByCreator, + //@ts-ignore + safetyDeposits[i].draft.metadata.info.data.creators, + ) + : undefined; + + await validateSafetyDepositBoxV2( + vault, + safetyDeposits[i].draft.metadata.pubkey, + safetyDepositBox, + safetyDepositTokenStores[i], + safetyDeposits[i].config.winningConfigType === + WinningConfigType.PrintingV1 + ? me?.info.printingMint + : safetyDeposits[i].draft.metadata.info.mint, + wallet.publicKey.toBase58(), + wallet.publicKey.toBase58(), + wallet.publicKey.toBase58(), + tokenInstructions, + edition, + whitelistedCreator, + store, + safetyDeposits[i].config, + ); + + signers.push(tokenSigners); + instructions.push(tokenInstructions); + } + return { instructions, signers }; +} + +async function deprecatedBuildAndPopulateOneTimeAuthorizationAccount( + connection: Connection, + wallet: WalletSigner, + oneTimePrintingAuthorizationMint: StringPublicKey | undefined, +): Promise<{ + instructions: TransactionInstruction[]; + signers: Keypair[]; +}> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + if (!oneTimePrintingAuthorizationMint) + return { instructions: [], signers: [] }; + const signers: Keypair[] = []; + const instructions: TransactionInstruction[] = []; + const recipientKey: StringPublicKey = ( + await findProgramAddress( + [ + wallet.publicKey.toBuffer(), + programIds().token.toBuffer(), + toPublicKey(oneTimePrintingAuthorizationMint).toBuffer(), + ], + programIds().associatedToken, + ) + )[0]; + + if (!(await connection.getAccountInfo(toPublicKey(recipientKey)))) { + createAssociatedTokenAccountInstruction( + instructions, + toPublicKey(recipientKey), + wallet.publicKey, + wallet.publicKey, + toPublicKey(oneTimePrintingAuthorizationMint), + ); + } + + instructions.push( + Token.createMintToInstruction( + programIds().token, + toPublicKey(oneTimePrintingAuthorizationMint), + toPublicKey(recipientKey), + wallet.publicKey, + [], + 1, + ), + ); + + return { instructions, signers }; +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/createExternalPriceAccount.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/createExternalPriceAccount.ts new file mode 100644 index 0000000..f1b47b5 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/createExternalPriceAccount.ts @@ -0,0 +1,72 @@ +import { + Keypair, + Connection, + SystemProgram, + TransactionInstruction, +} from '@solana/web3.js'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; + +import { + utils, + StringPublicKey, + toPublicKey, + WalletSigner, +} from '@oyster/common'; +import { + updateExternalPriceAccount, + ExternalPriceAccount, + MAX_EXTERNAL_ACCOUNT_SIZE, +} from '@oyster/common/dist/lib/actions/vault'; + +import BN from 'bn.js'; +import { QUOTE_MINT } from '../constants'; + +// This command creates the external pricing oracle +export async function createExternalPriceAccount( + connection: Connection, + wallet: WalletSigner, +): Promise<{ + priceMint: StringPublicKey; + externalPriceAccount: StringPublicKey; + instructions: TransactionInstruction[]; + signers: Keypair[]; +}> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const PROGRAM_IDS = utils.programIds(); + + const signers: Keypair[] = []; + const instructions: TransactionInstruction[] = []; + + const epaRentExempt = await connection.getMinimumBalanceForRentExemption( + MAX_EXTERNAL_ACCOUNT_SIZE, + ); + + const externalPriceAccount = Keypair.generate(); + const key = externalPriceAccount.publicKey.toBase58(); + + const epaStruct = new ExternalPriceAccount({ + pricePerShare: new BN(0), + priceMint: QUOTE_MINT.toBase58(), + allowedToCombine: true, + }); + + const uninitializedEPA = SystemProgram.createAccount({ + fromPubkey: wallet.publicKey, + newAccountPubkey: externalPriceAccount.publicKey, + lamports: epaRentExempt, + space: MAX_EXTERNAL_ACCOUNT_SIZE, + programId: toPublicKey(PROGRAM_IDS.vault), + }); + instructions.push(uninitializedEPA); + signers.push(externalPriceAccount); + + await updateExternalPriceAccount(key, epaStruct, instructions); + + return { + externalPriceAccount: key, + priceMint: QUOTE_MINT.toBase58(), + instructions, + signers, + }; +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/createMintAndAccountWithOne.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/createMintAndAccountWithOne.ts new file mode 100644 index 0000000..ca16b7d --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/createMintAndAccountWithOne.ts @@ -0,0 +1,65 @@ +import { Keypair, TransactionInstruction } from '@solana/web3.js'; +import { Token } from '@solana/spl-token'; +import { + createAssociatedTokenAccountInstruction, + createMint, + findProgramAddress, + programIds, + StringPublicKey, + toPublicKey, +} from '@oyster/common'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; + +export async function createMintAndAccountWithOne( + wallet: any, + receiverWallet: StringPublicKey, + mintRent: any, + instructions: TransactionInstruction[], + signers: Keypair[], +): Promise<{ mint: StringPublicKey; account: StringPublicKey }> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const mint = createMint( + instructions, + wallet.publicKey, + mintRent, + 0, + wallet.publicKey, + wallet.publicKey, + signers, + ); + + const PROGRAM_IDS = programIds(); + + const account: StringPublicKey = ( + await findProgramAddress( + [ + toPublicKey(receiverWallet).toBuffer(), + PROGRAM_IDS.token.toBuffer(), + mint.toBuffer(), + ], + PROGRAM_IDS.associatedToken, + ) + )[0]; + + createAssociatedTokenAccountInstruction( + instructions, + toPublicKey(account), + wallet.publicKey, + toPublicKey(receiverWallet), + mint, + ); + + instructions.push( + Token.createMintToInstruction( + PROGRAM_IDS.token, + mint, + toPublicKey(account), + wallet.publicKey, + [], + 1, + ), + ); + + return { mint: mint.toBase58(), account }; +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/createVault.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/createVault.ts new file mode 100644 index 0000000..6268a26 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/createVault.ts @@ -0,0 +1,129 @@ +import { + Keypair, + Connection, + SystemProgram, + TransactionInstruction, +} from '@solana/web3.js'; +import { + utils, + createMint, + findProgramAddress, + StringPublicKey, + toPublicKey, + WalletSigner, +} from '@oyster/common'; +import { + initVault, + MAX_VAULT_SIZE, + VAULT_PREFIX, +} from '@oyster/common/dist/lib/actions/vault'; +import { createTokenAccount } from '@oyster/common/dist/lib/actions/account'; + +import { AccountLayout, MintLayout } from '@solana/spl-token'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; + +// This command creates the external pricing oracle a vault +// This gets the vault ready for adding the tokens. +export async function createVault( + connection: Connection, + wallet: WalletSigner, + priceMint: StringPublicKey, + externalPriceAccount: StringPublicKey, +): Promise<{ + vault: StringPublicKey; + fractionalMint: StringPublicKey; + redeemTreasury: StringPublicKey; + fractionTreasury: StringPublicKey; + instructions: TransactionInstruction[]; + signers: Keypair[]; +}> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const PROGRAM_IDS = utils.programIds(); + + const signers: Keypair[] = []; + const instructions: TransactionInstruction[] = []; + + const accountRentExempt = await connection.getMinimumBalanceForRentExemption( + AccountLayout.span, + ); + + const mintRentExempt = await connection.getMinimumBalanceForRentExemption( + MintLayout.span, + ); + + const vaultRentExempt = await connection.getMinimumBalanceForRentExemption( + MAX_VAULT_SIZE, + ); + + const vault = Keypair.generate(); + + const vaultAuthority = ( + await findProgramAddress( + [ + Buffer.from(VAULT_PREFIX), + toPublicKey(PROGRAM_IDS.vault).toBuffer(), + vault.publicKey.toBuffer(), + ], + toPublicKey(PROGRAM_IDS.vault), + ) + )[0]; + + const fractionalMint = createMint( + instructions, + wallet.publicKey, + mintRentExempt, + 0, + toPublicKey(vaultAuthority), + toPublicKey(vaultAuthority), + signers, + ).toBase58(); + + const redeemTreasury = createTokenAccount( + instructions, + wallet.publicKey, + accountRentExempt, + toPublicKey(priceMint), + toPublicKey(vaultAuthority), + signers, + ).toBase58(); + + const fractionTreasury = createTokenAccount( + instructions, + wallet.publicKey, + accountRentExempt, + toPublicKey(fractionalMint), + toPublicKey(vaultAuthority), + signers, + ).toBase58(); + + const uninitializedVault = SystemProgram.createAccount({ + fromPubkey: wallet.publicKey, + newAccountPubkey: vault.publicKey, + lamports: vaultRentExempt, + space: MAX_VAULT_SIZE, + programId: toPublicKey(PROGRAM_IDS.vault), + }); + instructions.push(uninitializedVault); + signers.push(vault); + + await initVault( + true, + fractionalMint, + redeemTreasury, + fractionTreasury, + vault.publicKey.toBase58(), + wallet.publicKey.toBase58(), + externalPriceAccount, + instructions, + ); + + return { + vault: vault.publicKey.toBase58(), + fractionalMint, + redeemTreasury, + fractionTreasury, + signers, + instructions, + }; +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/decommAuctionManagerAndReturnPrizes.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/decommAuctionManagerAndReturnPrizes.ts new file mode 100644 index 0000000..cc02298 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/decommAuctionManagerAndReturnPrizes.ts @@ -0,0 +1,76 @@ +import { Keypair, Connection, TransactionInstruction } from '@solana/web3.js'; +import { + ParsedAccount, + SafetyDepositBox, + sendTransactionsWithManualRetry, + setAuctionAuthority, + setVaultAuthority, + WalletSigner, +} from '@oyster/common'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; +import { AuctionView } from '../hooks'; +import { AuctionManagerStatus } from '@oyster/common/dist/lib/models/metaplex/index'; +import { decommissionAuctionManager } from '@oyster/common/dist/lib/models/metaplex/decommissionAuctionManager'; +import { unwindVault } from './unwindVault'; + +export async function decommAuctionManagerAndReturnPrizes( + connection: Connection, + wallet: WalletSigner, + auctionView: AuctionView, + safetyDepositBoxesByVaultAndIndex: Record< + string, + ParsedAccount + >, +) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const signers: Array = []; + const instructions: Array = []; + + if (auctionView.auctionManager.status === AuctionManagerStatus.Initialized) { + const decomSigners: Keypair[] = []; + const decomInstructions: TransactionInstruction[] = []; + + if (auctionView.auction.info.authority === wallet.publicKey.toBase58()) { + await setAuctionAuthority( + auctionView.auction.pubkey, + wallet.publicKey.toBase58(), + auctionView.auctionManager.pubkey, + decomInstructions, + ); + } + if (auctionView.vault.info.authority === wallet.publicKey.toBase58()) { + await setVaultAuthority( + auctionView.vault.pubkey, + wallet.publicKey.toBase58(), + auctionView.auctionManager.pubkey, + decomInstructions, + ); + } + await decommissionAuctionManager( + auctionView.auctionManager.pubkey, + auctionView.auction.pubkey, + wallet.publicKey.toBase58(), + auctionView.vault.pubkey, + decomInstructions, + ); + signers.push(decomSigners); + instructions.push(decomInstructions); + } + + await sendTransactionsWithManualRetry( + connection, + wallet, + instructions, + signers, + ); + + // now that is rightfully decommed, we have authority back properly to the vault, + // and the auction manager is in disbursing, so we can unwind the vault. + await unwindVault( + connection, + wallet, + auctionView.vault, + safetyDepositBoxesByVaultAndIndex, + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/deprecatedCreateReservationListsForTokens.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/deprecatedCreateReservationListsForTokens.ts new file mode 100644 index 0000000..5a59f3e --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/deprecatedCreateReservationListsForTokens.ts @@ -0,0 +1,63 @@ +import { Keypair, TransactionInstruction } from '@solana/web3.js'; +import { + deprecatedCreateReservationList, + StringPublicKey, + WalletSigner, +} from '@oyster/common'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; +import { SafetyDepositInstructionTemplate } from './addTokensToVault'; +import { WinningConfigType } from '@oyster/common/dist/lib/models/metaplex/index'; + +const BATCH_SIZE = 10; +// This command batches out creating reservation lists for those tokens who are being sold in PrintingV1 mode. +// Reservation lists are used to insure printing order among limited editions. +export async function deprecatedCreateReservationListForTokens( + wallet: WalletSigner, + auctionManager: StringPublicKey, + safetyDepositInstructionTemplates: SafetyDepositInstructionTemplate[], +): Promise<{ + instructions: Array; + signers: Array; +}> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + let batchCounter = 0; + + const signers: Array = []; + const instructions: Array = []; + + let currSigners: Keypair[] = []; + let currInstructions: TransactionInstruction[] = []; + for (let i = 0; i < safetyDepositInstructionTemplates.length; i++) { + const safetyDeposit = safetyDepositInstructionTemplates[i]; + + if ( + safetyDeposit.config.winningConfigType === WinningConfigType.PrintingV1 && + safetyDeposit.draft.masterEdition + ) + await deprecatedCreateReservationList( + safetyDeposit.draft.metadata.pubkey, + safetyDeposit.draft.masterEdition.pubkey, + auctionManager, + wallet.publicKey.toBase58(), + wallet.publicKey.toBase58(), + currInstructions, + ); + + if (batchCounter === BATCH_SIZE) { + signers.push(currSigners); + instructions.push(currInstructions); + batchCounter = 0; + currSigners = []; + currInstructions = []; + } + batchCounter++; + } + + if (instructions[instructions.length - 1] !== currInstructions) { + signers.push(currSigners); + instructions.push(currInstructions); + } + + return { signers, instructions }; +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/deprecatedPopulatePrintingTokens.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/deprecatedPopulatePrintingTokens.ts new file mode 100644 index 0000000..d546049 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/deprecatedPopulatePrintingTokens.ts @@ -0,0 +1,114 @@ +import { Keypair, Connection, TransactionInstruction } from '@solana/web3.js'; +import { + utils, + createAssociatedTokenAccountInstruction, + deprecatedMintPrintingTokens, + findProgramAddress, + MasterEditionV1, + ParsedAccount, + MetadataKey, + toPublicKey, + WalletSigner, +} from '@oyster/common'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; +import BN from 'bn.js'; +import { SafetyDepositInstructionTemplate } from './addTokensToVault'; + +const BATCH_SIZE = 4; +// Printing tokens are minted on the fly as needed. We need to pre-mint them to give to the vault +// for all relevant NFTs. +export async function deprecatedPopulatePrintingTokens( + connection: Connection, + wallet: WalletSigner, + safetyDepositConfigs: SafetyDepositInstructionTemplate[], +): Promise<{ + instructions: Array; + signers: Array; + safetyDepositConfigs: SafetyDepositInstructionTemplate[]; +}> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const PROGRAM_IDS = utils.programIds(); + + let batchCounter = 0; + + const signers: Array = []; + const instructions: Array = []; + + let currSigners: Keypair[] = []; + let currInstructions: TransactionInstruction[] = []; + for (let i = 0; i < safetyDepositConfigs.length; i++) { + const nft = safetyDepositConfigs[i]; + if (nft.draft.masterEdition?.info.key != MetadataKey.MasterEditionV1) { + continue; + } + const printingMint = ( + nft.draft.masterEdition as ParsedAccount + )?.info.printingMint; + if (nft.box.tokenMint === printingMint && !nft.box.tokenAccount) { + const holdingKey = ( + await findProgramAddress( + [ + wallet.publicKey.toBuffer(), + PROGRAM_IDS.token.toBuffer(), + toPublicKey(printingMint).toBuffer(), + ], + PROGRAM_IDS.associatedToken, + ) + )[0]; + + createAssociatedTokenAccountInstruction( + currInstructions, + toPublicKey(holdingKey), + wallet.publicKey, + wallet.publicKey, + toPublicKey(printingMint), + ); + console.log('Making atas'); + + nft.draft.printingMintHolding = holdingKey; + nft.box.tokenAccount = holdingKey; + } + if (nft.box.tokenAccount && nft.box.tokenMint === printingMint) { + let balance = 0; + try { + balance = + ( + await connection.getTokenAccountBalance( + toPublicKey(nft.box.tokenAccount), + ) + ).value.uiAmount || 0; + } catch (e) { + console.error(e); + } + + if (balance < nft.box.amount.toNumber() && nft.draft.masterEdition) + await deprecatedMintPrintingTokens( + nft.box.tokenAccount, + nft.box.tokenMint, + wallet.publicKey.toBase58(), + nft.draft.metadata.pubkey, + nft.draft.masterEdition.pubkey, + new BN(nft.box.amount.toNumber() - balance), + currInstructions, + ); + + batchCounter++; + } + + if (batchCounter === BATCH_SIZE) { + signers.push(currSigners); + instructions.push(currInstructions); + batchCounter = 0; + currSigners = []; + currInstructions = []; + } + } + + if (instructions[instructions.length - 1] !== currInstructions) { + signers.push(currSigners); + instructions.push(currInstructions); + } + + return { signers, instructions, safetyDepositConfigs }; +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/index.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/index.ts new file mode 100644 index 0000000..f6b5030 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/index.ts @@ -0,0 +1,3 @@ +export * from './nft'; +export * from './createVault'; +export * from './makeAuction'; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/makeAuction.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/makeAuction.ts new file mode 100644 index 0000000..c38d22f --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/makeAuction.ts @@ -0,0 +1,53 @@ +import { Keypair, TransactionInstruction } from '@solana/web3.js'; +import { + utils, + findProgramAddress, + IPartialCreateAuctionArgs, + CreateAuctionArgs, + StringPublicKey, + toPublicKey, + WalletSigner, +} from '@oyster/common'; +import { + AUCTION_PREFIX, + createAuction, +} from '@oyster/common/dist/lib/actions/auction'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; + +// This command makes an auction +export async function makeAuction( + wallet: WalletSigner, + vault: StringPublicKey, + auctionSettings: IPartialCreateAuctionArgs, +): Promise<{ + auction: StringPublicKey; + instructions: TransactionInstruction[]; + signers: Keypair[]; +}> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const PROGRAM_IDS = utils.programIds(); + + const signers: Keypair[] = []; + const instructions: TransactionInstruction[] = []; + const auctionKey = ( + await findProgramAddress( + [ + Buffer.from(AUCTION_PREFIX), + toPublicKey(PROGRAM_IDS.auction).toBuffer(), + toPublicKey(vault).toBuffer(), + ], + toPublicKey(PROGRAM_IDS.auction), + ) + )[0]; + + const fullSettings = new CreateAuctionArgs({ + ...auctionSettings, + authority: wallet.publicKey.toBase58(), + resource: vault, + }); + + createAuction(fullSettings, wallet.publicKey.toBase58(), instructions); + + return { instructions, signers, auction: auctionKey }; +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/markItemsThatArentMineAsSold.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/markItemsThatArentMineAsSold.ts new file mode 100644 index 0000000..4201a70 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/markItemsThatArentMineAsSold.ts @@ -0,0 +1,63 @@ +import { Keypair, TransactionInstruction } from '@solana/web3.js'; +import { + updatePrimarySaleHappenedViaToken, + WalletSigner, +} from '@oyster/common'; +import { SafetyDepositDraft } from './createAuctionManager'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; +const SALE_TRANSACTION_SIZE = 10; + +export async function markItemsThatArentMineAsSold( + wallet: WalletSigner, + safetyDepositDrafts: SafetyDepositDraft[], +): Promise<{ instructions: TransactionInstruction[][]; signers: Keypair[][] }> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const publicKey = wallet.publicKey.toBase58(); + + const signers: Array = []; + const instructions: Array = []; + + let markSigners: Keypair[] = []; + let markInstructions: TransactionInstruction[] = []; + + // TODO replace all this with payer account so user doesnt need to click approve several times. + + for (let i = 0; i < safetyDepositDrafts.length; i++) { + const item = safetyDepositDrafts[i].metadata; + + if ( + !item.info.data.creators?.find(c => c.address === publicKey) && + !item.info.primarySaleHappened + ) { + console.log( + 'For token', + item.info.data.name, + 'marking it sold because i didnt make it but i want to keep proceeds', + ); + await updatePrimarySaleHappenedViaToken( + item.pubkey, + publicKey, + safetyDepositDrafts[i].holding, + markInstructions, + ); + + if (markInstructions.length === SALE_TRANSACTION_SIZE) { + signers.push(markSigners); + instructions.push(markInstructions); + markSigners = []; + markInstructions = []; + } + } + } + + if ( + markInstructions.length < SALE_TRANSACTION_SIZE && + markInstructions.length > 0 + ) { + signers.push(markSigners); + instructions.push(markInstructions); + } + + return { instructions, signers }; +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/mintEditionsIntoWallet.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/mintEditionsIntoWallet.ts new file mode 100644 index 0000000..67a4f56 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/mintEditionsIntoWallet.ts @@ -0,0 +1,106 @@ +import BN from 'bn.js'; +import { Connection, Keypair, TransactionInstruction } from '@solana/web3.js'; +import { + sendTransactions, + sendTransactionWithRetry, + SequenceType, + StringPublicKey, + TokenAccount, +} from '@oyster/common'; +import { setupMintEditionIntoWalletInstructions } from './setupMintEditionIntoWalletInstructions'; +import { Art } from '../types'; +import { WalletContextState } from '@solana/wallet-adapter-react'; + +// TODO: Refactor. Extract batching logic, +// as the similar one is used in settle.ts and convertMasterEditions.ts +const MINT_TRANSACTION_SIZE = 5; +const BATCH_SIZE = 10; + +export async function mintEditionsToWallet( + art: Art, + wallet: WalletContextState, + connection: Connection, + mintTokenAccount: TokenAccount, + editions: number = 1, + mintDestination: StringPublicKey, +) { + const signers: Array> = []; + const instructions: Array> = []; + + let currSignerBatch: Array = []; + let currInstrBatch: Array = []; + + let mintEditionIntoWalletSigners: Keypair[] = []; + let mintEditionIntoWalletInstructions: TransactionInstruction[] = []; + + // TODO replace all this with payer account so user doesnt need to click approve several times. + + // Overall we have 10 parallel txns. + // That's what this loop is building. + for (let i = 0; i < editions; i++) { + console.log('Minting', i); + await setupMintEditionIntoWalletInstructions( + art, + wallet, + connection, + mintTokenAccount, + new BN(art.supply! + 1 + i), + mintEditionIntoWalletInstructions, + mintEditionIntoWalletSigners, + mintDestination, + ); + + if (mintEditionIntoWalletInstructions.length === MINT_TRANSACTION_SIZE) { + currSignerBatch.push(mintEditionIntoWalletSigners); + currInstrBatch.push(mintEditionIntoWalletInstructions); + mintEditionIntoWalletSigners = []; + mintEditionIntoWalletInstructions = []; + } + + if (currInstrBatch.length === BATCH_SIZE) { + signers.push(currSignerBatch); + instructions.push(currInstrBatch); + currSignerBatch = []; + currInstrBatch = []; + } + } + + if ( + mintEditionIntoWalletInstructions.length < MINT_TRANSACTION_SIZE && + mintEditionIntoWalletInstructions.length > 0 + ) { + currSignerBatch.push(mintEditionIntoWalletSigners); + currInstrBatch.push(mintEditionIntoWalletInstructions); + } + + if (currInstrBatch.length <= BATCH_SIZE && currInstrBatch.length > 0) { + // add the last one on + signers.push(currSignerBatch); + instructions.push(currInstrBatch); + } + console.log('Instructions', instructions); + for (let i = 0; i < instructions.length; i++) { + const instructionBatch = instructions[i]; + const signerBatch = signers[i]; + console.log('Running batch', i); + if (instructionBatch.length >= 2) + // Pump em through! + await sendTransactions( + connection, + wallet, + instructionBatch, + signerBatch, + SequenceType.StopOnFailure, + 'single', + ); + else + await sendTransactionWithRetry( + connection, + wallet, + instructionBatch[0], + signerBatch[0], + 'single', + ); + console.log('Done'); + } +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/nft.tsx b/CandyMachine-Storefront/store/js/packages/web/src/actions/nft.tsx new file mode 100644 index 0000000..35e071c --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/nft.tsx @@ -0,0 +1,382 @@ +import { + createAssociatedTokenAccountInstruction, + createMint, + createMetadata, + programIds, + notify, + ENV, + updateMetadata, + createMasterEdition, + sendTransactionWithRetry, + Data, + Creator, + findProgramAddress, + StringPublicKey, + toPublicKey, + WalletSigner, + Attribute, +} from '@oyster/common'; +import React, { Dispatch, SetStateAction } from 'react'; +import { MintLayout, Token } from '@solana/spl-token'; +import { + Keypair, + Connection, + SystemProgram, + TransactionInstruction, +} from '@solana/web3.js'; +import crypto from 'crypto'; +import { getAssetCostToStore } from '../utils/assets'; +import { AR_SOL_HOLDER_ID } from '../utils/ids'; +import BN from 'bn.js'; + +const RESERVED_TXN_MANIFEST = 'manifest.json'; +const RESERVED_METADATA = 'metadata.json'; + +interface IArweaveResult { + error?: string; + messages?: Array<{ + filename: string; + status: 'success' | 'fail'; + transactionId?: string; + error?: string; + }>; +} + +const uploadToArweave = async (data: FormData): Promise => { + const resp = await fetch( + 'https://us-central1-principal-lane-200702.cloudfunctions.net/uploadFile4', + { + method: 'POST', + // @ts-ignore + body: data, + }, + ); + + if (!resp.ok) { + return Promise.reject( + new Error( + 'Unable to upload the artwork to Arweave. Please wait and then try again.', + ), + ); + } + + const result: IArweaveResult = await resp.json(); + + if (result.error) { + return Promise.reject(new Error(result.error)); + } + + return result; +}; + +export const mintNFT = async ( + connection: Connection, + wallet: WalletSigner | undefined, + env: ENV, + files: File[], + metadata: { + name: string; + symbol: string; + description: string; + image: string | undefined; + animation_url: string | undefined; + attributes: Attribute[] | undefined; + external_url: string; + properties: any; + creators: Creator[] | null; + sellerFeeBasisPoints: number; + }, + progressCallback: Dispatch>, + maxSupply?: number, +): Promise<{ + metadataAccount: StringPublicKey; +} | void> => { + if (!wallet?.publicKey) return; + + const metadataContent = { + name: metadata.name, + symbol: metadata.symbol, + description: metadata.description, + seller_fee_basis_points: metadata.sellerFeeBasisPoints, + image: metadata.image, + animation_url: metadata.animation_url, + attributes: metadata.attributes, + external_url: metadata.external_url, + properties: { + ...metadata.properties, + creators: metadata.creators?.map(creator => { + return { + address: creator.address, + share: creator.share, + }; + }), + }, + }; + + const realFiles: File[] = [ + ...files, + new File([JSON.stringify(metadataContent)], RESERVED_METADATA), + ]; + + const { instructions: pushInstructions, signers: pushSigners } = + await prepPayForFilesTxn(wallet, realFiles, metadata); + + progressCallback(1) + + const TOKEN_PROGRAM_ID = programIds().token; + + // Allocate memory for the account + const mintRent = await connection.getMinimumBalanceForRentExemption( + MintLayout.span, + ); + // const accountRent = await connection.getMinimumBalanceForRentExemption( + // AccountLayout.span, + // ); + + // This owner is a temporary signer and owner of metadata we use to circumvent requesting signing + // twice post Arweave. We store in an account (payer) and use it post-Arweave to update MD with new link + // then give control back to the user. + // const payer = new Account(); + const payerPublicKey = wallet.publicKey.toBase58(); + const instructions: TransactionInstruction[] = [...pushInstructions]; + const signers: Keypair[] = [...pushSigners]; + + // This is only temporarily owned by wallet...transferred to program by createMasterEdition below + const mintKey = createMint( + instructions, + wallet.publicKey, + mintRent, + 0, + // Some weird bug with phantom where it's public key doesnt mesh with data encode wellff + toPublicKey(payerPublicKey), + toPublicKey(payerPublicKey), + signers, + ).toBase58(); + + const recipientKey = ( + await findProgramAddress( + [ + wallet.publicKey.toBuffer(), + programIds().token.toBuffer(), + toPublicKey(mintKey).toBuffer(), + ], + programIds().associatedToken, + ) + )[0]; + + createAssociatedTokenAccountInstruction( + instructions, + toPublicKey(recipientKey), + wallet.publicKey, + wallet.publicKey, + toPublicKey(mintKey), + ); + + const metadataAccount = await createMetadata( + new Data({ + symbol: metadata.symbol, + name: metadata.name, + uri: ' '.repeat(64), // size of url for arweave + sellerFeeBasisPoints: metadata.sellerFeeBasisPoints, + creators: metadata.creators, + }), + payerPublicKey, + mintKey, + payerPublicKey, + instructions, + wallet.publicKey.toBase58(), + ); + progressCallback(2) + + // TODO: enable when using payer account to avoid 2nd popup + // const block = await connection.getRecentBlockhash('singleGossip'); + // instructions.push( + // SystemProgram.transfer({ + // fromPubkey: wallet.publicKey, + // toPubkey: payerPublicKey, + // lamports: 0.5 * LAMPORTS_PER_SOL // block.feeCalculator.lamportsPerSignature * 3 + mintRent, // TODO + // }), + // ); + + + const { txid } = await sendTransactionWithRetry( + connection, + wallet, + instructions, + signers, + 'single', + ); + progressCallback(3) + + try { + await connection.confirmTransaction(txid, 'max'); + progressCallback(4) + } catch { + // ignore + } + + // Force wait for max confirmations + // await connection.confirmTransaction(txid, 'max'); + await connection.getParsedConfirmedTransaction(txid, 'confirmed'); + + progressCallback(5) + + // this means we're done getting AR txn setup. Ship it off to ARWeave! + const data = new FormData(); + data.append('transaction', txid); + data.append('env', env); + + const tags = realFiles.reduce( + (acc: Record>, f) => { + acc[f.name] = [{ name: 'mint', value: mintKey }]; + return acc; + }, + {}, + ); + data.append('tags', JSON.stringify(tags)); + realFiles.map(f => data.append('file[]', f)); + + // TODO: convert to absolute file name for image + + const result: IArweaveResult = await uploadToArweave(data); + progressCallback(6) + + const metadataFile = result.messages?.find( + m => m.filename === RESERVED_TXN_MANIFEST, + ); + if (metadataFile?.transactionId && wallet.publicKey) { + const updateInstructions: TransactionInstruction[] = []; + const updateSigners: Keypair[] = []; + + // TODO: connect to testnet arweave + const arweaveLink = `https://arweave.net/${metadataFile.transactionId}`; + await updateMetadata( + new Data({ + name: metadata.name, + symbol: metadata.symbol, + uri: arweaveLink, + creators: metadata.creators, + sellerFeeBasisPoints: metadata.sellerFeeBasisPoints, + }), + undefined, + undefined, + mintKey, + payerPublicKey, + updateInstructions, + metadataAccount, + ); + + updateInstructions.push( + Token.createMintToInstruction( + TOKEN_PROGRAM_ID, + toPublicKey(mintKey), + toPublicKey(recipientKey), + toPublicKey(payerPublicKey), + [], + 1, + ), + ); + + progressCallback(7) + // // In this instruction, mint authority will be removed from the main mint, while + // // minting authority will be maintained for the Printing mint (which we want.) + await createMasterEdition( + maxSupply !== undefined ? new BN(maxSupply) : undefined, + mintKey, + payerPublicKey, + payerPublicKey, + payerPublicKey, + updateInstructions, + ); + + // TODO: enable when using payer account to avoid 2nd popup + /* if (maxSupply !== undefined) + updateInstructions.push( + setAuthority({ + target: authTokenAccount, + currentAuthority: payerPublicKey, + newAuthority: wallet.publicKey, + authorityType: 'AccountOwner', + }), + ); +*/ + // TODO: enable when using payer account to avoid 2nd popup + // Note with refactoring this needs to switch to the updateMetadataAccount command + // await transferUpdateAuthority( + // metadataAccount, + // payerPublicKey, + // wallet.publicKey, + // updateInstructions, + // ); + + progressCallback(8) + + const txid = await sendTransactionWithRetry( + connection, + wallet, + updateInstructions, + updateSigners, + ); + + notify({ + message: 'Art created on Solana', + description: ( + + Arweave Link + + ), + type: 'success', + }); + + // TODO: refund funds + + // send transfer back to user + } + // TODO: + // 1. Jordan: --- upload file and metadata to storage API + // 2. pay for storage by hashing files and attaching memo for each file + + return { metadataAccount }; +}; + +export const prepPayForFilesTxn = async ( + wallet: WalletSigner, + files: File[], + metadata: any, +): Promise<{ + instructions: TransactionInstruction[]; + signers: Keypair[]; +}> => { + const memo = programIds().memo; + + const instructions: TransactionInstruction[] = []; + const signers: Keypair[] = []; + + if (wallet.publicKey) + instructions.push( + SystemProgram.transfer({ + fromPubkey: wallet.publicKey, + toPubkey: AR_SOL_HOLDER_ID, + lamports: 2300000 // 0.0023 SOL per file (paid to arweave) + // await getAssetCostToStore(files), + }), + ); + + for (let i = 0; i < files.length; i++) { + const hashSum = crypto.createHash('sha256'); + hashSum.update(await files[i].text()); + const hex = hashSum.digest('hex'); + instructions.push( + new TransactionInstruction({ + keys: [], + programId: memo, + data: Buffer.from(hex), + }), + ); + } + + return { + instructions, + signers, + }; +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/saveAdmin.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/saveAdmin.ts new file mode 100644 index 0000000..930cc93 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/saveAdmin.ts @@ -0,0 +1,70 @@ +import { Keypair, Connection, TransactionInstruction } from '@solana/web3.js'; +import { + SequenceType, + sendTransactions, + sendTransactionWithRetry, + WalletSigner, +} from '@oyster/common'; +import { WhitelistedCreator } from '@oyster/common/dist/lib/models/metaplex/index'; +import { setStore } from '@oyster/common/dist/lib/models/metaplex/setStore'; +import { setWhitelistedCreator } from '@oyster/common/dist/lib/models/metaplex/setWhitelistedCreator'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; + +// TODO if this becomes very slow move to batching txns like we do with settle.ts +// but given how little this should be used keep it simple +export async function saveAdmin( + connection: Connection, + wallet: WalletSigner, + isPublic: boolean, + whitelistedCreators: WhitelistedCreator[], +) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const signers: Array = []; + const instructions: Array = []; + + const storeSigners: Keypair[] = []; + const storeInstructions: TransactionInstruction[] = []; + + await setStore( + isPublic, + wallet.publicKey.toBase58(), + wallet.publicKey.toBase58(), + storeInstructions, + ); + signers.push(storeSigners); + instructions.push(storeInstructions); + + for (let i = 0; i < whitelistedCreators.length; i++) { + const wc = whitelistedCreators[i]; + const wcSigners: Keypair[] = []; + const wcInstructions: TransactionInstruction[] = []; + + await setWhitelistedCreator( + wc.address, + wc.activated, + wallet.publicKey.toBase58(), + wallet.publicKey.toBase58(), + wcInstructions, + ); + signers.push(wcSigners); + instructions.push(wcInstructions); + } + + instructions.length === 1 + ? await sendTransactionWithRetry( + connection, + wallet, + instructions[0], + signers[0], + 'single', + ) + : await sendTransactions( + connection, + wallet, + instructions, + signers, + SequenceType.StopOnFailure, + 'single', + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/sendPlaceBid.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/sendPlaceBid.ts new file mode 100644 index 0000000..2c47fb0 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/sendPlaceBid.ts @@ -0,0 +1,156 @@ +import { Keypair, Connection, TransactionInstruction } from '@solana/web3.js'; +import { + sendTransactionWithRetry, + placeBid, + cache, + ensureWrappedAccount, + toLamports, + ParsedAccount, + toPublicKey, + WalletSigner, +} from '@oyster/common'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; +import { approve } from '@oyster/common/dist/lib/models/account'; +import { createTokenAccount } from '@oyster/common/dist/lib/actions/account'; +import { TokenAccount } from '@oyster/common/dist/lib/models/account'; + +import { AccountLayout, MintInfo } from '@solana/spl-token'; +import { AuctionView } from '../hooks'; +import BN from 'bn.js'; +import { setupCancelBid } from './cancelBid'; +import { QUOTE_MINT } from '../constants'; + +export async function sendPlaceBid( + connection: Connection, + wallet: WalletSigner, + bidderTokenAccount: string | undefined, + auctionView: AuctionView, + accountsByMint: Map, + // value entered by the user adjust to decimals of the mint + amount: number | BN, +) { + const signers: Keypair[][] = []; + const instructions: TransactionInstruction[][] = []; + const bid = await setupPlaceBid( + connection, + wallet, + bidderTokenAccount, + auctionView, + accountsByMint, + amount, + instructions, + signers, + ); + + await sendTransactionWithRetry( + connection, + wallet, + instructions[0], + signers[0], + 'single', + ); + + return { + amount: bid, + }; +} + +export async function setupPlaceBid( + connection: Connection, + wallet: WalletSigner, + bidderTokenAccount: string | undefined, + auctionView: AuctionView, + accountsByMint: Map, + // value entered by the user adjust to decimals of the mint + // If BN, then assume instant sale and decimals already adjusted. + amount: number | BN, + overallInstructions: TransactionInstruction[][], + overallSigners: Keypair[][], +): Promise { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + let signers: Keypair[] = []; + let instructions: TransactionInstruction[] = []; + const cleanupInstructions: TransactionInstruction[] = []; + + const accountRentExempt = await connection.getMinimumBalanceForRentExemption( + AccountLayout.span, + ); + + const tokenAccount = bidderTokenAccount + ? (cache.get(bidderTokenAccount) as TokenAccount) + : undefined; + const mint = cache.get( + tokenAccount ? tokenAccount.info.mint : QUOTE_MINT, + ) as ParsedAccount; + + const lamports = + accountRentExempt + + (typeof amount === 'number' + ? toLamports(amount, mint.info) + : amount.toNumber()); + + let bidderPotTokenAccount: string; + if (!auctionView.myBidderPot) { + bidderPotTokenAccount = createTokenAccount( + instructions, + wallet.publicKey, + accountRentExempt, + toPublicKey(auctionView.auction.info.tokenMint), + toPublicKey(auctionView.auction.pubkey), + signers, + ).toBase58(); + } else { + bidderPotTokenAccount = auctionView.myBidderPot?.info.bidderPot; + if (!auctionView.auction.info.ended()) { + const cancelSigners: Keypair[][] = []; + const cancelInstr: TransactionInstruction[][] = []; + await setupCancelBid( + auctionView, + accountsByMint, + accountRentExempt, + wallet, + cancelSigners, + cancelInstr, + ); + signers = [...signers, ...cancelSigners[0]]; + instructions = [...cancelInstr[0], ...instructions]; + } + } + + const payingSolAccount = ensureWrappedAccount( + instructions, + cleanupInstructions, + tokenAccount, + wallet.publicKey, + lamports + accountRentExempt * 2, + signers, + ); + + const transferAuthority = approve( + instructions, + cleanupInstructions, + toPublicKey(payingSolAccount), + wallet.publicKey, + lamports - accountRentExempt, + ); + + signers.push(transferAuthority); + + const bid = new BN(lamports - accountRentExempt); + await placeBid( + wallet.publicKey.toBase58(), + payingSolAccount, + bidderPotTokenAccount, + auctionView.auction.info.tokenMint, + transferAuthority.publicKey.toBase58(), + wallet.publicKey.toBase58(), + auctionView.auctionManager.vault, + bid, + instructions, + ); + + overallInstructions.push([...instructions, ...cleanupInstructions]); + overallSigners.push(signers); + return bid; +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/sendRedeemBid.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/sendRedeemBid.ts new file mode 100644 index 0000000..b2d86c8 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/sendRedeemBid.ts @@ -0,0 +1,1011 @@ +import { Keypair, Connection, TransactionInstruction } from '@solana/web3.js'; +import { + ParsedAccount, + programIds, + TokenAccount, + createMint, + SafetyDepositBox, + cache, + ensureWrappedAccount, + updatePrimarySaleHappenedViaToken, + getMetadata, + deprecatedGetReservationList, + AuctionState, + sendTransactionsWithManualRetry, + MasterEditionV1, + MasterEditionV2, + deprecatedMintNewEditionFromMasterEditionViaPrintingToken, + MetadataKey, + TokenAccountParser, + BidderMetadata, + getEditionMarkPda, + decodeEditionMarker, + StringPublicKey, + toPublicKey, + WalletSigner, +} from '@oyster/common'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; +import { AccountLayout, MintLayout, Token } from '@solana/spl-token'; +import { AuctionView } from '../hooks'; +import { + AuctionManagerV1, + ParticipationStateV1, + WinningConfigType, + NonWinningConstraint, + redeemBid, + redeemFullRightsTransferBid, + deprecatedRedeemParticipationBid, + redeemParticipationBidV3, + WinningConstraint, + redeemPrintingV2Bid, + PrizeTrackingTicket, + getPrizeTrackingTicket, + BidRedemptionTicket, + AuctionViewItem, +} from '@oyster/common/dist/lib/models/metaplex/index'; +import { claimBid } from '@oyster/common/dist/lib/models/metaplex/claimBid'; +import { approve } from '@oyster/common/dist/lib/models/account'; +import { createTokenAccount } from '@oyster/common/dist/lib/actions/account'; +import { setupCancelBid } from './cancelBid'; +import { deprecatedPopulateParticipationPrintingAccount } from '@oyster/common/dist/lib/models/metaplex/deprecatedPopulateParticipationPrintingAccount'; +import { setupPlaceBid } from './sendPlaceBid'; +import { claimUnusedPrizes } from './claimUnusedPrizes'; +import { createMintAndAccountWithOne } from './createMintAndAccountWithOne'; +import { BN } from 'bn.js'; +import { QUOTE_MINT } from '../constants'; + +export function eligibleForParticipationPrizeGivenWinningIndex( + winnerIndex: number | null, + auctionView: AuctionView, + bidderMetadata: ParsedAccount | undefined, + bidRedemption: ParsedAccount | undefined, +) { + const index = + auctionView.auctionManager.participationConfig?.safetyDepositBoxIndex; + if (index == undefined || index == null) { + return false; + } + + if (!bidderMetadata || bidRedemption?.info.getBidRedeemed(index)) + return false; + + return ( + (winnerIndex === null && + auctionView.auctionManager.participationConfig?.nonWinningConstraint !== + NonWinningConstraint.NoParticipationPrize) || + (winnerIndex !== null && + auctionView.auctionManager.participationConfig?.winnerConstraint !== + WinningConstraint.NoParticipationPrize) + ); +} + +export async function sendRedeemBid( + connection: Connection, + wallet: WalletSigner, + payingAccount: StringPublicKey, + auctionView: AuctionView, + accountsByMint: Map, + prizeTrackingTickets: Record>, + bidRedemptions: Record>, + bids: ParsedAccount[], +) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const signers: Array = []; + const instructions: Array = []; + + if ( + auctionView.auction.info.ended() && + auctionView.auction.info.state !== AuctionState.Ended + ) { + await setupPlaceBid( + connection, + wallet, + payingAccount, + auctionView, + accountsByMint, + 0, + instructions, + signers, + ); + } + + const accountRentExempt = await connection.getMinimumBalanceForRentExemption( + AccountLayout.span, + ); + + const mintRentExempt = await connection.getMinimumBalanceForRentExemption( + MintLayout.span, + ); + + let winnerIndex: number | null = null; + if (auctionView.myBidderPot?.pubkey) + winnerIndex = auctionView.auction.info.bidState.getWinnerIndex( + auctionView.myBidderPot?.info.bidderAct, + ); + + if (winnerIndex !== null) { + // items is a prebuilt array of arrays where each entry represents one + // winning spot, and each entry in it represents one type of item that can + // be received. + const winningSet = auctionView.items[winnerIndex]; + + for (let i = 0; i < winningSet.length; i++) { + const item = winningSet[i]; + const safetyDeposit = item.safetyDeposit; + switch (item.winningConfigType) { + case WinningConfigType.PrintingV1: + console.log('Redeeming printing v1'); + await deprecatedSetupRedeemPrintingV1Instructions( + auctionView, + accountsByMint, + accountRentExempt, + mintRentExempt, + wallet, + safetyDeposit, + item, + winnerIndex, + signers, + instructions, + ); + break; + case WinningConfigType.PrintingV2: + console.log('Redeeming printing v2'); + await setupRedeemPrintingV2Instructions( + connection, + auctionView, + mintRentExempt, + wallet, + wallet.publicKey.toBase58(), + safetyDeposit, + item, + signers, + instructions, + winnerIndex, + prizeTrackingTickets, + ); + break; + case WinningConfigType.FullRightsTransfer: + console.log('Redeeming Full Rights'); + await setupRedeemFullRightsTransferInstructions( + auctionView, + accountsByMint, + accountRentExempt, + wallet, + safetyDeposit, + item, + winnerIndex, + signers, + instructions, + ); + break; + case WinningConfigType.TokenOnlyTransfer: + console.log('Redeeming Token only'); + await setupRedeemInstructions( + auctionView, + accountsByMint, + accountRentExempt, + wallet, + safetyDeposit, + winnerIndex, + signers, + instructions, + ); + break; + } + } + + if (auctionView.myBidderMetadata && auctionView.myBidderPot) { + const claimSigners: Keypair[] = []; + const claimInstructions: TransactionInstruction[] = []; + instructions.push(claimInstructions); + signers.push(claimSigners); + console.log('Claimed'); + await claimBid( + auctionView.auctionManager.acceptPayment, + auctionView.myBidderMetadata.info.bidderPubkey, + auctionView.myBidderPot?.info.bidderPot, + auctionView.vault.pubkey, + auctionView.auction.info.tokenMint, + claimInstructions, + ); + } + } else { + // If you didnt win, you must have a bid we can refund before we check for open editions. + await setupCancelBid( + auctionView, + accountsByMint, + accountRentExempt, + wallet, + signers, + instructions, + ); + } + + if ( + auctionView.participationItem && + eligibleForParticipationPrizeGivenWinningIndex( + winnerIndex, + auctionView, + auctionView.myBidderMetadata, + auctionView.myBidRedemption, + ) + ) { + console.log('eligible for participation'); + const item = auctionView.participationItem; + const safetyDeposit = item.safetyDeposit; + if (item.masterEdition?.info.key == MetadataKey.MasterEditionV1) { + await deprecatedSetupRedeemParticipationInstructions( + connection, + auctionView, + accountsByMint, + accountRentExempt, + mintRentExempt, + wallet, + safetyDeposit, + item, + signers, + instructions, + ); + } else { + await setupRedeemParticipationInstructions( + connection, + auctionView, + accountsByMint, + accountRentExempt, + mintRentExempt, + wallet, + wallet.publicKey.toBase58(), + safetyDeposit, + auctionView.myBidRedemption, + auctionView.myBidderMetadata, + item, + signers, + instructions, + ); + } + } + + if (wallet.publicKey.toBase58() === auctionView.auctionManager.authority) { + await claimUnusedPrizes( + connection, + wallet, + auctionView, + accountsByMint, + bids, + bidRedemptions, + prizeTrackingTickets, + signers, + instructions, + ); + } + + await sendTransactionsWithManualRetry( + connection, + wallet, + instructions, + signers, + ); +} + +async function setupRedeemInstructions( + auctionView: AuctionView, + accountsByMint: Map, + accountRentExempt: number, + wallet: WalletSigner, + safetyDeposit: ParsedAccount, + winnerIndex: number, + signers: Array, + instructions: Array, +) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const winningPrizeSigner: Keypair[] = []; + const winningPrizeInstructions: TransactionInstruction[] = []; + + signers.push(winningPrizeSigner); + instructions.push(winningPrizeInstructions); + const claimed = auctionView.auctionManager.isItemClaimed( + winnerIndex, + safetyDeposit.info.order, + ); + if (!claimed && auctionView.myBidderMetadata) { + let newTokenAccount = accountsByMint.get( + safetyDeposit.info.tokenMint, + )?.pubkey; + if (!newTokenAccount) + newTokenAccount = createTokenAccount( + winningPrizeInstructions, + wallet.publicKey, + accountRentExempt, + toPublicKey(safetyDeposit.info.tokenMint), + wallet.publicKey, + winningPrizeSigner, + ).toBase58(); + + await redeemBid( + auctionView.auctionManager.vault, + safetyDeposit.info.store, + newTokenAccount, + safetyDeposit.pubkey, + auctionView.vault.info.fractionMint, + auctionView.myBidderMetadata.info.bidderPubkey, + wallet.publicKey.toBase58(), + undefined, + undefined, + false, + winningPrizeInstructions, + ); + + const metadata = await getMetadata(safetyDeposit.info.tokenMint); + await updatePrimarySaleHappenedViaToken( + metadata, + wallet.publicKey.toBase58(), + newTokenAccount, + winningPrizeInstructions, + ); + } +} + +async function setupRedeemFullRightsTransferInstructions( + auctionView: AuctionView, + accountsByMint: Map, + accountRentExempt: number, + wallet: WalletSigner, + safetyDeposit: ParsedAccount, + item: AuctionViewItem, + winnerIndex: number, + signers: Array, + instructions: Array, +) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const winningPrizeSigner: Keypair[] = []; + const winningPrizeInstructions: TransactionInstruction[] = []; + + signers.push(winningPrizeSigner); + instructions.push(winningPrizeInstructions); + + const claimed = auctionView.auctionManager.isItemClaimed( + winnerIndex, + safetyDeposit.info.order, + ); + if (!claimed && auctionView.myBidderMetadata) { + let newTokenAccount = accountsByMint.get( + safetyDeposit.info.tokenMint, + )?.pubkey; + if (!newTokenAccount) + newTokenAccount = createTokenAccount( + winningPrizeInstructions, + wallet.publicKey, + accountRentExempt, + toPublicKey(safetyDeposit.info.tokenMint), + wallet.publicKey, + winningPrizeSigner, + ).toBase58(); + + await redeemFullRightsTransferBid( + auctionView.auctionManager.vault, + safetyDeposit.info.store, + newTokenAccount, + safetyDeposit.pubkey, + auctionView.vault.info.fractionMint, + auctionView.myBidderMetadata.info.bidderPubkey, + wallet.publicKey.toBase58(), + winningPrizeInstructions, + item.metadata.pubkey, + wallet.publicKey.toBase58(), + ); + + const metadata = await getMetadata(safetyDeposit.info.tokenMint); + await updatePrimarySaleHappenedViaToken( + metadata, + wallet.publicKey.toBase58(), + newTokenAccount, + winningPrizeInstructions, + ); + } +} + +export async function setupRedeemPrintingV2Instructions( + connection: Connection, + auctionView: AuctionView, + mintRentExempt: number, + wallet: WalletSigner, + receiverWallet: StringPublicKey, + safetyDeposit: ParsedAccount, + item: AuctionViewItem, + signers: Array, + instructions: Array, + winningIndex: number, + prizeTrackingTickets: Record>, +) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + if (!item.masterEdition || !item.metadata) { + return; + } + + const me = item.masterEdition as ParsedAccount; + + const myPrizeTrackingTicketKey = await getPrizeTrackingTicket( + auctionView.auctionManager.pubkey, + item.metadata.info.mint, + ); + + const myPrizeTrackingTicket = prizeTrackingTickets[myPrizeTrackingTicketKey]; + // We are not entirely guaranteed this is right. Someone could be clicking at the same time. Contract will throw error if this + // is the case and they'll need to refresh to get tracking ticket which may not have existed when they first clicked. + const editionBase = myPrizeTrackingTicket + ? myPrizeTrackingTicket.info.supplySnapshot + : me.info.supply; + let offset = new BN(1); + + auctionView.items.forEach( + (wc, index) => + index < winningIndex && + wc.forEach(i => { + if ( + i.safetyDeposit.info.order === item.safetyDeposit.info.order && + i.winningConfigType === item.winningConfigType + ) { + offset = offset.add(i.amount); + } + }), + ); + + for (let i = 0; i < item.amount.toNumber(); i++) { + const myInstructions: TransactionInstruction[] = []; + const mySigners: Keypair[] = []; + + const { mint, account } = await createMintAndAccountWithOne( + wallet, + receiverWallet, + mintRentExempt, + myInstructions, + mySigners, + ); + + const winIndex = + auctionView.auction.info.bidState.getWinnerIndex(receiverWallet) || 0; + + const desiredEdition = editionBase.add(offset.add(new BN(i))); + const editionMarkPda = await getEditionMarkPda( + item.metadata.info.mint, + desiredEdition, + ); + + try { + const editionData = await connection.getAccountInfo( + toPublicKey(editionMarkPda), + ); + + if (editionData) { + const marker = decodeEditionMarker(editionData.data); + + if (marker.editionTaken(desiredEdition.toNumber())) { + console.log('Edition', desiredEdition, 'taken, continuing'); + continue; + } + } + } catch (e) { + console.error(e); + } + + await redeemPrintingV2Bid( + auctionView.vault.pubkey, + safetyDeposit.info.store, + account, + safetyDeposit.pubkey, + receiverWallet, + wallet.publicKey.toBase58(), + item.metadata.pubkey, + me.pubkey, + item.metadata.info.mint, + mint, + desiredEdition, + new BN(offset.add(new BN(i))), + new BN(winIndex), + myInstructions, + ); + + const metadata = await getMetadata(mint); + + if (wallet.publicKey.toBase58() === receiverWallet) { + await updatePrimarySaleHappenedViaToken( + metadata, + wallet.publicKey.toBase58(), + account, + myInstructions, + ); + } + instructions.push(myInstructions); + signers.push(mySigners); + } +} + +async function deprecatedSetupRedeemPrintingV1Instructions( + auctionView: AuctionView, + accountsByMint: Map, + accountRentExempt: number, + mintRentExempt: number, + wallet: WalletSigner, + safetyDeposit: ParsedAccount, + item: AuctionViewItem, + winnerIndex: number, + signers: Array, + instructions: Array, +) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + if (!item.masterEdition || !item.metadata) { + return; + } + const updateAuth = item.metadata.info.updateAuthority; + + const reservationList = await deprecatedGetReservationList( + item.masterEdition.pubkey, + auctionView.auctionManager.pubkey, + ); + + const me = item.masterEdition as ParsedAccount; + + const newTokenAccount = accountsByMint.get(me.info.printingMint); + let newTokenAccountKey: StringPublicKey | undefined = newTokenAccount?.pubkey; + + let newTokenAccountBalance: number = newTokenAccount + ? newTokenAccount.info.amount.toNumber() + : 0; + + const claimed = auctionView.auctionManager.isItemClaimed( + winnerIndex, + safetyDeposit.info.order, + ); + + if (updateAuth && auctionView.myBidderMetadata) { + console.log('This state item is', claimed); + if (!claimed) { + const winningPrizeSigner: Keypair[] = []; + const winningPrizeInstructions: TransactionInstruction[] = []; + + signers.push(winningPrizeSigner); + instructions.push(winningPrizeInstructions); + if (!newTokenAccountKey) + // TODO: switch to ATA + newTokenAccountKey = createTokenAccount( + winningPrizeInstructions, + wallet.publicKey, + accountRentExempt, + toPublicKey(me.info.printingMint), + wallet.publicKey, + winningPrizeSigner, + ).toBase58(); + + await redeemBid( + auctionView.auctionManager.vault, + safetyDeposit.info.store, + newTokenAccountKey, + safetyDeposit.pubkey, + auctionView.vault.info.fractionMint, + auctionView.myBidderMetadata.info.bidderPubkey, + wallet.publicKey.toBase58(), + item.masterEdition.pubkey, + reservationList, + true, + winningPrizeInstructions, + ); + newTokenAccountBalance = auctionView.auctionManager + .getAmountForWinner(winnerIndex, safetyDeposit.info.order) + .toNumber(); + } + + if (newTokenAccountKey && newTokenAccountBalance > 0) + for (let i = 0; i < newTokenAccountBalance; i++) { + console.log('Redeeming v1 token', i); + await deprecatedRedeemPrintingV1Token( + wallet, + updateAuth, + item, + newTokenAccountKey, + mintRentExempt, + accountRentExempt, + signers, + instructions, + reservationList, + ); + } + } +} + +async function deprecatedRedeemPrintingV1Token( + wallet: WalletSigner, + updateAuth: StringPublicKey, + item: AuctionViewItem, + newTokenAccount: StringPublicKey, + mintRentExempt: number, + accountRentExempt: number, + signers: Keypair[][], + instructions: TransactionInstruction[][], + reservationList?: StringPublicKey, +) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + if (!item.masterEdition) return; + const cashInLimitedPrizeAuthorizationTokenSigner: Keypair[] = []; + const cashInLimitedPrizeAuthorizationTokenInstruction: TransactionInstruction[] = + []; + signers.push(cashInLimitedPrizeAuthorizationTokenSigner); + instructions.push(cashInLimitedPrizeAuthorizationTokenInstruction); + + const newLimitedEditionMint = createMint( + cashInLimitedPrizeAuthorizationTokenInstruction, + wallet.publicKey, + mintRentExempt, + 0, + wallet.publicKey, + wallet.publicKey, + cashInLimitedPrizeAuthorizationTokenSigner, + ).toBase58(); + const newLimitedEdition = createTokenAccount( + cashInLimitedPrizeAuthorizationTokenInstruction, + wallet.publicKey, + accountRentExempt, + toPublicKey(newLimitedEditionMint), + wallet.publicKey, + cashInLimitedPrizeAuthorizationTokenSigner, + ); + + cashInLimitedPrizeAuthorizationTokenInstruction.push( + Token.createMintToInstruction( + programIds().token, + toPublicKey(newLimitedEditionMint), + newLimitedEdition, + wallet.publicKey, + [], + 1, + ), + ); + + const burnAuthority = approve( + cashInLimitedPrizeAuthorizationTokenInstruction, + [], + toPublicKey(newTokenAccount), + wallet.publicKey, + 1, + ); + + cashInLimitedPrizeAuthorizationTokenSigner.push(burnAuthority); + + const me = item.masterEdition as ParsedAccount; + + await deprecatedMintNewEditionFromMasterEditionViaPrintingToken( + newLimitedEditionMint, + item.metadata.info.mint, + wallet.publicKey.toBase58(), + me.info.printingMint, + newTokenAccount, + burnAuthority.publicKey.toBase58(), + updateAuth, + reservationList, + cashInLimitedPrizeAuthorizationTokenInstruction, + wallet.publicKey.toBase58(), + ); + + const metadata = await getMetadata(newLimitedEditionMint); + await updatePrimarySaleHappenedViaToken( + metadata, + wallet.publicKey.toBase58(), + newLimitedEdition.toBase58(), + cashInLimitedPrizeAuthorizationTokenInstruction, + ); +} + +export async function setupRedeemParticipationInstructions( + connection: Connection, + auctionView: AuctionView, + accountsByMint: Map, + accountRentExempt: number, + mintRentExempt: number, + wallet: WalletSigner, + receiverWallet: StringPublicKey, + safetyDeposit: ParsedAccount, + bidRedemption: ParsedAccount | undefined, + bid: ParsedAccount | undefined, + item: AuctionViewItem, + signers: Array, + instructions: Array, +) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + if (!item.masterEdition || !item.metadata) { + return; + } + + // Forgive me, for i have sinned. I had to split up the commands + // here into multiple txns because participation redemption is huge. + if (!bidRedemption?.info?.getBidRedeemed(safetyDeposit.info.order)) { + const me = item.masterEdition as ParsedAccount; + + // Super unfortunate but cant fit this all in one txn + const mintingInstructions: TransactionInstruction[] = []; + const mintingSigners: Keypair[] = []; + + const cleanupInstructions: TransactionInstruction[] = []; + + const { mint, account } = await createMintAndAccountWithOne( + wallet, + receiverWallet, + mintRentExempt, + mintingInstructions, + mintingSigners, + ); + + const fixedPrice = + auctionView.auctionManager.participationConfig?.fixedPrice; + const price: number = + fixedPrice !== undefined && fixedPrice !== null + ? fixedPrice.toNumber() + : bid?.info.lastBid.toNumber() || 0; + + let tokenAccount = accountsByMint.get(auctionView.auction.info.tokenMint); + + console.log('Have token account', tokenAccount); + if (!tokenAccount) { + // In case accountsByMint missed it(which it does sometimes) + const allAccounts = await connection.getTokenAccountsByOwner( + wallet.publicKey, + { mint: QUOTE_MINT }, + ); + + if (allAccounts.value.length > 0) { + tokenAccount = TokenAccountParser( + allAccounts.value[0].pubkey.toBase58(), + allAccounts.value[0].account, + ); + } + console.log('Found token account', tokenAccount); + } + + const payingSolAccount = ensureWrappedAccount( + mintingInstructions, + cleanupInstructions, + tokenAccount, + wallet.publicKey, + price + accountRentExempt, + mintingSigners, + ); + + instructions.push(mintingInstructions); + signers.push(mintingSigners); + + const myInstructions: TransactionInstruction[] = []; + + const mySigners: Keypair[] = []; + + const transferAuthority = approve( + myInstructions, + cleanupInstructions, + toPublicKey(payingSolAccount), + wallet.publicKey, + price, + ); + + mySigners.push(transferAuthority); + const winnerIndex = auctionView.auction.info.bidState.getWinnerIndex( + wallet.publicKey.toBase58(), + ); + await redeemParticipationBidV3( + auctionView.vault.pubkey, + safetyDeposit.info.store, + account, + safetyDeposit.pubkey, + receiverWallet, + wallet.publicKey.toBase58(), + item.metadata.pubkey, + me.pubkey, + item.metadata.info.mint, + transferAuthority.publicKey.toBase58(), + auctionView.auctionManager.acceptPayment, + payingSolAccount, + mint, + me.info.supply.add(new BN(1)), + winnerIndex != null && winnerIndex != undefined + ? new BN(winnerIndex) + : null, + myInstructions, + ); + instructions.push([...myInstructions, ...cleanupInstructions]); + signers.push(mySigners); + const metadata = await getMetadata(mint); + + if (receiverWallet === wallet.publicKey.toBase58()) { + const updatePrimarySaleHappenedInstructions: TransactionInstruction[] = + []; + const updatePrimarySaleHappenedSigners: Keypair[] = []; + + await updatePrimarySaleHappenedViaToken( + metadata, + wallet.publicKey.toBase58(), + account, + updatePrimarySaleHappenedInstructions, + ); + instructions.push(updatePrimarySaleHappenedInstructions); + signers.push(updatePrimarySaleHappenedSigners); + } + } else { + console.log('Item is already claimed!', item.metadata.info.mint); + } +} + +async function deprecatedSetupRedeemParticipationInstructions( + connection: Connection, + auctionView: AuctionView, + accountsByMint: Map, + accountRentExempt: number, + mintRentExempt: number, + wallet: WalletSigner, + safetyDeposit: ParsedAccount, + item: AuctionViewItem, + signers: Array, + instructions: Array, +) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const me = item.masterEdition as ParsedAccount; + const participationState: ParticipationStateV1 | null = ( + auctionView.auctionManager.instance.info as AuctionManagerV1 + ).state?.participationState; + if ( + !participationState || + !participationState?.printingAuthorizationTokenAccount || + !me?.info.oneTimePrintingAuthorizationMint || + !item.metadata + ) + return; + + const updateAuth = item.metadata.info.updateAuthority; + const tokenAccount = accountsByMint.get(auctionView.auction.info.tokenMint); + const mint = cache.get(auctionView.auction.info.tokenMint); + + const participationBalance = await connection.getTokenAccountBalance( + toPublicKey(participationState.printingAuthorizationTokenAccount), + ); + const tokenBalance = await connection.getTokenAccountBalance( + toPublicKey(safetyDeposit.info.store), + ); + + if ( + participationBalance.value.uiAmount === 0 && + tokenBalance.value.uiAmount === 1 + ) { + // I'm the first, I need to populate for the others with a crank turn. + const fillParticipationStashSigners: Keypair[] = []; + const fillParticipationStashInstructions: TransactionInstruction[] = []; + const oneTimeTransient = createTokenAccount( + fillParticipationStashInstructions, + wallet.publicKey, + accountRentExempt, + toPublicKey(me?.info.oneTimePrintingAuthorizationMint), + toPublicKey(auctionView.auctionManager.pubkey), + fillParticipationStashSigners, + ).toBase58(); + + await deprecatedPopulateParticipationPrintingAccount( + auctionView.vault.pubkey, + auctionView.auctionManager.pubkey, + auctionView.auction.pubkey, + safetyDeposit.info.store, + oneTimeTransient, + participationState.printingAuthorizationTokenAccount, + safetyDeposit.pubkey, + auctionView.vault.info.fractionMint, + me.info.printingMint, + me.info.oneTimePrintingAuthorizationMint, + me.pubkey, + item.metadata.pubkey, + wallet.publicKey.toBase58(), + fillParticipationStashInstructions, + ); + + signers.push(fillParticipationStashSigners); + instructions.push(fillParticipationStashInstructions); + } + + let newTokenAccount: StringPublicKey | undefined = accountsByMint.get( + me.info.printingMint, + )?.pubkey; + + let newTokenBalance = + accountsByMint.get(me.info.printingMint)?.info.amount || 0; + + if ( + me && + updateAuth && + auctionView.myBidderMetadata && + mint && + !auctionView.myBidRedemption?.info.getBidRedeemed(safetyDeposit.info.order) + ) { + if ( + !auctionView.myBidRedemption?.info.getBidRedeemed( + safetyDeposit.info.order, + ) + ) { + const winningPrizeSigner: Keypair[] = []; + const winningPrizeInstructions: TransactionInstruction[] = []; + const cleanupInstructions: TransactionInstruction[] = []; + + if (!newTokenAccount) { + // made a separate txn because we're over the txn limit by like 10 bytes. + const newTokenAccountSigner: Keypair[] = []; + const newTokenAccountInstructions: TransactionInstruction[] = []; + signers.push(newTokenAccountSigner); + instructions.push(newTokenAccountInstructions); + newTokenAccount = createTokenAccount( + newTokenAccountInstructions, + wallet.publicKey, + accountRentExempt, + toPublicKey(me.info.printingMint), + wallet.publicKey, + newTokenAccountSigner, + ).toBase58(); + } + signers.push(winningPrizeSigner); + + const fixedPrice = + auctionView.auctionManager.participationConfig?.fixedPrice; + const price: number = + fixedPrice !== undefined && fixedPrice !== null + ? fixedPrice.toNumber() + : auctionView.myBidderMetadata.info.lastBid.toNumber() || 0; + + const payingSolAccount = ensureWrappedAccount( + winningPrizeInstructions, + cleanupInstructions, + tokenAccount, + wallet.publicKey, + price + accountRentExempt, + winningPrizeSigner, + ); + + const transferAuthority = approve( + winningPrizeInstructions, + cleanupInstructions, + toPublicKey(payingSolAccount), + wallet.publicKey, + price, + ); + + winningPrizeSigner.push(transferAuthority); + + await deprecatedRedeemParticipationBid( + auctionView.auctionManager.vault, + safetyDeposit.info.store, + newTokenAccount, + safetyDeposit.pubkey, + auctionView.myBidderMetadata.info.bidderPubkey, + wallet.publicKey.toBase58(), + winningPrizeInstructions, + participationState.printingAuthorizationTokenAccount, + transferAuthority.publicKey.toBase58(), + auctionView.auctionManager.acceptPayment, + payingSolAccount, + ); + newTokenBalance = 1; + instructions.push([...winningPrizeInstructions, ...cleanupInstructions]); + } + } + + if (newTokenAccount && newTokenBalance === 1) { + await deprecatedRedeemPrintingV1Token( + wallet, + updateAuth, + item, + newTokenAccount, + mintRentExempt, + accountRentExempt, + signers, + instructions, + undefined, + ); + } +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/sendSignMetadata.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/sendSignMetadata.ts new file mode 100644 index 0000000..8f0b15c --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/sendSignMetadata.ts @@ -0,0 +1,29 @@ +import { Keypair, Connection, TransactionInstruction } from '@solana/web3.js'; +import { + sendTransactionWithRetry, + signMetadata, + StringPublicKey, + WalletSigner, +} from '@oyster/common'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; + +export async function sendSignMetadata( + connection: Connection, + wallet: WalletSigner, + metadata: StringPublicKey, +) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const signers: Keypair[] = []; + const instructions: TransactionInstruction[] = []; + + await signMetadata(metadata, wallet.publicKey.toBase58(), instructions); + + await sendTransactionWithRetry( + connection, + wallet, + instructions, + signers, + 'single', + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/setVaultAndAuctionAuthorities.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/setVaultAndAuctionAuthorities.ts new file mode 100644 index 0000000..4dfc201 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/setVaultAndAuctionAuthorities.ts @@ -0,0 +1,39 @@ +import { Keypair, TransactionInstruction } from '@solana/web3.js'; +import { + setAuctionAuthority, + setVaultAuthority, + StringPublicKey, + WalletSigner, +} from '@oyster/common'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; + +// This command sets the authorities on the vault and auction to be the newly created auction manager. +export async function setVaultAndAuctionAuthorities( + wallet: WalletSigner, + vault: StringPublicKey, + auction: StringPublicKey, + auctionManager: StringPublicKey, +): Promise<{ + instructions: TransactionInstruction[]; + signers: Keypair[]; +}> { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const signers: Keypair[] = []; + const instructions: TransactionInstruction[] = []; + + await setAuctionAuthority( + auction, + wallet.publicKey.toBase58(), + auctionManager, + instructions, + ); + await setVaultAuthority( + vault, + wallet.publicKey.toBase58(), + auctionManager, + instructions, + ); + + return { instructions, signers }; +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/settle.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/settle.ts new file mode 100644 index 0000000..a8684e4 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/settle.ts @@ -0,0 +1,295 @@ +import { Keypair, Connection, TransactionInstruction } from '@solana/web3.js'; +import { + ParsedAccount, + SequenceType, + sendTransactions, + sendTransactionWithRetry, + BidderPot, + createAssociatedTokenAccountInstruction, + programIds, + findProgramAddress, + AuctionState, + TokenAccount, + toPublicKey, + WalletSigner, +} from '@oyster/common'; + +import { AuctionView } from '../hooks'; + +import { claimBid } from '@oyster/common/dist/lib/models/metaplex/claimBid'; +import { emptyPaymentAccount } from '@oyster/common/dist/lib/models/metaplex/emptyPaymentAccount'; +import { QUOTE_MINT } from '../constants'; +import { setupPlaceBid } from './sendPlaceBid'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; + +const BATCH_SIZE = 10; +const SETTLE_TRANSACTION_SIZE = 6; +const CLAIM_TRANSACTION_SIZE = 6; +export async function settle( + connection: Connection, + wallet: WalletSigner, + auctionView: AuctionView, + bidsToClaim: ParsedAccount[], + payingAccount: string | undefined, + accountsByMint: Map, +) { + if ( + auctionView.auction.info.ended() && + auctionView.auction.info.state !== AuctionState.Ended + ) { + const signers: Keypair[][] = []; + const instructions: TransactionInstruction[][] = []; + + await setupPlaceBid( + connection, + wallet, + payingAccount, + auctionView, + accountsByMint, + 0, + instructions, + signers, + ); + + await sendTransactionWithRetry( + connection, + wallet, + instructions[0], + signers[0], + ); + } + + await claimAllBids(connection, wallet, auctionView, bidsToClaim); + await emptyPaymentAccountForAllTokens(connection, wallet, auctionView); +} + +async function emptyPaymentAccountForAllTokens( + connection: Connection, + wallet: WalletSigner, + auctionView: AuctionView, +) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + const PROGRAM_IDS = programIds(); + const signers: Array> = []; + const instructions: Array> = []; + + let currSignerBatch: Array = []; + let currInstrBatch: Array = []; + + let settleSigners: Keypair[] = []; + let settleInstructions: TransactionInstruction[] = []; + const ataLookup: Record = {}; + // TODO replace all this with payer account so user doesnt need to click approve several times. + + // Overall we have 10 parallel txns, of up to 4 settlements per txn + // That's what this loop is building. + const prizeArrays = [ + ...auctionView.items, + ...(auctionView.participationItem ? [[auctionView.participationItem]] : []), + ]; + for (let i = 0; i < prizeArrays.length; i++) { + const items = prizeArrays[i]; + + for (let j = 0; j < items.length; j++) { + const item = items[j]; + const creators = item.metadata.info.data.creators; + const edgeCaseWhereCreatorIsAuctioneer = !!creators + ?.map(c => c.address) + .find(c => c === auctionView.auctionManager.authority); + + const addresses = [ + ...(creators ? creators.map(c => c.address) : []), + ...[auctionView.auctionManager.authority], + ]; + + for (let k = 0; k < addresses.length; k++) { + const ata = ( + await findProgramAddress( + [ + toPublicKey(addresses[k]).toBuffer(), + PROGRAM_IDS.token.toBuffer(), + QUOTE_MINT.toBuffer(), + ], + PROGRAM_IDS.associatedToken, + ) + )[0]; + + const existingAta = await connection.getAccountInfo(toPublicKey(ata)); + console.log('Existing ata?', existingAta); + if (!existingAta && !ataLookup[ata]) + createAssociatedTokenAccountInstruction( + settleInstructions, + toPublicKey(ata), + wallet.publicKey, + toPublicKey(addresses[k]), + QUOTE_MINT, + ); + + ataLookup[ata] = true; + + const creatorIndex = creators + ? creators.map(c => c.address).indexOf(addresses[k]) + : null; + + await emptyPaymentAccount( + auctionView.auctionManager.acceptPayment, + ata, + auctionView.auctionManager.pubkey, + item.metadata.pubkey, + item.masterEdition?.pubkey, + item.safetyDeposit.pubkey, + item.safetyDeposit.info.vault, + auctionView.auction.pubkey, + wallet.publicKey.toBase58(), + addresses[k], + item === auctionView.participationItem ? null : i, + item === auctionView.participationItem ? null : j, + creatorIndex === -1 || + creatorIndex === null || + (edgeCaseWhereCreatorIsAuctioneer && k === addresses.length - 1) + ? null + : creatorIndex, + settleInstructions, + ); + + if (settleInstructions.length >= SETTLE_TRANSACTION_SIZE) { + currSignerBatch.push(settleSigners); + currInstrBatch.push(settleInstructions); + settleSigners = []; + settleInstructions = []; + } + + if (currInstrBatch.length === BATCH_SIZE) { + signers.push(currSignerBatch); + instructions.push(currInstrBatch); + currSignerBatch = []; + currInstrBatch = []; + } + } + } + } + + if ( + settleInstructions.length < SETTLE_TRANSACTION_SIZE && + settleInstructions.length > 0 + ) { + currSignerBatch.push(settleSigners); + currInstrBatch.push(settleInstructions); + } + + if (currInstrBatch.length <= BATCH_SIZE && currInstrBatch.length > 0) { + // add the last one on + signers.push(currSignerBatch); + instructions.push(currInstrBatch); + } + + for (let i = 0; i < instructions.length; i++) { + const instructionBatch = instructions[i]; + const signerBatch = signers[i]; + if (instructionBatch.length >= 2) + // Pump em through! + await sendTransactions( + connection, + wallet, + instructionBatch, + signerBatch, + SequenceType.StopOnFailure, + 'single', + ); + else + await sendTransactionWithRetry( + connection, + wallet, + instructionBatch[0], + signerBatch[0], + 'single', + ); + } +} + +async function claimAllBids( + connection: Connection, + wallet: WalletSigner, + auctionView: AuctionView, + bids: ParsedAccount[], +) { + const signers: Array> = []; + const instructions: Array> = []; + + let currSignerBatch: Array = []; + let currInstrBatch: Array = []; + + let claimBidSigners: Keypair[] = []; + let claimBidInstructions: TransactionInstruction[] = []; + + // TODO replace all this with payer account so user doesnt need to click approve several times. + + // Overall we have 10 parallel txns, of up to 7 claims in each txn + // That's what this loop is building. + for (let i = 0; i < bids.length; i++) { + const bid = bids[i]; + console.log('Claiming', bid.info.bidderAct); + await claimBid( + auctionView.auctionManager.acceptPayment, + bid.info.bidderAct, + bid.info.bidderPot, + auctionView.vault.pubkey, + auctionView.auction.info.tokenMint, + claimBidInstructions, + ); + + if (claimBidInstructions.length === CLAIM_TRANSACTION_SIZE) { + currSignerBatch.push(claimBidSigners); + currInstrBatch.push(claimBidInstructions); + claimBidSigners = []; + claimBidInstructions = []; + } + + if (currInstrBatch.length === BATCH_SIZE) { + signers.push(currSignerBatch); + instructions.push(currInstrBatch); + currSignerBatch = []; + currInstrBatch = []; + } + } + + if ( + claimBidInstructions.length < CLAIM_TRANSACTION_SIZE && + claimBidInstructions.length > 0 + ) { + currSignerBatch.push(claimBidSigners); + currInstrBatch.push(claimBidInstructions); + } + + if (currInstrBatch.length <= BATCH_SIZE && currInstrBatch.length > 0) { + // add the last one on + signers.push(currSignerBatch); + instructions.push(currInstrBatch); + } + console.log('Instructions', instructions); + for (let i = 0; i < instructions.length; i++) { + const instructionBatch = instructions[i]; + const signerBatch = signers[i]; + console.log('Running batch', i); + if (instructionBatch.length >= 2) + // Pump em through! + await sendTransactions( + connection, + wallet, + instructionBatch, + signerBatch, + SequenceType.StopOnFailure, + 'single', + ); + else + await sendTransactionWithRetry( + connection, + wallet, + instructionBatch[0], + signerBatch[0], + 'single', + ); + console.log('Done'); + } +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/setupMintEditionIntoWalletInstructions.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/setupMintEditionIntoWalletInstructions.ts new file mode 100644 index 0000000..6cca0d9 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/setupMintEditionIntoWalletInstructions.ts @@ -0,0 +1,58 @@ +import { Connection } from '@solana/web3.js'; +import { MintLayout } from '@solana/spl-token'; +import BN from 'bn.js'; +import { + mintNewEditionFromMasterEditionViaToken, + StringPublicKey, + TokenAccount, +} from '@oyster/common'; +import { createMintAndAccountWithOne } from './createMintAndAccountWithOne'; +import { Art } from '../types'; +import { WalletContextState } from '@solana/wallet-adapter-react'; + +export async function setupMintEditionIntoWalletInstructions( + art: Art, + wallet: WalletContextState, + connection: Connection, + mintTokenAccount: TokenAccount, + edition: BN, + instructions: any, + signers: any, + mintDestination: StringPublicKey, +) { + if (!art.mint) throw new Error('Art mint is not provided'); + if (typeof art.supply === 'undefined') { + throw new Error('Art supply is not provided'); + } + if (!wallet.publicKey) throw new Error('Wallet pubKey is not provided'); + if (!mintTokenAccount) { + throw new Error('Art mint token account is not provided'); + } + const walletPubKey = wallet.publicKey.toString(); + const { mint: tokenMint } = art; + const { pubkey: mintTokenAccountPubKey } = mintTokenAccount; + const mintTokenAccountOwner = mintTokenAccount.info.owner.toString(); + + const mintRentExempt = await connection.getMinimumBalanceForRentExemption( + MintLayout.span, + ); + const { mint: newMint } = await createMintAndAccountWithOne( + wallet, + mintDestination, + mintRentExempt, + instructions, + signers, + ); + + await mintNewEditionFromMasterEditionViaToken( + newMint, + tokenMint, + walletPubKey, + walletPubKey, + mintTokenAccountOwner, + mintTokenAccountPubKey, + instructions, + walletPubKey, + edition, + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/startAuctionManually.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/startAuctionManually.ts new file mode 100644 index 0000000..0315792 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/startAuctionManually.ts @@ -0,0 +1,35 @@ +import { Connection, Keypair, TransactionInstruction } from '@solana/web3.js'; +import { startAuction } from '@oyster/common/dist/lib/models/metaplex/index'; +import { notify, sendTransactionWithRetry, WalletSigner } from '@oyster/common'; +import { AuctionView } from '../hooks'; + +export async function startAuctionManually( + connection: Connection, + wallet: WalletSigner, + auctionView: AuctionView, +) { + try { + const signers: Keypair[] = []; + const instructions: TransactionInstruction[] = []; + + await startAuction( + auctionView.vault.pubkey, + auctionView.auctionManager.authority, + instructions, + ); + + await sendTransactionWithRetry(connection, wallet, instructions, signers); + + notify({ + message: 'Auction started', + type: 'success', + }); + } catch (e) { + notify({ + message: 'Transaction failed...', + description: 'Failed to start the auction', + type: 'error', + }); + return Promise.reject(e); + } +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/actions/unwindVault.ts b/CandyMachine-Storefront/store/js/packages/web/src/actions/unwindVault.ts new file mode 100644 index 0000000..a05913e --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/actions/unwindVault.ts @@ -0,0 +1,141 @@ +import { Keypair, Connection, TransactionInstruction } from '@solana/web3.js'; +import { + Vault, + ParsedAccount, + SafetyDepositBox, + programIds, + createAssociatedTokenAccountInstruction, + withdrawTokenFromSafetyDepositBox, + VaultState, + sendTransactionsWithManualRetry, + decodeExternalPriceAccount, + findProgramAddress, + toPublicKey, + WalletSigner, +} from '@oyster/common'; + +import BN from 'bn.js'; +import { closeVault } from './closeVault'; +import { WalletNotConnectedError } from '@solana/wallet-adapter-base'; + +const BATCH_SIZE = 1; + +// Given a vault you own, unwind all the tokens out of it. +export async function unwindVault( + connection: Connection, + wallet: WalletSigner, + vault: ParsedAccount, + safetyDepositBoxesByVaultAndIndex: Record< + string, + ParsedAccount + >, +) { + if (!wallet.publicKey) throw new WalletNotConnectedError(); + + let batchCounter = 0; + const PROGRAM_IDS = programIds(); + const signers: Array = []; + const instructions: Array = []; + + let currSigners: Keypair[] = []; + let currInstructions: TransactionInstruction[] = []; + + if (vault.info.state === VaultState.Inactive) { + console.log('Vault is inactive, combining'); + const epa = await connection.getAccountInfo( + toPublicKey(vault.info.pricingLookupAddress), + ); + if (epa) { + const decoded = decodeExternalPriceAccount(epa.data); + // "Closing" it here actually brings it to Combined state which means we can withdraw tokens. + const { instructions: cvInstructions, signers: cvSigners } = + await closeVault( + connection, + wallet, + vault.pubkey, + vault.info.fractionMint, + vault.info.fractionTreasury, + vault.info.redeemTreasury, + decoded.priceMint, + vault.info.pricingLookupAddress, + ); + + signers.push(cvSigners); + instructions.push(cvInstructions); + } + } + + const vaultKey = vault.pubkey; + const boxes: ParsedAccount[] = []; + + let box = safetyDepositBoxesByVaultAndIndex[vaultKey + '-0']; + if (box) { + boxes.push(box); + let i = 1; + while (box) { + box = safetyDepositBoxesByVaultAndIndex[vaultKey + '-' + i.toString()]; + if (box) boxes.push(box); + i++; + } + } + console.log('Found boxes', boxes); + for (let i = 0; i < boxes.length; i++) { + const nft = boxes[i]; + const ata = ( + await findProgramAddress( + [ + wallet.publicKey.toBuffer(), + PROGRAM_IDS.token.toBuffer(), + toPublicKey(nft.info.tokenMint).toBuffer(), + ], + PROGRAM_IDS.associatedToken, + ) + )[0]; + + const existingAta = await connection.getAccountInfo(toPublicKey(ata)); + console.log('Existing ata?', existingAta); + if (!existingAta) + createAssociatedTokenAccountInstruction( + currInstructions, + toPublicKey(ata), + wallet.publicKey, + wallet.publicKey, + toPublicKey(nft.info.tokenMint), + ); + + const value = await connection.getTokenAccountBalance( + toPublicKey(nft.info.store), + ); + await withdrawTokenFromSafetyDepositBox( + new BN(value.value.uiAmount || 1), + ata, + nft.pubkey, + nft.info.store, + vault.pubkey, + vault.info.fractionMint, + wallet.publicKey.toBase58(), + currInstructions, + ); + + if (batchCounter === BATCH_SIZE) { + signers.push(currSigners); + instructions.push(currInstructions); + batchCounter = 0; + currSigners = []; + currInstructions = []; + } + batchCounter++; + } + + if (instructions[instructions.length - 1] !== currInstructions) { + signers.push(currSigners); + instructions.push(currInstructions); + } + + await sendTransactionsWithManualRetry( + connection, + wallet, + instructions, + signers, + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/AmountLabel/index.less b/CandyMachine-Storefront/store/js/packages/web/src/components/AmountLabel/index.less new file mode 100644 index 0000000..b7bd7e2 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/AmountLabel/index.less @@ -0,0 +1,6 @@ + +.usd { + margin: 'auto 0'; + color: 'rgba(255, 255, 255, 0.4)'; + font-size: '1.5rem'; +} \ No newline at end of file diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/AmountLabel/index.tsx b/CandyMachine-Storefront/store/js/packages/web/src/components/AmountLabel/index.tsx new file mode 100644 index 0000000..3e0021f --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/AmountLabel/index.tsx @@ -0,0 +1,58 @@ +import React, { useEffect, useState } from 'react'; +import { Statistic } from 'antd'; +import { useSolPrice } from '../../contexts'; +import { formatUSD } from '@oyster/common'; + +interface IAmountLabel { + amount: number | string; + displayUSD?: boolean; + title?: string; + style?: object; + containerStyle?: object; + ended?: boolean; +} + +export const AmountLabel = (props: IAmountLabel) => { + const { + amount: _amount, + displayUSD = true, + title = '', + style = {}, + containerStyle = {}, + ended, + } = props; + const amount = typeof _amount === 'string' ? parseFloat(_amount) : _amount; + + const solPrice = useSolPrice(); + + const [priceUSD, setPriceUSD] = useState(undefined); + + useEffect(() => { + setPriceUSD(solPrice * amount); + }, [amount, solPrice]); + + const PriceNaN = isNaN(amount); + + return ( +

    + {PriceNaN === false && ( + + )} + {displayUSD && ( +
    + {PriceNaN === false ? ( + formatUSD.format(priceUSD || 0) + ) : ( +
    {ended ? 'N/A' : 'Place Bid'}
    + )} +
    + )} +
    + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/AppBar/index.less b/CandyMachine-Storefront/store/js/packages/web/src/components/AppBar/index.less new file mode 100644 index 0000000..579d600 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/AppBar/index.less @@ -0,0 +1,69 @@ +.App-Bar { + padding: 0px; + justify-content: space-between !important; +} + +.app-bar-box { + background: #121212; + box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.3); + border-radius: 8px; + display: flex; + flex-direction: row; + align-items: center; + // padding: 8px 10px; + height: 56px; +} + +.app-left { + padding: 8px 10px; +} + +.title { + font-style: normal; + font-weight: 600; + font-size: 24px; + line-height: 26px; + display: flex; + align-items: center; + text-align: center; + + color: #ffffff; + padding: 10px 14px 10px 6px; + + margin-bottom: 0px; +} + +.divider { + border-left: 1px solid #282828; + width: 2px; + height: 40px; + margin-right: 14px; +} + +.app-btn { + font-style: normal; + font-weight: normal; + font-size: 16px; + line-height: 19px; + border-width: 0px; +} + +.app-bar-inner { + display: flex; + min-width: 50%; + justify-content: center; + position: relative; + height: auto; + .app-bar-item { + cursor: pointer; + padding: 0 30px; + color: @tungsten-60; + font-size: 18px; + a { + color: inherit; + } + &.active { + color: white; + } + } +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/AppBar/index.tsx b/CandyMachine-Storefront/store/js/packages/web/src/components/AppBar/index.tsx new file mode 100644 index 0000000..7c00965 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/AppBar/index.tsx @@ -0,0 +1,135 @@ +import React, { useMemo } from 'react'; +import { Link } from 'react-router-dom'; +import { Button, Dropdown, Menu } from 'antd'; +import { ConnectButton, CurrentUserBadge } from '@oyster/common'; +import { useWallet } from '@solana/wallet-adapter-react'; +import { Notifications } from '../Notifications'; +import useWindowDimensions from '../../utils/layout'; +import { MenuOutlined } from '@ant-design/icons'; +import { useMeta } from '../../contexts'; + +const UserActions = () => { + const { publicKey } = useWallet(); + const { whitelistedCreatorsByCreator, store } = useMeta(); + const pubkey = publicKey?.toBase58() || ''; + + const canCreate = useMemo(() => { + return ( + store?.info?.public || + whitelistedCreatorsByCreator[pubkey]?.info?.activated + ); + }, [pubkey, whitelistedCreatorsByCreator, store]); + + return ( + <> + {store && ( + <> + {/* + + */} + {canCreate ? ( + + + + ) : null} + + + + + )} + + ); +}; + +const DefaultActions = ({ vertical = false }: { vertical?: boolean }) => { + const { connected } = useWallet(); + return ( +
    + + + + + + + + + +
    + ); +}; + +const MetaplexMenu = () => { + const { width } = useWindowDimensions(); + const { connected } = useWallet(); + + if (width < 768) + return ( + <> + + + + + + + + + + + + + + + + + + } + > + + + + ); + + return ; +}; + +export const AppBar = () => { + const { connected } = useWallet(); + + return ( + <> +
    + {window.location.hash !== '#/analytics' && } +
    + +
    + {connected ? ( +
    + + +
    + ) : ( + + )} + + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/AppBar/searchBox.less b/CandyMachine-Storefront/store/js/packages/web/src/components/AppBar/searchBox.less new file mode 100644 index 0000000..282110a --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/AppBar/searchBox.less @@ -0,0 +1,7 @@ +.search-btn { + background: #FFFFFF; + border-width: 0px; + box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.1); + width: 44px; + height: 44px; +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/AppBar/searchBox.tsx b/CandyMachine-Storefront/store/js/packages/web/src/components/AppBar/searchBox.tsx new file mode 100644 index 0000000..84a477d --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/AppBar/searchBox.tsx @@ -0,0 +1,13 @@ +import React from 'react'; +import { SearchOutlined } from '@ant-design/icons'; +import { Button } from 'antd'; + +export const SearchBox = ({}) => { + return ( + + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/ArtCard/index.less b/CandyMachine-Storefront/store/js/packages/web/src/components/ArtCard/index.less new file mode 100644 index 0000000..a310271 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/ArtCard/index.less @@ -0,0 +1,95 @@ +.open-master-record { + padding: 10px; + margin: 5px; + background-color: silver; + border-radius: 8px; + margin-top: 30px; +} +.limited-master-record { + padding: 10px; + margin: 5px; + background-color: gold; + border-radius: 8px; + margin-top: 30px; +} + +.normal-record { + margin-top: 30px; +} + +.edition-badge { + background: #3E3E3E; + border-radius: 8px; + margin: 24px 0px 24px 20px; + color: #FFFFFF; + padding: 4px 8px; + text-align: center; + display: inline-block; +} + +.art-card { + min-width: 200px; + filter: drop-shadow(0px 2px 6px rgba(0, 0, 0, 0.1)); + border-radius: 8px; + overflow: hidden; + margin-bottom: 20px; + + .ant-card-body { + display: flex; + flex-direction: row; + align-items: flex-start; + padding: 0; + text-align: left; + + /* gradients/metal */ + background: #282828; + box-shadow: inset 0px 4px 20px rgba(0, 0, 0, 0.3); + border-radius: 0px 0px 8px 8px; + } + + .ant-card-meta-title { + font-size: 20px; + font-weight: 600; + padding: 24px 24px 0 24px; + min-height: 55px; + } + + .ant-avatar.ant-avatar-circle { + margin-left: 24px; + } + + + .ant-card-meta-description { + // padding-bottom: 10px; + } + + .ant-card-meta { + width: 100%; + } + + .ant-image { + display: block; + } +} + +.small { + max-width: 300px; + margin-left: auto; + margin-right: auto; +} + +.cd-container { + background: linear-gradient(270deg, #616774 7.29%, #403f4c 100%); + box-shadow: inset 0px 4px 20px rgba(0, 0, 0, 0.3); + border-radius: 0px 0px 8px 8px; + margin-top: 20px; + padding: 24px; +} + +.cd-title { + color: rgba(255, 255, 255, 0.7); +} + +.cd-time { + color: white; +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/ArtCard/index.tsx b/CandyMachine-Storefront/store/js/packages/web/src/components/ArtCard/index.tsx new file mode 100644 index 0000000..e40d144 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/ArtCard/index.tsx @@ -0,0 +1,122 @@ +import React from 'react'; +import { Card, CardProps, Button, Badge } from 'antd'; +import { MetadataCategory, StringPublicKey } from '@oyster/common'; +import { ArtContent } from './../ArtContent'; +import { useArt } from '../../hooks'; +import { PublicKey } from '@solana/web3.js'; +import { Artist, ArtType } from '../../types'; +import { MetaAvatar } from '../MetaAvatar'; + +const { Meta } = Card; + +export interface ArtCardProps extends CardProps { + pubkey?: StringPublicKey; + + image?: string; + animationURL?: string; + + category?: MetadataCategory; + + name?: string; + symbol?: string; + description?: string; + creators?: Artist[]; + preview?: boolean; + small?: boolean; + close?: () => void; + + height?: number; + width?: number; +} + +export const ArtCard = (props: ArtCardProps) => { + let { + className, + small, + category, + image, + animationURL, + name, + preview, + creators, + description, + close, + pubkey, + height, + width, + ...rest + } = props; + const art = useArt(pubkey); + creators = art?.creators || creators || []; + name = art?.title || name || ' '; + + let badge = ''; + if (art.type === ArtType.NFT) { + badge = 'Unique'; + } else if (art.type === ArtType.Master) { + badge = 'NFT 0'; + } else if (art.type === ArtType.Print) { + badge = `${art.edition} of ${art.supply}`; + } + + const card = ( + + {close && ( + + )} + + + } + {...rest} + > + + + {/* {art.type === ArtType.Master && ( + <> +
    + {!endAuctionAt && ( + + {(art.maxSupply || 0) - (art.supply || 0)}/ + {art.maxSupply || 0} prints remaining + + )} + + )} */} +
    {badge}
    + + } + /> +
    + ); + + return art.creators?.find(c => !c.verified) ? ( + {card} + ) : ( + card + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/ArtContent/index.tsx b/CandyMachine-Storefront/store/js/packages/web/src/components/ArtContent/index.tsx new file mode 100644 index 0000000..4b8c87b --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/ArtContent/index.tsx @@ -0,0 +1,306 @@ +import React, { Ref, useCallback, useEffect, useState } from 'react'; +import { Image } from 'antd'; +import { MetadataCategory, MetadataFile, pubkeyToString } from '@oyster/common'; +import { MeshViewer } from '../MeshViewer'; +import { ThreeDots } from '../MyLoader'; +import { useCachedImage, useExtendedArt } from '../../hooks'; +import { Stream, StreamPlayerApi } from '@cloudflare/stream-react'; +import { PublicKey } from '@solana/web3.js'; +import { getLast } from '../../utils/utils'; + +const MeshArtContent = ({ + uri, + animationUrl, + className, + style, + files, +}: { + uri?: string; + animationUrl?: string; + className?: string; + style?: React.CSSProperties; + files?: (MetadataFile | string)[]; +}) => { + const renderURL = + files && files.length > 0 && typeof files[0] === 'string' + ? files[0] + : animationUrl; + const { isLoading } = useCachedImage(renderURL || '', true); + + if (isLoading) { + return ( + + ); + } + + return ; +}; + +const CachedImageContent = ({ + uri, + className, + preview, + style, +}: { + uri?: string; + className?: string; + preview?: boolean; + style?: React.CSSProperties; +}) => { + const [loaded, setLoaded] = useState(false); + const { cachedBlob } = useCachedImage(uri || ''); + + return ( + { + setLoaded(true); + }} + placeholder={} + {...(loaded ? {} : { height: 200 })} + /> + ); +}; + +const VideoArtContent = ({ + className, + style, + files, + uri, + animationURL, + active, +}: { + className?: string; + style?: React.CSSProperties; + files?: (MetadataFile | string)[]; + uri?: string; + animationURL?: string; + active?: boolean; +}) => { + const [playerApi, setPlayerApi] = useState(); + + const playerRef = useCallback( + ref => { + setPlayerApi(ref); + }, + [setPlayerApi], + ); + + useEffect(() => { + if (playerApi) { + playerApi.currentTime = 0; + } + }, [active, playerApi]); + + const likelyVideo = (files || []).filter((f, index, arr) => { + if (typeof f !== 'string') { + return false; + } + + // TODO: filter by fileType + return arr.length >= 2 ? index === 1 : index === 0; + })?.[0] as string; + + const content = + likelyVideo && + likelyVideo.startsWith('https://watch.videodelivery.net/') ? ( +
    + playerRef(e)} + src={likelyVideo.replace('https://watch.videodelivery.net/', '')} + loop={true} + height={600} + width={600} + controls={false} + videoDimensions={{ + videoHeight: 700, + videoWidth: 400, + }} + autoplay={true} + muted={true} + /> +
    + ) : ( + + ); + + return content; +}; + +const HTMLContent = ({ + uri, + animationUrl, + className, + preview, + style, + files, + artView, +}: { + uri?: string; + animationUrl?: string; + className?: string; + preview?: boolean; + style?: React.CSSProperties; + files?: (MetadataFile | string)[]; + artView?: boolean; +}) => { + if (!artView){ + return + } + const htmlURL = + files && files.length > 0 && typeof files[0] === 'string' + ? files[0] + : animationUrl; + return ( + ); +}; + + +export const ArtContent = ({ + category, + className, + preview, + style, + active, + allowMeshRender, + pubkey, + uri, + animationURL, + files, + artView, +}: { + category?: MetadataCategory; + className?: string; + preview?: boolean; + style?: React.CSSProperties; + width?: number; + height?: number; + ref?: Ref; + active?: boolean; + allowMeshRender?: boolean; + pubkey?: PublicKey | string; + uri?: string; + animationURL?: string; + files?: (MetadataFile | string)[]; + artView?: boolean; +}) => { + const id = pubkeyToString(pubkey); + + const { ref, data } = useExtendedArt(id); + + if (pubkey && data) { + uri = data.image; + animationURL = data.animation_url; + } + + if (pubkey && data?.properties) { + files = data.properties.files; + category = data.properties.category; + } + + animationURL = animationURL || ''; + + const animationUrlExt = new URLSearchParams( + getLast(animationURL.split('?')), + ).get('ext'); + + if ( + allowMeshRender && + (category === 'vr' || + animationUrlExt === 'glb' || + animationUrlExt === 'gltf') + ) { + return ( + + ); + } + + const content = + category === 'video' ? ( + + ) : (category === 'html' || animationUrlExt === 'html') ? ( + + ) : ( + + ); + + return ( +
    + {content} +
    + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/ArtMinting/index.tsx b/CandyMachine-Storefront/store/js/packages/web/src/components/ArtMinting/index.tsx new file mode 100644 index 0000000..d19b3f6 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/ArtMinting/index.tsx @@ -0,0 +1,248 @@ +import React, { useState, useMemo, useCallback, useEffect } from 'react'; +import { LAMPORTS_PER_SOL, PublicKey } from '@solana/web3.js'; +import { MintLayout, AccountLayout } from '@solana/spl-token'; +import { Button, Form, Input, Modal, InputNumber } from 'antd'; +import debounce from 'lodash/debounce'; +import { + decodeMasterEdition, + MAX_EDITION_LEN, + MAX_METADATA_LEN, + MetadataKey, + MetaplexOverlay, + useConnection, + useUserAccounts, +} from '@oyster/common'; +import { useArt } from '../../hooks'; +import { mintEditionsToWallet } from '../../actions/mintEditionsIntoWallet'; +import { ArtType } from '../../types'; +import { Confetti } from '../Confetti'; +import { Link } from 'react-router-dom'; +import { useWallet } from '@solana/wallet-adapter-react'; + +interface ArtMintingProps { + id: string; + onMint: Function; +} + +export const ArtMinting = ({ id, onMint }: ArtMintingProps) => { + const wallet = useWallet(); + const connection = useConnection(); + const { accountByMint } = useUserAccounts(); + const [showMintModal, setShowMintModal] = useState(false); + const [showCongrats, setShowCongrats] = useState(false); + const [mintingDestination, setMintingDestination] = useState(''); + const [editions, setEditions] = useState(1); + const [totalCost, setTotalCost] = useState(0); + const [isLoading, setIsLoading] = useState(false); + const art = useArt(id); + + const walletPubKey = wallet?.publicKey?.toString() || ''; + const maxEditionsToMint = art.maxSupply! - art.supply!; + const isArtMasterEdition = art.type === ArtType.Master; + const artMintTokenAccount = accountByMint.get(art.mint!); + const isArtOwnedByUser = + ((accountByMint.has(art.mint!) && + artMintTokenAccount?.info.amount.toNumber()) || + 0) > 0; + const isMasterEditionV1 = artMintTokenAccount + ? decodeMasterEdition(artMintTokenAccount.account.data).key === + MetadataKey.MasterEditionV1 + : false; + const renderMintEdition = + isArtMasterEdition && + isArtOwnedByUser && + !isMasterEditionV1 && + maxEditionsToMint !== 0; + + const mintingDestinationErr = useMemo(() => { + if (!mintingDestination) return 'Required'; + + try { + new PublicKey(mintingDestination); + return ''; + } catch (e) { + return 'Invalid address format'; + } + }, [mintingDestination]); + + const isMintingDisabled = + isLoading || editions < 1 || Boolean(mintingDestinationErr); + + const debouncedEditionsChangeHandler = useCallback( + debounce(val => { + setEditions(val < 1 ? 1 : val); + }, 300), + [], + ); + + useEffect(() => { + if (editions < 1) return; + + (async () => { + const mintRentExempt = await connection.getMinimumBalanceForRentExemption( + MintLayout.span, + ); + const accountRentExempt = + await connection.getMinimumBalanceForRentExemption(AccountLayout.span); + const metadataRentExempt = + await connection.getMinimumBalanceForRentExemption(MAX_METADATA_LEN); + const editionRentExempt = + await connection.getMinimumBalanceForRentExemption(MAX_EDITION_LEN); + + const cost = + ((mintRentExempt + + accountRentExempt + + metadataRentExempt + + editionRentExempt) * + editions) / + LAMPORTS_PER_SOL; + + setTotalCost(cost); + })(); + }, [connection, editions]); + + useEffect(() => { + if (!walletPubKey) return; + + setMintingDestination(walletPubKey); + }, [walletPubKey]); + + useEffect(() => { + return debouncedEditionsChangeHandler.cancel(); + }, []); + + const onSuccessfulMint = () => { + setShowMintModal(false); + setMintingDestination(walletPubKey); + setEditions(1); + setShowCongrats(true); + }; + + const mint = async () => { + try { + setIsLoading(true); + await mintEditionsToWallet( + art, + wallet!, + connection, + artMintTokenAccount!, + editions, + mintingDestination, + ); + onSuccessfulMint(); + } catch (e) { + console.error(e); + } finally { + setIsLoading(false); + } + }; + + return ( + <> + {renderMintEdition && ( +
    + + + setShowMintModal(false)} + > + Mint to} + labelAlign="left" + colon={false} + validateStatus={mintingDestinationErr ? 'error' : 'success'} + help={mintingDestinationErr} + > + { + setMintingDestination(e.target.value); + }} + /> + + + Number of editions to mint} + labelAlign="left" + colon={false} + > + + + +
    Total cost: {`◎${totalCost}`}
    +
    + + + +

    + Congratulations +

    +

    + New editions have been minted please view your NFTs in{' '} + My Items. +

    + +
    +
    + )} + + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/ArtistCard/index.less b/CandyMachine-Storefront/store/js/packages/web/src/components/ArtistCard/index.less new file mode 100644 index 0000000..aef3ead --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/ArtistCard/index.less @@ -0,0 +1,39 @@ + +.artist-card { + min-width: 200px; + filter: drop-shadow(0px 2px 6px rgba(0, 0, 0, 0.1)); + border-radius: 8px; + overflow: hidden; + margin-bottom: 20px; + + .ant-card-body { + display: flex; + flex-direction: row; + align-items: flex-start; + padding: 0; + text-align: left; + + /* gradients/metal */ + background: #282828; + box-shadow: inset 0px 4px 20px rgba(0, 0, 0, 0.3); + border-radius: 0px 0px 8px 8px; + } + + .ant-avatar { + width: 64px; + height: 64px; + margin-top: -32px; + margin-left: 16px; + } + + .artist-card-name { + font-size: 20px; + font-weight: 600; + padding: 24px; + } +} + +.artist-card img { + border-radius: 50%; + cursor: pointer; +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/ArtistCard/index.tsx b/CandyMachine-Storefront/store/js/packages/web/src/components/ArtistCard/index.tsx new file mode 100644 index 0000000..25d85c9 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/ArtistCard/index.tsx @@ -0,0 +1,25 @@ +import React, { useState } from 'react'; +import { Card } from 'antd'; + +import { Artist } from '../../types'; + +import { shortenAddress } from '@oyster/common'; +import { MetaAvatar } from '../MetaAvatar'; + +export const ArtistCard = ({ artist }: { artist: Artist }) => { + return ( + } + > +
    + +
    + {artist.name || shortenAddress(artist.address || '')} +
    +
    {artist.about}
    +
    +
    + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionCard/hooks/useActionButtonContent.ts b/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionCard/hooks/useActionButtonContent.ts new file mode 100644 index 0000000..77e15d5 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionCard/hooks/useActionButtonContent.ts @@ -0,0 +1,29 @@ +import { AuctionView } from '../../../hooks'; +import { useInstantSaleState } from './useInstantSaleState'; + +export const useActionButtonContent = (auctionView: AuctionView): string => { + const { + isInstantSale, + canClaimItem, + canClaimPurchasedItem, + canEndInstantSale, + } = useInstantSaleState(auctionView); + + if (!isInstantSale) { + return 'Place Bid'; + } + + if (canClaimPurchasedItem) { + return 'Claim Purchase'; + } + + if (canClaimItem) { + return 'Claim item'; + } + + if (canEndInstantSale) { + return 'End sale & claim item'; + } + + return 'Buy now'; +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionCard/hooks/useInstantSaleState.ts b/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionCard/hooks/useInstantSaleState.ts new file mode 100644 index 0000000..79244f6 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionCard/hooks/useInstantSaleState.ts @@ -0,0 +1,30 @@ +import { useWallet } from '@solana/wallet-adapter-react'; +import { AuctionView } from '../../../hooks'; + +interface ActionButtonContentProps { + isInstantSale: boolean; + canClaimItem: boolean; + canClaimPurchasedItem: boolean; + canEndInstantSale: boolean; +} + +export const useInstantSaleState = ( + auctionView: AuctionView, +): ActionButtonContentProps => { + const wallet = useWallet(); + + const { isInstantSale, auctionManager, auction, myBidderPot } = auctionView; + + const isOwner = auctionManager.authority === wallet?.publicKey?.toBase58(); + const isAuctionEnded = auction.info.endedAt; + const canClaimPurchasedItem = !!myBidderPot; + const canClaimItem = !!(isOwner && isAuctionEnded); + const canEndInstantSale = isOwner && !isAuctionEnded; + + return { + isInstantSale, + canClaimItem, + canClaimPurchasedItem, + canEndInstantSale, + }; +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionCard/index.less b/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionCard/index.less new file mode 100644 index 0000000..06fcad7 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionCard/index.less @@ -0,0 +1,60 @@ + +.auction-container { + padding: 10px 20px; + background: #282828; + border-radius: 24px; + margin: 30px 0; + max-width: 100%; +} + +.ant-modal-body { + background: #212121 !important; +} + +.ant-card-body { + padding: 12px; +} + +.cd-number { + font-style: normal; + font-weight: 600; + font-size: 36px; + color: #FFFFFF; + line-height: 44px; + // letter-spacing: 3px; +} + +.cd-label { + font-size: 1.2rem; + color: rgba(255, 255, 255, 0.5); + line-height: 44px; +} + +.modal-title { + font-style: normal; + font-weight: 600; + font-size: 2rem; + + letter-spacing: -0.02em; + color: #FFFFFF; +} + +.overlay-btn { + background: #5626BA; + border-radius: 8px; + width: 200px; + font-size: 2rem; + height: auto; + + &:hover { + background: #a99ac7; + color: #5300ff; + } +} + +@media (max-width: 768px) { + .auction-container { + max-width: 100%; + margin: 10px 0; + } +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionCard/index.tsx b/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionCard/index.tsx new file mode 100644 index 0000000..4c358c0 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionCard/index.tsx @@ -0,0 +1,910 @@ +import React, { useCallback, useMemo, useState } from 'react'; +import { Col, Button, InputNumber, Spin } from 'antd'; +import { MemoryRouter, Route, Redirect, Link } from 'react-router-dom'; + +import { + useConnection, + useUserAccounts, + MetaplexModal, + MetaplexOverlay, + formatAmount, + formatTokenAmount, + useMint, + PriceFloorType, + AuctionDataExtended, + ParsedAccount, + getAuctionExtended, + programIds, + AuctionState, + BidderMetadata, + MAX_METADATA_LEN, + MAX_EDITION_LEN, + useWalletModal, + VaultState, + BidStateType, +} from '@oyster/common'; +import { useWallet } from '@solana/wallet-adapter-react'; +import { AuctionView, useBidsForAuction, useUserBalance } from '../../hooks'; +import { sendPlaceBid } from '../../actions/sendPlaceBid'; +// import { bidAndClaimInstantSale } from '../../actions/bidAndClaimInstantSale'; +import { AuctionNumbers } from './../AuctionNumbers'; +import { + sendRedeemBid, + eligibleForParticipationPrizeGivenWinningIndex, +} from '../../actions/sendRedeemBid'; +import { sendCancelBid } from '../../actions/cancelBid'; +import { startAuctionManually } from '../../actions/startAuctionManually'; +import BN from 'bn.js'; +import { Confetti } from '../Confetti'; +import { QUOTE_MINT } from '../../constants'; +import { Connection, LAMPORTS_PER_SOL } from '@solana/web3.js'; +import { useMeta } from '../../contexts'; +import moment from 'moment'; +import { AccountLayout, MintLayout } from '@solana/spl-token'; +import { findEligibleParticipationBidsForRedemption } from '../../actions/claimUnusedPrizes'; +import { + BidRedemptionTicket, + MAX_PRIZE_TRACKING_TICKET_SIZE, + WinningConfigType, +} from '@oyster/common/dist/lib/models/metaplex/index'; +import { useActionButtonContent } from './hooks/useActionButtonContent'; +import { endSale } from './utils/endSale'; +import { useInstantSaleState } from './hooks/useInstantSaleState'; + +async function calculateTotalCostOfRedeemingOtherPeoplesBids( + connection: Connection, + auctionView: AuctionView, + bids: ParsedAccount[], + bidRedemptions: Record>, +): Promise { + const accountRentExempt = await connection.getMinimumBalanceForRentExemption( + AccountLayout.span, + ); + const mintRentExempt = await connection.getMinimumBalanceForRentExemption( + MintLayout.span, + ); + const metadataRentExempt = await connection.getMinimumBalanceForRentExemption( + MAX_METADATA_LEN, + ); + const editionRentExempt = await connection.getMinimumBalanceForRentExemption( + MAX_EDITION_LEN, + ); + const prizeTrackingTicketExempt = + await connection.getMinimumBalanceForRentExemption( + MAX_PRIZE_TRACKING_TICKET_SIZE, + ); + + const eligibleParticipations = + await findEligibleParticipationBidsForRedemption( + auctionView, + bids, + bidRedemptions, + ); + const max = auctionView.auction.info.bidState.max.toNumber(); + let totalWinnerItems = 0; + for (let i = 0; i < max; i++) { + const winner = auctionView.auction.info.bidState.getWinnerAt(i); + if (!winner) { + break; + } else { + const bid = bids.find(b => b.info.bidderPubkey === winner); + if (bid) { + for ( + let j = 0; + j < auctionView.auctionManager.safetyDepositBoxesExpected.toNumber(); + j++ + ) { + totalWinnerItems += auctionView.auctionManager + .getAmountForWinner(i, j) + .toNumber(); + } + } + } + } + return ( + (mintRentExempt + + accountRentExempt + + metadataRentExempt + + editionRentExempt + + prizeTrackingTicketExempt) * + (eligibleParticipations.length + totalWinnerItems) + ); +} +function useGapTickCheck( + value: number | undefined, + gapTick: number | null, + gapTime: number, + auctionView: AuctionView, +): boolean { + return !!useMemo(() => { + if (gapTick && value && gapTime && !auctionView.auction.info.ended()) { + // so we have a gap tick percentage, and a gap tick time, and a value, and we're not ended - are we within gap time? + const now = moment().unix(); + const endedAt = auctionView.auction.info.endedAt; + if (endedAt) { + const ended = endedAt.toNumber(); + if (now > ended) { + const toLamportVal = value * LAMPORTS_PER_SOL; + // Ok, we are in gap time, since now is greater than ended and we're not actually an ended auction yt. + // Check that the bid is at least gapTick % bigger than the next biggest one in the stack. + for ( + let i = auctionView.auction.info.bidState.bids.length - 1; + i > -1; + i-- + ) { + const bid = auctionView.auction.info.bidState.bids[i]; + const expected = bid.amount.toNumber(); + if (expected < toLamportVal) { + const higherExpectedAmount = expected * ((100 + gapTick) / 100); + + return higherExpectedAmount > toLamportVal; + } else if (expected === toLamportVal) { + // If gap tick is set, no way you can bid in this case - you must bid higher. + return true; + } + } + return false; + } else { + return false; + } + } + return false; + } + }, [value, gapTick, gapTime, auctionView]); +} + +function useAuctionExtended( + auctionView: AuctionView, +): ParsedAccount | undefined { + const [auctionExtended, setAuctionExtended] = + useState>(); + const { auctionDataExtended } = useMeta(); + + useMemo(() => { + const fn = async () => { + if (!auctionExtended) { + const PROGRAM_IDS = programIds(); + const extendedKey = await getAuctionExtended({ + auctionProgramId: PROGRAM_IDS.auction, + resource: auctionView.vault.pubkey, + }); + const extendedValue = auctionDataExtended[extendedKey]; + if (extendedValue) setAuctionExtended(extendedValue); + } + }; + fn(); + }, [auctionDataExtended, auctionExtended, setAuctionExtended]); + + return auctionExtended; +} +export const AuctionCard = ({ + auctionView, + style, + hideDefaultAction, + action, +}: { + auctionView: AuctionView; + style?: React.CSSProperties; + hideDefaultAction?: boolean; + action?: JSX.Element; +}) => { + const connection = useConnection(); + const { update } = useMeta(); + + const wallet = useWallet(); + const { setVisible } = useWalletModal(); + const connect = useCallback( + () => (wallet.wallet ? wallet.connect().catch() : setVisible(true)), + [wallet.wallet, wallet.connect, setVisible], + ); + + const mintInfo = useMint(auctionView.auction.info.tokenMint); + const { prizeTrackingTickets, bidRedemptions } = useMeta(); + const bids = useBidsForAuction(auctionView.auction.pubkey); + + const [value, setValue] = useState(); + const [loading, setLoading] = useState(false); + const [showBidModal, setShowBidModal] = useState(false); + const [showRedeemedBidModal, setShowRedeemedBidModal] = + useState(false); + const [showEndingBidModal, setShowEndingBidModal] = + useState(false); + const [showRedemptionIssue, setShowRedemptionIssue] = + useState(false); + const [showBidPlaced, setShowBidPlaced] = useState(false); + const [lastBid, setLastBid] = useState<{ amount: BN } | undefined>(undefined); + const [modalHistory, setModalHistory] = useState(); + const [showWarningModal, setShowWarningModal] = useState(false); + const [printingCost, setPrintingCost] = useState(); + + const { accountByMint } = useUserAccounts(); + + const mintKey = auctionView.auction.info.tokenMint; + const balance = useUserBalance(mintKey); + + const myPayingAccount = balance.accounts[0]; + let winnerIndex: number | null = null; + if (auctionView.myBidderPot?.pubkey) + winnerIndex = auctionView.auction.info.bidState.getWinnerIndex( + auctionView.myBidderPot?.info.bidderAct, + ); + const priceFloor = + auctionView.auction.info.priceFloor.type === PriceFloorType.Minimum + ? auctionView.auction.info.priceFloor.minPrice?.toNumber() || 0 + : 0; + const eligibleForOpenEdition = eligibleForParticipationPrizeGivenWinningIndex( + winnerIndex, + auctionView, + auctionView.myBidderMetadata, + auctionView.myBidRedemption, + ); + const auctionExtended = useAuctionExtended(auctionView); + + const eligibleForAnything = winnerIndex !== null || eligibleForOpenEdition; + const gapTime = (auctionView.auction.info.auctionGap?.toNumber() || 0) / 60; + const gapTick = auctionExtended + ? auctionExtended.info.gapTickSizePercentage + : 0; + const tickSize = auctionExtended ? auctionExtended.info.tickSize : 0; + const tickSizeInvalid = !!( + tickSize && + value && + (value * LAMPORTS_PER_SOL) % tickSize.toNumber() != 0 + ); + + const gapBidInvalid = useGapTickCheck(value, gapTick, gapTime, auctionView); + + const isAuctionManagerAuthorityNotWalletOwner = + auctionView.auctionManager.authority !== wallet?.publicKey?.toBase58(); + + const isAuctionNotStarted = + auctionView.auction.info.state === AuctionState.Created; + + const isOpenEditionSale = + auctionView.auction.info.bidState.type === BidStateType.OpenEdition; + const doesInstantSaleHasNoItems = + Number(auctionView.myBidderPot?.info.emptied) !== 0 && + auctionView.auction.info.bidState.max.toNumber() === bids.length; + + const shouldHideInstantSale = + !isOpenEditionSale && + auctionView.isInstantSale && + isAuctionManagerAuthorityNotWalletOwner && + doesInstantSaleHasNoItems; + + const shouldHide = + shouldHideInstantSale || + auctionView.vault.info.state === VaultState.Deactivated; + + const { + isInstantSale, + canEndInstantSale + } = useInstantSaleState(auctionView) + const actionButtonContent = useActionButtonContent(auctionView) + + if (shouldHide) { + return <>; + } + + return ( +
    + + {!auctionView.isInstantSale && ( + <> + +
    + + )} + {showRedemptionIssue && ( + + There was an issue redeeming or refunding your bid. Please try + again. + + )} + {!hideDefaultAction && + wallet.connected && + auctionView.auction.info.ended() && ( + + )} + + {!hideDefaultAction && + wallet.connected && + !auctionView.auction.info.ended() && + (isAuctionNotStarted && !isAuctionManagerAuthorityNotWalletOwner ? ( + + ) : ( + + ))} + + {!hideDefaultAction && !wallet.connected && ( + + )} + {action} + + + + +

    + Nice bid! +

    +

    + Your bid of ◎ {formatTokenAmount(lastBid?.amount, mintInfo)} was + successful +

    + +
    + + + +

    + Congratulations +

    +

    + Your sale has been ended please view your NFTs in My Items + . +

    + +
    + + + +

    + Congratulations +

    +

    + Your {auctionView.isInstantSale ? 'purchase' : 'bid'} has been + redeemed please view your NFTs in My Items + . +

    + +
    + + setShowBidModal(false)} + bodyStyle={{ + alignItems: 'start', + }} + afterClose={() => modalHistory.replace('/placebid')} + > + + + + { + setModalHistory(history); + const placeBid = async () => { + setLoading(true); + if (myPayingAccount && value) { + const bid = await sendPlaceBid( + connection, + wallet, + myPayingAccount.pubkey, + auctionView, + accountByMint, + value, + ); + setLastBid(bid); + setShowBidModal(false); + setShowBidPlaced(true); + setLoading(false); + } + }; + + const endInstantSale = async () => { + setLoading(true); + + try { + await endSale({ + auctionView, + connection, + accountByMint, + bids, + bidRedemptions, + prizeTrackingTickets, + wallet + }) + } catch (e) { + console.error('endAuction', e); + setShowBidModal(false); + setLoading(false); + return; + } + + setShowBidModal(false); + setShowEndingBidModal(true); + setLoading(false); + } + + const instantSale = async () => { + setLoading(true); + + const instantSalePrice = + auctionView.auctionDataExtended?.info.instantSalePrice; + const winningConfigType = + auctionView.participationItem?.winningConfigType || + auctionView.items[0][0].winningConfigType; + const isAuctionItemMaster = [ + WinningConfigType.FullRightsTransfer, + WinningConfigType.TokenOnlyTransfer, + ].includes(winningConfigType); + const allowBidToPublic = + myPayingAccount && + !auctionView.myBidderPot && + isAuctionManagerAuthorityNotWalletOwner; + const allowBidToAuctionOwner = + myPayingAccount && + !isAuctionManagerAuthorityNotWalletOwner && + isAuctionItemMaster; + + // Placing a "bid" of the full amount results in a purchase to redeem. + if ( + instantSalePrice && + (allowBidToPublic || allowBidToAuctionOwner) + ) { + try { + const bid = await sendPlaceBid( + connection, + wallet, + myPayingAccount.pubkey, + auctionView, + accountByMint, + instantSalePrice, + ); + setLastBid(bid); + } catch (e) { + console.error('sendPlaceBid', e); + setShowBidModal(false); + setLoading(false); + return; + } + } + + const newAuctionState = await update( + auctionView.auction.pubkey, + wallet.publicKey, + ); + auctionView.auction = newAuctionState[0]; + auctionView.myBidderPot = newAuctionState[1]; + auctionView.myBidderMetadata = newAuctionState[2]; + // Claim the purchase + try { + await sendRedeemBid( + connection, + wallet, + myPayingAccount.pubkey, + auctionView, + accountByMint, + prizeTrackingTickets, + bidRedemptions, + bids, + ).then(async () => { + await update(); + setShowBidModal(false); + setShowRedeemedBidModal(true); + }); + } catch (e) { + console.error(e); + setShowRedemptionIssue(true); + } + + setLoading(false); + }; + + + const actionBtnFn = () => { + if (!isInstantSale) { + return placeBid(); + } + + if (canEndInstantSale) { + return endInstantSale(); + } + + return instantSale(); + } + + return ( + <> +

    + {canEndInstantSale && 'End instant sale'} + {!canEndInstantSale && (auctionView.isInstantSale + ? 'Confirm Purchase' + : 'Place a bid')} +

    + {!!gapTime && ( +
    + Bids placed in the last {gapTime} minutes will extend + bidding for another {gapTime} minutes beyond the point in + time that bid was made.{' '} + {gapTick && ( + + Additionally, once the official auction end time has + passed, only bids {gapTick}% larger than an existing + bid will be accepted. + + )} +
    + )} + {!canEndInstantSale && } +
    + {tickSizeInvalid && tickSize && ( + + Tick size is ◎{tickSize.toNumber() / LAMPORTS_PER_SOL}. + + )} + {gapBidInvalid && ( + + Your bid needs to be at least {gapTick}% larger than an + existing bid during gap periods to be eligible. + + )} + +
    + {!auctionView.isInstantSale && ( + + value + ? `◎ ${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',') + : '' + } + placeholder="Amount in SOL" + /> + )} + {!(auctionView.isInstantSale && bids.length > 0) && ( + <> +
    + ◎ {formatAmount(balance.balance, 2)}{' '} + + available + +
    + + Add funds + + + )} +
    + +
    + + + ); + }} + /> + + +
    +

    Add funds

    +

    + We partner with FTX to make it simple to start purchasing + digital collectibles. +

    +
    + + Balance + + + {formatAmount(balance.balance, 2)}   + + + {' '} + SOL + +
    +

    + If you have not used FTX Pay before, it may take a few moments + to get set up. +

    + + +
    +
    +
    +
    + + setShowWarningModal(false)} + bodyStyle={{ + alignItems: 'start', + }} + > +

    + Warning: There may be some items in this auction that still are + required by the auction for printing bidders' limited or open edition + NFTs. If you wish to withdraw them, you are agreeing to foot the cost + of up to an estimated ◎{(printingCost || 0) / LAMPORTS_PER_SOL}{' '} + plus transaction fees to redeem their bids for them right now. +

    +
    +
    + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionCard/utils/endSale.ts b/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionCard/utils/endSale.ts new file mode 100644 index 0000000..bdbd698 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionCard/utils/endSale.ts @@ -0,0 +1,62 @@ +import { Connection, PublicKey } from '@solana/web3.js'; +import { + BidderMetadata, + BidRedemptionTicket, + ParsedAccount, + PrizeTrackingTicket, + sendTransactions, + TokenAccount, +} from '@oyster/common'; + +import { claimUnusedPrizes } from '../../../actions/claimUnusedPrizes'; +import { endAuction } from '../../../models/metaplex/endAuction'; +import { AuctionView } from '../../../hooks'; +import { WalletContextState } from '@solana/wallet-adapter-react'; + +interface EndSaleParams { + auctionView: AuctionView; + connection: Connection; + accountByMint: Map; + bids: ParsedAccount[]; + bidRedemptions: Record>; + prizeTrackingTickets: Record>; + wallet: WalletContextState; +} + +export async function endSale({ + auctionView, + connection, + accountByMint, + bids, + bidRedemptions, + prizeTrackingTickets, + wallet, +}: EndSaleParams) { + const { vault, auctionManager } = auctionView; + + const endAuctionInstructions = []; + await endAuction( + new PublicKey(vault.pubkey), + new PublicKey(auctionManager.authority), + endAuctionInstructions, + ); + + const claimInstructions = []; + const claimSigners = []; + await claimUnusedPrizes( + connection, + wallet, + auctionView, + accountByMint, + bids, + bidRedemptions, + prizeTrackingTickets, + claimSigners, + claimInstructions, + ); + + const instructions = [endAuctionInstructions, ...claimInstructions]; + const signers = [[], ...claimSigners]; + + return sendTransactions(connection, wallet, instructions, signers); +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionNumbers/index.tsx b/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionNumbers/index.tsx new file mode 100644 index 0000000..11306d7 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionNumbers/index.tsx @@ -0,0 +1,163 @@ +import React, { useEffect, useState } from 'react'; +import { Row, Col } from 'antd'; + +import { + formatTokenAmount, + useMint, + fromLamports, + CountdownState, + PriceFloorType, +} from '@oyster/common'; +import { AuctionView, AuctionViewState, useBidsForAuction } from '../../hooks'; +import { AmountLabel } from '../AmountLabel'; + +export const AuctionNumbers = (props: { auctionView: AuctionView }) => { + const { auctionView } = props; + const bids = useBidsForAuction(auctionView.auction.pubkey); + const mintInfo = useMint(auctionView.auction.info.tokenMint); + + const participationFixedPrice = + auctionView.auctionManager.participationConfig?.fixedPrice || 0; + const participationOnly = + auctionView.auctionManager.numWinners.toNumber() === 0; + const priceFloor = + auctionView.auction.info.priceFloor.type === PriceFloorType.Minimum + ? auctionView.auction.info.priceFloor.minPrice?.toNumber() || 0 + : 0; + const isUpcoming = auctionView.state === AuctionViewState.Upcoming; + const isStarted = auctionView.state === AuctionViewState.Live; + + const [state, setState] = useState(); + + const auction = auctionView.auction.info; + useEffect(() => { + const calc = () => { + const newState = auction.timeToEnd(); + + setState(newState); + }; + + const interval = setInterval(() => { + calc(); + }, 1000); + + calc(); + return () => clearInterval(interval); + }, [auction]); + + const ended = isEnded(state); + + return ( +
    + + {(!ended || auctionView.isInstantSale) && ( + + {(isUpcoming || bids.length === 0) && ( + + )} + {isStarted && bids.length > 0 && ( + + )} + + )} + + {!ended && + + } + +
    + ); +}; + +const isEnded = (state?: CountdownState) => + state?.days === 0 && + state?.hours === 0 && + state?.minutes === 0 && + state?.seconds === 0; + +const Countdown = ({ state }: { state?: CountdownState }) => { + return ( + <> +
    + <> +
    + Time left +
    + {state && + (isEnded(state) ? ( + +
    This auction has ended
    +
    + ) : ( + + {state && state.days > 0 && ( + +
    + {state.days < 10 && ( + 0 + )} + {state.days} + : +
    +
    days
    + + )} + +
    + {state.hours < 10 && ( + 0 + )} + {state.hours} + : +
    +
    hour
    + + +
    + {state.minutes < 10 && ( + 0 + )} + {state.minutes} + {state.days === 0 && ( + : + )} +
    +
    mins
    + + {!state.days && ( + +
    + {state.seconds < 10 && ( + 0 + )} + {state.seconds} +
    +
    secs
    + + )} +
    + ))} + +
    + + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionRenderCard/hooks/useAuctionStatus.ts b/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionRenderCard/hooks/useAuctionStatus.ts new file mode 100644 index 0000000..d959aea --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionRenderCard/hooks/useAuctionStatus.ts @@ -0,0 +1,77 @@ +import { formatTokenAmount, fromLamports, useMint, PriceFloorType } from '@oyster/common'; +import { AuctionView, AuctionViewState, useBidsForAuction, useHighestBidForAuction } from '../../../hooks'; +import { BN } from 'bn.js'; + +interface AuctionStatusLabels { + status: string; + amount: string | number; +} + +export const useAuctionStatus = ( + auctionView: AuctionView, +): AuctionStatusLabels => { + const bids = useBidsForAuction(auctionView.auction.pubkey); + const winningBid = useHighestBidForAuction(auctionView.auction.pubkey); + const mintInfo = useMint(auctionView.auction.info.tokenMint); + + const participationFixedPrice = + auctionView.auctionManager.participationConfig?.fixedPrice || 0; + const participationOnly = auctionView.auctionManager.numWinners.eq(new BN(0)); + const priceFloor = + auctionView.auction.info.priceFloor.type === PriceFloorType.Minimum + ? auctionView.auction.info.priceFloor.minPrice?.toNumber() || 0 + : 0; + + + let status = 'Starting Bid'; + + let amount: string | number = fromLamports( + participationOnly ? participationFixedPrice : priceFloor, + mintInfo, + ); + + const countdown = auctionView.auction.info.timeToEnd(); + + let ended = countdown?.hours === 0 && countdown?.minutes === 0 && countdown?.seconds === 0; + + if (auctionView.isInstantSale) { + const soldOut = bids.length === auctionView.items.length; + + status = auctionView.state === AuctionViewState.Ended ? 'Ended' : 'Price'; + + if (soldOut) { + status = 'Sold Out'; + } + + amount = formatTokenAmount(auctionView.auctionDataExtended?.info.instantSalePrice?.toNumber()); + + return { + status, + amount, + } + } + + if (bids.length > 0) { + amount = formatTokenAmount(winningBid.info.lastBid); + status = 'Current Bid'; + } + + if (ended) { + if (bids.length === 0) { + return { + status: 'Ended', + amount + } + } + + return { + status: 'Winning Bid', + amount + } + } + + return { + status, + amount, + } +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionRenderCard/index.less b/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionRenderCard/index.less new file mode 100644 index 0000000..5603ea7 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionRenderCard/index.less @@ -0,0 +1,140 @@ +.open-master-record { + padding: 10px; + margin: 5px; + background-color: silver; + border-radius: 8px; + margin-top: 30px; +} + +.auction-image { + margin-left: -30px; + width: 300px; + height: 300px; + @media (max-width: 1100px) { + margin-left: 0; + } + @media (max-width: 500px) { + width: 100%; + height: 100%; + } +} + +.limited-master-record { + padding: 10px; + margin: 5px; + background-color: gold; + border-radius: 8px; + margin-top: 30px; +} + +.normal-record { + margin-top: 30px; +} + +.edition-badge { + background: #3e3e3e; + border-radius: 8px; + margin: 24px 0px 24px 20px; + color: #ffffff; + padding: 4px 8px; + text-align: center; + display: inline-block; +} + +.art-card { + min-width: 200px; + filter: drop-shadow(0px 2px 6px rgba(0, 0, 0, 0.1)); + border-radius: 8px; + // border: 0px; + overflow: hidden; + margin-bottom: 20px; + + .ant-card-body { + display: flex; + flex-direction: row; + align-items: flex-start; + padding: 0; + text-align: left; + + /* gradients/metal */ + background: #212121; + // box-shadow: inset 0px 4px 20px rgba(0, 0, 0, 0.3); + border-radius: 0px 0px 8px 8px; + } + + .bids { + padding: 0px 24px 24px 24px; + } + + .ant-statistic { + margin-bottom: 0px !important; + font-size: 10px !important; + } + + .create-statistic .ant-statistic-content { + font-size: 24px !important; + margin-right: 8px; + } + + .create-statistic .ant-statistic-title { + display: none; + } + + .usd { + display: flex; + align-items: flex-end; + padding-bottom: 8px; + min-height: 44px; + } + + .ant-card-meta-title { + font-size: 20px; + font-weight: 600; + padding: 24px 24px 0px 24px; + white-space: normal !important; + min-height: 55px; + } + + .ant-avatar.ant-avatar-circle, + h4 { + margin-left: 24px; + margin-bottom: 8px; + } + + .ant-card-meta-description { + // padding-bottom: 10px; + } + + .ant-card-meta { + width: 100%; + h4 { + opacity: 0.7; + } + } + + .ant-image { + display: block; + } +} + +.small { + max-width: 300px; + margin-left: auto; + margin-right: auto; +} + +.cd-container { + background: linear-gradient(270deg, #616774 7.29%, #403f4c 100%); + box-shadow: inset 0px 4px 20px rgba(0, 0, 0, 0.3); + border-radius: 0px 0px 8px 8px; + margin-top: 20px; + padding: 24px; +} + +.cd-title { + color: rgba(255, 255, 255, 0.7); +} + +.cd-time { + color: white; +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionRenderCard/index.tsx b/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionRenderCard/index.tsx new file mode 100644 index 0000000..1184321 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/AuctionRenderCard/index.tsx @@ -0,0 +1,78 @@ +import React, { useEffect, useState } from 'react'; +import { Card, CardProps } from 'antd'; +import { + CountdownState, +} from '@oyster/common'; +import { ArtContent } from '../ArtContent'; +import { + AuctionView, + useArt, +} from '../../hooks'; +import { AmountLabel } from '../AmountLabel'; +import { useAuctionStatus } from './hooks/useAuctionStatus'; +const { Meta } = Card; + +export interface AuctionCard extends CardProps { + auctionView: AuctionView; +} + +export const AuctionRenderCard = (props: AuctionCard) => { + const { auctionView } = props; + const id = auctionView.thumbnail.metadata.pubkey; + const art = useArt(id); + const name = art?.title || ' '; + const [_, setState] = useState(); + + const { status, amount } = useAuctionStatus(auctionView); + + const auction = auctionView.auction.info; + + useEffect(() => { + const calc = () => { + setState(auction.timeToEnd()); + }; + + const interval = setInterval(() => { + calc(); + }, 1000); + + calc(); + return () => clearInterval(interval); + }, [auction, setState]); + + const card = ( + + + + } + > + +

    {status}

    +
    + +
    + + } + /> +
    + ); + + return card; +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/ClickToCopy/index.tsx b/CandyMachine-Storefront/store/js/packages/web/src/components/ClickToCopy/index.tsx new file mode 100644 index 0000000..380dc17 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/ClickToCopy/index.tsx @@ -0,0 +1,75 @@ +import React, { useEffect, useState } from 'react'; + +const CopyIcon = () => ( + + + + +); + +const Checkmark = () => ( + + + +); + +export const ClickToCopy = ({ + copyText, + className, +}: { + copyText: string; + className: string; +}) => { + const [clicked, setClicked] = useState(false); + + useEffect(() => { + const timer = setTimeout(() => { + setClicked(false); + }, 3000); + return () => clearTimeout(timer); + }, [clicked]); + + const onClick = () => { + navigator.clipboard.writeText(copyText); + setClicked(true); + }; + + return ( +
    + {clicked ? : } +
    + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/Confetti/index.tsx b/CandyMachine-Storefront/store/js/packages/web/src/components/Confetti/index.tsx new file mode 100644 index 0000000..4dd11d4 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/Confetti/index.tsx @@ -0,0 +1,74 @@ +import React, { useContext, useEffect, useMemo, useRef } from 'react'; +import confetti from 'canvas-confetti'; + +export interface ConfettiContextState { + dropConfetti: () => void; +} + +const ConfettiContext = React.createContext(null); + +export const ConfettiProvider = ({ children = null as any }) => { + const canvasRef = useRef(); + const confettiRef = useRef(); + + const dropConfetti = useMemo( + () => () => { + if (confettiRef.current && canvasRef.current) { + canvasRef.current.style.visibility = 'visible'; + confettiRef + .current({ + particleCount: 400, + spread: 160, + origin: { y: 0.3 }, + }) + ?.finally(() => { + if (canvasRef.current) { + canvasRef.current.style.visibility = 'hidden'; + } + }); + } + }, + [], + ); + + useEffect(() => { + if (canvasRef.current && !confettiRef.current) { + canvasRef.current.style.visibility = 'hidden'; + confettiRef.current = confetti.create(canvasRef.current, { + resize: true, + useWorker: true, + }); + } + }, []); + + const canvasStyle: React.CSSProperties = { + width: '100vw', + height: '100vh', + position: 'absolute', + zIndex: 1, + top: 0, + left: 0, + }; + + return ( + + + {children} + + ); +}; + +export const Confetti = () => { + const { dropConfetti } = useConfetti(); + + useEffect(() => { + dropConfetti(); + }, [dropConfetti]); + + return <>; +}; + +export const useConfetti = () => { + const context = useContext(ConfettiContext); + return context as ConfettiContextState; +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/DateTimePicker/index.tsx b/CandyMachine-Storefront/store/js/packages/web/src/components/DateTimePicker/index.tsx new file mode 100644 index 0000000..70ef35c --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/DateTimePicker/index.tsx @@ -0,0 +1,55 @@ +import React from 'react'; + +import { DatePicker, TimePicker } from 'antd'; + +interface IDateTimePicker { + momentObj: moment.Moment; + setMomentObj: Function; + datePickerProps?: Object; + timePickerProps?: Object; +} + +export const DateTimePicker = (props: IDateTimePicker) => { + const { + momentObj, + setMomentObj, + datePickerProps = {}, + timePickerProps = {}, + } = props; + return ( + <> + { + if (!value) return; + if (!momentObj) return setMomentObj(value); + + const currentMoment = momentObj.clone(); + currentMoment.year(value.year()); + currentMoment.month(value.month()); + currentMoment.date(value.date()); + setMomentObj(currentMoment); + }} + {...datePickerProps} + /> + { + if (!value) return; + if (!momentObj) return setMomentObj(value); + + const currentMoment = momentObj.clone(); + currentMoment.hour(value.hour()); + currentMoment.minute(value.minute()); + currentMoment.second(value.second()); + setMomentObj(currentMoment); + }} + {...timePickerProps} + /> + + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/Footer/index.less b/CandyMachine-Storefront/store/js/packages/web/src/components/Footer/index.less new file mode 100644 index 0000000..611183b --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/Footer/index.less @@ -0,0 +1,3 @@ +.footer { + margin: 20px 0 20px 0; +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/Footer/index.tsx b/CandyMachine-Storefront/store/js/packages/web/src/components/Footer/index.tsx new file mode 100644 index 0000000..550ada7 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/Footer/index.tsx @@ -0,0 +1,23 @@ +import React from 'react'; +import { GithubOutlined, TwitterOutlined } from '@ant-design/icons'; +import { Button } from 'antd'; + +export const Footer = () => { + return ( +
    + + +
    + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/Layout/index.less b/CandyMachine-Storefront/store/js/packages/web/src/components/Layout/index.less new file mode 100644 index 0000000..d979bf5 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/Layout/index.less @@ -0,0 +1,17 @@ +.metamask-icon { + background-position: 50%; + background-repeat: no-repeat; + background-image: url(/assets/metamask.svg); +} + +.app-left { + align-items: center; + display: flex; + flex-direction: row; +} +.app-right { + align-items: center; + display: flex; + flex-direction: row; + +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/Layout/index.tsx b/CandyMachine-Storefront/store/js/packages/web/src/components/Layout/index.tsx new file mode 100644 index 0000000..1a1a4c3 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/Layout/index.tsx @@ -0,0 +1,36 @@ +import React from 'react'; +import { Layout } from 'antd'; + +import { LABELS } from '../../constants'; +import { AppBar } from '../AppBar'; +import useWindowDimensions from '../../utils/layout'; + +const { Header, Content } = Layout; + +const paddingForLayout = (width: number) => { + if (width <= 768) return '5px 10px'; + if (width > 768) return '10px 30px'; +}; + +export const AppLayout = React.memo((props: any) => { + const { width } = useWindowDimensions(); + + return ( + <> + +
    + +
    + + {props.children} + +
    + + ); +}); diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/Loader/index.less b/CandyMachine-Storefront/store/js/packages/web/src/components/Loader/index.less new file mode 100644 index 0000000..ed1725e --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/Loader/index.less @@ -0,0 +1,84 @@ +.loader-container { + position: fixed; + top: 0; + left: 0; + height: 100%; + width: 100%; + background: rgb(0 0 0 / 48%); + z-index: 1; + display: none; + + &.active { + display: block; + } + + .loader-block { + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + + display: flex; + flex-flow: column; + align-items: center; + + font-size: 1.7em; + letter-spacing: 0.16em; + } + + .loader-title { + color: #fff; + text-transform: uppercase; + } +} + +.spinner { + margin-top: 0.5em; + + .line { + width: 2px; + height: 24px; + background: #fff; + margin: 0 6px; + display: inline-block; + animation: spinner-line 1000ms infinite ease-in-out; + } + + .line-1 { + animation-delay: 800ms; + } + .line-2 { + animation-delay: 600ms; + } + .line-3 { + animation-delay: 400ms; + } + .line-4 { + animation-delay: 200ms; + } + .line-6 { + animation-delay: 200ms; + } + .line-7 { + animation-delay: 400ms; + } + .line-8 { + animation-delay: 600ms; + } + .line-9 { + animation-delay: 800ms; + } +} + +@keyframes spinner-line { + 0% { + opacity: 1; + } + 50% { + opacity: 0; + } + 100% { + opacity: 1; + } +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/Loader/index.tsx b/CandyMachine-Storefront/store/js/packages/web/src/components/Loader/index.tsx new file mode 100644 index 0000000..6e8ba79 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/Loader/index.tsx @@ -0,0 +1,34 @@ +import { useMeta } from '@oyster/common'; +import React, { FC } from 'react'; + +export const LoaderProvider: FC = ({ children }) => { + const { isLoading } = useMeta(); + + return ( + <> +
    +
    +
    loading
    + +
    +
    + {children} + + ); +}; + +export const Spinner = () => { + return ( +
    + + + + + + + + + +
    + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/MeshViewer/index.tsx b/CandyMachine-Storefront/store/js/packages/web/src/components/MeshViewer/index.tsx new file mode 100644 index 0000000..b34fd54 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/MeshViewer/index.tsx @@ -0,0 +1,30 @@ +import React, { useRef } from 'react'; +import '@google/model-viewer/dist/model-viewer'; + +type MeshViewerProps = { + className?: string; + url?: string; + style?: React.CSSProperties; + onError?: () => void; +}; + +export function MeshViewer(props: MeshViewerProps) { + return ( + // @ts-ignore + + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/MetaAvatar/index.tsx b/CandyMachine-Storefront/store/js/packages/web/src/components/MetaAvatar/index.tsx new file mode 100644 index 0000000..e12e0b8 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/MetaAvatar/index.tsx @@ -0,0 +1,59 @@ +import React, { useState } from 'react'; +import { Avatar } from 'antd'; +import { Artist } from '../../types'; +import { Identicon } from '@oyster/common'; + +const MetaAvatarItem = (props: { + creator: Artist; + size: number; + alt?: string; +}) => { + const { creator, size, alt } = props; + const [noImage, setNoImage] = useState(false); + const image = creator.image || ''; + + return ( + + ) : ( + image + ) + } + onError={() => { + setNoImage(true); + return false; + }} + /> + ); +}; + +export const MetaAvatar = (props: { + creators?: Artist[]; + showMultiple?: boolean; + size?: number; +}) => { + const { creators, showMultiple } = props; + let size = props.size || 32; + + if (!creators || creators.length === 0) { + return ; + } + + let controls = (creators || []).map(creator => ( + + )); + + if (!showMultiple) { + return controls[0]; + } + + return {controls || null}; +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/MyLoader/index.tsx b/CandyMachine-Storefront/store/js/packages/web/src/components/MyLoader/index.tsx new file mode 100644 index 0000000..25cea9f --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/MyLoader/index.tsx @@ -0,0 +1,36 @@ +import React from 'react'; +import ContentLoader from 'react-content-loader'; + +export const CardLoader = () => ( + + + + + + {/* */} + +); + +export const ThreeDots = () => ( + + + + + +); diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/Notifications/index.less b/CandyMachine-Storefront/store/js/packages/web/src/components/Notifications/index.less new file mode 100644 index 0000000..aad8787 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/Notifications/index.less @@ -0,0 +1,7 @@ +.title:hover { + cursor: pointer; +} + +.hover-button:hover { + cursor: pointer; +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/Notifications/index.tsx b/CandyMachine-Storefront/store/js/packages/web/src/components/Notifications/index.tsx new file mode 100644 index 0000000..b8e0d18 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/Notifications/index.tsx @@ -0,0 +1,558 @@ +import { + CheckCircleTwoTone, + LoadingOutlined, + PlayCircleOutlined, + SyncOutlined, +} from '@ant-design/icons'; +import { + findProgramAddress, + programIds, + StringPublicKey, + toPublicKey, + useConnection, + useUserAccounts, + VaultState, + WalletSigner, +} from '@oyster/common'; +import { useWallet } from '@solana/wallet-adapter-react'; +import { Connection } from '@solana/web3.js'; +import { Badge, Popover, List } from 'antd'; +import React, { useEffect, useMemo, useState } from 'react'; +import { Link } from 'react-router-dom'; +import { closePersonalEscrow } from '../../actions/closePersonalEscrow'; +import { decommAuctionManagerAndReturnPrizes } from '../../actions/decommAuctionManagerAndReturnPrizes'; +import { sendSignMetadata } from '../../actions/sendSignMetadata'; +import { unwindVault } from '../../actions/unwindVault'; +import { settle } from '../../actions/settle'; +import { startAuctionManually } from '../../actions/startAuctionManually'; +import { QUOTE_MINT } from '../../constants'; +import { useMeta } from '../../contexts'; +import { + AuctionViewState, + processAccountsIntoAuctionView, + useAuctions, +} from '../../hooks'; + +interface NotificationCard { + id: string; + title: string; + description: string | JSX.Element; + action: () => Promise; + dismiss?: () => Promise; +} + +enum RunActionState { + NotRunning, + Running, + Success, + Failed, +} + +function RunAction({ + id, + action, + onFinish, + icon, +}: { + id: string; + action: () => Promise; + onFinish?: () => void; + icon: JSX.Element; +}) { + const [state, setRunState] = useState( + RunActionState.NotRunning, + ); + + useMemo(() => setRunState(RunActionState.NotRunning), [id]); + + const run = async () => { + await setRunState(RunActionState.Running); + const result = await action(); + if (result) { + await setRunState(RunActionState.Success); + setTimeout(() => (onFinish ? onFinish() : null), 2000); // Give user a sense of completion before removal from list + } else { + await setRunState(RunActionState.Failed); + } + }; + + let component; + switch (state) { + case RunActionState.NotRunning: + component = ( + + {icon} + + ); + break; + case RunActionState.Failed: + component = ( + + + + ); + break; + case RunActionState.Running: + component = ; + break; + case RunActionState.Success: + component = ; + } + + return component; +} + +export async function getPersonalEscrowAta( + wallet: WalletSigner | undefined, +): Promise { + const PROGRAM_IDS = programIds(); + if (!wallet?.publicKey) return; + + return ( + await findProgramAddress( + [ + wallet.publicKey.toBuffer(), + PROGRAM_IDS.token.toBuffer(), + QUOTE_MINT.toBuffer(), + ], + PROGRAM_IDS.associatedToken, + ) + )[0]; +} + +export function useCollapseWrappedSol({ + connection, + wallet, + notifications, +}: { + connection: Connection; + wallet: WalletSigner; + notifications: NotificationCard[]; +}) { + const [showNotification, setShowNotification] = useState(false); + const fn = async () => { + const ata = await getPersonalEscrowAta(wallet); + if (ata) { + try { + const balance = await connection.getTokenAccountBalance( + toPublicKey(ata), + ); + + if ((balance && balance.value.uiAmount) || 0 > 0) { + setShowNotification(true); + } + } catch (e) {} + } + setTimeout(fn, 60000); + }; + useEffect(() => { + fn(); + }, []); + + if (showNotification) { + notifications.push({ + id: 'unsettled', + title: 'Unsettled funds!', + description: + 'You have unsettled royalties in your personal escrow account.', + action: async () => { + try { + const ata = await getPersonalEscrowAta(wallet); + if (ata) { + const data = await connection.getAccountInfo(toPublicKey(ata)); + if (data?.data.length || 0 > 0) + await closePersonalEscrow(connection, wallet, ata); + } + } catch (e) { + console.error(e); + return false; + } + return true; + }, + }); + } +} + +const CALLING_MUTEX: Record = {}; +export function useSettlementAuctions({ + connection, + wallet, + notifications, +}: { + connection: Connection; + wallet: WalletSigner; + notifications: NotificationCard[]; +}) { + const { accountByMint } = useUserAccounts(); + const walletPubkey = wallet?.publicKey?.toBase58(); + const { bidderPotsByAuctionAndBidder, pullAuctionPage } = useMeta(); + const auctionsNeedingSettling = [ + ...useAuctions(AuctionViewState.Ended), + ...useAuctions(AuctionViewState.BuyNow), + ]; + + const [validDiscoveredEndedAuctions, setValidDiscoveredEndedAuctions] = + useState>({}); + useMemo(() => { + const f = async () => { + const nextBatch = auctionsNeedingSettling + .filter(a => { + const isEndedInstantSale = + a.isInstantSale && + a.items.length === a.auction.info.bidState.bids.length; + + return ( + walletPubkey && + a.auctionManager.authority === walletPubkey && + (a.auction.info.ended() || isEndedInstantSale) + ); + }) + .sort( + (a, b) => + (b.auction.info.endedAt?.toNumber() || 0) - + (a.auction.info.endedAt?.toNumber() || 0), + ); + for (let i = 0; i < nextBatch.length; i++) { + const av = nextBatch[i]; + if (!CALLING_MUTEX[av.auctionManager.pubkey]) { + CALLING_MUTEX[av.auctionManager.pubkey] = true; + try { + const balance = await connection.getTokenAccountBalance( + toPublicKey(av.auctionManager.acceptPayment), + ); + if ( + ((balance.value.uiAmount || 0) === 0 && + av.auction.info.bidState.bids + .map(b => b.amount.toNumber()) + .reduce((acc, r) => (acc += r), 0) > 0) || + // FIXME: Why 0.01? If this is used, + // no auctions with lower prices (e.g. 0.0001) appear in notifications, + // thus making settlement of such an auction impossible. + // Temporarily making the number a lesser one. + // (balance.value.uiAmount || 0) > 0.01 + (balance.value.uiAmount || 0) > 0.00001 + ) { + setValidDiscoveredEndedAuctions(old => ({ + ...old, + [av.auctionManager.pubkey]: balance.value.uiAmount || 0, + })); + } + } catch (e) { + console.error(e); + } + } + } + }; + f(); + }, [auctionsNeedingSettling.length, walletPubkey]); + + Object.keys(validDiscoveredEndedAuctions).forEach(auctionViewKey => { + const auctionView = auctionsNeedingSettling.find( + a => a.auctionManager.pubkey === auctionViewKey, + ); + if (!auctionView) return; + const winners = [...auctionView.auction.info.bidState.bids] + .reverse() + .slice(0, auctionView.auctionManager.numWinners.toNumber()) + .reduce((acc: Record, r) => { + acc[r.key] = true; + return acc; + }, {}); + + const myPayingAccount = accountByMint.get( + auctionView.auction.info.tokenMint, + ); + const auctionKey = auctionView.auction.pubkey; + const bidsToClaim = Object.values(bidderPotsByAuctionAndBidder).filter( + b => + winners[b.info.bidderAct] && + !b.info.emptied && + b.info.auctionAct === auctionKey, + ); + if (bidsToClaim.length || validDiscoveredEndedAuctions[auctionViewKey] > 0) + notifications.push({ + id: auctionViewKey, + title: 'You have an ended auction that needs settling!', + description: ( + + One of your auctions ended and it has monies that can be claimed. + For more detail,{' '} + click here. + + ), + action: async () => { + try { + // pull missing data and complete the auction view to settle. + const { + auctionDataExtended, + auctionManagersByAuction, + safetyDepositBoxesByVaultAndIndex, + metadataByMint, + bidderMetadataByAuctionAndBidder: + updatedBidderMetadataByAuctionAndBidder, + bidderPotsByAuctionAndBidder, + bidRedemptionV2sByAuctionManagerAndWinningIndex, + masterEditions, + vaults, + safetyDepositConfigsByAuctionManagerAndIndex, + masterEditionsByPrintingMint, + masterEditionsByOneTimeAuthMint, + metadataByMasterEdition, + metadataByAuction, + } = await pullAuctionPage(auctionView.auction.pubkey); + const completeAuctionView = processAccountsIntoAuctionView( + auctionView.auction.pubkey, + auctionView.auction, + auctionDataExtended, + auctionManagersByAuction, + safetyDepositBoxesByVaultAndIndex, + metadataByMint, + updatedBidderMetadataByAuctionAndBidder, + bidderPotsByAuctionAndBidder, + bidRedemptionV2sByAuctionManagerAndWinningIndex, + masterEditions, + vaults, + safetyDepositConfigsByAuctionManagerAndIndex, + masterEditionsByPrintingMint, + masterEditionsByOneTimeAuthMint, + metadataByMasterEdition, + {}, + metadataByAuction, + undefined, + ); + if(completeAuctionView) { + await settle( + connection, + wallet, + completeAuctionView, + // Just claim all bidder pots + bidsToClaim, + myPayingAccount?.pubkey, + accountByMint, + ); + if (wallet.publicKey) { + const ata = await getPersonalEscrowAta(wallet); + if (ata) await closePersonalEscrow(connection, wallet, ata); + } + } + } catch (e) { + console.error(e); + return false; + } + return true; + }, + }); + }); +} + +export function Notifications() { + const { + metadata, + whitelistedCreatorsByCreator, + store, + vaults, + safetyDepositBoxesByVaultAndIndex, + } = useMeta(); + const possiblyBrokenAuctionManagerSetups = useAuctions( + AuctionViewState.Defective, + ); + + const upcomingAuctions = useAuctions(AuctionViewState.Upcoming); + const connection = useConnection(); + const wallet = useWallet(); + const { accountByMint } = useUserAccounts(); + + const notifications: NotificationCard[] = []; + + const walletPubkey = wallet.publicKey?.toBase58() || ''; + + useCollapseWrappedSol({ connection, wallet, notifications }); + + useSettlementAuctions({ connection, wallet, notifications }); + + const vaultsNeedUnwinding = useMemo( + () => + Object.values(vaults).filter( + v => + v.info.authority === walletPubkey && + v.info.state !== VaultState.Deactivated && + v.info.tokenTypeCount > 0, + ), + [vaults, walletPubkey], + ); + + vaultsNeedUnwinding.forEach(v => { + notifications.push({ + id: v.pubkey, + title: 'You have items locked in a defective auction!', + description: ( + + During an auction creation process that probably had some issues, you + lost an item. Reclaim it now. + + ), + action: async () => { + try { + await unwindVault( + connection, + wallet, + v, + safetyDepositBoxesByVaultAndIndex, + ); + } catch (e) { + console.error(e); + return false; + } + return true; + }, + }); + }); + + possiblyBrokenAuctionManagerSetups + .filter(v => v.auctionManager.authority === walletPubkey) + .forEach(v => { + notifications.push({ + id: v.auctionManager.pubkey, + title: 'You have items locked in a defective auction!', + description: ( + + During an auction creation process that probably had some issues, + you lost an item. Reclaim it now. + + ), + action: async () => { + try { + await decommAuctionManagerAndReturnPrizes( + connection, + wallet, + v, + safetyDepositBoxesByVaultAndIndex, + ); + } catch (e) { + console.error(e); + return false; + } + return true; + }, + }); + }); + + const metaNeedsApproving = useMemo( + () => + metadata.filter(m => { + return ( + m.info.data.creators && + (whitelistedCreatorsByCreator[m.info.updateAuthority]?.info + ?.activated || + store?.info.public) && + m.info.data.creators.find( + c => c.address === walletPubkey && !c.verified, + ) + ); + }), + [metadata, whitelistedCreatorsByCreator, walletPubkey], + ); + + metaNeedsApproving.forEach(m => { + notifications.push({ + id: m.pubkey, + title: 'You have a new artwork to approve!', + description: ( + + {whitelistedCreatorsByCreator[m.info.updateAuthority]?.info?.name || + m.pubkey}{' '} + wants you to approve that you helped create their art{' '} + here. + + ), + action: async () => { + try { + await sendSignMetadata(connection, wallet, m.pubkey); + } catch (e) { + console.error(e); + return false; + } + return true; + }, + }); + }); + + upcomingAuctions + .filter(v => v.auctionManager.authority === walletPubkey) + .forEach(v => { + notifications.push({ + id: v.auctionManager.pubkey, + title: 'You have an auction which is not started yet!', + description: You can activate it now if you wish., + action: async () => { + try { + await startAuctionManually(connection, wallet, v); + } catch (e) { + console.error(e); + return false; + } + return true; + }, + }); + }); + + const content = notifications.length ? ( +
    + ( + + } + /> + {item.dismiss && ( + } + /> + )} + + } + > + {item.title}} + description={ + + {item.description} + + } + /> + + )} + /> +
    + ) : ( + No notifications + ); + + const justContent = ( + +

    Solhunt

    +
    + ); + + if (notifications.length === 0) return justContent; + else + return ( + + {justContent} + + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/PreSaleBanner/index.less b/CandyMachine-Storefront/store/js/packages/web/src/components/PreSaleBanner/index.less new file mode 100644 index 0000000..3131085 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/PreSaleBanner/index.less @@ -0,0 +1,47 @@ + +.presale-container { + background-color: #B29995; + background-repeat: no-repeat; + background-position-y: center; + min-height: 220px; + margin-bottom: 1rem; + border-radius: 4px; + color: black; + background-size: auto 240px; +} + +.explore { + display: flex; + padding: 10px +} + +.explore .square { + max-width: 355px; + min-width: 355px; + border: 1px #303030 solid; + @media (max-width: 375px) { + max-width: 355px; + min-width: 355px; + } +} + +.presale-title { + font-weight: bolder; + font-size: 1.7rem; +} + +.presale-product { + font-size: 1.7rem; +} + +.cd-number { + font-size: 1.4rem; + font-weight: 600; +} + +.presale-info { + display: flex; + flex-wrap: wrap; + align-items: center; + align-content: center; +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/PreSaleBanner/index.tsx b/CandyMachine-Storefront/store/js/packages/web/src/components/PreSaleBanner/index.tsx new file mode 100644 index 0000000..85344a8 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/PreSaleBanner/index.tsx @@ -0,0 +1,63 @@ +import React from 'react'; +import { Col, Row, Button, Skeleton } from 'antd'; + +import { AuctionView, useArt } from '../../hooks'; +import { ArtContent } from '../ArtContent'; +import { AuctionCard } from '../AuctionCard'; +import { Link } from 'react-router-dom'; +import { useMeta } from '../../contexts'; + +interface IPreSaleBanner { + auction?: AuctionView; +} + +export const PreSaleBanner = ({ auction }: IPreSaleBanner) => { + const { isLoading } = useMeta(); + const id = auction?.thumbnail.metadata.pubkey; + const art = useArt(); + + if (isLoading) { + return ; + } + + return ( + + + + + +

    {art.title}

    + {auction && ( + + + + + + } + /> + )} + +
    + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/Settings/index.tsx b/CandyMachine-Storefront/store/js/packages/web/src/components/Settings/index.tsx new file mode 100644 index 0000000..fcea13f --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/Settings/index.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { Button, Select } from 'antd'; +import { contexts } from '@oyster/common'; +import { useWallet } from '@solana/wallet-adapter-react'; + +const { ENDPOINTS, useConnectionConfig } = contexts.Connection; + +export const Settings = () => { + const { connected, disconnect } = useWallet(); + const { endpoint, setEndpoint } = useConnectionConfig(); + + return ( + <> +
    + Network:{' '} + + {connected && ( + + )} +
    + + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/SetupVariables/index.tsx b/CandyMachine-Storefront/store/js/packages/web/src/components/SetupVariables/index.tsx new file mode 100644 index 0000000..b1de295 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/SetupVariables/index.tsx @@ -0,0 +1,45 @@ +import { CopyOutlined } from '@ant-design/icons'; +import { Button, Card } from 'antd'; +import { FC } from 'react'; +import { useCallback, useRef } from 'react'; + +interface Variables { + storeAddress?: string; + storeOwnerAddress?: string; +} + +export const SetupVariables: FC = ({ + storeAddress, + storeOwnerAddress, +}) => { + const ref = useRef(null); + + const copySettings = useCallback(() => { + const text = ref.current?.innerText; + if (text) { + navigator.clipboard.writeText(text); + } + }, []); + + if (!storeAddress && !storeOwnerAddress) { + return null; + } + + return ( + } + > + } + > +
    + {storeOwnerAddress &&

    STORE_OWNER_ADDRESS={storeOwnerAddress}

    } + {storeAddress &&

    STORE_ADDRESS={storeAddress}

    } +
    +
    + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/UserSearch/index.tsx b/CandyMachine-Storefront/store/js/packages/web/src/components/UserSearch/index.tsx new file mode 100644 index 0000000..67ed7fd --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/UserSearch/index.tsx @@ -0,0 +1,93 @@ +import { shortenAddress } from '@oyster/common'; +import { Select, Spin } from 'antd'; +import { SelectProps } from 'antd/es/select'; +import debounce from 'lodash/debounce'; +import React, { useMemo, useRef, useState } from 'react'; +import { useMeta } from '../../contexts'; + +export interface DebounceSelectProps + extends Omit, 'options' | 'children'> { + fetchOptions: (search: string) => Promise; + debounceTimeout?: number; +} + +function DebounceSelect< + ValueType extends { + key?: string; + label: React.ReactNode; + value: string | number; + } = any, +>({ fetchOptions, debounceTimeout = 800, ...props }: DebounceSelectProps) { + const [fetching, setFetching] = useState(false); + const [options, setOptions] = useState([]); + const fetchRef = useRef(0); + + const debounceFetcher = useMemo(() => { + const loadOptions = (value: string) => { + fetchRef.current += 1; + const fetchId = fetchRef.current; + setOptions([]); + setFetching(true); + + fetchOptions(value).then(newOptions => { + if (fetchId !== fetchRef.current) { + // for fetch callback order + return; + } + + setOptions(newOptions); + setFetching(false); + }); + }; + + return debounce(loadOptions, debounceTimeout); + }, [fetchOptions, debounceTimeout]); + + return ( + + labelInValue + filterOption={false} + onSearch={debounceFetcher} + notFoundContent={fetching ? : null} + {...props} + options={options} + /> + ); +} + +// Usage of DebounceSelect +export interface UserValue { + key: string; + label: string; + value: string; +} + +export const UserSearch = (props: { setCreators: Function }) => { + const { whitelistedCreatorsByCreator } = useMeta(); + const [value, setValue] = React.useState([]); + + return ( + { + const items = Object.values(whitelistedCreatorsByCreator) + .filter(c => c.info.activated) + .map(a => ({ + label: a.info.name || shortenAddress(a.info.address), + value: a.info.address, + })); + + return items; + }} + onChange={newValue => { + props.setCreators(newValue); + setValue(newValue); + }} + style={{ width: '100%' }} + /> + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/UserSearch/styles.less b/CandyMachine-Storefront/store/js/packages/web/src/components/UserSearch/styles.less new file mode 100644 index 0000000..69c5f23 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/UserSearch/styles.less @@ -0,0 +1,11 @@ +.user-selector { + background: #282828; + border-radius: 8px; + padding: 3px 0px; + overflow: hidden; + + .ant-select-selector { + border-width: 0px !important; + text-align: left; + } +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/components/ViewOn/index.tsx b/CandyMachine-Storefront/store/js/packages/web/src/components/ViewOn/index.tsx new file mode 100644 index 0000000..efaedb3 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/components/ViewOn/index.tsx @@ -0,0 +1,38 @@ +import React from 'react'; +import { Col, Button } from 'antd'; +import { useArt } from '../../hooks'; +import { useConnectionConfig } from '@oyster/common'; + +export const ViewOn = ({ id }: { id: string }) => { + const { env } = useConnectionConfig(); + const art = useArt(id); + + return ( + <> + +
    View on
    +
    + + +
    + + + ); +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/config/userNames.json b/CandyMachine-Storefront/store/js/packages/web/src/config/userNames.json new file mode 100644 index 0000000..7c57882 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/config/userNames.json @@ -0,0 +1,32 @@ +{ + "EDshWM3jBy2YUszMiFLAFLx3WkbtqR9An7JZzvg22R1P": { + "name": "Deployer Admin", + "image": "https://pbs.twimg.com/profile_images/1393399819213983746/2a8l5muc_400x400.png", + "description": "", + "background": "" + }, + "CduMjFZLBeg3A9wMP3hQCoU1RQzzCpgSvQNXfCi1GCSB": { + "name": "Bartosz Lipinski", + "image": "https://pbs.twimg.com/profile_images/1393353972371623938/ZMWvvptg_400x400.jpg", + "description": "", + "background": "" + }, + "44kiGWWsSgdqPMvmqYgTS78Mx2BKCWzduATkfY4biU97": { + "name": "Jordan Prince", + "image": "https://pbs.twimg.com/profile_images/1393399819213983746/2a8l5muc_400x400.png", + "description": "", + "background": "" + }, + "3yp9iTsCgZoBsXhtRLB8cWHNcTDeR6VJniRuDrHNTuxU": { + "name": "James Madison", + "image": "https://pbs.twimg.com/profile_images/1393353972371623938/ZMWvvptg_400x400.jpg", + "description": "", + "background": "" + }, + "SoL351y4uKWtbH14AU1Rhiao96aBM4u57bMi5Vj2XJc": { + "name": "Solana", + "image": "https://pbs.twimg.com/profile_images/1299400345144049665/sPxnVXa7_400x400.jpg", + "description": "Account used by Solana to mint official NFTs.", + "background": "" + } +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/constants/index.tsx b/CandyMachine-Storefront/store/js/packages/web/src/constants/index.tsx new file mode 100644 index 0000000..99cb84d --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/constants/index.tsx @@ -0,0 +1,6 @@ +import { WRAPPED_SOL_MINT } from '@oyster/common'; + +export * from './labels'; +export * from './style'; + +export const QUOTE_MINT = WRAPPED_SOL_MINT; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/constants/labels.ts b/CandyMachine-Storefront/store/js/packages/web/src/constants/labels.ts new file mode 100644 index 0000000..95e8fb8 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/constants/labels.ts @@ -0,0 +1,19 @@ +export const LABELS = { + CONNECT_LABEL: 'Connect Wallet', + GIVE_SOL: 'Give me SOL', + FAUCET_INFO: + 'This faucet will help you fund your accounts outside of Solana main network.', + ACCOUNT_FUNDED: 'Account funded.', + MENU_HOME: 'Home', + MENU_FAUCET: 'Faucet', + APP_TITLE: 'Metaplex', + CONNECT_BUTTON: 'Connect', + WALLET_TOOLTIP: 'Wallet public key', + WALLET_BALANCE: 'Wallet balance', + SETTINGS_TOOLTIP: 'Settings', + GO_BACK_ACTION: 'Go back', + TOTAL_TITLE: 'Total', + ENTER_AMOUNT: 'Enter an amount', + TRANSFER: 'Transfer', + SET_CORRECT_WALLET_NETWORK: 'Set correct wallet network', +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/constants/style.tsx b/CandyMachine-Storefront/store/js/packages/web/src/constants/style.tsx new file mode 100644 index 0000000..3818b89 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/constants/style.tsx @@ -0,0 +1,5 @@ +export const GUTTER = [16, { xs: 8, sm: 16, md: 16, lg: 16 }] as any; + +export const SMALL_STATISTIC: React.CSSProperties = { + fontSize: 10, +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/contexts/coingecko.tsx b/CandyMachine-Storefront/store/js/packages/web/src/contexts/coingecko.tsx new file mode 100644 index 0000000..b8d1a5a --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/contexts/coingecko.tsx @@ -0,0 +1,57 @@ +import React, { useContext, useEffect, useState } from 'react'; + +export const COINGECKO_POOL_INTERVAL = 1000 * 60; // 60 sec +export const COINGECKO_API = 'https://api.coingecko.com/api/v3/'; +export const COINGECKO_COIN_PRICE_API = `${COINGECKO_API}simple/price`; +export interface CoingeckoContextState { + solPrice: number; +} + +export const solToUSD = async (): Promise => { + const url = `${COINGECKO_COIN_PRICE_API}?ids=solana&vs_currencies=usd`; + const resp = await window.fetch(url).then(resp => resp.json()); + return resp.solana.usd; +}; + +const CoingeckoContext = + React.createContext(null); +export function CoingeckoProvider({ children = null as any }) { + const [solPrice, setSolPrice] = useState(0); + + useEffect(() => { + let timerId = 0; + const queryPrice = async () => { + const price = await solToUSD(); + setSolPrice(price); + startTimer(); + }; + + const startTimer = () => { + timerId = window.setTimeout(async () => { + queryPrice(); + }, COINGECKO_POOL_INTERVAL); + }; + + queryPrice(); + return () => { + clearTimeout(timerId); + }; + }, [setSolPrice]); + + return ( + + {children} + + ); +} + +export const useCoingecko = () => { + const context = useContext(CoingeckoContext); + return context as CoingeckoContextState; +}; + +export const useSolPrice = () => { + const { solPrice } = useCoingecko(); + + return solPrice; +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/contexts/index.tsx b/CandyMachine-Storefront/store/js/packages/web/src/contexts/index.tsx new file mode 100644 index 0000000..0241456 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/contexts/index.tsx @@ -0,0 +1,2 @@ +export * from '@oyster/common/dist/lib/contexts/meta/meta'; +export * from './coingecko'; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/hooks/index.ts b/CandyMachine-Storefront/store/js/packages/web/src/hooks/index.ts new file mode 100644 index 0000000..b787217 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/hooks/index.ts @@ -0,0 +1,9 @@ +export * from './useArt'; +export * from './useAuctions'; +export * from './useUserArts'; +export * from './useAuction'; +export * from './useBidsForAuction'; +export * from './useUserBalance'; +export * from './useCreator'; +export * from './useCreatorArts'; +export * from './useCreators'; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/hooks/useArt.ts b/CandyMachine-Storefront/store/js/packages/web/src/hooks/useArt.ts new file mode 100644 index 0000000..089d208 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/hooks/useArt.ts @@ -0,0 +1,250 @@ +import { useEffect, useMemo, useState } from 'react'; +import { useMeta } from '../contexts'; +import { Art, Artist, ArtType } from '../types'; +import { + Edition, + IMetadataExtension, + MasterEditionV1, + MasterEditionV2, + Metadata, + ParsedAccount, + StringPublicKey, + useLocalStorage, + pubkeyToString, +} from '@oyster/common'; +import { WhitelistedCreator } from '@oyster/common/dist/lib/models/metaplex/index'; +import { Cache } from 'three'; +import { useInView } from 'react-intersection-observer'; + +const metadataToArt = ( + info: Metadata | undefined, + editions: Record>, + masterEditions: Record< + string, + ParsedAccount + >, + whitelistedCreatorsByCreator: Record< + string, + ParsedAccount + >, +) => { + let type: ArtType = ArtType.NFT; + let editionNumber: number | undefined = undefined; + let maxSupply: number | undefined = undefined; + let supply: number | undefined = undefined; + + if (info) { + const masterEdition = masterEditions[info.masterEdition || '']; + const edition = editions[info.edition || '']; + if (edition) { + const myMasterEdition = masterEditions[edition.info.parent || '']; + if (myMasterEdition) { + type = ArtType.Print; + editionNumber = edition.info.edition.toNumber(); + supply = myMasterEdition.info?.supply.toNumber() || 0; + } + } else if (masterEdition) { + type = ArtType.Master; + maxSupply = masterEdition.info.maxSupply?.toNumber(); + supply = masterEdition.info.supply.toNumber(); + } + } + + return { + uri: info?.data.uri || '', + mint: info?.mint, + title: info?.data.name, + creators: (info?.data.creators || []) + .map(creator => { + const knownCreator = whitelistedCreatorsByCreator[creator.address]; + + return { + address: creator.address, + verified: creator.verified, + share: creator.share, + image: knownCreator?.info.image || '', + name: knownCreator?.info.name || '', + link: knownCreator?.info.twitter || '', + } as Artist; + }) + .sort((a, b) => { + const share = (b.share || 0) - (a.share || 0); + if (share === 0) { + return a.name.localeCompare(b.name); + } + + return share; + }), + seller_fee_basis_points: info?.data.sellerFeeBasisPoints || 0, + edition: editionNumber, + maxSupply, + supply, + type, + } as Art; +}; + +const cachedImages = new Map(); +export const useCachedImage = (uri: string, cacheMesh?: boolean) => { + const [cachedBlob, setCachedBlob] = useState(undefined); + const [isLoading, setIsLoading] = useState(true); + + useEffect(() => { + if (!uri) { + return; + } + + const result = cachedImages.get(uri); + + if (result) { + setCachedBlob(result); + return; + } + + (async () => { + let response: Response; + let blob: Blob; + try { + response = await fetch(uri, { cache: 'force-cache' }); + + blob = await response.blob(); + + if (blob.size === 0) { + throw new Error('No content'); + } + } catch { + try { + response = await fetch(uri, { cache: 'reload' }); + blob = await response.blob(); + } catch { + // If external URL, just use the uri + if (uri?.startsWith('http')) { + setCachedBlob(uri); + } + setIsLoading(false); + return; + } + } + + if (blob.size === 0) { + setIsLoading(false); + return; + } + + if (cacheMesh) { + // extra caching for meshviewer + Cache.enabled = true; + Cache.add(uri, await blob.arrayBuffer()); + } + const blobURI = URL.createObjectURL(blob); + cachedImages.set(uri, blobURI); + setCachedBlob(blobURI); + setIsLoading(false); + })(); + }, [uri, setCachedBlob, setIsLoading]); + + return { cachedBlob, isLoading }; +}; + +export const useArt = (key?: StringPublicKey) => { + const { metadata, editions, masterEditions, whitelistedCreatorsByCreator } = + useMeta(); + + const account = useMemo( + () => metadata.find(a => a.pubkey === key), + [key, metadata], + ); + + const art = useMemo( + () => + metadataToArt( + account?.info, + editions, + masterEditions, + whitelistedCreatorsByCreator, + ), + [account, editions, masterEditions, whitelistedCreatorsByCreator], + ); + + return art; +}; + +export const useExtendedArt = (id?: StringPublicKey) => { + const { metadata } = useMeta(); + + const [data, setData] = useState(); + const { ref, inView } = useInView(); + const localStorage = useLocalStorage(); + + const key = pubkeyToString(id); + + const account = useMemo( + () => metadata.find(a => a.pubkey === key), + [key, metadata], + ); + + useEffect(() => { + if (inView && id && !data) { + const USE_CDN = false; + const routeCDN = (uri: string) => { + let result = uri; + if (USE_CDN) { + result = uri.replace( + 'https://arweave.net/', + 'https://coldcdn.com/api/cdn/bronil/', + ); + } + + return result; + }; + + if (account && account.info.data.uri) { + const uri = routeCDN(account.info.data.uri); + + const processJson = (extended: any) => { + if (!extended || extended?.properties?.files?.length === 0) { + return; + } + + if (extended?.image) { + const file = extended.image.startsWith('http') + ? extended.image + : `${account.info.data.uri}/${extended.image}`; + extended.image = routeCDN(file); + } + + return extended; + }; + + try { + const cached = localStorage.getItem(uri); + if (cached) { + setData(processJson(JSON.parse(cached))); + } else { + // TODO: BL handle concurrent calls to avoid double query + fetch(uri) + .then(async _ => { + try { + const data = await _.json(); + try { + localStorage.setItem(uri, JSON.stringify(data)); + } catch { + // ignore + } + setData(processJson(data)); + } catch { + return undefined; + } + }) + .catch(() => { + return undefined; + }); + } + } catch (ex) { + console.error(ex); + } + } + } + }, [inView, id, data, setData, account]); + + return { ref, data }; +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/hooks/useAuction.ts b/CandyMachine-Storefront/store/js/packages/web/src/hooks/useAuction.ts new file mode 100644 index 0000000..dc34cf6 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/hooks/useAuction.ts @@ -0,0 +1,82 @@ +import { StringPublicKey } from '@oyster/common'; +import { useWallet } from '@solana/wallet-adapter-react'; +import { useEffect, useState } from 'react'; +import { + AuctionView, + processAccountsIntoAuctionView, + useCachedRedemptionKeysByWallet, +} from '.'; +import { useMeta } from '../contexts'; + +export const useAuction = (id: StringPublicKey) => { + const { publicKey } = useWallet(); + const cachedRedemptionKeys = useCachedRedemptionKeysByWallet(); + + const [existingAuctionView, setAuctionView] = useState< + AuctionView | undefined + >(undefined); + const walletPubkey = publicKey?.toBase58(); + const { + auctions, + auctionManagersByAuction, + safetyDepositBoxesByVaultAndIndex, + metadataByMint, + bidderMetadataByAuctionAndBidder, + bidderPotsByAuctionAndBidder, + masterEditions, + vaults, + safetyDepositConfigsByAuctionManagerAndIndex, + masterEditionsByOneTimeAuthMint, + masterEditionsByPrintingMint, + metadataByMasterEdition, + bidRedemptionV2sByAuctionManagerAndWinningIndex, + auctionDataExtended, + metadataByAuction, + } = useMeta(); + + useEffect(() => { + const auction = auctions[id]; + if (auction) { + const auctionView = processAccountsIntoAuctionView( + walletPubkey, + auction, + auctionDataExtended, + auctionManagersByAuction, + safetyDepositBoxesByVaultAndIndex, + metadataByMint, + bidderMetadataByAuctionAndBidder, + bidderPotsByAuctionAndBidder, + bidRedemptionV2sByAuctionManagerAndWinningIndex, + masterEditions, + vaults, + safetyDepositConfigsByAuctionManagerAndIndex, + masterEditionsByPrintingMint, + masterEditionsByOneTimeAuthMint, + metadataByMasterEdition, + cachedRedemptionKeys, + metadataByAuction, + undefined + ); + + if (auctionView) setAuctionView(auctionView); + } + }, [ + auctions, + walletPubkey, + auctionManagersByAuction, + safetyDepositBoxesByVaultAndIndex, + metadataByMint, + bidderMetadataByAuctionAndBidder, + bidderPotsByAuctionAndBidder, + bidRedemptionV2sByAuctionManagerAndWinningIndex, + vaults, + safetyDepositConfigsByAuctionManagerAndIndex, + masterEditions, + masterEditionsByPrintingMint, + masterEditionsByOneTimeAuthMint, + metadataByMasterEdition, + cachedRedemptionKeys, + metadataByAuction, + ]); + return existingAuctionView; +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/hooks/useAuctions.ts b/CandyMachine-Storefront/store/js/packages/web/src/hooks/useAuctions.ts new file mode 100644 index 0000000..2eb1209 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/hooks/useAuctions.ts @@ -0,0 +1,450 @@ +import { + ParsedAccount, + Metadata, + SafetyDepositBox, + AuctionData, + AuctionState, + BidderMetadata, + BidderPot, + Vault, + MasterEditionV1, + MasterEditionV2, + StringPublicKey, + AuctionDataExtended, + createPipelineExecutor, +} from '@oyster/common'; +import { useWallet } from '@solana/wallet-adapter-react'; +import BN from 'bn.js'; +import { useEffect, useMemo, useState } from 'react'; +import { useMeta } from '../contexts'; +import { + AuctionManager, + AuctionManagerStatus, + AuctionManagerV1, + AuctionManagerV2, + BidRedemptionTicket, + BidRedemptionTicketV2, + getBidderKeys, + MetaplexKey, + SafetyDepositConfig, + WinningConfigType, + AuctionViewItem, + AuctionCache, +} from '@oyster/common/dist/lib/models/metaplex/index'; + +export enum AuctionViewState { + Live = '0', + Upcoming = '1', + Ended = '2', + BuyNow = '3', + Defective = '-1', +} + +// Flattened surface item for easy display +export interface AuctionView { + // items 1:1 with winning configs FOR NOW + // once tiered auctions come along, this becomes an array of arrays. + items: AuctionViewItem[][]; + safetyDepositBoxes: ParsedAccount[]; + auction: ParsedAccount; + auctionDataExtended?: ParsedAccount; + auctionManager: AuctionManager; + participationItem?: AuctionViewItem; + state: AuctionViewState; + thumbnail: AuctionViewItem; + myBidderMetadata?: ParsedAccount; + myBidderPot?: ParsedAccount; + myBidRedemption?: ParsedAccount; + vault: ParsedAccount; + totallyComplete: boolean; + isInstantSale: boolean; +} + +type CachedRedemptionKeys = Record< + string, + ParsedAccount | { pubkey: StringPublicKey; info: null } +>; + +export function useStoreAuctionsList() { + const { auctions, auctionManagersByAuction } = useMeta(); + const result = useMemo(() => { + return Object.values(auctionManagersByAuction).map( + manager => auctions[manager.info.auction], + ); + }, [Object.keys(auctions).length, auctionManagersByAuction]); + return result; +} + +export function useCachedRedemptionKeysByWallet() { + const { bidRedemptions } = useMeta(); + const auctions = useStoreAuctionsList(); + const { publicKey } = useWallet(); + + const [cachedRedemptionKeys, setCachedRedemptionKeys] = + useState({}); + + useEffect(() => { + if (!publicKey) return; + (async () => { + const temp: CachedRedemptionKeys = {}; + await createPipelineExecutor( + auctions.values(), + async auction => { + if (!cachedRedemptionKeys[auction.pubkey]) { + await getBidderKeys(auction.pubkey, publicKey.toBase58()).then( + key => { + temp[auction.pubkey] = bidRedemptions[key.bidRedemption] + ? bidRedemptions[key.bidRedemption] + : { pubkey: key.bidRedemption, info: null }; + }, + ); + } else if (!cachedRedemptionKeys[auction.pubkey].info) { + temp[auction.pubkey] = + bidRedemptions[cachedRedemptionKeys[auction.pubkey].pubkey] || + cachedRedemptionKeys[auction.pubkey]; + } + }, + { delay: 1, sequence: 2 }, + ); + + setCachedRedemptionKeys(temp); + })(); + }, [auctions, bidRedemptions, publicKey]); + + return cachedRedemptionKeys; +} + +export const useAuctions = (state?: AuctionViewState) => { + const [auctionViews, setAuctionViews] = useState([]); + const { publicKey } = useWallet(); + const cachedRedemptionKeys = useCachedRedemptionKeysByWallet(); + const auctions = useStoreAuctionsList(); + + const { + auctionManagersByAuction, + safetyDepositBoxesByVaultAndIndex, + metadataByMint, + bidderMetadataByAuctionAndBidder, + bidderPotsByAuctionAndBidder, + vaults, + masterEditions, + masterEditionsByPrintingMint, + masterEditionsByOneTimeAuthMint, + metadataByMasterEdition, + safetyDepositConfigsByAuctionManagerAndIndex, + bidRedemptionV2sByAuctionManagerAndWinningIndex, + auctionDataExtended, + metadataByAuction, + } = useMeta(); + + useEffect(() => { + const auctionViews: AuctionView[] = []; + auctions.map(auction => { + const auctionView = processAccountsIntoAuctionView( + publicKey?.toBase58(), + auction, + auctionDataExtended, + auctionManagersByAuction, + safetyDepositBoxesByVaultAndIndex, + metadataByMint, + bidderMetadataByAuctionAndBidder, + bidderPotsByAuctionAndBidder, + bidRedemptionV2sByAuctionManagerAndWinningIndex, + masterEditions, + vaults, + safetyDepositConfigsByAuctionManagerAndIndex, + masterEditionsByPrintingMint, + masterEditionsByOneTimeAuthMint, + metadataByMasterEdition, + cachedRedemptionKeys, + metadataByAuction, + state, + ); + if (auctionView) { + auctionViews.push(auctionView); + } + }); + + setAuctionViews(auctionViews.sort(sortByEnded)); + }, [ + state, + auctions, + auctionDataExtended, + auctionManagersByAuction, + safetyDepositBoxesByVaultAndIndex, + metadataByMint, + bidderMetadataByAuctionAndBidder, + bidderPotsByAuctionAndBidder, + bidRedemptionV2sByAuctionManagerAndWinningIndex, + vaults, + safetyDepositConfigsByAuctionManagerAndIndex, + masterEditions, + masterEditionsByPrintingMint, + masterEditionsByOneTimeAuthMint, + metadataByMasterEdition, + publicKey, + cachedRedemptionKeys, + metadataByAuction, + setAuctionViews, + ]); + + return auctionViews; +}; + +function sortByEnded(a: AuctionView, b: AuctionView) { + return ( + (b.auction.info.endedAt?.toNumber() || 0) - + (a.auction.info.endedAt?.toNumber() || 0) + ); +} + +function isInstantSale( + auctionDataExt: ParsedAccount | null, + auction: ParsedAccount, +) { + return !!( + auctionDataExt?.info.instantSalePrice && + auction.info.priceFloor.minPrice && + auctionDataExt?.info.instantSalePrice.eq(auction.info.priceFloor.minPrice) + ); +} + +export function buildListWhileNonZero(hash: Record, key: string) { + const list: T[] = []; + let ticket = hash[key + '-0']; + if (ticket) { + list.push(ticket); + let i = 1; + while (ticket) { + ticket = hash[key + '-' + i.toString()]; + if (ticket) list.push(ticket); + i++; + } + } + return list; +} + +export function processAccountsIntoAuctionView( + walletPubkey: StringPublicKey | null | undefined, + auction: ParsedAccount, + auctionDataExtended: Record>, + auctionManagersByAuction: Record< + string, + ParsedAccount + >, + safetyDepositBoxesByVaultAndIndex: Record< + string, + ParsedAccount + >, + metadataByMint: Record>, + bidderMetadataByAuctionAndBidder: Record< + string, + ParsedAccount + >, + bidderPotsByAuctionAndBidder: Record>, + bidRedemptionV2sByAuctionManagerAndWinningIndex: Record< + string, + ParsedAccount + >, + masterEditions: Record< + string, + ParsedAccount + >, + vaults: Record>, + safetyDepositConfigsByAuctionManagerAndIndex: Record< + string, + ParsedAccount + >, + masterEditionsByPrintingMint: Record>, + masterEditionsByOneTimeAuthMint: Record< + string, + ParsedAccount + >, + metadataByMasterEdition: Record>, + cachedRedemptionKeysByWallet: Record< + string, + ParsedAccount | { pubkey: StringPublicKey; info: null } + >, + metadataByAuction: Record[]>, + desiredState: AuctionViewState | undefined, +): AuctionView | undefined { + let state: AuctionViewState; + if (auction.info.ended()) { + state = AuctionViewState.Ended; + } else if (auction.info.state === AuctionState.Started) { + state = AuctionViewState.Live; + } else if (auction.info.state === AuctionState.Created) { + state = AuctionViewState.Upcoming; + } else { + state = AuctionViewState.BuyNow; + } + + const auctionManagerInstance = auctionManagersByAuction[auction.pubkey || '']; + + // The defective auction view state really applies to auction managers, not auctions, so we ignore it here + if ( + desiredState && + desiredState !== AuctionViewState.Defective && + desiredState !== state + ) + return undefined; + + if (auctionManagerInstance) { + // instead we apply defective state to auction managers + if ( + desiredState === AuctionViewState.Defective && + auctionManagerInstance.info.state.status !== + AuctionManagerStatus.Initialized + ) + return undefined; + // Generally the only way an initialized auction manager can get through is if you are asking for defective ones. + else if ( + desiredState !== AuctionViewState.Defective && + auctionManagerInstance.info.state.status === + AuctionManagerStatus.Initialized + ) + return undefined; + + const vault = vaults[auctionManagerInstance.info.vault]; + const auctionManagerKey = auctionManagerInstance.pubkey; + + const safetyDepositConfigs: ParsedAccount[] = + buildListWhileNonZero( + safetyDepositConfigsByAuctionManagerAndIndex, + auctionManagerKey, + ); + + const bidRedemptions: ParsedAccount[] = + buildListWhileNonZero( + bidRedemptionV2sByAuctionManagerAndWinningIndex, + auctionManagerKey, + ); + const auctionManager = new AuctionManager({ + instance: auctionManagerInstance, + auction, + vault, + safetyDepositConfigs, + bidRedemptions, + }); + + const auctionDataExtendedKey = + auctionManagerInstance.info.key == MetaplexKey.AuctionManagerV2 + ? (auctionManagerInstance as ParsedAccount).info + .auctionDataExtended + : null; + const auctionDataExt = auctionDataExtendedKey + ? auctionDataExtended[auctionDataExtendedKey] + : null; + + const boxesExpected = auctionManager.safetyDepositBoxesExpected.toNumber(); + + const bidRedemption: ParsedAccount | undefined = + cachedRedemptionKeysByWallet[auction.pubkey]?.info + ? (cachedRedemptionKeysByWallet[ + auction.pubkey + ] as ParsedAccount) + : undefined; + + const bidderMetadata = + bidderMetadataByAuctionAndBidder[auction.pubkey + '-' + walletPubkey]; + const bidderPot = + bidderPotsByAuctionAndBidder[auction.pubkey + '-' + walletPubkey]; + + const vaultKey = auctionManager.vault; + const boxes: ParsedAccount[] = buildListWhileNonZero( + safetyDepositBoxesByVaultAndIndex, + vaultKey, + ); + let participationMetadata: ParsedAccount | undefined = undefined; + let participationBox: ParsedAccount | undefined = + undefined; + let participationMaster: + | ParsedAccount + | undefined = undefined; + if ( + auctionManager.participationConfig !== null && + auctionManager.participationConfig !== undefined && + boxes.length > 0 + ) { + participationBox = + boxes[auctionManager.participationConfig?.safetyDepositBoxIndex]; + // Cover case of V1 master edition (where we're using one time auth mint in storage) + // and case of v2 master edition where the edition itself is stored + participationMetadata = + metadataByMasterEdition[ + masterEditionsByOneTimeAuthMint[participationBox.info.tokenMint] + ?.pubkey + ] || metadataByMint[participationBox.info.tokenMint]; + if (participationMetadata) { + participationMaster = + masterEditionsByOneTimeAuthMint[participationBox.info.tokenMint] || + (participationMetadata.info.masterEdition && + masterEditions[participationMetadata.info.masterEdition]); + } + } + + const view: Partial = { + auction, + auctionManager, + state, + vault, + auctionDataExtended: auctionDataExt || undefined, + safetyDepositBoxes: boxes, + items: auctionManager.getItemsFromSafetyDepositBoxes( + metadataByMint, + masterEditionsByPrintingMint, + metadataByMasterEdition, + masterEditions, + boxes, + ), + participationItem: + participationMetadata && participationBox + ? { + metadata: participationMetadata, + safetyDeposit: participationBox, + masterEdition: participationMaster, + amount: new BN(1), + winningConfigType: WinningConfigType.Participation, + } + : undefined, + myBidderMetadata: bidderMetadata, + myBidderPot: bidderPot, + myBidRedemption: bidRedemption, + }; + + view.thumbnail = + ((view.items || [])[0] || [])[0] || + view.participationItem || + (metadataByAuction[auction.pubkey] + ? { + metadata: metadataByAuction[auction.pubkey][0], + } + : null); + + view.isInstantSale = isInstantSale(auctionDataExt, auction); + + view.totallyComplete = !!( + view.thumbnail && + boxesExpected === + (view.items || []).length + + (auctionManager.participationConfig === null || + auctionManager.participationConfig === undefined + ? 0 + : 1) && + (auctionManager.participationConfig === null || + auctionManager.participationConfig === undefined || + (auctionManager.participationConfig !== null && + view.participationItem)) && + view.vault + ); + if ( + (!view.thumbnail || !view.thumbnail.metadata) && + desiredState != AuctionViewState.Defective + ) + return undefined; + + return view as AuctionView; + } + + return undefined; +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/hooks/useBidsForAuction.ts b/CandyMachine-Storefront/store/js/packages/web/src/hooks/useBidsForAuction.ts new file mode 100644 index 0000000..d4de8a9 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/hooks/useBidsForAuction.ts @@ -0,0 +1,97 @@ +import { useEffect, useMemo, useState } from 'react'; +import { + BidderMetadata, + BidderMetadataParser, + cache, + ParsedAccount, + StringPublicKey, + useMeta, + USE_SPEED_RUN, +} from '@oyster/common'; + +export const useHighestBidForAuction = ( + auctionPubkey: StringPublicKey | string, +) => { + const bids = useBidsForAuction(auctionPubkey); + const winner = useMemo(() => { + return bids?.[0]; + }, [bids]); + + return winner; +}; + +export const useBidsForAuction = (auctionPubkey: StringPublicKey | string) => { + const id = useMemo( + () => + typeof auctionPubkey === 'string' + ? auctionPubkey !== '' + ? auctionPubkey + : undefined + : auctionPubkey, + [auctionPubkey], + ); + const { bidderMetadataByAuctionAndBidder } = useMeta(); + + const [bids, setBids] = useState[]>([]); + + useEffect(() => { + const dispose = cache.emitter.onCache(args => { + if (args.parser === BidderMetadataParser) { + setBids(getBids(bidderMetadataByAuctionAndBidder, id)); + } + }); + + setBids(getBids(bidderMetadataByAuctionAndBidder, id)); + + return () => { + dispose(); + }; + }, [id]); + + return bids; +}; + +const getBids = ( + bidderMetadataByAuctionAndBidder: Record< + string, + ParsedAccount + >, + id?: StringPublicKey, +) => { + // I have no idea why, but cache doesnt work with speed run and i couldnt figure it out for the life of me, + // because that file is so confusing I have no idea how it works. + // so we use the tempCache for pulling bids. B come save me.- J + let bids; + if (USE_SPEED_RUN) { + bids = Object.values(bidderMetadataByAuctionAndBidder).filter( + b => b.info.auctionPubkey === id, + ); + } else { + bids = cache + .byParser(BidderMetadataParser) + .filter(key => { + const bidder = cache.get(key) as ParsedAccount; + + if (!bidder) { + return false; + } + return id === bidder.info.auctionPubkey; + }) + .map(key => { + const bidder = cache.get(key) as ParsedAccount; + return bidder; + }); + } + return bids + .sort((a, b) => { + const lastBidDiff = b.info.lastBid.sub(a.info.lastBid).toNumber(); + if (lastBidDiff === 0) { + return a.info.lastBidTimestamp.sub(b.info.lastBidTimestamp).toNumber(); + } + + return lastBidDiff; + }) + .map(item => { + return item; + }); +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/hooks/useCreator.ts b/CandyMachine-Storefront/store/js/packages/web/src/hooks/useCreator.ts new file mode 100644 index 0000000..d996166 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/hooks/useCreator.ts @@ -0,0 +1,11 @@ +import { StringPublicKey, pubkeyToString } from '@oyster/common'; +import { useMeta } from '../contexts'; + +export const useCreator = (id?: StringPublicKey) => { + const { whitelistedCreatorsByCreator } = useMeta(); + const key = pubkeyToString(id); + const creator = Object.values(whitelistedCreatorsByCreator).find( + creator => creator.info.address === key, + ); + return creator; +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/hooks/useCreatorArts.ts b/CandyMachine-Storefront/store/js/packages/web/src/hooks/useCreatorArts.ts new file mode 100644 index 0000000..0b297ea --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/hooks/useCreatorArts.ts @@ -0,0 +1,11 @@ +import { useMeta } from '../contexts'; +import { StringPublicKey } from '@oyster/common'; + +export const useCreatorArts = (id?: StringPublicKey) => { + const { metadata } = useMeta(); + const filtered = metadata.filter(m => + m.info.data.creators?.some(c => c.address === id), + ); + + return filtered; +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/hooks/useCreators.ts b/CandyMachine-Storefront/store/js/packages/web/src/hooks/useCreators.ts new file mode 100644 index 0000000..a776527 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/hooks/useCreators.ts @@ -0,0 +1,44 @@ +import { useMemo } from 'react'; +import { useMeta } from '../contexts'; +import { Artist } from '../types'; +import { AuctionView } from './useAuctions'; + +export const useCreators = (auction?: AuctionView) => { + const { whitelistedCreatorsByCreator } = useMeta(); + + const creators = useMemo( + () => + [ + ...( + [ + ...(auction?.items || []).flat().map(item => item?.metadata), + auction?.participationItem?.metadata, + ] + .filter(item => item && item.info) + .map(item => item?.info.data.creators || []) + .flat() || [] + ) + .filter(creator => creator.verified) + .reduce((agg, item) => { + agg.add(item.address); + return agg; + }, new Set()) + .values(), + ].map((creator, index, arr) => { + const knownCreator = whitelistedCreatorsByCreator[creator]; + + return { + address: creator, + verified: true, + // not exact share of royalties + share: (1 / arr.length) * 100, + image: knownCreator?.info.image || '', + name: knownCreator?.info.name || '', + link: knownCreator?.info.twitter || '', + } as Artist; + }), + [auction, whitelistedCreatorsByCreator], + ); + + return creators; +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/hooks/useUserArts.ts b/CandyMachine-Storefront/store/js/packages/web/src/hooks/useUserArts.ts new file mode 100644 index 0000000..b86902a --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/hooks/useUserArts.ts @@ -0,0 +1,90 @@ +import { + MasterEditionV1, + MetadataKey, + ParsedAccount, + TokenAccount, + useUserAccounts, +} from '@oyster/common'; +import BN from 'bn.js'; +import { SafetyDepositDraft } from '../actions/createAuctionManager'; +import { + NonWinningConstraint, + ParticipationConfigV2, + WinningConfigType, + WinningConstraint, +} from '@oyster/common/dist/lib/models/metaplex/index'; +import { useMeta } from './../contexts'; + +export const useUserArts = (): SafetyDepositDraft[] => { + const { metadata, masterEditions, editions } = useMeta(); + const { userAccounts } = useUserAccounts(); + + const accountByMint = userAccounts.reduce((prev, acc) => { + prev.set(acc.info.mint.toBase58(), acc); + return prev; + }, new Map()); + + const ownedMetadata = metadata.filter( + m => + accountByMint.has(m.info.mint) && + (accountByMint?.get(m.info.mint)?.info?.amount?.toNumber() || 0) > 0, + ); + + const possibleEditions = ownedMetadata.map(m => + m.info.edition ? editions[m.info.edition] : undefined, + ); + + const possibleMasterEditions = ownedMetadata.map(m => + m.info.masterEdition ? masterEditions[m.info.masterEdition] : undefined, + ); + + const safetyDeposits: SafetyDepositDraft[] = []; + let i = 0; + ownedMetadata.forEach(m => { + const a = accountByMint.get(m.info.mint); + let masterA; + const masterEdition = possibleMasterEditions[i]; + if (masterEdition?.info.key == MetadataKey.MasterEditionV1) { + masterA = accountByMint.get( + (masterEdition as ParsedAccount)?.info.printingMint || + '', + ); + } + + let winningConfigType: WinningConfigType; + if (masterEdition?.info.key == MetadataKey.MasterEditionV1) { + winningConfigType = WinningConfigType.PrintingV1; + } else if (masterEdition?.info.key == MetadataKey.MasterEditionV2) { + if (masterEdition.info.maxSupply) { + winningConfigType = WinningConfigType.PrintingV2; + } else { + winningConfigType = WinningConfigType.Participation; + } + } else { + winningConfigType = WinningConfigType.TokenOnlyTransfer; + } + + if (a) { + safetyDeposits.push({ + holding: a.pubkey, + edition: possibleEditions[i], + masterEdition, + metadata: m, + printingMintHolding: masterA?.pubkey, + winningConfigType, + amountRanges: [], + participationConfig: + winningConfigType == WinningConfigType.Participation + ? new ParticipationConfigV2({ + winnerConstraint: WinningConstraint.ParticipationPrizeGiven, + nonWinningConstraint: NonWinningConstraint.GivenForFixedPrice, + fixedPrice: new BN(0), + }) + : undefined, + }); + } + i++; + }); + + return safetyDeposits; +}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/hooks/useUserBalance.ts b/CandyMachine-Storefront/store/js/packages/web/src/hooks/useUserBalance.ts new file mode 100644 index 0000000..145d170 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/hooks/useUserBalance.ts @@ -0,0 +1,57 @@ +import { + fromLamports, + StringPublicKey, + useMint, + useUserAccounts, +} from '@oyster/common'; +import { useEffect, useMemo, useState } from 'react'; +import { useSolPrice } from '../contexts'; + +export function useUserBalance( + mintAddress?: StringPublicKey, + account?: StringPublicKey, +) { + const mint = useMemo( + () => (typeof mintAddress === 'string' ? mintAddress : mintAddress), + [mintAddress], + ); + const { userAccounts } = useUserAccounts(); + const [balanceInUSD, setBalanceInUSD] = useState(0); + // TODO: add option to register for different token prices + const solPrice = useSolPrice(); + + const mintInfo = useMint(mint); + const accounts = useMemo(() => { + return userAccounts + .filter( + acc => + mint === acc.info.mint.toBase58() && + (!account || account === acc.pubkey), + ) + .sort((a, b) => b.info.amount.sub(a.info.amount).toNumber()); + }, [userAccounts, mint, account]); + + const balanceLamports = useMemo(() => { + return accounts.reduce( + (res, item) => (res += item.info.amount.toNumber()), + 0, + ); + }, [accounts]); + + const balance = useMemo( + () => fromLamports(balanceLamports, mintInfo), + [mintInfo, balanceLamports], + ); + + useEffect(() => { + setBalanceInUSD(balance * solPrice); + }, [balance, solPrice, mint, setBalanceInUSD]); + + return { + balance, + balanceLamports, + balanceInUSD, + accounts, + hasBalance: accounts.length > 0 && balance > 0, + }; +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/models/marketOverrides.ts b/CandyMachine-Storefront/store/js/packages/web/src/models/marketOverrides.ts new file mode 100644 index 0000000..b56c733 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/models/marketOverrides.ts @@ -0,0 +1,2 @@ +// use to override serum market to use specific mint +export const MINT_TO_MARKET: { [key: string]: string } = {}; diff --git a/CandyMachine-Storefront/store/js/packages/web/src/models/metaplex/endAuction.ts b/CandyMachine-Storefront/store/js/packages/web/src/models/metaplex/endAuction.ts new file mode 100644 index 0000000..d865693 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/models/metaplex/endAuction.ts @@ -0,0 +1,82 @@ +import { + EndAuctionArgs, + getAuctionExtended, + getAuctionKeys, + programIds, + toPublicKey, + SCHEMA, +} from '@oyster/common'; +import { + PublicKey, + SYSVAR_CLOCK_PUBKEY, + TransactionInstruction, +} from '@solana/web3.js'; +import { serialize } from 'borsh'; + +export async function endAuction( + vault: PublicKey, + auctionManagerAuthority: PublicKey, + instructions: TransactionInstruction[], +) { + const PROGRAM_IDS = programIds(); + const store = PROGRAM_IDS.store; + if (!store) { + throw new Error('Store not initialized'); + } + + const { auctionKey, auctionManagerKey } = await getAuctionKeys( + vault.toString(), + ); + const auctionExtended = await getAuctionExtended({ + auctionProgramId: PROGRAM_IDS.auction, + resource: vault.toString(), + }); + const value = new EndAuctionArgs({ reveal: null }); + const data = Buffer.from(serialize(SCHEMA, value)); + + const keys = [ + { + pubkey: toPublicKey(auctionManagerKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(auctionKey), + isSigner: false, + isWritable: true, + }, + { + pubkey: toPublicKey(auctionExtended), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(auctionManagerAuthority), + isSigner: true, + isWritable: false, + }, + { + pubkey: toPublicKey(store), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(PROGRAM_IDS.auction), + isSigner: false, + isWritable: false, + }, + { + pubkey: toPublicKey(SYSVAR_CLOCK_PUBKEY), + isSigner: false, + isWritable: false, + }, + ]; + + instructions.push( + new TransactionInstruction({ + keys, + programId: toPublicKey(PROGRAM_IDS.metaplex), + data, + }), + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/models/totals.ts b/CandyMachine-Storefront/store/js/packages/web/src/models/totals.ts new file mode 100644 index 0000000..b3c3a06 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/models/totals.ts @@ -0,0 +1,12 @@ +export interface TotalItem { + key: string; + marketSize: number; + nativeSize: number; + name: string; +} + +export interface Totals { + marketSize: number; + numberOfAssets: number; + items: TotalItem[]; +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/pages/_app.tsx b/CandyMachine-Storefront/store/js/packages/web/src/pages/_app.tsx new file mode 100644 index 0000000..4d76a9d --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/pages/_app.tsx @@ -0,0 +1,18 @@ +import type { AppProps } from 'next/app'; +import Head from 'next/head'; + +import '../styles/index.less'; + +export default function App({ Component, pageProps }: AppProps) { + return ( + <> + + + Solhunt NFT Marketplace + +
    + +
    + + ); +} diff --git a/CandyMachine-Storefront/store/js/packages/web/src/pages/_document.tsx b/CandyMachine-Storefront/store/js/packages/web/src/pages/_document.tsx new file mode 100644 index 0000000..7b37df5 --- /dev/null +++ b/CandyMachine-Storefront/store/js/packages/web/src/pages/_document.tsx @@ -0,0 +1,76 @@ +import Document, { + Html, + Head, + Main, + NextScript, + DocumentContext, +} from 'next/document'; + +export default class MetaplexDocument extends Document { + static async getInitialProps(ctx: DocumentContext) { + const initialProps = await Document.getInitialProps(ctx); + return { ...initialProps }; + } + + render() { + return ( + + + + + + + + + + + + + +
    + +

    O-2S|tW;f#1X)tOENM+5B#R?dz z1BvL6$VXdzih?ziRQMvX0beY?*yc7m5S;gGbn^9XTWOoOl)STQ?Qpah` zWTGE!(R89eX%R)__Wj-tEBL@G^5=vbnEzV;_S?)WGzT6@r=?4?AfjKOL_LB1%Qi zqLGF}apTi(j!db3EbiagRTyJkD*s4|a%w*Q-Yg_*=ti|2ekF%An{=-JQXUrrQg1*U+u*;oeLX`hZVD z2mw_v^EA&#MFFbVyDf8v8SAVU_mU9rz_cG6gS8Td?P2-E&=5v`3g{q3qXY)`8Z9*a zq?B9<28hRpR0FS=hn5v;PxsljyV*R6y6Rt&K|Py1RzhKI+k zcbVoj0dk7>$4`%pcANo^!4lW$<-Oozs48>Q&7OvdEHB@)>qs^z+sbxQOY7^KQ+$^> zGH(x>b=r7g;JsgAXi{xx>t;sO@MsP0mo`EcJ~_sA)X}MHSO{WQKpF2**+#b9Lql4e z;*%;C1)CH49Z+=X<6~XNWJJ&DH8juZVVjoY6TIs5GQXbX>oy~5?dktvjPv3SsgS%p z;DF|EGi)2Q891igPWnyd*J#S`ur6uwZCkF?`QL(YnH&_~a-Es3%&RgUf7;eQBlHKFhwqMbk8OYB_;yIV(|n|zjJ0cgqxD{J z?nLvMHYHu|o*=zG{q6lQ z$UMS;fN?b=KUg1+eulm^TtWNa;G9~p-y-;5T2LSCZZCNQT2WNx2$#d3gEor+hhFXB zYClKqj_N_FBNFYB5@$62C>th>DX>^o8lz{(m#%NFnz6Zct$h!x9@w^3bb~jv0e$BU zE+*K4m$m`%t95<#oYJk!EeRlaE(#ex8Qf!qar7(L_I`yHnS7%2*3$7hZ*$6_{dT06P3jwmSLolj;f_MrKCBDEy=WCT zF-azI?NGx|JGUqim*aX|M#+dUu|NkJh z6=Qy7@O&Ubm_B1MdLqE&_uE$`Dl^_eY$NjF7a3LT^J?0;G!56RA)n7tlLzZ)s51Skyaz(HYU>Cck=m zT;~Yb8vUHEa7r9iTzHmyojqeFf1FAfBXdMF%|qsfI4LB;Pbm!l8eKB=$av)nYl`xp z`T#V!ZFG53nEmBtq;qGbO`v1D7w>PyC$Y#+i!}i@ve`HD=j$#7L$Vo%A zOWo=H3*Q(2`fxwy6z?PYSUpEQ9)T?!ETAs`WnP>DGb;@X?XQ4DO`MsMv=9k||7jf5 zaxurye5|*Z?~4VivSnH)CUTo^OI49oVKS=i*lui=B%6^K5QTEWRHADo#g}p@%pD_J zkPQF-0hd5%zoV*}8`D^%6$Yi##aG^T-{6_SarEgA?cB;2%<}nO#|I{}0`xB17Z*K= z4$*G`g}30?`^+mibf3iUU%;8ZPw_8f&p-G`c zhKv>m2iROY2M4zwpQGRE>Uxy)KSs}>N%{@o%!61j$y~**J$CIMCw@ zJiHIYGvV+Xiibx;6qE}>{50X55T1s!ZdgH=x%G=H})YX~!TWPH;LeGqJ z=uIZQIqFp6KHN#~Lp3CJQ@MF(q*N-tV63k<8ay6)pW9$?xeNw3@P^&=2#PaK;xlc+ zbwe_yO6c}Om_xscIW)C$$wc|7B*h%ZOj^B?xkHUkfb_W}6_^D90rMUn(-+irb!z;l zaU11wqg%tB>ATGut;wX-n4>bIORaVpWw|pR*CC)&GhjKNH@sP+#zCl+;(S39yzW#= zHoWKMKwHSX)nKsI%Bvig>YcWTROwJ!#9aart|tZac7*-~tbsN%Z?EL%?Q(A3aAh-? zA-296rhhJ^h_}k^D&nF>D7W9rG5~JvBU*0KYb&ai%%GsvBQxo1E2|awGd)vTQ>Bq5 zyDMud)$(Ky;mu?8ZuBAIuN8u|{T?3M9Hkal?-bfFZ7v)i8u%(^wn%1>fX-X!_1YthYA1rhul4Ov`oE5{|g&uQQ{@T#oH7hd+oRN z?LdE8F}+6Cgct6A^Q!lIcO1DDz4@Dl6>@*$`iH6CQIC;6;7T&Nl5mX^H{3S%S_8@d zg+8FaCv6IWN;kHOS1B7;L=XbMjdQ))d0X!U=~)Br9gX{jp7{&g!M(j5`a*ha#=WL- zpV1QOvk+t|+w0O_Yq($IQQW?R9f^sIhQt+6FOwRr6_^K0{3UESGlwguNF`>R$a5A4 z;0X8kd2Y!4ngcJS!YgXj;Fx86FLeYNNr3Tj`z;%x32OVVm{HEupv zViul}tBN)X9P!d+!ApWy1k7~F6EjuSe0E!DQNmm0%C<_RX+=q23VZ8ppP*OAj?vV_ z>C+Q)_(1%a)FSesMd+KD*mF1@EWUwld|B_eDHJwbh104~SpADin@_Lv+muS1U#Iuk zlz{z?^*=HqQU_2&*{H_NwE*!F&TkG^;s_I*Nnuu>XJD5--w3Nvu-y=tN6%b%7MMrCWE;vk1i;A&-1lehxvQ(Ohqv|XC+ zUdA^6z%u@RY&qQ`O;0ZWb(K-C_TB%qx?EOEeZ9rr4s+vgx7pfZu6*ri_e3_l9lc1t zcDvzgA52~0>q(o-Wh?!{4|Cj(mII#pfWM)^H&*Lyx8t~g+D3f#>CoU>wD*eNj$QE^ zvhMJ{t&Hq%h^P$BV;XWhwSlvHZ@FbJ*~Gy2;eC+G4fk<-9(&K8&EL1Kg2Rd8ni%;y zq^0^esVM0fUVC$xD~mzuVZKd2K)+0RsQ*z$BPX=MY2;N5DQk%H^<`B$Zf_we11?b` zGs$p~2iZ$9Twq~2Bav0H8aq~Z<>J+hiv5AgpSeQ?Bw|*9wjouSRiN>z;p;lJj;+?b zG*@@54usA_bs$}U>Kw~y6}I8)+RQ z;@-;JMExy2gOVRre&;I{e=8a4xlMU%_5G*Y=li|Fp3YA6?Uwxm^$RCb-Frro-N})O z58rgRyKlZV*^T+V8Qn`Sk-TSRt|~^MGTk!hp=rfR=BxsjkWk=VTl^`lAjMA8;$>U} zgCe@37>s11F-kyb0agmE8UI)YQWVe!h9{mH4K9fp1?>)NuxvIt+Oc5NH&iVZ##J(8e$b2-8PJje^CCDgq#R=f zo(Zm=0(@v#S-Q}0u>laBYJfh!i4Rl*bS1EYt!P|Z8dpy;kO^@3aWUxdaypEo`HEDG zLZFwcEVN$G>oYWkeF~Y59;H>5dbP0`U)AzPulUU)1Km~9Dz(NQvjGiNX*A#52*5fu zwH^J84g=qwz;Y|I4me#(N=9*s5y48Kuo_!u4Od*l>BFoAfkmW*txhW;;eZn2`-dr# z6zS}rd&5ZX8-yta6a?6{W5xK|NcF*QwI)A&0<;!!eY8icY~fU$z|T> zB9RwGIE8r`OSL5Q1?Xat5wS_lqSbs&IX);nLG<7&uVhc42jOo*_wvybCy%*yv-|d7 zJ)sv%+s|zcl7O#5`->E590s~b{c@SPrWtY5657UL-u3h(n-}Tzg+HX-`es zdmeof+VhlYuSC4&8V>}aEnK(Z1$r6U`bVyRkYs-9}+toSY_a$pp3HvSgbq@`7b&m|u z*9Y|hl|(D`#;lgDb4L>DAt9O4w(z>_DVX5+V2V13dy1|D+O5iErkAYryqF-N zB22Dgo{4p5!Q}JF3gc5;R-Ax!F;v0q3ajweUZ%2&OEQZC6OXHeSd_?ww$AgHFQZ^~ zODF2ppc}H^?AhM)(zQseA?sNIhdRJ(MQ)#%^hvid8-~wtMfHliLh(zxQh~ctLAoNT zDD4W!6``VcVPIgP7v17O)7f9Tce%4?P`?A_oYXxcYduERy6OlkbJ!d>><8aLXyH-= zm6vx(a(^3pKPRKud>DNHG<$!9+Ydwz^xx&i4KS)z98*bdzpSQ%SV4& z>yC^>bZqR%`aASlQj5Eh$bK)X;qoxwrcc4VnkZbtK5zJM%A2>9u5VQH#f9$fg^d}M zU(|C6l=K&N>=<1894Wj|lt=lQwRelMDB1XfZj$?JfU)9a?|f)LA$b>Pf1_!)i6rdi z(sz~KEis(-jkd8_yM;vFCrK7K9&`J8H~Qc7>oDdaGUj1C<}xv0>XMkQ={#J{#dPV{ z2k5^c^PwX%f}Mg~c~eE+HHg9tJsoZfn(d_6>F>V$+dk|iv}e!!Gtx&7 zH}Bsq3s>ghCQ{pzgQFAF*NX0cD1W~O-w$*mg~O}FH>Sb70oIZwx1MknOyCb-2TD6} zG0e_RTn@977G*Efz31THNLGZ4Vxs?^o}SL(=hLK54P2j|BF`2BlDtK+UTQW5jM@gL zpOZeZaLqqa`TOe$o>{p3$1I*3)(5CxlfF`%n;UENdF(!pDcO0xn~-o0rFr6AUteE^ zM!HCh7u#+v*AHBm^9Q7VUN#nOA2;8C%Xpk=r>%Y%O{^)yLc_vwurP%+CV3E6=g5r*ZcF z(W}6VY7N#94nQ0~90#!Nybo6sy!YPo_o0ve@bKXuPG-M@TFb@ksY_z^3UD14!_2~` z^KdyA%QpnPlU-vu-s#*_b5MxiM8t8>2SW*m?gJNcB?t$)H7=u!-P-av4Sp$l=-$$j zg!}I{RVY+CsinYE*}goR?~9gtV*T|z{H{E_mKzhPJxIpX!pSphS-29Zis1L>;WDHx zd%qOh>SgRfX^|$B#X`t9-oKrIL8F*YohNl)zue!;j47 z>c0$-`d~p!zudfSs#9ypZ>I|jvz9CCb$=+~HB=d^%U1W|E3~x|lhdYER$Cdi&KFFX zF({+y&E>uf4Hm7qE}&s&?DzRt47TPL#=!uKgFG%V{H;9vnPNCoL2+>O?sdiYzn;JU zEAuQb<8k$?44gKDb+FA9b!0YP_re#ySW;G}o9O?a+gMtM-b0>8V&RxC!Se>$HG0BL zV)@>Nhw8|9*jT=2pQlP{R#gzLx*-PdJXZs1_rgM<{M3%MKfv$m;CH_#IbK3M0+kIH zeyscHPyKM~3nNF#J++_*EkoN%Y}plSLWNaW^uY6>)}Yz6U^8JZY146!=JcbAwRbfx zHW+}>s9G#ddjzxSUAB*_x;qtMLU*B5{e<2S) z!rjlt5aRp)mhI=Y`Tn5m2z-Kt%UL)`Xmp13lZ9WBvT)nFiPZ4n;OIoU*q^YP_a_|l zQ(Ubb2dT9)KqzISzT|wL)opTtyRU6bSQ+2VypO6k2WHFYN#dOY?_CLJWCv4Fk;?f^ zp2@>aWSkrvoiI}+HFS)eZd1H9uf&W{#l9OQYE$?2_AZ=&e+hYARkgcrWULpB?VUV% za&qtBp>6?xjxQP;Jju@GJLrBwyE|Fh&Cjt3KPwME@n2VmvoVivaK~XPGM%h z<^8MAj8bL&u3clrKDE`nPwiN&82)-5{*`E`MQ?n>Rig$T9=cg)}>D7Fn?ugyQWa~ z@+-LTWpdYUT=-JZVC^Zbfr--DF&NiLpilMsE1TkuPDYOI`R+jP4T(Zxk zBYQ*NMUQ14!*6oF`o2}Z47Z(>Knai?qFlTGQqr!0wEK_fvsc)^DqGQ;-M@mi-YMC? z>gW3ST%nIw-oMJf;JBN-dU!0~N8Ik~q>ta?+HK?7O&8iFMRc^AD!$}0WAH^{Ic<}s z`}6He*573i>F@JgyA#~le^3~E$r}qw3M7(|T98(eX@DiPOgM;VC74qZLcalyotKRx>6eejy&N zTfmsm@ulyWUN+IwnF$k`UfO3mi9dfN|M~c05SQ~0z8l2l{DW}&f#50pSr80yQCWCv zJslz;1wj(hq{Qj__^4UV=uJkhXby#=HSp21f?wazvYa+b)2+oXl4fgwyuTMotJ-(9 z7bQRA`!wh|#Iph?u`73P#^8Z0Ma!9Q{DW8F5c@=YaTy%F9nzJSpDNv!J}G z>io&XY;S|GyQ2eLYTn!DK6OKT=j2dZNBiKm51l;g?3rtB@8I6~xc&|ur@uj^s5>bj z-3@Ofhl?;=gb6{4@s_9<(;_}3#bomkSJ@;nCAe&i)XG(Y0CZGoq--P~d7mfF9&50& z*<&O~-n5)?u=OPzxJ*$xSyF^Z{g>7ts&5gB?8zOWBPaQ1#Qty~A>@B^5mz8`_v&o* z^l@6-(B`(bMtll`jy^zF)!J+Me6eUNTF|vv0>d%G4b$OpB4Uc`wrYZUnW?&>&Rp;8 z@ayF&xlyiaa2kb`buwL`HdlWrN?!uG^=Q5xeZJ7pQ3eNLGbV-xD#AtnFEUTz%I!&9 zue}BzL|pYD|I$mMS48+L5&ntDBw`7Pt4>5V#L3&1#j9LJB59>LSCQxvu1;jGWTqFZ zFsZ%2LPT30`u6=7?z{E5hd=X~&)f-rXdBv>eGO@|pK9xDd-Tz^PS(cq!Wx;UPi?Aq zTDPg*Db3b9rQc7z(=CI;BZGsZV*|-UgZ1@;hmy&IgZ1u#Lz9OO80W7&xZix>(0b9 zQ_V${i0d{K!pE#OL$OuaE?66kiV5vBM+xDi{BjU;#^55$kP4ZYcoD!d4 z?8%+6$V97ITi;~45h=4W%`a=c4c=OBG}Rl~(PpU&^?EF=O-;t@+1h#5^+#zx^v$1( zN+Zmvt~e$g*TpciCC)$+h!K9#kC@9fyeP%tUifW4HN4e~phld35wSG)B4TOHU;H9s zPjYXkoj%3y>hJ3~7Y!zxqVeV);c?oYoNA6uv>4kW$pL%!++l0mM5uM3v+2gEmXNTCwsiof>=OFYu78G}rLQILA?_&BMCytqs1olW^TZq8L(D6B4>1p~ zi88MteiU_nZtvdP(5qn&U6r*>KKwemHTwbbj^{_g7QK$xG6mIgBW_9d(Z+WWlaLu4 znqThK!x^1HR)o{5zJb`#Hq~xnPV=Njzcta*+Y;;5rugV@vR|XsLvi0|v)S1_bJ!do z_G-x+h?DpY#E%^Of!1Pf-4ScrowDM1G+3X#f8qOw(R;psnD-aHf4Fn#P)A+E&~?eV zo2t%8LgBvcjAmCdyuIBDq>xB#!S5fot41WDU1xgCQy-cQPEUKhcYeSXwzO^!$95*I zv%|^ch|(T3^bT|Wa-a(d&_(I{hwF-iU6faT|L~z~2ECd6&vP_$ux70n>sSqdr)Gku zFwogx(OTd1S{^G~XuJi`6tT9jnYc@Hkz)~hdeMVlgW{j<^LVL(P*9e)3?gM0sQr@}>P?N7e zq|=4^yv;*O^{&pySgdYuN2`H-1F^y2GfUA>bJ*Y96smRUYgk_XDBS`41k=hu8D5^J zdNIq(J%E84v4Jc`17hkPr6@08+&KN9hEN4i!kwnD?Tto|3luQ(>!mR7( z{i(uL$=xkRq6+(Lv29It=9ckL=iE{8Nm0NX+kutgiFoHzl3I^B+>(7wtf@CgqGFz_ zZOm8OXxH+7AvOnl0`+}S3vY5tba0O^D*BPw80-r-47ECVx1$ji-XQxIQ43m7nzVA^ zcLY%q+X}c0a5XmfUH#n`B?UI!tn?uTHr=@bn{I3?}jORH*Gxw=#%HA!(8y!0h0r|nB~+P+k}C@BQjpBdG#HAXk8_jvBTD~mB83*&OePD;q*H&bg_>HYeVtaBTc>Qs~jp9H!m=Fq{PxAzo?mnH(Lm%Nyj96R4US*w*-jAxZ_FAz-IEwD7 zOV~nVapMj1v2c6b+)_7I8#Y+=6-KjX{D52|H!9VQE~BW{s*C7I-CK$dk$R#ZegE}D z^Gf_>(MzR@`_;>e678L9U`nojmlw{LIY3 z4<6oi*g0@?;Ddw5hMbNqN4Gri$YW$(%){Xe#qZO*(z^gR*cFJiE0Fd1@7;cm?)~tM zpT!wBY^a9t1m3Fcx)iT8Aq z?t}GRE6eZ{wM3;=!2BzY;Ws~03NR&b5g$Q?lv8`_6dYH}cofpjYVUiP63+ISP8)p_ zEwhAdJ#DweBZ=lntf`xS5{!x6@z_MGF%@nDV`5ffX`6@`{5C~<^wexD)YzPi`^Q=> z#&EB@ZAekGqYp1|)?USNm=W@R-YRNKnVHOaZS7jZ9RsKDu!i}<=RW)vI+1;l#816VTS%{2D8PCjSyJBh1aLj;T zU~702PUMB=f2Dz8ZJTT}GdJ;S3|?!Zv%59crRn6O&u70us|I3$u_lwFds<>@8Vl;` z4bqWrFfa`0!r^ae?UuHkv6ktSjm0S*QwV71FR?M`_p~w4Uua{*1`ed^JVS?*)2Av< zi~Zr=30kwGEx4`KV(XYmwD$KWj6u6{ND|z6y4SwvftkS6UXSnAJ3xg@Ohn?7DckUw zx8ato`#h##u{W_=lNm4-YBIBh?w004$3igoZv4`EH}=M6v>|tqnGw5!mBA_5o2(2q z@`k7TJ^jsrm@Bo->)W1mH2K?l>iec6bpe}lFs2VUR4RMG5J)5gzEmd|7-P}yDYbGi z>gx;YbiuyH*nmni*%=*=)m$tAxw^6WH-=;+Rb0_n>~blte^g>ys9DpZXqdIvE&x@;ng@qy&8|cc zSAp%AZashQp)-lWAxs_O{d3;%&1c;qb7CTj$>GVzo4))NG~b)(A00|{3{iX%Q}S*} zF71*3AMim3r1XF>H|Uf-)b3pFafxkR2N!kP zP4(i6cZcNCviCFGP21J1%2XJDT#I`~*QPq!_n9ny5?GXB1o zm}g@o_ZY;FRi!MCM}o%9UtaNxrz4SQ#29v|HLi%k5W!_5BB*0qws{-+QdF;tM2rz9 zd>1wtx$i6yoi55j3%~fuuC-{#RHJWlYEaVvU$r%; z)%9)UtHJVM;9b4cK3YNd0j*l7r-eKbkCaZONR=G2--#lNA|d>K6vJSxc=h*EA7go+c?hq&Mr<8AVFerEskB>1V|7h zaS^;gfFMOt6iJB`B~#)dN|vaTq-e=i`YhRXBsqy+BfYAUwVpyKynLCVPf=)w4sC&h9r@V=V!?#zYPAd9|&f0LrVq+i&OG zQAbT#*6qquus`e|Hi184TT~NYlPYAA`md1+3ik>=hjj-yf9n>AFuz)O_)%fc@crX5x*xsfy$urzk@6A*oyNy)bRJWz!g$P*xtq1Ai0CULdoD-PMgQ^ z!&y?8v&A4dWI|}?E836qO{T?bG_&uO@ep$ceIb!NR17myH4f{PYaFc$}KN$b2E^>UJJEwQ=y&(u}WA3Xee!_14@I zPjU$JBs)8PGCTVdN-=&%GtTGwA0%$QAI@X6{S8X^Nf&u*T;NUC=MF&~DhMx+SyRGc zlc~@WB}BlNlv4a)&{8;^&GYqmq(yu^-Uv@(vkF^}=E$r;E1_zg7K^i%l4uP(m&|Uh zL{?i7iNzunwK9p;ZT`fb2WDx9Su5Kt)tVjj?6KWrn5*YtJgK8ot%qEQt7lBaIyeOM zP=E_*z>;rrF_&=9>hz#cA z|HS_(c&_f;8n;qMDYd!YvHu|3I^2|;I;31sHU=VNZ8o-TG?IL=!sut4+p>R97`$9_ zM1gQLR|L-$vlD?9#rKt#;F`hnm!x6QmxTOiSCP*|8{(Y-@8Q8>qw+@%?L1Pkpa``* zsJK#j;f2cc(#}MrRe4BpeD|S8;N(9FzVXmU4ju07{6c4{b9A`7cj@TqlPDSq2s@l( zHj*zP8{Lx+sVF)ejf&CXKnz8Pw=~Ty${tiSv^2HKq~H3YL|W-dF%BO&kAlN)duxkd zYcY{~B~1aTv_d`vKETAe=8aM7f$4B_Ta=A5qlRX)-BM}geBM+eQ>&}BYJI~sDr>E& ziQ%!12(li>g^4v>Hd{aT?b9DTaqQB$XPeiA~d+?%V6_zrS;;^Zs>S zPv7p&>8|_xF(2w2_J5$bDj~Wwe6RfV;tBBkGYg*-Vx@kl5Dj&KFXLD&8eJpg>3=)Y z6=?}|DvwB^?joRw5 zehf@c!tvvIG9ttziL#~t9=P;(JU>2u9Q-ikgG+xLQaqkLgY*wW{p~oWNZiBX+}m+q z2TLtUG}eF}F3#iOUPD3(p2@yO((9v*LowE!+Of~pIv6ye#d%L+&~63i_WaP`gbSE( ze0#S8_m2qd9|0WK60CM_%V`@4TGO)$8|(~S6UQo-lr7D@8%e|Fj^>d#>*(Iz8tY#d zw=}tE+SOdqIJ(r^vGvT3rX5rM#)nUP!d%-}D0*MQF|#3&!YgW5)T8Cwuoc?Qh2wUF zxKKWky#juh{goJuqlggH*#mV(IB%VT)@!b8qpL4$VFdy$6TQCmZOt)v*QSQRNT;i< zsjIIpJrRnnTNlO9O^%=?81D!Kx@v4*96IZrpjQu^b+@-CG+e-D4G3Ygws^Ct&dle+ zHsn4J_k8>uR?3Z=hXaHo1}a#hAe?m?m$)nYvl@ znU?H|!}FV3zqrF3t)XK;(r-{Eq#*Bi&dmkw0!+h4iA ze|mGJKhSbWL?LBTt-_ok zPT1i5yDk=yzmoaPVq@cdf6nUjC`%pCtb!!Q4qG z=aF)L`AJaq$Q1d=Kt=WoXzpu-cI?1ofQx7n(Sl3HfqXwODKUIaJv5`+RL^f0%n)w4 zyk>7+*03Dg#8QhHnH%lW%Fy^r1SBnR(cvek%u=zU|G$*nV!eutP7viiWMCMhk$KWU!>JkkXN4NYT5eT2tF$o)5%26L1gyhIS$Pm2hg1u7c>KM9%Q8rTKo2(t-Zry)ul?09dr z9CkPk%X+!^8vGIvuc2Xi5q!-n#n*_gWqb{MV}pKN)~l=PR4M3$WCieb-(6D{s$UvD z19I?Mv8=ok-y+DW#k%i;dcD48{ftmn2iE->zQ$B0%Y=7DxQqAfgA^|Nd#jes2xXgd z=V2R2g*J$k)R!)9gWS`^H6kapLAXRmT5N;dGq4^~p$#G>Z9wPS;5=*tsn7K3)I;^E~fcs4m=H}sR~L4+q+HFDDT{m=5^PD7l><=6d;_mwi28) zCXbUQ2hRhJQesTDcnKyOQ-sO(G>G8xUMa}IbD+XC)!+rtkIQbwq$)Dd-TWeRgHQCa;cW>_=5s$nD%6hP*y|rR{ zlMnWaI6Pibk8!I;SJ{(=!;7mT(qrIyAu4MJw=-3hcEK@cghyJ!SO_cT(R@M};V0Ho zAmc&H7)9e|6!aMjb_^MgAFp&Yw2;=YM?cV+7#OU`qxgip!*~9DT7$dz`yYM zWrqs+;a-&YC!GJr!Q%68=g)t=Qb`_hnYDj|a)~X-%I0FbyE&X&{P%gw^C^Vb;3aKv$LQk|2!X1&9YmcG*N~v| zx8{oKg7W+Ec@I2~^ZSo=VeJZVaoQ+m-b2z2FJ_9 z%mO)F=J6Pq%vfSz5rfY1l*UD|U_%VKV>3?9z82q1Tk5zwH4$kXigUEhWusL_uUYT6)8^(L<=A@8&3S4VowicNIQ$k@ ztT|}e*wb_8A4yAeO9!X(wR^0MZkxqit*oxmYt)>#+2-r=>&5&<+}E`$b74^$p?(PW zVAzL;z{m{h#WNeS{{y5Vwgh+_<-CG_<#S&57jj#XObgY^>V%;{4TpynnROv3J)F@6<<=cDA|YJ;;8^ zruGCGXsP_-r$7DE7-cma&VJ!usD5D`zeElJ2YIIq^BBXA-ozmFna`3Ur|9zG=5^$q z3j!zPe}LbRKNdJ4-@u%ZX!qwo<8z2t9-c$~Dxih)iw_86FqI#JTY)Nj8+>3dk1=lr zzX6MDVB0T_3D;0Ft6hV!?fGk(h{K=;{BBJ==)l#hS9v_>!$2io2j?s0c+mWHB$oFo zz7F$eB8fasKU$Ml-i;R+Nw|uo@I0J{!C&50&YC=&MS=j)l6w{;C=DMIs|c1&=2pbp z{+4ZTv{)M3*?rci&t&pNt@~zOQ}Yk^uX|*E%H`d;@K8E^VqwOMW!FI2R#A3kumIFb zuNrTwvG5`-b7CQLvjvHTQn2jd++ToUN(I*-^{XI5;+GXIkZ~3V-|RT}W*-K`>C-ua zQfI1n1X3APoPr=z~S{Ip~e5(_GTSftAfi=7jtXKCI=8z^C2o^}xq_ zWo&Nt#8Qolk{KJE&IY55QYm%u9SM7YQAkztXe1JqtE37hV4s*=7}L2eHCt;e9(pW3 z)TEyP6->QjHkwkadZM$A22&-N;BE7Huou>+PDHEC&$06Rj|JOgY}z`WA18CxhPWxv z2Wx|MV&RWUJ{b#z>QH4uD?)WP64xQ5gJT$u*7@xLlU$;b$HL*5TqTj40`|m?xK61q zR8Os0dI(gS8lc`iDs>9#UC&g234PO0e2n(s>bZ4e3zM)O>fDRqqm*)$aVb9$rSn+q z-o4ph@1d0M{y9IU)xvu}R(x+sf5T2yn&(vl&e}b|#NP^tvD}NqSJ%9+P^OlLU=|7_ ziD2$K)E@HRh(2PBI9nPCx52)1L*TFL!XVktgS=B2w*x1|dTzi8!9_-MX`S@;MgNUVlEHT-gUd6? zg(NwN!mz{A+lA~I@zvrKI0N(1JveyDLS^qGA-Y$ZTk?ZlPwtQP9{tSt){pONcg1@h zoiPPH(AYn23-{H9!jeQ0#^qJLDE9G%@j!yf{EU#q{T z`|!s`CZAg9icCK`v~FjoxxwRUp4`+j*5UA&V%dIu<3K36f6(7D`RGXcPbMOMk3Htq z0h`tpaWn=8QVk)VW17qoSqkl`!7MA8tB6!(9(^Rx$259#aXiP$G9nl!Cofk676f^o z@sPopd@Qn^I&}uMpM_F_CF&!XcfySsWDA%c_dhqEa$Ol^@^&1P0QhB=$w*_dE# zHiiwmdCn$E4yvgq1kR?S-h(>M>YPoKyoj@D8~HY9rQX2%B0Di>(>%&sxS+ac5P z&G9Xsx@j4;0x1wTEzj#u>PbZ1w2Y{m$a^7fGMLQr9o+zzlOD7 zilvRRE{af9s}RMK8h`ch^Qi&Yzn;L)f*kc=@d+wC5_fwV@?=YJqEO&lS~#|T^alKc zefZ27ahQdx9WO#thafE$2co zCvef-w{=1yol@|?CI!5f6HpJoh^Afw(Ncm?p5N+e*IaTzJ-isA#V$g$7=%iTKrM)% z!iTb?-UF!RZa6IyV|rT^&AQpuVOk26!6+@LK2$D^IS(rd!hmpxF|4wjs^gB+fdPyx zOmcUA$wLX_`3(3g;tIwiHI{L*!1c+)B#wrKC};9`+c^0~Hi!EMyaz1cdoZs;2?o7z z7aCfMS+^*sDCLKOBmkha!kP{}+h_;w38H}1umXW4q`AmK`7D(0Lx2>Svxubyuz2nW z;M@_wA!r)RgOezZQ=wypU0xR}UPgS3BWPBstiV9{%3y|2Vm&dwg%Zc-&~%4iQ99q( za?K zn=*t26DHF)@V+}Z<6#BZ4?=!>d4!&!$;IW9^jVrbviugELtiW%gkPCk2$$t$8XAPw zT&%)KDdwA{Lo3Bcp~NtZ{G34dbTAE^-bU6L+|moIBE3`gvOECXcCIeyuU+3q3Rn!_ z7vM3xer1VunF`L%)16{<^JweFV!Bjxpn%I3+3id@)qC;eZkCGEW zN$H@TmW)iaK@h#thv6$dQz0kvAxcz^P9~3{a<5xmoo%haV&}*SCsz@TQ1uEYU>Lmx z+x1Oo*Xt|nD%Lrp&=gg3W$lV8Q&s^H@8cqPjQA|>W9baT_b~{g5@$i>Sy z6mKeSDc~5fpa7HDp3s=pH-)aHz|3bt2Q!p)C~sLq|7W3Fy_Rot2KIg@YxOkNVbhiz z@%`%~IS$BjKO?G$x{RV)gYBRQb}I>mM!_kX6p~5!7-qT=;~ZI~z;=e3$O;Z5RG&;}jQoHc^%%q;}Xa#C?tfu4Rv4t=qTApFX_ ztN@G4BZ?Vl8npEV+hS$SdwYckeY`gy50I|H(~ZX`jvt>$|IhN{6ZXGy#kjF{iC9n(;2lRaGVWa>Kb z7G5L=fwyrtnFroMGx-wuC%Vb^lQO-^@=NLKft=}KJ{|Xr6>DUmWjfJA8JSYjVs5j% zxDaDAU5d@pLS__m#Rpp7VvZ}?9`n5O zz6pH>1$|DrM|;N~S>!rlR7zFG$V=LDYJ?Vn^`0T~jQL-Bufgb_)!TSOYlfLuS$yQp z(EpNsoU?}J1lVF_vCKcdmUAC%xD<|UE%Xqxmy1*QJc1$tbOT70mg&8>P*Ne3Bm@Y(1_&gC-U&VQ z-g^lo0WxK;SQmYtG;jWS^ZtK!-pmLB`sb&c(T@M~BW3~=5SV}pRKh|Ps!@YlL{Nu% zG@ubpXvRcL!ep$2b+I1S#|GFC8)0K?f=#g*Hpdp&5?f(wY=dpF9k#~~*bzHnXY7I& z?21;j$=n^7f~n}lG)%_~?1tSj6MJA!?1jD2g<0svZ1i9b=3*XtF&_)ihkekG0ql$Y zun>zdh#~Bc#W(;;yrxET1HsMdN#0;O>E{wPU2+zfSD!Z3vS7+xHY%ow%m@}a|iCoowzf1VGDO068 zkK|E2n#b^19>?Q(0#D>gJejBPRG!Auc?QqqSv;HP@Mk=i=ka`Az@PIM{3Uw1|Kv-2 znXm9wzQ))22H)gce4Fp^UB1Wn`2j!VNBo$d@Kb)q&-n$v)9TZ?VPwqiT6z1TtQD0UJ%i(N#E*j2QOHqkCR#1t`Abc$(W zx|kt$6T6FoGk&Te?POd(7IjiNC*#EQXxohTik=|jPZ(L|%3sf# zEtz(1LQg6#dgog)({p6cU2b&^XPi||RhN;g>hj}$%2`p{m2p#XI~wHVP>*gS-BC9a z4U!|Cv%0oB=I89F$|}WeInnCTI#!SF)%Fy|t9nA^9-|zYTa+=?wzt>LEzm3G4cnQ> zyduZy)xx#CMaAAwvDYYCy*by5Ig$C}g*!T}K3%%ir>hF1vnu+emep^D`b&nUOtl7d zw)%lYAeWyBlAaypss>EL$UxS!vk5bAVc3*RpW10HGM~(Jdm@X*mDJug-5S(0>IS2J zGHHh^GGkp8gL3iKkSSqktrCX9H4m9JR}QKDv4-@@t;J@878kSCERMO-4_P;BEskgG zRZe6{$tPW+L)KC~t#)Z~FKuH6J4|MWX0VH9upN^tT4IK1Q6Of_;21MF#tcqz>zq*8 z3C$2MGebvhyl94mGDD)Ia@Ux_Eh@U9q8pmQHD*{|W`=2&XSU2MHA8oWr_7Ktt4i5v zKby<=>4amYN{!KJ`DR!AwRXi1jp3IVBNH~I#+YVhON}unk}WgFjEbDv{G4$|uG}57 ztiY5ItW`n~u0IHk5olus#u%e!S)(P!7%doM)EHx|@Slm4d3R(HS*m#1D*;%Bwk9ceUo|lp5*0 znv`;lP>o(wOU@q77b9V{TCoPYDhY~J$&Ri{%^2}~`K>ik7pTTmfvQyn$~G)eQFMVC zr~(y76{t9-K!r?!ilhsaAR@2#d^wF0=MsL9wNo)oN_#<8&r7-~gX&eN(5p)ZUd~N> zV`hQwDmUhsJSzj+(~Oj#D|8y|bUNd&F7&HCC#!WL@r+~3FQ7B1V1d#UjuZm5<~h?(qXc6Az8YRES*o5&L>M3lBFx{7Te2J=G5O>Ti=8R>f2YrM!R@r zs(!tlzf%oSU!n>|!iUsgb3rRyqaRd-8j4S=nXB(@JrZ{^NqN$TJ*`@;UI$GvFNA_k zrLTkvG_Q3ceDCmL!G!Vw{d0QWOJ^ciut3dmLOX1td4qiGVIkP#^e*Ik&}wa zr%j_|h??So>t$u#o<4m+w7C#42QZ{~PSVenQgk3ssVkm-nZD%k2hoPovmZno*E;%g zX7S|9nI#85h*s-|Saal*e8*DXE{Imznqsymh(-##CKnfOlpHpjA%#meS%%G*lfc+O zW+=RlvQwouRF0bclQow<(uy$Bl1=!TT#bB54KmMq$28Tpx30001Z+SQ#2oK)47|Ie-JwR(l#*kqSQP+V|9R9ryC1r^bVC>S-y z5Jb(Gbt2+M^7&*PXA)z^iApk#NoJxGWAcv^K?Okp8x%qIrGaj`>83ZjdZ{k&|9j7S zRb9OSB6dRE&#ijvx#ygF?)ja&yn13pBqaZ40uq>f`86{nd)^lxnlA$+iQ{6e1o%ml zQIc}Wty2cenU`HMW3XIs*>t`ypLWgU!E*id>#iLvx6YV;^WrysP zt7H%98res>R?0}zq(Um?I;k;(WV#t*#>rzQ8pwf$(>Ge{^OP8~OG`fxoEv;L_{ZS8 z!HT4d`z+{Fm^?lCiR8DFYf{cn`C-bz)YDUco+fFRrrnk{H|?icucR%>dOfW&2llc` zvi4^`;I`5)O<$P(o$Q6#i`afKCnc1dGd5>Ip8+|gxj)SLV@_#kdQN5NmfVG*$3idV zE(-l2v@TSUk(6T98yQu;9vqxdjUgo+^00;Lio`7JOJxQy3~7UwCuj zyut;AKP+5a_@}}ph1&|lMT3hjExM)XJ4L&S4i+8iQ`l!fpAmg#kiJIx7D+WkEnkA= zrBcJ`qyX(BgI1D7N>ag+r56^LA_GaiWv~pv0*A@TQb21QEq$=LGo+uKg(VJ=Nu;q@ z-W75xHaAsH!@{nUaWX@0;;NZ)JJ;PsI!|qOg3KpPlyAtxa)CS|-;>GmBY6tjTui!A zen*<2wtSPkO1fFzB7H%YlWviBNi$^)=~nrOG)uP2F1bx@{0_D8FJj^QfpcUY0i|V%>*++eqpXQ)8rX*i@8<)!`xx+kmt=@ zGgn?P_nQZ0vH7-HB>!oan78Crv&?LjznC4SOxBsO3CkAKWSV5FiJDJjTOcKnB0B<^ zfh^e>$e~s34)hNUkdnagzzEqJ7!?>TWq~n)F;X5lGjJv?F;nuM;Jcc}$d>VNi`E>Fb z_UlPAL41$MJs2;Z}8liUX1-{knW$loS^hy2gv?~)&eBRG+TNz1AUjPh zB7cwkBee1|bat}6o8K~M*RWknt|K>-Bji?cl>7W~M+?m)+l=r|(tk-XSenztp0 z-2|x-?%|GR>d;w+SI=|F^Qo1G^y&(;M3T89*({eNvx2-*k^-q%Lk9I4;ZCddT4YP9 z(`L$R*4n?@Hn{Sw?eHJY9&w$LoE!ouum42u=9l24+(`+Ql(3HyswttG5~?Vnni8sz zJ|ek(-8B0pM3rB!1V_CN>eYTdH9|eCS}3-4PI}c}Ur9l-OxjkSt?(&09;>17Iy^?9 zQsK9#a;P*xB}y&4r+QU=a&9|PFOeLmMybzK>NA!43{jsUN;$y&s#|!rB0qcM=G@^~6?IuEM_d0wH`x7giK4lCum z)gG-{u4fYm;?|o&OKzeSx6+Cuw76DULo2PJRf2f7RP}66*hBb?1ss0_T`sic_>*P$ zlX}me*kb%im2s^&1MgM>#kKgXW++zS-IA2XLOkQ6l&c;R{XGdk8DLr(a<_n4+1wfC z&PwHD9-J+vbe1gvx-v}RJ)EcWMd*K?eI0VG@u z61w`@L%W+I1!k%YGFMS=@aET5l?!~}*rS*P56-id;6n}6Xh~3c0X`SgUW(ztNi$XQ zq0(P%9#p36Eb4qH@(!b{3Fv*IE#~ep+?T12`*GEKa316;3)h?AI*F^oa9zrk`?SSA zZENILSmJY>dmf4}z|&&sFE80uD#c#f+Z4$#S11oB!9%vW*?x>P4M^ks!w$8F2&HX; zr!q?0Lun=OR7XjUr&>x{kDuKK<)HkIYm2e-J(Ru|DmnObqent&!RgK)x)#T^1D%Dc z&g;=m3be3P&ZPS#mTS9otz{TmoypnXaU~j%UEFE({xmq*4=zPLTT-itVii{H$XP@R zEhX%GLeF3H=U(Se-5J+@BEDY^b2f@*L)1*3`m+qqHgmR?v%mNKO@;4CD;y0<-a*Mx z--`E9@`Ko8Bc+#viWzXQ7b`ADi}~E;u)c`8=;y4=t{@h2NW2v)jZoPS|2bwMt>jVa z;W2(6$GV@u(?99_lbnmrCs2#$qYc*{F5q_(9KXu%4qD4Vco;+;OddiW#j(-kQ^;e; zW67uD_rNdg&THl6=(ijmYSDfjHCd;1l_68m?A7FHKl4d58IcBaQUrXkkap(GL z9Zgb;h{~;GN9#6zZ%4N;^ShMR{wA@>+x#x$cQ?oOgN|Q8b9h1XRWkMpT1L%$^8K89 zfP8@ZY$P|4n`yII&`me*qT5wmwVEr|*tg94oGnIsYb9jXaqa`GB+W%fzFoN5iBLPO z)J_C_TJE-BNIlW6gYyP#FcmG-;}IPSIZJg{&g4pG?R~lDb?Ty?d+Mo+ zChDOY`?o}|snkU^(pDmAC3R9wozzn&_0&l{by82AG*Kr_)JYR{(nOt9QzzAd;pCIa zBgmtm5u*1NBr@&;<)~{_W)k*rG5HemrR1xmPv9iZ2Vz%n{g1G%#Ypozep9$RFYyR> z`%5MGUTd=Y^lA&Aotr7n5J6rBC60k48Ue zdTzlZ?`BnN`=~-D!rkS?sKx8(o2nt zEYi_N7)rTN$%V>DbkfRQIlhk`z+G8t8OdxVQ=iGIw=iw?X-a zq33Wu?P9uQnOm@$nR1T#GWRV{KSCXfauOdSmFOrKF$;FH0 z;ze@dEDLEem8V80lek#ctL-rfH8{wjKlSk_*`fX-t`5+;-4RfM{buy~Fvzw5J$t>C zRzFUN;!#`hrmbAn;KzO`>IDwSAby9&Bi$V?E+s0%cR+I?eX>Wf7w6f1e+-3I+Et21 zV^QvI^5bL|Ay)b^(LSZHfU7+|B2bAcAI<}1YLqnyjGnK!wg;|TJ%6Pb5Cj8^AK7TU z?t1Ci$RK=`7txjbeSz(I*Fx1ul|#LDae1LHV>x&3LB>{U+{NJzxpzWk3slOW@_}D| zSj&E#-zV@`PqMwpMW?QRLS9Z@!SR(y*$2uFMQWhDSG70S`A?*okL+G_UkTMiP_0J? z)~}~#bkIx*bw0mNn{|}nqUt(Ih*Cn75~9?R$GfEjN7?m&TnrnAYI8yjH$t`Ar|PuO z;MejY+M$cjT~sj$Ne8=HCNdlbZ*!@Ed9<7P)Z;@Ob9MEwt??0~8LCxK{XeL-LbU-r zPl9SKRBMRU`%ojjh}E-*)$@tf3$(Wq^)=$`smhPNtKfOBAA9fe`F16=`g}L|CAcUy zObHFXHoEO$sYdqu7TcO&ce^OXS<=V8-C1Afu9QYUPOkE6Qz>IpYe3AmwI9&x_V5*N z!_7+elGw}ld1%%10j`d^^X?pcx+|Ac2P^R+$sDPVA6enkNa5%fN^A0Mr-d^uoUwW) z%9+*<_e7Movo&|bqn!lSTd=;-tR=70p2T~4q!qMp#TTxkrL2L|VvejOyK9p4n$`Yw zYmqjdnUsI2StNUPbZvVKG<8dnU zsI2aq4gPhTRo3-T+^n*?b07KVJ|=I{GhygCS!2|_qY+0>OA46}ku`Sj2ISg^tRJ(z ziEZL~u595-C+mmYlURyJtI?5WOg8H?B3nT zRf4R0*xt+bKDa35w@hW-!99tkc(fXQT29v894Uz(jp)%d+OF%pM`*jNX}1+blzY9N zDUnMt5m#Suw*cHN0C#i2-CS_D0NgFmc;NYXOppuK7J#w2U~B=%mkG0_9r(I>sECMA+G-(JxUtJV#BOe!N5@LElwFkazU$vY=Q&X51>%#%ayA?fgxefA9qoF( zO8bz0H&MdF8kyEg;KqY)9%9C-Ss{5)=7`uZD1{E;H)s#JJzEE-jyEp{Ri2=&<(fv$ z7``JM`-k}0_w2K9{~CNZXw2qjezI(Xt+Z8kpYq(y?<@FtadLCC*4EfkkR&7_y9?P3 z`(cth^A4KsN$!i`KFj_W+HKYSu&t*aMES0D9I;(vpQ5I-Ii2C(1-JT(Bw%bCwRhXD z=@ITX+3kGqP>#?f(j2tAu^7=DyK1wo=6o}nH9q%Nf1BG~7sN_q^LRbQ{X2ZG*V)Zo z=yD@=QictQ<{;J*^mQt#Z=Y8iC8_>(hR6Gai1^$UsXfO1>-Hz;^cB0C$Ry-=g{LI; zHjq|e$E%U%P5V^h zgX2bQ-j&^e{gm0I_5f}AFLs;VZmlhc<6ZE1(0+t>7i7goxbJVszDp@Y@r8nH6-u#| zWIuoI@ijqTh9%hdpF7*FZy~Wg+A?=UyP?+_-#XMImh&LrzrX{EH=pnOo~^E}`qzA% zaDAy-OauM4cw23&MStEs2s-tQ-B-b9hVo>vkbT&B)e-M$ZHHFD4yR4e*u3uxm(e2E zIDc;|u=J0$7LHSk`n%xoR%f%$+7+=}o2VduD7P*2ixXRniydqtpY*h1TTR~T6z;F2 zMb&^85jo*LDqUl2t4B&CQfpuP#Bb$j|B&;B?XGM|)IC14w!O#E`l-|JXwTtqCx1dq zwk7!TT5Yq9Y7^0TD{Z?o9;3zN|GUY-JAQn*JwW=Tv_L~t==st0iz zI_g?2Epa=w<5^Oje%JSy#!3@UpuZN>JK;AM9*(pA+{RJNr|j&l2M29m-L)ZE52@u{ApBJb8{B zXMb+oFOPATaBMAJ^BucR`+j@f=w(dn39*f~O`=NTOLyhpiTlloQLz55Qt#Kvb99X1 z6C$Jzn4mKSCnowe_GG)Ir`18X`0V{eY2h|2IZ~fIq4o}X?YF0N-`1!0dRF{a!$mc= zQ{OH^3U=Qc^tGL=V_He{J)3pw1ngV&aEY~@EGMjJ-`cr{bmVcJ9+M)}W)1C7DBP|O z5bcuVlm4zX+#KgVc!J0GOS>H%I8xs_?H@{xm2LQ=+_xUSo%Hx8*_&ywRkp>hClY%n z(X-iYZBes*(nIA6k^0x z_O*^Z!*;&C{jnXLW2GMYq`9$77vmBu@6^ca8OhbyE7HE!>^i$X77Z)UZ^h4gvsb-z z1@=kwxl$$X#KS7}^TyRf&*4@~$FVkRU)A~H?9TnacH^>P`$2psOTYU|Kkh1$d}?7} zPxfoQ5lTPKDPt?r*}KqBk95-`?tr>(Hv7bkb9%U6Ti)qNweyReM}j-rvKI|^83_e? zO80hGrz4eKoPH!9-gy+%&FZP#%_1kLi#{GKh;d)Z>Pj)wb!(h+p9`3D1 zH}$s6_c(uXYl&R{MW2*PA+|fDkz|#vY+H|mSKXj}oQxisH|dW1Rklv&*}`^o8Uf4nd1<{RQQRqj@p#LoQPxZj@8D!o=)?2Ta`X&l?FZs_cZeCe`I&{o^n zqyBzFM=wW9DAzSNM;OKKGE%6D_Xm#uC#b8T+-i$j`+s(WeU1Is?N+?ZHtc32y~PS! zLu-B2{@yOIzs3GHxiuNyy*j5BpCRWr2`W0zY+p%O1Jj0Euj_2e>$IRUez({+*xvA2 zkV)5L*80?&>|Sz>@12dVOLM)8eF;4(Z#*(JVH7AKV%GiCcIVqZsd$4Ox|O2qlf1Ps zNzng{K1!b?ltfgCt@~4tUEq&HaTW5$+HNX)Rc+oySG3u~*mzQ$e!{4cYA)&6R^nj? znPVl}qLt)Xo5@a=lFaqbi5z^#tQwzMzPp_%^H`M=S_ zw6kdE-pgn0ec5-YRgbR0GCssd{*`E8B|hPRuCQyyyHw~J>kT>z5^u^67T8V{5bzDo4u$xwXG#=CM6@e+Q*tPb5+^CGME!d?z*J*1k zw6ED`?a%Bp>Ra396pj5jVGU!g`cMy@|GTU8ZNy9N`&nI8Xl=1l{VX1Hvt8@0S)|Odi*?AWI;=x(P8e}WY14$R8#4lJ42;WX+^Qi&#(pn zE8L~^-3p%-@VyB>Yy5Ti#vg@oBd-+>iJZrz+;01N@ZK8lNw##wy<0tlCE_ogwsds2 zn!RIOwNG^Ls^a=?dk9Y569Hk#V($%Yv9H^u_9LwG2l_-|5+%Ot)*)leThcDn-ct^KRb+env|TF$%J#GlB&CbC>_|JOcAxnfo_;jQUxi1oU(ZyE9DaE?cev#g6_&RWX!8I=Z& zpbr}%x$6&e#STBZsHFXTaJ*-|5@tZ!MqxM8W7&?L4BXfG2;4b-Z(9pnc{oqub6*Dc z?`nIhI>vr{l0WOV6DwIxt9y&~`D?$QkstHo?NDt!K09${&h!0e#`=MF2eLLKu5L`Y z_VvT{L(xv9Lv#1k4pgG(tArNjR>bW9MYG+Lba>^`?!0l^Y;(K0x4L%Rw{(eBIUUC@ zk9IV$tt7oS$&dNvsCvVR&s}7E?sMhA!;J?j52+ovPvoXk92#4(sNe7DlRgpfGS%+hg9s#8ex+lWei*(6FYJ&f1?4~ETJ-*s8s_U{#bbRaJF-K=j@loQ}@xm`2;Rd6l zf9;NRV+Rdgl=em!>rvw^7H``UyHowHiwxf*5^L-(_Ml~eI}SO)j@_WZ*Vo&C<6! zDArbXHMT$x?r)tVpSTaT-bxNdZWr}B-T%ew3*pChbsh~v+pFQe7~QuJD{dw}s5yT9 z`p(|5>-8rct**`XTvQZ0ca(^5xAf|C>;@SrH_P~hBeVS9{^YYsvCm*#X*8F7PB-+g zQa^aMTq+m4f1&k1bB}wZ5RCUVN{9=0Dvo$hBPMr=wbAbM*pB{A-{&|lwnMdAdH6d% z)h8G0uGY~Kjbn+~mQx$qQYe`kM~A%rk@g|mwI%zJ;*0Y_{kosqAddC?shj@~#(O2l zX@uOa>IFY-yExkCT)G_{YMYx}NgICaDDF8@|3BCrUJ)bh>Yie322xvV zY(AzeaV)5#Kfo%g<9B~V?7seZ%@lOW{l2!jC&tLv82r!UROzh_4Om6TQv& z`}OpuYUBC~cE%&FDyRJ(jlb`FO)~!ey-s6mXxE<~i_J3~qJ##l;sDTW5r{J!JUc%NZRy)*Z#z0tJptl0lOvE1yYh9FM0twnM-#^#Rj<4fS+{r95BN;n z|D{u$vmb9nzleT-(dUoqx*WYrZR@`umiv$W*l91cK6d{cq4PJ#66b{c8eBzG^8@>; zebQeIQr%|%`W(_z_WSlnq=@~i{aZWatM4#&veWhY?N1X{H@2PqX=f~Sy7GCb@WzUC zd}=rK@)`*AhW)@6vsdcPnCX~bVx+KEa?nOd=aI|ki8aJ~z^PsIhEqGutEC=weDB6x z-tW>Am$&!I{;Y0$6zF247HxkYex5^TjYN5|xnzB6DYj+;t9dG6w9kt%%ev*>jiPtw zNs_yGQnl^5;yRt3aHFbEBWXPmXoh5>FZYb5d#+mlC5KjD6C2Z^F6k8@!8_i(VeFYI z`&+W#L$@#3AH+*|le^vjo%}7)a-d%C^;p5~diT#Fo{#FT#dbX6j}5MKW6QLvZ`p^i zgRNL;o%*@uL|`9ry>xyM|A$8xvQ}V-|kz~8#LQz(49M*t|*w|k2N>POM1b+eqtBI%lS`yX9*g9DSqUjj?C8E6}q?99%OHKck|AjtylG=&-D=nt#|7t z>;v`&w7kq&jC$y$SjI*j8*!uTOYJN6erm?){$YC;eZ9x2i5l-|IzPr<;bqVN+eK|- zjULBsEAiuVAXOd4Xlxgpo3^VGS2XzJIAQ3v@cm=78=?Nv{c)5UosZqGqoffm_XRie z+C3W5?hdI&8~pj5g0{>95_ugP!MokzuN+dSc6$M5&}SG)0=O*&H6bZp#%2S4WfZ{R_V zddw_e-^<#@@e^Zm?LBU@YhqUAN8ydsF1=y;HpSF(b=N&8U43+*D_OiJ8|jJc#_o4w z8BepdPJ4=J+UMJW-LEE6akB{Pk08qie8HH$tDGb|3Vf#qe83;!2_I@o~&xcPI?apl@Lr`oHNZpIY{R$dAsIxPJ3b z?YFVMji77<36rp!-TJRvVSMK1BU;XuE{{fzte;QQ*YL-4j{83qxHhL_DouXBq}Kk` z_n7JWPpTn}Nm~4syg6-%sbi+ehySlV{C3dqodk9KEaNzP%x(Vj?e+eMqqh!OqfWRF zslPv@z57b{-}4Fo{!^@8Jn3-#CE~lFQdjOhyFc7ov172m_G=be)JM2~E6)_~dFAwY zEZUS1BSsY+y;{mSVjn$K-#Xy6@8h|;J=hZ?BFEtqkm2sBZ;j_N*vpcE>KLb^e|N}4WTmsjORc|(@VQ~GwOU&<<3E&nd-+dOO*nbXV?v(lVrDonGv)I>3_)t59{`jJLRe^Q1FAob&pfpV=3k|C7k-YPdtQ#$$| zF6YY0B;k$`a-NJNO_EWh2~Zl1U7kWZU&c_8>mqPnIxeTfk(8u|t$=o*)y<9+=0=*06a_C(oSLqwZrgHaX za5b591?Q*8m7Kp^uF*G-J;2_TSc7~2*p1wAmCTTCW@LYfDSnaFf2={_jULbBUP^PzFO+z*Y} zlsQN4ghOYexpKF@>Cai}G?}ZjLC#)pg3?25f1UIN`37mYd{e%QJ{~4bkOidkH4O%De@MdH-K}q6nst&jm;I#srJQt!RFEdg z0n$WTc_kK9C9V&1kaW9LlV(Yc)T8G^qzTd>P3XCqG)dnMH$g0Z;d~P`_)5G(x=b`7 zTI>ZT!(_;XCKG>gk;yUmaD9W^M3ZLbD5bex0@;E3YlrH zG*`;4W~!OW_EqL8nPsjvSIceY8gq?2V6HXSa_=y3;Ubeqt=E;5LJ~LnDoBPcJazDQC zLAlX<&3qSX51WVO9J9bIkU{1V^N5^b7Mg`}nt9YbDn;fo^O)qD$Iat1#ynx3kWuDI z^Q2_qM;FNe^F8wh6qcAJa<*A&mdZf$rg>9NH*cA@$|dWUi?+wQSd!I{2?Q4Q#u&@bxu~rkS%Xh6u=c zZJB0T4KaX;ny8#?J~5w2FJl8nt`G2$n*+f>P;Ln%1(MiK4kWYf-rYAOkQyK=alT%z z4x|UbZ|CvZ&Ik|_;rBD;-au9$OQr_01KAvLZ}|%aasva{1_@+FU|?V%+k*mw<*R`q zfgv(2Ff=ffBf|p2;J>{wjdZ4>$oYyQ1&Sh~C~~=?$V5evk%}VuiXuZ4Me-Fz zMk$KSR1~>RQREAXA~z|DT&*ZFRZ-+dMUfj6MXpd3xmHnRZ~}@U%vKah zru@-tJLE`K!L~z-WJQbFiWbR=7PA#CQWPyx6)jFvv^Y=EB2Cd^f}%yb zqD4s2LKH1BK#Pmv?vglWoTQjBPB9}-F(XScBTq47sA5KrV#YYdjNytIC;RWRbZ9X` z(IQXLVuYeamZHT7MT@?Q7N;m$j8?R`RMDcJqQzuIi~foh1CVSET-`w$2=2!)X zCq^hvK#3Sa zSjSejtjLQ@=QWP`#DrSTfGX^MTj8x1B>U%*%Q5U4O-PEtI`Q#{C0 zJjhc#$N>+qUNad~7zZj$mEnp6CxZmoqg5Nhmmi9k{~8qj$vlK-|GN3Qj5psf-@r$I(|i-Z|1I+^Im>)Ijs&+V5?rrH zaEl_r&58uqC=y(yNH9Z@V7el~m5Kz@K!PPua2RlgV!%0y0pk?|L^0rW#Q;$ZI13Dj z`TZ>Q`(yC?4QxAKKURJHm;_&+nc(YZsjnCH_1Ws{d#SJQt-ijO`ug7L>qUM26!rC@ zzJ8GUdQo3LNPYb%_4OGEzWzddeLuF{dtHaB$3Hp2Y^euK_ns~Gs3j8g=K|`h{VTKFr$PlG9pM*Dx%fzS9CpR4||`%{@8l& z-*cVw-1l|PbMEsz=f3Y31Q5?P!ErD}#U(S5R8?MIjj;$wkBb+Pq9!8jgB%RS7~F(n z%)l(n!(vpU5%*#+LKEgp&cTdH6K3Y1aZ;IZ+l-Q;9PBSEot}daW|mFMVQ+6XA`U%~ zj{X>i>v1zaic-wReB6N=EXRG8)e{EsNJR#sntixdQ-~?J1-D@V?!+>zz#5O|AOXFQ zi2=99}Y7|JjQx1$oZSc$bBFNhwv z3VksU*I^`X#3W3^t@soc;xnkjJ$S(5g^+~a$VMLWF$&{Rgc8ieTvVV6^;m@mJzf~e zxElR12tzO$AHify$0zV)57wqdMB?tShvW@?>bgg*DQ4kx{ix$%NIIh zyN*>$?kIO|>ju^=ta6rFoagITSgdT*R5vWGbsD>lHENty-N4$4YG-ZNvCiH3b=|-v z)r*~nyMcAXM>re1g$2%*ZsAC0d$(}3v!ff>u&mB`rt4VmzJ=zlqhb&he_YJ4m?})t zsSfHSh83UU6fY8V#(PMctSHmdviezcEEoi|Or0Nz)Bi0yr--gG;2zUJuobR+gqyBqG@1MG8# zd6o>T&G1=jEtc9ju2w{xr5L>#&*K=*Gllsq<^rzZBizB=Ji=4FU?QfE8EnRwA~%Ld zc3vqa7u4nctk1@X*L0;AV;S+0ipzy3L0#=LaF19;my5KnJuZ^lQMg?rw);k}6(`hD zq;sv2@EO0bLhK6P$SGp9_(dAm77jlf6XuJV?;DjW`=*#M)mlQ~RhI;<+Vj@f2%MC) z;*#K`)d#~RZGr=09PqK5WgF8bXtvrwIL8%im36C+xlWcuSJZQLPN+51sys(sG1l$U zpAMZ?>uOBsEoE%#iZKeM-6wSKsl4u9F>BOb))v~__T||Y`XXshLdg4`EkD$#J(}g& zJ6h)IIX7{9r?x_^G8&39r&DVbfshrNPVEN4;HfsjyPYwDdIvi1o?uU>oZScqx5dQn z_m!+ohy+*oMb%bkylTV+Z|Nwi&^lulAwHOQx!B#kw8t&J5jOS&Q@uztQ0Lyr-lE$B zJZd9NJ2P-bd())$kjITho_fXT6jfZss*diI{!(3cT;p1Ji1oHTjJIvu!aCa?apM!0 zdp2Y1trH%j!N+Ly^;fj_gM5j5_%dJNtFg!!n8@dRccb`p`<+q!mdM}mP5y#!@s~Wt zU-8#`o5y*A@Az2RVx8e{`8%HE@A)qOph)&dp5~u;R#r!AOcJ-3vIcQhlHeN~MH27k zYTnEHxQ6$0Eg#^6e27iFhpV_!jDRv(xPAO0)z=AlP12*oJBfNRIcn$5bG?;5SsAad z)Du#5&D&2|w7+WjLe=jJ>@#Zcl%DYhj^HTX#5*{vRj#ya z>SV1xe=1SHb==JF@M&)0!~Bw>`e4anyPx&+DiWl^>0-NEx>QhC#SG#cV z|MJYOD=PKfR@w*`(8(y!_fh6!OhJDWGGSgci6&W@tcQs+@g~V6@V_Qtg8Yw;it?3F zgx3n(^>nswx1w;pO3{fJp!MHuJ(w>a+yAY{X;OgvYU2^Ne7Dw~APlaIYl0`lI$9gufk;@gIV!JmM>E=2! zKo!tHQ(*E;uDQmHHrJbx=0-EZ3^Air84WeV%{X&|8Eb}_Yt0~&Z|l@#J@F;wm6x#> zuV5d^1ST<+>FmpXoWNeRetZ6I49Bn5Q6hVgIhQ7w+wuUuH&C>nwuea;kq4B{$9xnOb=f1g1Iyp9O zwPkfFH=#ly8x`*HBTR1MD2d_;p*>@VS{MtODa=T5$%jP?Akf$oXveq%saNLyFB?|vD+U`UjaAIG4GUA+ zrJsEc4*HOr`e^04?614CPJLBeLlQ-I;Q8`sUViE<6R4Qo_`JvSBtUL~!9@jTqf%Xg>p-u*10E##WKna3j3WJXTg5F;NHUcCAk#Gx$dH@6<1&Ch>_bNmeM^b~VzQ1w=%<>q^+Rl$ybLAnro@!_WTz|Ns95NkztN zGncm8KokT(lJ2oGH3KrE}w)b)fV*`y$n$rWI)@+(akPQ)sv0yJcBOAqN0 z@p@$Pm8&8z`q6hHUMR|am`$C^{d-DL5h439*HH%5#Dr8Ku{v-{fQLHMU+>Ed8FhF+ zkujHbKs+{wDiLk0IPt`|{t^Xt@n1cAcrZURnjxszA&vckpIh($6}_>I!5ECcF+v#K z0|tzN69*{KjvlRz0Vax3jd0jt5-Hl85)vhOhc-e*4WD1n-g`e06%w2X**H|N5{Ix^ zVJyN@Xnx(0PX9egr<3kPgZ5b0|0PVa_kd!EK37ug}rUJRd$*|=W*Syl$zLYS3 zE#{Rl4Ip1Gm*-W(edDCQ=2QTQ3B=DXweIRNOl_vM1Y!0E(PZGZ=9xt43oTGP9@*jk?@R|{#_WgY z6?&V*8<_Z^e*qBvud3C)E&8dwRkM4sjYWN34$%|k6lG~BTU5xDC^LfuK@tE#;NJ%w zTf>8%5lxol08MA9CvBmU)Z&+mHBB11c$3C1s*Pxqx}=V@m=3YcpZ$P!27_%dCTuIr z9;Pt)i859E-nPE41n7UxEf`sU_m$e(k`ztmJ%(rWR~>_G*p9k@%G~Wh>5zo~Tl@VP z?wY~QtRp6acqwy+_|iT}xFj-7lUOR84Gq3nmF9=ritR&32L9?3MeK%AB(Cj^;E!1M z#`1|!Dm7&zS7}((A(V>TF^Xi=c2rYYr+Qd0s<8B~;C2?!1Uh^j^*;@bQ0d z{{Oa>k_y%}XMwK3Yyl2n#JfODXPPdrC3wV^`QNv>M*@*6qLoWk3%dv;C=y&z5KL3a zk`o>7_EPSyzP|Zb=~M47I{9NOOusz;{={XaY%NJapv)|;2k%EWL zBjZi|A7V)?@(FE(s5#CLbL$gSQY5srNxCNOH_sP4aprKj&Ac68|9@XKYw!I4NN_kD z;eSn_oyU>dIJ2>(Aj&CM-ZG{7|NHRyKHdjN;D3q&0a7ACQGuKwfznzcN5}Yh00n@g z4n@jyB+ZON3UZ<-`zQrFYg5Wqh`HOd)yS1JmF>#f(%p7$*WKpS_1<>dZo6&Dh5!Gi zDfO;qRw-3>3P2%vR;jQsB;7YN-=$ULAcu8rN<%)u0VELhroE=Gx!59>PFm7u+){zY zqom5|gG5<^owpz``|cft`*)>UY=Oq(Knr~5aNnIk6Uk*RVvs63BZo6`Cu3ZYC{@Ua zL8>HU$|O{hNkOP$tVm%b;-9}a^`D)jQz+j551GY>%H*J z1_~=dib&}~7YfXrpW)xgN#9Lr%dt5&dPXtE7-NhO!uXZ%R(4`pmA(5MhGEnXzD*72hC&5T4QNxhJt|O`cEgc`Z*!MAp3#>y3Tr{Fi<;W&-^UVfd{nn z1`J?~xaLm27+8Pm73Qkzr;d=#`M*#wFJzLGdJU4?^*N5lZPI9OaAfR4yV= zy@*KdyCM=Y%J=d-IV8}>p|{DoSs;6NK!A-Dws$_Np^#BRsPO-WQ8ajXpidEkMh6}j zml_^7WXV!2kRykwBD?Y3a*MwgN)s*yNP6LcZy9}@L7BD`cj=4t+2OR0H^$*LdbJR_zW>tfc1F{Ahmnt0Obf&L4CRj67^I^@mH9u=r*WzpGwZ4O4tT}nn+`4#s5D5VIhQ+S{2P$SQ~4ucQ8(0*P#SO>~JEo#PP%(*E^N8|C*dm zc5bTi^VfAN}w#bN%%xR3OK?QCmH9d!I${^{JsZpsBuL z9Sw~d5;Ru8_chK&vUv=jCkn)Pu<}uIgkBOx=ga^ipB99KvMAVrv43puMPXPs{ zkz~F=kS@v;Q)qwzBo{3YAc}tr=d6Z}Qwd{Cf(1GM(*-0E2xAexU8;e10 z-E{~@9CLEyDdt(=oz;I3_(uEA4}S8CKm6sN`QJ?|Xw#ufk3K_2jF~WH#+(IPcI*?6 zj{oYHfI+av#s?|y*Tk0ypvX#0N@yiYhLi>~tpWR4dL{~HvJq<m zkkVA!Ot&V|xikz%I`H{IX(Zxa4lk9Jsdq+25?Q(dCN)ok0_%wsD1d@l?8_Nin4AVV zrK$G8E$%L{nT@y%tVA+wUZ<7|Ng0K9XU#2QGHxM})X1|;9~3jal^~%8f<|vO&N3ai+=FuM=d4<3RABP*SK#Z*ZCegbD~zGE+d2$WkcPn-`7S-kI=Ltr<)oCu5*R zOEC6Bv6+a9THRdcw0mlMc|+iJ{V+QzNS>TBk}7Sw!>LO|H6p3Ofo4-KS!i`rD-0hV zh|@Yj48QjhiF{d3*Qst`RN&DOJX0$hL@DI72%>;aqTFvsGNv}c;IwZ{yfFS42qwGQ z^IAn6s>}|Guqfdysq~VFMY=xFQLZsPOru=tQ$l*W0g@<|QL~UvrKr=W&)PybQp0E= zaGhwHU!hOQGp)%;Y8MO|lcp|EFGfSgASM;@=Aw%$SJ5Op% z2c~Rl-E5_Ry4t9Vg>VyXliO9g>u_0eBjcCwuEly+b<<$A$sQ^70cvB6g%dJCe>Ey3 zZ3Zw{HHi`i0^^sQXV#zOOzs?Yk>FC|D$R9qH*Ok;KNF>%Q+X;kvvM=;iBH!X+)4|3 z)znUy4b<7H=b{R%p4m)+?Ud&_a7Syq$S2@4K2tY^E>7EW)eGg>0YDYe@6i%V!d3cA zCbbw53Mf)+(YsSNKju9Fr5>-K!T{(fN(LNiNYwCx#3fv?=@n%h@={^NI%oi4;E6OC z@iNsHD474d*ASzKWg5n-FjFud??sv@O6Pt&;)JO=zw9T76jpT^1;sol|7KAbWru@^ ztjHirk``wuZo>*xVpM7c9q-8$HG4r-yE|?byDicKgQLc?E&vlu;TyB=RO_B(@FK!h zePo%XEo8`;UaicRf*=qRV)~*82tq_KV&NTYJh8_u3a~_yN27WYUF~N5qgEa_^OR@p z&vq*#)un2hkxmAgWF^_HPM&;0%6ER4pX-+Dd_ggdH>$ZnOVWBzYCE$1hP|Maj{L-z zx1>P(GEK-}(3qia(?w62Q_|p1)JpouoNmPB-db8N14(!U?9O ztYD~D9df?F^>$^nY>ckY#u#Krw)a$byRid3FgR)q3)BQml|Q%5xYc;=-3)FtY#)#D z$Dx_q$X#t?J>;Eb+uO1IojcH;gKay}GY9@r&0OrEOFeg^b2sZ6s%4~pmhCvJsCQ_y zoZH*nHu6Q!A1ML&9q1;VkBn?t(XCx_O=b3EW;<_Lkka2Po}yD#PSbLRmYY@iBBi69 z)7^d-bO(CwU^`AUc31=|>uEbz-=((P%*&C^DzO=&RzvlQRg5glZ2gvsBNdfZIEf-C z10z>zHVip}N5`qELJ9AXP`U^``%MeV4q`cl;R1po93$A-qvT8}5~_)SOCBCc{!WI{kCo8@vf>4O42&O`eA_PSoD+l46q=Gb($MBwM-|C)26pSF5x>`fGKRV_t$ zvJRD=SNA~yXa_Y2)Yw9lxzbE~VH+@BW&I!UXsNNQdY5U+%061=hyo=Ej=Pbk6K`@Q z_g;HMY)hkl1&84ddRgNKoqzN+2RlDz8nc{BIFYy-p zSCc>$EcXeHs1eA%QqKoe+b?$`ckWt$cZA%J8a4ftEt!)3uv4 zy!Y#xfzZG)AOilni=SNCZun5GtBvMZQ-)&@L?UzSb#st5>oLHKsPv}*xp|1vVv`EN z2_Fl;lon1&b%hD~=XO+P~){R}Y3P%uol6;0*|r4XMxeN3QB1$a8h zxTBBn;NDnd?@j59TG~6rO)4#_Jl5WUMBRVIrG{iQBk89d5()!Qsy z;*;1NSm)2J?N5m0B!<&i&alfDJAdQ^SWqC=wyt_8YpAOyj@^%oZv8#r!8X5_DnX7| zpstV*6co&=U!GK;xSDr8Q%_Z_OQxzz_59v1KcTi?6dnoh zZErbWQrFgkBqxZo|2!86a;#&QKW8TTFf3tU&Ka6rL+*Q3J90ZR>PP_>iQO&gnGsJ=vR~{Xw=)h==`Luo zi1~Z@e?|@`(p4^6zHOubu~F7IpCF1shi$7%7dkx0zEjGurpb8d-pp{A^u zI9l{8(fF7cg(rstS?j^6!nGNFoE=TaCGYI?p&0K3SG?F8G`C zKMBKGAYqu)you+fCrh4=w7${^Rk%Jks<_&8>a5hwdby7!#*)fuDa9+yRYWJTV&m|l zVueT}LdJB1z!#p|Ls07fX@%YhAxG&7J6K$%8-F5|W~R9MvZfL#&T4U0Mbq}%01T^0 zZ|owU0}yGRiN9YbX>f&DFl0b1&FTW=oK{r4EdO?k2DD|`a%*^X)i6~(XWzz|%DgU; z{`gM8^frs#n=1^}I_Ij1lh5U&&a{v1KHSvO7Gw-O-f6>@7rAJF@4iyXaiXpg-m2CI zMzf2Dv!iTQyPsD!UH8RO)sM}3B_fW0=T;0tS#jy_rweqjvRA!WK_jX1=7OZTNcWu| z-cX5%9?pe~fMz4U9G-A_R%n(}4Q}rsy25M<^J!Qfy>m?(-7|OLHZ1KjQ#3qZ*RZkt z(-2dK+X}Z+L>l&0jhkwQHDvnzo|r_)LPx#nt&necntZuHm+RiaLP)y=rL3xEfI8>P z&WW;U6Mu;_(sWTODh*smXPo@Sr#IbYWR>YnZ05HtxLb7wwh;OUXh4yk&gpdkafl#6 z!iR1z6bE0 z$jth4;VtLt>l`B*y(IpYIG_~h83F31wQqcI&KBG)HW@OnPM)xC9ls82k3~6KM9Vqe zItmzn8xI}VYHBgT=Z0^Rb*tIMv!QlUw-oOH<8(A7s^jqQY9RL6(a1CCqZA=vZ1c%` zQrD3Kn+--qgcNCBsbH8n&10U9Wtba5^-QflhBlF4{dOiU%&uXW9nQH2r)FQ_P;BM_J1p zx1fyJVtH-X-+jtop-VSMl8)1OIBxXrz#`@c>pxthC|Wwnc)A*acg-Ap*ZQzx?&b)- znj3f3?&J1(q=vhQly+%to-b;r*>Uk-vBn#?{V1$5j~uIFJVICEr&|%Jtrq9Qe%Skq zfQqHq*go?~Qm{T5{I%u4=)@DGXVNv>Z^6lT!5;TB`d;ZwaZ{$g)tkQe2KyD3+0L-_-09Jv{JJbPV+JVE5j zn9G*iJfc7n{}Tbly4QyN@{x-%6GWa;q+pJeK#T{LNSoKGq!6i5De^{}$Y$86?o|-T;gC@4Ig=A;E}JlWXQ1S^*FL)?5J*j*dMOa03%MsZUGvrO99ZzqiD7y8gkwc ziASJ$_zU5d&HqVxBp~YC_O;T2V`|1`UB02+QW>~=F)m$8sT}X?F&4=s-nsK-?4#zz zSQe?TSA7WDJD&p~3Y#onsd-AvwsUThCb`z~aP!~$JKKMKu@H={9*o7Et^~RMX;n%m zv+9Md{W{CBdcYu?G*8ztB6|Np6%3>1h_MIEm^ipR?R$ z;vvtXHM7y1pq$1bf(OG1erPpZF1PlKNW*?loH3$A11FkKJYN~Z+G0QSt=>@qqI4H{ z-9slwL`}^txd~T@Z^2SFtXDMuE#V@^z`h=(t)E(Wvy&u{uM~5xS&3EDJVBIY`>Ae*@o!NIx{vdW@`&S#}%{%P0PAjqpyM2)lXtSoR)-fg@ zUaDnTzQ)%G%7(U5g~KmPgUC&!4MEhpXRNbn!ds90Jkiqkr$20$^XFX@*owc5!}AOd z#+(l;$#uM0#Tv>~;ZxNXlDfk&mmJqpLT=c`BHoS_N6!rViYbzIbOBmb3p(LYB~<-# z3@I>)t4>8gK9jW>*Q7FcTAr4kzl+)~h$~fMnhCobMYf(xCB_1%2q%G5)7MUGq@I+BBg7>qn^{qtiZ2D`Q-Nd-Lfg%|>ai}+Gl!-4?2 z7C>}i2)Z;40_>%b2~<#jdo8t09KLMX~Gi)G4vU)8S+1opv90qOPrx6Xf(_!a>(gYSGVtZIeqW`oGBaUH|n!;)*$^ z6GhUM_rqeR9-_BpG7AJb;>Xd#N#fPTA3|=(ub*wb84n-Xpav8KRWsoiKq5ptUHNi9 z;Im;xj{Jss77a1gzo{6IdA&lf80L<+S-kGuXtDjiP{3E)RB?kN+u@R(o_M>^{?Z1G z-N~$oY17IU$0Scr-|CD_!w*~ezwJ&RGySG#_T7Br$jINt6*=Y6O;iE+E8-Mqq-7Afy1xMq=Pxq`FThG_+`eGMZZj-n-3E%S--)v8!J+n`VyH{RH zIs9FJ$6cZ`<6@g4Taic27!ut*ZxkMBIdI1sVt!agejf*--0)t9aUCJ|1lnE12~6{; zK9O1rMuL%fF4dpc#9^pBph$BJEF0e+2=tr&TSn9fVw#>n^LR9{XgKu#YO z$084Sqj*egbO7e4HvMr{cII@is5qmM&TQb9=lnjx+cxwS7nUh*_O$G;Va`|it*>tm z$L#MqDcdIv-5FxTG4HGP={M26) zKD$@LXC`dCk^aB9zS8zPe#)7JkKm62KfdJKKJ|hB$m6p81vBKnORF~;Cldg94qu?- zyFGG;jS0NRTR6_BxM1kWg^@2p4*T#U|M70~JohKPmGpTlIg?F&jhBJT<>$VXe9Mb7 zod)Pj`P)nob(tzW(+sAEvqs1?&!NBNw=~`@k}P=?E5a>}EE+Ag@23_0?yptN% zKc7hp{lAe7^|6`kVrxkl?JFJ&*{R3t$;0o8oX$cc67}~HI)n*|Mca1TIIUL79I-e? zge7_RzAfU*1DKGZM!r`q-wOLSa<-hma6H2kkL;Sp(eSn|p-csC$>-bERro!NhngpI z@@U-T7_Khtsc(aE{ML_O`_?4lb@af>NXI%rn1r1#uqntJe1e`!g7{$TivfPOoWGo!$xIM^<^SADgWleK(+b2!kUH< z5I_$?^aC?4fpA!0+)J(RAZ;Ew8PS^bZb1yu21YjU#C{=6( zTplzD#ITbnQK(d@7D|^+qCk~JYCN|`qee$GYjMwHn${OI=iOAw}2 z2AH%e`m}4RpKcuu(`!gDec`Ix27+`V(W@ac05D8K5U-|C6tP$+k$Og^0)RrHs;UaBsrAw#K|_N8 zLv&IM3@S`aGWF`^U}2GKz}AF=L!nV4B`&UJJbXquq8Q#Y;vRTb!XwW~;yo_|K%*?)OL71-%cEUZ zz`6qGuYgy)7U_*Q6u*Cm8hBDn#Y=TJYy4hB?fq>Wbnz{K#-locVjNU zyb%AwLXx6VqOvjz%Qur$)e5T%i>_}J+0dc5 z%>Vi_;NO1Kxn-evk`f$>04+(0)*>LsI7X3EKz1$&b_o#If+%hQ>Yj{hD}d$^(CsPl zPxwHBP?!`kkRg|@0!XYt2~>dvtD%*wL@!YTBhbVwQA>TX+E{^(hGKQ`14Dvh1Af&l zT0px*A_pP?Kqec)uuTNvP$&SPs7I+(TQr&mozBKE6$XRNWNNZlUdCqI=Wx7)%k?52 z&r^K9Cj=}tvE+B6M6Wch45nIclXb>F+wt+*TAUY&Egh-aHlWo8V z5anSiwI>%6Jr}f|I{)R#e#+*HO ze#E3=q{vce?XQtdtk4PdgUNY>;lt0UW8$D^^8Gx+4+m6_Pe#McEhMGOkgPSg@8_EiJSr9eIV}s1uvXoMO<8;Uet{PV zXc|D8=vaA0r1cmvZQX7BLLU*)u?Z=_YS12jKA0k;h1FS#(rSdHka2zVFcL5@n+^T_mH0G2fE%uY#785}s*8N<8 z)sUjJU_*wkx3<7K?FM#w>BhIf39NCD9ZKX#Dn5a0fdP~#?@A0HFcR9K9uNCHJd8zw zA|=XHs8T~lp)NSk0~{0r&@eEu(dp8`!kPZ4@r}7?(qc?vhch}tZ*rR*=hCS^Lk|T! zza#0a?3{bNdjerf_rmj^=hNrN3tlg+H~X^v<@Br4S4Unwd^P*pdtlli>p_>^Jbg3$ z4tuaY=?U3}}8pg9FwcH_hy)zpn{P-m<%TwNk z9@f!7-==_Sm2ugZ0FLs2OYi%}gLoVKl4P>b$~dLL9U9%G(tsrNr5EBnIhn_Ws)Ar7 z6x)U303P+_6vXoqqZ`&$h{2dCvXer8g!)Q?cwSOexU6UmZbE(sQojOy@gbg<5T&ll z4g@zUyNuXhjXpmh&c#W+i?*cT>gBo#eG&RJLOf3xt;}Qg!Bxqm@qG+^jzK(66y1^v zmCyvX08Oy>BPpNqd_gqfvWCo+aCzZq?~PE1&}h^%$vo$|We}Dh^ER6cw$=3x#p%bT zU=E~*im2r-91s+CL>eo!J?Bx-o_kzrwI^JU+hz{7_jBQUm>EI$D^MVG2QZ_){o{3e z5xY+@v&Z`rJw)oBz|4;APjY}lcR6NOxIdXJirrAmOuRo?0i~`XrsDOtc`Ngs{w@`u zYcABV^;tol>?K4L?2IIPr9Ixf=ef?Y@)1xt^Akk|ztWBV7fx%M%MbHgbk1)rZ^I4< ze2RD*UA5vLqsVO_maEYn7_~h;fIa9vA0*{t@7isnf-VFh`#L+@cgq#EYpL$H7XDJI==L6-BoMt^}Uk`gxh1UefB%xphK~YRjd(& z`0Ng~5)m-ye;AeIKn08rv{;Bh7lo%Vxys>ypz04ZPbzJ_!+C8#IoMbTBt8j2goE&d zWB|e#0?c0$N=HaHsKjpz;DZRA%6qxWSe_2-yBAvmJd0|mOhJ=}lz;R#((|o_Da!K3 zy_-5>&b0K)xD3j=42!p9T2`zX*)p(XY}K;9O&iwrv^8`S1|lZ1*dBT8iKm`<9zw{4 z$GU{1n%0iq;qj@%{~UYAT&aLR6wB9L`(kh~c!GZp_x8RFu46pg0k{M> zGPh^}X6S?FBxvMSm-+3GukWAuh6?P(69E?(YOS*_xauFZUg$Pu+MgVlyw!UJ7jXgSaR!IeiQe7V zl4iAEMAFOYxkiBZ|8#Fo3ZnthdKI?PSOjf3| z^k3G#X6Jhje&py|_I~DM%!Ikz{L0y%T>Z`6@8q^A0!hrD%q5#cI-g=5c@*s;>IIaM zGz(Q>+*C?*OX!y}T+MV9<1%Lb2BLJW>|N2*?Tg7Y2BQ07`rT65c5vPB+M(Ey__4TA zgND+ZN}LQ#Wb91cmNK2bBRG?`ef{q2eX8;f7QQ z7i=7jxOn&kAVMNy5>hg9O%#-Jymt*P9hjbhk%^gwm5n`~kuTq?hnJ6EK#QP|u!yLb zkiW~OAYhdla~8aV!w$Rcv)6tH9dO7I#~gLs38$QN+8Jk^cg_WuTy)J<*WFMjOOj;E zG{~_>hE(n3WIC)-1|06CS5g$KUiJd6az&v;fP1_E%3||II7L?4?v_fGAyOiuGJYAj zT~$CL^DOe^*m}91c&^D$-F&$X*4d;)sf`0uf-^^@!TVl?Y7b<(l?+{VkCcCYEGEh$I|)K)S1V#|xxRILD^@ZPmv zkVB`q3Ky#VMVNcLeCEKzLet)5p{_68)6l)v=`6B4z17Rao;A)Y;8ftQbx}|c<2drO z$V_Vhs8s-+6F}YpGkylJ_&b2XUxNY5ferq`+^z>32Rf=F4x$`A5LI!|)(0ONz)2{8 zwiH3M8j{bOTI@3o+W82~y2in$SGMmyqy}j(a@qnCYEi!P2ha1H3(A8J@gdUIt^Vm=c}Si`Uhu&hwD{tDD;hIsbj9h}hR;PSK28`7 zAIJ2TJrE+r7LsmTqkTsxiX%vS+@R&b-@Q7MTYh5b#Rl@>D^OLJIFb`PyJ|rg!)1)A z4XItl6ndV%Wrwc6j%%(I^%bE}Xi{!!Ii(a*2|}r)k6D*s5K>Z&k|hdF1*yb!83_Xm zugbQhQcPqhOAuBSpEZ3gmi&^rkW#9^maDlw^EIvS`I1Uy(uS?1CO_owGD;KMt||!W z*dB?FCju=RYc4_zPEtkL7%S4=*I<-;OfZHnZEBJ)NjZ;Vn?C%$8MST72H3NW5bUUO z7}^q){ChGPHAzeJnMThO^K&irh17;NM9*^?V`V6%R2EI z6d{X6e?VzCv$cFiTWn9VB`|s)A_>WM>)Q30wKy?2X+x=Ahej#Wq3l~2e?UL58!sC? z*!o200?u8|Q7ZKBtA>F8B!Wsi+<(rhAyi@_e4o z;gSp*RF!rKzHJ+W^K=0|X=(=cuT;*axbtBfq2K^69d=O(wz5zlx@|-RgmCsL4=^fT z>#c=5iegN2R!&q_3`kVeU>z650gyxb^zWe;TR9scU0KsJePt<)O6-tnv5n@eR}(N6-FZ*y^|dsZ1zY! zSV2EJ4$ql6>|v^YU~N>FM0sY!LXN>h*+@1UgwH57Te?w)iu;DqkrSR7vKOencbGQ~F}3KQ?V~s~ zx6It?U&KaoyZ!B8eqP8p4}z?n%_g{j152>0=gN!E4$Oti0I)neiC!9cKy%`*WGcZstu~5D% zVpSzr4tqMVLgt3aKtpY1nyo1IJ#_B}GEPWXFY!Z}d5kf0xFot0Bnb&RRs()BYVDRD zvbFP4RMiGCMuqj%LdTzEZ56YV1{9HoCEa`%;bho7ni*|Ft4AcwA6rWqfXAG2yo;9| zBf!j7LBn+^*562;p@xZ(9M4*xAePaH1Th8(T2ZRQxA*`L6OJ1pEbY#C&&b?B*z{3+ z-DNVAoZ7R*x8@+)S<#yx=u5H@OIP}7n4&>Aestp+bxg*8IQea3Y*`rhPJ1XzVG$O< zVRh7TiE7!u+dr=mB|;4+)+y#xK(DC%^^p7OqM&ihD_BZ5v!uQP%~f2nD4p#r^#+I- zS&Yy6n{L=XBe8IVwhcvXS#H+tvQFCGK-x3Fah5EKmkmsWdELjE^G z7D7a)2L2M=e>*P~!hRIA;6D_mE&YfI7i&UR@53dzvm6HI^#RzA;-k$HiU#jRXA$tc zxDRZ!#&K8Y9G|V%%7jHdpxW?McPIVsoWxBQGP``x{Mt)8wvcu~qj36d63%#RBuCl+ zp=NU`syM7$H|FQ}lX97+2b)_L7LPc+!}=g|-8tOU&-521eBdX2UX5ED+~#{K7+&*$64Fa%84lNit4DLlDuZNhGsKiIH?q|P9QSpGi6(?ou|W! zh~S0>H3BKOcrSu`NDxCZeXRhxc;4*tgYqA?a}}g4PowIrWtW4)+~nVGOS#YvO(r<1Ph97{!86mH(>trAxf6d|xg3^5S8Y5}oeq=D;Zd9& zXKw0*Dfit)Giic_71_|^Jb;&-0<)=L8Lc7S6cQ##hhy}9Isn*0EpKE1F<$X9jQ3LmS}u=*;ZD96)lY-C=m>MTTXt* zVBF$)#UC%}ScLDy{Gfam{3krG(azRE6h8r)s15DEds6BcFBU(vNlHWMTt_INvY*ac zamQuKBSExP-a9e3x6A`z4vbB#Q8pcC2x^T!)_7>r*UCtX-62AysIyuZ0xHetolB;e z^9e$a-?CCRgJE80lJcfGcHDFK>>Y=;lXcTq5GJqHjgeR))QzW*iQq4&=aZFZFh&qiYHuD zyQiedxG%%_5qtsSS+8d(W`hVnsgy?A)krwL`_#_{4#LQo9-}+P6ezSICYZsjFoRhH z8wI`&Uwa=vTt%%l^!n16KZ`W5NgxE!dC-Yp!Qp@?Xdb(fxkIFyKg2@DtZ&$Orm3gL z%Vv{mx|NA`9ivp|BDp z;+fs|3lH;hcp_phbWTi}m3uJG#PGcE;}$2!6SxCiZRd?k3Go$kPx%{p|oTF`K$%d$XJHF_F6*V$r@tAF=iH4UgeES^18BNn*@GGX&$NFHR zIWH8W&lyu~&dAW{dA!Bkgwas35 z^1xND%Slm$C#uFJ5E0;(D_k26M|(ZQO~s-x(@{pBpvqKBmoe+z8^eZv2)l^z^scQNzS=-6Tg?cnG#n~7y&5&ETe#zK9~b&I1bifpOT zaiB1@k#Iqg_+h$6y7yQk%1dXv*^{nygq}U_&y}|ybnjmyedQvgO&1 zeQBgo@J82@vUcyZWy3DtQt*IS!3}2h>B)r>59f?naINLH^=qNBhAaR5&8znp0yoKH z5TG2Gd^7#}hRUB3AmK{391(sFp*NE9uqbcMeIeM7y)|0a=Sd{1b_FrJykLbO{SvTI`3!6s8> zv{5e%;I9D|E@R-X<2;F3$0DhF3{?!88iRb1s&WMNgxQ0pEqxoR4cPsUk1z$|f3X+p zmXFaNW06|Oz&o3SE7RqONUdvoesPI&hH*;{$E2_Nx$!UEZ;RvgL$&J-UFz~O;>26s z=<;1}#hKf{+-3ajt_$|pRcn0O*EUg&4G!^3*CdTP_0|O^tIe+!R?aZw4+lAuXB0| z9Puu=-Ts+L>QqbC-Uavb>><{Io9bq*afJK0Fx&0~V(Vv4x$j+@|9H zypKyKcdg0!Y50vHEd`~DlD{B3I5X1U+j_uetwXDUtqO@An1&0sRd(4BPmESj#&eNR zl7dnhJ*-zHfS?8C=!P^QeAZYIYuN5c_VU%O*?4Je=D^>!rk0u9sZA|>H534DQ2atM zH3X}Yl;)JeY*%ZHj%FgL;}cCbyS*!J@BO(v@7&e~8A_DInuQGxk=`766fLocISiwg z=da`P0(EL0-N2T}%s+qT8`6qcE~6-k6QyNVm4c{fzJn3CI_*_^430iIeIAb(BqizFp_V^W~f(8+=Qlqoyyp}kM8 zi7Ra;g~{e@R+x&plijkXwKD(+tOR9qZ^ZIY_~sC2?Fat*51c9mxCsE?;CMppwvXjs z&VRXfpp1@wIP!4y!_kL@O&4EM+dpBBp9ka{f7qm#gcVQhCDTtfa-Y$zq?luZ&$Xo=8GZ6Go~`V%aos)OOK;-vWnW79a%eplw-rUhX9rRkM;5I#5M~e5zc}G<>0K1#I^|IZ!z5~7rNxn{hj&y z^`NfT^zM}>y2Wq&-0?GQ(Y6~EST71E8`nFLF5zM{#28i?L~g1C zCM24WGHhI|^U$OMBkr|o4d&5|L~CJ>dEJu@2KUM$Ps3ZfT*}k%7A^jj{X_|SkQ^Mc zld*}+->>~{=|^XhZ@(K0Bpm>*(CuLO#A8P*?T$s8(U; z!`nFgWW4-C{&seL!HUb9H6S(HdN2vOs8Ss0bFvk;1}ann#*1qq|{YvQCyM zU;H#%3o8}*YJ*6f`dI?3`U)Q**Rmu^<+-&QtXHuLaG$yVe}h50d5{~M8g`~NvGxAj%TCqoDR zQ~jUnjoyDmH}~$jgK>nh_JjSRC9S*HY3jcGMA%T~ERvJOD5fIs4dG$y; z`oQ|XXB-2dX=UhM>EOV%!E3z?MA$LQky`mrrOt;!^{=6LKMdTjZ#-tCrz)fxoM@ex z_myExNmHM-quFe0lLs$9MxGU)KS*eGcdH0T&96|$L`HX0H%NrM}s z<}_IJW267@NaCoIi453VbhRgOp@soA)$(S5pejLGc>$%Cl2Rj8luWb1PlMDhD4@;$ zlMUWox#C2`dU$+6WQ)b8)tN(nWWeV2a!~Rl)d15|%}6D^Rd0yXrTid4r(&iJ;C!yd z0e-Ss{?7iBB^ZmdE~;B3hiq)# zYbiFL`q}qbo7kGw$$v7d+5QioDEo{~b0_32%|?7LY>m2$-19mxY>T*&+X?An@)XUe zXQUKJC9~CNNYUjoW1fNe9MhP_;;gSnym*i*Akr6P3y>Wn6+Yun53V?+?fe|Lvgfng zkWKuryT;;d>l%kxgUB)d_MvuGdDizQDrGR3=N&d)7V|Fx;0NLOKw{26z$ z0)3z~^|Uy(dwwi~9w|=<$F{z%-vYkAZ44?;974PI#A;Nb^6N*Ey7Im;39PV+^<(9| zaPr6vN=RRzLxzup(FYMXP9%M0y<=j%)h33=%KE&?6W8I6N33QK+I^@z0ks{ysNVu! zJklmCPoPJ}GV^-cbw;>g7o+YJ@P4WKf!aV#sBpIi?iA&fRn#maKwnkF^D`7$N=%NF zfiWfQtFKDwQmw|ieyZL%+}kM0Ol(m1)syvp3;F82u7AnW6kw%ril8Z3zh2S3nZl+^+zSH$EA%M1R~Mh(8Q-+stIz=1pK$Es_!%YPb!uLoYo5YAV2 zR^8YT+h?;@Vs~c!GuGH`mos+lCT%4xTX&W45C=M!Q2fu2EW; z)3A|Te*8HkV#SO%pJfV~VD7!=Sd4$8j5YO<_CT(4gi_C8catji-~IoH6$`H8-G)ZF z5!icH)l8*9Y)l0?Ee@ zq}qEUNDjfGGvXV}DPw^-S*$m3oXR2vmk0jj8!fP;td2?bD7VEAO_)vm@qllHtJRHi z1AhL5$qY@j_=X$*7H^PdT4hU4hdho^rI6(Vh zr+5_?s;2*92$Id6;I*7-I{mwAhZ@Ry1a-?5j`{$N#)A$~>Q?%=`SYg}Q>U9{3Bl?4 z=K|)Tc2E6lU{39HwK&|wb)nr-=QstQQ;sXImDN1U&|pb8U41=PSEj`>nK~>&`-b>g z>e{$&V1?r1Hcq#_;-+wUtDgW|ja;yv@clkN-1I`Nqqg$h6=ofaUB|4Kv01Y1;5*k3 z1C+xzIzjNI8;2>t;p*!Gz2YUnEOm7kWD9SYT#cuM%r>Z2r> z%Oe|acU5!0;F^AN{AA?r_)VexvQgajE^oU@i-#&J1ZAr^HW+S$|hV*P084rS>Re-mW=rST=KP zVKTp?$Pcwp5l$tT6M7xzl+}HdSMA;ki|h8rX$#T;Eyhxd61QQL@oc0OUITelu%k60 zBMxWJa9^1Qe6Gs_dNee-kaCIjX|(2>fR}}GXze%!VjBg`=+bmxtp1ruPeF`S4R*A z11rYzCWmnX?s)RjKNj*(LUgZihv@t1QIVD(B*0pVvT!@S_~6*+_a>w7fPR=B2sJU- z8gn8gvg`j`feDHYU%R$qkH#@uO9KhFt0w=K#68c^>Af&|-E4TX<&R0rAMU0D-^cau z3s`hkolj2xKHQ?UXnlkGlA24gW`{jb?UTQP$NwAXA&s^{))!id8wi9YB4Hnaupjfn z+Ug56wdbp=&)3#m@YM{ySKTjvZ?NX$Q$~92G2V-G5Pi#&cn$-Ab+x+ZjX+MU^6OJG zC9Cbp*0@~9s?e8iDP3&<%mFJWe;TqLa$G+2+El>So%NkXyHezv{%8x0P)Q^-ai~BO= zEB?bi_~tY9Ci}%#DFdwf0Sd6apL?dW@*L5u&&if=_9 z2j-Mn5vmVx+qZjI{i)OB41ZhP72AqFl8LQ)D?T#__dILdsg4YNgK_rOy%&# z$&#Vjd81CQw?t6(SI$2#c>L6VQFg0OKa1Wuvub?v+VSQT!)Rcqy7ek8ti9X6lCod2 zU24_ZJ`8_Q7yjTw-8%(QihM=1&=zOzDKP7Gjf5HQ4RpnA)lRfNcY#6NO70%pC9&h; zfwf!duY62TN5m|n(F0)o$;b!v%%w3i8997>7yLXQcH6b=_lMpe9^6LX9@@@n`VRHB zcVPQ9ZMk2g9ibf@FDrZ@d?dU-OfAP}&S7y#x9LR?+s}TcZ%g#GFK0*Bew|lNCQiO0 zqC9%=z@dX0?ZH_ulA41>LaPyP{DFfa_sZgYN|CCCA(~5;FQdC)VX{`1Ik@=gPc1A* zq9FL9{x-a|r=9oJch`2HT2xW?y)eMjxS<5GS5d8Ev>VN>j3#-CZqPH*isB}EQUm*_ z+{O>Ln49c^Dfy=V577&Cu>I+~*Z6nVpcT*NqUbf%{Y%Z~Vc)p=Retvw)OEI4<&>Tp z%M#3tAfz^CP0jP4kGlS9+*MTFeENa#*tE1LnbAe$%#!ughUv?9GXMNN<4GaWKH{uH zsQtSf$Od3590gg$=;e?8&ikT^WVLTqA^VjaU|)hn=UUs=ab}Ugs6E$evj?5dx(!25p-Gff^(afK2312 zi2$IklqV=n@@WXc?A!dZN#F~0Hb974OEdt6LR}BDr@=Tu>*p(oN zgIlVCp`db`qkr6xaF2X7iRH(qJ*S4BhwkaGirkNaSdjYL5(as-g?0#UZ<=Jhbk}M0 zjh>3WV3bLO*SSc!L2W38>`x*?!_yzV@M6%5KT3r8ETZLr7xYePPw1*{pIG>{Oc7*p;PzK$jwt!TrnEGn0*)(Y&7NzWRSXXmpCTejD1s+l?0x?6dt z_D;y|U$g(tk57^PrjXUv*+y)&cUi5D_6)hr*u!YXEuiM zA44P~W6132U@;%Nxi>v{=g?r!9H;t+zC%xbrBlc8LC`HE8U{iC%>Y>}^x^I#=~=+k zhKW@pJ($#YvieR{63{3>U&WY3Yc?6x8tLewD8g4|1ze*<2CF)T@SyX{Fd!5A2)hX| zQ=zayADZ139_Y|X62$m|po^s`y{9WaoZ3B$_%idsv8*0H9++0=@43`r$hq8NB}*C|q|GG1SV{}(R52i+LD@R^>K5FDo*ZFqwZ^-7s^oaI zG&*?@4;j4+x$9C|1S-f&ei!gUVlbdC(F^(4by7a1MaMiNE+?a0W;?9VT>2mOSdL<7`7v>x(N({tKW_Ntv5cm4X_=wOWl zFu3N|-GF!36;XW*B@LlyajtQsmt^qmSK2^(3#;5O{~Is8>N#m6Eu%4nsM7TKAaZbI z&H+s!A9!@(5#4{zAI|qHU0ShBjWiA+$EPPc2iI>ZTZD7oHL{*9pa67!<|FWX z2m19yCP4!mZcs7<=m8kfCX=_>&tWbG7id}^otn$QFNx@^0;!tMhbRM zmvhn?+jpUN^HR-1&D3MP2h?}z?o!`%ckV0K#pJo8z4_bhx!HNF3!8xZ=AK2f}^^1&#YL1aL3W^Us zfnS|V1@$kB#%3i6p<+?MmWrjiX2S>(bbb{iOT<3HT?E(N+E&UdX1`J3N$JFK__Mxi zr-e;jb;rLUN$0NVobQKU8ZrYYWr+9!$w{7&eR1Vgib7+DRXS^vSPS%O^S58<(&jv4 zG=pNElRQHVh~?C%P8FpjL?}y!rwZW44Af}-7Hh1NtBQ?=i<9GlK-@J{m@ zKOay17fZfI*0H3HZ5Z%wx`g;ybPwhA}ky2Rn zir3l>MU&C0)=aZlUcCa&vsptRrFLlz>vD@tedb%_ZCQCEb)h;@tATJNP5?+LXi!aj*D zj1P6<@cZiRrV)su&S;8k5r*#XC{}c_h(H*<_=mxx@kgIce)jd`0C@c?aj&3$TF=DK zEVnJ6j-P(8?X(f+6TAPE@9EiRl{*xZ*I z>P7Vp&aed&Mfcr5@u2pu6Z`W$3WrKGkA(Y*h9^feeG7|)b7G}fD@O2FNV+D;e9-o( z56|ly>@J8;j4TUySux3PKI^?-ti}Nkgf)09Wk>Bmb&claO9sFYW)~X2wX#FXbv$jg zRo30!Wocb$tZty?|2dVD#yS9wf(OnL0c+>yh|!`j0LPLx&=a>t#`5sg+AawpuH zU~_v@jIJ?KGRnA;n$Z|ybeSwh)9S&rGSN)QXpAui!g&1YrNNi?4)x3-4ovrXDLn!X zEP!4``VK=B{|z5mEcD{;Bp{90BOl-rKmVZ{vc1gp5-C5Xg_R1u} zP^JhH&JeAQBhudi0o1J}6T;+P6?`c;-mb{GA~sRPjdoHG(I=Eq!x~itKsYGEDNeJ8 zFsxU!(3gyn47WKv7AcO6Y$EXWw)vdJWH+SXJ4u^}uLA?Yf5U(zAu(E1T7y-F|FN2t zDiY-)wopUI%`z5T7Qt2&gs`xXxsKix+LI?%d!ia&ch#{u&bo^rUMjQx^oH-h+Ay3t zQ3xkUN(`!|CPT9r`yE$7Bq&JV;jG+^5ce#H^ESV(=-qyVW@^VsTXA%Fqfu^A&*iL3 zcJkyr7x56;BNT%z|Ar}2ILTJJ@k4sesdZQe;V@oJ73FUJWRD*ZJzkJG(;gIcZ9i5iFnj}N9& zAhW#f=@SoA4*r$%extfkAIe#OJbc7=EM?HD$^)PgS9=VLJyBb8YD;tBE8oHo*fq*RfsDjwbd2y`-u)T+~|YCphYU#Y8mzZU;N z|9=+_T2>bqN5r-Fr!+31kWBch>k(Y7&ipq{Vij=l4`(&iYN1P_R@Z!4H$qLKwpL&E z0A?Qsb1xcm-{-(%?t4-Sy~rI<>1u&b5RMeG5SB`1Hm%lSjXGAhIAi8>b??{UU#qKq z6^lLJgD!8P=weD8`s4d`6FUv3I}M!~IMZPO=!2`^Rj4Dq{IovpTho!zXWAh&zDhrW zq-gF2lv)ssBlQ%$G_JxfXm@5yvVprQ&ysQy1Yx*J%|-^zUZo0^zXn#XH~pX^;uy(} z^hA1=v(TsL%T8iX1ee&dJmc@cY^HZh68vh1xS`-rd2>vCBq4?5q*uJNw~`gPA28#o zOXb_~_M}{+)seDzG1aGO3Xw#OcFe{<4GGF?%IoqnRIR-2!RYOUJYxMxl(wp~%IQd! z?$CWCyRH=NRVVpJ4#XfL1UycxHgwPe?B#Je&|af@8vK0%_s$OkCIrH5S;%Im}8jG zC9)&4{b1fmeJqc0`f>9nBW?lpcJ`0EE{T%Nf!Y}uuAPP55G5{kq03XJx2HYbdBFiX z(fL1>0xvze6h)ZsrO*8cA_sdkg|HCK8+-W91;pAWg;>+b@80y1BN21 zQg7M7aCFvIIfCk_cqGaArI^Nz({71oGRMqxgg&EQ`ba|{}^;YXF zKN^MBy5RZ=PiRKy^$gbE=2ff39(oF6Az)gsVknKTu<9jdEqnKleDvZ*;Zj6U@G*+j zhWn@d@jqvw<*kb*yUEznbxGK|f0TEzvu7!27F)!D=G^pRaMi_6M4)e}OMmHimBZHP zm%WU`ePi|!M>3GJbREh3t#^G!)#q#L%ha5ztv%INvtZT8uJ;yd&`?%24rSfV^9MB~+v7?tT$EQ*Xj<~Vy7U@v4mH?EDCDbo_F9}lrrsAtBtR%peU6RBPq5BJO`q$)h!HwK~?YETUMpnr-yUgf?9PU`}+hEaW9GTGNTN(Io5er{22}* zL6rzTh1PM6GD%($?fijXSve^(;U3~^fSW!e%KI`OS!lq%)6fqk%_|{-fLttoZg;~( z?y@4b`Y)X~hoSw-{0xtf=n-xsf=@AT>pm+|7jnK&z#>)r%ufcq=MF;GK1pkEaGz{3Z@(j2mM z2kOkax@bA$xn5BYf2OpfLFq>V)WKKE3!t=DKexCiT5idM2T9hR=W&J=Yx zT8a~v=8UB~CF)Kv*W+`ZO8I3~ea?7ru`0to2uq*)O8(fWeh3*VN}q2^{%ce94=nT# zUV^0RQ_9~O)vv1$AVWmy^GwNK8PzW!E28*%bRF5XV*%!k^$$^!5Qn^LddTC?ctVes z%%k(a^R-4Fq>ntU@PCB?W9xCpBi*|fHUVal`|5)SDlck$(??yL{4=kcP zr-9>t(`ObLc8FZ?l2co!Kci zYB7#IRpV$-%_9NSWKu8H4|k@E`Q*CKJIw~kR75w2X3QBTRn3=ysKYZb<1l+f-}^tT zGslK#F`^eQ0fgP;?(lnGZghDX-qSo7>>UmFoPMtSAk`UGTfIaV4IL6d&wH>-k>pb@^m9V^rYitSTMUqdi$a3U1TCq?>s@(0yFvb6GwLm<)BYRKg!rMai^$g=xOQZ z;O`Lo-1UG%J{Ij!W1Q#D7hpa2o<_T$R5EblH}cm2;)7R@KND{C_RC&kwsWZ7X+3;Q z$c$IOZ{p%p)|-61S}f)}Abl!7M7Js4E2KOlghT)Q;NIL{hE7j+hR}x(lzGQTE1bnc-?-I)!i<`SL~p3!qUs0;O=hW9hf*r43| z{;7A~saBV=4~Ea%JTtz2?^WYKc;$}kN5X>y{&JQ-KZ51lXPZlZ{iT-vO6*$xh<%zj zlef>l%Lfy$jAG)gi*W82A$-5Hqkh}Q+2&0Sg6M#*pCuCko+B_AStyya*zrVKIj`sz zQ!m};8qLWEBr7qUX7jw;Xaw9}_xC?1fA(tulmC0{lbNHd=IO8h{@WI^ZeF}~@*@Gg z3;qJo&i}jQPk#e2iS<%&#~gCr+Vri0Zak4g=smx<)pOz)YaeKiqf>89caQH5-^& zclavcQEnRqGXAFD>JEb}7#D(?T743AXN6FiX(1lw17ih*Ganj8y>F;j2enVL9pkDM z8k7a=lOhXN9q1**?l_W>O#QTA;_nCdqNz`k2nl*Q(@k$iG{ez@|HzP{@;;mgTIOWU0~oy^YS-aR%Ydc7rz zAWH{}fR8c>vllkeZ3VJ+vjOkQTJ=Fmcjl%^KY%Id~YPKm@gcov#Fa97;x97MYM z_#i11HG6tGnVl!<4ebicppAJGXQNpkjqpysA@!2xrb&d`=SxQ00*s4S_vIS*6R0%C z=b5DwfsP*TZzdjR*nhh@3rw4^gdZmwYpF8-z@Uwv#cIp`zSGIj~H}52>wV73?O<1_nxYQ^=p4f*Dnn^Vq!kKW` z&sx&YU~bleEqwSm=56+7Exbqbs_*O2@zE$n2SJ1OA3ap=D59o(_z$C!ED|;Z)J81G zcN0j1zjpGgGUx!k`$ZG>;)dL(s#AP>tlJbD83yop5|Kb=p!5toL#}263pF!XDiBm= zprx)-CU}2)to!4{h5(HF3-#vVW&6uuC>`vS%vHibX%>(oa8yYQFacL(g7?>9b*$J% z2^gJGzwkj)PCwBo0zJddkgEyp zW--@_@owCc|2I3AXj%@jgpKjBEd?gWO0GRzM-)Z&3 zaDL%}lfEXrI7Lu6BACMyN%=L;M}S!udjI6;-^FvE=8mycGao2s=Fo{soTWA4TeE14 zvj9v6Imn<{$^)v+PB0;}9l7NKoCpffqX=De*=y{a*9m&z;4bkFI340KTIKWWLT^xo z<+YV%AU?VUW>ng5MwGsOw0`v$7rmr@#5Aq}MnJ($c=Ax$ERyY)C?v20IdrUU4wVUP zAH6r2x8+Z;-_Q?OU_nMlQgKZwPOd;7)BtPmqo{?xQqwuGS$DN*0U46x6w`**AU^Jye3qAbY9vv^l_Chc%I*QDzc05}0}8$XyiE;SrH0 zPBajjsjfV9>dBc%=!&od^5?d2?TGTqA!2w9FdjgLBgj`nfWc@BGl5>m&^P3eYyAoa zZNVI)hFUKJZSN{#Nyh?(umZvTB6tZW0L&L^sO4EFgW&fA{e~gTZWdQ`LDxv%1#+R= zcO^*Up&SIGlM{PrhVT4n{|3v<(3}8Mtl=&{o) zvSd?kJ7{Dy@F0Tn6a-?5dz1iZy{j|@Tp16g%8CNTdx z=GyR`pLNJG8|o#Qrg5a@@nsBE|HX9)z|>0^EKyU7b+5{R2W?oe(n!-;p%UlrPgC=6 zgQx%+GwBQvhvZLkq!WQ|AjE@^Ez>KW_%gwUlR%aU9ya3k62low?nopK5O974K$U~c zi00=$b)is(*o7Ntx7i_KiDer4MX6CPpf*=*Vg*gS7|x2V-B4Lbr<3KWRfg=Yi<_W& z)x5&4nisqQ8rK9S>#Eng^H+Als{!Gc*Z4iiVgO=ivKhszuW#(JV9|H3Y{+qum-dEo zG_Af%tuiT5vK~&<7VL%lv+ecXA@O6PpMqfDTNUL}ivkK6VBp0`VaA0AdW6kM4Md02 zBHeh(#C#EBs4Mztj<^6vrwpi%b`Uvd3-Dp#jE|^|lTsS~Fq}hL*1uBF`mB ze}I0QuWq0smO6_hK!Usm62w{)F$dyz9AIO0ChC(6GJtZeOur0d;Vg!_=t8};M~R)% zLdHxhqk}SNT(RJZSldxYZxB|8;n5S6P|AXb`~mRMv+t7PW(RrXTR%WrLlGb-u6Q6< z$qBE_2h4RqyisKz7a0x>go5-#@2IHEs05007nbmXW_3;ueZ8!X#JfYeWvMY9dx0wC zV5fX;)Bg~^Y-Am!kaT$Ux-ZcgSew?df|b1HtCg-$X^DbbKm#v>ozy>IFE${pq2St# zf+Aq3fuT7X5M>$OMm=F2suOVA3aOKF>7Gc_0W{Dk>0{!ikB zbL*MkQqoCQ$<_MK`ok&&&1?bcuH2vZfiJD&WV;LX5TFNg7-l5L2a1)V@)hO<;xR&# z;JZ5se(gpP;lrtU&4s#Dvk00z{Xk!d}GrVxZx}j5!zsb$#cC#1wmPnRZu3g z5KQ*Qk8J!#iRL)}HK9m;U;kAHsAF}kUq6@z@35pd*}hrYb4vLaV#ho09Z*xW2 zNS}n!^b!g_SsW~h34pqm83codO+|5=;r>j$zr#_nrLQC`tHVloxgQT7@PNlnXt+VS z&p%`Sr{7KXgSTrH`%*OPt-%2fZlCd#l6HG7&0l*mP<7_O(NA&L$Xb$pe$}ypP8UzdWy}mbyJTDlOEG{^#0}HV?S!W zt!=bH74$QUc2Bi;17G0%H^C28Km#P> z@en+O7PL`U)Cb^nU1SA)00}COR&{GvV!h6L0mZ-YwB*$W?OR_r|Vp zi{zt_>os*mYbXFAe%=;^7Zys3k?N~ZkNJAc&#QvR0=Mn)ThPY&E{SPrxO_0;o7wiT z9tU8lh=OGEK04?OfXo$rM8k>uG=w-?LS~Di>~)CU*0{%WVsE>ehE|M?n`oh>%PwN@ zOiO3igDK-|ts zBAQ->_LX4|(9`-2F#F_+a(e~TAo4S!>oqPR!?#tWgV)|vL|#04MdG&H6rKnaxYvFszDno&X#blqMw}V(?tJVQ0G8BIcY<#a-PC^3d3v*%2))M z>$;6~YoQc2SFRekVi1bKvZ5w-_{^2tVK2f}T&1oJtJ$t#4wsc%=%izdxi;9kMBG_R9N`GxmYl2w?BM}4jwB<8u7Ps{ z0H~rsb;cE(D)gl1W-nm@fdmX?;t&=%4#=Y}h)k8*6KudCG=f0-p<5o%7h+LrS?T9=nbe|RfE5K$d}yH ztF07vIbo{Crv=$uH|S(=%R5LKU3P0~b!)4wJW^wsgu^#kw@O|QYu1+}l01%L^j8{< zOCK5Ct1-X9`uKI&h$*IwO#(n2!<~(xYq??s*!?a~XIR~)n$&!+4j_Tat{c@$H}M@M z%vz$XNA4``$bF>uKYC>T2-zI^dLI#Qk0m%%^X9*WrwArGj?(LIYv6v~ssoRRc7Jo8 z+^&f}ENxo*x~^kQMh+N1`Lv1FJ3t`e`XblsH{P{y!}q>+9RSxC0{^(mc=UL$QDBWB zhE!yaR3J-Fs4-=SG~T28p&)y`zJn{*gt-lYhy^uT*^#ob_@9wPI>P|CG3#Ez4!E@H zEaIiMaPh_^KH3?o$pE#g{ES{NPCz}nDk+sjoSQ*LZE?MK*RAuBJ}iTg{LjLc7eMur z4r;oG6lEGmoe}9RRznIpnjZj2qEasstzBl?@Ol7n1IaKlh&PO#$%-gr`+befy3KO5 zZ9Y@uTZfh|tVlam)4~^Z5sRhj)QZ1}J*in0ZDA|JF$PBk(|-uR`Dwy3B-|>H%>}O` zrZimi^}-%Hz~ljGmLMDs5J54AkW&Mg_w-c7sqWyMYm@?xDKkW;MGX8p3z5vIQF1eXLnY0=Jj5#)(MUjjuHC_ObNK~7Mg*1h%7LE^fE9JSl zfUHba>YHlnw~bxFiHl>9s|j<{&V9$5PSrsExYQ>Ks{OjmHJ2280Dy%tu&WFP02&>X z9Frx=U*rII;0+61K*Qe)ORwz_WOF-!_fzc?Qlqp>Jv0;W4yZi+&B4qvn`YIN@N`Zq zBXNh#6JP|7xR(Z<7bfT#T9{5+J(3LJFMltwkDztwj!*OCB(j1UQu*K_2|K(roeu)zH&a{ekhNa`0@BI3>#|B!&j2QdGhL*b+Evu z^YSZQC5VPEyg@c4vop*CIjWG0P(^8I`Y^dv)u*nnm(wE=EV4*2!tRJEB}~uuJKzLQ zoIS|rnzFfHc0t!`aY_#ov&>>`i4QG->yWKya(Fz|Xl)CbkLgZegO=cQX4MljEtWpu zuAoUAoGpwt;5C44#BqQmPe{y`&IBVzpK3)-nH;(~uCM?ubW|o=2t^S}B}~g47_)ao z7I*s&V%ov1JOGeV`gxc@2Mb7`4t40jNQ_1*p?$o~c2XTIol}s6LNMP5`ViPOBCM50 z2`P&a;zyw_X%#6m1gh7Z;;`%#5xJ+sWPQTR2&J2(N-1FJ#Dyhiz%ymoG5o9=I#6t0 zQ@0^>z>|Vb&enB|nnwu3L#b&O9dt}d!cUZp8Gex@OZJSdwpJ`0<9G&I1^ZqN9R!R( zLsLx_hO|-TOiVDV%_&Hj+iZ9R^`r~?O339V&Z{1%3tn;{#-wkc0Jh0NIbJ}9Yydn| zy#kyGg24{bD1T7q`r$_;qApICFx6p*Ck|23*f|1sgmDMA1B%r}Cx*aHnk`Uq(sgjk z4}h&^kHhRyIeN$DxR=(ST`6N?+GI!#HU-Mal8NXE_KjNG)*Wc<0C(mVnD#kU>7|`L zD6fzSI{#VTbi6Y&SQXG6$kdH~oDv)5JR8MC5NiVyYL?Wb_uF*kO}OenCw7ZEo2Vzf zd!R%`@l9;9Vp0}C?vz7s8*k{?frM>rlS&75Vu2RWqL4@2(ZmA0+!SCzSwpgxIK)s< z6uU;;O`t!}P`L{$Jd_q579CmCdOBJ)7FKF1SXHX94OM*H!&Rg<7>qEISh-8D=roZ5 zU2Yb&Od=gZOT2Jm*DSSYh=-tN>z70Z%_3~H`t2-oj1_!QmhEe^6T02-}56fX8ag8(t|nYDRBYHtP%|;u{pL1Y#k?JBAuux=_8m6>Aoh;Wkgb+Kdg$7&f9u!fA$SW_Na!@ z*XdqdEOA06r4EJ?lc>iIDgiQ;M^jH`pn@lSXng)%Nmz%%X4Lx5l7t1{o@9>NW3YAR zg36z(C(R&}zy|e9KhT#xD|%d}adTMi%jVcE%F~nO_Vw zz67I&BnDlMm#Z(`b$+aZd~Iti1Ax(NFqfDqSzQVdBR`l4jG)qWe`lf`^1ILyA`AD8 z^mhk?XH%dLXEB1C61wr#q1N>Jt(n~|O%dK5Tq^M%nOt)tV2yfT3KWf^FvtZnfg-7| zZyMohdu#%J7Z1Xig_bRfXofW@Cu*ADCTQc`$GOHVv$0;2X@`K+-M)Ub2w&YgeGAtL zV2YqUK==C+$6ylyRB78I9U)klk|sbv2gl&vXLjJe{OXn5+)>cBgv|h`8AX$4atl-7 z8h~BloDX9m=*EY^05#V1av6(GZU$^FqT{TFfT3aA@u-*OXW=v%IJ8lmM_ z3YSFS4x0z6OX67vdK}T7%_dXaBb`&AA8)h!_)QgebzL-hQr!k+ab9K=D8WPsEzF^XBjqK&jMi<)dv`L`7q|m0coatV0l^q5 zOqN)J4d`uKxN}6=nnHwllv^Cj<+(YG{mmsjw80OH0(#Hwi7a^EGw3Kig^^*573g6J z6=*>Vda#CT1t-8nrm;k(wB$Q#kW7F~U@IlKwRB(B0zn{;3Nll{qnW|>r&~5Hl?0X4 zm$ur@hXf0-S~x35hb))FF=d2OsCdXI88GFbj#U!63~FiU_sJ0}f;!My(F3qM0xr|^*tK|DQ?#{ zk9$t@+NR~13rtRS>-t))w8bJZcV(ydhUVe{7{{|`8)Ayk4gE)^bIR)%fdc#z*mJEb z8;ix}04O#Vlz(D@!%uZj$8uGK*9l-h!&q}^dt{em|CxSq|8yT$0&3DgR>#CGO=#r! zVSKpim$_{4wx@6h3xSooQIVWH&~4(qe!%6A{l6jV2qs@&`}kAX?2p|c?-vLZ00Ff< zcC`BG9n?<>TxungBindayQZK^*H>(NReIezx##iz>9;8Mz2>1gG{;N8@120ty4m{6PpkBHV50LK^Jxowzp z8z&YxTnrb(#YM!zr%NK~VR__>O!zF84|p%zt0Ee~VDNUg{B?{1k(Vz|OLK~aO|sh- zc^JrYAipD_`A`%t-B!)3CJ(${Wa1NwVoIp*4%%ckd$cTNJ--V3Urs?}Q}YV#HgyYU zJSOU8=VfR>Dc&&`U``-fMx1P3b+E+JU%Tm3!nT!6aFwI;=u-L_i|7pMsFSV&7 z)N+R?cbnCLHP<5!R40&6%eT23)7!7hC!wDZ3m1~tCdTPF68!wxOPxb3DF5^QOY^fQ zP2hY*BDcLxei3Tw?QtBULM#+ssw@`c+I#(ZpD(H&P^c;#kX__et6;qZS3WQHu9Ixa zSf=yt_HiB_QXA?iy-u7y%5E>sDaS8Xx>D9>lg5_g)`q)ryR z{^-i_8O-&x>_vU3^T0ZG6Re>$-gr#O+y#Y7MTn?up?y&ItNpTAAlld0sN{eQ))c&D zN@x`Bo1yD**+IlZg1q)oBI#o`qeX++gFy9)VyOj?BR;a(LCsCWsZ>*md!=Y~EnxyJ zET#WV#~A*XFF3-Hw-5vwqggs`pk+Bna4}zj+blg~0V62uh%=9aQrJW04%eu6t4GHH zF9U2&nFm1mG6#l@72{!V4Y1593Xyv-jsAFM8`%#i+ylF@pn76ky4|ri_Fv6n<#=EV zf_tbmY4SQMl3IhDg%VJUmnkcu_x5+_$y%@>?@T}I0ScQB6ahUq%e96^gh_$3BPR#Q zV5o3gQh$#}`Ji4!HzW{k7ueFp)Ra;Ax2}{!4H7(taK8^JB9rItNs>}&PKJnuKNLcM zWEKof<=mmPu4Ej`ad0ey9F6x9T`CB2nO{v!ZmUK+XY4ylwKwhE_mcSE!t@I8AzK)f zBXJx&aKdCyWLq|gCjT$Byz5!_yth>k%BH{d z^cID;^=!tWyFBLGz`O-~V?n*&tcHM5zqt+%x@SM5J;GWE$qX`IGsy@^#)4!af%&FL zVndn-c-u=dMkLEhk{Kmg%$YC#fL$jrs~FCo_FfasRhs9)7rnD{paSZP!)S$&oJ7@$ zn+y-Uj$BMRmzm;j1>txwI6{UK2za7245@(z!jQo|N?hsCa?o;skb80x83d7cE6WFy zuyXXHM)Mgn)MJi5K8-CvZGw6`@WMe@FHHK^=4gHYjgA+CWneFg#_Vt_r+?dAs5>7p@AYtHpyLz!I01q5fAl%?)5Bn_Cv+aGaz+7r z))R>g{ac0(o!Ke7J`KFI59s)Hest1VZosA^qnIBduazAXt}NNz)aE|eKXldw8`T2s zIxGG5@-b*e3J?}2q=cfIn+I<(*U3hGG}jMn4!6z~p;cO=1?lFZGyP1_bc=S-C_15a zQW(YYw28yzf3$KiD1#2>E&*AO8G%qZ! zIw*5A+o$LKVRpA4$7zgODQE=ct~))ZCu!F)d|j3U7P#1-}wX_yU ze|fCNroAMl%VU-$s2woD3N`dFBpE&lp*~n>>Yb0m@L&`pc%S-#FFrmrAY~C^7nL&( z7kg}4O!m-NA^?g~jsotsJpK4H>fCN-5Q7%RbOH8cM)JJNb*=UHyCeZEQitd`m9a`NN>{vwinGxD^H zw8hHeIR|8tUS;$7A9s`l0%{dWNTLuR0E0k5Z-s*ZGuyKwP0#0OB^o*Jpq`6ePS0`M1Z94^k3_T(4$@Hsu$*wz5U9;H6mW0cYJ9v#U~KEXi8Yd3 zw`vO5>DLtT@~SDbF1e<{v4b^Lvb?CN@g9eqvRXA!Q>Rk9c5Gz5qhBswE=x_v!jlvJ z3-%l+&d$g3v$6lF8ISz!ZJzd*2dhQ@EPsQYvajZ3$eyeN#(XSb&9c=y!T89Q`I98e zl_*ub445!0$R#spPRf%PXUmc#wYr>T=wNwf`O6hgP9{}4?9jY(7!Q*lH0dfb#ao;X zdt)hukF~H!BAKFuTjyITQFaj^>wP2UiG>fDqym@EleJ~SyAQ6dX6>EuS_Py4eVG;bFOcBitW8QBP->^`j=OAI@UYQdWwwL>-A=gTjO&^- zxFJEJa!FbwYt-z8R&Cm)c&)=rH!ZW>6y&VNRWE z#m2?^k&u{_97qYKrln_OuFu+#owG4lAomS%MIOON>$mrPk#N^c0>6vZYckJA?d(Yl|`wtvEbl4Lq+DsYs z{S+h781XVb>At+GO0`yRG+XUXx7R0M($N_CAQpy0FvZd@QY}OZgvenVYvFRy#tNOm zDqUoX>(Y6)Xzx(vMb4&fLOnY#P{IpAFT>DbfhGAOCV*ufhBuBFOctBNo#oKvTet%iK$d3S146#jaH{O7)@r2 z)n<1%m+75l|Ddt0&)ZFNL)EjGSi5_9R5iXj(v=CacbOpHyZ3!S{LZOMBR}aCi40J^ zf5r)7IpnLgK@NGc;zwa;D18-;Yh2Uc%<)RAZiY%$Ho~^t+gr8PJ?vl2Jmzvo8vBq> z#UmFX89K4tQieoJFp}y=Q+PN;WTdMEg5t30GpiyZB9Fu_iU*y-VrhZcAMY-T;nY&` z1pSb>Ff&^xHX^g;8rmvjE~9OA^KHLSRJhZWYIe%lXcw^{QRGvk5$uQTzmtW%MXEPm1Ry_B@WWcq4f1ae!}N9@2n1=D6bl_uTV( z`4Utt`zlmU2ij||ovt?%lEQMRtaMdb)RUZWHf+;v`a_u`n_@y-*bFzm37fh8WdyHC z3WwJl_^>U@2g}dGiSZcN)gl`VTW`HBtg~(kr*d*rxVXiw<$4apZ)@ByJN;$I(NiEs zfqYTBbdX)not>#2KN~BS6ZaHtq9+t4CtOLj>ub~7EZc?qW?7cxS_Nx@7ePgR+C8&~ zmoy1(tb7qSc?v6-+zizwJ}#(LgieXa2mL2?iuIxfMK5CH(f1gHQ6$Q<`dFJHYbdlpv>7TXfkXR=C+@pMzP+%kZki4KP=~NhhuCKMiEV~y;gSKyqEA8xL z^X!s2b8+YJaMf+^Qnd4N`k!>97wfmmytzJawBO9Dpx^$Y-aDri#%G4i5yog?sfk#s zf~7=Eh}%0i#h#YJQd?MpSk8#$#(DeM)~ReUgaAZ91&9CuVFFYDf{3J6QdvR(BA^09 z0Dv$7DgZ%5s8U%70f>MK5CH(f1gHQ6h_*Bk6lX==dtds2A9(LeU;2R`_`(bCK)ew; zL-@PG@J&#O9*e@I4qq?HuQ&L18XIv173TO|RB5`Cf*E=@$4JAnKCfDs+*?#F{!nqVoJf%l z`07o+ms9T=AQxV1l!I92Khny$Y(d6Cec_|JLt2oH zG!Oe|Uno-Dzj9SZ}k8j-dD((S?6!Zfxa0v$WXJ93AHJ0qT6@E#Sv zINsBjA;|#`9~VV8AwdD1y>xGW@0Ts@)(Kg;k4_(6mCKT=SahAwxq&Y`iTr8WFw=LL zYGI$&fu}Im6Se&eD=7Knyam<$cW(us^*!~Y^}V&8naMDnXh#1&*!uk0R}vZC7``LC zHT+2U;qd)o9ech`-{4LGe7Mq|m01q{S3SMVm*YseIw`khmW<*a`sAX#fI5aW8IDjV zcvoGf^S4g^O;9VeL&3Wdzy8Ix$q*XD#timuq$|If4~AsEI$yWx#ozu%V8AsLg3nwL z_+N!`F=aS8{{tX&@u2UFbyqQka;#h`H;`**R{;7hPHelb7n29JsJl#cH*TGtL@#jk zzO&L3;7A8&(pM@21xio3g-QBs4(BA4fP+{B$;lGL9LlM3soa3Bon^{B<;ppZ$ARnU tHRussi?bLm;6&N%G{qSJ08D9PWo~n2Iv_GJFf}bhSWr$*S0GMPMPD8Pw=nf}v0LTac0QOsH#Kq6R z*^v+cfPMMlaQ_E{A>d78TN5h)0Q%!ce*W1*FHT_X&BW5p7yv*@0RZeG0Dy5z@V(4n zQzN~fIDu4ucx?XxoDQeN^hf!li}{gBen1M*137GJ<>>m81I>?52mk=`rc_fI&C5u;Uhv#91jCyNp42|#s04FJFZs2}`qxvm-L8tUqHy=^D?`4t{+U;9L>BB$suJTMUg zk>ddR79nGQT>NCj4KN2l0L%bj|MT=yvL77)*cSi-0CHWE4$Vd8=f?zp?(#v5qS|IY ziL>lTp6!StAH(Pj6yAx@AD_C=FWVFVS7!m9H))=?Ejn{xE{!Wxxyi?Q!-q(w*`if7 zgk$KI)z*;D@dOkl!9)H;=eib|WF?iPggN}Z>@+{Z4l59dFN|L_YT?@frdMRzQL3uo z1{&*IRMFT-V->R4pibZa`a6@3T{Qf0wvzt!&%3;iDN{3V1KPY`x?d>PQj)msTlW11 z0*}<1d((E6L-ujTdxnG7@;7I5-}h!D;h&M@=o(R!T6vv6Wf;PZ@Pv5mHKN$D6p_aK zQ+n;-F=W&eT4uxMP{ayv6JVdfiF479ZCjd)$+so=L!O(5mZ{*if!7{V(Yk?#28F08 zNU8j-(7+Aji~Zo&r1lRPSc@*Ph3q#4+C`hfV=;%50*PC@X=EGyVE4^gy5Ce!F7sOj zUK#uAULFx%Jetkmk#Bfs4>V~V(X$1jlk{x}Tn&>E;_T>R1ZxG^=YzR|Qz_xdLwdCQ zb4e}rgMW+xDq!!=#thp8ejMC5?cH2O;+95@ZCdeH?QB#u`YcE*^(2cVoMs=Djq{mSkfe&c&}E^ z*wByJb^4=LG{-|n8&#k9Qas?x&Bg_`oBlN5#wRPEFPnkL+?z3elci=K<`4w$8xwQ7 zh-@*LXwlXLOxBb`?US0f$Cz3OCt$U1hRvC-FGZEQ|C>ddMi<8{l)vU-2TgtjgDu?{70>5G2Lc*^O{GJ_;@<67MF@G6$UduJ0d zW^p1_sKX#mZbV)6WVspDV>kwI{U)EakFymoS(yHQ^@r}d%x>#m=niU4ZJ)Da-Zkv{ zoT54&VWg%#z3(L^gIs0Atu8vl?%6cuTwd~I=XpqWrN<@`&RWN#br^W5`yTR^i&VIM zbIQbnYaQy2*C0{G$3<=P3=@mRVFAM6otZ*WlO zZ?Za#<0+VHmT?#tC%vCXF~)MoGu*MdiF37Th;n;?8r!UB z_g56nAPZ^-A~zN{Xs^GKeJ@DUGq~hGkB#*0$YQ$8Rz+23PC51(>Kc+7o*0}J^c8tW z&YE8}Rh0eSBp_XV9d#IBqA*M7hUf(Z*{JCR?eoaiaGR{XoAtDGopG)H<4?Mg_G8s! zv&vr%YFhQxV}@!elgTusnXu@$XriNrjLUTa21N}K)vrM|uThN^`_A*4)8J7K6gaKn zxNK_6(7*OT+d0ac5-9x~%!k38b`Z#Ji#c!GIq#C=UPI@VpRF|&P0sCA=*qbY&xjY| zbKFPrx8mGO|GiNOdnx__Q564FlKWIt`vrZ-;k_GCW}ef>BDTn)%F3d+$STar8WE3L zo)ko_nXjlp!ul`!Rmq7}#3`W+GV;jnsU&Ntw2PclVjrzC)I4W2Y?id^I04(dts{** zyQr-6h)SmZU|EWF7ME2%4cnqA&7w>FS7v9}GI66EIo}P*apH)Ld9_%iQbp0oENtU~ zAnQDL;|y@4a!`_aV3KKS618ObYX&{!qhevlXj_|-YgGpKhpfUTrXW~8Rf2?K5wsFi zewtf1IBV%2tG-epP^ZuWe7OaRG|YWQbb7c*gzVXskl)zz0YxnN9JHq5)aod*ILM}w zT*zj!5S($s6mh3g7;STrR}Tzn9<%AZ4}}EFGuf!%3^4+*#*ji-L$)FeadHJrX^as@ zxcigCD5(R6MGT2%Qq9*oqi}3+b(2Oo6AI6^?9cXm&$j>#w-5-o6w!!%QMU{$HfDRb zxuYSOe9q~jVdkMHJqH`?`jmbohil{edv0DPifPt88P46$Qd#$9Vn()I3 zN9K1+_+H@qPcG$oG))_C_T`&2=@Ow1Ba{O|+12pPi$f6J1D-7xu2h?Wj?wjwai=GrvYjWc=wS%sl-k^38%4*dqaoj=-4W7>yCPv0O2n0N%PYg#cpG6M{VfdYhVfheiM_%P3EX=j*Roim@<-iEK1**)yf9sL|`d}QB zg6+2dEZA{R$h*Bm_w4reqDvGZZ*)wUMI!?{5Jn@PPgO8(e#u&%(|1W;BGJih6GK~! zjkDgf3@v`%{<7sE*n9V~$+WF%2qDF$2Q1oig;SFbu>0!YTUdZTRocJicBhd0og`c~ zu;LmagIqtjm%_NTe5EhrVO*oCmN6Z$lpiDZJ3!4$kl-Jzoj(E3*P_4J7tWv!iFOXI z@U~Q@c04y`8p~k71&zHzb5{gX=q1LXu7&2$`NcCKE7Ql133ikE2BBUv*o)%|+UaM=rUfs$1CF1&#lOuQJ4t_?em&WY+&VMYWM7I0 zvo!Vk@^Zu9aNov^Rq72PzHnDIq8J^$bm+6TTC{oTY~${g^pN^QkuNY~WNvhtbIi~f zJ|Caoo#o}?5c?}@Nvl1vTA0(zEyBj>aLnXWpi7Hmxi1ms@*R_!i6n@H^iggVaW}si z_C^^L^BN?A+>n0YBoGs3?+-UW_8p?0hKT0Chh$a=5nn-soEows`def|7|)#qtXW9$ z3{D*DYD{Wh^fTzXto{fF7Ws-Y==v*tW`$)302QDEF#PGC)d7D2A%IMP6F>yu2?+aX zb78-w0dPR30Pycz05mWR03LW800aC900XuFzycowz<%o2Ya@mY0|3}&b2=D1IZUx0 zkIC>{zU9xi-+!HEI4o{tGA~cv%NjcmVKNGe48(+lATjO{F%4l7y)y{DF}xunML#h&=2P}05KEJt7>+k}-Pmlmin5sgYJlj6jc6_CS; zn-oGEw>XS5rCMq?ZTYgG;=mt3x60wi@WuIXe1Cj20V_)V+WHlR9U18msS&A@=*v_x zLCKyzAe~!OShPJUbw7NxkFFuvP&i``Y3eIZ2!ZOSmE$eomiyk9CXtV=qC_W%k*!%# z&U5zbF{sU3+{^5At_ytbfTeN#YJ9yiY)Sb1e(4Nt6YXeBvQn&k*0`~dues_;dvmF` z&1RWpS$S=wNpW3oUCpD$tG09HtMXH7`b6ac%}dFrr22H46BREFzQzC>lpoI&2x$g{ zi4XyLhcpEYqla4+pwb)HYXOOw7i1?ibklEZiHemtq?|u%%8Z{{R|KZ8rN~g3CQ(#Z z3T#FMStn#Yf?)R-TAfYExP8^?DV@V%jN4$VSxV!GmMdvrriOVf^>QPy&=zv4Ptq2M zt{3e^Be??R>ds}-@$d2$bvqeF+Vrp@dhXN;TxePLlIfk~z3sDE=;|-mLzH#!I^(J9q3iiepeiEhEg>vZ^g%3eU06a4 zlf1xFEWrpPm0)5C23(GuBkp9*xG9pBX!DF#LzFlpU|tV>!k-Z{8ft|!X%M}JTe(NM z7Fl_SYNe}w8q1zMBRWH2io>M0^^AsNyag4)7SFmDX~UoScQnikY1Sad4Y#+%2o!5B zMH^Jc4Uzz{3^!>OV*LQV9X~FTle~m}K{9L%$^lKQfOUNKNcDm2T>!GeWJ1zEO0L7A z4^+{@lHmn~Gpxk?Br~MS0*zB3_Yj#mlm`|b*>7o;Q=vAI>{e8|NEpY*HZhfK>Vq|B zFFVQ2nskThR+SA8b|&_-EU@WW>FvqTbPw%lm)`e#(mi8$cCJU+5*O7}_fMlKa(sWe4!v%4=!SV{6bNFY^ z67U)TPYj&x`t(|Q`<((3^j4Rx1=W*}5+4*|-+!?8naIhMTM^c))uy}K{(Cvbr-a+_ zjqrX)M`ogwBcz`rNYWO|I?H3SbAN2Zx0Tt^hyrkJ2prtbGIWW;FgVaBXm{6b+6> z7@EFC?WHQKGdje+lqZ#T$Th4%KYj2v+%+r#sePz?9$Ow}Z6qWKy(n+=LcG-7pE~X` z>`Vf!uX>g@R`=G^}!Wy0xbe1ckJ_A6mz zyY-pJDoXY3`}6B{@cI;wXY+8wVcL0`CpoWl=1rp{sEeO5AuLQDi!(0w&DrqpKwZSc z<@|vF00G$T{UOXhYUaUG`A`0!QR$05OHn8@zW;i%snih8183z4v&+@Gfm5)cwF;@A z&d8__mVKMxOY}b<7AM3{z$bxxa!Oh57=Yl?y1iMJzKo(p?r#H-907;sh*GIobLvj9D)1nHxHzw4!pu z)l3{~Rpm#uKuiYVP=vT@)lNpD`+Rpb$%?`8rnk30`;!j4GE!$hw2F*re$jBXBpD$=#??>%>8}mx_uuh zI#}`N93f1to*eU})U1+S4aeQWLj9kJMFqqrlhY|d(Tu_MBYdTj+5_|glDyjE*cAch zSsG7Qmq>eU)!_cQSwsG1GP2KLcWwjroy`Lq=bepiTVwTi=ojawK}tGfnZNp;Z7Brl zDSI9A9e*!KAOYxwy>C~_pMQWNN}l!&!j=>`)}3NY6c>e{w42FQRO0*O$rj~$>pP_( zywN2>jIXAxz#a6+)(_&?lwm~K05{=KIQ~fRYGnc&v7!$Nk$v>j26rK@c+-d6@6gs~ zmj!FHXO1|KM(j#vR>kA1kX6fB=jX50K-tT&*0lXA{Cnv)_28pzZau5UrlnjbIF5WV z4ZajeI2JI)C^`)(DR&hD=F_1c2|w}^og_*{rQ0j~k7S@jNMNxT`t zKJHle_#0sor2z>j(Sw$qNOo3fgDX*Qg>G-OwrC`|#RPEgemh>M4=H`i?5H8wkA`q+ ztPR#_uiT}ys??&vg(-NKf~y${kFGX`$5jt&nZ`}`=YB4DUdDi9V09m$v53R*iZIl4 z!LfytM^F#^f0RBSfq%=3EmU%)L;_%Vo@?s_ky!n%1h;c^3KRI@3iydoDH{a0ef1b) zjnr)!`)g9RmH#A>-4Gfwk2P8rBOmyBvXVp_q6v~=$w`l8_mLzsg}~`|zwCU)JE?>` zx7+;9ILi)+%!j#uDlO8mu3j%~tJ5=!UC@%8oJV#~iIbx{6R*vYK%7vl#WH6lA-_Pb z>SKkCtr9rp1{sccKP*;~<%0h`RX)W9Pq=+`?Pc@)4C(#l@(KG${HVepBLRIN`s4%} zX}B}oB0V-(j-TR9`vJYM&i{$cnnUC&E65XSs*X4SLiyy_J=GNz^c3IJy1bp&CG7>h zR#Z4<+*b!FxhNmnb^^cHz8PEd`@lZ1pN>X+_KlfA*+L3!A@`S9*Pg1LwVw>`C>*YF z+16_Gq4oV6!KuT8Bq8;_FUDOPvbM?@yVQUYwF6SXmOU*hxemi1l8fIiuN zuvt7+4Nm1)hkZC_>OeA`++TST>W%Lb5x zFerB#ONt*j^Xn2yUY{kX7}Swef+>>4s$9S-jsEX9B!5(W?(f%@qw{6jtipE$9iKb- ze-Y>1fPZ_wI24Wk)a}?|Ao>TJ95XStA7j>Xr zBFJ3Eg7)_P0~U>vVu#+s#*xDmefPyZp#yZa<9_ZmjM+rkkP&5)g;)iitws zf$9r$Gi6ASt-0ir6+BZ!-yV)3OMQ&Zi7CnWO^($Uih?JVnhuo>#wfL|pu`li7 zoXD_11S5#yO~y+nnMO91Q)HyYYn)x|s!B>)TCA1AJPxjzl&wyl7KNg774wblGC?>J z7NRaRK_?IfLi`ei8n?$pN>z+%Cl0UJAmO6OH&MZ@3yILyECRqZL=bNS5vWf7O@aDj zpsfNuh}8!!j~x(oG^Laq&BI$K%2VCl$d=juatld24))~rLEOgVLJx6i(wVg^UHWvsI_-hu*30hG#ua#SMy##s|7cb*Jn^YSB;vE#&J& zMbn7Q(P821$sb5{0$KJFWzE-?YG!`E9Qcc&s1|2S_t_1~j5#6~}jvq6eKJl2^y#n2Rg8?Uu=N3f*1ek;y z+&zic2^|VlP_2JyKmAFQf}5;FHlU4|E!0cY;`7MZW%H)jL~*KQJn`mC@hN0JwPI1y zhR-S_#j>;c!YXzBGJ4@j=FbNbwPT~vHveVygkJO%s`)LZ5M3qXiqz38I)4x7E@P$U zwAl%b7glucs?mU^<}2$P$iFCPBu7Qxn%kH}$Qfb=9hEUM@UM6Nt8<3Rl#Nw{c?Xr+ zof8J?+`WfcL(&B9-W z_oS}?l3n(Prh!K%87s*JOh>bVp%vTy6M@bmK1?ieRk+niJ$T3gG=zCwMi zL@hRt&}BD^gf1nUi9{$HymmcK$yFR?3K~Q;s|s}JXGMc>a4dYz%h`w7hc%uNma=$^ zLQ*Wco{S!%NAWAW2W_C2Pa+;GSJ=Q_y^*|74%+?d6c~c(Q0`p8m246o)8eL=Tl$DF zM!djUMM=P3qs?#7_>i(%zRupT0&?gqyZym`g(Of?sMeA@b1unANV5BN*#}hvoztH9 z#R(#btyZ4+ocx{uLwhW!ksyWS6<1*tju&?u%<(G(JsCZF%r2Fye?3Ggp3(;MYWlm) zZkg-+}1 zc9cuJ@EZ)g@9aJ38_r$a0h-i1^X8xm_gO$KU0m5xit(GL zql*jZ`A7t?sOt!8%UE_7d2257*bzGI%&V}%X@0Nb z&1ZMi4K8yYSX-6O!IOeh;FZSea{o%i{fzHgDur@`YjkFN>8s)8%s6RvXGuxnGm5Z9syxA#VK5p%<>I!9nq-McSY zzbu~pP_gN7$b2)?cT4TE{pD9SOHM;zo;&4M5??6QLlIm$u4PB%`WLAiK~htRD#_Hw z7-DIG=}7D;0}G)W%QyvSN59@r!3XGApBN6-l|@rqI~K(PyXD=#o5vmX@tMVi*ycJb zX#<-H9=_p;-j&Zs#o#R@yo;f=(?&iY_tYHI!hQm-0B5gT1aCR$+f}{1;KNl|Tdy;>bfUvoPky^A2e(z7;rk$$_nY`BT$tUm zAl`>P$rjYQD&PoA6S-(JQav?MM7&enNFMTV8N2&>_#abK>*T=FD%=gvk=vQCEsVTL z_*nV$3pQFOn{MAqR-#j0G~96w$HD{fhY!$Liz>N8|AwF&XaANaFp~u!3ySoKB_aQt zWTe+b1g1b^49)rMMB$laoH zEumUUN1Idf3_K3t=b!E^)US*<7I=u@d9IM@me)4F zhbRVO7X`7NvDkn~`L46pHk)W!HNx<^)uQ|tfAC9oj0`!qeON|1Xg-*?sq^*5)PEH&P%}1&q6#mg!zXust**Yan!4#zb@zcQJ|7_VX zf@+duufEN)XRL^a1aaS(*_Ri5l1|0WvA-qcdksvC3*}E{ZGE^&e(Q0bZ_@@yMd_?6b?eF6KMve}KEB@{yS{@^)qIz(G;- z4XtHZ%hjY;(5zx3GVziZnyh0@Ng>J=Z-Q$O!%7|ceG45_4&HlkN$$O^{i82C-(!v;4g^3Eh(8F4tii*;?IiTR zXU7;%Y31FMbZTY@xsO5|FG3B(UKaLJLpP@XHOp!vXffxi(36?27y9)3{Q3Bbo0ykC zw^9>=iEpalc)+#}ahr4O&A_%4!M;=HgEu4^A81QKic4n+^%`q{m$wDy16q^ zhrBFlZ5Ucz?CHj0J(0wo+4!d@H=}9%>D$7{C|u>n(1nC_Ir#dEZXR^aOk~skVCzzd z{mRt$eV_=Zn3#Z#6?RzN*`?Jgbl28hr5Iw9{k~`Ma@UFi!iBqK1}pP72P(GJ6N?m0 z18W4^YW{kZ9QXE??2xP^YX`*k6cwV}0&1)g6ftf`+R^WpEQ6g02tD*Dur2!PF0zK# zzxVn#u=ZA4p8GO zJ_D^uWeukfe`nVGNJDAPJ%`%8KoW)oMw|*gHd}VfDy#wT*lr*$u6tfK`1BK@Le-5q zb|%(M=AEWyX}IO3ojC5Ww7chFa<|KTr8Qk!B&`&L=UXYE*|`^=YKjD6eIDVPGHNN zI1Rndsob?d#Ad{@{Nd9}%Q3gr(T2h2wZuBn7!7B#Oa7SiJ5F?y>)0Jrg}urJ+;LYIW@zd((7?YX;-gH z`z|>+0U*+NmG&M6R`X2>gX=zj)#rJUm_<9>7m^m%q&ZXP@XQdFY|NbTco&eRmsK=i z)lV&DAwNJ74P`wn#+j zypr~rg?y*8`Q5Ooq|mS&Q?=b%=NV-4R1HJ!>Oh3ACT3=}^E-|$tJ_T0XG+X>E@Gal z3%aC-MQ03JONF?GO=g)}7fz%1+>3Jv_{h8yXWmDn^Wu#nj|)baosMzmw$t7x`gVqO+c0ymgxXbT)JO(8r^RTdv!h#m{8@p^yDRpLoq?FvG?T=__hlYf;c_s}u7s55?W9_nkx)l*DUAw7mVQAvLf z!_q;?nLR)~h%&k4;XI)4sy|^85~cU9y-^EZToP$p_Nprnz7plC@~LKy4W3tFcSB%$ zUA@zH2CP3_yx}+4e17xmprTH+z^eCO0ZbuwYN2>&rtwlRhn%)0Wb-k-khaQ+wlb<` zr+4*QAcEy9_Q%IRI3+3eP~rTKm$=S~Pr?x#I0KzOqfcnn5uW%H+G-8SRNG_y_aP{_ zf8Y9NX(>ZOay{!I6!!&lI4Bt&ww7U(`=TF}MJdgOt2IgVszGHUqn+!LSVB;zOuAF* z_bb+p3+xVBR?>@|to3l=?UmL&LSG;bNb!&%$CAmZm8gmh zSPS~Nt&HRhZIz(>-AlN}T^5C)6v`g?uq+|!VZZ~_$eLAB9_a|dG88nsuz!n`yi{EU zC(Bw${FOq>Z>tBg#q~!An5QrK7+E;aTv9Ez7Fqw!lb5={Ho0CN%&ri`yQgECG6cof z#WT#VKq?fYbE5kndFP}+yRch7-16{bJ#Fu9L1&SRwS{!O&T>}SDP%fCfw@McGlti% z=gGE!d?Sy#=d{b&&8deZ+wGc8GnyqHV3u8VpLn);&M`UTV+-n4*Np2m(jMoo(B}I} zaySe|`Oz|z(-zj(-ys+t%~yymaQ_Pd3+Ak?<1L%A0g{jn`subkRpeAq$3B&bRNaY)m zA#h3$zfc4qrDc(!sRkdf`_t2LyS}_Cy$lv3B^{ImCwffR6S|6M4Y9@E)q&sOOY@DG zRvq*`8djsh>AiRvFBXE}Vuv=DifV|Nuh?{p;o(TUHv?7*$q$IL+iB&%&tVuqIFhVmp7l`g3)VfnY%~YHHt3LI{0}ZXyAup9wL*)8O$MIfstuBq5ADOo_6C$7uBa6*bMrmXin;=t{f%^>i$Ql* zA-zI0-~0>}12B6t5s2-YVCq%F5-Z^pbEP4!oZR_Y9Mg=`wD_|Zuhni@_Z=sC#*8}C zX%+Ze)n^Yos)?2?2SgDg8X}~E@UO3|op3PdrN5b4*9DJy8`!nVEd+=j@g#ZL)hj0A zN?NU2RLGmHqz$OuS*+OfnRLy<_JP$pI0C8yXZhx z(2}3CDiBpA6aPqosH&@g=4}{Zmf)rb-xzmL`(Ao^J$f=8WYLg0r!C427|^1V!bAthEMktwY&aha)2QCtJG(tSZfxkem*^ z1KQBrIqmtVrqFms;=7>d3SfZ@X_>c~S-DGEvtq#{PQslHbS{z`GxaLwaVX%H7eo|V z@;&!#?TMi51%%x0x-P=zT-C;*7^vGOHf>Yma%8VAs-UcS=dvpbkZ_bf9d9_gZjUE0$``|;8>bBG(F?dzZ`ZNPa%Wz|Y_wZGzw57rfn z07+^>0fxGDMoPjr#?l!dhij38ws6+GR5TPo#{(^u&%!lzJl(#Q{U zO&rppeM0B==I~3N_BJ!h{Ebb$m=6OUB#)W! z!SKWo!+K?MY03%buoBpDh{H{BRQdK-XEK8;H8dm~p%3S33p2^u29Ee!N~EQ<&qVg@ zY5&bIzL8e?Jw+?0vu7#*YPCTSJ6hy$VbPKo`2@&>!`iYgScCE}kE zFf!5(@ab9dF8_1{UtQg}Pa;9YfXB!2hc2e-=i^Pnr$50O`NPi@XHwV7FUDFRwn_Nf ze}fevlkFZC-WbKWez&?VDbNW^QPvzhem6Ll$W>e7yIKTGxb zNv@la!oAz9_>nGDo-C4B!p8=4M)nlf5~zX=-BC+TWHM4lJGCt^ppVg7@FIIO)XlI? zGCDkoVQIJFQMgm6ruI76@n5n+v%6BR;5g}`CN%!0@Zfk#uz)Z>kV?Z?u5$rvIZ5pJ zMk;NIxl5s|aYBsM(wRdyro^q!m2f;;mKAp61h)PL3zHGxg0b^6Qa4J)rM;y!!dpq4 z5y$x0ABk^keYUZg`24a~Pin{Z0&V~UCE;h3qtuYOETp5asvyp*Hl^k`g@G@o!nKw_ zzps1Nx5zx|lwQRs)C{ODIw`f`J^Y^YYn!J3ypH^GU>69t7GmG;mh|C&cgQCH3RKD2 zb~e>$oi5GOeBV%a(4FwUZIV6M zf&e5t@PecueZ36+kASRHc|eJp7_IPka=gjmg0u!R`(cu`xj=bqb>6My=8WjYj62L& z@?Qw*o$eD0;5RDHR7d@4%oPCHP}$p9aA`25ds0i%%pe+bi2Vd{&GkPAa>kZ!YLkFx zsN0EWl^&jV=v+)rTcgP!}VNxiHB^8Q7 z6Aosi9`Hj>g+iQEfmC?%C6}0*%1m>|g%31PPT&gCFtC&4i8n#UaG{a+ukxj&V$BJ> zr_b+eX8x+9CoTMRKes>Ri1t})*A9wATAiY^*+pgtCmYN8cS9FpRfcoLjo2VwW8KKw z4vup>&1I+JZMAl?>rLQ1X(G@b6YbUIDpj~v+q^TxDMxShHlI{y)$9Yv$!|>ySzcT& z$jj)*%bdMpzxa+|((YRJD^licxkT#n8Sr0?N*r7*l?Pqr8VcqOJzeP$py-a@jzHW@ zX8hIT%uSFrX>j1#o?bsnajdt_8|%M#TPe(w=SNmst2IuoYR22+N7XB(Wk5I+B2eFW z(9AKU=j8LJJDLl&gWI`CFI49pr6+pl=22(;muH%1k#BwzfPK*B>-1ZMV6ld)*xVi@ zRQ5dtnsn?A2SggnSWt)B5?zrd+y6F%URpslPq&pfEG?Z^yHRNT^ShOex1dZpRjQGe zH&P;>38(bYX{_Z7sUXj!cMT~=+5OH<*s+ytO*9*nLrZ8<;Scb%LOU9Mg&}gaz6>#u z-#OC<);k%KvOb-O(#BdVbakdlnM%Do+-&h9QpbfM$-1*<`QRlG!{DQ#R{u05poYkrd8}_*0&n!2O?WZt=-__MSI@7~nhUJ)O$LN;{rDeEEv1L(Z zvs6R^;lA%-L~@h-_{gJwq^R#2?-Mc-xeg~RpOA3ThsFd%<$IFPlq&YjRBp?fqSoz1 zLFM#FaGHCqhP?>7-+Sttzh4#Rh6{8OxXs)8Us4_zSMyELwK6@xI2^K1PEI{vcBk;C z;BBjQMALOQ-b;R+Df&se=X~PNVI|q}BeZKG7?vk3?30(1s3l^n9ypv~EcUQpDeWf$ zH3q1xVV{o{i|Eot_DD^$0t>DFJI%L)Nuu<76Y=iQ`;r0b@RFGH@DZ5Z@uVSxaWA#+ zoYHBk84jK>Z^@+dwnmxsS%fdlIKf5@amO}Fs#)JgV><0%EEn0g-qO@rU)L3-h;5$2 zNlpX#nNlC9cb^TzAy{~fep6508FruVw*?7DTh*^m+i^mTZUf2RVR^ox;DNA);@{ib zxyKXdXPd`(77FbW`W)q~Ri9t0cb0Z_6|ZnRgh#>2zU`FL`q~rR6ya^^gMEd7pIHhW z$+8A6^2W73P?^cv6)P<{J9-`rUY#D&=Vg2H7Ai*Bc|A2t>vClybKUK5f1>q1&wvhf zAm{_paGl$?P|SAat1-^|FBY+o0d9YsGBC=7l4r%`DGJL!&1R@TC~5VIr5$e1pn1KE&2r-~avnwOz#1(K!rua|5(eU)o% z=ZZO#6-?9@RkU0Dk(>F=wjV@-Rs!GuvI+zEYn`biVNwX2MW6owEk%aPk@O(LL*Nb% zg3E?!k|11l`ZznIR<#?)zLZvHe-9~ayN2a~Dk3n=3cis^Ks^u?aNgY>iuZUR?{9V{ ziPxpRHCi^{(7;x6t+2DUX;2ngh{!y@TsxVoeP+xQ*si-{!! z4PVc?$-_Y*bC)uAAi#C8;6q}S#ZSsf&zERavSEJkz$r^sG&eO-7}v5rybx=w^JF#M ziaB;n!nwS~jQd9@-%c!5E~_C?%lZr>U&4X9=cB(Mb)|b zwO^iN&j~)k&@EC%(Sonc?1sn`(h-`V!RT|rVH$Jj&ed7zi|n_4kV^nkPn3)DOwjdH zKD1a>;()hP*KkXH!vo8Ec9Kd))vj3Fx4pV(gS>V`1De)G>m<&*%_Hd^_DvbZp~x#? z!@q|>w(BmYHDnXz?6_)jZ)whlk&bP1BR`9A{pT}l1$iB?p&C7E^ z{3dH^@ps3aV4rjZp3I_11A`b`C_{>W%X$ z91D{x-Oil4sdJu5?&|56C6ev7-6)$fnTguGMD;|tsl`5F8=f7q*70Rl6G_)YDNJ>d zM>OQfy7~viNEc2)JfOxLZrJu9`p!EglR(vC<{hSk& zr=dvQY@wvUK9^_n$c2LIivv^MT(vR|jj1XZd`JZ+)V6^G;Q2tCBYm-ryNc=2IK(L4 zM;E>k&!Et!e6N{g&^WG6bPPPmcz)8Um2-FVcVq7|E#gnmp0Ulb;S6?NeQrtNRxUgd z#zc49L6vni>yk=x+G*LUb(xKmsDkaIaJ*(aTF-hG?HyYxrt5mR?)MH}@q_tO3M}uK zZ4^jHXm9-8@ZdpM7Fbi0hx3D~eBkWeTN;F`lcl@mNYiukm%5+IdA6QIMU!^VjxNwULZ-JG2+Q=-@J zDWT=C?(t`+Sy|k03J%4Z|2b8I3SvATkQ&DCL+YJ51Mit9%;J&K*IMd0$)y7Q z{gZ3f@eb)zYKP8r;&(ssha!|_y?Q`4t)GSD7N6+Y@y;0m#`z~%?k%S5zAW<|Xd+Rp-4znn$3CLKGWGBd zw2TQC_EV3_IZT~IMmy5@9g?CE*qliJJYjt0uZv;@*=>Z$6+=@t5xm|yM-VJ;@Kc51Cib6J-{Z!W%`Q`v5 z&~`hAXFFi9D$I{C0BwYWL@9#KSd$c-sC*&(wNtm6x)!})pq(iJMq)<++L00GFVzcA z$}6Eq%H*D+cEb)C@1)UtL9lror?QsC#Thn^;wo}u(9qw8Li6Lfsj{}H%H1|;=_=aH z&2%lRdE{2dWMR(5dG>!ts7o=-m}VAj4_1|c zGvUWTi}44x9Y|d>O3*&}0H3l_)UR^jkJKmmmvXR|T}P;lTeO{R(_Q;jKt^i*BLmFZ zPC9JxH=!;^%CmJW-1&7E)kwAL&P@_w`v$!K?BbMd`n+=1xqB^4aG(?3c^*bGPLCKe zBV5L~ZXj~4Yjdt3_Q7*is`4$oD-P<;Nu8a>1{WDsa6gir<8RRV)wP@i9iJ#6EjUZ^ zz~%r9n#nsJ%Z$r`beUHpvsy{jp9xS{5AIW;>H>HD$uN|+bQ2NyG}`ieZs%ls#Mx<%2f{isEC{pngs1d?ARNfX;=D#>WPOtz9)S=r zqO|1bD;ipoh8u%X?D@7S_sNg8$!IJQJW_4Twbz{7GE@bs?Cg|Wd13AE3zGBqBX0s@ zez?!$??3pxQw`qE2tB_y%9B?%eZhp!0Lin8FY<%=y>-4@m z)4V$M){(W;*`@-2?-3jF`kq4sPipGjqC8Jy(C`v$c$NS5JYvF_kwF##u{zu%X0TZq zyA4u4gL840bf9%zw={55<*~EZU!k~)M4?R9X8^9 zxkl`SU^70D>OLbc)dP4lg@gpd^n;y{P4LD7$%TVIxK^`DZUx-PuS;azM(iQy7sg8k zJCW-JvChdNzgX|r8d5~6%lZxG`prk$r#rjryBmU=uILPHcJ%+7zb&Abyx|y<{LYc| zwbmH~L$;An_rkVteSckF%S_MWc-WvHTEf8}HI_@}dupujn4RfSGCnC7pAIt4I~X$l zyQqrrg*~P4Hwy5l%HDsq06#p#!MQa@4By4gwJy$%<>s1fLrjylVocLDn6zb>l4%M= z6!UYiTeMKZ)(Si53UP@tl20U~C7TyPx8fICR_0X;DjdzO!Vw1yUf;?%i7k&8T3mTc zvuLlN{N|{*2HiJ(+hm~W%7^x%OVznwI9^k|=0>e-Zg2PDL7%B{JRKgbAH&;8kG2s5 zhTa?4vM>-HN!rlcoF4f{=Ig-UeN+-8>uIW(uBPHTec8UY!Y*P7Cs!TpatauCbBf5- z=E%xi^RZ?Ss6G-l>f?8Y$|X44P1folhMJ09_5;s1vC9z>#Zn9@<-}w$qNPMQmYLcl z*wjZyxNy_kXZrSAYL0X#cXoL(S@s;T)g10@o@p`2nB1A%e-}fMTG5-4tr~=cja(#Z zV>H_6YM)ACB26~LQY0ev{(N-OXt-?@UD4X##p^p{j|9;XTRA)7Dn8f1`Y?Ki{weU` zmI}MQ^8uk*l`y}^hF0_8s(^}Wz#_MNQW~mSh*WLZWnmAG*gZ<6+^p+WnQm6zy8HUw z)9ABzPmNdMK-F!x@63r{U=cM-??j)a-vH`P;Q0LPJvhRD9q-5en(#TWi?c5aiSG&L z$|}VCpA*1K#{~I6e81T9?{hQTx+g%O+~3%r1ttMgL6bTGK;rX58-4i?Lo%i?jaJV}~??#`ae@iKde1bM( zjpAi|c@EpqqP6Tj*jI=hh9uPvJXhi3tLCeqcoFAaMch&iM@2~HZ1ic-Hc=ui*(Tmj z@7DSnUCqtin@N3tL+?XlB#u*i`DzC)smRii1czhV0(JC0pUoEV+ibO*pXM|47IYKi zBfigWoTDTA3SJna<~(1eap*M;vqmgpwI-Fds#j2j z>zaWve3JeZ)U}0-As#vGR$Jr-k_;(!cjB~Z6rZyV)1Z89<+S`>Y=Ht)4G-#j)tos> zc0O|B$}gxE*3V&pJ2g&=QKmEqhh^<`)lREXuG9%fWbO2Bxk{n0?(C7PGZ5?5@gZx-)HQQ^!dr3pmEo)r9jb8%*L4gTnh4?oQLXam&i=ylY~ z=V=pgdD?(eC($>RxdGI>oqLBlQt2Hgu6XB%+&e>P6 z)|4rt?lP;TK7YpZ~ir~<#HxCKX4eho)dzOKMYbp?1+PlhEieVVdf6j$S)T2L%#4rz`l7F67) z1;rvwO_&sVFHKJwcmxS1UcvoX;15^5%CFH8s)0 zNWM{8b&AWs!*dI-@kYoxNcF}Q-u$X=a z71rQ1fJSWupv!3I_M2z#bwTeI;Br3Wdfv6_Vu(ptznU?ynFvTvHWMQ;y!mh!w>K8QMmOZWg3X<7V!Sr_Rjq=3ET&ibZ zrxW!{yQSUeJFWW%1J_++iPq?LZRzOku(yP*U1OcQ+wFnDz3C3r19D*!eF&^KF8{*x z#;kR#85VfeT9(DT>R-`7k23gjTEiuAm8|j^Di{)DBwFQ?X5b}$7Ap)S>L;VX3SgWB zzo*1le`WHU+3%YRUv)6P*>kh8$Yh>&=!%&6Es*;@sL(+6^u$pLbg;qtWjHq$3&(Y z_$J9cjmn0(Z>lXKH0e#b)e5yjZy4%>o5Aom-lT_ButfkzyB2CYdXtU=j~~P`l8ZH+ zt&nDoGgPnymU3}dQq1)5RY^ufUGxxLCTdci{(p(j#Fvy0M!%{21$;WC{B-oM(Tn@{ z@0y!AaA0PR!@C$7^g7)OwuLmGpQErX5r=)kpo?I-VD+C~!;#ms%S;uw^SbI{A*q}Y zG^afEdz zXbH;_Tn|u`3nz|C`BP3@{33cmkQ-CK@%QTKX>_IOA5JV>b2Pt}L|@G?l#j*%D`ILB znlHdll)y(Z9NJZkp%sIq#5wp#@CA-x0o&&m5f|dE_NcjN+MPR5FxSO=I(G!h)S<&@ zf?j1r=y@oMEziyyjgfjA(O$HNyz}kiJ9c=-UVLW&%2Ci4;GO4+@8q}q^Y1vJu|I%$ z>_g8n6y>M>9(e(yV)QqtC-*=;KSNoXfHJp1-kFur1F_)pG*I66%gQs7@}5V>p}e~H zD=(i*JsQJ4A1LcBdKJq0Hec3uzHNJy3>ND{ z0xmb$X4ey{C!FY0D3Q+)hEhNJ>^(R~*bnFU9BL-&IQkPE1idCfWf>XBzESJ~L^6`` zK)}cfah+K)_aI||xn`v@hIjno4B1?IY||5W44!$S^{Z!w&OGt-gAaB;^kDBp4|YBH zK+*qkrr`h3EOK)guak}wTp9CwoXRqj=5dv!SOp)@Cs(jsrsI`k@>{?H%$~+NR41{U z$z~Li<&tdNDxwT;Qx}WzIzZBcq%)}z-_)wWg@KZ~T=DC*OP=4=Ty{)Q#3ALB**}IfGA8f)~&wEec zeS1D_?srIBwp)+O8%ohM(6WM>q24_UOjgLvBVmLi3n7_kJt?VIuC zme4>A=LaSEl?We55 zwH_yFVZQBHr}bH*9ShPjnCPu@Aju53>s}ykYw>m<}ntpS|)X z(gFP};{mgZ-_1|fH`jY;EBzYaW)snoHX~)l7&JX~TM2x& z0I#M#%H>~OA13+9?6~E80@b2tGmpwtSx(g(`e(S9lT%z=5c*<1&WHYI0{8LpLdzB5I_mL?a4q#j z3H;sy+(3P~5Wn;^dEd{?yDKZlS?Q-M!*ylwdkb*G?o#+{0baeIpTB^AoVOIFb4kik zPlX}akcQM%^fi+~P?_wi+*kQ9JP`{+VBv;aVPt zt?LewYm|qh!H&9>9>o$y<`1uT&&%nHNiBZ$PP>fMa zlJ;?M!`~O-cakyS;MG6o@<_e4K1}k0nklN_-uIC76Zt{dtMl2^Y9RC4#k0qhR)fl| z)5v6wqLUx!zFnfzn-zra`MSP9;?=miOh4i1{~h3I7SiSr7gv{$=L1}Shw!>EkL$Df zzN6of_amGh`NN_f=_mde3Fd)d%#);?=*ergZTejyGv}j^lH8nJ`6Rz5Uk*AxS)@x} z0WJpZxQ*&8#Pgjg#PeyWr%U4eif|qE)k6D!Ny>@w?f*i>cs@P#Ohvf43_e?cS5x2N z<3C?L1RaPLpy-encr|z!^H{)1DfRj9ogpQhcI{GZ1pK+MvX9W7lpX3l`HsoCt7biYC zgn4Vdt@luejwE92-ZnIb6EP}=M%emVYsq4tE3BkzHys-)&CNJ*eN7c>u5{K&lMRw$u?Ip6Wx$YtmamDg<`}M z^3m~qe24j4itD3~`bPKvVvLQpbKfy@#5R18@ZAOKx4d45bH8DDKW8%zQYG*=3h?ut zmEliym%?8wz`vf4mxFp;^d*1~5dQZLda@+G?ze^bx~ID<$K#zZi^qGd0MD1t!CxrA zkB;Q?s|}Ol<`4#zB%q1DVr2Z%| z5axP`W%89`ny@mP^_Wex$GaG*Yg)PVUoM69#d5!D9c>t&~-KuC~lpV~nG_C+E!^tVQS}!+^ zO^@=ep=FnH5{=%x!Okc)5ck&tZ975Y8@c{I^E}6^aDK80JeIVL8_TD8yn)=p`NDko zlp-v*wiaVaPZE5Nay;*aB0g8hTq1DvPCr-ve}Jx~A?0xJ<4+dL`FsHmx)${f%3Fx@ zyjY0yT;Oa5vL|mB{d0JKYXgQq|K-xS&^HS2pPwqWA8gP(yrAQ8@tnUc#B)A9R5@Ps z+3lt97YgvB+c-EEhl$_+3fIo@LVM7Y1U|vR^+oveq@5i6yo~GDD}W!ICy9rn<4=_O zL@pM5A`A9>{vt2QUo`M8I+*{1Bog8kuH-*`AW?&SKc=5rL;d0nY=%_yI12;?D1I$OW0kZ(w}AYWkfIfv@E z4Jg=tG&Ya(4$Y4o;1Ul_j~*np5S0IOLc3EO?H=K6Bxn!RTYw*b>%HMz4C!wRF{DrL zs2q#>?EX^t3kCR5{tTi7$cHvshOGy0nK&=9hsr691XUthX40uR$!*{SzEfqP8OAo< z;qM3(vm8mIOXrexj*B|6_l3yZFKTo*77Q5Q|H$5 zpsYWat>umLZM+Z4N>*6QYk-G_%hvK5*v$4-e4Sq<@ewOcELwuA)wnK;a`KDf=cE_2Iwx9O4l@_C;&6mN>^njZ`wo+dp~La6_-e$Tmy?2vS*tV2 zpZT54pZT5GaOO9kVWpT|sCeeLk2~^PPfq-<({yR~97EUB(S#>55Hgf56H(^hANSAI_U9%(9t5{PwL#_VMaMFRMX5_nfgu;>w zN>`|*Hoi6O_@TSLdX;WQS37Do&(W#;SrQ+kp99R@Qpf?HkM6-Ce6w6^f{3KFC2>A< zNu19L4)LM603VHNLx2zWk|C0H8qjQcc+bXIp6Fi?%L9L1iiVNBZAWjWZ$L_G$kD&0 z`foMQ$g-M8k<{K;m)fSeRvsVRmFSx9u%li{m!uP&Z{9QDKe1qncyv2AwRN@G(jjZ- z=JuIZdu{(*Q(G66&&jlj{ub3vouGj9iiwc(6qtaA1VM}hBL*i{kdT8^a3bWgoJ^PJ zVG`n(G7W3w?8=RKnA-k=JWRzPnnE6?wpN;Ub?$D9Zf$nnNC%Uis7;Q(qs$^X8yK`Y z1LEVdT@$X>R8(WO3igYe8;s02TGIM;jXS%&hK5baXv!2!J2Wo!xJ)N=H(O*DXJE^| zYF)KW6CPItTa8#P$6gtFi9S#1an^c1*MDJk^B9At7K0YE9r%I|d%~XxY&Kh^V)%6R zI4u+X0TVL)C25!@@A=4`d(WT#{l_JrlRYAN#CY29h~#t9N69`dk*#WS1*T64Z+FoAB}n9Evp+j)4}5o}!tqk^XU& zkfFQ#K4!nUeNSHvLyM$|(fuuLdwObUMx=Wf#net^-?lw-F11J5Kl*&`i+Ej^b*o*y zM+Ut$-MgDvuiEvYj}zIKgv(X*mBn*H$l9p6;u+64(0jwl&cFDA`l*GzH>3aFfBg8R z`+&}W1>>lP{yV8FOER{aFFV&6U0nGu``h?PXL7u=&hE9-WhXn+g_E6)__Wu;@y;s_ zc|;DcTDdQ!R&pkVmpkgY#0iu?>e-C+#$?Fe7;5ZSosfijcQl4Zo88D3?+@ODG^(7) zu%-z&q->%3?%vd7t3w~^2?e@anqBjINNnW#{d7I_C!Ak9CS5R>?ghX(MI7w1p39hv zbC$FEDsI0fS;iJAs`zwTCRWcUDfhFAk~5yU=u>jQbF#b}CHs~YO>=$zlT~-NjxNQN ziI(1$NODklqN=`kCRsn$>gnlfY^fXEbHtXOY(9fJyRMo^bj0i1TJX6;x=?SVW2aU< z(vjHK>>&2{o9myWN9ZdqJJZ=*Djlo&Go4{9WO7O6Go1w==uGF`xd+AQ6OWGUQSLFG z^0($*jn~nNoM-1JUPDW{I|0vC1kYDu+qNY4skv0tSL1B^G>IRq27YL$W;hu@*5oNJ zsDO%Ol_W9;?-|z`WL%6+ArV=n6P!s*#4W;f+rY5W7IrlDS~~mDV{Gmjw`nLE8fvuq z1`l<`COduf;dtw=L1WOR^;pm+5B!w8}P<##lxGq(}lwwvmH*6K&Wil zexyCTrP)m{2_ucYdyM9t9ifq=y>95h*Hw;~+mZ0;TH2kdfI(W*Ih`=I7@a%r*b&l) z`=f#I4R?5=*2a-&%Y2{j-*IfZG1%;m59s|#PH&C@4Rrwxm7m>Q#yhJ2g0q`HntO^x zuhY4uJ89;S>QX<^zubV+LBJ_q+waO}q$xX6wh$QaMI>Q-8=y4dZNunGL{{b#3kiC5 zIRqpkO^|~D%;Z)~%Kh#qHy6;k;pk>ZbXR}S9BOsfg=+hz8)~<9)Q+?yT7o0{pX_O~ zH2963t+vKmLtk^;7<6jVQB#N<-#iqp?T))8+TL(P8Mc-PYqw`1Gyqj;2~8ebU=Cov=kr&aXdVhz>PGqSu}EL@hv3&GY^KSDJ=+ zdI~ggy0&_KiQdA5KyG4P`>~Q!H!hn&d952Ogh`I^VwKyTjBrV&v){ENPPAm3@#P`> zIDsY2ukC*Tsk0o$=aPlr4r2inh8HU9;u=s6NCr>+YSwH|a)-TQCET`}v6m|0DWZh) zlvGIx$0x-UwQ#q#Q@j5teJzSMdFFO|duN-JovQ8o=mkO8=ZcOrn7zGw+U}L;eKvPT zA86r@_7>@>+t{V)(17A!EmLFR&1u*4Zuy>>P)zb;r7PSPh;MIo{iNDz)JlFvx1#GD zb(-(e_)P2w;51I;v9Dr|Q(_KQ&T)!EvF$)gI9X(kj!OuXsln<})~F-d?TitO1qZQK zJmon~?M!KoQ*l1W>FZNh)NeYNR&}%9_K=xAM&m4}U5cZUVAps=+nw0a)Uj2-UN_gj zFj`N~?-$vk-N9g_D)$*dqA4~Kx1dw#$O#kLQ*|XdW9pCeDDZ|zK96~som?qF?8t1V%dW_-G%r_Qgll zur{7od=1IfwF5Rsy=YNByWQ2&7}lCC!u?FO&2Ka@+i=!beR5Z?@8FfOlsVMw(74qT zl4^;s-6pd*>L&J*jIYM9-zJXo_C^~p)*DF9*E^_pITG)KCV^-ePn>@J0qN&upO=2#c!%*3=_9g7&~9`z_g_e#`zs)XPk*|T-w(XF zK1>H-{7w12)MaN4l1*B8FLkw8&q)IuVl8IzS&~?8>TtS$ZaV^JEN?jW=k%4P|JT}= zK*v#?>DH}kb*p-B^5Xc)yVse;ySv=sG%*nhV$qP*U$N+KoyZ2UAFOm%8yvI3o zyQ;7Ly7#|J-T(jZ|9!NtCFiyJ<#MS_<4Vx_FUr5N{pgN8;Gx^1-60Lms1C-CvMJSY z?Wu?Jvlq@!#N)}?LS-=8O2j1u{p?bnQI~8XcDf`>d$y7_#P4`uwaD*N0*R^K-r1wn z2_?pmy|Z62oSH~mDN3jRn}g|zl$jLh!XTh=tIScCW@6_ZJ{Q`>Ts2$hb+nDe4SvlX zi(huOO~m2oxuft~tizjePQ`00?4dRIA6M8zfVGFfrvIt_&54E2lbv5V`Y@O8RJ;V0 zk%oG(@(7t#C%iGiCX%VdRu9_q!F6i+9rK4~^l~yI>&Wae!^sF}wDLex$jq8TdB#lR zhx-6){&=z7uIKiI*!-bEQXlmh>m!Xl>SOA~`Ot>6(-h75z60FKLX81fw6SEy?rj0> zn~om^`bb|Sw63Si`8Ru@E_9fW;7z#e*g}+-)YWvA+~Nwi92&EP-M}tSYYuAQYZkGj z3nePf{;`=g?9!PJYgDC8SQ3Y8SZ4HOtPI|?+62<3cI4dPMj*F0xx4xknTVpzP;XZ^ zM-v0`!?od_$+&+*ySJ|+*5d1%6U$cq+f>T+ zsl-^u&c-dJ@S_p)Ez8zq1TLk3Qy7y1+C$>C?IH40*h3T;D?C*T4nMYTqjIDEm_K#- zt_Elh`DX6=FR-t04~rx8KADB}ar4~CRsPkI?rAu4w9xiM{vjRBVRlcO4w_(%E}Gtj zUuP7k3upz`1$7F#v=vlTnxGXiw3QYTkjBT`Tt~@7rh72m)|6wqdXRzioZT?cSl=Hr z`v&I3ro>1h*0ybZywhz0i+f(sJ1z0SNZZ_Ckkv0*3x?oWa+htRDs;}$&Q6Ng0kokD zqCKoS$n9a3CXS-KVh`KQlIwU&rjd?^?pxC|VvqX+_YJq!2t<D`iWEJR#Mq`n9oCy|2@I6x41RBa%FT`iG7g>96$ zvT4K(m1MPHWC~CA){pml!@jO9jsA`8-kwxbOK9Ng(|yUzhVJIJOzOxhM-+7 zhBiTLXil&02}K6u7JWDu&TY_XH^)=st(Jdo&h%tst+|iu}0|<>N)k>R2oEbBy5VMb z*c4mehz8E_8}*G$^84Qezl!J7zLeM4;MN*K7{9HC*Z}+Xf0I8aRD_2J5GmMJj{ggj z66h*Zx%dk|yzuiIyfnN>qYJZgsqRAlkvas*T8B~-YcO*G0=P~?qX~a4bzjJLbi=WC zx*JTLNg}*fHJUYLGVHZ8s_|?33Te~d7b=Y!Ur?kps(amg-I&|ZS``qPOh^0mY}8RViTUzY^wD7%kjJ9unb$I z<5iRq?ajq3`T#7DYeL642oc8Yc?RlIK{%i`<3t}ZLF^$;601Q-ak@HxfpM&PeY)X= z8(lC6(<=Xn66sUPrL8l{GZOffP@W0kuca*1XBO!*3-#Fu?*)`ggXfnTQS=M_zUBN< zR=G68rLC7|PzBRvW#0M~3nV}8$8YKN8lys}F=$K*VbC0PYqWukFSSnN&wyPb35?sEK?$!>H9(a+xCeRZxF`q|!_b9J{kZ@=7n$ zLK8SSjpDDE6L1o))ALq*PL#Ng^phcY{V!3p#;zm!V4eQoG0wJtpDGHmf5LEP2;+?X zz7ob63G49;=>R{&=cs%b4Z8!{x^T4y0*uJJI^mdoKKg$Gd{0pr4dG9q*#>mnIj~-0 zlys6Y*tYW_blpMRLk7Wr!0Vs6F((Z%LOSs83gXF{TA?8HBw0>tCC88og*%0G?G9 z{`+keNHcFAI(|Ec;nWZRPDnPhe4-*37#8SU!@I?k z#7~H?qIwmOd?fFE@GQKxkm&b+g};AAf!yWeal-yP?;wh3c#KiEgnaBSvQ^D))3z~!}( zv!`njg)}vlzgUZ~xG$8bh%ga(iHb;%8Hc=xfC$qsVOBe>NGB9oNexR<^vfdyKBv-< zkXpRjT0oMf)L4tmTP#Nv&L+PQ2db5P7cV5@g zr4pNbF~?+2x@HvW;g_)fVO;<2PvTU{7tzPG2pajd7e0wgNlsxZB^L(%!>7r~X0~bj zD;ogo-!cyOG_d~dX~xafo}#(x57$&x-?f0MZ}!HVTYFjsqi9{y7mt%Yl$P_A605zC z$xq>hRCj1*_L2)^G~t@s=I-2F$hxP zq&NYdy6q%5c&(}4Q8zr%-q~hv4KuClI<_W_p6=;PTPLgs1^16x@_BTM{jYaY@iFnP z3`yGBCo|W~lZQYk?uwWt;91!dK&tfhGPaQDTFK;yEfou^8IxdIl!zLs5pYx;&^AwY zdS>RL&Bjm*4v5orw7cDm0^*x?umSNAS$&({1nUWR_~bl}hZ9%u4b9yBx!WfH?#O?B zm3~P4p!h+#axw);B@-R}QurN9p%^JiD%5w+C&yZ?6#UnhrZ#Qdt}@9p9pf9eE3NW) z*PJcADW0>xEUxF1)2WW+J>ftC0u{| z!5g)q?uKA@Ysx;&ow=43?)U!qY-<=+VIm`Gn!9FH`t179izp!1PGrPJRu(mu$i@Q{q#EIKM1N zX8L<&mU>%bm$|(MJg6$X>@@U5Lwzx`tLK`o*jT#@?2cu&t<#4b8ixhkv+H%e%hJ3q zoY^@LWa2~3XdETrI2wjFrxTqVs0vH!Dx;FRH7##f>(*AQkP^w$BRf;m3()os$J%EN zrqRsSo!*}5C7C7cu*KY3nJHwm#i8Bp>ev#uH0i_Rw@uVk5Hdma6FRW?dHb{&nm(1sKT+zn4%xHA%^Yd2*M)$L}Rx)4#LjBtx?`UPBZe452+~n2elF^3F=14RrHbnayhj(f; zxkzMv!UD%+v};tS8%id}Qr4eF+Ek91Bbq_cKXaft-4aZ;vGbOOeH?^i73VFj8LmS) z5f$+|o)3o&*mbmSX|)IhBFp`^L^r0L!(u7(lCJjYD|z27ODLltk>`HZsg_5! zN_THcO_B4l;f}(Cc&>4HF@%}-g;quOP4L2mTFB6smfvAMWRT~Ufd(MKnDAi)!A#;}1BMVSFUhX*+(rI(hyH7hdYwvZtsNI{YBe-CwKB$INZcYW z{1)7Bo2AL5QCsZUoW$reYg`VeCcR#=s1^fdAl>RIQ= z*{Cop92UZjn@Ue}p+EVBJfqUHG0?26gW1UJVCI<<%pxP4%6nCER)dubYV~?rezCA~ z>m>^uZexJ4XxuSlt<`AJ==HXmO`_q9A?(t6?M9~|5C=0dbA!WRHJAcvovu!6)F;}+ zI=9Id64!W~rl48Q<-fxI*~j^Bw_NEot`bKB(J8RErGJzb5iOqr#b;`y90|(V`I-|o zi#62LnOYj3TdqODP|l%?jZWU?OeRIY$_rn-&eb4pkWA_g3*dXszr2<0Ir)umuxBHn z?zhAG*!lA;tNpjU?vekNuJGTUQP3anu~nBnRlIJKeBO{wD-{0F)aW&U2~uw~*bIz@ zk+k{$Ao-3$;M9uOd-3*;IQe9a@o(iH_J55O}PPX9$yc~i_Aq$PK1?y$2U4RkR&PF-VIlOEf}LT8mmt%4_ZUnu|r0a!J%i2E-=&6 zDbY)1o3_DuVN$7LQI$5<*x7%*#_qIfEnHqjKO8r6c+Kd$lAl(|`Dy7(Xa5NxPc2pD zsXhA(!T%Ecw*cO(Ws!hUA}i(k%>z=PrkYn>4$Zvb?0Ds^*2 zrI8su27AnYxSq8sw_%a{C=lSvTUaTy`drNScKO$5BFpH4Aa2fRqWMc_ir{V`t zmKT?M3DR=muU6`|beKQDwd14W*FiTB;68Y|&|K9Ab>%*Qd+<}l%R~|P!BenYWgY7{ z-MwBs1*AZL`=Fu>?gPHe@8I(c_<1i@mf;VG;xcbTIWD4z`{1c^op2x2RrJAsLRmUo z?j>CJwPbw=%Y<;9Uapi?I*`is0sQY2u;TXp=!)%o7s|3=S+C$S##OSa`k?q8EbqZ> zeYH}zr6Z%b53sHM3NR7B2Qo?FPYc~>d<=q9;2ug$3BmKVX})H7H)`ND%wiINZvrhREbA3m##k{!SXl@u zw3(aBsO(`}_SN!pd50N3{KfXs2zVV_OTNYSIY|T7S1!1Keb(oZx17eGk`+GuzrRKb zds{gxomKRaO+9mSJ-b+WWD}Hkgza;Jrg$Iz6p%>^e92AwG7G4-9K6 z$yqcjkA+n&$&B(00dR;Eo!_=GO3d1&WZ1JERgh6sMW72Irpt@JL5hREkBy#@TJU~z|;1Yp@!TBTgz~?bA6%R-Z~b~T|XLCnLX;s!aeZ; zho(svO&}b4sDOjyEl`)S3Y^?klubfq72-8Z!C8&Oean!1sP1UpUisecqhJZ;e-?(z z`T2t=ClI{D<^*o7y#I&N{ijAM@4r{N|M#Pn_y41GfA{#>@^e+?e_Xo1e_I(BU=Z_G zbyeX#RL5jXny-L)sK)jBfu@xBiIkpR)g35H6aglwB@+9oijJ#*ctG8-qIa76?d5b) z@<3%zREho?fAfP$qQsxJnWBgeVxA}`Pp!$H zhC#P^{xktjrZU5UEFD1tB8)wP=q|Idug&lP+i^}K?dyS2u`CT z73Nqky?(^*aky+gz0_p$=qwFBr_-ZzINN(KzfJlP_>Ib)@;hPyhsC5&S{(|zx8Ce+ z3vsx9T5f)*SLZ~d18a^UMQPY8_Dc5#js}KG+0TWKKn-4-F}CexsQcfsdC&XUciaa> z8ejy>IEBKpe?DcQ?yYClC%A!9|`1U6gY2!A& zMGk=jwCwC=&($e+Q&s<>@Ccm{DqER3>csDpeNLQr}y zv{OxpBLbI+5C=db_&rfW)UsIUB?R<`u6bZ;JBa@9+&R=<11!hzB(c1=aXA!`#1cP-HT!{?Z|s;Fx_{;y+owR}xpU`UeD1~Pc)aWb;I*&QC?!$1GQL<>8Lvc3q)zX8Q0uX%ZasJ)F`lu< z+;cOwfw7sEM}cI%{rKk=N9MlM#hz7s1IldTWfB!J(7MW)C3edDV*iL_-ZnoEWjdN& zbCi-5TKLoc_G6#BixUb6eerSdC?zFCa0aYKH^nctI*ypOGKlHGK}^RZ04VO*cZZ@# zP||IeH?#Nva1Z)8xEagzSMS}*2Vd(rcxpbJ8Astv2jxJ*0P%$)At1lE?JuX;F&`@a zEqIcW69Ik)!SB1Ow3-)d3C?wQ8nIw3!jH2E0(^&-C|yAP#Y&P@x`$3PpVA5Cm@7?pD`oLQWY@vZP2`=WLhU(`1zb093YmQ^Kv*=mR;$ zWX+-dDTCiq2gW5vFEi9S+@u9tfy^9r4LPDtolri~n(0joCV5?b3*1D>2oLgctc-Qi zY^;`!4XvB>H|BY!e_;4pJ=Gx;fhdVVobVyi;Tfv2Hk>`O8ciw!<4z~t2 z#wG8I!&k7ib2i5}r7NCrsnz;Gmz#s(8B513 z1Bdn$cI~F+FFr>d zA^(f$CB})PrI~{FWM=j?+)iVXV3cN!B3 zV=LY)T$Gin@V;ww;EkDkcQp?jeRzE0E4z}uOusYJBGhe&^ll{W$$>yqvzXrJm&UaL zr#86p`oY0lr<4BSn>KGg6xyuIjb78M@!8eE0K(+~{#@tYFRq(;^tz7bt8N)sKi6Td z_j((*_9wP>xV*+>p*it^sz`nrP)~z{_-Mt7?4wE6~G1}fSO_nxgNXSvxPc&2kNgQ z6b*h#eGzl21TfQ52clMb7k-?z!(Bj@fD>3KtfE%AGI`@OCZFGA^7@|U2plPTC21q7 z|DBW+oTa8<{k6FM9V}TAS6B9Z^>tvE6)sX!Be48M*xv7bn)VV<2JtX~+KYo&6#qtc zePMn(YA_&ffU=%}vV=qr<}>R+d}im+$2|I2tU7V_uNzdF!|9bPU`@Hy1O6nYM2qaqZd?!ZqtDEQ18 zY-dAzwvFaCO_BxtAVAzpegJ+5pCiGiJ|oMg3HU~yVmomW(Phn}f7uaJmf%8u5z(kA z1U3OIazcQC(Rn(wMPuX#8#-EAvg^^aFHjE@OA1n%%9VXdC%shh(=3#PD;X6 zSK5Jq-2W)W9COR4A4rb*?5sj((?xXDRDPolHbi(~8L^*{pTvCzchig>{jU#j+-K}J zwhI7VL6E=-7k}0 z(`RwZJ;=^RQ`WBmmQCn%LAn2duICJoXx?KMr}PRDIlpmAE@H`OZFzOD?BP zs!pl&i2TOxqum&xhm@3YclhQFv8}@`M0=AT7IVb!NeP@6geZaWHszEr5%APZ+_T|0<=#)L$b6Vli;wi*R*b(83w6RW2!TuBqih z^{W|WnR-i?a2s@*I}ZA|BS2Z)5r?xuSKreBEIg}O;Vi}INw?J=st>v{VTP^q7VvN2 zWo)n7h`zkojv0T&2ythPbjniJ0U~o1Udk(IJBP?ZAr84E1^PQ!&8n&iMadP{({>MO za-qY(n;Jwf6(8vT)lNnUCkH%`xc5*+^x8~I}~?!cXxM6 zad&q)xVuv*c5ruhIdE{7%lDVuTuCM?*_nU#tjT0g)?Ux&fg-P}-60Tmhib3Q<5wy& zt32a%aaU<{*U^t3JFfM@S{lM>hczJICRPiHKAEW6Btjeup4fo*3ZreO65EpOQm<+Jz$TRgv;$t$RZhyjdCK6uKV)_%I zyuu$Icpb|S9;OOaQ~w#%LE#o&OP+mA8I3guNxBu4*=4Ql1IlXcW6VWGdR%Bw!ZgpXnu!s549S6=|@-v z=GEACGvkp(oePJ^dq$ar1@hjj7j_ zHFjQCi5W84a%#kPDyQSWv$Lve>iUL->w*5bIr;l%xvZ$%rEN~Zn#`ugQ#|_A^Lr|T8KI^mMZFNvMW5I3XL6i zehn~$V?oVu5ZASeKXP}d+&g@C>@qO>FP~R}A6$2I&jIh1VsmnKF>BAnjjO+jPp2vL zvsp>JzE9#~*OIlR`}7HL1@UesjhDfKaXgyMUf)9IqOo~K_2`HFuAiC!T37MVIME)> z8i5viU4eHajx(-7TRZ^`qt$x^E~B;Y)V;Ky=?gvli=RdGLn(dF46ljWSanR|ar5!S zY_k>jHDWp2ULcJ@^sZ19*HzFGqAJkkX(Ac$nc;u8+P~d|oT)8?t>D-DSZOf4$@22M z1+U0p(KT9nqGvJ2Ce|4+U~iD#m8|`Qe^*}4V%)r|$8KqiTPJQjj3e|9!jhFLkah2# zy>BEX&0v&H%(GVgGajGAY8)uh$@RE(EoS3hGN0ovaRZ^y?6+eWkQ^Kddez(=7)L@P;muSA4#z0XpDIzWMd&c&+u*ga7j3~G#T^Nm6^&!fA_EGxwD4z@bX?Z*u zL;O3xH@T0i_{Zn5#82F$91-5ZFOMxa+v z@QqFF{>V4ra*klFpy?Xh+6CJ;5VnpWt)TK5TY~;rfTFOP$2Kl9{#2a&WtSU41chy~ zp!*srfrtYafByo-4{`q|TaN*=M@$eS zT8|h$aP(a-Y~LAz@oywIdfBdsUXZGG(7qGn)L&rrU{yP;=AMdPZ1~lGwf!h2-1yG? z5HQGl#{5B&*EmEY%z4AfUhvB%-;Z~A_=7DI|I%n7Vbdjqgkvy<#ivS<1=B+u)Wa8R z#d6^MGvCx1`A zJGAW@X=}*$DF#(Sdz^QvDJa%%PfTIY?Cp1cJJRx@k6u2$lc>XB>@^|RZs|r$wkv`I zu%?}(ZMStJZrv5;ax}M{&C{68(;Pu}b=X5;SIxr-ugn$NbN@02D9}#zxVHs5p!aa* z?BWS`<%t)_nT7%#3W7|99uEVa5_d!x_x^+F5W>FwkFozzZw%5K1^I|XZ&=jYHG*aM z)G32ZZsyRXwqS%@^)B;B#v;Q!?wh7_N)^vA2Y*cXEi4hR*o!@Ww}C%yN^j=tTtH|)Os$2YFef1funA7A3HU!^D}f67r(2hh}u zbQU5aBBFGZsm{cMtuW+GiZaM4qumEPO#~WxSA^}TInnT=$uX#=h|G44EDdBAzy4cN1-UrN^UrT^nZvW876a zl?r5L8VG?wBeZ2P4WAgzRC(ap|SkD(1YdMPB|sWU0fjpr?DwI(39rd9}b^w9E8i6u-&Wk53XTK+xAZeT(e zhm&Hy%;W3dIThRHR&xBwhgNVLqm2P(fhS`qDzxH(UPnWv{aoX2g!`HB(@cKSlT)pvg;ZBNXe^( zxS%3jyOD#a)C>|0j0k)-?qS3@mSEKlUMe*Y5w@6=%t8TH6?RdPOcG_44%>+xEX+-% z*&mZTcx?1cZ2#ED*>sOmvkI#QR4t@3)d8U9{7LgSw}A!~!0<`EUlZMjPS;-e@Re*# zB3!nLsa#VdU^oMPG7Z;MLR`TdlX^e7H^(>lc z3|0(_O$>|1jrT|l%My-hHI1LScQoR%`Mk%3c4?Hg<9T@^kie5XQC3YhMYcWD%bqdO zdBBL17gRg8pS4k5hr7B~ttU*2D7n{ryqamT9j#e)E)%p?-960T0kK$t=c?l47HcX| zWk$Ox^J{VGBqoa$1S27RxR_JjrQ_-*6YFLmFVi7WE>Ty(V~Kniomj6^qXns-`hBR< zOi~kIf#}=&wv<(lpk`VryjTfgj*nGN-6{M-EhwrOUX4JtK%`Vyd=5$mC3V@iHwQY> z6;5b$t)iV0&_i5xOtG2r%biy3WRVh*>A19qrAgQ`72i`XFE!}GT4HP(llO-QZ|=1w z_RC^k@*?kSVvOlHQvqAKQP3Pt90mmHEx{@M+5pLoU(Y~ib+TJ@PjjxbN*-Hvx@Mhk z<{On2P7;iDX!1BRSJ*p5p#oISfZZk?5>^iYE1@lYj=?>nlAArV=+M7(pl}fbakI2n zv)?Hy?=fe%@B%}~Ess-S%db-PDnBcs&8T0ng1F+M_>0QfTIf&C`Y_?odmcA&OMu*GHZ7x(CbU3O;O1n zCj$_GbEzIp7l*X2XO4qQT!ld|59;;(j0TyNhL*=*HPMCi@;|dzBpfSxGhfz%FzSUb zd-FC&XTG}eG2EFYU;Mc|jT()*;L;3ik^bR1O%bT9rOu)jnPFV#rWZre+;-+RWAhy| z*V_E3*W!vJVvXbKIBySD&?5Qp0eX32a@2U4e6d*so+QNb_*kca|H~gORT3j4BdP10 zl6*SAiEy5ZF8@2LKX4b>nR5f!9 z*(st#V|mCkGHy`w*l~)&r`t6mW;0O*H3Us4c@dhI$vBo1e0fFKGWwTb8n^RgU$J%I zJtyIr<=sD6SK8ZJXBw|PwAR}%U!>Gl%w9b&uWNS;nb*1RjR|jU&yiX@(=HT<4h5*@ z6$zzB$>CXMX#lFUp=6Bb5^@(U?Cc4IXiOYDp{U~93e&XM10?378l`IK_fo~N;^O7z zhOFB#$866SvbmJ7GIgF2lvZ-fef7mQ!`t;Jk8KlR0y&t<_5 z;3WSqG+0>JDB=k8^55zNO23?ioByCsEs-t?uD@(m-Oen3zOF0UzAkIL((2e^zBVr+ zrO^`qffYf4B~D@vp)n(dG*ejl1RET0WaCRI(GU7OT5h{u^7z*EJgnK)ZLj_7kc^2S zA7_f8+Iq&;V-=sX+;H2LJEbG3jc(aa++$shCE2Qoyuetp5k|8-Nx4Q0X{<> z+yK+%@rdV3<$Aq-Z{Qs;Ct>7x&pb@;kyCIZNZUAJFHz}~~>W_!4WpT2cTx*+r$Vle3V_cz%7$c zz~!R`&}?LVl@9L)S5Ldpqv!CG=U%(#k8@*s{S7YX$8#w*lkYSFOh1kUA$gd_GE)6q zhbt$XpWBX?E##;Dm;)sP>~E_4x5nzE@{+rGY-MCzWa?57R2<~JSr6y$HdzW;&xQ`c>qG3FHPI3n=5%Du&(Ki4lJyHt?-&?z2~b zeSVwXXx%9Jk*1kEi5!{Sv=96FVKtO?zS+g7Alqv#=vlzUcj82O<~Acw@mOl=2M?Re z2ifuG5r6uv&6J_5;1~_idP07hFoBQsv1lXP6+G?F__(=2=w0C*d^m8Ki8pP z9WjCS519ZSd^^>geGT!Fn=quIZ7_%y}~&JeF5#8LpAm%E1qm-g4iA<1z}C9QP}1?G#=FVZaIY{8kf`@(rxmX zl!_2#ml{2$G9W|9Y~{PD8Rf3rb1(mYJ>dtEtOj{WWx&rr-C`fBA+`td18Nue^9S|= zEv$-IW9~PoyB69Kjve9}vLqPM=FuC!zRGrNClr7iLYlJt4Z6if%@6r3^ZX4*5lVd` z=1fZ6kMV<9*N^oa6NSX|Nh>y;0L$TQxSObs6+POzY}*NT@A(ZYhqShd%_D>7s%OvJ zlDB^o9QbCDt5zqGrCSTKvDWOdDzy@FTDS2Q^XhT#PAtZG?q#mSz?PL`v-I7tkEuKw!)!9vXd%=MNWqMd%HJ;8TZwf- z6pa&EHphF=fjM5b(|e$GHjJlPHE&aLeNftQo&32~;>BrexpgM1_`;VpjZW1*RL@qo zK~bP1D_CHxDI1t9lcymAbOOvUI%RR7kg89z1utH{^_sR=?ljl6RyOtG{DVDtEpo%>Pq(C`Gjh*}db zgGr}|C*^bz9q*OaVIAGSIl5nI9D9k*!HunZ9M+U=LIz4F!Hhh&(poVgEc%qU{tk8i zcBrrPfirffwDl(}ys#Jh%(u`0>fWXt9Qx=#r;E135{q~L`%jwi-MNw^p-s7{0KmQ! zsU}53(RwjOLq?h-MNL7Pj;10csZ~XW1E8iV0|fy6kO_(l*_mgmpf8uLIx}J%;g`9L zWxwfIhN<)i&i;&xD;0!n!PKP&0((M|Y^W>LqU`Z0TIQg`&=Tlhtf>p3Hs$(BLumlt z1l+QSN>g-XyyIWAWGcmeil(Slu5E1x&_Z$}k#E*`v}}Y9S~>}$UtaEO{nujBwLX!m zCev&|GWVvGG+`nQxHFU4-oL{qQi%-ERc1{Z>z6okxpZ5u+s2ZqDPDlC$v12hSg2u~ zF)h=?|I=zC9OVm1v*c~ezPQMyNs%e>6AWabs&q^Z>eZH^fxok70%%>(K=Qm~&B{q< zQ(MPB;7|>91Oy7(@Q9V^_Net``MnRg@RM6>C9vPZ9>>d!@|SA#g^w*I{7d*(AZ@&? z`$sTW8cB4l-g~1pgNj>FI?Jw|G3eane*wO|7TE_V(q0>S?s7})9tg|egTvr6*c-3D z60BaYlohXDK1>S&q)M(s*h$l9l;Pp4$3rQSl>tBpfAfqaK^9}22UZl}$$DrEV7D1y z0Lnd~ydf?^Xob{)&YF4H!|)F!R~IP}uxc)p3+urcakC>k#;}MZEo)yI-o(xa!l3p+ z0P5>2TD#_7u)Pv(3&5iLjum@g`TMCOrAc5}<)pLEJZWZ%64X6LIn_T!theT0Jva!s ze|+#4*b1`X7v-L8T>XC0AjtIahj&czIw0BXn>B`Qh+i#9TuLlfOWDUgoFiYT+4m*b zyb*V0<5474<>_?+)r-vqZI@N6P+Hc+pJ`G8Q@ZUC4l#X3!92Y((ohH666-m3%Ng?# zW#}VoA~rc@jADwEQbJD?CBvyfHPxkIBxkwb6~~|$coI}#3V#$^2UR?<4Q1n=JgVNo zYM!q)JAX@yN`jz0&xx;YH49%0g?Q0RGLRMtR%x*yIY1SOg44mL>ab7ACP?YkO*BDa z;Ka;q-xAEeh0t+jYt|d%?mj}v6XWNAt;kCuA*;fX?D}nhWpAr`=YwePn{)fWJ;by0 z&04rTNaX!f-}`PSvLvue8J;0Ku^$x=0RF18S4FJZ=aX)r#}*iGn*J^T_>(s$Ja&PU zxKot$ktXJ7jo|hnbjlFxq=p<;`gc}=yRx*7mR2>KK*q)VVa_ERA{!wrctQ1o>PgzT zTtlhNBP_R4Y}hW(xx2OR+~g-jgZ3yEZfCci2j86Nu+DgK(w-vJA%2KWrC2cV)Rh*4r`-#v{3 zwRn)L_3B0Q8N5$?c(u*x&ugSjf5bmN5FL2Gx;R}xq~UP%l7PG5sr=cv>afHD^mCm1q14-N8x!efrG&$3p#YpSset^Kx^z7W$$z+t~$kmKHr(2E($nri#P! z1s6^<`qEO{ic?;j&bX}F;?nbSYg7(~qEhjN=7_9Xz}J*HZVP>J8ehesf=vg~`h)A* zsWxcK@ruHr0LsFc!>~lL@B3IxSt^s5Dy5X6rX)RacTdh1daj9HmUQXh z<*}vBie^>tJzP6eNr>o_Gnoy)cMp<()Tsx3Rbe1MODc9lTdJmdmXGF!-roZ&DFDic z&y3l$(fEiR$YNSAnoRSK$Lv%Y!{IrjBI?#lp31T>e8w8*eBdS1o8bkw_P=8KaXM<5 zD_Gm<0IGJfXvpy33C)?)d`dFuCyK088)PM5117!V)4)!Sl0%9O8-Fcio)4Z861%BCTe2 zJz~q?rR#jRY|+UghAO$|4Vq9diL$647D)j|58>F?>(tGe;j2n4Ql}m@ z3^YX>V55F04IURWO*hLHwqr((?>0eIa-8`J?!6hf2qIkurF~nBGP*k)7RPkZD={r< zHIi#qmn5mBfVQ?(gQ;nVMysSLBv@Tk{@=G>Nru`=wW{U@heDwCLKp0}Z}c{UmpV*T zo(^UDyVZ!ig%8J5!>Wq^zsioZ*@v((vW20tjsFhU3MOs4jb~1ZU4^ahCO@8jLsE}S zDj@y2(f5L$TF;7H+8*IJhI(DV|5fn)DK6ZHVc`>PA3!ebkGyb>YivH3L=#i5f@=(5 z8;~huHNdwPtq+wsZ+GjNaX5>$i^{8#{kwiT|@ZU6bA9XM<9+*-FvRD?{Z=-A<&Y7mborj!9vnh_Z_J5`=i zL*nNuHQ~8yi35r}{iXq_RcTcWmz776T(VCsDH!7gC7v4u?SZK{z&5?x)`X%wKZdM< zB&L!#`s0&r`?8#v<%J@HWZCcypxavip=|#8t zgz*(KpD_OygGSOK+md4cU&G$v;KglEelR=oQRSb@+7H_yEy}nCxt#DH4=-rpu7VwFHecpc>@PQYMez0i-=sNyNcV^4k7%Q?uh1!em^5s z=Cv9!&yG07+v}qDX9F%leM#y3F%3I)9GU~tpa3Z&jFt;UdA9OH6q{AaaiefsdU z_*HY>VHd$}-N0;l8VLa*PYP*Ch9>YejUKS?1LRd%`q(Grx4iy9pR|2P z5ZXPBf8FKxx6{v5&4|7>gzE~SB(9wo`7w{;K0+@NfJZnFkdcK7ePjjd2!HU}tF0H? zs~g{TN0Z5^iSo#&Yiq+|IfF0KbN$D#ac=UKhKx+u_=V0oR*iVKS8}{(m1nYSnE~nJ z*ga|MkjCzH7)Zg^K2|@RU>}DIM`g&F2pq8L^25Buii~qrpcSwBB}%CE@5j=|VqtGB zXFr2q*_!-9QRI`RQae?WlT@x%1L;Bej!!JZB4)6eO>Z!-`kFv(B_1n&z#k_34~edt;6>Tg(Bm*{blTW1`4tVQvI@)!$jA^ebGYzTh5J3>~EH zfd|}7O%zg9i&&_#pzZ6LK}Ki2syD7%TQ;;!sVu^^bkQ;W?9v1y`}G>V5h%J%)J_IT zy`v$IZx6pttW7-Ek*_gCy@DyVE|`+&Uw$Rmh$Ek=pG68D^R8h$DK2By(wFhDn9X1J z#WznJuWQa6VKI!HdP8zD%`&ziT*%zLm^TZG-v@WCG1hos3%IqNH!YA&Ev-*W$?9L= z)jA4qXV2b1yb2n8CLZeP<~HKxs%?%YgMD-*S3e5`)<7d;ih#|q13LAO!;?7MLd-Gm zZvuPzYn7qBvxDBz^XQ9>on*C4?oK-9pJHG=2Sd@)N&QkgcO8hpu2WPjL~db-S;PBH zBh2k4q2?yHFvT3jpaa^jTC%NQS#eN%Gm)KAKbJ+LY~!uQ^f&){6Y?rSQpxUg!p1uC zN|_Y9IFg!kjC4YRJ)T11nUDGGN&Fi^!FbL70mS|PuHj_c0_*ABzlWzVjC%5MtSPMc z7=bAlcxo)ndh%Q8;yMg;rQgN`LYYV)EiLifCN>2QYb2s=A#CTO24x#4@GpiH=9h+b zl5jFLQ6J}AFcoe#DJzC%n_S*MFvfe4@Evj#_u9o_Z1^TumspN9=ceuns|&^0pABWO z?Pu24tTtm6L^~Bu>tUPi)g70I$1>0Rl?QU#JT~zpi=YYl|JEIj#KxTH%JZsNnaVXI zbu%@0bu|*@N~`r8_Jqh^zS>d+X|zPy_hK(GP++0aL0))z)TGT-@hu0YPqh`iKI`KK zK`*&iRSPl zme*Q@Fx_^mnD;Pq5mWF$`{6l41!RoP9VRYPaJqBe22IXh$}bzyWIIe7n)aKXwAr14#zLQnnU6+&%$E7WGUJ1sD&{`dfn}PwXq%qfUp_}y zQKVZm#6Hhs!TH#Q4s;8_>TZ zWL9lNgPv?Tj*ChM8t`2Md5{bxQ&nst;>*3Qf)0<9lTfBbjUJmM7^qxsS*>&+Y1Pkm z71Ww_e#v1+2XOd0)m-Jd=7&}1ygGbtV#TRg<+Y*dIGR1Ce`9g>n;6JVzU25+ClF9` z=|`|;4jw-V_(^1|0+Ii*wuB}=L+_s^ApJ>58hmTE=?gmd!pb_d$#i&peua3$Ti>fI za6i9LX=g$L{h8loCNhh#y^o@gjbYO0Dy-%=udY#3qKSC0XAM7r= zBxnLW{Pc*`xBC36RXEuzX+3n+shVUBUcLZ>njR=#39|Iyvou$xL9BB%h<2YuXBrq@ z20!>KW8KSEGzW>{TjV`L>-R9YY-%+-FAQZ-iknTiT_f_==aG)`7DJT zjUZwDktM2F25@L0&$zHzRDy&d@h>8&J}>29bg#aEhMDWSF(KW`5j!s3oGK7~45sP$ zuC3LTtK}dRLRGwvYZzU*Gx_}OaFF&T^ZFcT|F)A(AppqIBqy=g!0;NctBSMg00Gzf z-4jDoeOae>C1>=QOgY{2?LGf>dTJF?Acct)W+qSK_zh{b&v>DpX32)y@Iu4eH{IRp zw8((7K*jUwde}Gv95L_G+5(3B<+(vrjtsJ0sMum$=rQP;r92jLII>HAA7qq>PMbdi zw$9WxI<5(w3JzNsLeJ=~E>=@Nw2WPNl1~!3Xm;p($Xv|uC?efG{J67E^%pmP#1m*n zL)uKx4^trYBn#^k9FS+7k3DH>?2-W${-v%lrn8HnYEC>YT%1HFS7axqQ10( zIgN&iD_d^wt@~UqAnJa>zIULi?Bm);5t7jLWJ;>0tkw)@I~82a{dS1f+jc$`sMcehd{Z%{v`R_#Wn!%f4G#5S(r~UZ za73bi_OV3m(8Sal)UZ+A2S3i|VPccLQZxQ!E*!tQA#=UHgTI;+g=eqk~?r6OP zxSdKcncMS3tLmi}rV6X;I>wzz+t z=$1gNz7MLcUfmK4E^Uj4VDl&T_Er4KAH(vR8l`i55hf4U54h!Jm3_t3+nNV`yCYqv zu80R;!&gU=yyLg`8mRYy`wz?+I*pQ*Nk=a1;Uj6Kh5Jx_Qy=>UVYH9-Z@xe)>BIO) z7xz~SFTQ69u%{x+W9(pg*!K_$U7{O`a$gzph{%g>IlcN98Y zm#!zFd`?8m&Qo@My%;e?ch==H{%Z`Yz1WKzYF0e>Cl7RKFN(jOecy`JM82JcKlp}K zB@;z6xG5e6qTS7S`9D-bpK%yUAkE%S^H^QGyjEpsfCoM`4coqm&$P7&vgneAAPkyK zxdI=TNm|U~c#eub&7E$6pRdxC=KPfU>x^v6e?`QLFMD}~`F3)lPAMCMwb=S(N-1)F^M$?J$GPrNqPzH`T{>~*>> z-0dTU4RXyt$Gpc5T#;As0WwIwe4$gV2n{+8_PA)9 z1?vQ}C}pp$I5EHaYk3f^@(^|dG4D1+=x2Cqq>}~LRX!9~hRq3wKlpIjH^ry{evz|?h^tBEjH{}M>y`~H_OLq=v zxc%losJhiJH0SIeMmF9X{L$7sqmrU73_tE#!4i~W_}9PlC7zg9%4B_4a${La%rp_Tl@ zGiSdca1+_n_uMDg1y|g78_j$MPkweWk}%g)6`L31;k9o{{&Vv~rl*B|%!#epp{7v1 zN2a(Fw?*$E5afybPyKAHY8`H_An(f{DVmUbyWHO`{9{B!`@4NHo5bznw3AlP5F^;e zzN`w9&&?k}XWJ~$b)V`ws3dH&+*mo<7>n%pB~4N*@5GR-^#E(8Fyj5TmvU(*f}o z|IVDLC1&}vNk&rU<5O+L=wrQTy$|HF&`8r6(6X}4L-N5G#qA^N(?zI!o{JlE#9KWy z#|ovdR0sP|+5(l+<&RC{`I7s=076 zw8}9oqYl$pTYSm6?-d>1L!QmR zQkHj8Tn*#JCCQ$W$jfi?NWz#`knZ0YFy$S2$&?p(> zQw{{eO=3E8St3PJi*!e*3ya?Emdp4bT&S1`&E)FJF1p#DAWmR^x^8fx^~Ye_w_@e9_2v)}4twSMJQg#@d*?jXxE))6wf5 zNJ9;+=i&_^5AA@-w};TU0PuRJUaxq&NUwYb{dRKOp^W!eQ^WiVR?V?lg&+O&xo-1^ z+iz7x8M!y|)a2O?(0tmFy3rj-~L^HN}rqYkX9Tz0xq z?G0Lwm}_x5h$8#+QeNwb@{y9>HJWP_-_GGa%u94KcZ=DvxQQ+OF+GI25hcI=&p3u(3Wot1Sezq7DI|jSNuj8Gn?E{T z{x~0EaO3(+;r@=fD|7eEWAo7c7Uud$*gW84f=Qvn}#Y!+ObyHlXfWfx2G&- zjT(b*!j-`QPDQc=`Gy!y85oF9mX;^9G>BVG^DZPk#SWy@?lo4Ci^?%qX@IrNMhu=V z0?+Zy-!XTvP90=!xx@jvB!L~J`8+yPY><=AF1@%WVL&gojT~a^4AdjB4wQ4}Nd zD?LN@fQSt!M+ydLmHSSZAF;M~Zs2y*)WsAtbh5}z%{v8?f z%<`KMCGy{vd#m|mjZB!bZty!0r57H--G-DHljWxrPsC67DrMLnjaggdWm3IQ`mq@* zaDuZR%|o<}u%v3A|N0RNOo%iog=LCcBqFl>%tEHXeC^bF$%;p`ipymPo_0}X+~&kA z4ZGD*MfmiUBRsy859yH)w%&7SvZfTk(q?3 z^v&E7o`UfXK2Y)B-o4l|a;)DtBRnP?xhL5|ncBohDf1oi9dRA%fpPBS+Q4W0vRt}S zNO0{z-Gc4d;+y4DzPwSmQAqObPVPxQBmiT8F;w!-a%nAn$$Ao9^0>zEDNK9jyXOyR zACbg)#`*s7iC(%ns-*CBvuxpX^!F&DPCmvc$2^Cb$a!3Cjf)Kcqu7fvts8@#0is#A znAXG8b7nMiW;Qq_Qppuku75};xiGCMY3B3*Qmz2f$?xJ>(HPdXN+lg~iANA$517^} zrU@1~q?20Wc<90G?|(B3bNJj&%T7q67@dvAfjN9)r)3eOQPl4k%3`P#B@t+K5lICR zE}f(@TBwJJ;wfU{Ddgf`bJ9WS&Q2Z*7@A3#ni4d%PmZqyE5>vy>Z z7TrVwLAu{HYoq&9i%p#2WKySmheb+D)X>On^>9Nq$2~y-^hZFl1k7{x>Zh)1UM!ib4QG)&)aW ztf3^_L>fs7?N_3lcw#c9_#B3K*om&9I6Um}Sk!;Y@Yc~Bdmi-F>C;!-oG1$Fdbp^; zbdgbXMgLnQpl)xBdMI@sLvu<+500kx;OkXrY6$@CNq}}%k?k7VC~C-GDVqyzQOs)2 zL)5iiQFQOZm|U{ED1e_4Ne5dph-rgC6stLW2Pb8tBvAw;;&EQ$ao@$`>PaPwNF~um zSyYn#cbB(7RGYx5&0xWq5O%zloc8>rLe@c4Z{{Xy7RLV-I^IyPnL#JTh8u!Y3d^F0 zYLY=JmPabagtDgq)KohuE}zj<-lY}~HT@L|7TMjN@OMdi&U?*HQcF_L)AOis^9G8m5B1Ub3 zTb)G|gH1tg0%a&h^=}NU0-{>Z$q$7E=gazC?xCB}HWt1LeZ}q5&guC}p)#NX+5U`cGuCq;>xPzIu{# zHU0h4)Ny-jZ@Ud&jqpuLUyWkYS(HYWpHLFr{%WBFuaYy98nG%ZtvDGH{~5QlI!LQE$9(og&|Q7cA$G+`D& zKa!j3kC8^VI4W>f$#hzeNh%@$G12Ab1tVLe$&VX5I&zXC2_(jS;Dnt!vk6A2Obq*N z1mV$-_@^zRLtjgYLl~eF=m*yVzd^m$QB}|2%>g)e-@NwV{(T`GbswmCI772~heS5JADo@;@7Lyu~UO;9ic^(N{wXyxWAkj}`%F!T2?n9$sY zeWkLispsb#U$oum@uHhyqkHHdS~DD2)=jd8da;`5Ep$MR*R+MRnU}?*YGLkzY8~FU_V?Wfxros)8^P}0tTg5yir$*#s zs$!TTwsHHoKJ-L9M6?I+o+0p`UDlTfI*bI|m+@POQtDT3DTi*!Z2W1j-=a?7BdHkK zc$SB+IPF_=x#WBP+tLh-xbQFEa^rLDJvw=EBYRNl!oS>r1i6NJry*8NUTNDfq^*6O zO|cvRP7m(%KF$C5!qEw|6a3pyR-tElhU%6v{SMO^N+&*52Ojf zRYSHp{ye2s>zXk42&P@CdsTdgLYkQ7f~&hiImbdJzob6P(#2dpQm)3ijob-?x!qY5 z3p`+x$_-r6eQCgAyI`<{wYKqaxQg{cYON?T`kKcev`{XPb-2o>b9BbTdq5K6<(@r|EeOI#F@|h}GS_ zX7gjPU!?E-T#eraT(4_ey;c*U!)HUkInIvYfq}6Hf~+rlH?GmelkQli%NdAvTaiR zbnRAda$QloxzFZFWD$%2VzaqQ$-9P*+o9eXd8GIdHSmBji_&W`WiuRx@KdT>4xr&zpwwoFKK&k`AJ=H z{AYcp&;g_1$j|E$zdWH`#b>s|DD1mti0s|2Gga{}%`T^_&zp%FI@hMUmYf2#bRUf6%pSSq9sGC&fkY)Idd$(4Hwj!q7$j9-kCjZw!~xS99v*^e#=!PPVu6 zz2m+#j~~H5Z@_N|pJRQi;0`GWJ0(i0@Ogja2Imf`rS?a!-LZy?Y1yTxRh?;QyFt^H zkdX%M+ZdyuwkWL>r#kYkmx_mGsvE`@Re7u!VDok#zBv5-&nm2VuV>Ph9%x__$AlW+ z@N8f;a8CaJ3RnWC{ZlnUPNG|rxaX!=cc;`2wj%~vo$`~77ipeOF`qB;=U#r2md$F% z$E@~j#;hA{WfdE{TJOVMS%UmIsEBqPCs@aNHn5S)6`x|eHx}vUIx|2O&_GjQ@=UI| z#*8-Cn~~;5Gr|lpqf{9UHN(v~bAuUchM8;4Ad_$F)MP#JCFPZuu@|pkAIStJF_r1; z%YK}|X`I1ZIfwID&RYK4j=J>Jcy~8dL)zU^#n)+l$Yk|vZLiep8C8CzzIn3bVT*RE zEz0gyoZZJ)xnDbH?0d=baz;DbWGiPJRJ1>=`28AR=Nqa5kJ^ml*tgjh^I~Jt5awt3 zZPklA`IN~tt~Kn7bMCwLefj!E+|kbe0R0y8Hh9{Fl1)nkF%X8&-Cr@}q=)X82(@Il z!h#}55v=GUCMQ+P{>BT zOUEk7!ySHv=~WV^aWWxMkJ_RZ#)4)FGg6!}uxL318e3(gbgrI8k(Z-A5*R2g9`y$Q z(MP?EbV28JEW*nSkG(PvMkDHQ@AATE$G8Kjm*(~_8ucD(2e0g*58IPd*0+ z{gIpcVCAappS!zGeNkLO8pk)_`SNI9Jav`{RLrh@-u-DHAUD9^tOB$26GYFv+%fCE sxPb@Fy?j6TqoL>6&#v#-6w)NV9v5#<^Z9G%pqmnnh7Xko--}Mn{!^(CegFUf literal 0 HcmV?d00001 diff --git a/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-MediumItalic-Web.woff2 b/CandyMachine-Storefront/store/js/packages/web/public/font/Graphik-MediumItalic-Web.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..1cb8a9a34f3ffc7249f2df0d9cfe888829549132 GIT binary patch literal 37789 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