| 8 | #include <vector> |
| 9 | |
| 10 | void printHelp(const char *program_name) { |
| 11 | std::cout << "Quip C++ SDK CLI Tool\n"; |
| 12 | std::cout << "A command-line interface for interacting with Quip smart " |
| 13 | "contracts using Winternitz signatures.\n\n"; |
| 14 | |
| 15 | std::cout << "USAGE:\n"; |
| 16 | std::cout << " " << program_name << " [OPTIONS] <COMMAND> [ARGS...]\n\n"; |
| 17 | |
| 18 | std::cout << "OPTIONS:\n"; |
| 19 | std::cout << " --help Show this help message\n"; |
| 20 | std::cout << " --rpc-url <URL> Ethereum RPC endpoint (default: " |
| 21 | "http://localhost:8545)\n"; |
| 22 | std::cout << " --contract-address <ADDR> QuipFactory contract address " |
| 23 | "(required for custom networks)\n\n"; |
| 24 | |
| 25 | std::cout << "COMMANDS:\n"; |
| 26 | std::cout << " deposit [--amount <amount>] [--entropy <entropy>]" |
| 27 | << std::endl; |
| 28 | std::cout |
| 29 | << " --amount: Amount in wei to deposit (default: 10000000000000000)" |
| 30 | << std::endl; |
| 31 | std::cout << " --entropy: Optional hex string for deterministic vault ID" |
| 32 | << std::endl; |
| 33 | std::cout << " Deploy a new Quip wallet using Winternitz signatures\n"; |
| 34 | std::cout << " - Uses PRIVATE_KEY environment variable for classical " |
| 35 | "public key derivation\n"; |
| 36 | std::cout |
| 37 | << " - Generates Winternitz keypair using hashsigs-cpp library\n"; |
| 38 | std::cout << " - Outputs vault ID, classical public key, Winternitz " |
| 39 | "public key, and wallet address\n\n"; |
| 40 | |
| 41 | std::cout |
| 42 | << " transfer <pubkey> <sig> <to_address> <amount> <private_key>\n"; |
| 43 | std::cout |
| 44 | << " Transfer funds from a Quip wallet using Winternitz signature\n"; |
| 45 | std::cout << " - pubkey: 32-byte public key in hex format (0x...)\n"; |
| 46 | std::cout << " - sig: Winternitz signature in hex format (0x...)\n"; |
| 47 | std::cout << " - to_address: Destination Ethereum address (0x...)\n"; |
| 48 | std::cout << " - amount: Transfer amount in wei\n"; |
| 49 | std::cout << " - private_key: Private key for transaction signing\n\n"; |
| 50 | |
| 51 | std::cout |
| 52 | << " execute <pubkey> <sig> <target_address> <opdata> <private_key>\n"; |
| 53 | std::cout << " Execute a contract call from a Quip wallet using " |
| 54 | "Winternitz signature\n"; |
| 55 | std::cout << " - pubkey: 32-byte public key in hex format (0x...)\n"; |
| 56 | std::cout << " - sig: Winternitz signature in hex format (0x...)\n"; |
| 57 | std::cout << " - target_address: Target contract address (0x...)\n"; |
| 58 | std::cout << " - opdata: Operation data in hex format (0x...)\n"; |
| 59 | std::cout << " - private_key: Private key for transaction signing\n\n"; |
| 60 | |
| 61 | std::cout << " change-owner <pubkey> <sig> <private_key>\n"; |
| 62 | std::cout << " Change the PQ owner of a Quip wallet using Winternitz " |
| 63 | "signature\n"; |
| 64 | std::cout << " - pubkey: 32-byte public key in hex format (0x...)\n"; |
| 65 | std::cout << " - sig: Winternitz signature in hex format (0x...)\n"; |
| 66 | std::cout << " - private_key: Private key for transaction signing\n\n"; |
| 67 | |