element-x-ada/docs/build-logs/phase5-result.md

2.5 KiB

Phase 5 Complete: Biometric Auth + Mainnet Flip

Date: 2026-03-29 Branch: phase1-dev Commits:

  • d975d7d761 - feat(wallet): require biometric/PIN auth before transaction signing
  • dde0dd9f4f - feat(wallet): flip to Cardano mainnet

Task 1: Biometric Authentication at Transaction Signing

Implementation:

  • BiometricAuthenticator.kt now uses BIOMETRIC_WEAK | DEVICE_CREDENTIAL
  • Works for all device security types:
    • Has fingerprint/face → biometric prompt
    • PIN only → PIN prompt
    • No auth set up → allows through (doesn't block transactions)
  • Fires when user taps "Send" on confirmation screen, BEFORE tx is built/signed/submitted
  • On auth failure/cancel → stays on confirmation screen, tx not submitted

Location: features/wallet/impl/src/main/kotlin/io/element/android/features/wallet/impl/biometric/BiometricAuthenticator.kt

Wired into: PaymentConfirmationNode.kt - calls biometricAuthenticator.authenticate() in the onConfirm handler

Task 2: Mainnet Flip

Changed in CardanoNetworkConfig.kt:

val NETWORK: CardanoNetwork = CardanoNetwork.MAINNET

All derived values now use mainnet:

  • Network ID: 1 (was 0)
  • Koios API: https://api.koios.rest/api/v1/ (was preprod.koios.rest)
  • Explorer: https://cardanoscan.io (was preprod.cardanoscan.io)
  • Address prefix: addr1 (was addr_test1)
  • Network name: "Mainnet" (was "Preprod Testnet")
  • cardano-client-lib: Networks.mainnet() (was Networks.preprod())

Also fixed: WalletPanelNode.kt now uses CardanoNetworkConfig.EXPLORER_BASE_URL instead of hardcoded URLs

To flip back to testnet: Change one line:

val NETWORK: CardanoNetwork = CardanoNetwork.TESTNET

Task 3: QA Pass

  • Build succeeds clean
  • No hardcoded preprod URLs in production code (only in preview providers for UI testing)
  • Address validation accepts addr1... format
  • Explorer links point to mainnet cardanoscan.io

APK

Download: http://192.168.0.5:8888/element-x-ada-mainnet.apk Size: 220 MB (arm64-v8a debug) Type: Fdroid Debug (no Google Play services)

Remaining for Production

  1. Code signing - Need release keystore for Play Store
  2. Testing - Manual QA on real device with biometric
  3. Wallet recovery - Users on testnet will need to create new wallets (different addresses)
  4. Balance migration - Old testnet balances don't exist on mainnet (expected)

This completes Phase 5 of Element X ADA integration.