The xe binary is a unified CLI for both node operation and client interaction.
xe-testnet
Commands
xe node [flags] Start a node daemon
xe wallet create Create a new wallet
xe wallet balance Show wallet balance
xe faucet Request testnet XE from the faucet service
xe send <addr> <amount> [--asset XE|XUSD] [--memo "text"]
Send funds; --memo attaches up to 64 bytes of UTF-8
xe receive Receive pending sends
xe mint <amount> Ops/bootstrap only — wallet must be an authorized sys.minter
xe burn <amount> [--yes] Burn funds from the loaded wallet
xe providers List providers
xe lease [flags] Create a lease
xe lease status <hash> Check lease status
xe vm <hash> Get VM info
xe ssh <hash> SSH into leased VM
xe reputation <address> Show provider reputation
xe keygen Generate ed25519 SSH keypair
xe sign-block Sign a block from stdin (seed from XE_SEED)
xe version Print version
xe help Print usagexe faucet talks to the standalone faucet service (XE_FAUCET, default
https://faucet.test.network). It sends 1,000 testnet XE per account per
day from a pre-funded wallet; the grant lands as a pending send, so claim it
with xe receive.
xe sign-block takes no seed argument — the binary rejects one because a
positional seed leaks via ps, /proc, and shell history. Set XE_SEED
instead.
Environment Variables
| Variable | Default | Description |
|---|---|---|
XE_NODE | https://ldn.core.test.network | Node API URL |
XE_WALLET | ~/.xe/wallet.seed | Wallet seed file |
XE_SEED | (none) | Hex seed for sign-block (required — the command takes no seed argument) |
XE_FAUCET | https://faucet.test.network | Faucet service URL |
XE_API_ADMIN_TOKEN | (none) | Node: enables operator-only API endpoints when set |
XE_SSH_HOST | ldn.test.network | SSH gateway hostname |
XE_SSH_PORT | 2222 | SSH gateway port |
Node Flags
| Flag | Default | Description |
|---|---|---|
-port | 9000 | libp2p TCP port |
-api-port | 8080 | HTTP API port |
-api-bind | 127.0.0.1 | API bind address |
-api | true | Enable/disable HTTP API server |
-dial | (none) | Bootstrap multiaddrs |
-data | ./data | Storage directory |
-cors-origin | (none) | Allowed CORS origin |
-ui | false | Enable embedded web UI (requires -api) |
-ui-port | 8000 | Web UI port |
-ui-bind | 127.0.0.1 | Web UI bind address |
-ui-dir | (embedded) | Dev override: serve UI from filesystem |
-wallet | true | Expose /wallet/ in the embedded UI; --wallet=false serves 404 |
-provide | false | Enable provider mode |
-vcpus | 2 | vCPUs to offer |
-memory | 2048 | Memory in MB |
-disk | 20 | Disk in GB |
-price-multiplier | 1000 | Provider price multiplier ×1000 (1000 = baseline) |
-ssh-port | 0 | SSH gateway port (0 = disabled) |
-limactl-path | (PATH) | Path to limactl |
-max-conns-per-ip | 8 | Max inbound connections per source IP |
-min-lease-duration | (none) | Policy: minimum lease duration as a Go duration (e.g. 1h); empty = no limit |
-max-lease-duration | (none) | Policy: maximum lease duration (e.g. 720h); empty = no limit |
-min-lease-cost | 0 | Policy: minimum XUSD cost (0 = no min) |
-max-lease-cost | 0 | Policy: maximum XUSD cost (0 = no max) |
-max-concurrent-leases | 0 | Policy: max active leases (0 = capacity-bound only) |
The lease-duration flags are duration strings, not numbers — passing 0 fails
validation and stops the node at startup. Leave them unset for no limit.