The Solana Metaplex NFT 'Swiss Army Knife' tool. Current supported features:
- Decode NFT mint account metadata
- Get a list of mint accounts for a given candy machine ID or update authority
- Get a snapshot of current NFT holders for a given candy machine ID or update authority
- Set update authority on a single NFT or list of NFTs
- Update all data fields for a single NFT or list of NFTs
Planned features:
- Use Solana config for default RPC
- Get snapshot of holders who initially minted from a candy machine, whether or not they currently hold the token
- Get snapshots based on verified creators
Suggestions and PRs welcome!
Install Rust.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shClone the source:
git clone [email protected]:samuelvanderwaal/metaboss.gitChange directory and check out the develop branch:
cd metaboss
git checkout developInstall or build with Rust:
cargo install --path ./or
cargo build --release- Linux
- Windows
-r, --rpc The RPC endpoint to use for commands. Defaults to https://api.devnet.solana.com.
metaboss -r https://api.mainnet-beta.solana.com <SUBCOMMAND>Please don't abuse public APIs or you may get rate-limited. If you have heavy work to do, use a private RPC such as from QuickNode or Triton.
Decode a single NFT mint account metadata into a JSON file.
metaboss decode --mint-account <MINT_ACCOUNT> -o <OUPUT_DIRECTORY>The command will write the metadata JSON file to the output directory with the mint account as the name: e.g. CQNKXw1rw2eWwi812Exk4cKUjKuomZ2156STGRyXd2Mp.json. The output option defaults to the current directory.
Decode a list of NFT mint accounts metadata into a JSON file.
metaboss decode_all --json-file <JSON_FILE> -o <OUPUT_DIRECTORY>The JSON file should be an array of mint accounts to be decoded:
["xSy...", "Cnb..." ...]The command will write each metadata JSON file to the output directory as a separate file with the mint account as the name: e.g. CQNKXw1rw2eWwi812Exk4cKUjKuomZ2156STGRyXd2Mp.json. The output option defaults to the current directory.
Displays list of commands and options for the program.
Get mint accounts for a candy machine or an update authority. Specify either a candy machine id, or an update authority, but not both and at least one.
metaboss get_mints --candy-machine-id <CANDY_MACHINE_ID> -o <OUTPUT_DIRECTORY>or
metaboss get_mints --update_authority <UPDATE_AUTHORITY> -o <OUTPUT_DIRECTORY>This creates a JSON file named: <CANDY_MACHINE_ID/UPDATE_AUTHORITY>_mint_accounts.json in the specified output directory. The JSON file contains an array of mint accounts.
Warning: This command modifies your NFT. Use with caution.
Set the update authority on a single NFT's metadata account.
metaboss set_update_authority --keypair <PATH_TO_KEYPAIR> --mint-account <MINT_ACCOUNT> --new-update-authority <NEW_UPDATE_AUTHORITY>Outputs a TxId to the command line so you can check the result.
Warning: This command modifies your NFT. Use with caution.
Set the update authority on a list NFT's metadata accounts.
metaboss set_update_authority_all --keypair <PATH_TO_KEYPAIR> --json-file <PATH_TO_JSON_FILE>The JSON file should be an array of objects with mint_account and new_update_authority:
[
{
"mint_account": "CQNKXw1rw2eWwi812Exk4cKUjKuomZ2156STGRyXd2Mp",
"new_update_authority": "42NevAWA6A8m9prDvZRUYReQmhNC3NtSZQNFUppPJDRB"
},
{
"mint_account": "9pVUWcAje2HphJqXKwkhsehGnPM7RFt5syqUK99tLMFM",
"new_update_authority": "42NevAWA6A8m9prDvZRUYReQmhNC3NtSZQNFUppPJDRB"
}
]Outputs a TxId to the command line so you can check the result.
Warning: This command modifies your NFT. Use with caution.
Update all Data fields on a single NFT's metadata account by reading new values from a URI JSON file.
metaboss update_nft --keypair <PATH_TO_KEYPAIR> --mint-account <MINT_ACCOUNT> --new-uri <NEW_URI>Outputs a TxId to the command line so you can check the result.
Warning: This command modifies your NFT. Use with caution.
Update all Data fields on a list of NFTs' metadata accounts by reading new values from provided new URIs.
metaboss update_nft_all --keypair <PATH_TO_KEYPAIR> --json-file <PATH_TO_JSON_FILE>The JSON file should be an array of objects with mint_account and new_uri fields, where the new_uri is an already existing JSON file stored at the URI:
[
{
"mint_account": "CQNKXw1rw2eWwi812Exk4cKUjKuomZ2156STGRyXd2Mp",
"new_uri": "https://arweave.net/FPGAv1XnyZidnqquOdEbSY6_ES735ckcDTdaAtI7GFw"
},
{
"mint_account": "9pVUWcAje2HphJqXKwkhsehGnPM7RFt5syqUK99tLMFM",
"new_uri": "https://arweave.net/N36gZYJ6PEH8OE11i0MppIbPG4VXKV4iuQw1zaq3rls"
}
]Get a snapshot of current holders of NFTs specifying an NFT collection by either candy machine ID or update authority. Specify either a candy machine id, or or an update authority, but not both and at least one.
metaboss snapshot --candy-machine-id <CANDY_MACHINE_ID> -o <OUTPUT_DIRECTORY>or
metaboss snapshot --update_authority <UPDATE_AUTHORITY> -o <OUTPUT_DIRECTORY>Creates a snapshot.json file in the output directory consisting of an array of objects containing owner_wallet, token_address and mint_account fields.
[
{
"owner_wallet": "BJD9JeKEnGU9mqqagoovTsDSr1bSZQSy8pHS8hHmjve6",
"token_address": "BqNz4yh9q7z4N2cAdaqMCk7Y9oLF93Pcwc6hBMBRfLtc"
},
{
"owner_wallet": "BJD9JeKEnGU9mqqagoovTsDSr1bSZQSy8pHS8hHmjve6",
"token_address": "3rDbzaZJ79pz7HPR4cTABxnpGJpeKJuMf32SPfFHvNUg"
}
]Update a list of mint accounts with new URIs:
metaboss update_nft_all -k ~/.config/solana/devnet.json --json-file new_uri.jsonThe JSON file should be an array of mint_accounts and new_uris. Example:
[
{
"mint_account": "CQNKXw1rw2eWwi812Exk4cKUjKuomZ2156STGRyXd2Mp",
"new_uri": "https://arweave.net/FPGAv1XnyZidnqquOdEbSY6_ES735ckcDTdaAtI7GFw"
},
{
"mint_account": "9pVUWcAje2HphJqXKwkhsehGnPM7RFt5syqUK99tLMFM",
"new_uri": "https://arweave.net/N36gZYJ6PEH8OE11i0MppIbPG4VXKV4iuQw1zaq3rls"
}
]Update a single NFT with a new update_authority:
metaboss set_update_authority -k ~/.config/solana/devnet.json --mint-account CQNKXw1rw2eWwi812Exk4cKUjKuomZ2156STGRyXd2Mp --new-update-authority 42NevAWA6A8m9prDvZRUYReQmhNC3NtSZQNFUppPJDRB