diff --git a/README.md b/README.md index e14383c..44d5801 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Metaplex is comprised of two core components: an on-chain program, and a self-ho If you want to deep dive on the Architecture, you can do so here: -https://www.notion.so/Metaplex-Developer-Guide-afefbc19841744c28587ab948a08cfac +https://docs.metaplex.com/ ## Installing diff --git a/docs/deploy.md b/docs/deploy.md index 2dd3590..7fec7ab 100644 --- a/docs/deploy.md +++ b/docs/deploy.md @@ -52,7 +52,7 @@ 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. +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: diff --git a/js/packages/cli/package.json b/js/packages/cli/package.json index 67591e7..5e27ceb 100644 --- a/js/packages/cli/package.json +++ b/js/packages/cli/package.json @@ -21,7 +21,6 @@ }, "dependencies": { "@project-serum/anchor": "^0.13.2", - "@solana/web3.js": "^1.24.1", "arweave": "^1.10.16", "bn.js": "^5.2.0", "commander": "^8.1.0", diff --git a/js/packages/cli/src/cli.ts b/js/packages/cli/src/cli.ts index d81856a..eea3372 100755 --- a/js/packages/cli/src/cli.ts +++ b/js/packages/cli/src/cli.ts @@ -389,11 +389,12 @@ program [], 'single', ); + console.info('transaction for arweave payment:', tx); // data.append('tags', JSON.stringify(tags)); // payment transaction const data = new FormData(); - data.append('transaction', tx); + data.append('transaction', tx['txid']); data.append('env', ENV); data.append('file[]', fs.createReadStream(image), `image.png`); data.append('file[]', manifestBuffer, 'metadata.json'); @@ -432,9 +433,10 @@ program } } + const keys = Object.keys(cacheContent.items); try { await Promise.all( - chunks(Array.from(Array(images.length).keys()), 1000).map( + chunks(Array.from(Array(keys.length).keys()), 1000).map( async allIndexesInSlice => { for ( let offset = 0; @@ -443,30 +445,23 @@ program ) { const indexes = allIndexesInSlice.slice(offset, offset + 10); const onChain = indexes.filter(i => { - const index = images[i].replace(extension, '').split('/').pop(); - return cacheContent.items[index].onChain; + const index = keys[i]; + return cacheContent.items[index]?.onChain; }); - const ind = images[indexes[0]] - .replace(extension, '') - .split('/') - .pop(); + const ind = keys[indexes[0]]; if (onChain.length != indexes.length) { console.log( 'Writing indices ', ind, '-', - parseInt(ind) + indexes.length, + keys[indexes[indexes.length - 1]], ); const txId = await anchorProgram.rpc.addConfigLines( ind, indexes.map(i => ({ - uri: cacheContent.items[ - images[i].replace(extension, '').split('/').pop() - ].link, - name: cacheContent.items[ - images[i].replace(extension, '').split('/').pop() - ].name, + uri: cacheContent.items[keys[i]].link, + name: cacheContent.items[keys[i]].name, })), { accounts: { @@ -477,12 +472,8 @@ program }, ); indexes.forEach(i => { - cacheContent.items[ - images[i].replace(extension, '').split('/').pop() - ] = { - ...cacheContent.items[ - images[i].replace(extension, '').split('/').pop() - ], + cacheContent.items[keys[i]] = { + ...cacheContent.items[keys[i]], onChain: true, }; }); @@ -610,12 +601,12 @@ program }, ); - console.log('Done'); + console.log(`Done: CANDYMACHINE: ${candyMachine.toBase58()}`); }); program - .command('mint_token_as_candy_machine_owner') - .option('-k, --keypair ', 'Solana wallet') + .command('mint_one_token') + .option('-k, --keypair ', `The purchaser's wallet key`) .option('-c, --cache-name ', 'Cache file name') .action(async (directory, cmd) => { const solConnection = new anchor.web3.Connection( @@ -648,6 +639,7 @@ program config, cachedContent.program.uuid, ); + const candy = await anchorProgram.account.candyMachine.fetch(candyMachine); const metadata = await getMetadata(mint.publicKey); const masterEdition = await getMasterEdition(mint.publicKey); const tx = await anchorProgram.rpc.mintNft({ @@ -655,7 +647,8 @@ program config: config, candyMachine: candyMachine, payer: walletKey.publicKey, - wallet: walletKey.publicKey, + //@ts-ignore + wallet: candy.wallet, mint: mint.publicKey, metadata, masterEdition, @@ -720,6 +713,8 @@ program const config = await solConnection.getAccountInfo( new PublicKey(cachedContent.program.config), ); + const number = new BN(config.data.slice(247, 247 + 4), undefined, 'le'); + console.log('Number', number.toNumber()); const keys = Object.keys(cachedContent.items); for (let i = 0; i < keys.length; i++) { diff --git a/js/packages/web/.env b/js/packages/web/.env index 9d5a95c..f01fb3a 100644 --- a/js/packages/web/.env +++ b/js/packages/web/.env @@ -1,3 +1,3 @@ -REACT_APP_STORE_OWNER_ADDRESS_ADDRESS=CduMjFZLBeg3A9wMP3hQCoU1RQzzCpgSvQNXfCi1GCSB +REACT_APP_STORE_OWNER_ADDRESS_ADDRESS= REACT_APP_STORE_ADDRESS= REACT_APP_BIG_STORE=FALSE diff --git a/js/packages/web/src/actions/createMintAndAccountWithOne.ts b/js/packages/web/src/actions/createMintAndAccountWithOne.ts new file mode 100644 index 0000000..ca16b7d --- /dev/null +++ b/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/js/packages/web/src/actions/mintEditionsIntoWallet.ts b/js/packages/web/src/actions/mintEditionsIntoWallet.ts new file mode 100644 index 0000000..29e1fbe --- /dev/null +++ b/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, +) { + let signers: Array> = []; + let 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/js/packages/web/src/actions/sendRedeemBid.ts b/js/packages/web/src/actions/sendRedeemBid.ts index e0be071..b7c2a8b 100644 --- a/js/packages/web/src/actions/sendRedeemBid.ts +++ b/js/packages/web/src/actions/sendRedeemBid.ts @@ -16,15 +16,12 @@ import { sendTransactionsWithManualRetry, MasterEditionV1, MasterEditionV2, - findProgramAddress, - createAssociatedTokenAccountInstruction, deprecatedMintNewEditionFromMasterEditionViaPrintingToken, MetadataKey, TokenAccountParser, BidderMetadata, getEditionMarkPda, decodeEditionMarker, - BidStateType, StringPublicKey, toPublicKey, WalletSigner, @@ -44,13 +41,13 @@ import { PrizeTrackingTicket, getPrizeTrackingTicket, BidRedemptionTicket, - getBidRedemption, } from '../models/metaplex'; import { claimBid } from '../models/metaplex/claimBid'; import { setupCancelBid } from './cancelBid'; import { deprecatedPopulateParticipationPrintingAccount } from '../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'; import { @@ -414,60 +411,6 @@ async function setupRedeemFullRightsTransferInstructions( } } -async function createMintAndAccountWithOne( - wallet: WalletSigner, - 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 }; -} - export async function setupRedeemPrintingV2Instructions( connection: Connection, auctionView: AuctionView, diff --git a/js/packages/web/src/actions/setupMintEditionIntoWalletInstructions.ts b/js/packages/web/src/actions/setupMintEditionIntoWalletInstructions.ts new file mode 100644 index 0000000..6cca0d9 --- /dev/null +++ b/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/js/packages/web/src/components/ArtMinting/index.tsx b/js/packages/web/src/components/ArtMinting/index.tsx new file mode 100644 index 0000000..d19b3f6 --- /dev/null +++ b/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/js/packages/web/src/views/art/index.tsx b/js/packages/web/src/views/art/index.tsx index bd85cef..772f389 100644 --- a/js/packages/web/src/views/art/index.tsx +++ b/js/packages/web/src/views/art/index.tsx @@ -1,21 +1,33 @@ -import React from 'react'; -import { Row, Col, Divider, Layout, Tag, Button, Skeleton, List, Card } from 'antd'; +import React, { useState } from 'react'; +import { + Row, + Col, + Divider, + Layout, + Tag, + Button, + Skeleton, + List, + Card, +} from 'antd'; import { useParams } from 'react-router-dom'; -import { useArt, useExtendedArt } from './../../hooks'; +import { useArt, useExtendedArt } from '../../hooks'; import { ArtContent } from '../../components/ArtContent'; import { shortenAddress, useConnection } from '@oyster/common'; import { useWallet } from '@solana/wallet-adapter-react'; import { MetaAvatar } from '../../components/MetaAvatar'; import { sendSignMetadata } from '../../actions/sendSignMetadata'; -import { ViewOn } from './../../components/ViewOn'; +import { ViewOn } from '../../components/ViewOn'; import { ArtType } from '../../types'; +import { ArtMinting } from '../../components/ArtMinting'; const { Content } = Layout; export const ArtView = () => { const { id } = useParams<{ id: string }>(); const wallet = useWallet(); + const [remountArtMinting, setRemountArtMinting] = useState(0); const connection = useConnection(); const art = useArt(id); @@ -39,7 +51,7 @@ export const ArtView = () => { const description = data?.description; const attributes = data?.attributes; - const pubkey = wallet.publicKey?.toBase58() || ''; + const pubkey = wallet?.publicKey?.toBase58() || ''; const tag = (
@@ -181,6 +193,13 @@ export const ArtView = () => { > Mark as Sold */} + + {/* TODO: Add conversion of MasterEditionV1 to MasterEditionV2 */} + await setRemountArtMinting(prev => prev + 1)} + /> @@ -197,23 +216,22 @@ export const ArtView = () => {
{art.about}
*/} - {attributes && + {attributes && ( <>
Attributes
- - {attributes.map(attribute => + + {attributes.map(attribute => ( - {attribute.value} + + {attribute.value} + - )} + ))} - } + )} diff --git a/js/yarn.lock b/js/yarn.lock index 8c895ae..fbf1d7a 100644 --- a/js/yarn.lock +++ b/js/yarn.lock @@ -2211,26 +2211,6 @@ superstruct "^0.14.2" tweetnacl "^1.0.0" -"@solana/web3.js@^1.24.1": - version "1.24.1" - resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.24.1.tgz#1fb29f344454669183206f452ab3b8792567cade" - integrity sha512-XImMWAvjcXteMQwe1FFjoe6u72xmcu+UYobPIxLEMX29XXWVTalyYRKBXvcOXwz6DliTYnFXmncNEwUDEFFHGg== - dependencies: - "@babel/runtime" "^7.12.5" - "@solana/buffer-layout" "^3.0.0" - bn.js "^5.0.0" - borsh "^0.4.0" - bs58 "^4.0.1" - buffer "6.0.1" - crypto-hash "^1.2.2" - jayson "^3.4.4" - js-sha3 "^0.8.0" - node-fetch "^2.6.1" - rpc-websockets "^7.4.2" - secp256k1 "^4.0.2" - superstruct "^0.14.2" - tweetnacl "^1.0.0" - "@testing-library/dom@*", "@testing-library/dom@^7.28.1": version "7.31.0" resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.31.0.tgz#938451abd3ca27e1b69bb395d4a40759fd7f5b3b" diff --git a/rust/Anchor.toml b/rust/Anchor.toml index 76a873b..7607f4a 100644 --- a/rust/Anchor.toml +++ b/rust/Anchor.toml @@ -3,7 +3,10 @@ url = "https://anchor.projectserum.com" [provider] cluster = "localnet" -wallet = "/Users/jprince/.config/solana/id.json" +wallet = "~/.config/solana/id.json" + +[programs.mainnet] +nft_candy_machine = "cndyAnrLdpjq1Ssp1z8xxDsB8dxe7u4HL5Nxi2K5WXZ" [scripts] test = "mocha -t 1000000 tests/" diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 6686b6a..0a6ec30 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -1,5 +1,7 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. +version = 3 + [[package]] name = "Inflector" version = "0.11.4" @@ -54,9 +56,9 @@ checksum = "6b2d54853319fd101b8dd81de382bcbf3e03410a64d8928bbee85a3e7dcde483" [[package]] name = "anchor-attribute-access-control" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ba6adc8bed8a9b284219ba12489b459ad233679a489edf9642987e6b090473" +checksum = "d71a7ef3d6eb99d9e4586fa99245d1adfc71e68df3032a262ee02dee25919237" dependencies = [ "anchor-syn", "anyhow", @@ -68,9 +70,9 @@ dependencies = [ [[package]] name = "anchor-attribute-account" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab91b688a60b289767724288d73bf5d4fc425438e13d4d4f604a73ab9686c675" +checksum = "ad63b9ca28de653ca0bc735ea7d2768ab619ccd678f06f642da16ea39108e8f2" dependencies = [ "anchor-syn", "anyhow", @@ -81,9 +83,9 @@ dependencies = [ [[package]] name = "anchor-attribute-error" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a7a9215bb3b101f7237c06d5fc873278b82f685bfee95e4ec7e8427ff83c390" +checksum = "b7f013d4fbe3de1f6828e856a7e7c1f47120e05a7f76667981b34efb64b04371" dependencies = [ "anchor-syn", "proc-macro2 1.0.28", @@ -93,9 +95,9 @@ dependencies = [ [[package]] name = "anchor-attribute-event" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b26d266d84ec0d8097214cf37430b4681e29da0522fbd3fdb0afc6fc16b2313" +checksum = "3ba91ad4e01c7fa5dec530c8950e817ebda38371e63e292705e5bad02ffab4e0" dependencies = [ "anchor-syn", "anyhow", @@ -106,9 +108,9 @@ dependencies = [ [[package]] name = "anchor-attribute-interface" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08e35d76a8f8bc8934acc877c8643ec14ddcb355d423de8f9b7e225fe9824b60" +checksum = "c22614501a321f04070dc8caf145885e5786503e8116dac0663f9e36878df133" dependencies = [ "anchor-syn", "anyhow", @@ -120,9 +122,9 @@ dependencies = [ [[package]] name = "anchor-attribute-program" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6e8a3822e58df25ef45125a6dbe5ceeefebea68954f22beeeff83e4bd040a4" +checksum = "6e3f8ef5378318b4ce699bc7998e9b34698374b16a68675493ecb75d0192ef3e" dependencies = [ "anchor-syn", "anyhow", @@ -133,9 +135,9 @@ dependencies = [ [[package]] name = "anchor-attribute-state" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86586d43cf7e0f10431e018c72f51cfc60d1ce3323df44249ff3a70a45168b20" +checksum = "e5363d1b812c8a85bc080132b57402e9b2d2d30c734dadba0f075e5de65d122b" dependencies = [ "anchor-syn", "anyhow", @@ -146,9 +148,9 @@ dependencies = [ [[package]] name = "anchor-derive-accounts" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85aa313d4317811983cab3e7a66ede358c4eb3f1fe47acf51a6078cd239bdbe7" +checksum = "494696ea2500856baca41aeee7da07cf85883a2e11d9f912255e088d2b4a0dea" dependencies = [ "anchor-syn", "anyhow", @@ -159,9 +161,9 @@ dependencies = [ [[package]] name = "anchor-lang" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0b300d7222b786b7947bd1c14ab82a6c519fa1bbce4ed0f0ffe4db1e6c05669" +checksum = "6e209e7e6fc0dfff1b5697a245ee854151e71ad3ef700fa49019c2201011e056" dependencies = [ "anchor-attribute-access-control", "anchor-attribute-account", @@ -180,9 +182,9 @@ dependencies = [ [[package]] name = "anchor-spl" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3faeabe726b366ad273f4c47a76a79302e69eab889e3f50cd1c736a01a34d7f7" +checksum = "719e411e8d19b7293ee225f0e427793ec519ece34283a21da544bd4bf4001753" dependencies = [ "anchor-lang", "lazy_static", @@ -193,9 +195,9 @@ dependencies = [ [[package]] name = "anchor-syn" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "833a32a3945814ecd8b6fdcb8666580e69037fe2efc4eaa4a9c68b1940450505" +checksum = "93cd94aadc922965d9eb5d49f266c9450f3d5666f5a3e9648996cb7fe91d61e8" dependencies = [ "anyhow", "bs58", @@ -216,7 +218,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -268,7 +270,7 @@ checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ "hermit-abi", "libc", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -545,7 +547,7 @@ dependencies = [ "num-traits", "serde", "time", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -607,7 +609,7 @@ dependencies = [ "terminal_size", "termios", "unicode-width", - "winapi 0.3.9", + "winapi", "winapi-util", ] @@ -623,7 +625,7 @@ dependencies = [ "regex", "terminal_size", "unicode-width", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -686,17 +688,6 @@ dependencies = [ "crossbeam-utils 0.8.5", ] -[[package]] -name = "crossbeam-deque" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20ff29ded3204c5106278a81a38f4b482636ed4fa1e6cfbeef193291beb29ed" -dependencies = [ - "crossbeam-epoch 0.8.2", - "crossbeam-utils 0.7.2", - "maybe-uninit", -] - [[package]] name = "crossbeam-deque" version = "0.8.1" @@ -704,25 +695,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" dependencies = [ "cfg-if 1.0.0", - "crossbeam-epoch 0.9.5", + "crossbeam-epoch", "crossbeam-utils 0.8.5", ] -[[package]] -name = "crossbeam-epoch" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" -dependencies = [ - "autocfg", - "cfg-if 0.1.10", - "crossbeam-utils 0.7.2", - "lazy_static", - "maybe-uninit", - "memoffset 0.5.6", - "scopeguard", -] - [[package]] name = "crossbeam-epoch" version = "0.9.5" @@ -732,21 +708,10 @@ dependencies = [ "cfg-if 1.0.0", "crossbeam-utils 0.8.5", "lazy_static", - "memoffset 0.6.4", + "memoffset", "scopeguard", ] -[[package]] -name = "crossbeam-queue" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570" -dependencies = [ - "cfg-if 0.1.10", - "crossbeam-utils 0.7.2", - "maybe-uninit", -] - [[package]] name = "crossbeam-utils" version = "0.7.2" @@ -917,7 +882,7 @@ checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" dependencies = [ "libc", "redox_users", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1093,7 +1058,7 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92" dependencies = [ - "memoffset 0.6.4", + "memoffset", "rustc_version 0.3.3", ] @@ -1106,7 +1071,7 @@ dependencies = [ "cfg-if 1.0.0", "libc", "redox_syscall 0.2.10", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1152,28 +1117,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "fuchsia-zircon" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -dependencies = [ - "bitflags", - "fuchsia-zircon-sys", -] - -[[package]] -name = "fuchsia-zircon-sys" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" - -[[package]] -name = "futures" -version = "0.1.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" - [[package]] name = "futures" version = "0.3.16" @@ -1295,7 +1238,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e692e296bfac1d2533ef168d0b60ff5897b8b70a4009276834014dd8924cc028" dependencies = [ "libc", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1357,7 +1300,7 @@ dependencies = [ "http", "indexmap", "slab", - "tokio 1.10.1", + "tokio", "tokio-util", "tracing", ] @@ -1520,7 +1463,7 @@ dependencies = [ "itoa", "pin-project-lite", "socket2 0.4.1", - "tokio 1.10.1", + "tokio", "tower-service", "tracing", "want", @@ -1536,7 +1479,7 @@ dependencies = [ "hyper", "log", "rustls", - "tokio 1.10.1", + "tokio", "tokio-rustls", "webpki", ] @@ -1642,11 +1585,11 @@ dependencies = [ [[package]] name = "jsonrpc-core" -version = "17.1.0" +version = "18.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4467ab6dfa369b69e52bd0692e480c4d117410538526a57a304a0f2250fd95e" +checksum = "14f7f76aef2d054868398427f6c54943cf3d1caa9a7ec7d0c38d69df97a965eb" dependencies = [ - "futures 0.3.16", + "futures", "futures-executor", "futures-util", "log", @@ -1661,16 +1604,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" -[[package]] -name = "kernel32-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -dependencies = [ - "winapi 0.2.8", - "winapi-build", -] - [[package]] name = "lazy_static" version = "1.4.0" @@ -1693,7 +1626,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "351a32417a12d5f7e82c368a66781e307834dae04c6ce0cd4456d52989229883" dependencies = [ "cfg-if 1.0.0", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1804,15 +1737,6 @@ dependencies = [ "libc", ] -[[package]] -name = "memoffset" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa" -dependencies = [ - "autocfg", -] - [[package]] name = "memoffset" version = "0.6.4" @@ -1838,25 +1762,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "mio" -version = "0.6.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" -dependencies = [ - "cfg-if 0.1.10", - "fuchsia-zircon", - "fuchsia-zircon-sys", - "iovec", - "kernel32-sys", - "libc", - "log", - "miow 0.2.2", - "net2", - "slab", - "winapi 0.2.8", -] - [[package]] name = "mio" version = "0.7.13" @@ -1865,32 +1770,9 @@ checksum = "8c2bdb6314ec10835cd3293dd268473a835c02b7b352e788be788b3c6ca6bb16" dependencies = [ "libc", "log", - "miow 0.3.7", + "miow", "ntapi", - "winapi 0.3.9", -] - -[[package]] -name = "mio-uds" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afcb699eb26d4332647cc848492bbc15eafb26f08d0304550d5aa1f612e066f0" -dependencies = [ - "iovec", - "libc", - "mio 0.6.23", -] - -[[package]] -name = "miow" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d" -dependencies = [ - "kernel32-sys", - "net2", - "winapi 0.2.8", - "ws2_32-sys", + "winapi", ] [[package]] @@ -1899,7 +1781,7 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1928,7 +1810,7 @@ checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae" dependencies = [ "cfg-if 0.1.10", "libc", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1959,7 +1841,7 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -2174,17 +2056,6 @@ dependencies = [ "syn 1.0.75", ] -[[package]] -name = "parking_lot" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" -dependencies = [ - "lock_api 0.3.4", - "parking_lot_core 0.6.2", - "rustc_version 0.2.3", -] - [[package]] name = "parking_lot" version = "0.10.2" @@ -2206,21 +2077,6 @@ dependencies = [ "parking_lot_core 0.8.5", ] -[[package]] -name = "parking_lot_core" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" -dependencies = [ - "cfg-if 0.1.10", - "cloudabi", - "libc", - "redox_syscall 0.1.57", - "rustc_version 0.2.3", - "smallvec 0.6.14", - "winapi 0.3.9", -] - [[package]] name = "parking_lot_core" version = "0.7.2" @@ -2231,8 +2087,8 @@ dependencies = [ "cloudabi", "libc", "redox_syscall 0.1.57", - "smallvec 1.6.1", - "winapi 0.3.9", + "smallvec", + "winapi", ] [[package]] @@ -2245,8 +2101,8 @@ dependencies = [ "instant", "libc", "redox_syscall 0.2.10", - "smallvec 1.6.1", - "winapi 0.3.9", + "smallvec", + "winapi", ] [[package]] @@ -2543,7 +2399,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90" dependencies = [ "autocfg", - "crossbeam-deque 0.8.1", + "crossbeam-deque", "either", "rayon-core", ] @@ -2555,7 +2411,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e" dependencies = [ "crossbeam-channel 0.5.1", - "crossbeam-deque 0.8.1", + "crossbeam-deque", "crossbeam-utils 0.8.5", "lazy_static", "num_cpus", @@ -2609,7 +2465,7 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -2638,7 +2494,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", - "tokio 1.10.1", + "tokio", "tokio-rustls", "url", "wasm-bindgen", @@ -2660,7 +2516,7 @@ dependencies = [ "spin", "untrusted", "web-sys", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -2670,7 +2526,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99371657d3c8e4d816fb6221db98fa408242b0b53bac08f8676a41f8554fe99f" dependencies = [ "libc", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -2750,7 +2606,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" dependencies = [ "lazy_static", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -2992,15 +2848,6 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c307a32c1c5c437f38c7fd45d753050587732ba8628319fbdf12a7e289ccc590" -[[package]] -name = "smallvec" -version = "0.6.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0" -dependencies = [ - "maybe-uninit", -] - [[package]] name = "smallvec" version = "1.6.1" @@ -3015,7 +2862,7 @@ checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" dependencies = [ "cfg-if 1.0.0", "libc", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -3025,14 +2872,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "765f090f0e423d2b55843402a07915add955e7d60657db13707a159727326cad" dependencies = [ "libc", - "winapi 0.3.9", + "winapi", ] [[package]] name = "solana-account-decoder" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a67e4a537eccc21f8b942f60990d57f76980638db834161747e47cfba4b8f050" +checksum = "d89741082d52115e1d866befdf65a9c3197c50734b998f75cfb0a291c3555738" dependencies = [ "Inflector", "base64 0.12.3", @@ -3053,30 +2900,30 @@ dependencies = [ [[package]] name = "solana-banks-client" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a51c83e33eb5fc2a688db5e7e19a8c5b481385e1d9f30b012962e9bcdb002629" +checksum = "15e2822ab4ddf7a9de1c190f817274922efcdc9cb00cd4bb3d5cb4a045f458e7" dependencies = [ "bincode", "borsh", "borsh-derive", - "futures 0.3.16", - "mio 0.7.13", + "futures", + "mio", "solana-banks-interface", "solana-program", "solana-sdk", "tarpc", - "tokio 1.10.1", + "tokio", "tokio-serde", ] [[package]] name = "solana-banks-interface" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f73a34a243df509dfde8fe42129aa34a3db9913e90b7c7eb290f597361016268" +checksum = "ec2a702be6df37c117b2b9cadc90508eaad3ad03004873d4e5ef434fd6b9788a" dependencies = [ - "mio 0.7.13", + "mio", "serde", "solana-sdk", "tarpc", @@ -3084,29 +2931,29 @@ dependencies = [ [[package]] name = "solana-banks-server" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3929ed2f73a4a9c80ddff4b1b49ecc81fa6e8689ca475e9e625034aaebc22516" +checksum = "e4f44e5b8eef83073dc34847fb8cd33297caf706b6c7ada80440e0b50839d907" dependencies = [ "bincode", - "futures 0.3.16", + "futures", "log", - "mio 0.7.13", + "mio", "solana-banks-interface", "solana-metrics", "solana-runtime", "solana-sdk", "tarpc", - "tokio 1.10.1", + "tokio", "tokio-serde", "tokio-stream", ] [[package]] name = "solana-bpf-loader-program" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d848ee15b984d2703750a52e3cbe23024256184b11426a1677bc98934087f8c7" +checksum = "44b703485a6f497d91fa76cd3111bee638a494c69b7508efdbbcedf7d4cb3f5e" dependencies = [ "bincode", "byteorder", @@ -3125,9 +2972,9 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d2792f093f28b0a7403443225494c0d75215253784897a6f8b8e6fb83ce91a" +checksum = "1ff790bd97dee3be05ec879b176875f0bb0ef0eb62e5e11e6b269a2d7dc8bf10" dependencies = [ "chrono", "clap", @@ -3142,9 +2989,9 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1c3982b00bf2ac283c86e760aae127d395ab8b610cc3690a0a6ff500ae561e7" +checksum = "6eb21cb2d46661d9e549293ce2ec4e4afa7205b66562e3768e16f5fe737f420f" dependencies = [ "dirs-next", "lazy_static", @@ -3156,9 +3003,9 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "023263a79a3356532549c9e0555c6e1b2a2e94205b5d58c7041703bbd455133d" +checksum = "779f90ee9f77c831426af58c9732902051314bb8f2607473ffd6089a3b008133" dependencies = [ "base64 0.13.0", "bincode", @@ -3183,16 +3030,16 @@ dependencies = [ "solana-version", "solana-vote-program", "thiserror", - "tokio 1.10.1", + "tokio", "tungstenite", "url", ] [[package]] name = "solana-config-program" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b5348055cf52ab01efc1578d4159ec40bb39c3913df4365787c3e1382c101c1" +checksum = "e6cebea98645f683ed9bf32f7f1e50a643479ab85fc8e6ba1c287a4562f534a4" dependencies = [ "bincode", "chrono", @@ -3205,9 +3052,9 @@ dependencies = [ [[package]] name = "solana-crate-features" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c9b446eea7a5af7d4631ce3fd0625439fdc68eda4557223233f1c6bba3e847a" +checksum = "23f7002fb7a602e75e9f077ba8aab67fff49e24327b958280648e731dab894a6" dependencies = [ "backtrace", "bytes 0.4.12", @@ -3224,15 +3071,14 @@ dependencies = [ "serde", "syn 0.15.44", "syn 1.0.75", - "tokio 0.1.22", - "winapi 0.3.9", + "winapi", ] [[package]] name = "solana-faucet" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d58750a03b49940f486c0dcb5744bb6ee5da82ced6636000a90af7618a67dd1b" +checksum = "45ce6d1994d0bdcb0571eeaad0718c540b89b626c24df2bdf6987f80837af4c5" dependencies = [ "bincode", "byteorder", @@ -3248,14 +3094,14 @@ dependencies = [ "solana-version", "spl-memo", "thiserror", - "tokio 1.10.1", + "tokio", ] [[package]] name = "solana-frozen-abi" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45c6760c1dd139c202ef6df28bff467c904aa35b1aa1a59be268c47aec8bc6c0" +checksum = "21ddfc2b65a555c0e0156c043bce092d473bc4f00daa7ca3c223d97d92d2e807" dependencies = [ "bs58", "bv", @@ -3273,9 +3119,9 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4dbe296c16dec41e8e6f4e6c2694c6224820d34c0ab11a2d3ff9683f44878ef" +checksum = "a876aa31298fdee6560c8ee0695ebed313bbdbb6fbbee439ac3b9df8aebfb87c" dependencies = [ "proc-macro2 1.0.28", "quote 1.0.9", @@ -3285,9 +3131,9 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80af1959b520c0fc99bc6583ba9d82bfa15b1ac007516795bceeb4a951af77c7" +checksum = "98a07290cc521e529bff0b0afd3aacd1d3904a41f35321ede6d1f3574efa3e94" dependencies = [ "env_logger", "lazy_static", @@ -3296,9 +3142,9 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2915d20f35948b35deffa8624cb189385f13758bd171d8d4a966ae8bf360a4" +checksum = "b5ab24cb5a8fb2fdb32e151606e6a954a6d6e4d764102eb96616cb895622d284" dependencies = [ "log", "solana-metrics", @@ -3307,9 +3153,9 @@ dependencies = [ [[package]] name = "solana-metrics" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d87867f1f9e399274e08902eb72c9158bef5399e2566161dbe831abeaaa7d14" +checksum = "a49cfd9ec1637885f80d0ac33cf71c685fe13bad6de2bfd469e8aa7dc39967a3" dependencies = [ "env_logger", "gethostname", @@ -3321,9 +3167,9 @@ dependencies = [ [[package]] name = "solana-net-utils" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7dd877b66b4436b9fcb6d2c2e6055a1dd18b0dcf5938ea1f20efa0b7f09159" +checksum = "2be3ee1237d9013cbd11f0d0af69a4473c703b700165e6c39b49cf0c0554d6f9" dependencies = [ "bincode", "clap", @@ -3337,15 +3183,15 @@ dependencies = [ "solana-logger", "solana-sdk", "solana-version", - "tokio 1.10.1", + "tokio", "url", ] [[package]] name = "solana-program" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe5e5dd99d642b5e89eeb20457310c3c23f20dbf44e67c64e473a02fbc50d646" +checksum = "49ffc60d33a318300682e42d28ff4f1276327f6374cab9591c8620a54be7aec1" dependencies = [ "bincode", "blake3", @@ -3378,9 +3224,9 @@ dependencies = [ [[package]] name = "solana-program-test" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20a2961354afb2ef3ed35ec477961f1f6f0113291c83b993a30382180c496d96" +checksum = "692786837dcb915006b39f3e91b1771abc06e3dee4db478400817b436eeac73a" dependencies = [ "async-trait", "base64 0.12.3", @@ -3388,7 +3234,7 @@ dependencies = [ "chrono", "chrono-humanize", "log", - "mio 0.7.13", + "mio", "serde", "serde_derive", "solana-banks-client", @@ -3399,14 +3245,14 @@ dependencies = [ "solana-sdk", "solana-vote-program", "thiserror", - "tokio 1.10.1", + "tokio", ] [[package]] name = "solana-rayon-threadlimit" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30c3a0037afa0b03e0aad9f8fb451d1008d5538023919835cf86c9833bc93103" +checksum = "e0375eae0722ae7303dbc5ce024104155b851017f31d7bc5096a871153540561" dependencies = [ "lazy_static", "num_cpus", @@ -3414,9 +3260,9 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "083d31e6510a746ecc4ce8d151a232324056c7a124a218948060947b668d6db8" +checksum = "c2cfa60250c3f8f1c2de9258d35202021ddf1379a24a5820ec813de392af3d94" dependencies = [ "base32", "console 0.14.1", @@ -3435,9 +3281,9 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f047727075c3434f17d33467bd26033fea3b4e71e7c23caa261015507b162581" +checksum = "58793cb7e9a2996ad3785816f58fddb7e29be245e6c12d0db62d8b4c6f6d17c2" dependencies = [ "arrayref", "bincode", @@ -3486,9 +3332,9 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0048d346fdf3629dca2bccc2ed63320da9d0291c32b816911ed63d34c65286a5" +checksum = "95179bc7d87c5b61c86f3bbbac4e52a5d909432473593d33546e4f20dc582052" dependencies = [ "assert_matches", "bincode", @@ -3535,9 +3381,9 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fee909dcddb5b4d349b3e5e1ae92f6660cd2f783dea392ae2e73210776aadc9b" +checksum = "b453dca160617b1676c47e3cfd4361f455dc5bb1c93659ec84b0c5d566b5c039" dependencies = [ "bs58", "proc-macro2 1.0.28", @@ -3548,18 +3394,18 @@ dependencies = [ [[package]] name = "solana-secp256k1-program" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd4c29c6b269800898610da38de45d28fd56b24cb4030c588ffd6acc11a7443" +checksum = "389178c92126e1e85189414688f93e9be836272bbe6ab03db04c804921eb09bd" dependencies = [ "solana-sdk", ] [[package]] name = "solana-stake-program" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c01fa18bedd1773c9abf86fc58b87ed6e1117ce9f42c9a703becc1d351d810d" +checksum = "2e690a0aed0ff8c854ee79ec9c437756f9c0a24cdb0c1d0e979b60db8b6a4513" dependencies = [ "bincode", "log", @@ -3579,9 +3425,9 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6ea7cfdeff6ff1fba74096f3bb94688f0fdb780524e08676323108352532dfa" +checksum = "692b993f3e2ee1d3ffd9eb50e079bc9cc702d6a3a833d0c2c14a46d9268ea750" dependencies = [ "Inflector", "base64 0.12.3", @@ -3603,9 +3449,9 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978569fec8c913d798f5e3dad2c8b6d03a6a30e8e04da633ac356ddde832f933" +checksum = "de8d410e68becf2a80a582caa46349dca6959ecf1319fe722a11a33e46af229b" dependencies = [ "log", "rustc_version 0.2.3", @@ -3619,9 +3465,9 @@ dependencies = [ [[package]] name = "solana-vote-program" -version = "1.7.8" +version = "1.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "506df67749a343d9f9a48b7b5566faf2bc43d0611b520467664a58cd78d4b1be" +checksum = "4cc0bed4119e725a813a56ace42738ab5bbfbfc36152b169bd957ae38e62543a" dependencies = [ "bincode", "log", @@ -3910,7 +3756,7 @@ checksum = "e325774dd5b35d979e9f4db2b0f0d7d85dc2ff2b676a3150af56c09eafc14b07" dependencies = [ "anyhow", "fnv", - "futures 0.3.16", + "futures", "humantime", "log", "pin-project", @@ -3918,7 +3764,7 @@ dependencies = [ "serde", "static_assertions", "tarpc-plugins", - "tokio 1.10.1", + "tokio", "tokio-serde", "tokio-util", ] @@ -3945,7 +3791,7 @@ dependencies = [ "rand 0.8.4", "redox_syscall 0.2.10", "remove_dir_all", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -3964,7 +3810,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df" dependencies = [ "libc", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -4013,7 +3859,7 @@ checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" dependencies = [ "libc", "wasi 0.10.0+wasi-snapshot-preview1", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -4049,30 +3895,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" -[[package]] -name = "tokio" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6" -dependencies = [ - "bytes 0.4.12", - "futures 0.1.31", - "mio 0.6.23", - "num_cpus", - "tokio-codec", - "tokio-current-thread", - "tokio-executor", - "tokio-fs", - "tokio-io", - "tokio-reactor", - "tokio-sync", - "tokio-tcp", - "tokio-threadpool", - "tokio-timer", - "tokio-udp", - "tokio-uds", -] - [[package]] name = "tokio" version = "1.10.1" @@ -4083,67 +3905,14 @@ dependencies = [ "bytes 1.1.0", "libc", "memchr", - "mio 0.7.13", + "mio", "num_cpus", "once_cell", "parking_lot 0.11.2", "pin-project-lite", "signal-hook-registry", "tokio-macros", - "winapi 0.3.9", -] - -[[package]] -name = "tokio-codec" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25b2998660ba0e70d18684de5d06b70b70a3a747469af9dea7618cc59e75976b" -dependencies = [ - "bytes 0.4.12", - "futures 0.1.31", - "tokio-io", -] - -[[package]] -name = "tokio-current-thread" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e" -dependencies = [ - "futures 0.1.31", - "tokio-executor", -] - -[[package]] -name = "tokio-executor" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671" -dependencies = [ - "crossbeam-utils 0.7.2", - "futures 0.1.31", -] - -[[package]] -name = "tokio-fs" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "297a1206e0ca6302a0eed35b700d292b275256f596e2f3fea7729d5e629b6ff4" -dependencies = [ - "futures 0.1.31", - "tokio-io", - "tokio-threadpool", -] - -[[package]] -name = "tokio-io" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674" -dependencies = [ - "bytes 0.4.12", - "futures 0.1.31", - "log", + "winapi", ] [[package]] @@ -4157,25 +3926,6 @@ dependencies = [ "syn 1.0.75", ] -[[package]] -name = "tokio-reactor" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351" -dependencies = [ - "crossbeam-utils 0.7.2", - "futures 0.1.31", - "lazy_static", - "log", - "mio 0.6.23", - "num_cpus", - "parking_lot 0.9.0", - "slab", - "tokio-executor", - "tokio-io", - "tokio-sync", -] - [[package]] name = "tokio-rustls" version = "0.22.0" @@ -4183,7 +3933,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6" dependencies = [ "rustls", - "tokio 1.10.1", + "tokio", "webpki", ] @@ -4211,93 +3961,7 @@ checksum = "7b2f3f698253f03119ac0102beaa64f67a67e08074d03a22d18784104543727f" dependencies = [ "futures-core", "pin-project-lite", - "tokio 1.10.1", -] - -[[package]] -name = "tokio-sync" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee" -dependencies = [ - "fnv", - "futures 0.1.31", -] - -[[package]] -name = "tokio-tcp" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72" -dependencies = [ - "bytes 0.4.12", - "futures 0.1.31", - "iovec", - "mio 0.6.23", - "tokio-io", - "tokio-reactor", -] - -[[package]] -name = "tokio-threadpool" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89" -dependencies = [ - "crossbeam-deque 0.7.4", - "crossbeam-queue", - "crossbeam-utils 0.7.2", - "futures 0.1.31", - "lazy_static", - "log", - "num_cpus", - "slab", - "tokio-executor", -] - -[[package]] -name = "tokio-timer" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296" -dependencies = [ - "crossbeam-utils 0.7.2", - "futures 0.1.31", - "slab", - "tokio-executor", -] - -[[package]] -name = "tokio-udp" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2a0b10e610b39c38b031a2fcab08e4b82f16ece36504988dcbd81dbba650d82" -dependencies = [ - "bytes 0.4.12", - "futures 0.1.31", - "log", - "mio 0.6.23", - "tokio-codec", - "tokio-io", - "tokio-reactor", -] - -[[package]] -name = "tokio-uds" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab57a4ac4111c8c9dbcf70779f6fc8bc35ae4b2454809febac840ad19bd7e4e0" -dependencies = [ - "bytes 0.4.12", - "futures 0.1.31", - "iovec", - "libc", - "log", - "mio 0.6.23", - "mio-uds", - "tokio-codec", - "tokio-io", - "tokio-reactor", + "tokio", ] [[package]] @@ -4311,7 +3975,7 @@ dependencies = [ "futures-sink", "log", "pin-project-lite", - "tokio 1.10.1", + "tokio", ] [[package]] @@ -4500,7 +4164,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" dependencies = [ "same-file", - "winapi 0.3.9", + "winapi", "winapi-util", ] @@ -4623,12 +4287,6 @@ dependencies = [ "webpki", ] -[[package]] -name = "winapi" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" - [[package]] name = "winapi" version = "0.3.9" @@ -4639,12 +4297,6 @@ dependencies = [ "winapi-x86_64-pc-windows-gnu", ] -[[package]] -name = "winapi-build" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" - [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" @@ -4657,7 +4309,7 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -4672,7 +4324,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -4684,16 +4336,6 @@ dependencies = [ "alloc-traits", ] -[[package]] -name = "ws2_32-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" -dependencies = [ - "winapi 0.2.8", - "winapi-build", -] - [[package]] name = "xattr" version = "0.2.2" diff --git a/rust/nft-candy-machine/Cargo.toml b/rust/nft-candy-machine/Cargo.toml index 8bb8a28..f352495 100644 --- a/rust/nft-candy-machine/Cargo.toml +++ b/rust/nft-candy-machine/Cargo.toml @@ -15,8 +15,7 @@ cpi = ["no-entrypoint"] default = [] [dependencies] -anchor-lang = "0.13.2" +anchor-lang = "0.14.0" arrayref = "0.3.6" spl-token = { version="3.1.1", features = [ "no-entrypoint" ] } spl-token-metadata = { path = "../token-metadata/program", features = [ "no-entrypoint" ] } - diff --git a/rust/nft-candy-machine/src/lib.rs b/rust/nft-candy-machine/src/lib.rs index 1bb60a9..d45c177 100644 --- a/rust/nft-candy-machine/src/lib.rs +++ b/rust/nft-candy-machine/src/lib.rs @@ -351,6 +351,7 @@ pub mod nft_candy_machine { position_from_right ); if old_value_in_vec != data[my_position_in_vec] { + msg!("Increasing count"); new_count = new_count .checked_add(1) .ok_or(ErrorCode::NumericalOverflowError)?; @@ -395,7 +396,7 @@ pub mod nft_candy_machine { } if get_config_count(&ctx.accounts.config.to_account_info().data.borrow())? - != candy_machine.data.items_available as usize + < candy_machine.data.items_available as usize { return Err(ErrorCode::ConfigLineMismatch.into()); } @@ -430,7 +431,7 @@ pub struct InitializeCandyMachine<'info> { #[derive(Accounts)] #[instruction(data: ConfigData)] pub struct InitializeConfig<'info> { - #[account(mut, constraint= config.to_account_info().owner == program_id && config.to_account_info().data_len() > CONFIG_ARRAY_START+4+(data.max_number_of_lines as usize)*CONFIG_LINE_SIZE + 4 + (data.max_number_of_lines.checked_div(8).ok_or(ErrorCode::NumericalOverflowError)? as usize))] + #[account(mut, constraint= config.to_account_info().owner == program_id && config.to_account_info().data_len() >= CONFIG_ARRAY_START+4+(data.max_number_of_lines as usize)*CONFIG_LINE_SIZE + 4 + (data.max_number_of_lines.checked_div(8).ok_or(ErrorCode::NumericalOverflowError)? as usize))] config: AccountInfo<'info>, #[account(constraint= authority.data_is_empty() && authority.lamports() > 0 )] authority: AccountInfo<'info>, @@ -450,7 +451,13 @@ pub struct AddConfigLines<'info> { #[derive(Accounts)] pub struct MintNFT<'info> { config: ProgramAccount<'info, Config>, - #[account(mut, has_one = config, has_one = wallet, seeds=[PREFIX.as_bytes(), config.key().as_ref(), candy_machine.data.uuid.as_bytes(), &[candy_machine.bump]])] + #[account( + mut, + has_one = config, + has_one = wallet, + seeds = [PREFIX.as_bytes(), config.key().as_ref(), candy_machine.data.uuid.as_bytes()], + bump = candy_machine.bump, + )] candy_machine: ProgramAccount<'info, CandyMachine>, #[account(mut, signer)] payer: AccountInfo<'info>, @@ -480,7 +487,12 @@ pub struct MintNFT<'info> { #[derive(Accounts)] pub struct UpdateCandyMachine<'info> { - #[account(mut, has_one=authority, seeds=[PREFIX.as_bytes(), candy_machine.config.key().as_ref(), candy_machine.data.uuid.as_bytes(), &[candy_machine.bump]])] + #[account( + mut, + has_one = authority, + seeds = [PREFIX.as_bytes(), candy_machine.config.key().as_ref(), candy_machine.data.uuid.as_bytes()], + bump = candy_machine.bump + )] candy_machine: ProgramAccount<'info, CandyMachine>, #[account(signer)] authority: AccountInfo<'info>, @@ -610,6 +622,6 @@ pub enum ErrorCode { CandyMachineEmpty, #[msg("Candy machine is not live yet!")] CandyMachineNotLiveYet, - #[msg("Number of config lines must match items available")] + #[msg("Number of config lines must be at least number of items available")] ConfigLineMismatch, } diff --git a/rust/token-metadata/program/README.md b/rust/token-metadata/program/README.md index 251ce75..034019c 100644 --- a/rust/token-metadata/program/README.md +++ b/rust/token-metadata/program/README.md @@ -16,7 +16,7 @@ The Token Metadata Program's source is available on [github](https://github.com/metaplex-foundation/metaplex) There is also an example Rust client located at -[github](https://github.com/metaplex-foundation/metaplex/tree/master/token_metadata/test/src/main.rs) +[github](https://github.com/metaplex-foundation/metaplex/tree/master/rust/token-metadata/test/src/main.rs) that can be perused for learning and run if desired with `cargo run --bin spl-token-metadata-test-client`. It allows testing out a variety of scenarios. ## Interface