Metaplex Command Line Interface
This is a command line interface for creating and managing non-fungible tokens on the Solana blockchain through the Metaplex programs.
Implemented commands
mint-create
: create a new token mint - same command as in spl-token, included here for convenience.mint-supply
: display supply of tokens from mint - same command as in spl-token, included here for convenience.mint-info
: display information for an existing mint account.metadata-info
: display information for an existing metadata account.metadata-create
: create a new metadata account for an existing mint, including creators and shares.metadata-update
: update an existing metadata account by providing either a mint or metadata account address and providing values for one or more updatable fields:- new_update_authority
- name
- symbol
- uri
- seller_fee_basis_points
- creators
- primary_sale_happened
nft-create
: create a de novo nft including mint, token account, metadata account and master edition.arweave
: upload files to the Arweave permaweb. - this is inop - post is successful but transaction isn't mined.
Getting Started
cd rust/cli
cargo build
cargo run -- -help
Usage
Create an NFT
cargo-run -- nft-create
This brief command kicks off the process of minting a token, creating a token account, minting one token to the account, creating a metadata account and finally, creating a master edition. You can add one or more values for name, symbol, uri, or creators after nft-create
. Creator shares have to sum to 100, values are specified in whole integer percentages and if you provide any creators, one of them has to be the same as the update authority. The update authority defaults to the wallet address in the local Solana config, but you can provide another one by flag.
View Metadata Info
cargo-run -- metadata-info Cbg5o1tarienqQeQ8FcS6inGw2edrZ73znyYhVFtXa8b
You can pass either the metadata account or token mint address. Without any values provided for the metadata fields, this produces a blank NFT, but it can be updated later since the --immutable
flag wasn't set.
Address: qHFGEW7vnW61Arupoo4WcV3uqoDiRRhFv3fzHGPusBt
Key: MetadataV1
Update Authority: 61mVTaw6hBtwWnSaGXRSJePFWEQqipeCka3evytEVNUp
Mint: Cbg5o1tarienqQeQ8FcS6inGw2edrZ73znyYhVFtXa8b
Primary Sale Happened: false
Is Mutable: true
Edition Nonce: 255
Name:
Symbol:
Uri:
Seller Fee Basis Points: 0
If you want the output in json, you can add json
or json-compact
to the --output
flag.
cargo run -- metadata-info --output json Cbg5o1tarienqQeQ8FcS6inGw2edrZ73znyYhVFtXa8b
{
"address": "qHFGEW7vnW61Arupoo4WcV3uqoDiRRhFv3fzHGPusBt",
"metadata": {
"key": "MetadataV1",
"updateAuthority": "61mVTaw6hBtwWnSaGXRSJePFWEQqipeCka3evytEVNUp",
"mint": "Cbg5o1tarienqQeQ8FcS6inGw2edrZ73znyYhVFtXa8b",
"name": "",
"symbol": "",
"uri": "",
"sellerFeeBasisPoints": "0",
"creators": null,
"primarySaleHappened": false,
"isMutable": true,
"editionNonce": "255"
}
}
Update Metadata
Metadata can be updated with the metadata-update
command, providing at least one additional flag with the value to be updated. Creators are specified with an address followed by a colon and then the respective share. For example, if we wanted to update the above metadata, we could enter:
cargo run -- metadata-update qHFGEW7vnW61Arupoo4WcV3uqoDiRRhFv3fzHGPusBt \
--name "My NFT" --symbol "NFT" \
--creators 61mVTaw6hBtwWnSaGXRSJePFWEQqipeCka3evytEVNUp:50 7oHuVGKc5ZA2tdJX2xLxfUuZPf4RWMsEuNFWkByZNNs7:50 \
--uri ipfs://tbd
Same as with nft-create
, you can provide either the token mint address or the metadata account address.
cargo run -- metadata-info Cbg5o1tarienqQeQ8FcS6inGw2edrZ73znyYhVFtXa8b
to see the updates:
Address: qHFGEW7vnW61Arupoo4WcV3uqoDiRRhFv3fzHGPusBt
Key: MetadataV1
Update Authority: 61mVTaw6hBtwWnSaGXRSJePFWEQqipeCka3evytEVNUp
Mint: Cbg5o1tarienqQeQ8FcS6inGw2edrZ73znyYhVFtXa8b
Primary Sale Happened: false
Is Mutable: true
Edition Nonce: 255
Name: My NFT
Symbol: NFT
Uri: ipfs://tbd
Seller Fee Basis Points: 0
Creators: 2
[0] Address: 61mVTaw6hBtwWnSaGXRSJePFWEQqipeCka3evytEVNUp
Verified: false
Share: 50
[1] Address: 7oHuVGKc5ZA2tdJX2xLxfUuZPf4RWMsEuNFWkByZNNs7
Verified: false
Share: 50
You don't have to provide all of the arguments for updating. You can provide as few as one up to all, but if you update the creators, you have to provide the complete set. For example if we just wanted to update the uri, we could just run.
cargo run -- metadata-update Cbg5o1tarienqQeQ8FcS6inGw2edrZ73znyYhVFtXa8b --uri ipfs://updated_uri
and then to see that just the uri has been updated.
cargo run -- metadata-info Cbg5o1tarienqQeQ8FcS6inGw2edrZ73znyYhVFtXa8b
Address: qHFGEW7vnW61Arupoo4WcV3uqoDiRRhFv3fzHGPusBt
Key: MetadataV1
Update Authority: 61mVTaw6hBtwWnSaGXRSJePFWEQqipeCka3evytEVNUp
Mint: Cbg5o1tarienqQeQ8FcS6inGw2edrZ73znyYhVFtXa8b
Primary Sale Happened: false
Is Mutable: true
Edition Nonce: 255
Name: My NFT
Symbol: NFT
Uri: ipfs://updated_uri
Seller Fee Basis Points: 0
Creators: 2
[0] Address: 61mVTaw6hBtwWnSaGXRSJePFWEQqipeCka3evytEVNUp
Verified: false
Share: 50
[1] Address: 7oHuVGKc5ZA2tdJX2xLxfUuZPf4RWMsEuNFWkByZNNs7
Verified: false
Share: 50
Todo
- Upload to storage
- Proper tests for arweave module
- Add individual commands for minting tokens and creating master editions
- Display edition info
- Create and update from json files
- Integration tests
- Bulkify
- Vault
- Auction
- Candy Store
- Fractionalization
- Custom Edition Metadata
- Remote Wallet
Implementation Details
The command line interface includes output features and cli tooling from the Solana token program cli, including the ability to produce output for display or json, either normal or compact, and use default values from solana-cli local config. It also makes use of solana-clap-utils for efficient validation and argument parsing.