diff --git a/crates/cdk-cli/README.md b/crates/cdk-cli/README.md index bdd21e5f..0cea68bb 100644 --- a/crates/cdk-cli/README.md +++ b/crates/cdk-cli/README.md @@ -11,11 +11,15 @@ A command-line Cashu wallet implementation built with the Cashu Development Kit ## Features -- **Multiple Mint Support**: Connect to and manage multiple Cashu mints +- **Multiple Mint Support**: Connect to and manage multiple Cashu mints simultaneously - **Token Operations**: Mint, melt, send, and receive Cashu tokens -- **Wallet Management**: Create and manage multiple wallets -- **Lightning Integration**: Pay Lightning invoices and receive payments -- **Token Storage**: Secure local storage of tokens and mint configurations +- **Lightning Integration**: Pay Lightning invoices (BOLT11, BOLT12, BIP353) and receive payments +- **Payment Requests**: Create and pay payment requests with various conditions (P2PK, HTLC) +- **Token Transfer**: Transfer tokens between different mints +- **Multi-Currency Support**: Support for different currency units (sat, usd, eur, etc.) +- **Database Options**: SQLite or Redb backend with optional encryption (SQLCipher) +- **Tor Support**: Built-in Tor transport support (when compiled with feature) +- **Secure Storage**: Local storage of tokens, mint configurations, and seed ## Installation @@ -30,141 +34,379 @@ cargo build --bin cdk-cli --release # Binary will be at ./target/release/cdk-cli ``` +### Build with Optional Features +```bash +# With Tor support +cargo build --bin cdk-cli --release --features tor + +# With SQLCipher encryption +cargo build --bin cdk-cli --release --features sqlcipher + +# With Redb database +cargo build --bin cdk-cli --release --features redb +``` + ## Quick Start -### 1. Add a Mint +### 1. Check Your Balance ```bash -# Add a mint (use a real mint URL or start your own with cdk-mintd) -cdk-cli wallet add-mint http://127.0.0.1:8085 +# View your current balance across all mints +cdk-cli balance ``` ### 2. Mint Tokens ```bash -# Create a mint quote for 100 sats -cdk-cli wallet mint-quote 100 +# Create and mint tokens from a mint (amount in sats) +cdk-cli mint http://127.0.0.1:8085 100 -# Pay the Lightning invoice shown, then mint the tokens -cdk-cli wallet mint +# Or with a description +cdk-cli mint http://127.0.0.1:8085 100 "My first mint" + +# The command will display a Lightning invoice to pay +# After payment, tokens are automatically minted ``` ### 3. Send Tokens ```bash -# Send 50 sats as a token -cdk-cli wallet send 50 +# Send tokens (you'll be prompted for amount and mint selection interactively) +cdk-cli send + +# Or specify options directly +cdk-cli send --mint-url http://127.0.0.1:8085 --memo "Payment for coffee" ``` ### 4. Receive Tokens ```bash # Receive a token from someone else -cdk-cli wallet receive +cdk-cli receive + +# Receive from untrusted mint with transfer to trusted mint +cdk-cli receive --allow-untrusted --transfer-to http://127.0.0.1:8085 ``` -### 5. Check Balance +## Global Options + +The CLI supports several global options that apply to all commands: + ```bash -# View your current balance -cdk-cli wallet balance +# Use a specific database engine +cdk-cli --engine sqlite balance +cdk-cli --engine redb balance + +# Set a custom work directory +cdk-cli --work-dir ~/my-wallet balance + +# Set logging level +cdk-cli --log-level info balance + +# Use a specific currency unit +cdk-cli --unit usd balance + +# Use NIP-98 Wallet Signing Proxy +cdk-cli --proxy https://proxy.example.com balance + +# Disable Tor (when built with Tor feature, it's on by default) +cdk-cli --tor off balance ``` -## Basic Usage +## Commands Reference + +### Balance Operations -### Wallet Operations ```bash -# List all wallets -cdk-cli wallet list - -# Create a new wallet -cdk-cli wallet new --name my-wallet - -# Set default wallet -cdk-cli wallet set-default my-wallet - -# Show wallet info -cdk-cli wallet info +# Check balance across all mints +cdk-cli balance ``` -### Mint Management +### Minting Tokens + ```bash -# List connected mints -cdk-cli wallet list-mints +# Mint tokens with a Lightning invoice +cdk-cli mint -# Remove a mint -cdk-cli wallet remove-mint +# With options +cdk-cli mint http://127.0.0.1:8085 1000 \ + --method bolt11 +# Using an existing quote +cdk-cli mint http://127.0.0.1:8085 --quote-id + +# Claim pending mint quotes that have been paid +cdk-cli mint-pending +``` + +### Sending & Receiving Tokens + +```bash +# Send tokens (interactive) +cdk-cli send + +# Send with specific options +cdk-cli send \ + --memo "Coffee payment" \ + --mint-url http://127.0.0.1:8085 \ + --include-fee \ + --offline + +# Send with P2PK lock +cdk-cli send --pubkey --required-sigs 1 + +# Send with HTLC (Hash Time Locked Contract) +cdk-cli send --hash --locktime + +# Send as V3 token +cdk-cli send --v3 + +# Send with automatic transfer from other mints if needed +cdk-cli send --allow-transfer --max-transfer-amount 1000 + +# Receive tokens +cdk-cli receive + +# Receive with signing key (for P2PK) +cdk-cli receive --signing-key + +# Receive with HTLC preimage +cdk-cli receive --preimage + +# Receive via Nostr +cdk-cli receive --nostr-key --relay wss://relay.example.com +``` + +### Lightning Payments + +```bash +# Pay a Lightning invoice (interactive - will prompt for invoice) +cdk-cli melt + +# Specify mint and payment method +cdk-cli melt --mint-url http://127.0.0.1:8085 --method bolt11 + +# Pay BOLT12 offer +cdk-cli melt --method bolt12 + +# Pay BIP353 address +cdk-cli melt --method bip353 + +# Multi-path payment +cdk-cli melt --mpp +``` + +### Payment Requests + +```bash +# Create a payment request (interactive via Nostr) +cdk-cli create-request + +# Create with specific amount +cdk-cli create-request --amount 1000 "Invoice for services" + +# Create with P2PK condition +cdk-cli create-request --amount 500 \ + --pubkey \ + --pubkey \ + --num-sigs 2 + +# Create with HTLC +cdk-cli create-request --amount 1000 --hash +# Or use preimage instead +cdk-cli create-request --amount 1000 --preimage + +# Create with HTTP transport +cdk-cli create-request --amount 1000 \ + --transport http \ + --http-url https://myserver.com/payment + +# Create without transport (just print the request) +cdk-cli create-request --amount 1000 --transport none + +# Pay a payment request +cdk-cli pay-request + +# Decode a payment request +cdk-cli decode-request +``` + +### Token Transfer Between Mints + +```bash +# Transfer tokens between mints (interactive) +cdk-cli transfer + +# Transfer specific amount +cdk-cli transfer \ + --source-mint http://mint1.example.com \ + --target-mint http://mint2.example.com \ + --amount 1000 + +# Transfer full balance from one mint to another +cdk-cli transfer \ + --source-mint http://mint1.example.com \ + --target-mint http://mint2.example.com \ + --full-balance +``` + +### Mint Information & Management + +```bash # Get mint information -cdk-cli wallet mint-info +cdk-cli mint-info + +# Update mint URL (if mint has migrated) +cdk-cli update-mint-url + +# List proofs from mint +cdk-cli list-mint-proofs ``` -### Payment Operations +### Token & Proof Management + ```bash -# Pay a Lightning invoice -cdk-cli wallet pay-invoice +# Decode a Cashu token +cdk-cli decode-token -# Create melt quote for an invoice -cdk-cli wallet melt-quote +# Check pending proofs and reclaim if no longer pending +cdk-cli check-pending -# Execute the melt -cdk-cli wallet melt +# Burn spent tokens (cleanup) +cdk-cli burn + +# Restore proofs from seed for a specific mint +cdk-cli restore ``` -### Token Management +### Advanced Features + +#### Blind Authentication (NUT-14) + ```bash -# List all tokens -cdk-cli wallet list-tokens +# Mint blind authentication proofs +cdk-cli mint-blind-auth --amount +``` -# Check token states -cdk-cli wallet check-tokens +#### CAT (Cashu Authentication Tokens) -# Restore wallet from seed -cdk-cli wallet restore --seed +```bash +# Login with username/password +cdk-cli cat-login --username --password + +# Login with device code flow (OAuth-style) +cdk-cli cat-device-login ``` ## Configuration +### Storage Location + The CLI stores its configuration and wallet data in: -- **Linux/macOS**: `~/.config/cdk-cli/` -- **Windows**: `%APPDATA%\cdk-cli\` +- **Linux/macOS**: `~/.cdk-cli/` +- **Windows**: `%USERPROFILE%\.cdk-cli\` + +You can override this with the `--work-dir` option. + +### Database Options + +The CLI supports multiple database backends: + +#### SQLite (default) +```bash +cdk-cli --engine sqlite balance +``` + +#### SQLCipher (encrypted SQLite) +```bash +# Requires building with --features sqlcipher +cdk-cli --engine sqlite --password mypassword balance +``` + +#### Redb +```bash +# Requires building with --features redb +cdk-cli --engine redb balance +``` + +### Seed Management + +The wallet seed is automatically generated and stored in `/seed` on first run. This seed is used to derive all keys and can be used to restore your wallet. + +**Important**: Back up your seed file securely. Anyone with access to the seed can spend your tokens. ## Examples ### Complete Workflow Example + ```bash # 1. Start a test mint (in another terminal) cdk-mintd -# 2. Add the mint -cdk-cli wallet add-mint http://127.0.0.1:8085 +# 2. Mint some tokens +cdk-cli mint http://127.0.0.1:8085 1000 "Initial mint" +# Pay the displayed Lightning invoice -# 3. Create a mint quote -cdk-cli wallet mint-quote 1000 +# 3. Check balance +cdk-cli balance -# 4. Pay the Lightning invoice (if using real Lightning backend) -# or wait a few seconds if using fake wallet +# 4. Send some tokens +cdk-cli send +# Follow interactive prompts -# 5. Mint the tokens -cdk-cli wallet mint +# 5. The recipient can receive with: +cdk-cli receive -# 6. Check balance -cdk-cli wallet balance - -# 7. Send some tokens -cdk-cli wallet send 100 - -# 8. The recipient can receive with: -cdk-cli wallet receive +# 6. Pay a Lightning invoice +cdk-cli melt +# Follow prompts to enter invoice ``` -### Working with Multiple Wallets +### Multi-Mint Setup + ```bash -# Create wallets for different purposes -cdk-cli wallet new --name savings -cdk-cli wallet new --name daily +# Mint from multiple mints +cdk-cli mint http://mint1.example.com 5000 +cdk-cli mint http://mint2.example.com 3000 -# Switch between wallets -cdk-cli wallet set-default savings -cdk-cli wallet balance +# Check balance (shows breakdown by mint) +cdk-cli balance -cdk-cli wallet set-default daily -cdk-cli wallet balance +# Transfer between mints +cdk-cli transfer \ + --source-mint http://mint1.example.com \ + --target-mint http://mint2.example.com \ + --amount 2000 +``` + +### Payment Request Workflow + +```bash +# Recipient creates a payment request +cdk-cli create-request --amount 1000 "Payment for services" +# Copy the payment request string + +# Sender pays the request +cdk-cli pay-request +``` + +### P2PK (Pay to Public Key) Usage + +```bash +# Send tokens locked to a public key +cdk-cli send --pubkey --required-sigs 1 + +# Recipient receives with their private key +cdk-cli receive --signing-key +``` + +### HTLC (Hash Time Locked Contract) Usage + +```bash +# Create a preimage and hash (externally) +# hash = SHA256(preimage) + +# Send with HTLC +cdk-cli send --hash --locktime 1700000000 + +# Recipient receives with preimage +cdk-cli receive --preimage ``` ## Help and Documentation @@ -174,8 +416,35 @@ cdk-cli wallet balance cdk-cli --help # Help for specific commands -cdk-cli wallet --help -cdk-cli wallet mint-quote --help +cdk-cli mint --help +cdk-cli send --help +cdk-cli receive --help +cdk-cli create-request --help +``` + +## Troubleshooting + +### Pending Tokens +If you have pending tokens (sent but not received, or mint quotes paid but not claimed): + +```bash +# Check and reclaim pending proofs +cdk-cli check-pending + +# Claim paid mint quotes +cdk-cli mint-pending +``` + +### Cleaning Up +```bash +# Remove spent tokens from database +cdk-cli burn +``` + +### Restore from Seed +```bash +# Restore proofs from a specific mint +cdk-cli restore ``` ## License diff --git a/crates/cdk-mintd/README.md b/crates/cdk-mintd/README.md index fcb189c7..4d9b39a3 100644 --- a/crates/cdk-mintd/README.md +++ b/crates/cdk-mintd/README.md @@ -251,7 +251,7 @@ For complete configuration options, see the [example configuration file](./examp ## Documentation - **[Configuration Examples](./example.config.toml)** - Complete configuration reference -- **[PostgreSQL Setup Guide](../../POSTGRES.md)** - Database setup instructions +- **[PostgreSQL Setup Guide](../../docker-compose.postgres.yaml)** - Database setup with Docker Compose - **[Development Guide](../../DEVELOPMENT.md)** - Contributing and development setup ## License