# Metadata Rust CLI This CLI is used to interact with the metadata program. ## Usage ```bash program-metadata [SUBCOMMAND] ``` ### Commands #### IDL Management ```bash # Upload an IDL from local file program-metadata idl upload [OPTIONS] # Upload an IDL from URL program-metadata idl upload-url [OPTIONS] # Download an IDL program-metadata idl download [OUTPUT_PATH] Options: -k, --keypair Path to keypair file (optional, defaults to config) -p, --priority-fees Priority fees per compute unit (default: 0) --help Print help information ``` #### Metadata Management ```bash # Upload metadata from local file program-metadata metadata upload [OPTIONS] # Upload metadata from URL program-metadata metadata upload-url [OPTIONS] # Download metadata program-metadata metadata download [OUTPUT_PATH] Options: -k, --keypair Path to keypair file (optional, defaults to config) -p, --priority-fees Priority fees per compute unit (default: 0) --help Print help information ``` Examples: ```bash # Upload IDL using default keypair program-metadata idl upload ./target/idl/my_program.json GrAkz4CQ4zKm9KhZ9Q7PkCmqDP7JuSGbpwGY8dxKt6Kj # Upload IDL from URL with custom keypair and priority fees program-metadata idl upload-url https://example.com/my_idl.json GrAkz4CQ4zKm9KhZ9Q7PkCmqDP7JuSGbpwGY8dxKt6Kj -k ./my-keypair.json -p 1000 # Upload metadata using default keypair program-metadata metadata upload ./metadata.json GrAkz4CQ4zKm9KhZ9Q7PkCmqDP7JuSGbpwGY8dxKt6Kj # Download IDL to default path (idl.json) program-metadata idl download GrAkz4CQ4zKm9KhZ9Q7PkCmqDP7Ju # Upload metadata from URL program-metadata metadata upload-url https://example.com/metadata.json GrAkz4CQ4zKm9KhZ9Q7PkCmqDP7JuSGbpwGY8dxKt6Kj # Download metadata to custom path program-metadata metadata download GrAkz4CQ4zKm9KhZ9Q7PkCmqDP7JuSGbpwGY8dxKt6Kj ./my-metadata.json ``` ## Testing the Rust CLI against a local validator from within this repository Start your local validator: ```bash solana-test-validator --reset ``` Make sure you point your cluster to localnet and fix the program id in `Anchor.toml`. Fix the program id in `programs/upload-idl-program/src/lib.rs` and `rust_cli/src/codama_sdk/programs.rs`. Deploy the metadata program using anchor: ```bash anchor build anchor deploy ``` Airdrop SOL to your keypair - make sure to point your solana cli to localnet: ```bash solana config set --url localhost solana airdrop 20 -k tests/wallet.json ``` Deploy any program using the keypair in `tests/wallet.json`: ```bash solana program deploy .so -k tests/wallet.json ``` Run the CLI upload for the program you just deployed: ```bash cargo run -- idl upload tests/testidl.json -k tests/wallet.json -p 0 ```