The following steps are instructions on how to:
IMPORTANT: These instructions and commands only work for Windows.
This section covers installing Node JS, Solana, and the Metaplex project from GitHub.
Download Node JS here.
Open your Command Prompt by searching "cmd" in the Windows search bar. Right click it and hit "Run as Administrator".
Run cd ..
twice to jump out of the current location. Then do:
cd Users
And then after hitting enter, run:
cd <DesktopName>
Now, copy and paste this in the terminal:
curl https://release.solana.com/v1.8.6/solana-install-init-x86_64-pc-windows-msvc.exe --output C:\solana-install-tmp\solana-install-init.exe --create-dirs
After that, run this:
C:\solana-install-tmp\solana-install-init.exe v1.8.6
And check that Solana is installed by running:
solana --version
Great! If all the commands ran successfully, Solana has been setup!
Download the Metaplex project here, and extract the ZIP file.
After you have finished installing Metaplex, go back inside the terminal and jump in the metaplex
project folder.
And then run these commands:
npm install -g ts-node
npm install
yarn
Now, go inside:
metaplex > js
And run:
yarn install
Next, jump into:
metaplex > js > packages > cli
And run:
yarn build
Create a treasury wallet in the terminal and airdrop SOL tokens in it!
Run this in the terminal to create a wallet:
solana-keygen new --outfile C:/Users/<DesktopName>/.config/solana/<WalletName>.json
After that is completed, save the output on a .txt
file - for example, it may look like this:
Generating a new keypair
For added security, enter a BIP39 passphrase
NOTE! This passphrase improves security of the recovery seed phrase NOT the keypair file itself, which is stored as insecure plain text
BIP39 Passphrase (empty for none):
Wrote new keypair to C:/Users/<Username>/.config/solana/devnet.json
=========================================================================
pubkey: 6iFfxUthDeRcyD19xrPU6kjkNLojVGwrtMkymGrgMZ3G
=========================================================================
Save this seed phrase and your BIP39 passphrase to recover your new keypair: suit tie vest business coat scarf hat winter cold heat file paper
=========================================================================
Note: This was a randomly generated seed phrase! Do not use it!
Next, run this:
solana config set --keypair C:/Users/<DesktopName>/.config/solana/<WalletName>.json
If you wallet is successfully connected, you can check your wallet status with:
solana config get
Now, to get a few SOL tokens to be able to upload your PNG + JSON pairs to Arweave using Metaplex, airdrop some SOL tokens into your wallet - but first, go on the devnet
:
solana config set --url https://api.devnet.solana.com
And then run:
solana airdrop 1
Tip: To switch to the mainnet-beta
, run: solana config set --url https://api.mainnet-beta.solana.com/
If you've followed all the steps properly, you are on the devnet
. A little advice, if you're on the devnet
and want to test uploading your images, you should just pick 5 PNG + JSON pairs to test, rather then uploading all of your NFTs.
After testing out your 5 PNG + JSON pairs, do this whole process again, but this time upload all your NFTs on the devnet
, still.
This is what we will do next!
Note: Following these instructions, from now on, run all these commands from your Metaplex project folder!
Arweave is a storage program that allows you to store data permanently. We will use this to store our PNG + JSON pairs.
Now, we will upload our assets on the devnet
. Open the Command Prompt again, and enter this:
ts-node C:/Users/<Username>/<Path to your candy-machine-cli.ts file> upload C:/Users/<Username>/<Path of your assets folder> --env devnet --keypair C:/Users/<Username>/<Path of your JSON wallet file>
Also, if you run into errors uploading to Arweave, also consider that your collection name might be too long, and you have that in your metadata. Example:
Name: "Hapy Air Balloon Day Celebration #1"
The max character limit for the collection name (in the metadata) is 32 characters. Keep in mind that you have to give space to the higher number as well - for example, you have 10,000 NFTs and your collection name is thirty four characters. Add the number 10,000 to your NFT name and calculate the amount of characters.
Bad Metadata
Name: "Eggplants Forever Holiday Lake #10000"
Good Metadata
Name: "Eggplants Forever Lake #10000"
Now, you can check your assets:
ts-node C:/Users/<Username>/<Path to your candy-machine-cli.ts file> verify -e devnet -k <C:/Users/<Username>/<Path of your JSON wallet file>
If this step throws an error, some of your assets may not be uploaded. You should try the upload step again.
After we have finished uploading to Arweave, now we create a Candy Machine.
Once again, in the Command Prompt, run this:
ts-node C:/Users/<Username>/<Path to your candy-machine-cli.ts file> create_candy_machine -e devnet -k <C:/Users/<Username>/<Path of your JSON wallet file>
You can get the Candy Machine ID with this command:
ts-node C:/Users/<Username>/<Path to your candy-machine-cli.ts file> show -k <C:/Users/<Username>/<Path of your JSON wallet file> -e devnet
ts-node C:/Users/<Username>/<Path to your candy-machine-cli.ts file> update_candy_machine -e devnet -k <C:/Users/<Username>/<Path of your JSON wallet file> --date <Date> --price <Price>
Note: The date should look like this "05 Dec 2021 15:30:00 GMT" following the 24 hour time. Also, no other timezone works except for GMT. The price should be defined like this: 0.5
A few more things you need to know for mainnet-beta
- we will cover this in this section.
What is it? Remote procedure call. It is used to interact with Solana.
Why use one? Speed and being able to mint without issues. You will be rate limited if you use the ones from Solana.
When you upload all of your NFTs, say the total is 5,000, you will likely get a 429 error. It looks like this:
Server responded with 429 Too Many Requests.
The devnet
MB limit is 10 MB. For the mainnet-beta
, the limit is 250 MB. If you're getting rate limited on the devnet
while uploading all your NFTs, that's okay, as the limit on the mainnet-beta
is larger and your PNG + JSON size (if it's under 5,000) would probably be lower then that.
However, it is suggested that you use a custom RPC. Why? Because you'll almost definitely get rate limited and have issues uploading, and later on minting.
The most popular RPC among Solana developers is Quicknode. If you choose to use Quicknode, then, when uploading to Arweave (or creating a Candy Machine, but we'll use this as an example), you should put -r quick-node-url
at the end of the command. It'll look like this:
ts-node C:/Users/<Username>/<Path to your candy-machine-cli.ts file> upload C:/Users/<Username>/<Path of your assets folder> --env mainnet-beta --keypair C:/Users/<Username>/<Path of your JSON wallet file> -r quick-node-url
Also, there is a free RPC called GenesysGo that has no rate limit as they paid large amounts for it. It's free for now, but next year, it will no longer be free.
Here are the RPC URLs:
If you're uploading a lot of files, such as 2K+ then you would want to run the RPC command on both the upload and verify commands. You do not run the RPC command on creating a Candy Machine or updating it, only for uploading and / or verifying.
Congratulations, you have successfully uploaded your assets to Arweave, and created and updated a Candy Machine on the devnet
! Now you have to do this whole process again, but on the mainnet-beta
.
The command will change a bit, so for example, in uploading to Arweave on the mainnet-beta
, instead of:
ts-node C:/Users/<Username>/<Path to your candy-machine-cli.ts file> upload C:/Users/<Username>/<Path of your assets folder> --env devnet --keypair C:/Users/<Username>/<Path of your JSON wallet file>
It will be:
ts-node C:/Users/<Username>/<Path to your candy-machine-cli.ts file> upload C:/Users/<Username>/<Path of your assets folder> --env mainnet-beta --keypair C:/Users/<Username>/<Path of your JSON wallet file>
You might think that the high costs come from Arweave - actually, no. Most of the costs come from Candy Machine, but don't worry! In the next section, I'll explain how you can withdraw your SOL from the Candy Machine, once all your NFTs are minted.
Good fee calculators:
When you pay for Candy Machine, your NFTs will only stay there for two years - so there is no "buy" forever option, only rent. You can, however, change how long you can rent so you can pay less.
However, if you can afford the two years of rent, it is suggested to pay for them and then use the withdraw command to retrieve the remaining Solana once the minting is done.
If you decide to change the rent, the withdraw command might have some issues. (There is probably a 65% percent chance that it will give you a bunch of errors - that's my experience with Candy Machine 😅)
This is the command to withdraw your SOL from Candy Machine:
ts-node C:/Users/<Username>/<Path of your candy-machine-cli.ts file> withdraw -e devnet -k C:/Users/<Username>/<Path of your JSON wallet file>
Note: If you use the withdraw command, remember that you can't use the same Candy Machine anymore.
Error | Explanation |
---|---|
ENETUNREACH | If you see this, check or change your internet connection. Even if it is working to browse the web, this error can be fixed by changing internet connection. |
Metaplex Candy Machine Loop Error | If you have this error while uploading your assets, here are things you should try to fix it. First check your json files. Verify them with somenoe else if necessary. Second, check the path of your assets and verify that it is completely correct. |
Unexpected token or end of JSON input | Check your JSON file with the cli: verify_token_metadata |
429 | You are being rate limited. You need a custom RPC. |
0x139 | Not enough Solana. Fund your wallet. |
The term ‘git’ is not recognized as the name of a cmdlet: | Install git here. |
Invalid subscription ID | Verify after the upload is done. This shouldn’t give you an issue. |
SendTransactionError | Failed to send transaction: Node is behind by xxx slots: If you’re using a custom RPC, contact the provider otherwise try uploading again. |
TypeError | Cannot read properties of undefined (reading ‘digest’)…: Here is a possible solution. In your case you’ll probably have to use https. |
Question | Answer |
---|---|
Is there are way to make the upload cheaper? | Yes. To begin with, we no longer need to use an external program to upload our files to Arweave since upload costs is no longer fixed. To reduce cost, you can reduce the rent of the candy machinem, but keep in mind that it is recommened to leave the rent time as the default. |
What are the file size limits? | The minimum is 25KB, and the max is 9MB for the devnet and 250MB for the mainnet-beta . |
Can I upload more files to the same Candy Machine? | No. This is the reason why you need 2 candy machines to do presale. |
Can I do a reveal? | You can update your metadata with Metaboss. |
What are the differences between “family” and “name” under the collection section in the metadata? | The family is the broader term that ecompasses multiple collections, whereas the name identifies the current collection. |
Can you add more NFTs to a candy machine? | No. Once created, you cannot add more. |
-k
= Keypair (JSON wallet file)
-d
= Date
-p
= Price
-e
= Env