--- title: 'Solana and Metaplex FAQ' disqus: hackmd --- Solana and Metaplex FAQ === ## Table of Contents [TOC] ## Contributors * Archaeopteryx#7615 * Monty#7490 * alfongj#7638 * General Metaplex Community ## Official Docs and Resources Solana Developer Docs: https://docs.solana.com/ SPL Token: https://spl.solana.com/token Metaplex Docs: https://docs.metaplex.com/ Metaplex Github: https://github.com/metaplex-foundation/metaplex ## Community Resources :::danger These are not official resources. Due your own due diligence before using them. ::: ### Tutorials and Guides [Levi Cook's Candy Machine Guide](https://hackmd.io/@levicook/HJcDneEWF) [Fair Launch Protocol Tutorial](https://hackmd.io/FxCiD20ETZeMbfA8on9WMg?view#Fair-Launch-Protocol) [Some Thoughts to Consider Before You Start Your SOL NFT Launch](https://medium.com/@elysianft/lets-put-an-end-to-bad-drops-on-solana-c8cfd6d33e69) [Solana NFTs: Everything You Need](https://dev.to/hnbl/solana-nfts-everything-you-need-2llp) ### Frontend Mint Apps [Levi Cook's Candy Machine Mint](https://github.com/exiled-apes/candy-machine-mint) [Maxwell Fortney's "Next Candy Machine" Frontend](https://github.com/maxwellfortney/next-candy-machine) [CryptoOutcasts Candy Machine Mint Frontend w/ Whitelist](https://github.com/CryptoOutcasts/Candy_Machine_Whitelist_Site) [CryptoOutcasts Whitelist API](https://github.com/CryptoOutcasts/Whitelist_API) [Airdogs Candy Machine Mint Fork](https://github.com/airdogsnft/candy-machine-mint) ### Candy Machine UI [InnerMindDAO's MintUI](https://github.com/InnerMindDAO/MintUI) ### NFT Generation [WrathionTBP's Python NFT Generator](https://hackmd.io/@Solseum/HJEfeFDNt) [Benyamin Ahmed's NFT Image Generator](https://github.com/benyaminahmed/nft-image-generator) ### Full NFT Launch Services [Nova Launch](https://novalaunch.art/) *"Nova Launch the Premier Launchpad for Solana NFT projects - trusted partner in high volume, best-in-class NFT live minting on the Solana network."* [Crayon Creed](https://crayoncreed.com/) *"CrayonCreed is an End-to-End NFT Launcher Platform. Your preferred launchpad partner for your Internet of Assets."* [Holaplex](https://www.holaplex.com/) ### Miscellaneous [Look up Mint Addresses](https://tools.abstratica.art/) [List Candy Machines Script (Levi Cook, again)](https://gist.github.com/levicook/aadb079bf9daa1eeda3ff603c73b1b79) [CrisitnaSolana Solana Developer Resources](https://github.com/CristinaSolana/solana-developer-resources) [Paul Schaaf Awesome Solana](https://github.com/paul-schaaf/awesome-solana) [Get NFT Holder Snapshot](https://github.com/halaprix/getHolderSnapshot) [Metaplex Store Installer](https://github.com/blackranger07/Metaplex-Store-Installer) [Metaboss - Metadata 'Swiss Army Knife'](https://github.com/samuelvanderwaal/metaboss) [Arweave Uploader CLI](https://github.com/0xEnrico/arweave-nft-uploader) [Tools for Finding PDAs and Metadata](https://www.solana-tools.com) ## Solana ### Devnet vs Testnet Q: What is the difference between `devnet` and `testnet`? A: `devnet` is targeted at developers to let them test their smart contracts and applications before deploying to mainnet. `testnet` is used primarily to test new Solana releases. See the [Solana docs](https://docs.solana.com/cluster/rpc-endpoints) for more details. -- ### Free RPC Endpoints Q: What free RPC endpoints are available? A: For devnet: * https://api.devnet.solana.com For mainnet: * https://api.mainnet-beta.solana.com * https://solana-api.projectserum.com See the [Solana docs](https://docs.solana.com/cluster/rpc-endpoints) for more details such as rate limits. :::danger For your mint app you should *always* use a custom RPC provider. The people running the public RPCs are aggressively monitoring NFT mint requests and blocking people who abuse the service, so **your launch may fail** if you use one of the public providers for your mint site. ::: -- ### Production RPC Endpoints Q: What custom RPC endpoints are out there? A: You can consider [running your own](https://docs.solana.com/running-validator) (very hard) or use one of the following: * https://www.quicknode.com/chains/sol * https://rpcpool.com/#/ * https://figment.io/datahub/solana/ The latest candy machine cli code supports using a custom RPC node with the `--rpc` option. ### Airdrop Tokens Q: How do I airdrop SOL/SPL token to X number of wallets? A: Use one of these tools: * [Ghetto Sol-Air](https://github.com/h4rkl/Ghetto-SolAir) * [Skeleton Crew Air Support](https://github.com/theskeletoncrew/air-support) Or you can write code yourself: you could write bash code that uses the [Solana CLI](https://docs.solana.com/cli), write a TypeScript program that uses the [@solana/web3js](https://solana-labs.github.io/solana-web3.js/modules.html) library, or you could the [Rust libs](https://docs.solana.com/developing/clients/rust-api) to write it. There are various other unofficial community SDKs and clients as well. Here's an very simple example bash script. Always test on `devnet` before running it on `mainnet`. ```bash #!/bin/bash airdrop_accounts=( "AB..." "6X..." ) nft_mint_accounts=( "Nk..." "6r..." ) LEN=2 for i in $(seq 0 $LEN); do spl-token transfer ${nft_mint_accounts[i]} 1 ${airdrop_accounts[i]} --fund-recipient done ``` Here's a [step-by-step guide](https://hackmd.io/@8LSEewFFQ2OwXMjUKZP-pA/HJ7jMxYEF). -- Metaplex Candy Machine --- ### CM Upload Costs Q: How much does it cost to deploy X NFTs using Candy Machine? A: MaxS#6970 built us a [calculator](https://feecalc.live/). You can also look at this spreadsheet with reported costs from the Metaplex Discord users. See it [here](https://docs.google.com/spreadsheets/d/1tEHPIUN1GccLyTsd5PS0tAQMC6ihjq48jlPPz0FK9Yg/edit?usp=sharing). -- Q: What are the sources of fees for using the candy machine cli program? A: The fees are 1) on-chain storage of config data and 2) Arweave file upload costs. 1) The CLI creates an on-chain "CSV" object with all the NFT data for the candy machine to read from when it mints. Storing all this data on Solana is expensive and runs about 1.67 SOL per 1000 NFTs. 2) The Arweave upload cost is variable depending on your image size but should be smaller than the config costs. You can also upload yourself using a community tool which may reduce Arweave costs. See the next section for some of the available community tools. -- ### CM Upload Image Min & Max Sizes The following apply to min and max sizes for using the Metaplex candy machine cli program for uploading to Arweave. If you upload yourself by using one of the community tools such as [Enrico's Arweave uploader](https://github.com/0xEnrico/arweave-nft-uploader) or [Sol NFT tools](https://sol-nft.tools/), the same upload limits do not necessarily apply. The creator of Sol NFT tools has stated that they support upload sizes up to 200 MB. Q: Is there a minimum size for my images? A: Seems to be ~20kb per image. Smaller than that may fail. Q: Is there a maximum size for my images? A: 9 MB is the maximum si. Jordan mentioned it in an office hours session. -- ### CM PDAs Q: What is the candy machine PDA for mainnet and is it the same for devnet? A: It's [cndyAnrLdpjq1Ssp1z8xxDsB8dxe7u4HL5Nxi2K5WXZ](https://solscan.io/account/cndyAnrLdpjq1Ssp1z8xxDsB8dxe7u4HL5Nxi2K5WXZ) for `mainnet-beta`, `devnet` and `testnet`. -- ### Verified Creators Q: What is NFT creator signing/verifying? A: Creators have a a `bool` value in the on-chain struct that indicates whether or not the creator has signed the metadata verifying that they are the actual creator of the NFT. This defaults to `false` for all creators except for the candy machine but can be set to `true` after minting by using `candy-machine-cli.ts` `sign` and `sign_all` commands. Some NFT exchanges require all creators to be verified for listing and the Metaplex store front requires it. *Each creator must sign the metadata individually with its own keypair.* -- ### Upload MP4s Q: How do I upload MP4s instead of PNGs? A: (Answer contributed by Monty#7490 from Discord.) 1. In the candy_machine_cli repo, in `constants.ts` change EXTENSION_PNG = '.png' to EXTENSION_PNG = '.mp4 (or any other format) ![](https://i.imgur.com/bE8Do45.png) 2. in `arweave.ts` on lines 55 and 56 change filename and contentType to the appropriate types (image.png --> video.mp4 and contentType --> video/mp4 but these can be any correct MIME type AFAIK) ![](https://i.imgur.com/eI6NF5F.png) 3. in `upload.ts` on lines 87 and 88 change the imageName replace to be the name of the file specified in the arweave file above (was image.png change to video.mp4 ![](https://i.imgur.com/AUKPPHE.png) 4. In the .json files use the animation_url instead of the default image property and update the properties.files attributes to use the correct file name and MIME type ![](https://i.imgur.com/GigT1Y8.png) ### Updating Metadata Q: How do I update meatdata for a minted NFT? A: * 1. Create new Arweave links. You can use either [this](https://sol-nft.tools/?mode=ar-links) or [this](https://github.com/0xEnrico/arweave-nft-uploader) or do it manually with an Arweave library. 2. Use [Metaboss](https://github.com/samuelvanderwaal/metaboss) to update your metadata with your final Arweave links (JSON data). OR * Write your own code: * The [Metaplex Github repo](https://github.com/metaplex-foundation/metaplex) has TypeScript and Rust and APIs which you can use to write your own code to do it. * There's a Metaplex [Python API](https://github.com/metaplex-foundation/python-api) -- Q: When can I update metadata? A: As long as you have the keypair for `update_authority` and the NFT's `is_mutable` field is set to `true`, you can update the NFT's metadata. Be aware, there may be social consequences for updating your NFT metadata without communicating with your users. -- Q: What data can I update? A: Solana Metaplex NFTs are made up of two sets of data: the [on-chain data](https://github.com/metaplex-foundation/metaplex/blob/952743668b9fb21badc7fc35cd3e0a67be8c7c17/rust/token-metadata/program/src/state.rs#L88) stored on Solana and the JSON data stored on an external provider, usually Arweave or IPFS. Arweave data is immutable but you can change the on-chain URI to point to a new Arweave file or to any file you wish. -- ### Deploying a Frontend Q: I have exiled-apes/MintUI/other frontend repo working on localhost, how do I deploy? A: Look up [Vercel](https://vercel.com/) and [Netlify](https://www.netlify.com/) for deploying frontends directly from Github repos. They have plenty of tutorials for how to get setup. ### Get NFT Holder Snapshot/Mint Accounts Q: How do I get a snapshot of all the holders of my NFT collection? A: Try these tools: * https://sol-nft.tools/ * https://tools.abstratica.art/ * https://github.com/halaprix/getHolderSnapshot * https://github.com/samuelvanderwaal/metaboss -- ### Whitelist Q: How do I create a whitelist for my candy machine? A: You can now use [Gumdrop](https://docs.metaplex.com/airdrops/create-gumdrop) to create a whitelist. Mark Sackerberg made a [guide](https://hackmd.io/@MarkSackerberg/gumdrop). For larger whitelists you can also use [Doorman](https://github.com/kaizencorps/doorman). -- ### General CM CLI Troubleshooting Q: Why doesn't my candy machine cli command work? A: Things to check: * Are you on the latest version of the main branch? * Are you in the same directory as your .cache file? * Are you running the command on the correct network? (Commands default to `devnet`. Use `--env mainnet-beta` for `mainnet`.) * Your JSON files don't exceed these following limits: * Name - 32 characters * Symbol - 10 characters * Creators - no more than four listed in the JSON file (which is five total w/ the Candy Machine being the fifth) * Creators share must add up to 100 * Your JSON files are properly formatted following [this standard](https://docs.metaplex.com/nft-standard) * For the `update_candy_machine` command, when updating the date *make sure to use double quotes around the date string*: `-d "8 Oct 23:57:00 UTC"`. ### Common Errors * Error: Non-base58 character *Make sure your addresses are valid Solana addresses in your JSON files.* ### Program Errors [Here's a list of all the Metaplex Metadata Program Errors](https://docs.google.com/spreadsheets/d/1X1JE_D1Stasriqa-U99fCfBdAQK0NW95RdnclcHvoFU/edit?usp=sharing). Or if you're a developer you can [use this CLI](https://github.com/samuelvanderwaal/wtf-is) to look them up. From Discord user `alfongj#7638`: "If anyone gets any of the following errors **When uploading** :::danger panicked at 'range end index ... Custom program error: 0x12f 'Index greater than length!' ::: **When creating a candy machine** :::danger 0x130 ConfigMustHaveAtleastOneEntry ::: The issue may be that your png and json files do not start with 0.json / 0.png If you did a partial upload, you can still save the sol you've burnt. Take all the NFTs that didn't get uploaded and rename them all from 0.json ... the last number prior to the one you started with and then run `upload` again" * 0x139 - "ConfigLineMismatch - Number of config lines must be at least number of items available" *Try running `verify` again and fix any errors that crop up, let verify run all the way through successfully and `upload` again.* * 0x8f - treasury address must have non-zero SOL balance *Fund your treasury wallet.* --- ## Fair Launch Protocol Q: How do I get started with the fair launch protocol? A: Here's Jordan's recommendations: :::info Comprehensive sources for #FairLaunchProtocol: Zoom meeting where I hook it all up in one go: https://solanalabs.zoom.us/rec/share/j_FT_ROcVkdePDnejdczl-3R34knoCk4T-UAWdbI7ZCG3vNnqX7oSUiDHjkKAnc.XU6PtfuCW_7OFksj / ep?a38$F @artelaflame takes meeting minutes into nice guide: https://hackmd.io/FxCiD20ETZeMbfA8on9WMg?view#Fair-Launch-Protocol Lay man's intro to FLP by @RogueSharkTank: https://youtu.be/Ucfl_vbdYQI ::: :::info **Have items to add?** Leave a comment or contact me on Discord @archaeopteryx#7615! ::: ###### tags: `Solana` `Metaplex` `Candy Machine`