# Shekyl Executables This document describes every binary produced by a Shekyl build. All binaries are placed in `build/release/bin/` (or `build/debug/bin/`). ## Quick reference | Binary | Purpose | |--------|---------| | `shekyld` | Full-node daemon (P2P, consensus, RPC) | | `shekyl-wallet-cli` | Interactive command-line wallet | | `shekyl-wallet-rpc` | Headless wallet exposed via JSON-RPC | | `shekyl-gen-trusted-multisig` | Offline multisig wallet set generator | | `shekyl-gen-ssl-cert` | TLS certificate / key generator for RPC | | `shekyl-blockchain-import` | Import a bootstrap file into the chain DB | | `shekyl-blockchain-export` | Export chain DB to a bootstrap file | | `shekyl-blockchain-mark-spent-outputs` | Build a spent-output ring database | | `shekyl-blockchain-usage` | Output-reuse histogram | | `shekyl-blockchain-ancestry` | Trace output ancestry graphs | | `shekyl-blockchain-depth` | Measure ring depth to coinbase | | `shekyl-blockchain-stats` | Time-series chain statistics | | `shekyl-blockchain-prune` | Prune blockchain LMDB in place | | `shekyl-blockchain-prune-known-spent-data` | Prune known-spent output buckets | | `shekyl-utils-deserialize` | Decode hex blobs to human-readable JSON | | `shekyl-utils-object-sizes` | Print sizeof for core data structures | | `shekyl-utils-dns-checks` | Verify Shekyl DNS seed/update records | The last three (`shekyl-utils-*`) are only built when `BUILD_DEBUG_UTILITIES=ON`. --- ## Default network ports | Network | P2P | RPC (HTTP) | ZMQ | |---------|-----|------------|-----| | Mainnet | 11021 | 11029 | 11025 | | Testnet | 12021 | 12029 | 12025 | | Stagenet | 13021 | 13029 | 13025 | Select a network with `--testnet` or `--stagenet`. Mainnet is the default. --- ## 1. `shekyld` — Full-Node Daemon The core network participant. Validates blocks and transactions, relays them over P2P, serves the JSON-RPC API, and optionally mines. ### Usage ``` shekyld [options] [command] ``` ### Key options | Option | Description | |--------|-------------| | `--data-dir ` | Blockchain and config directory (default `~/.shekyl`) | | `--config-file ` | Read options from a config file | | `--testnet` | Run on testnet | | `--stagenet` | Run on stagenet | | `--log-level <0-4>` | Logging verbosity | | `--log-file ` | Log output file | | `--detach` | Run as a background daemon (Linux) | | `--pidfile ` | PID file when detached | | `--non-interactive` | Disable interactive console | | `--rpc-bind-ip ` | RPC listen address (default `127.0.0.1`) | | `--rpc-bind-port ` | RPC listen port (default per network, see table above) | | `--restricted-rpc` | Restrict RPC to view-only / safe methods | | `--rpc-restricted-bind-port ` | Separate restricted RPC listener | | `--rpc-login ` | HTTP digest authentication for RPC | | `--confirm-external-bind` | Required when binding RPC to non-loopback | | `--rpc-ssl ` | `enabled`, `disabled`, or `autodetect` | | `--rpc-ssl-certificate ` | TLS certificate for RPC | | `--rpc-ssl-private-key ` | TLS private key for RPC | | `--p2p-bind-port ` | P2P listen port | | `--add-peer ` | Add a persistent peer | | `--add-priority-node ` | Always try to connect to this peer | | `--add-exclusive-node ` | Connect only to these peers | | `--seed-node ` | Connect to a seed node for initial peer discovery | | `--out-peers ` | Maximum outbound connections | | `--in-peers ` | Maximum inbound connections | | `--hide-my-port` | Do not advertise this node to the network | | `--no-igd` | Disable UPnP port forwarding | | `--public-node` | Advertise as a public node | | `--prune-blockchain` | Enable blockchain pruning | | `--offline` | Run without P2P networking | | `--zmq-rpc-bind-port ` | ZMQ RPC port | | `--no-zmq` | Disable ZMQ entirely | | `--ban-list ` | File of IPs to ban | | `--max-txpool-weight ` | Maximum transaction pool size | | `--block-notify ` | Execute command on new block (substitutes `%s` with hash) | | `--db-sync-mode ` | Database sync mode: `safe`, `fast`, `fastest` | ### Interactive console commands When running interactively (without `--non-interactive` or `--detach`), the daemon provides a command console: | Command | Description | |---------|-------------| | `help` | List available commands | | `status` | Current sync height, network, hashrate | | `print_height` | Current blockchain height | | `print_bc [end]` | Print block range | | `print_block ` | Print a single block | | `print_tx ` | Print transaction details | | `print_pl` | Print peer list | | `print_cn` | Print active connections | | `print_net_stats` | Network traffic statistics | | `print_pool` | Full transaction pool contents | | `print_pool_sh` | Short transaction pool summary | | `print_pool_stats` | Pool statistics | | `start_mining [threads]` | Start mining to an address | | `stop_mining` | Stop mining | | `mining_status` | Current mining status | | `diff` | Current network difficulty | | `sync_info` | Blockchain sync progress and peer states | | `hard_fork_info` | Hard fork voting status | | `bans` | List banned peers | | `ban [seconds]` | Ban an IP address | | `unban ` | Remove a ban | | `flush_txpool [txid]` | Remove transactions from the pool | | `pop_blocks ` | Remove the top N blocks (for recovery) | | `set_log ` | Change log level at runtime | | `limit [up\|down] [kB/s]` | View or set bandwidth limits | | `out_peers ` | Change max outbound peers | | `in_peers ` | Change max inbound peers | | `version` | Print daemon version | | `save` | Force a blockchain save | | `exit` / `stop_daemon` | Shut down the daemon | ### Examples ```bash # Start a mainnet full node with default settings shekyld # Start a testnet node bound to all interfaces shekyld --testnet --rpc-bind-ip 0.0.0.0 --confirm-external-bind # Start a restricted public node as a background service shekyld --detach --restricted-rpc --public-node \ --rpc-bind-ip 0.0.0.0 --confirm-external-bind \ --config-file /etc/shekyl/shekyld.conf # Use a custom data directory shekyld --data-dir /mnt/ssd/shekyl-data # Pruned node (saves ~2/3 disk space) shekyld --prune-blockchain ``` --- ## 2. `shekyl-wallet-cli` — Interactive Wallet A full-featured command-line wallet supporting transfers, staking, multisig, hardware wallets, and message signing. ### Usage ``` shekyl-wallet-cli [--wallet-file= | --generate-new-wallet=] [options] ``` ### Key options | Option | Description | |--------|-------------| | `--wallet-file ` | Open an existing wallet | | `--generate-new-wallet ` | Create a new wallet | | `--restore-deterministic-wallet` | Restore from a 25-word mnemonic seed | | `--restore-height ` | Block height to start scanning from during restore | | `--electrum-seed ` | Provide the seed on the command line | | `--generate-from-view-key ` | Create a view-only wallet | | `--generate-from-spend-key ` | Create a wallet from a spend key | | `--generate-from-keys ` | Create a wallet from address + view key + spend key | | `--generate-from-device ` | Create a wallet backed by a hardware device | | `--daemon-address ` | Daemon to connect to | | `--daemon-host ` | Daemon hostname | | `--daemon-port ` | Daemon RPC port | | `--trusted-daemon` | Trust the daemon (enables advanced queries) | | `--untrusted-daemon` | Treat the daemon as untrusted | | `--testnet` | Use testnet | | `--stagenet` | Use stagenet | | `--password ` | Wallet password (avoid on shared systems) | | `--password-file ` | Read password from a file | | `--daemon-ssl ` | SSL mode for daemon connection | | `--hw-device ` | Hardware wallet device string | | `--mnemonic-language ` | Language for the seed phrase | | `--subaddress-lookahead ` | Subaddress lookahead range | | `--offline` | Run without connecting to a daemon | | `--config-file ` | Read options from a config file | ### Interactive wallet commands After opening a wallet, these commands are available at the `[wallet ...]:` prompt: **Balances and addresses** | Command | Description | |---------|-------------| | `balance [detail]` | Display balance (unlocked and total) | | `address [new