To complete this tutorial you will need some knowledge using git and some other command line tools.
- Install solana CLI and configure it for dev mode to avoid paying fees.
- Clone the latest master repository of Metaplex.
- cd into
yarnto install dependencies.
- Install rust.
First we create a Token with 1 decimal so each token’s value would be 0.1 (we will need 10 tokens to buy one NFT)
spl-token create-token --decimals 1
Create an account to hold the Tokens, using the TOKEN generated on previous step:
spl-token create-account <TOKEN>
Mint 40 tokens using the TOKEN generated on first step and the TOKEN_ACCOUNT generated on previous step:
spl-token mint <TOKEN> 40 <TOKEN_ACCOUNT>
Add Metadata to token
We can upload metadata like an image that will be displayed on wallets to represent our token. Go to the metaplex CLI folder:
Create the folder metaplex/js/packages/cli/token-metadata and make sure it an image called 0.png and a metadata json file called 0.json. Upload the metadata to Arweave:
build/candy-machine-cli.js upload -e devnet -k ~/.config/solana/devnet.json ./token-metadata
This will generate a cache file at metaplex/js/packages/cli/.cache/devnet-temp with the results.
Now clone the metaplex-program-library from github and compile the Metadata test client:
cd metaplex-program-library/token-metadata cargo build --bin metaplex-token-metadata-test-client cd target/debug
Attach the uploaded metadata into the token (You can get the IMAGE_LINK from the file generated when uploading metadata, located at metaplex/js/packages/cli/.cache/devnet-temp)
./metaplex-token-metadata-test-client create_metadata_accounts --keypair ~/.config/solana/devnet.json --name <SOME_NAME> --symbol <SOME_SYMBOL> --mint <TOKEN> --uri <IMAGE_LINK>
Disable future mints
This is optional, if you only want to create a fixed number of tokens you can disable mint forever. The Mint authority will be removed so you won’t be able to mint more tokens or create/modify metadata after doing this:
spl-token authorize mint --disable
Transfer tokens to other users
You can send tokens to other users if they already have an account for your specific token:
spl-token transfer <TOKEN> 1 <NEW_USER_ADDRESS>
If you get the error
Recipient's associated token account does not exist. you can fund their account by adding the flag
spl-token transfer --fund-recipient <TOKEN> 1 <NEW_USER_ADDRESS>
Upload NFT images
Same as we did earlier for the token metadata, now we are going to upload the NFT images and metadata. In mi case it’s stored on folder metaplex/js/packages/cli/example-assets. Go to the right folder:
Delete the previous cache:
And upload the assets:
build/candy-machine-cli.js upload -e devnet -k ~/.config/solana/devnet.json ./example-assets
Create candy machine
Now we will create a candy machine using the TOKEN and TOKEN_ACCOUNT generated at the beginning.
node build/candy-machine-cli.js create_candy_machine \ -e devnet \ -k ~/.config/solana/devnet.json \ -p 1 \ --spl-token <TOKEN> \ --spl-token-account <TOKEN_ACCOUNT>
Update Candy machine setting the start date (in my case some day in the past):
node build/candy-machine-cli.js update_candy_machine \ -e devnet \ -k ~/.config/solana/devnet.json \ --date "2021 Nov 23 00:00:00 GMT"
Now you can use show to display the summary of the existing Candy machine:
node build/candy-machine-cli.js show \ -e devnet \ -k ~/.config/solana/devnet.json
Note that the price is 10 instead of 1, because you need 10 tokens to buy a single NFT (remember that value of one token was 0.1)
Use a web frontend to sell NFT
Now that we have the candy machine up and running we can download a fronted like exiled-apes and update the ENV variables:
REACT_APP_CANDY_MACHINE_CONFIG=<CONFIG_ADDRESS_FROM_CACHE_FILE> REACT_APP_CANDY_MACHINE_ID=<CANDY_MACHINE_ID_FROM_CACHE_FILE> REACT_APP_TREASURY_ADDRESS=<TOKEN_ACCOUNT> REACT_APP_CANDY_START_DATE=<INTEGER_START_DATE_FROM_CACHE_FILE>