Node CLI
Node CLI
xe is the unified command-line interface for the XE network. It replaces the separate xe-node, cli, xe-tool, and xe-lease-tool binaries. Source: cmd/xe/main.go.
Commands
xe node [flags] Start a node daemon
xe wallet create Create a new wallet
xe wallet balance Show wallet balance
xe send <addr> <amount> Send funds [--asset XE|XUSD] [--memo "text"]
xe receive Receive all pending sends
xe faucet Request testnet XUSD from the faucet service
xe mint <amount> Mint XUSD (authorized minter wallet only)
xe burn <amount> Permanently destroy XE [--yes] [--memo "text"]
xe providers List compute 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 a leased VM
xe reputation <addr> Show reputation aggregate for an account
xe keygen Generate ed25519 SSH keypair
xe sign-block Sign a block from stdin; seed from XE_SEED
xe version Print version
xe help Show helpGlobal configuration
Configuration is via environment variables:
Variable
Default
Description
XE_NODE
https://ldn.core.test.network
Node API URL for client commands
XE_FAUCET
https://faucet.test.network
Faucet service URL used by xe faucet
XE_WALLET
~/.xe/wallet.seed
Wallet seed file path
XE_SEED
(none)
32-byte hex signing seed read by xe sign-block
XE_SSH_HOST
ldn.test.network
SSH gateway hostname
XE_SSH_PORT
2222
SSH gateway port
XE_API_ADMIN_TOKEN
(none)
Read by xe node. Sets the bearer token for operator-only API endpoints; unset leaves them disabled
[!WARNING] Testnet defaults The built-in defaults for
XE_NODE,XE_FAUCET, and the SSH gateway point at the public testnet. Set them explicitly for any other network.
Node
xe node [flags]
Starts a node daemon. Runs until SIGINT/SIGTERM. No interactive REPL — use xe subcommands against the API instead.
Flag
Default
Description
-port
9000
libp2p TCP listen port
-api
true
Enable the HTTP API server
-api-port
8080
HTTP API listen port
-api-bind
127.0.0.1
API bind address
-ui
false
Serve the embedded web UI (requires -api)
-ui-port
8000
Web UI listen port
-ui-bind
127.0.0.1
Web UI bind address
-ui-dir
(embedded)
Serve the UI from this directory instead of the embedded filesystem (dev)
-wallet
true
Expose /wallet/ in the embedded UI; -wallet=false serves 404 for /wallet/*
-dial
(none)
Bootstrap multiaddr(s), comma-separated
-data
./data
Storage directory
-cors-origin
(none)
Allowed CORS origin
-max-conns-per-ip
8
Max inbound connections per source IP (raise for multi-node-per-host setups)
-provide
false
Enable provider mode
-vcpus
2
vCPUs to offer (provider mode)
-memory
2048
Memory in MB (provider mode)
-disk
20
Disk in GB (provider mode)
-price-multiplier
1000
Provider price multiplier ×1000 (1000 = baseline, 2500 = 2.5×). Simulation only — non-baseline values need anti-cheat gates before production use.
-min-lease-duration
(none)
Auto-reject leases shorter than this (Go duration, e.g. 1h)
-max-lease-duration
(none)
Auto-reject leases longer than this (Go duration, e.g. 720h)
-min-lease-cost
0
Auto-reject leases below this cost in whole XUSD (0 = no minimum)
-max-lease-cost
0
Auto-reject leases above this cost in whole XUSD (0 = no maximum)
-max-concurrent-leases
0
Cap on active leases, running plus provisioning (0 = bounded only by capacity)
-ssh-port
0
SSH gateway listen port (0 = disabled)
-limactl-path
(PATH)
Path to limactl binary
# Start a node and connect to testnet
xe node -port 9000 -api-port 8080 \
-dial /ip4/45.77.226.208/tcp/9000/p2p/12D3KooW...
# Start a provider node
xe node -provide -vcpus 4 -memory 4096 -disk 40 \
-ssh-port 2222 -dial ...[!WARNING] Provider requirements Provider nodes require
sys.timekeepersto be configured in the state chain. The node will refuse to start in provider mode without trusted timekeepers — attestations are mandatory for lease acceptance and settlement.
Wallet
xe wallet create
Generates a new ed25519 keypair and saves the seed to the wallet file (~/.xe/wallet.seed by default). Prints the account address.
xe wallet balance
Shows the current balance for all assets (XE, XUSD) for the wallet's account.
Transactions
xe send <address> <amount> [--asset XE|XUSD] [--memo "text"]
Creates and submits a send block. Default asset is XUSD. The block is signed with the wallet's key, PoW is computed, and it's submitted to the node.
--memo attaches an optional note to the block. Memos are capped at 64 bytes, must be valid UTF-8, and may not contain ASCII control bytes other than tab and newline.
xe receive
Creates receive blocks for all pending incoming sends addressed to the wallet. Sends stay pending until the recipient runs this — the recipient's balance does not move on the send alone.
xe faucet
Requests XUSD for the wallet's address from the standalone faucet service (XE_FAUCET, default https://faucet.test.network). The faucet holds an authorized minter wallet and sends the XUSD as an ordinary transfer, so the funds arrive as a pending send — run xe receive afterwards.
[!WARNING] Testnet only, and not yet available
xe faucetis a testnet funding tool; on a network that runs no faucet service the request simply fails. The faucet service is not currently deployed —faucet.test.networkdoes not resolve, so this command has nothing to talk to today. There is no permissionless way to self-fund an account: the old proof-of-workxe fundclaim was removed along with theclaimblock type.
xe mint <amount>
Submits a mint block creating XUSD in the wallet's own account. The ledger only accepts this from an authorized minter (sys.minter in the state chain); every other wallet is rejected at validation. Operations and bootstrap use only — this is how the faucet and, later, the bridge issue XUSD.
xe burn <amount> [--yes] [--memo "text"]
Permanently destroys XE from the wallet, submitting a burn block. Burn is XE-only and irreversible — the supply is reduced, not moved.
The command prints the amount and the resulting balance and waits for you to type yes before submitting. Pass --yes (or -y) to skip the prompt in scripts. --memo follows the same rules as xe send.
Compute
xe providers
Lists all compute providers registered on the network, showing total and available resources, XUSD balance, and active lease counts.
xe lease [flags]
Creates a lease on a compute provider. Generates an SSH key (if not already created), finds a suitable provider, submits the lease block, and waits for acceptance.
Flag
Default
Description
--vcpus
1
vCPUs
--memory
1024
Memory in MB
--disk
1
Disk in GB
--duration
300
Duration in seconds
--provider
(auto)
Provider address (auto-selects best fit if omitted)
The provider is selected automatically based on available resources and XUSD balance for staking. The chosen provider must have an active performance certificate — the command fetches it to read the price multiplier used for the cost calculation, and aborts if there is none. The lease block is submitted to a bootstrap node (not the provider directly) so gossip triggers the provider's auto-accept, then the command polls for acceptance for up to 120 seconds.
xe lease status <hash>
Shows the lease record: consumer, provider, resources, cost, stake, start time, settlement status.
xe vm <hash>
Shows VM status for a lease. Works via any node — bootstrap nodes proxy the request to the provider via libp2p.
xe ssh <hash>
Opens an SSH session to a leased VM. The connection goes through the SSH gateway (ProxyJump) with end-to-end encryption:
ssh client → gateway (lease key auth) → libp2p tunnel → provider → VM sshdThe SSH key is per-wallet: derived from the wallet file path (e.g., ~/.xe/wallet.lease_key). Each wallet gets its own key, preventing cross-wallet VM access.
Reputation
xe reputation <address>
Prints the reputation aggregate for an account as JSON, read from GET /accounts/{address}/reputation. Accounts with no lease activity report no reputation rather than an error.
The aggregate is derived from on-chain lease activity and is rebuilt as blocks apply, so it is eventually consistent — two nodes can briefly disagree just after a settlement propagates.
Tools
xe keygen
Generates a new ed25519 keypair. Writes the private key in OpenSSH PEM format to ./lease_key and prints the public key hex.
xe sign-block
Reads an unsigned block as JSON from stdin, sets its account from the signing key, signs it, computes PoW, and writes the signed block to stdout. For scripting and low-level block construction.
The seed comes from the XE_SEED environment variable as 32 bytes of hex — there is no command-line form:
XE_SEED=$(cat ~/.xe/wallet.seed) xe sign-block < block.json > signed.json[!WARNING] A seed on the command line is already leaked Passing a positional seed is rejected, not merely discouraged:
xe sign-block <seed>exits with an error telling you to rotate that seed and useXE_SEED. An argv seed is visible inps,/proc/<pid>/cmdline, and shell history before the process can do anything about it.
Data directory
When running xe node, the -data flag controls persistent storage:
Path
Content
host.key
libp2p identity key (peer ID)
node.key
Node account ed25519 key
ledger/
BadgerDB database
lima/
Lima VM state (provider only)
ssh_host_key
SSH gateway host key