Skip to main content

Mobile Wallet

The Monolythium Mobile Wallet is a React Native application built with Expo 54, designed for iOS and Android. It provides wallet creation and import, sending and receiving LYTH (with QR codes), staking, multi-network management, a contact book, and profile-based access control.


Overview

PropertyDetails
StackReact Native 0.81, Expo 54, TypeScript 5.9, Expo Router 6
PlatformsiOS, Android
CryptoPure TypeScript -- @noble/curves, @noble/hashes, @scure/bip32, bip39
Secure Storageexpo-secure-store (iOS Keychain / Android Keystore)
State ManagementZustand 5, TanStack Query 5
UI FrameworkNativeWind (TailwindCSS 3 for React Native)
Chain ClientDirect Cosmos REST API calls (no heavy SDK dependency)

Installation

iOS

The Monolythium Wallet will be available on the App Store. During the beta period, you can install it via TestFlight.

Android

The Monolythium Wallet will be available on Google Play. During the beta period, you can install the APK directly from the GitHub Releases page.

Building from Source

# Clone the repository
git clone https://github.com/mono-labs-org/mobile-wallet.git
cd mobile-wallet

# Install dependencies
npm install --legacy-peer-deps

# Start Expo dev server
npx expo start

# Press 'i' for iOS simulator or 'a' for Android emulator
Peer Dependencies

The project requires the --legacy-peer-deps flag due to a peer dependency mismatch between React 19 and some Expo packages. An .npmrc file is included in the repository with this setting.


Creating a Profile

On first launch, the app displays a splash screen, then navigates to the Profile flow.

1. Create Profile

  1. Tap Create New Profile.
  2. Enter a profile name (this is displayed in the app header).
  3. Set a password. This password protects access to the app and is required to unlock it after the auto-lock timeout.

The password hash is stored securely in the device's encrypted keychain (iOS) or keystore (Android) via expo-secure-store.

2. Unlock Profile

On subsequent launches, you will see the Unlock screen. Enter your password to proceed to the dashboard.


Creating a Wallet

After your profile is set up, you can create or import a wallet.

Create New Wallet

  1. Navigate to Create Wallet (from the dashboard or after profile creation).
  2. The app generates a BIP39 mnemonic seed phrase. You can choose:
    • 24-word mnemonic (256-bit entropy, default)
    • 12-word mnemonic (128-bit entropy)
  3. Write down your seed phrase on paper. Do not take a screenshot.
  4. Confirm your seed phrase by selecting the words in the correct order.
  5. The wallet derives your addresses using the appropriate HD path:
    • m/44'/60'/0'/0/0 for EthSecp256k1 chains (Monolythium)
    • m/44'/118'/0'/0/0 for standard Cosmos chains

Import Existing Wallet

  1. Navigate to Import Wallet.
  2. Enter your BIP39 mnemonic phrase (12 or 24 words).
  3. The wallet validates the mnemonic and derives your addresses.

Each wallet stores its private key in expo-secure-store (encrypted by the OS) and its metadata (name, addresses, network assignment) in AsyncStorage.


Sending LYTH

  1. From the dashboard, tap on a wallet to view its details.
  2. Tap Send.
  3. Enter the recipient address (bech32 mono1... or EVM 0x... format).
  4. Enter the amount in LYTH.
  5. Review the transaction details.
  6. Tap Confirm Send.
  7. The app signs the transaction locally using the private key from secure storage and broadcasts it to the chain via the Cosmos REST API.

An alert dialog confirms the transaction hash on success.


Receiving LYTH

  1. From a wallet detail screen, tap Receive.
  2. The receive screen displays:
    • A QR code encoding your address (for easy scanning by the sender)
    • Your bech32 address (mono1...)
    • Your EVM address (0x...) if applicable
  3. Tap an address to copy it to the clipboard.
  4. Tap Share Address to send your address via the OS share sheet (Messages, AirDrop, email, etc.).

Both addresses refer to the same on-chain account. Use bech32 for Cosmos tools and EVM for Ethereum-compatible tools.


Staking

The Staking tab provides a full staking interface with two sub-tabs: Validators and Delegations.

