Skip to content

Xian Mobile Wallet

xian-wallet-mobile is an Expo/React Native self-custody wallet for Android and iOS. It signs Ed25519 transactions on-device and uses the Xian TypeScript client for node access.

Install or Build

Android release APKs are published on the GitHub releases page. Verify the release source before installing and importing a funded account.

For local development, build the sibling SDK first:

bash
cd ../xian-js
npm install
npm run build

cd ../xian-wallet-mobile
npm install
npm run start
npm run android   # connected device or emulator
npm run ios       # macOS with Xcode

Use Java 17 and an Android SDK for Android builds. iOS builds require macOS, Xcode, and an installed simulator runtime.

Wallet Workflows

  • create or restore a mnemonic-backed wallet
  • import a single private-key account
  • lock and unlock with a password and optional biometrics
  • derive multiple mnemonic accounts
  • receive and send tokens
  • inspect balances and indexed activity
  • trade through the configured DEX contracts
  • manage network presets
  • call contract methods through the advanced transaction screen
  • connect WalletConnect dapps with explicit per-session scopes
  • export and import encrypted wallet backups

The browser and mobile wallets use compatible mnemonic derivation. Backups are encrypted and re-encrypted for local storage on import.

Connect to a Local Node

127.0.0.1 on a physical phone refers to the phone. Use an address reachable from the device:

EnvironmentTypical node host
iOS simulator127.0.0.1
Android emulator10.0.2.2
physical devicedevelopment machine's LAN address

Start the node, inspect its endpoints, and configure matching RPC, dashboard, and chain-ID values in the wallet:

bash
cd ../xian-stack
python3 ./scripts/backend.py start --no-bds-enabled --dashboard
python3 ./scripts/backend.py endpoints --no-bds-enabled --dashboard

Plain HTTP to a non-loopback host requires an explicit preset opt-in. Use it only on a trusted local/private network; prefer HTTPS elsewhere.

Security Model

  • mnemonics and private keys are encrypted before persistent storage
  • unlocked secret material exists only in process memory
  • the secure-store session record contains wrapped session data, not raw keys
  • invalid session records fail closed to the locked state
  • WalletConnect approves required Xian scopes only and rechecks chain, method, and account on every request
  • external message signatures use a chain- and account-bound envelope

Record the recovery phrase offline. A device backup is not a substitute for seed recovery material.

Validate a Checkout

bash
npm run typecheck
npm run test

Exercise security-sensitive flows on a device or emulator before shipping a build.