Web Wallet

The XE web wallet

The XE web wallet is the key-holding half of the web UI embedded in every node. It manages accounts, sends and receives assets, runs P2P chat, exposes a provider dashboard and a DAO governance workspace -- all without any server-side component holding keys.

The wallet and the explorer are two sections of the same application, shipped inside the xe binary.

Key properties

  • Client-side keys -- seeds are encrypted with AES-GCM and stored in localStorage. Decrypted seeds exist only in memory during an active page session.
  • Multi-wallet -- several accounts in one encrypted vault, sharing one passphrase, with an active-wallet switcher.
  • Local signing and PoW -- blocks are built, hashed, proof-of-worked and signed in the browser using Web Crypto Ed25519. The node is contacted only for chain state and block submission.
  • Optional -- xe node --wallet=false serves 404 for /wallet and /wallet/*, leaving a pure explorer.

Features

FeatureDescription
SendBuild, sign and submit send blocks for XE or XUSD, with an optional memo of up to 64 bytes
ReceiveTurn a pending send into a receive block, one at a time from the pending list
BalancesPer-asset total and spendable (finalized) balance
FaucetRequest testnet XUSD -- only shown when the node is configured with a faucet target
History and activityThe account's recent chain, plus a local log of what this browser did
Multi-wallet managementAdd, import, rename, remove, switch, and reveal the seed of a wallet
P2P chatSigned, proof-of-worked messages between accounts
Provider dashboardCapacity, utilisation, active and past leases -- shown when the active account is a provider
DAO governanceDraft, hash, sign and submit state chain blocks -- shown when the active account is in the state chain keyset

Amounts are rendered from uint64 micro-units through helpers mirroring core/amount.go, so the wallet shows the same decimal strings as the node and the CLI.

[!WARNING] Testnet only The faucet is a testnet facility. The button is hidden unless the node's UI handler is configured with a faucet target, and xe node does not set one -- so on a stock node it never appears. See the xe faucet CLI command for the equivalent, and note that the faucet service is not yet deployed.

Tech stack

There is no build step and no framework -- the same plain HTML + ES modules + CSS as the explorer. The cryptography is browser-native:

PurposeImplementation
Key derivation and signingWeb Crypto Ed25519 (seed imported as a PKCS#8 key)
Block hashingWeb Crypto subtle.digest (SHA-256)
Proof of workBundled assets/blake2b.js
Seed encryptionWeb Crypto AES-GCM with a PBKDF2-SHA-256 derived key

[!IMPORTANT] Browser requirement Web Crypto Ed25519 is required for signing: Chrome 113+, Firefox 130+, or Safari 17+.

Security model

Seeds are encrypted at rest using AES-GCM with keys derived via PBKDF2-SHA-256 (600,000 iterations), one random salt per wallet and a fresh IV per encryption. Decrypted seeds live in memory only -- they are never written to storage or sent over the network.

To avoid re-prompting on every page navigation, the passphrase may be cached in sessionStorage with a 30-minute TTL. That cache is per-tab, dies with the tab, and is cleared by the lock button.

[!WARNING] Browser security The wallet trusts the browser environment. Users should ensure their device is free of malware and use a strong passphrase. The encrypted seeds in localStorage are only as secure as the passphrase protecting them, and a cached passphrase in sessionStorage is roughly as exposed as a decrypted seed in JS memory -- both are reachable by any code running in the same origin.

See Security for the full encryption and session specification.

Serving the wallet

xe node --ui --wallet

--wallet defaults to true. The UI listens on --ui-port (default 8000, bound to 127.0.0.1) and reverse-proxies /api/* to the node's HTTP API, so the browser stays same-origin. GET /features.json reports whether the wallet and faucet are enabled.

See also

  • Security -- AES-GCM encryption, session handling, storage schema
  • Features -- detailed feature reference
  • Explorer -- the read-only section of the same UI
  • API Reference -- HTTP endpoints the wallet communicates with