Viewing Validators

The Validators tab lists all active validators on the current network, sorted by voting power. Each entry shows:

  • Rank
  • Validator moniker (name)
  • Total staked tokens
  • Commission rate
  • Jailed status (if applicable)

Pull down to refresh the validator list.

Delegate

  1. Find a validator and tap Delegate.
  2. A bottom sheet appears prompting you for the amount (LYTH) to delegate.
  3. Tap Confirm Delegate.
  4. The app builds a MsgDelegate transaction, signs it, and broadcasts it.

Unbond

  1. Switch to the Delegations tab to see your active delegations.
  2. Tap Unbond on a delegation.
  3. Enter the amount to unbond.
  4. Tap Confirm Unbond.

The unbonding period on Monolythium is 3 days, after which your tokens become available.

Claim Rewards

When you have unclaimed rewards, a rewards banner appears at the top of the staking screen showing the total unclaimed amount. Tap Claim to withdraw all pending rewards across your delegations.


Multi-Network Switching

The mobile wallet supports multiple Monolythium networks and Cosmos ecosystem chains. Network configuration is defined in the built-in chain registry, which includes:

  • Monolythium Sprintnet (testnet)
  • Monolythium Testnet
  • Monolythium Mainnet
  • Monolythium Localnet

Each network has its own RPC endpoints, chain ID, denomination, and staking parameters. You can switch the active network from the Settings tab or the network selector.

When you switch networks, the wallet uses the appropriate HD path and key algorithm for that chain, deriving the correct address format automatically.


Contacts

The Contacts tab provides an address book for saving frequently used addresses.

  • Add a contact: Enter a name, address, network, and optional notes.
  • Tap a contact to copy the address or use it in a send transaction.
  • Contacts are stored locally in AsyncStorage on the device.

Security

Secure Key Storage

Private keys are stored in expo-secure-store, which uses:

  • iOS: The Keychain Services API with hardware-backed encryption
  • Android: The Android Keystore system

Private keys never leave secure storage in plaintext except when signing a transaction in memory.

PIN / Password Protection

The app requires a password to unlock your profile on each launch. The password hash is stored in expo-secure-store, and the app checks it before granting access to wallet functionality.

Auto-Lock

The app supports a configurable auto-lock timer (default: 5 minutes). After the timeout period of inactivity, the profile is locked and the unlock screen is displayed.

Biometrics

The settings store includes a biometrics_enabled option for future Face ID / fingerprint unlock support.


Backup and Recovery

Backing Up Your Wallet

Your BIP39 mnemonic seed phrase is the only backup you need. With it, you can restore your wallet in any compatible application (the Monolythium Desktop Wallet, Keplr, MetaMask, or any BIP39-compatible wallet using the same HD path).

Best practices:

  • Write your seed phrase on paper (or use a metal backup plate).
  • Store it in a secure, offline location.
  • Never share your seed phrase with anyone.
  • Never enter your seed phrase into a website.

Restoring a Wallet

  1. Install the Monolythium Mobile Wallet on a new device.
  2. Create a new profile.
  3. Select Import Wallet.
  4. Enter your 12- or 24-word mnemonic seed phrase.
  5. Your addresses and balances will be restored automatically from the chain.

Transaction history is queried from the chain's REST API, so all on-chain activity is available once you restore.


Settings

The Settings tab provides the following options:

SettingOptionsDefault
ThemeDark, LightDark
Accent ColorBlue, Green, PurpleBlue
LanguageEnglishEnglish
CurrencyUSDUSD
Auto-lock timerConfigurable5 minutes
BiometricsEnabled / DisabledDisabled

Troubleshooting

App crashes on launch

Clear the app data (or reinstall) and restore your wallet from your mnemonic seed phrase.

Transaction fails

Ensure your wallet has sufficient balance to cover the transfer amount plus gas fees. On Monolythium, the minimum gas price is 20 gwei (20,000,000,000 alyth).

Staking rewards not showing

Pull down to refresh the staking screen. Rewards are queried from the chain's REST API and may take a few seconds to update after a new block.