Skip to content

Gleec Wallet v0.9.3: Performance, Analytics, and Authentication Overhaul, SIA support

Latest

Choose a tag to compare

@gcharang gcharang released this 01 Dec 13:36
71169e3

This release delivers significant performance improvements, enhanced analytics capabilities, and a comprehensive overhaul of authentication and wallet management. Key highlights include real-time portfolio streaming, a dual analytics pipeline with persistent queueing, one-click sign-in, Z-HTLC support, SIA support, dynamic coin-type filters, and extensive optimisations that reduce RPC usage while improving responsiveness across all platforms.

🚀 New Features

  • Realtime Portfolio Streaming ([@CharlVS], #3253) - Live balance updates throughout the app via CoinsBloc streaming, eliminating the need for manual refreshes
  • One-Click "Remember Me" Sign-In ([@CharlVS], #3041) - Securely cache wallet metadata for instant access with improved post-login routing
  • Dual Analytics Pipeline ([@CharlVS], #2932) - Firebase and Matomo integration with persistent event queueing, CI toggles, and comprehensive event tracking
  • Z-HTLC Support ([@takenagain], #3158) - Full support for privacy-preserving Hash Time Locked Contracts with configurable activation toggles and optional sync parameters
  • Enhanced Feedback System ([@CharlVS], #3017) - Comprehensive feedback portal overhaul with provider plugins, opt-out contact handling, screenshot scrubbing, and analytics integration
  • Geo-blocking Bouncer ([@CharlVS], #3150) - Privacy coin restrictions with regulated build overrides for compliance
  • Transaction Broadcast Details ([@smk762], #3308) - View transaction details immediately after broadcasting withdrawals
  • Market Maker Mobile Improvements ([@takenagain], #3220) - Status indicators and start/stop controls now available in mobile view
  • Swap Data Export ([@ca333], #3220) - Copy and export swap data for reference and debugging
  • Tendermint Faucet Support ([@takenagain], #3206) - Request test coins for Tendermint-based assets with activation guardrails
  • Optional Verbose Logging ([@ca333], #3332) - Configurable logging levels for development and troubleshooting
  • SDK Log Integration ([@CharlVS], #3159) - SDK logs now route through the app logger for unified log management
  • BASE Token Support ([@smk762], #3354) - Added support for BASE blockchain network tokens in filters and tagging functionality
  • F-Droid Metadata ([@DeckerSU], #3381) - Added F-Droid metadata (descriptions, summaries, and localized text) for app store inclusion
  • SIA Withdrawal Support ([@smk762], #3400, #3398, #3408) - Full Sia withdrawal flow implementation with preview-then-execute workflow and balance sync improvements for non-streaming assets
  • Dynamic Coin-Type Filters ([@CharlVS], #3398) - Derives asset filter list directly from CoinSubClass so new SDK coin families become selectable without wallet-side changes
  • Cross-Platform JSON Export ([@smk762], #3348) - Adds _saveAsJsonFile for Android, iOS, desktop, and web platforms enabling consistent swap/order export with prettified JSON
  • Prioritized Coins for users not logged in ([@DeckerSU], #3351) - Priority-based sorting for unauthenticated user asset lists with popular coins (BTC, KMD, ETH, BNB, LTC, DASH, ZEC, DOGE) displayed first for better onboarding

SDK Updates (komodo-defi-sdk-flutter)

This release integrates komodo-defi-sdk v1.0.0-pre.1 with 82 commits bringing substantial improvements:

  • Flutter Web WASM Support (SDK#176) - WASM support with OPFS integration and unified storage. The SDK is now Flutter wasm-ready, but will still require some changes for Komodo Komodo wallet which will bring performance improvements.
  • Enhanced RPC Coverage (SDK#179, #188, #191) - Trading, orderbook, and Lightning RPC support
  • Streaming Infrastructure (SDK#178, #232, #269) - Pubkey and balance watch streams with comprehensive caching
  • Multi-Provider Market Data (SDK#145, #224) - CoinPaprika fallback and refined Binance quotes
  • Custom Token Storage (SDK#225, #190) - Runtime coin updates integration
  • Platform Support (SDK#237, #247) - macOS universal binary and packaging updates

See the full SDK changelog for complete details.

🎨 UI/UX Improvements

  • Fiat Value Display ([@takenagain], #3049) - Coin detail pages now show fiat balance for individual addresses
  • Withdraw Form Enhancements ([@takenagain], #3274) - Vertical responsive layout, fiat value previews for amount and fee, and alignment improvements
  • Loading State Placeholders ([@takenagain], #3134) - Hide asset lists and show placeholders until fiat prices are available for better UX
  • Transaction History Ordering ([@CharlVS], #9900372) - Unconfirmed transactions now appear first in the list
  • Token Parent Labelling ([@dragonhound], #2988) - Parent coins now tagged as "native" for clearer asset hierarchy
  • Trezor Visibility Toggles ([@smk762], #3214) - Password and PIN visibility controls for Trezor authentication
  • Market Maker Value Display ([@smk762], #3215) - Fixed bot maker order values display
  • Activation Filter Compatibility ([@smk762], #3249) - Only show compatible activation filter options to prevent errors
  • Buy Coin List Sorting ([@smk762], #3328) - Market maker buy coin list now sorted with price filters and "add assets" footer
  • Keyboard Dismissal ([@takenagain], #3225) - Dismiss keyboard on scroll for fiat and swap inputs
  • Mobile Seed Backup Banner ([@takenagain], #3225) - Seed backup banner now visible in mobile view
  • Post-Login Navigation ([@smk762], #3262) - Consistent routing to wallet page after login or logout with delayed navigation for Trezor PIN/passphrase entry
  • Custom Seed Toggle ([@smk762], #3260) - Hide custom seed toggle unless BIP39 validation fails
  • NFT Withdraw QR Scanning ([@smk762], #3243) - QR code scan button added to NFT withdrawal address input
  • Consistent Pill Styling ([@dragonhound], #2974) - Applied uniform "swap address" pill style throughout the app
  • Thoughtful Scrollbar Disposal ([@dragonhound], #3008) - Improved scrollbar lifecycle management
  • Manual Withdraw Confirmation Guard ([@smk762], #3296) - Prompts for confirmation when typed amount matches max balance to avoid accidental full-balance sends; on confirm, switches to Max mode (fee deducted) and retries preview
  • Swap Export UI Polish ([@smk762], #3348) - Repositioned export button into pair header block, removed duplicate UUID copy row, and shorter labels to avoid second line
  • Password Visibility Simplification ([@smk762], #3388) - Removed timer on password visibility toggle for simpler UX
  • Withdrawal Confirmation Copy Fix ([@DeckerSU], #3406) - Fixed typo in English "Confirm Sending" caption

⚡ Performance Enhancements

  • RPC Spam Reduction ([@CharlVS], #3253) - Comprehensive SDK-side caching and streaming support drastically reduces redundant RPC calls
  • Fiat On-Ramp Debouncing ([@takenagain], #3125) - Reduced API calls on user input changes for smoother fiat amount entry
  • Balance Watch Streams (SDK, #178) - Realtime balance updates from SDK eliminate polling
  • Pubkey Caching ([@CharlVS], #3251) - Prefer cached pubkeys before RPC across the app with post-swap fetch delays
  • Best Orders Optimization ([@smk762], #3328) - Avoid best_orders calls unless on DEX/bridge; fail gracefully and retry
  • Activation Patience ([@smk762], #3272) - Await initial activations and avoid duplicated activation tasks with proper parent/child coin sync

🐛 Bug Fixes

  • Transaction History Cross-Asset Bleed ([@CharlVS], #3289) - Isolated TransactionHistoryBloc per-coin to prevent history mixing
  • Balance Update State Preservation ([@CharlVS], #3253) - Realtime balance updates now preserve coin activation state to avoid turning off the Send button
  • Transaction Sorting ([@CharlVS], #3253) - Fixed transaction history list sorting logic
  • Dropdown Null Safety ([@cursor Agent], #3050) - Fixed null safety issues in UiDropdown widget, preventing app freeze on logout
  • Legacy Wallet Migration ([@CharlVS], #3207) - Preserve legacy flag, sanitise wallet names, ensure uniqueness, and avoid duplicate imports during migration
  • Wallet Coin Restoration ([@takenagain], #3126) - Restore wallet coins for legacy wallet migrations and seed file imports
  • Password Length Validation ([@CharlVS], #3141, #3149) - Consistent 128-character password handling across all flows with hardened validation
  • Custom Token Import ([@takenagain], #3129) - Check platform in deduplication and correctly update fields; refresh asset list on import
  • Precision Loss in Wallet ([@CharlVS], #3123) - Resolved DEX precision regression with comprehensive tests
  • Withdraw Form Fixes ([@takenagain], #3274) - Fixed fiat alignment, max value detection, and use signed hex from preview for broadcast
  • ZHTLC Activation Toggle ([@smk762], #3283) - Revert toggle on ZHTLC activation config cancel
  • Coin Variant Sum ([@smk762], #3317) - Fixed coin variant sum display in dropdowns
  • Decimals Precision ([@ca333], #3297) - Added unit tests and fixed decimal handling with proper fiat amount input refactoring
  • Trading Bot Improvements ([@takenagain], #3223, #3328) - Remove price URL parameter to default to KDF URL list; add guard against swap button spamming; use max_maker_vol for spendable balance
  • Market Maker Dropdown ([@takenagain], #3187) - Fixed sell coin dropdown reverting to previous coin with occasional flickering
  • ARRR Reactivation ([@takenagain], #3184) - Fixed ARRR not reappearing in coins list after deactivation and reactivation
  • Pubkey Clearing ([@CharlVS], #3144) - Clear pubkeys on wallet change or logout to prevent cross-wallet contamination
  • Unban Pubkeys Null Check ([@smk762], #3276) - Avoid null check error on unban_pubkey button press
  • Timer Leaks ([@ca333], #3305) - Fixed timer leaks preventing proper cleanup
  • SSE Lifecycle ([@ca333], #3313, #3318) - Tie SSE to the auth state lifecycle and remove the SSE package for better stability
  • iOS/macOS KDF Reinitialization ([@ca333], #3286) - Proper KDF health check and reinitialisation on iOS/macOS
  • Withdrawal Form ([@ca333], #3288) - Fixed withdrawal regression
  • KDF Disposal Crash ([@DeckerSU], #3117) - Fixed crash when KomodoDefiSdk is disposed during periodic fetch
  • Fiat On-Ramp CSP ([@takenagain], #3225) - Disable overly restrictive CSP with limited platform support; add Komodo and sandbox domains to allowlist
  • NFT IPFS Loading ([@takenagain], #3020) - Add IPFS gateway resolution, retry, and fallback to improve NFT image loading
  • macOS File Picker ([@CharlVS], #3111) - Show file picker by adding user-selected read-only entitlement
  • Settings Version Isolation ([@smk762], #3324) - Isolate version settings in shared_preferences.json for backwards compatibility
  • Unconfirmed Transaction Detection ([@takenagain], #3328) - Only consider empty timestamps and confirmations as unconfirmed
  • ARRR Autoactivation Guard ([@smk762], #3370) - Bypass ZHTLC coins (ARRR) from auto-activation list if sync params have not been previously set, preventing crash on login
  • NFT Page Disable ([@smk762], #3362) - Disable NFT page in sidebar menu to prevent access to non-functional feature with tooltip on hover
  • macOS App Icons ([@smk762], #3363) - Fixed incorrect macOS app logo and icons display
  • iOS Download Logs Dialog ([@DeckerSU], #3374) - Fix "Download logs" button not opening share dialog on iOS by migrating from deprecated Share API to SharePlus with proper iPad support
  • iOS Private Key Retrieval ([@DeckerSU], #3375) - Fix private keys not displaying correctly on iOS due to state loss during async callback execution; improved handling for empty private keys with better user feedback during asset activation
  • Import Error Fix ([@smk762], #3371) - Fixed missing import error
  • F-Droid Filename Compatibility ([@DeckerSU], [@ca333], #3387, #3393) - Fix F-Droid full description being empty due to Windows-incompatible filename with trailing space
  • Linux Window Close Crash ([@DeckerSU], #3339) - Workaround for crash on application exit due to Flutter implicit view removal; added delete-event handler for GTK and removed unused flutter_view pointer
  • Transaction History Timestamp Updates ([@takenagain], #3352) - Cache/state entries now update timestamps when refreshed without requiring navigation away
  • Sia Balance Sync ([@smk762], #3408) - Fixed balance address/total sync for non-streaming assets with SDK-level watchPubkeys hint pipeline and burst refresh for immediate balance updates
  • SIA Private Key Export Exclusion ([@smk762], #3404) - Excludes SIA coins from private key export until hardware support lands
  • Null Safety on Taker Swap Init - Improved null safety handling on taker swap initialization
  • Better Error Messages - Less vague error messages providing clearer feedback to users

🔒 Security & Compliance

  • 128-Character Password Support ([@CharlVS], #3141, #3149) - Increased password length limit to 128 characters with consistent validation across all auth flows
  • Pubkey Hygiene ([@CharlVS], #3144, #3251) - Purge cached pubkeys on wallet change, prefer cached pubkeys before RPC, and add post-swap delays
  • Geo-blocking Bouncer ([@CharlVS], #3150) - Privacy coin restrictions with FD monitoring and regulated build overrides
  • Legacy Wallet Sanitisation ([@CharlVS], #3207) - Sanitise names, preserve flags, and prevent duplicate imports during legacy wallet migration

💻 Platform-Specific Changes

All Platforms

  • Flutter 3.35.1 Upgrade ([@CharlVS], #3108) - Updated Flutter SDK with dependency roll and improved roll script
  • SDK Submodule Integration ([@takenagain], #3110) - SDK adopted as a git submodule with path overrides and deterministic roll script

macOS

  • Production Scheme & Signing ([@DeckerSU], #3185) - Added macOS production scheme and Developer ID Application signing support for standalone distribution
  • Universal Binary Support (SDK, #237) - macOS universal binary (Intel + Apple Silicon) support
  • Development Team Update ([@DeckerSU], #3177, [@DeckerSU] SDK #239) - Changed development team to production identifier (WDS9WYN969→8HPBYKKKQP)
  • KDF Binary Placement (SDK, #247) - Streamlined KDF binary placement and updated signing flow

Linux

  • GLib Compatibility ([@DeckerSU], #3105) - Guard G_APPLICATION_DEFAULT_FLAGS behind GLib ≥ 2.74 with fallback for older versions
  • Single-Instance Enforcement ([@CharlVS], #3063) - Enforce single-instance; focus existing window; prevent zombie processes
  • Build Script Validation ([@DeckerSU], #3106) - Added GitHub Actions workflow to validate Linux build script
  • Window Close Handling ([@DeckerSU], #3339) - Enhanced window close handling with delete-event signal handler; removed unused flutter_view references for cleaner code and stability

Windows

  • Single-Instance Enforcement ([@CharlVS], #3063) - Prevent multiple instances and zombie processes

iOS

  • FD Monitoring ([@ca333], #3259) - File descriptor monitoring for release mode
  • Health Check Integration ([@ca333], #3257) - Added KDF health check with reinitialization support
  • Xcode Configuration ([@DeckerSU], #3324) - Added FdMonitor.swift to Xcode project configuration and updated DEVELOPMENT_TEAM identifier
  • Build Artifact Cleanup ([@DeckerSU], #3058) - Removed .dgph build artifacts from iOS project
  • Ruby Installation Guide ([@takenagain], #3128) - Added Ruby installation step for iOS builds
  • Photo Library Usage Description ([@DeckerSU], #3372) - Added required photo library usage description to Info.plist for QR code import functionality to prevent App Store rejection

Android

  • F-Droid Support ([@DeckerSU], #3381, #3387, #3393) - Added F-Droid metadata directory with app descriptions, summaries, and localized text files for F-Droid app store inclusion

Web

  • WASM Support (SDK, #176) - Flutter Web WASM support with OPFS integration and unified storage implementation
  • CDN Disable ([@DeckerSU], #3055) - Add --no-web-resources-cdn to web build in build.sh

Docker & DevOps

  • DevContainer Modernization ([@CharlVS], #3114) - Switched to .docker images and Linux-only devcontainer
  • Environment Variable Passing ([@DeckerSU], #3037) - Correct env vars passing to Docker and Dart via --dart-define
  • Matomo Validation ([@DeckerSU], #3165) - Added Matomo tracking params validation in build script
  • CI Improvements ([@CharlVS], #3167, #3336) - Fix missing secrets, remove duplicate steps; fix CI issues
  • Artifact Naming ([@dragonhound], #3181) - Append short commit hash to upload-artifact filenames
  • Submodule Updates ([@DeckerSU], #3139) - Clean submodules before update to fix build errors

🔧 Technical Improvements

SDK Integration (komodo-defi-sdk v1.0.0-pre.1)

  • RPC Coverage Expansion (SDK#179, #188, #191) - Implemented missing RPCs, including trading-related endpoints and Lightning support
  • Message Signing (SDK#198, #231) - HD wallet support for message signing with derivation path; added AddressPath type and refactored to use Asset/PubkeyInfo
  • Multi-Provider Market Data (SDK#145, #215) - Support for multiple market data providers with CoinPaprika fallback option
  • Custom Token Integration (SDK#225, #190) - Custom token support in coin config manager; integrate komodo_coin_updates into komodo_coins
  • Balance & Pubkey Streaming (SDK#178, #232, #262, #269) - Add pubkey watch function similar to balance watch; comprehensive caching and streaming support
  • ETH-BASE Support (SDK#254) - Add support for ETH-BASE and derived assets
  • Asset Tagging Fixes (SDK#244) - Correct UTXO coins incorrectly tagged as Smart Chain
  • ZHTLC Fixes (SDK#227, #264) - ZHTLC activation fixes with optional sync params and sign-out cleanup
  • Binance Quote Fixes (SDK#224) - Use per-coin supported quote currency list instead of global cache
  • Market Metrics Logging (SDK#223) - Reduce market metrics log verbosity and duplication
  • Etherscan URLs (SDK#217) - Fix Etherscan URL formatting
  • Sparkline Configuration (SDK#248) - Add configurable sparkline baseline
  • Dragon Charts Migration (SDK#164) - Migrate dragon_charts_flutter to monorepo packages
  • Trezor Polling (SDK#126) - Poll Trezor connection status and sign out when disconnected
  • KDF Version Updates (SDK#218, #237, #249, #241, #247) - Roll KDF to latest releases with checksum updates
  • Runtime Fetch Libraries (SDK#280) - Use runtime fetch libraries with updated checksums
  • BASE Token Support (SDK#283) - Add support for BASE blockchain network in SDK (related to #3354)
  • SDK Execute Withdrawal Workflow ([@CharlVS], #3325) - Uses SDK's executeWithdrawal() instead of manual sendRawTransaction(), eliminating duplicate transaction signing with proper SDK abstraction and built-in progress tracking
  • KDF v2.6.0 Update - Updated SDK to use KDF v2.6.0 release with Sia RPC additions and execute/preview workflow improvements

Analytics & Monitoring

  • Persistent Event Queue ([@CharlVS], #2932) - Analytics events persist across sessions with a standardised event structure
  • CI Analytics Toggles ([@CharlVS], #2932, #3165) - Disable analytics in CI builds with Matomo validation
  • NFT Analytics Integration ([@dragonhound], #3202) - Use AnalyticsRepo to enqueue NFT analytics events
  • Updated Events ([@CharlVS], #3194) - Update completed events and remove scroll attempt tracking
  • Settings Logging ([@takenagain], #3324) - Add logging and avoid silent skipping in settings

Developer Experience

  • PR Body Template ([@CharlVS], #3207) - Add PR_BODY.md helper file for CLI editing
  • SDK Submodule Management ([@takenagain], #3110) - Deterministic SDK roll script with path overrides
  • API Commit Hash Display ([@DeckerSU], #3115) - Fix logging of apiCommitHash to output actual value instead of closure
  • Dependency Documentation ([@takenagain], #3128) - Ruby installation guide for iOS/macOS builds
  • Optional Verbose Logging ([@ca333], #3332, SDK #278) - Configurable logging levels for debugging

Code Quality

  • Null Safety Improvements ([@cursor Agent], #3050) - Fixed null safety issues in UiDropdown widget
  • Type Safety ([@ca333], #3279, #3280) - Bound checking, non-nullable type tweaks, explicit enum mapping, defensive array access guards, cast num to int
  • Error Propagation ([@smk762], #3328) - Propagate best_orders failures, avoid masking as no liquidity
  • Unused Code Cleanup ([@takenagain], #3225) - Remove unused widgets and update enum docs
  • Code Formatting ([@CharlVS], #3251) - Run dart format on pubkey cache call-sites and taker delay
  • Logging Improvements ([@takenagain], #3328) - Add logging for errors not propagated to UI layer

📚 Documentation

  • SDK Changelog Cross-Linking ([@CharlVS], #3172) - Link SDK PRs with short labels and mark SDK items in wallet changelog
  • Ruby Installation Guide ([@takenagain], #3128) - Added Ruby installation step for iOS and macOS builds
  • SDK Documentation (SDK#201) - Document project and packages for pub.dev release

⚠️ Known Issues

  • Full automated test suite remains triaged; manual QA recommended per docs/MANUAL_TESTING_DEBUGGING.md
  • Some analytics events may require additional validation on specific platforms
  • Large portfolios (>100 assets) may experience slower initial loading times during first activation

🙏 Contributors

This release includes contributions from 11 developers:

Full Changelog: 0.9.2...0.9.3


For developers building with Komodo DeFi SDK: This release includes komodo-defi-sdk v1.0.0-pre.1 with breaking changes related to streaming APIs and caching behaviour. Review the SDK changelog for migration guidance.

Checksum & VirusTotal Analysis:

Link SHA256
komodo-wallet-windows-71169e3cb.zip 3b00e52bda5d05f9dfbdab31a4e67efe445244268302eabf9130451757857f65
komodo-wallet-linux-71169e3cb.tar.gz 5b97912daceaccf8e7b42768666e780921bfadf81f2dd44b84c07139f0a8b342
komodo-wallet-web-71169e3cb.tar.gz 695aeaa9b14ffa3c80e343ca6cedc4be4042f62e60d7f1477d451b464c89236b
komodo-wallet-macos-71169e3cb.dmg 0c064a1e057b92f75c91d6d05c9bf733f8e3e200a0a42767eca20e989f8957e3

This release was signed by https://keybase.io/deckersu (GPG fingerprint: FD9A 772C 7300 F4C8 94D1 A819 FE50 4808 62E6 451C).