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 help

Global 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.timekeepers to 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 faucet is a testnet funding tool; on a network that runs no faucet service the request simply fails. The faucet service is not currently deployedfaucet.test.network does 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-work xe fund claim was removed along with the claim block 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 sshd

The 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 use XE_SEED. An argv seed is visible in ps, /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

See also