From e25247c24a8dd63ddb1e6e558e636d12aba762aa Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 27 Oct 2025 18:07:26 +0800 Subject: [PATCH 01/30] dont query available balance if not logged in --- lib/bloc/bridge_form/bridge_bloc.dart | 27 +++++++++++++++++++++------ lib/bloc/taker_form/taker_bloc.dart | 21 +++++++++++++++++++++ lib/blocs/maker_form_bloc.dart | 13 ++++++++----- 3 files changed, 50 insertions(+), 11 deletions(-) diff --git a/lib/bloc/bridge_form/bridge_bloc.dart b/lib/bloc/bridge_form/bridge_bloc.dart index 894dcab392..242e07797b 100644 --- a/lib/bloc/bridge_form/bridge_bloc.dart +++ b/lib/bloc/bridge_form/bridge_bloc.dart @@ -238,6 +238,16 @@ class BridgeBloc extends Bloc { ), ); + // Before login, show 0.00 instead of spinner + if (!_isLoggedIn) { + emit( + state.copyWith( + availableBalanceState: () => AvailableBalanceState.unavailable, + maxSellAmount: () => null, + ), + ); + } + _autoActivateCoin(event.coin.abbr); _subscribeMaxSellAmount(); @@ -392,22 +402,27 @@ class BridgeBloc extends Bloc { return; } - if (state.availableBalanceState == AvailableBalanceState.initial || - event.setLoadingStatus) { + // If not logged in, show 0.00 (unavailable) and skip spinner + if (!_isLoggedIn) { emit( state.copyWith( - availableBalanceState: () => AvailableBalanceState.loading, + availableBalanceState: () => AvailableBalanceState.unavailable, + maxSellAmount: () => null, ), ); + return; } - if (!_isLoggedIn) { + if (state.availableBalanceState == AvailableBalanceState.initial || + event.setLoadingStatus) { emit( state.copyWith( - availableBalanceState: () => AvailableBalanceState.unavailable, + availableBalanceState: () => AvailableBalanceState.loading, ), ); - } else { + } + + { Rational? maxSellAmount = await _dexRepository.getMaxTakerVolume( state.sellCoin!.abbr, ); diff --git a/lib/bloc/taker_form/taker_bloc.dart b/lib/bloc/taker_form/taker_bloc.dart index 727a70bde5..677fbaff21 100644 --- a/lib/bloc/taker_form/taker_bloc.dart +++ b/lib/bloc/taker_form/taker_bloc.dart @@ -316,6 +316,16 @@ class TakerBloc extends Bloc { add(TakerUpdateBestOrders(autoSelectOrderAbbr: event.autoSelectOrderAbbr)); + // Before login, show 0.00 instead of spinner + if (!_isLoggedIn) { + emit( + state.copyWith( + availableBalanceState: () => AvailableBalanceState.unavailable, + maxSellAmount: () => null, + ), + ); + } + await _autoActivateCoin(state.sellCoin?.abbr); _subscribeMaxSellAmount(); add(TakerGetMinSellAmount()); @@ -438,6 +448,17 @@ class TakerBloc extends Bloc { _maxSellAmountTimer?.cancel(); return; } + // If not logged in, show 0.00 (unavailable) and skip spinner + if (!_isLoggedIn) { + emitter( + state.copyWith( + availableBalanceState: () => AvailableBalanceState.unavailable, + maxSellAmount: () => null, + ), + ); + return; + } + if (state.availableBalanceState == AvailableBalanceState.initial || event.setLoadingStatus) { emitter( diff --git a/lib/blocs/maker_form_bloc.dart b/lib/blocs/maker_form_bloc.dart index e24bd86807..7b045bd6d3 100644 --- a/lib/blocs/maker_form_bloc.dart +++ b/lib/blocs/maker_form_bloc.dart @@ -246,7 +246,10 @@ class MakerFormBloc implements BlocBase { Future _updateMaxSellAmountListener() async { _maxSellAmountTimer?.cancel(); maxSellAmount = null; - availableBalanceState = AvailableBalanceState.loading; + // Only show loading spinner when signed in + final bool isSignedIn = await kdfSdk.auth.isSignedIn(); + availableBalanceState = + isSignedIn ? AvailableBalanceState.loading : AvailableBalanceState.unavailable; isMaxActive = false; await _updateMaxSellAmount(); @@ -258,10 +261,6 @@ class MakerFormBloc implements BlocBase { Future _updateMaxSellAmount() async { final Coin? coin = sellCoin; - if (availableBalanceState == AvailableBalanceState.initial) { - availableBalanceState = AvailableBalanceState.loading; - } - final bool isSignedIn = await kdfSdk.auth.isSignedIn(); if (!isSignedIn) { maxSellAmount = null; @@ -269,6 +268,10 @@ class MakerFormBloc implements BlocBase { return; } + if (availableBalanceState == AvailableBalanceState.initial) { + availableBalanceState = AvailableBalanceState.loading; + } + if (coin == null) { maxSellAmount = null; availableBalanceState = AvailableBalanceState.unavailable; From dd26ada378889e59a2b4854c1434c418b607e926 Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 27 Oct 2025 18:46:29 +0800 Subject: [PATCH 02/30] avoid best_orders calls unless on dex/bridge; fail gracefully & retry --- lib/bloc/dex_repository.dart | 30 ++++++++++++++++++++++++++---- lib/mm2/mm2_api/mm2_api.dart | 22 +++++++++++++++++++++- 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/lib/bloc/dex_repository.dart b/lib/bloc/dex_repository.dart index 8e1384c05c..68a0f7f11c 100644 --- a/lib/bloc/dex_repository.dart +++ b/lib/bloc/dex_repository.dart @@ -19,6 +19,8 @@ import 'package:web_dex/mm2/mm2_api/rpc/trade_preimage/trade_preimage_request.da import 'package:web_dex/mm2/mm2_api/rpc/trade_preimage/trade_preimage_response.dart'; import 'package:web_dex/model/data_from_service.dart'; import 'package:web_dex/model/swap.dart'; +import 'package:web_dex/router/state/routing_state.dart'; +import 'package:web_dex/model/main_menu_value.dart'; import 'package:web_dex/model/text_error.dart'; import 'package:web_dex/model/trade_preimage.dart'; import 'package:web_dex/services/mappers/trade_preimage_mappers.dart'; @@ -122,11 +124,25 @@ class DexRepository { } Future getBestOrders(BestOrdersRequest request) async { + // Only allow best_orders when user is on Swap (DEX) or Bridge pages + final MainMenuValue current = routingState.selectedMenu; + final bool isTradingPage = + current == MainMenuValue.dex || current == MainMenuValue.bridge; + if (!isTradingPage) { + return BestOrders(result: >{}); + } + Map? response; try { response = await _mm2Api.getBestOrders(request); - } catch (e) { - return BestOrders(error: TextError.fromString(e.toString())); + } catch (e, s) { + log( + 'best_orders request failed: $e', + trace: s, + path: 'api => getBestOrders', + isError: true, + ).ignore(); + return BestOrders(result: >{}); } final isErrorResponse = @@ -135,11 +151,17 @@ class DexRepository { (response?['result'] as Map?)?.isNotEmpty ?? false; if (isErrorResponse) { - return BestOrders(error: TextError(error: response!['error']!)); + log( + 'best_orders returned error: ${response!['error']}', + path: 'api => getBestOrders', + isError: true, + ).ignore(); + return BestOrders(result: >{}); } if (!hasResult) { - return BestOrders(error: TextError(error: 'Orders not found!')); + // Treat empty or missing result as no orders available + return BestOrders(result: >{}); } try { diff --git a/lib/mm2/mm2_api/mm2_api.dart b/lib/mm2/mm2_api/mm2_api.dart index 12f9a03dac..d30bae5394 100644 --- a/lib/mm2/mm2_api/mm2_api.dart +++ b/lib/mm2/mm2_api/mm2_api.dart @@ -236,7 +236,27 @@ class Mm2Api { Future?> getBestOrders(BestOrdersRequest request) async { try { - return await _mm2.call(request) as Map?; + final Map? response = await retry( + () async { + final Map? resp = + await _mm2.call(request) as Map?; + if (resp == null) { + throw Exception('null response'); + } + if (resp['error'] != null) { + // Throw to allow a quick retry during transient auth/session races + throw Exception(resp['error'].toString()); + } + return resp; + }, + maxAttempts: 4, + backoffStrategy: const LinearBackoff( + initialDelay: Duration(milliseconds: 500), + increment: Duration(milliseconds: 250), + maxDelay: Duration(seconds: 3), + ), + ); + return response; } catch (e, s) { log( 'Error getting best orders ${request.coin}: $e', From 65dbe07db44cfe4ce2438e708b5700580b8db4e8 Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 29 Oct 2025 21:27:59 +0800 Subject: [PATCH 03/30] earlier returns when not logged in --- lib/bloc/bridge_form/bridge_bloc.dart | 1 + lib/bloc/taker_form/taker_bloc.dart | 37 +++++++++++---------------- 2 files changed, 16 insertions(+), 22 deletions(-) diff --git a/lib/bloc/bridge_form/bridge_bloc.dart b/lib/bloc/bridge_form/bridge_bloc.dart index 242e07797b..354dee5825 100644 --- a/lib/bloc/bridge_form/bridge_bloc.dart +++ b/lib/bloc/bridge_form/bridge_bloc.dart @@ -246,6 +246,7 @@ class BridgeBloc extends Bloc { maxSellAmount: () => null, ), ); + return; } _autoActivateCoin(event.coin.abbr); diff --git a/lib/bloc/taker_form/taker_bloc.dart b/lib/bloc/taker_form/taker_bloc.dart index 7c18f8100c..d5c9ee5378 100644 --- a/lib/bloc/taker_form/taker_bloc.dart +++ b/lib/bloc/taker_form/taker_bloc.dart @@ -325,6 +325,7 @@ class TakerBloc extends Bloc { maxSellAmount: () => null, ), ); + return; } await _autoActivateCoin(state.sellCoin?.abbr); @@ -489,34 +490,26 @@ class TakerBloc extends Bloc { return; } - if (!_isLoggedIn) { + Rational? maxSellAmount = await _dexRepo.getMaxTakerVolume( + state.sellCoin!.abbr, + ); + if (maxSellAmount != null) { emitter( state.copyWith( - availableBalanceState: () => AvailableBalanceState.unavailable, + maxSellAmount: () => maxSellAmount, + availableBalanceState: () => AvailableBalanceState.success, ), ); } else { - Rational? maxSellAmount = await _dexRepo.getMaxTakerVolume( - state.sellCoin!.abbr, + maxSellAmount = await _frequentlyGetMaxTakerVolume(); + emitter( + state.copyWith( + maxSellAmount: () => maxSellAmount, + availableBalanceState: maxSellAmount == null + ? () => AvailableBalanceState.failure + : () => AvailableBalanceState.success, + ), ); - if (maxSellAmount != null) { - emitter( - state.copyWith( - maxSellAmount: () => maxSellAmount, - availableBalanceState: () => AvailableBalanceState.success, - ), - ); - } else { - maxSellAmount = await _frequentlyGetMaxTakerVolume(); - emitter( - state.copyWith( - maxSellAmount: () => maxSellAmount, - availableBalanceState: maxSellAmount == null - ? () => AvailableBalanceState.failure - : () => AvailableBalanceState.success, - ), - ); - } } } catch (e, s) { _log.severe('Failed to update max sell amount', e, s); From 39be934f8806326beb0ea5e5aff8b77437ac4a17 Mon Sep 17 00:00:00 2001 From: Francois Date: Wed, 29 Oct 2025 22:40:18 +0200 Subject: [PATCH 04/30] fix(trading-bot): use max_maker_vol for spendable balance --- .../market_maker_trade_form_bloc.dart | 80 +++++++++++-------- .../market_maker_trade_form_state.dart | 78 +++++++++--------- 2 files changed, 89 insertions(+), 69 deletions(-) diff --git a/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_bloc.dart b/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_bloc.dart index b194e0a87c..6be0b99051 100644 --- a/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_bloc.dart +++ b/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_bloc.dart @@ -3,11 +3,7 @@ import 'dart:async'; import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:formz/formz.dart'; -import 'package:get_it/get_it.dart'; -import 'package:komodo_defi_sdk/komodo_defi_sdk.dart'; -import 'package:komodo_defi_types/komodo_defi_types.dart'; import 'package:rational/rational.dart'; -import 'package:web_dex/bloc/coins_bloc/asset_coin_extension.dart'; import 'package:web_dex/bloc/coins_bloc/coins_repo.dart'; import 'package:web_dex/bloc/dex_repository.dart'; import 'package:web_dex/bloc/market_maker_bot/market_maker_order_list/trade_pair.dart'; @@ -60,8 +56,6 @@ class MarketMakerTradeFormBloc ); } - final _sdk = GetIt.I(); - /// The dex repository is used to get the trade preimage, which is used /// to pre-emptively check if a trade will be successful final DexRepository _dexRepository; @@ -75,12 +69,18 @@ class MarketMakerTradeFormBloc Emitter emit, ) async { final identicalBuyAndSellCoins = state.buyCoin.value == event.sellCoin; - final sellCoin = event.sellCoin?.id; - final sellCoinBalance = sellCoin == null - ? 0 - : (await _coinsRepo.tryGetBalanceInfo(sellCoin)).spendable.toDouble(); + final sellCoin = event.sellCoin?.abbr; + + // Fetch and cache max maker volume for the sell coin instead of overall + // spendable balance, as it includes non-swappable funds in addresses + // beyond the dedicated swap address + final maxMakerVolume = sellCoin == null + ? null + : await _dexRepository.getMaxMakerVolume(sellCoin); + + final maxMakerVolumeDouble = maxMakerVolume?.toDouble() ?? 0; final newSellAmount = CoinTradeAmountInput.dirty( - (state.maximumTradeVolume.value * sellCoinBalance).toString(), + (state.maximumTradeVolume.value * maxMakerVolumeDouble).toString(), ); // Calculate buy amount if applicable @@ -102,12 +102,13 @@ class MarketMakerTradeFormBloc ? const CoinSelectInput.dirty(null, -1) : state.buyCoin, buyAmount: newBuyAmount, + maxMakerVolume: maxMakerVolume, status: MarketMakerTradeFormStatus.success, ), ); // Activate coin before checking preimage - // TODO: consider removing this, as only enabled coins with a balance are + // TODO: consider removing this, as only enabled coins with a balance are // displayed in the sell coins dropdown await _autoActivateCoin(event.sellCoin); @@ -175,16 +176,16 @@ class MarketMakerTradeFormBloc MarketMakerTradeFormTradeVolumeChanged event, Emitter emit, ) async { - final sellCoinBalance = - await state.sellCoin.value?.getBalance(_sdk) ?? BalanceInfo.zero(); - final spendableBalance = sellCoinBalance.spendable.toDouble(); + // Use cached maxMakerVolume instead of spendable balance, as only one + // address in HD mode can be used for swaps, the "Swap address" + final maxMakerVolumeDouble = state.maxMakerVolume?.toDouble() ?? 0; final maximumTradeVolume = double.tryParse(event.maximumTradeVolume.toString()) ?? 0.0; final newSellAmount = CoinTradeAmountInput.dirty( - (maximumTradeVolume * spendableBalance).toString(), + (maximumTradeVolume * maxMakerVolumeDouble).toString(), 0, - spendableBalance, + maxMakerVolumeDouble, ); final newBuyAmount = _getBuyAmountFromSellAmount( @@ -202,7 +203,13 @@ class MarketMakerTradeFormBloc ), ); - // Check for preimage errors asynchronously + // Trade preimage requires both buy and sell coins to be set, so no use in + // calling it before both are set. _getPreimageData checks this internally, + // but emits unnecessary failure states. + if (state.buyCoin.value == null || state.sellCoin.value == null) { + return; + } + final preImage = await _getPreimageData(state); final preImageError = await _getPreImageError(preImage.error, state); final newSellAmountFromPreImage = await _getMaxSellAmountFromPreImage( @@ -228,13 +235,17 @@ class MarketMakerTradeFormBloc MarketMakerTradeFormSwapCoinsRequested event, Emitter emit, ) async { - final buyCoinBalance = - await state.buyCoin.value?.getBalance(_sdk) ?? BalanceInfo.zero(); - final spendableBalance = buyCoinBalance.spendable.toDouble(); + // Fetch max maker volume for the new sell coin (previously buy coin) + final buyCoinAbbr = state.buyCoin.value?.abbr; + final maxMakerVolume = buyCoinAbbr == null + ? null + : await _dexRepository.getMaxMakerVolume(buyCoinAbbr); + + final maxMakerVolumeDouble = maxMakerVolume?.toDouble() ?? 0; final maxVolumeValue = double.tryParse(state.maximumTradeVolume.value.toString()) ?? 0.0; - final newSellAmount = maxVolumeValue * spendableBalance; + final newSellAmount = maxVolumeValue * maxMakerVolumeDouble; emit( state.copyWith( @@ -242,6 +253,7 @@ class MarketMakerTradeFormBloc sellAmount: CoinTradeAmountInput.dirty(newSellAmount.toString()), buyCoin: CoinSelectInput.dirty(state.sellCoin.value, -1, -1), buyAmount: const CoinTradeAmountInput.dirty('0', -1), + maxMakerVolume: maxMakerVolume, ), ); @@ -310,15 +322,19 @@ class MarketMakerTradeFormBloc ); final maxTradeVolume = event.tradePair.config.maxVolume?.value ?? 0.9; final minTradeVolume = event.tradePair.config.minVolume?.value ?? 0.01; - final coinBalance = - (await sellCoin.value?.getBalance(_sdk)) ?? BalanceInfo.zero(); - final sellAmountFromVolume = - maxTradeVolume * coinBalance.spendable.toDouble(); + + // Fetch max maker volume for the sell coin + final maxMakerVolume = sellCoin.value?.abbr == null + ? null + : await _dexRepository.getMaxMakerVolume(sellCoin.value!.abbr); + + final maxMakerVolumeDouble = maxMakerVolume?.toDouble() ?? 0; + final sellAmountFromVolume = maxTradeVolume * maxMakerVolumeDouble; final sellAmount = CoinTradeAmountInput.dirty( sellAmountFromVolume.toString(), 0, - coinBalance.spendable.toDouble(), + maxMakerVolumeDouble, ); final tradeMargin = TradeMarginInput.dirty( event.tradePair.config.margin.toStringAsFixed(2), @@ -337,6 +353,7 @@ class MarketMakerTradeFormBloc buyAmount: const CoinTradeAmountInput.dirty('0'), tradeMargin: tradeMargin, updateInterval: updateInterval, + maxMakerVolume: maxMakerVolume, ), ); @@ -466,14 +483,11 @@ class MarketMakerTradeFormBloc if (sellCoin.value?.abbr != preImageError.coin) { return sellAmountValue; } - final sellId = sellCoin.value?.assetId; - final balance = sellId != null ? await _coinsRepo.balance(sellId) : null; final requiredAmount = double.tryParse(preImageError.required) ?? 0; - final sellCoinBalance = balance ?? BalanceInfo.zero(); - final newSellAmount = - sellAmountValue - - (requiredAmount - sellCoinBalance.spendable.toDouble()); + final maxMakerVolume = state.maxMakerVolume?.toDouble() ?? 0; + final newSellAmount = sellAmountValue - (requiredAmount - maxMakerVolume); + // Clamp to minimum of 0 to prevent negative sell amounts return newSellAmount.clamp(0, double.infinity); } diff --git a/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_state.dart b/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_state.dart index 1c8e632cc9..50272c1aee 100644 --- a/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_state.dart +++ b/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_state.dart @@ -13,10 +13,7 @@ enum MarketMakerTradeFormStatus { initial, loading, success, error } // Usually this would be a dedicated tab contoller/ui flow bloc, but because // there is only two stages (initial and confirmationRequired), and for the // sake of simplicity, we are using the form state to manage the form stages. -enum MarketMakerTradeFormStage { - initial, - confirmationRequired, -} +enum MarketMakerTradeFormStage { initial, confirmationRequired } /// The state of the market maker trade form. The state is a formz mixin /// which allows the form to be validated and checked for errors. @@ -34,21 +31,23 @@ class MarketMakerTradeFormState extends Equatable with FormzMixin { required this.stage, this.tradePreImageError, this.tradePreImage, + this.maxMakerVolume, }); MarketMakerTradeFormState.initial() - : sellCoin = const CoinSelectInput.pure(), - buyCoin = const CoinSelectInput.pure(), - minimumTradeVolume = const TradeVolumeInput.pure(0.1), - maximumTradeVolume = const TradeVolumeInput.pure(0.9), - sellAmount = const CoinTradeAmountInput.pure(), - buyAmount = const CoinTradeAmountInput.pure(), - tradeMargin = const TradeMarginInput.pure(), - updateInterval = const UpdateIntervalInput.pure(), - status = MarketMakerTradeFormStatus.initial, - stage = MarketMakerTradeFormStage.initial, - tradePreImageError = null, - tradePreImage = null; + : sellCoin = const CoinSelectInput.pure(), + buyCoin = const CoinSelectInput.pure(), + minimumTradeVolume = const TradeVolumeInput.pure(0.1), + maximumTradeVolume = const TradeVolumeInput.pure(0.9), + sellAmount = const CoinTradeAmountInput.pure(), + buyAmount = const CoinTradeAmountInput.pure(), + tradeMargin = const TradeMarginInput.pure(), + updateInterval = const UpdateIntervalInput.pure(), + status = MarketMakerTradeFormStatus.initial, + stage = MarketMakerTradeFormStage.initial, + tradePreImageError = null, + tradePreImage = null, + maxMakerVolume = null; /// The coin being sold in the trade pair (base coin). final CoinSelectInput sellCoin; @@ -88,6 +87,10 @@ class MarketMakerTradeFormState extends Equatable with FormzMixin { /// The preimage of the trade pair, used to calculate the trade pair fees. final TradePreimage? tradePreImage; + /// The maximum maker volume available for swaps for the sell coin. + /// This value is fetched from the DEX API and cached in the state. + final Rational? maxMakerVolume; + /// The price of the trade pair derived from the USD price of the coins. /// Price = baseCoinUsdPrice / relCoinUsdPrice. double? get priceFromUsd { @@ -163,6 +166,7 @@ class MarketMakerTradeFormState extends Equatable with FormzMixin { MarketMakerTradeFormError? preImageError, MarketMakerTradeFormStage? stage, TradePreimage? tradePreImage, + Rational? maxMakerVolume, }) { return MarketMakerTradeFormState( sellCoin: sellCoin ?? this.sellCoin, @@ -177,6 +181,7 @@ class MarketMakerTradeFormState extends Equatable with FormzMixin { tradePreImageError: preImageError, stage: stage ?? this.stage, tradePreImage: tradePreImage ?? this.tradePreImage, + maxMakerVolume: maxMakerVolume ?? this.maxMakerVolume, ); } @@ -201,13 +206,13 @@ class MarketMakerTradeFormState extends Equatable with FormzMixin { @override List> get inputs => [ - sellCoin, - buyCoin, - minimumTradeVolume, - maximumTradeVolume, - tradeMargin, - updateInterval, - ]; + sellCoin, + buyCoin, + minimumTradeVolume, + maximumTradeVolume, + tradeMargin, + updateInterval, + ]; @override bool get isValid { @@ -218,17 +223,18 @@ class MarketMakerTradeFormState extends Equatable with FormzMixin { @override List get props => [ - sellCoin, - buyCoin, - minimumTradeVolume, - maximumTradeVolume, - sellAmount, - buyAmount, - tradeMargin, - updateInterval, - tradePreImageError, - stage, - status, - tradePreImage, - ]; + sellCoin, + buyCoin, + minimumTradeVolume, + maximumTradeVolume, + sellAmount, + buyAmount, + tradeMargin, + updateInterval, + tradePreImageError, + stage, + status, + tradePreImage, + maxMakerVolume, + ]; } From 6a0b1a552a9a174427e32ed71ed73c87ac34dd01 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Wed, 29 Oct 2025 22:10:09 +0100 Subject: [PATCH 05/30] chore: add FdMonitor.swift to Xcode project configuration --- ios/Runner.xcodeproj/project.pbxproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 700b62cf9b..e7b075a33b 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -11,6 +11,7 @@ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 49484A33FCF0585DB40EBAD9 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = C74478EE63B90E2A48A7AB3C /* GoogleService-Info.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + F1D1A3B2C3D4E5F6A7B8C9D1 /* FdMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1D1A3B2C3D4E5F6A7B8C9D0 /* FdMonitor.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; @@ -45,6 +46,7 @@ 6DB340A008F6FECB3B82619D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + F1D1A3B2C3D4E5F6A7B8C9D0 /* FdMonitor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FdMonitor.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 91B045D447C7C6266906543C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; @@ -122,6 +124,7 @@ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + F1D1A3B2C3D4E5F6A7B8C9D0 /* FdMonitor.swift */, 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, ); path = Runner; @@ -303,6 +306,7 @@ buildActionMask = 2147483647; files = ( 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + F1D1A3B2C3D4E5F6A7B8C9D1 /* FdMonitor.swift in Sources */, 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; From 232ed488003567be7091610d289cbb5f1fd6998d Mon Sep 17 00:00:00 2001 From: Francois Date: Thu, 30 Oct 2025 00:23:27 +0200 Subject: [PATCH 06/30] feat(trading-bot): add loading indicator when fetching max maker vol --- .../market_maker_trade_form_bloc.dart | 139 +++++++++++++----- .../market_maker_trade_form_state.dart | 11 +- .../market_maker_bot_form_content.dart | 1 + .../sell_coin_select_dropdown.dart | 58 +++++--- 4 files changed, 148 insertions(+), 61 deletions(-) diff --git a/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_bloc.dart b/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_bloc.dart index 6be0b99051..6dd5a16ba6 100644 --- a/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_bloc.dart +++ b/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_bloc.dart @@ -3,7 +3,10 @@ import 'dart:async'; import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:formz/formz.dart'; +import 'package:get_it/get_it.dart'; +import 'package:komodo_defi_sdk/komodo_defi_sdk.dart'; import 'package:rational/rational.dart'; +import 'package:web_dex/bloc/coins_bloc/asset_coin_extension.dart'; import 'package:web_dex/bloc/coins_bloc/coins_repo.dart'; import 'package:web_dex/bloc/dex_repository.dart'; import 'package:web_dex/bloc/market_maker_bot/market_maker_order_list/trade_pair.dart'; @@ -64,19 +67,28 @@ class MarketMakerTradeFormBloc /// when they are selected in the trade form final CoinsRepo _coinsRepo; + final _sdk = GetIt.I(); + Future _onSellCoinChanged( MarketMakerTradeFormSellCoinChanged event, Emitter emit, ) async { final identicalBuyAndSellCoins = state.buyCoin.value == event.sellCoin; - final sellCoin = event.sellCoin?.abbr; - // Fetch and cache max maker volume for the sell coin instead of overall - // spendable balance, as it includes non-swappable funds in addresses - // beyond the dedicated swap address - final maxMakerVolume = sellCoin == null - ? null - : await _dexRepository.getMaxMakerVolume(sellCoin); + // Emit immediately with new coin selection for fast UI update + emit( + state.copyWith( + sellCoin: CoinSelectInput.dirty(event.sellCoin), + buyCoin: identicalBuyAndSellCoins + ? const CoinSelectInput.dirty(null, -1) + : state.buyCoin, + status: MarketMakerTradeFormStatus.success, + isLoadingMaxMakerVolume: true, + ), + ); + + // Fetch max maker volume with fallback to swap address balance + final maxMakerVolume = await _getMaxMakerVolumeWithFallback(event.sellCoin); final maxMakerVolumeDouble = maxMakerVolume?.toDouble() ?? 0; final newSellAmount = CoinTradeAmountInput.dirty( @@ -93,17 +105,13 @@ class MarketMakerTradeFormBloc newBuyAmount = CoinTradeAmountInput.dirty(buyAmountValue.toString()); } - // Emit immediately with new coin selection for fast UI update + // Emit with calculated amounts after fetching max maker volume emit( state.copyWith( - sellCoin: CoinSelectInput.dirty(event.sellCoin), sellAmount: newSellAmount, - buyCoin: identicalBuyAndSellCoins - ? const CoinSelectInput.dirty(null, -1) - : state.buyCoin, buyAmount: newBuyAmount, maxMakerVolume: maxMakerVolume, - status: MarketMakerTradeFormStatus.success, + isLoadingMaxMakerVolume: false, ), ); @@ -235,11 +243,20 @@ class MarketMakerTradeFormBloc MarketMakerTradeFormSwapCoinsRequested event, Emitter emit, ) async { - // Fetch max maker volume for the new sell coin (previously buy coin) - final buyCoinAbbr = state.buyCoin.value?.abbr; - final maxMakerVolume = buyCoinAbbr == null - ? null - : await _dexRepository.getMaxMakerVolume(buyCoinAbbr); + // Emit immediately with swapped coins for fast UI update + emit( + state.copyWith( + sellCoin: CoinSelectInput.dirty(state.buyCoin.value), + buyCoin: CoinSelectInput.dirty(state.sellCoin.value, -1, -1), + buyAmount: const CoinTradeAmountInput.dirty('0', -1), + isLoadingMaxMakerVolume: true, + ), + ); + + // Fetch max maker volume with fallback to swap address balance + final maxMakerVolume = await _getMaxMakerVolumeWithFallback( + state.buyCoin.value, + ); final maxMakerVolumeDouble = maxMakerVolume?.toDouble() ?? 0; final maxVolumeValue = @@ -247,28 +264,24 @@ class MarketMakerTradeFormBloc final newSellAmount = maxVolumeValue * maxMakerVolumeDouble; + // Calculate buy amount if applicable + final newBuyAmount = state.buyCoin.value != null + ? _getBuyAmountFromSellAmount( + newSellAmount.toString(), + state.priceFromUsdWithMargin, + ) + : 0.0; + + // Emit with calculated amounts after fetching max maker volume + // Always clear loading flag, even on error emit( state.copyWith( - sellCoin: CoinSelectInput.dirty(state.buyCoin.value), sellAmount: CoinTradeAmountInput.dirty(newSellAmount.toString()), - buyCoin: CoinSelectInput.dirty(state.sellCoin.value, -1, -1), - buyAmount: const CoinTradeAmountInput.dirty('0', -1), + buyAmount: CoinTradeAmountInput.dirty(newBuyAmount.toString()), maxMakerVolume: maxMakerVolume, + isLoadingMaxMakerVolume: false, ), ); - - if (state.buyCoin.value != null) { - final newBuyAmount = _getBuyAmountFromSellAmount( - newSellAmount.toString(), - state.priceFromUsdWithMargin, - ); - - emit( - state.copyWith( - buyAmount: CoinTradeAmountInput.dirty(newBuyAmount.toString()), - ), - ); - } } Future _onTradeMarginChanged( @@ -323,10 +336,8 @@ class MarketMakerTradeFormBloc final maxTradeVolume = event.tradePair.config.maxVolume?.value ?? 0.9; final minTradeVolume = event.tradePair.config.minVolume?.value ?? 0.01; - // Fetch max maker volume for the sell coin - final maxMakerVolume = sellCoin.value?.abbr == null - ? null - : await _dexRepository.getMaxMakerVolume(sellCoin.value!.abbr); + // Fetch max maker volume with fallback to swap address balance + final maxMakerVolume = await _getMaxMakerVolumeWithFallback(sellCoin.value); final maxMakerVolumeDouble = maxMakerVolume?.toDouble() ?? 0; final sellAmountFromVolume = maxTradeVolume * maxMakerVolumeDouble; @@ -573,4 +584,56 @@ class MarketMakerTradeFormBloc } } } + + /// Fetches the max maker volume for a coin with automatic fallback. + /// + /// First attempts to fetch from the DEX API via [getMaxMakerVolume]. + /// If that fails or returns null, falls back to [_getSwapAddressBalance]. + /// + /// Returns null if the coin is null or all attempts fail. + Future _getMaxMakerVolumeWithFallback(Coin? coin) async { + if (coin == null) { + return null; + } + + try { + // Fetch max maker volume from DEX API + final maxMakerVolume = await _dexRepository.getMaxMakerVolume(coin.abbr); + + // Fallback to swap address balance if RPC fails + if (maxMakerVolume == null) { + return await _getSwapAddressBalance(coin); + } + + return maxMakerVolume; + } catch (e) { + // Fallback to swap address balance on error + return await _getSwapAddressBalance(coin); + } + } + + /// Get the swap address balance as a fallback when getMaxMakerVolume fails. + /// This method retrieves the spendable balance from the address marked as + /// active for swaps (derivationPath ending with '/0' or null). + Future _getSwapAddressBalance(Coin coin) async { + try { + final asset = _sdk.getSdkAsset(coin.abbr); + final pubkeys = _sdk.pubkeys.lastKnown(asset.id); + + if (pubkeys == null) { + return null; + } + + // Find the swap address (isActiveForSwap = true) + final swapAddress = pubkeys.keys.firstWhere( + (pubkey) => pubkey.isActiveForSwap, + orElse: () => pubkeys.keys.first, + ); + + final spendable = swapAddress.balance.spendable; + return Rational.parse(spendable.toString()); + } catch (e) { + return null; + } + } } diff --git a/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_state.dart b/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_state.dart index 50272c1aee..f0e1713cae 100644 --- a/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_state.dart +++ b/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_state.dart @@ -32,6 +32,7 @@ class MarketMakerTradeFormState extends Equatable with FormzMixin { this.tradePreImageError, this.tradePreImage, this.maxMakerVolume, + this.isLoadingMaxMakerVolume = false, }); MarketMakerTradeFormState.initial() @@ -47,7 +48,8 @@ class MarketMakerTradeFormState extends Equatable with FormzMixin { stage = MarketMakerTradeFormStage.initial, tradePreImageError = null, tradePreImage = null, - maxMakerVolume = null; + maxMakerVolume = null, + isLoadingMaxMakerVolume = false; /// The coin being sold in the trade pair (base coin). final CoinSelectInput sellCoin; @@ -91,6 +93,9 @@ class MarketMakerTradeFormState extends Equatable with FormzMixin { /// This value is fetched from the DEX API and cached in the state. final Rational? maxMakerVolume; + /// Indicates whether the max maker volume is currently being fetched. + final bool isLoadingMaxMakerVolume; + /// The price of the trade pair derived from the USD price of the coins. /// Price = baseCoinUsdPrice / relCoinUsdPrice. double? get priceFromUsd { @@ -167,6 +172,7 @@ class MarketMakerTradeFormState extends Equatable with FormzMixin { MarketMakerTradeFormStage? stage, TradePreimage? tradePreImage, Rational? maxMakerVolume, + bool? isLoadingMaxMakerVolume, }) { return MarketMakerTradeFormState( sellCoin: sellCoin ?? this.sellCoin, @@ -182,6 +188,8 @@ class MarketMakerTradeFormState extends Equatable with FormzMixin { stage: stage ?? this.stage, tradePreImage: tradePreImage ?? this.tradePreImage, maxMakerVolume: maxMakerVolume ?? this.maxMakerVolume, + isLoadingMaxMakerVolume: + isLoadingMaxMakerVolume ?? this.isLoadingMaxMakerVolume, ); } @@ -236,5 +244,6 @@ class MarketMakerTradeFormState extends Equatable with FormzMixin { status, tradePreImage, maxMakerVolume, + isLoadingMaxMakerVolume, ]; } diff --git a/lib/views/market_maker_bot/market_maker_bot_form_content.dart b/lib/views/market_maker_bot/market_maker_bot_form_content.dart index d3abe49c99..509d65e748 100644 --- a/lib/views/market_maker_bot/market_maker_bot_form_content.dart +++ b/lib/views/market_maker_bot/market_maker_bot_form_content.dart @@ -82,6 +82,7 @@ class _MarketMakerBotFormContentState extends State { maximumTradeVolume: state.maximumTradeVolume, onItemSelected: _onSelectSellCoin, onTradeVolumeChanged: _onVolumeRangeChanged, + showSellAmountSpinner: state.isLoadingMaxMakerVolume, ), bottomWidget: BuyCoinSelectDropdown( key: const Key('$keyPrefix-buy-select'), diff --git a/lib/views/market_maker_bot/sell_coin_select_dropdown.dart b/lib/views/market_maker_bot/sell_coin_select_dropdown.dart index 6a631f7b3b..7a892c8b56 100644 --- a/lib/views/market_maker_bot/sell_coin_select_dropdown.dart +++ b/lib/views/market_maker_bot/sell_coin_select_dropdown.dart @@ -23,6 +23,7 @@ class SellCoinSelectDropdown extends StatelessWidget { this.onTradeVolumeChanged, super.key, this.padding = EdgeInsets.zero, + this.showSellAmountSpinner = false, }); final CoinSelectInput sellCoin; final CoinTradeAmountInput sellAmount; @@ -32,6 +33,7 @@ class SellCoinSelectDropdown extends StatelessWidget { final EdgeInsets padding; final Function(Coin?)? onItemSelected; final Function(RangeValues)? onTradeVolumeChanged; + final bool showSellAmountSpinner; @override Widget build(BuildContext context) { @@ -44,30 +46,42 @@ class SellCoinSelectDropdown extends StatelessWidget { coins: coins, onItemSelected: onItemSelected, useFrontPlate: false, - trailing: Column( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - CoinTradeAmountFormField( - coin: sellCoin.value, - initialValue: sellAmount.value, - isEnabled: false, - errorText: sellCoin.displayError?.text(sellCoin.value), - ), - Padding( - padding: const EdgeInsets.only(right: 18), - child: Text( - '* ${LocaleKeys.mmBotFirstTradeEstimate.tr()}', - style: TextStyle( - color: dexPageColors.inactiveText, - fontSize: 12, - fontWeight: FontWeight.w400, + trailing: showSellAmountSpinner + ? const Align( + alignment: Alignment.centerRight, + child: Padding( + padding: EdgeInsets.only(right: 18), + child: SizedBox( + width: 20, + height: 20, + child: CircularProgressIndicator(strokeWidth: 2), + ), ), - textAlign: TextAlign.end, - overflow: TextOverflow.ellipsis, + ) + : Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + CoinTradeAmountFormField( + coin: sellCoin.value, + initialValue: sellAmount.value, + isEnabled: false, + errorText: sellCoin.displayError?.text(sellCoin.value), + ), + Padding( + padding: const EdgeInsets.only(right: 18), + child: Text( + '* ${LocaleKeys.mmBotFirstTradeEstimate.tr()}', + style: TextStyle( + color: dexPageColors.inactiveText, + fontSize: 12, + fontWeight: FontWeight.w400, + ), + textAlign: TextAlign.end, + overflow: TextOverflow.ellipsis, + ), + ), + ], ), - ), - ], - ), ), PercentageRangeSlider( title: AutoScrollText( From b2b5ed0d85ca6c96d5ab85d25e175107f56d4a51 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Thu, 30 Oct 2025 01:06:50 +0100 Subject: [PATCH 07/30] chore: update DEVELOPMENT_TEAM identifier in Xcode project configuration --- ios/Runner.xcodeproj/project.pbxproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index e7b075a33b..a195372a76 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -391,7 +391,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = G3VBBBMD8T; + DEVELOPMENT_TEAM = 8HPBYKKKQP; ENABLE_BITCODE = NO; EXCLUDED_ARCHS = "$(inherited)"; FRAMEWORK_SEARCH_PATHS = ( @@ -534,7 +534,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = G3VBBBMD8T; + DEVELOPMENT_TEAM = 8HPBYKKKQP; ENABLE_BITCODE = NO; EXCLUDED_ARCHS = "$(inherited)"; FRAMEWORK_SEARCH_PATHS = ( @@ -569,7 +569,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = G3VBBBMD8T; + DEVELOPMENT_TEAM = 8HPBYKKKQP; ENABLE_BITCODE = NO; EXCLUDED_ARCHS = "$(inherited)"; FRAMEWORK_SEARCH_PATHS = ( From b075fa8445095e12d49a3f7f449b3cc90b065f8d Mon Sep 17 00:00:00 2001 From: Francois Date: Thu, 30 Oct 2025 03:21:29 +0200 Subject: [PATCH 08/30] fix(trading-bot): buy coin fiat value delay original widget was made as a text input field, delaying updates to post frame updates to avoid state update conflicts. it is currently being used as a label, so no such complications are necessary. CoinTradeAmountFormField has no references and can be removed --- .../buy_coin_select_dropdown.dart | 7 +- .../coin_trade_amount_label.dart | 119 ++++++++++++++++++ .../sell_coin_select_dropdown.dart | 7 +- 3 files changed, 125 insertions(+), 8 deletions(-) create mode 100644 lib/views/market_maker_bot/coin_trade_amount_label.dart diff --git a/lib/views/market_maker_bot/buy_coin_select_dropdown.dart b/lib/views/market_maker_bot/buy_coin_select_dropdown.dart index b02554f7bd..26919d3267 100644 --- a/lib/views/market_maker_bot/buy_coin_select_dropdown.dart +++ b/lib/views/market_maker_bot/buy_coin_select_dropdown.dart @@ -6,7 +6,7 @@ import 'package:web_dex/model/coin.dart'; import 'package:web_dex/model/forms/coin_select_input.dart'; import 'package:web_dex/model/forms/coin_trade_amount_input.dart'; import 'package:web_dex/views/market_maker_bot/coin_selection_and_amount_input.dart'; -import 'package:web_dex/views/market_maker_bot/coin_trade_amount_form_field.dart'; +import 'package:web_dex/views/market_maker_bot/coin_trade_amount_label.dart' show CoinTradeAmountLabel; import 'package:web_dex/views/market_maker_bot/market_maker_form_error_message_extensions.dart'; class BuyCoinSelectDropdown extends StatelessWidget { @@ -32,10 +32,9 @@ class BuyCoinSelectDropdown extends StatelessWidget { trailing: Column( crossAxisAlignment: CrossAxisAlignment.end, children: [ - CoinTradeAmountFormField( + CoinTradeAmountLabel( coin: buyCoin.value, - initialValue: buyAmount.value, - isEnabled: false, + value: buyAmount.valueAsRational, errorText: buyCoin.displayError?.text(buyCoin.value), ), Padding( diff --git a/lib/views/market_maker_bot/coin_trade_amount_label.dart b/lib/views/market_maker_bot/coin_trade_amount_label.dart new file mode 100644 index 0000000000..c159939db4 --- /dev/null +++ b/lib/views/market_maker_bot/coin_trade_amount_label.dart @@ -0,0 +1,119 @@ +import 'package:app_theme/app_theme.dart'; +import 'package:flutter/material.dart'; +import 'package:komodo_ui_kit/komodo_ui_kit.dart'; +import 'package:rational/rational.dart'; +import 'package:web_dex/model/coin.dart'; +import 'package:web_dex/views/dex/dex_helpers.dart'; + +class CoinTradeAmountLabel extends StatelessWidget { + const CoinTradeAmountLabel({ + required this.value, + super.key, + this.coin, + this.errorText, + }); + + final Coin? coin; + final Rational value; + final String? errorText; + + @override + Widget build(BuildContext context) { + return ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 250), + child: Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Padding( + padding: const EdgeInsets.only(right: 18, top: 1), + child: TradeAmountDisplayText( + key: const Key('maker-amount-display'), + value: value, + coin: coin, + ), + ), + Padding( + padding: const EdgeInsets.only(right: 18), + child: TradeAmountFiatPriceText( + key: const Key('maker-amount-fiat'), + coin: coin, + amount: value, + ), + ), + if (errorText != null) + Padding( + padding: const EdgeInsets.only(right: 18), + child: AutoScrollText( + text: errorText!, + style: Theme.of(context).textTheme.labelSmall?.copyWith( + color: Theme.of(context).colorScheme.error, + ), + ), + ) + else + const SizedBox(height: 16), + ], + ), + ); + } +} + +class TradeAmountFiatPriceText extends StatelessWidget { + const TradeAmountFiatPriceText({super.key, this.coin, this.amount}); + + final Rational? amount; + final Coin? coin; + + @override + Widget build(BuildContext context) { + return Text( + coin == null + ? r'≈$0' + : getFormattedFiatAmount( + context, + coin!.abbr, + amount ?? Rational.zero, + ), + style: Theme.of(context).textTheme.bodySmall, + overflow: TextOverflow.ellipsis, + ); + } +} + +class TradeAmountDisplayText extends StatelessWidget { + const TradeAmountDisplayText({super.key, required this.value, this.coin}); + + final Rational value; + final Coin? coin; + + @override + Widget build(BuildContext context) { + final formattedValue = value.toDouble().toStringAsFixed( + coin?.decimals ?? 8, + ); + + return Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Flexible( + child: Text( + formattedValue, + textAlign: TextAlign.end, + style: Theme.of(context).textTheme.titleSmall?.copyWith( + fontSize: 16, + fontWeight: FontWeight.w500, + color: dexPageColors.activeText, + ), + overflow: TextOverflow.ellipsis, + ), + ), + Text( + '*', + style: Theme.of(context).textTheme.titleSmall?.copyWith( + fontFeatures: [const FontFeature.superscripts()], + ), + ), + ], + ); + } +} diff --git a/lib/views/market_maker_bot/sell_coin_select_dropdown.dart b/lib/views/market_maker_bot/sell_coin_select_dropdown.dart index 7a892c8b56..b8f5bdcb80 100644 --- a/lib/views/market_maker_bot/sell_coin_select_dropdown.dart +++ b/lib/views/market_maker_bot/sell_coin_select_dropdown.dart @@ -9,7 +9,7 @@ import 'package:web_dex/model/forms/coin_trade_amount_input.dart'; import 'package:web_dex/model/forms/trade_volume_input.dart'; import 'package:web_dex/views/dex/common/front_plate.dart'; import 'package:web_dex/views/market_maker_bot/coin_selection_and_amount_input.dart'; -import 'package:web_dex/views/market_maker_bot/coin_trade_amount_form_field.dart'; +import 'package:web_dex/views/market_maker_bot/coin_trade_amount_label.dart'; import 'package:web_dex/views/market_maker_bot/market_maker_form_error_message_extensions.dart'; class SellCoinSelectDropdown extends StatelessWidget { @@ -61,10 +61,9 @@ class SellCoinSelectDropdown extends StatelessWidget { : Column( crossAxisAlignment: CrossAxisAlignment.end, children: [ - CoinTradeAmountFormField( + CoinTradeAmountLabel( coin: sellCoin.value, - initialValue: sellAmount.value, - isEnabled: false, + value: sellAmount.valueAsRational, errorText: sellCoin.displayError?.text(sellCoin.value), ), Padding( From ab73523d279a88e81fb92bf25f1226324a0ee185 Mon Sep 17 00:00:00 2001 From: Francois Date: Thu, 30 Oct 2025 03:50:25 +0200 Subject: [PATCH 09/30] refactor: use conventional formatAmt --- lib/views/market_maker_bot/coin_trade_amount_label.dart | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/views/market_maker_bot/coin_trade_amount_label.dart b/lib/views/market_maker_bot/coin_trade_amount_label.dart index c159939db4..cd7c769e9b 100644 --- a/lib/views/market_maker_bot/coin_trade_amount_label.dart +++ b/lib/views/market_maker_bot/coin_trade_amount_label.dart @@ -3,7 +3,8 @@ import 'package:flutter/material.dart'; import 'package:komodo_ui_kit/komodo_ui_kit.dart'; import 'package:rational/rational.dart'; import 'package:web_dex/model/coin.dart'; -import 'package:web_dex/views/dex/dex_helpers.dart'; +import 'package:web_dex/shared/utils/formatters.dart' show formatAmt; +import 'package:web_dex/views/dex/dex_helpers.dart' show getFormattedFiatAmount; class CoinTradeAmountLabel extends StatelessWidget { const CoinTradeAmountLabel({ @@ -88,9 +89,7 @@ class TradeAmountDisplayText extends StatelessWidget { @override Widget build(BuildContext context) { - final formattedValue = value.toDouble().toStringAsFixed( - coin?.decimals ?? 8, - ); + final formattedValue = formatAmt(value.toDouble()); return Row( mainAxisAlignment: MainAxisAlignment.end, From e8d4260a59e318303c7dbdbd4c3bd7b73469c2d6 Mon Sep 17 00:00:00 2001 From: smk762 Date: Thu, 30 Oct 2025 13:57:41 +0800 Subject: [PATCH 10/30] ensure `available to swap` is populated post-login without interaction --- .../dex/simple/form/taker/taker_form.dart | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/lib/views/dex/simple/form/taker/taker_form.dart b/lib/views/dex/simple/form/taker/taker_form.dart index 9beb06e259..44c50f88b0 100644 --- a/lib/views/dex/simple/form/taker/taker_form.dart +++ b/lib/views/dex/simple/form/taker/taker_form.dart @@ -29,6 +29,16 @@ class _TakerFormState extends State { takerBloc.add(TakerSetDefaults()); takerBloc.add(TakerSetWalletIsReady(authBlocState.isSignedIn)); routingState.dexState.addListener(_consumeRouteParameters); + // If entering the swap page while already authenticated, ensure the + // available balance initializes without waiting for further user action. + if (authBlocState.isSignedIn) { + WidgetsBinding.instance.addPostFrameCallback((_) { + final currentSellCoin = takerBloc.state.sellCoin; + if (currentSellCoin != null) { + takerBloc.add(TakerSetSellCoin(currentSellCoin)); + } + }); + } super.initState(); } @@ -87,6 +97,21 @@ class _TakerFormState extends State { listener: (context, state) { final takerBloc = context.read(); takerBloc.add(TakerSetWalletIsReady(state.isSignedIn)); + + // When the user becomes authenticated while on the swap page, + // refresh the available balance/max sell amount immediately so it + // doesn't remain at 0.00 until the user re-selects the sell coin. + if (state.isSignedIn) { + final currentSellCoin = takerBloc.state.sellCoin; + if (currentSellCoin != null) { + // Re-dispatching the same sell coin sets up periodic polling + // and triggers max-sell/min-sell refresh without user action. + takerBloc.add(TakerSetSellCoin(currentSellCoin)); + } else { + // Ensure defaults are set so the form initializes properly. + takerBloc.add(TakerSetDefaults()); + } + } }, child: const TakerFormLayout(), ); From 15b6e75ce5cfbf0fd276dcb6597625b37cb86154 Mon Sep 17 00:00:00 2001 From: Francois Date: Thu, 30 Oct 2025 11:03:01 +0200 Subject: [PATCH 11/30] refactor: add logging for errors not propagated to UI layer --- .../market_maker_trade_form_bloc.dart | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_bloc.dart b/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_bloc.dart index 6dd5a16ba6..03307c9484 100644 --- a/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_bloc.dart +++ b/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_bloc.dart @@ -5,6 +5,7 @@ import 'package:equatable/equatable.dart'; import 'package:formz/formz.dart'; import 'package:get_it/get_it.dart'; import 'package:komodo_defi_sdk/komodo_defi_sdk.dart'; +import 'package:logging/logging.dart'; import 'package:rational/rational.dart'; import 'package:web_dex/bloc/coins_bloc/asset_coin_extension.dart'; import 'package:web_dex/bloc/coins_bloc/coins_repo.dart'; @@ -43,6 +44,7 @@ class MarketMakerTradeFormBloc required CoinsRepo coinsRepo, }) : _dexRepository = dexRepo, _coinsRepo = coinsRepo, + _log = Logger('MarketMakerTradeFormBloc'), super(MarketMakerTradeFormState.initial()) { on(_onSellCoinChanged); on(_onBuyCoinChanged); @@ -67,6 +69,8 @@ class MarketMakerTradeFormBloc /// when they are selected in the trade form final CoinsRepo _coinsRepo; + final Logger _log; + final _sdk = GetIt.I(); Future _onSellCoinChanged( @@ -556,7 +560,12 @@ class MarketMakerTradeFormBloc ); return preimageData; - } catch (e) { + } catch (e, s) { + _log.shout( + 'Failed to get preimage data for ${state.sellCoin.value?.abbr}/${state.buyCoin.value?.abbr}', + e, + s, + ); return DataFromService( error: TradePreimagePriceTooLowError( price: '0', @@ -606,7 +615,12 @@ class MarketMakerTradeFormBloc } return maxMakerVolume; - } catch (e) { + } catch (e, s) { + _log.warning( + 'Failed to get max maker volume for ${coin.abbr}, falling back to swap address balance', + e, + s, + ); // Fallback to swap address balance on error return await _getSwapAddressBalance(coin); } @@ -632,7 +646,8 @@ class MarketMakerTradeFormBloc final spendable = swapAddress.balance.spendable; return Rational.parse(spendable.toString()); - } catch (e) { + } catch (e, s) { + _log.shout('Failed to get swap address balance for ${coin.abbr}', e, s); return null; } } From 0213e29db040508c3386e9a2ed4464695606916b Mon Sep 17 00:00:00 2001 From: Francois Date: Thu, 30 Oct 2025 12:21:28 +0200 Subject: [PATCH 12/30] fix(trading-bot): add guard against swap button spamming --- .../market_maker_trade_form_bloc.dart | 17 +++++++++++------ .../sell_coin_select_dropdown.dart | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_bloc.dart b/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_bloc.dart index 03307c9484..32d465ae9d 100644 --- a/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_bloc.dart +++ b/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_bloc.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'package:bloc/bloc.dart'; +import 'package:bloc_concurrency/bloc_concurrency.dart'; import 'package:equatable/equatable.dart'; import 'package:formz/formz.dart'; import 'package:get_it/get_it.dart'; @@ -49,7 +50,11 @@ class MarketMakerTradeFormBloc on(_onSellCoinChanged); on(_onBuyCoinChanged); on(_onTradeVolumeChanged); - on(_onSwapCoinsRequested); + // Prevent/reduce spamming by only processing one event at a time + on( + _onSwapCoinsRequested, + transformer: droppable(), + ); on(_onTradeMarginChanged); on(_onUpdateIntervalChanged); on(_onClearForm); @@ -248,19 +253,19 @@ class MarketMakerTradeFormBloc Emitter emit, ) async { // Emit immediately with swapped coins for fast UI update + final sellCoin = state.buyCoin.value; + final buyCoin = state.sellCoin.value; emit( state.copyWith( - sellCoin: CoinSelectInput.dirty(state.buyCoin.value), - buyCoin: CoinSelectInput.dirty(state.sellCoin.value, -1, -1), + sellCoin: CoinSelectInput.dirty(sellCoin), + buyCoin: CoinSelectInput.dirty(buyCoin, -1, -1), buyAmount: const CoinTradeAmountInput.dirty('0', -1), isLoadingMaxMakerVolume: true, ), ); // Fetch max maker volume with fallback to swap address balance - final maxMakerVolume = await _getMaxMakerVolumeWithFallback( - state.buyCoin.value, - ); + final maxMakerVolume = await _getMaxMakerVolumeWithFallback(sellCoin); final maxMakerVolumeDouble = maxMakerVolume?.toDouble() ?? 0; final maxVolumeValue = diff --git a/lib/views/market_maker_bot/sell_coin_select_dropdown.dart b/lib/views/market_maker_bot/sell_coin_select_dropdown.dart index b8f5bdcb80..3a29861872 100644 --- a/lib/views/market_maker_bot/sell_coin_select_dropdown.dart +++ b/lib/views/market_maker_bot/sell_coin_select_dropdown.dart @@ -50,7 +50,7 @@ class SellCoinSelectDropdown extends StatelessWidget { ? const Align( alignment: Alignment.centerRight, child: Padding( - padding: EdgeInsets.only(right: 18), + padding: EdgeInsets.only(right: 18, top: 27, bottom: 27), child: SizedBox( width: 20, height: 20, From 896d02253c617eb76b0b98849250aa4a50ea0e98 Mon Sep 17 00:00:00 2001 From: smk762 Date: Fri, 31 Oct 2025 12:51:47 +0800 Subject: [PATCH 13/30] isolate version settings in shared_preferences.json for backwards compatibility --- lib/bloc/settings/settings_repository.dart | 28 ++++++-- .../settings/market_maker_bot_settings.dart | 69 +++++++++++++++---- lib/model/stored_settings.dart | 13 ++++ lib/shared/constants.dart | 2 + 4 files changed, 94 insertions(+), 18 deletions(-) diff --git a/lib/bloc/settings/settings_repository.dart b/lib/bloc/settings/settings_repository.dart index 104983d401..2dd226a439 100644 --- a/lib/bloc/settings/settings_repository.dart +++ b/lib/bloc/settings/settings_repository.dart @@ -18,14 +18,32 @@ class SettingsRepository { } Future updateSettings(StoredSettings settings) async { - final String encodedData = jsonEncode(settings.toJson()); - await _storage.write(storedSettingsKey, encodedData); + // Write the new versioned key for current app reads + final String v2Data = jsonEncode(settings.toJson()); + await _storage.write(storedSettingsKeyV2, v2Data); + + // Also write a backward-compatible legacy shape so older app versions + // can continue to read their expected key without crashing. + final String legacyData = jsonEncode(settings.toLegacyJson()); + await _storage.write(storedSettingsKey, legacyData); } static Future loadStoredSettings() async { final storage = getStorage(); - final dynamic storedAppPrefs = await storage.read(storedSettingsKey); - - return StoredSettings.fromJson(storedAppPrefs); + try { + // Prefer V2 settings if present + final dynamic v2 = await storage.read(storedSettingsKeyV2); + if (v2 is Map) { + return StoredSettings.fromJson(v2); + } + + // Fallback to legacy key + final dynamic legacy = await storage.read(storedSettingsKey); + return StoredSettings.fromJson( + legacy is Map ? legacy : null, + ); + } catch (_) { + return StoredSettings.initial(); + } } } diff --git a/lib/model/settings/market_maker_bot_settings.dart b/lib/model/settings/market_maker_bot_settings.dart index 8aee2a1284..72699e529f 100644 --- a/lib/model/settings/market_maker_bot_settings.dart +++ b/lib/model/settings/market_maker_bot_settings.dart @@ -28,21 +28,48 @@ class MarketMakerBotSettings extends Equatable { /// Returns the initial settings if the JSON map is null or does not contain /// the required `is_market_maker_bot_enabled` key. factory MarketMakerBotSettings.fromJson(Map? json) { - if (json == null || !json.containsKey('is_market_maker_bot_enabled')) { - return MarketMakerBotSettings.initial(); - } + if (json == null) return MarketMakerBotSettings.initial(); + + final bool? enabled = json['is_market_maker_bot_enabled'] as bool?; + final int refresh = (json['bot_refresh_rate'] is int) + ? json['bot_refresh_rate'] as int + : int.tryParse('${json['bot_refresh_rate']}') ?? 60; + + final dynamic configsRaw = json['trade_coin_pair_configs']; + final List configs = (configsRaw is List) + ? configsRaw + .whereType>() + .map((e) { + try { + // Skip invalid entries that are missing required fields + if (!e.containsKey('name') || + !e.containsKey('base') || + !e.containsKey('rel') || + !e.containsKey('spread') || + !e.containsKey('enable')) { + return null; + } + return TradeCoinPairConfig.fromJson(e); + } catch (_) { + return null; + } + }) + .whereType() + .toList() + : const []; + + final MessageServiceConfig? messageCfg = (json['message_service_config'] + is Map) + ? MessageServiceConfig.fromJson( + json['message_service_config'] as Map, + ) + : null; return MarketMakerBotSettings( - isMMBotEnabled: json['is_market_maker_bot_enabled'] as bool, - botRefreshRate: json['bot_refresh_rate'] as int, - tradeCoinPairConfigs: (json['trade_coin_pair_configs'] as List) - .map((e) => TradeCoinPairConfig.fromJson(e as Map)) - .toList(), - messageServiceConfig: json['message_service_config'] == null - ? null - : MessageServiceConfig.fromJson( - json['message_service_config'] as Map, - ), + isMMBotEnabled: enabled ?? false, + botRefreshRate: refresh, + tradeCoinPairConfigs: configs, + messageServiceConfig: messageCfg, ); } @@ -72,6 +99,22 @@ class MarketMakerBotSettings extends Equatable { }; } + // Legacy representation kept for backward-compatible writes + Map toLegacyJson() { + return { + 'is_market_maker_bot_enabled': isMMBotEnabled, + // Old builds included a price_url; provide the previous default + 'price_url': + 'https://defi-stats.komodo.earth/api/v3/prices/tickers_v2?expire_at=60', + 'bot_refresh_rate': botRefreshRate, + 'trade_coin_pair_configs': tradeCoinPairConfigs + .map((e) => e.toJson()) + .toList(), + if (messageServiceConfig != null) + 'message_service_config': messageServiceConfig?.toJson(), + }; + } + MarketMakerBotSettings copyWith({ bool? isMMBotEnabled, int? botRefreshRate, diff --git a/lib/model/stored_settings.dart b/lib/model/stored_settings.dart index d30f5a4db2..a0647b72bf 100644 --- a/lib/model/stored_settings.dart +++ b/lib/model/stored_settings.dart @@ -57,6 +57,19 @@ class StoredSettings { }; } + // Legacy representation kept for backward-compatible writes to + // shared_preferences.json so older app versions can still parse it. + Map toLegacyJson() { + return { + 'themeModeIndex': mode.index, + storedAnalyticsSettingsKey: analytics.toJson(), + storedMarketMakerSettingsKey: marketMakerBotSettings.toLegacyJson(), + 'testCoinsEnabled': testCoinsEnabled, + 'weakPasswordsAllowed': weakPasswordsAllowed, + 'hideZeroBalanceAssets': hideZeroBalanceAssets, + }; + } + StoredSettings copyWith({ ThemeMode? mode, AnalyticsSettings? analytics, diff --git a/lib/shared/constants.dart b/lib/shared/constants.dart index a7c7235f4e..7c349885c3 100644 --- a/lib/shared/constants.dart +++ b/lib/shared/constants.dart @@ -14,6 +14,8 @@ const Duration kActivationPollingInterval = Duration( // stored app preferences const String storedSettingsKey = '_atomicDexStoredSettings'; +// New settings key to avoid breaking older versions reading the legacy key +const String storedSettingsKeyV2 = 'komodo_wallet_settings_v2'; const String storedAnalyticsSettingsKey = 'analytics_settings'; const String storedMarketMakerSettingsKey = 'market_maker_settings'; const String lastLoggedInWalletKey = 'last_logged_in_wallet'; From f52a9070e7384261c9187e7b7018566cd4d7b046 Mon Sep 17 00:00:00 2001 From: Nitride <77973576+CharlVS@users.noreply.github.com> Date: Fri, 31 Oct 2025 17:48:36 +0100 Subject: [PATCH 14/30] fix(dex): propagate best_orders failures, avoid masking as no liquidity (#3328) - Propagate errors from best_orders instead of returning empty results - Treat P2P 'No response from any peer' (including wrapped Exception) as no orders - Add debug-only failure simulator toggled via kSimulateBestOrdersFailure feat(ui): CTA to Maker when no orders; contextual localized messages - Taker: show CTA when no swap offers available - Bridge: show CTA when no cross-network routes exist - Add locale keys: dexNoSwapOffers, bridgeNoCrossNetworkRoutes --- assets/translations/en.json | 2 + lib/app_config/app_config.dart | 5 ++ lib/bloc/dex_repository.dart | 87 ++++++++++++++----- lib/generated/codegen_loader.g.dart | 2 + .../view/table/bridge_nothing_found.dart | 28 +++++- .../orders_table/orders_table_content.dart | 41 ++++++++- 6 files changed, 137 insertions(+), 28 deletions(-) diff --git a/assets/translations/en.json b/assets/translations/en.json index 54764c231b..39588e5e2d 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -507,6 +507,8 @@ "orderBookNoAsks": "No asks found", "orderBookNoBids": "No bids found", "orderBookEmpty": "Orderbook is empty", + "dexNoSwapOffers": "No swap offers available for the selected asset.", + "bridgeNoCrossNetworkRoutes": "No cross-network routes found for this asset.", "freshAddress": "Fresh address", "userActionRequired": "User action required", "unknown": "Unknown", diff --git a/lib/app_config/app_config.dart b/lib/app_config/app_config.dart index 08d98de146..bfafab3fb2 100644 --- a/lib/app_config/app_config.dart +++ b/lib/app_config/app_config.dart @@ -44,6 +44,11 @@ const Duration kPerformanceLogInterval = Duration(minutes: 1); /// - Balance and price update polling const bool kDebugElectrumLogs = true; +/// Temporary failure simulation toggles for testing UI/flows. +/// Guarded by kDebugMode in calling sites. +const bool kSimulateBestOrdersFailure = false; +const double kSimulatedBestOrdersFailureRate = 0.5; // 50% + // This information is here because it is not contextual and is branded. // Names of their own are not localized. Also, the application is initialized before // the localization package is initialized. diff --git a/lib/bloc/dex_repository.dart b/lib/bloc/dex_repository.dart index 68a0f7f11c..afceae9f20 100644 --- a/lib/bloc/dex_repository.dart +++ b/lib/bloc/dex_repository.dart @@ -1,3 +1,5 @@ +import 'dart:math'; +import 'package:flutter/foundation.dart'; import 'package:rational/rational.dart'; import 'package:web_dex/app_config/app_config.dart'; import 'package:web_dex/mm2/mm2_api/mm2_api.dart'; @@ -56,9 +58,12 @@ class DexRepository { swapMethod: swapMethod, max: max, ); - final ApiResponse> response = - await _mm2Api.getTradePreimage(request); + final ApiResponse< + TradePreimageRequest, + TradePreimageResponseResult, + Map + > + response = await _mm2Api.getTradePreimage(request); final Map? error = response.error; final TradePreimageResponseResult? result = response.result; @@ -90,8 +95,9 @@ class DexRepository { } Future getMaxTakerVolume(String coinAbbr) async { - final MaxTakerVolResponse? response = - await _mm2Api.getMaxTakerVolume(MaxTakerVolRequest(coin: coinAbbr)); + final MaxTakerVolResponse? response = await _mm2Api.getMaxTakerVolume( + MaxTakerVolRequest(coin: coinAbbr), + ); if (response == null) { return null; } @@ -100,8 +106,9 @@ class DexRepository { } Future getMaxMakerVolume(String coinAbbr) async { - final MaxMakerVolResponse? response = - await _mm2Api.getMaxMakerVolume(MaxMakerVolRequest(coin: coinAbbr)); + final MaxMakerVolResponse? response = await _mm2Api.getMaxMakerVolume( + MaxMakerVolRequest(coin: coinAbbr), + ); if (response == null) { return null; } @@ -110,8 +117,9 @@ class DexRepository { } Future getMinTradingVolume(String coinAbbr) async { - final MinTradingVolResponse? response = - await _mm2Api.getMinTradingVol(MinTradingVolRequest(coin: coinAbbr)); + final MinTradingVolResponse? response = await _mm2Api.getMinTradingVol( + MinTradingVolRequest(coin: coinAbbr), + ); if (response == null) { return null; } @@ -129,9 +137,19 @@ class DexRepository { final bool isTradingPage = current == MainMenuValue.dex || current == MainMenuValue.bridge; if (!isTradingPage) { + // Not an error – we intentionally suppress best_orders away from trading pages return BestOrders(result: >{}); } + // Testing aid: opt-in random failure in debug mode + if (kDebugMode && + kSimulateBestOrdersFailure && + Random().nextDouble() < kSimulatedBestOrdersFailureRate) { + return BestOrders( + error: TextError(error: 'Simulated best_orders failure (debug)'), + ); + } + Map? response; try { response = await _mm2Api.getBestOrders(request); @@ -142,30 +160,54 @@ class DexRepository { path: 'api => getBestOrders', isError: true, ).ignore(); - return BestOrders(result: >{}); + return BestOrders(error: TextError.fromString(e.toString())); } - final isErrorResponse = - (response?['error'] as String?)?.isNotEmpty ?? false; - final hasResult = - (response?['result'] as Map?)?.isNotEmpty ?? false; + if (response == null) { + return BestOrders( + error: TextError(error: 'best_orders returned null response'), + ); + } + + final String? errorText = response['error'] as String?; + if (errorText != null && errorText.isNotEmpty) { + // Map known "no orders" network condition to empty result so UI shows a + // graceful "Nothing found" instead of an error panel. + final String? errorType = response['error_type'] as String?; + final String? errorPath = response['error_path'] as String?; + final bool isNoOrdersNetworkCondition = + errorPath == 'best_orders' && + errorType == 'P2PError' && + errorText.contains('No response from any peer'); + + // Mm2Api.getBestOrders may wrap MM2 errors in an Exception() during + // retry handling, yielding text like: "Exception: No response from any peer" + // (without error_type/error_path). Treat these as "no orders" as well. + final bool isWrappedNoOrdersText = errorText.toLowerCase().contains( + 'no response from any peer', + ); + + if (isNoOrdersNetworkCondition || isWrappedNoOrdersText) { + return BestOrders(result: >{}); + } - if (isErrorResponse) { log( - 'best_orders returned error: ${response!['error']}', + 'best_orders returned error: $errorText', path: 'api => getBestOrders', isError: true, ).ignore(); - return BestOrders(result: >{}); + return BestOrders(error: TextError(error: errorText)); } - if (!hasResult) { - // Treat empty or missing result as no orders available + final Map? result = + response['result'] as Map?; + if (result == null || result.isEmpty) { + // No error and no result → no liquidity available return BestOrders(result: >{}); } try { - return BestOrders.fromJson(response!); + return BestOrders.fromJson(response); } catch (e, s) { log('Error parsing best_orders response: $e', trace: s, isError: true); @@ -178,8 +220,9 @@ class DexRepository { } Future getSwapStatus(String swapUuid) async { - final response = - await _mm2Api.getSwapStatus(MySwapStatusReq(uuid: swapUuid)); + final response = await _mm2Api.getSwapStatus( + MySwapStatusReq(uuid: swapUuid), + ); if (response['error'] != null) { throw TextError(error: response['error']); diff --git a/lib/generated/codegen_loader.g.dart b/lib/generated/codegen_loader.g.dart index 22a4045ab6..9bd6b5edfa 100644 --- a/lib/generated/codegen_loader.g.dart +++ b/lib/generated/codegen_loader.g.dart @@ -503,6 +503,8 @@ abstract class LocaleKeys { static const orderBookNoAsks = 'orderBookNoAsks'; static const orderBookNoBids = 'orderBookNoBids'; static const orderBookEmpty = 'orderBookEmpty'; + static const dexNoSwapOffers = 'dexNoSwapOffers'; + static const bridgeNoCrossNetworkRoutes = 'bridgeNoCrossNetworkRoutes'; static const freshAddress = 'freshAddress'; static const userActionRequired = 'userActionRequired'; static const unknown = 'unknown'; diff --git a/lib/views/bridge/view/table/bridge_nothing_found.dart b/lib/views/bridge/view/table/bridge_nothing_found.dart index 55b88259df..4ddab3854e 100644 --- a/lib/views/bridge/view/table/bridge_nothing_found.dart +++ b/lib/views/bridge/view/table/bridge_nothing_found.dart @@ -1,18 +1,38 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; +import 'package:komodo_ui_kit/komodo_ui_kit.dart'; import 'package:web_dex/generated/codegen_loader.g.dart'; +import 'package:web_dex/router/state/routing_state.dart'; +import 'package:web_dex/model/main_menu_value.dart'; class BridgeNothingFound extends StatelessWidget { @override Widget build(BuildContext context) { return Container( padding: const EdgeInsets.fromLTRB(0, 30, 0, 20), - child: Row( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Row( mainAxisAlignment: MainAxisAlignment.center, children: [ - Text( - LocaleKeys.nothingFound.tr(), - style: Theme.of(context).textTheme.bodySmall, + Text( + LocaleKeys.bridgeNoCrossNetworkRoutes.tr(), + style: Theme.of(context).textTheme.bodySmall, + ), + ], + ), + const SizedBox(height: 8), + UiSimpleButton( + onPressed: () { + routingState.selectedMenu = MainMenuValue.dex; + routingState.dexState.orderType = 'maker'; + }, + child: Text( + LocaleKeys.makerOrder.tr(), + style: Theme.of(context).textTheme.bodySmall, + ), ), ], ), diff --git a/lib/views/dex/simple/form/tables/orders_table/orders_table_content.dart b/lib/views/dex/simple/form/tables/orders_table/orders_table_content.dart index f8a9b812ea..cce1dcc260 100644 --- a/lib/views/dex/simple/form/tables/orders_table/orders_table_content.dart +++ b/lib/views/dex/simple/form/tables/orders_table/orders_table_content.dart @@ -11,10 +11,11 @@ import 'package:web_dex/generated/codegen_loader.g.dart'; import 'package:web_dex/mm2/mm2_api/rpc/base.dart'; import 'package:web_dex/mm2/mm2_api/rpc/best_orders/best_orders.dart'; import 'package:web_dex/model/authorize_mode.dart'; -import 'package:web_dex/views/dex/simple/form/tables/nothing_found.dart'; import 'package:web_dex/views/dex/simple/form/tables/orders_table/grouped_list_view.dart'; import 'package:web_dex/views/dex/simple/form/tables/table_utils.dart'; import 'package:komodo_ui_kit/komodo_ui_kit.dart'; +import 'package:web_dex/router/state/routing_state.dart'; +import 'package:web_dex/model/main_menu_value.dart'; class OrdersTableContent extends StatelessWidget { const OrdersTableContent({ @@ -61,7 +62,9 @@ class OrdersTableContent extends StatelessWidget { .testCoinsEnabled, ); - if (orders.isEmpty) return const NothingFound(); + if (orders.isEmpty) { + return const _NoOrdersCta(); + } return GroupedListView( items: orders, @@ -116,3 +119,37 @@ class _ErrorMessage extends StatelessWidget { ); } } + +class _NoOrdersCta extends StatelessWidget { + const _NoOrdersCta(); + + @override + Widget build(BuildContext context) { + return Container( + padding: const EdgeInsets.fromLTRB(12, 30, 12, 20), + alignment: const Alignment(0, 0), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + LocaleKeys.dexNoSwapOffers.tr(), + style: Theme.of(context).textTheme.bodySmall, + ), + const SizedBox(height: 8), + UiSimpleButton( + child: Text( + // Reuse existing localization for Maker order label + LocaleKeys.makerOrder.tr(), + style: Theme.of(context).textTheme.bodySmall, + ), + onPressed: () { + routingState.selectedMenu = MainMenuValue.dex; + routingState.dexState.orderType = 'maker'; + }, + ), + ], + ), + ); + } +} From 4d4a2586bdedbd03a9735dce46f48357bc2f58ec Mon Sep 17 00:00:00 2001 From: Francois Date: Sat, 1 Nov 2025 00:18:13 +0200 Subject: [PATCH 15/30] chore(settings): add logging and avoid silent skipping --- lib/bloc/settings/settings_repository.dart | 15 ++++-- .../settings/market_maker_bot_settings.dart | 54 +++++++++++-------- 2 files changed, 43 insertions(+), 26 deletions(-) diff --git a/lib/bloc/settings/settings_repository.dart b/lib/bloc/settings/settings_repository.dart index 2dd226a439..05f7c3d58e 100644 --- a/lib/bloc/settings/settings_repository.dart +++ b/lib/bloc/settings/settings_repository.dart @@ -1,5 +1,6 @@ import 'dart:convert'; +import 'package:logging/logging.dart'; import 'package:web_dex/model/stored_settings.dart'; import 'package:web_dex/services/storage/base_storage.dart'; import 'package:web_dex/services/storage/get_storage.dart'; @@ -7,14 +8,13 @@ import 'package:web_dex/shared/constants.dart'; class SettingsRepository { SettingsRepository({BaseStorage? storage}) - : _storage = storage ?? getStorage(); + : _storage = storage ?? getStorage(); final BaseStorage _storage; + static final _log = Logger('SettingsRepository'); Future loadSettings() async { - final dynamic storedAppPrefs = await _storage.read(storedSettingsKey); - - return StoredSettings.fromJson(storedAppPrefs); + return loadStoredSettings(); } Future updateSettings(StoredSettings settings) async { @@ -42,7 +42,12 @@ class SettingsRepository { return StoredSettings.fromJson( legacy is Map ? legacy : null, ); - } catch (_) { + } catch (e, stackTrace) { + _log.warning( + 'Failed to load stored settings, returning initial settings', + e, + stackTrace, + ); return StoredSettings.initial(); } } diff --git a/lib/model/settings/market_maker_bot_settings.dart b/lib/model/settings/market_maker_bot_settings.dart index 72699e529f..559cd2370c 100644 --- a/lib/model/settings/market_maker_bot_settings.dart +++ b/lib/model/settings/market_maker_bot_settings.dart @@ -1,9 +1,12 @@ import 'package:equatable/equatable.dart'; +import 'package:logging/logging.dart'; import 'package:web_dex/mm2/mm2_api/rpc/market_maker_bot/message_service_config/message_service_config.dart'; import 'package:web_dex/mm2/mm2_api/rpc/market_maker_bot/trade_coin_pair_config.dart'; /// Settings for the KDF Simple Market Maker Bot. class MarketMakerBotSettings extends Equatable { + static final Logger _log = Logger('MarketMakerBotSettings'); + const MarketMakerBotSettings({ required this.isMMBotEnabled, required this.botRefreshRate, @@ -38,31 +41,40 @@ class MarketMakerBotSettings extends Equatable { final dynamic configsRaw = json['trade_coin_pair_configs']; final List configs = (configsRaw is List) ? configsRaw - .whereType>() - .map((e) { - try { - // Skip invalid entries that are missing required fields - if (!e.containsKey('name') || - !e.containsKey('base') || - !e.containsKey('rel') || - !e.containsKey('spread') || - !e.containsKey('enable')) { + .map((dynamic e) { + // Log before skipping, rather than silently filtering invalid entries + if (e is! Map) { + _log.warning('Invalid trade coin pair config: $e'); + return null; + } + + try { + // Skip invalid entries rather than crashing on startup + if (!e.containsKey('name') || + !e.containsKey('base') || + !e.containsKey('rel') || + !e.containsKey('spread') || + !e.containsKey('enable')) { + _log.warning('Invalid trade coin pair config: $e'); + return null; + } + return TradeCoinPairConfig.fromJson(e); + } catch (error, stackTrace) { + _log.warning( + 'Invalid trade coin pair config', + error, + stackTrace, + ); return null; } - return TradeCoinPairConfig.fromJson(e); - } catch (_) { - return null; - } - }) - .whereType() - .toList() + }) + .whereType() + .toList() : const []; - final MessageServiceConfig? messageCfg = (json['message_service_config'] - is Map) - ? MessageServiceConfig.fromJson( - json['message_service_config'] as Map, - ) + final MessageServiceConfig? messageCfg = + (json['message_service_config'] is Map) + ? MessageServiceConfig.fromJson(json['message_service_config']) : null; return MarketMakerBotSettings( From 5da3aaf9d7ee9fc3681cf270f9a1e999ca208947 Mon Sep 17 00:00:00 2001 From: Kadan Stadelmann Date: Sun, 2 Nov 2025 15:58:21 +0100 Subject: [PATCH 16/30] fix ci (#3336) * fix ci * add wasm libs for CI * cp wasm * echo ls kdf bins * fix typo * rm ls * fix typo * fix macOS CI build * cp wasm files manually * update sdk * update sdk * update sdk * use komodo earth libs * build(web): ignore KDF generated binaries and remove accidentally committed files under web/kdf/kdf/bin --------- Co-authored-by: CharlVS <77973576+CharlVS@users.noreply.github.com> --- .github/actions/validate-build/action.yml | 15 +++++++++------ .github/workflows/desktop-builds.yml | 6 +++++- .gitignore | 5 ++++- sdk | 2 +- test_integration/runners/app_data.dart | 2 +- 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/.github/actions/validate-build/action.yml b/.github/actions/validate-build/action.yml index 7618c39617..733543f477 100644 --- a/.github/actions/validate-build/action.yml +++ b/.github/actions/validate-build/action.yml @@ -9,18 +9,21 @@ runs: run: | SDK_KDF_ASSETS_DIR=build/web/assets/packages/komodo_defi_framework - # Check that the web build folder contains a wasm file in the format build/web/kdf/*.wasm - if [ ! -f build/web/kdf/kdf/bin/*.wasm ]; then + # Check that the web build folder contains a wasm file in the format build/web/kdf/kdf/bin/*.wasm + shopt -s nullglob + wasm_files=(build/web/kdf/kdf/bin/*.wasm) + if [ ${#wasm_files[@]} -eq 0 ]; then echo "Error: Web build failed. No wasm file found in build/web/kdf/kdf/bin" # List files for debugging - echo "Listing files in build/web recursively" - ls -R build/web + echo "Listing files in build/web/kdf recursively" + ls -R build/web/kdf 2>/dev/null || echo "build/web/kdf directory does not exist" - echo "Listing files in web recursively" - ls -R web + echo "Listing files in web/kdf recursively" + ls -R web/kdf 2>/dev/null || echo "web/kdf directory does not exist" exit 1 fi + echo "Found wasm files: ${wasm_files[@]}" # Check that the index.html is present and that it is equal to the source index.html if ! cmp -s web/index.html build/web/index.html; then diff --git a/.github/workflows/desktop-builds.yml b/.github/workflows/desktop-builds.yml index 7cf76d4bcb..3084962c59 100644 --- a/.github/workflows/desktop-builds.yml +++ b/.github/workflows/desktop-builds.yml @@ -48,7 +48,7 @@ jobs: with: p12-file-base64: ${{ secrets.MACOS_P12_BASE64 }} p12-password: ${{ secrets.MACOS_P12_PASSWORD }} - bundle-id: "com.komodo.komodowallet" + bundle-id: "com.komodo.wallet" profile-type: "MAC_APP_DEVELOPMENT" issuer-id: ${{ secrets.APPSTORE_ISSUER_ID }} api-key-id: ${{ secrets.APPSTORE_KEY_ID }} @@ -73,6 +73,10 @@ jobs: - name: Fetch packages, generate assets, and build for ${{ matrix.platform }} env: GITHUB_API_PUBLIC_READONLY_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # Disable code signing for macOS PR builds + CODE_SIGNING_ALLOWED: ${{ matrix.platform == 'macos' && github.event_name == 'pull_request' && 'NO' || '' }} + CODE_SIGNING_REQUIRED: ${{ matrix.platform == 'macos' && github.event_name == 'pull_request' && 'NO' || '' }} + EXPANDED_CODE_SIGN_IDENTITY: ${{ matrix.platform == 'macos' && github.event_name == 'pull_request' && '-' || '' }} uses: ./.github/actions/generate-assets with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index d40a175d03..f8f9a9994d 100644 --- a/.gitignore +++ b/.gitignore @@ -83,4 +83,7 @@ venv/ /macos/build AGENTS_1.md # .dmg Release -dist/ \ No newline at end of file +dist/ + +# KDF generated binaries +web/kdf/kdf/bin/ \ No newline at end of file diff --git a/sdk b/sdk index 0cdff3c3d8..61a417068c 160000 --- a/sdk +++ b/sdk @@ -1 +1 @@ -Subproject commit 0cdff3c3d83c3b8f523297cc0283627cca7c4445 +Subproject commit 61a417068c27b8757fd1fe4cf71b35c241aaf1b4 diff --git a/test_integration/runners/app_data.dart b/test_integration/runners/app_data.dart index 8b5cae157f..2603dd4bde 100644 --- a/test_integration/runners/app_data.dart +++ b/test_integration/runners/app_data.dart @@ -3,7 +3,7 @@ import 'dart:io'; //app data path for mac and linux -const String macAppData = '/Library/Containers/com.komodo.komodowallet'; +const String macAppData = '/Library/Containers/com.komodo.wallet'; const String linuxAppData = '/.local/share/com.komodo.KomodoWallet'; const String windowsAppData = r'\AppData\Roaming\com.komodo'; From 2d88bfe3373568cdbe85b0445d7d9f6208128cb3 Mon Sep 17 00:00:00 2001 From: Francois Date: Sun, 2 Nov 2025 17:56:08 +0200 Subject: [PATCH 17/30] refactor(settings): respect DI without duplication of logic no references to the DI, but good to fix for consistency & to avoid any surprises down the line --- lib/bloc/settings/settings_repository.dart | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/bloc/settings/settings_repository.dart b/lib/bloc/settings/settings_repository.dart index 05f7c3d58e..adae4f37c2 100644 --- a/lib/bloc/settings/settings_repository.dart +++ b/lib/bloc/settings/settings_repository.dart @@ -14,7 +14,7 @@ class SettingsRepository { static final _log = Logger('SettingsRepository'); Future loadSettings() async { - return loadStoredSettings(); + return loadStoredSettings(settingsStorage: _storage); } Future updateSettings(StoredSettings settings) async { @@ -28,8 +28,10 @@ class SettingsRepository { await _storage.write(storedSettingsKey, legacyData); } - static Future loadStoredSettings() async { - final storage = getStorage(); + static Future loadStoredSettings({ + BaseStorage? settingsStorage, + }) async { + final storage = settingsStorage ?? getStorage(); try { // Prefer V2 settings if present final dynamic v2 = await storage.read(storedSettingsKeyV2); From c3ec8f2d0c5f442d462075ac482a8308aca25f52 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Sun, 2 Nov 2025 21:01:16 +0100 Subject: [PATCH 18/30] fix(transaction-history): revert to timestamp-based transaction sorting This reverts the changes from https://github.com/KomodoPlatform/komodo-wallet/commit/9900372bde0aa9f1ca957a3a1ba7ed83ced36f26 that attempted to show unconfirmed transactions first. The previous approach caused transactions to appear in a chaotic order during synchronization, creating confusion until all transactions are fully loaded. --- .../transaction_history_bloc.dart | 23 +++++-------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/lib/bloc/transaction_history/transaction_history_bloc.dart b/lib/bloc/transaction_history/transaction_history_bloc.dart index c71f27d727..0255e7723a 100644 --- a/lib/bloc/transaction_history/transaction_history_bloc.dart +++ b/lib/bloc/transaction_history/transaction_history_bloc.dart @@ -249,24 +249,13 @@ class TransactionHistoryBloc } int _compareTransactions(Transaction left, Transaction right) { - // Unconfirmed (pending) transactions should appear first. - final leftIsUnconfirmed = left.confirmations == 0; - final rightIsUnconfirmed = right.confirmations == 0; - - if (leftIsUnconfirmed != rightIsUnconfirmed) { - return leftIsUnconfirmed ? -1 : 1; + final now = DateTime.now(); + if (right.timestamp == now) { + return 1; + } else if (left.timestamp == now) { + return -1; } - - // Within each group, sort by effective time (handles zero timestamps) - final timeComparison = _sortTime(right).compareTo(_sortTime(left)); - if (timeComparison != 0) return timeComparison; - - // Prefer higher block heights first - final heightComparison = right.blockHeight.compareTo(left.blockHeight); - if (heightComparison != 0) return heightComparison; - - // Final tiebreaker to ensure deterministic ordering - return right.internalId.compareTo(left.internalId); + return right.timestamp.compareTo(left.timestamp); } } From acdb8400ab24f0173ba7b7c921d88a89c83d3762 Mon Sep 17 00:00:00 2001 From: smk762 Date: Mon, 3 Nov 2025 13:38:28 +0800 Subject: [PATCH 19/30] gets min_trade_volume to avoid bot errors --- .../market_maker_trade_form_bloc.dart | 60 ++++++++++++++++++- .../market_maker_trade_form_state.dart | 19 ++++++ .../market_maker_bot_confirmation_form.dart | 9 +-- .../market_maker_bot_form_content.dart | 4 +- ...t_maker_form_error_message_extensions.dart | 23 ++++++- 5 files changed, 105 insertions(+), 10 deletions(-) diff --git a/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_bloc.dart b/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_bloc.dart index 32d465ae9d..9c73dcf4b2 100644 --- a/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_bloc.dart +++ b/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_bloc.dart @@ -98,6 +98,10 @@ class MarketMakerTradeFormBloc // Fetch max maker volume with fallback to swap address balance final maxMakerVolume = await _getMaxMakerVolumeWithFallback(event.sellCoin); + // Fetch coin-specific minimum trading volume + final minTradingVol = event.sellCoin == null + ? null + : await _dexRepository.getMinTradingVolume(event.sellCoin!.abbr); final maxMakerVolumeDouble = maxMakerVolume?.toDouble() ?? 0; final newSellAmount = CoinTradeAmountInput.dirty( @@ -120,6 +124,7 @@ class MarketMakerTradeFormBloc sellAmount: newSellAmount, buyAmount: newBuyAmount, maxMakerVolume: maxMakerVolume, + minTradingVolume: minTradingVol, isLoadingMaxMakerVolume: false, ), ); @@ -266,6 +271,10 @@ class MarketMakerTradeFormBloc // Fetch max maker volume with fallback to swap address balance final maxMakerVolume = await _getMaxMakerVolumeWithFallback(sellCoin); + // Fetch coin-specific minimum trading volume for new base coin + final minTradingVol = sellCoin == null + ? null + : await _dexRepository.getMinTradingVolume(sellCoin.abbr); final maxMakerVolumeDouble = maxMakerVolume?.toDouble() ?? 0; final maxVolumeValue = @@ -288,6 +297,7 @@ class MarketMakerTradeFormBloc sellAmount: CoinTradeAmountInput.dirty(newSellAmount.toString()), buyAmount: CoinTradeAmountInput.dirty(newBuyAmount.toString()), maxMakerVolume: maxMakerVolume, + minTradingVolume: minTradingVol, isLoadingMaxMakerVolume: false, ), ); @@ -347,6 +357,10 @@ class MarketMakerTradeFormBloc // Fetch max maker volume with fallback to swap address balance final maxMakerVolume = await _getMaxMakerVolumeWithFallback(sellCoin.value); + // Fetch coin-specific minimum trading volume for base coin + final minTradingVol = sellCoin.value == null + ? null + : await _dexRepository.getMinTradingVolume(sellCoin.value!.abbr); final maxMakerVolumeDouble = maxMakerVolume?.toDouble() ?? 0; final sellAmountFromVolume = maxTradeVolume * maxMakerVolumeDouble; @@ -374,6 +388,7 @@ class MarketMakerTradeFormBloc tradeMargin: tradeMargin, updateInterval: updateInterval, maxMakerVolume: maxMakerVolume, + minTradingVolume: minTradingVol, ), ); @@ -429,10 +444,23 @@ class MarketMakerTradeFormBloc final preImage = await _getPreimageData(state); final preImageError = await _getPreImageError(preImage.error, state); + if (preImage.error is TradePreimageTransportError) { + // After retries, still transport error -> show raw error + emit( + state.copyWith( + status: MarketMakerTradeFormStatus.error, + rawErrorMessage: (preImage.error as TradePreimageTransportError) + .message, + ), + ); + return; + } + if (preImageError == MarketMakerTradeFormError.none) { return emit( state.copyWith( tradePreImage: preImage.data, + rawErrorMessage: null, status: MarketMakerTradeFormStatus.success, ), ); @@ -453,6 +481,7 @@ class MarketMakerTradeFormBloc state.copyWith( tradePreImage: preImage.data, preImageError: isInsufficientBaseBalance ? null : preImageError, + rawErrorMessage: null, sellAmount: isInsufficientBaseBalance ? CoinTradeAmountInput.dirty(newSellAmount.toString()) : state.sellAmount, @@ -532,8 +561,13 @@ class MarketMakerTradeFormBloc // if Rel coin has a parent, e.g. 1INCH-AVX-20, then the error is // due to insufficient balance of the parent coin return MarketMakerTradeFormError.insufficientBalanceRelParent; - } else if (preImageError is TradePreimageTransportError) { + } else if (preImageError is TradePreimageVolumeTooLowError) { + // Explicit VolumeTooLow should map to insufficient trade amount return MarketMakerTradeFormError.insufficientTradeAmount; + } else if (preImageError is TradePreimageTransportError) { + // Transport is a generic connectivity/transport layer issue; don't + // mislabel it as a min-volume problem + return MarketMakerTradeFormError.none; } else { return MarketMakerTradeFormError.none; } @@ -556,7 +590,9 @@ class MarketMakerTradeFormBloc throw ArgumentError('Base and rel coins must be set'); } - final preimageData = await _dexRepository.getTradePreimage( + // initial attempt + DataFromService preimageData = + await _dexRepository.getTradePreimage( base, rel, price, @@ -564,6 +600,26 @@ class MarketMakerTradeFormBloc volume, ); + // If transport error, retry every second up to 10 seconds while UI + // remains in loading state. + int attemptsLeft = 10; + while (preimageData.error is TradePreimageTransportError && + attemptsLeft > 0) { + _log.warning( + 'trade_preimage transport error for $base/$rel, retrying... ' + '(${11 - attemptsLeft}/10)', + ); + await Future.delayed(const Duration(seconds: 1)); + preimageData = await _dexRepository.getTradePreimage( + base, + rel, + price, + 'setprice', + volume, + ); + attemptsLeft--; + } + return preimageData; } catch (e, s) { _log.shout( diff --git a/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_state.dart b/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_state.dart index f0e1713cae..007fccb01c 100644 --- a/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_state.dart +++ b/lib/bloc/market_maker_bot/market_maker_trade_form/market_maker_trade_form_state.dart @@ -32,6 +32,8 @@ class MarketMakerTradeFormState extends Equatable with FormzMixin { this.tradePreImageError, this.tradePreImage, this.maxMakerVolume, + this.minTradingVolume, + this.rawErrorMessage, this.isLoadingMaxMakerVolume = false, }); @@ -49,6 +51,8 @@ class MarketMakerTradeFormState extends Equatable with FormzMixin { tradePreImageError = null, tradePreImage = null, maxMakerVolume = null, + minTradingVolume = null, + rawErrorMessage = null, isLoadingMaxMakerVolume = false; /// The coin being sold in the trade pair (base coin). @@ -93,6 +97,15 @@ class MarketMakerTradeFormState extends Equatable with FormzMixin { /// This value is fetched from the DEX API and cached in the state. final Rational? maxMakerVolume; + /// The minimum trading volume required by the base coin (sell coin). + /// Retrieved from the DEX API `min_trading_vol` for clearer validation + /// and error messaging. + final Rational? minTradingVolume; + + /// Raw error message for displaying unparsed backend errors to users when + /// a generic/transport failure persists after retries. + final String? rawErrorMessage; + /// Indicates whether the max maker volume is currently being fetched. final bool isLoadingMaxMakerVolume; @@ -172,6 +185,8 @@ class MarketMakerTradeFormState extends Equatable with FormzMixin { MarketMakerTradeFormStage? stage, TradePreimage? tradePreImage, Rational? maxMakerVolume, + Rational? minTradingVolume, + String? rawErrorMessage, bool? isLoadingMaxMakerVolume, }) { return MarketMakerTradeFormState( @@ -188,6 +203,8 @@ class MarketMakerTradeFormState extends Equatable with FormzMixin { stage: stage ?? this.stage, tradePreImage: tradePreImage ?? this.tradePreImage, maxMakerVolume: maxMakerVolume ?? this.maxMakerVolume, + minTradingVolume: minTradingVolume ?? this.minTradingVolume, + rawErrorMessage: rawErrorMessage ?? this.rawErrorMessage, isLoadingMaxMakerVolume: isLoadingMaxMakerVolume ?? this.isLoadingMaxMakerVolume, ); @@ -244,6 +261,8 @@ class MarketMakerTradeFormState extends Equatable with FormzMixin { status, tradePreImage, maxMakerVolume, + minTradingVolume, + rawErrorMessage, isLoadingMaxMakerVolume, ]; } diff --git a/lib/views/market_maker_bot/market_maker_bot_confirmation_form.dart b/lib/views/market_maker_bot/market_maker_bot_confirmation_form.dart index 51d14a2f66..05eacd2301 100644 --- a/lib/views/market_maker_bot/market_maker_bot_confirmation_form.dart +++ b/lib/views/market_maker_bot/market_maker_bot_confirmation_form.dart @@ -133,10 +133,11 @@ class _MarketMakerBotConfirmationFormState TotalFees(preimage: state.tradePreImage), const SizedBox(height: 24), SwapErrorMessage( - errorMessage: state.tradePreImageError?.text( - state.sellCoin.value, - state.buyCoin.value, - ), + errorMessage: state.rawErrorMessage ?? + state.tradePreImageError?.text( + state.sellCoin.value, + state.buyCoin.value, + ), context: context, ), Flexible( diff --git a/lib/views/market_maker_bot/market_maker_bot_form_content.dart b/lib/views/market_maker_bot/market_maker_bot_form_content.dart index 509d65e748..cfe76669ad 100644 --- a/lib/views/market_maker_bot/market_maker_bot_form_content.dart +++ b/lib/views/market_maker_bot/market_maker_bot_form_content.dart @@ -131,10 +131,10 @@ class _MarketMakerBotFormContentState extends State { const SizedBox(height: 12), if (state.tradePreImageError != null) ImportantNote( - text: - state.tradePreImageError?.text( + text: state.tradePreImageError?.textWithMin( state.sellCoin.value, state.buyCoin.value, + state.minTradingVolume?.toString(), ) ?? '', ), diff --git a/lib/views/market_maker_bot/market_maker_form_error_message_extensions.dart b/lib/views/market_maker_bot/market_maker_form_error_message_extensions.dart index 7794c91825..df5ae431e9 100644 --- a/lib/views/market_maker_bot/market_maker_form_error_message_extensions.dart +++ b/lib/views/market_maker_bot/market_maker_form_error_message_extensions.dart @@ -68,7 +68,8 @@ extension AmountValidationErrorText on AmountValidationError { return LocaleKeys.dexInsufficientFundsError .tr(args: [balance.toString(), coin?.abbr ?? '']); case AmountValidationError.lessThanMinimum: - return LocaleKeys.mmBotMinimumTradeVolume.tr(args: ["0.00000001"]); + return LocaleKeys.mmBotMinimumTradeVolume + .tr(args: ["0.00000001 ${coin?.abbr ?? ''}"]); } } } @@ -93,9 +94,27 @@ extension MarketMakerTradeFormErrorText on MarketMakerTradeFormError { return LocaleKeys.withdrawNotEnoughBalanceForGasError .tr(args: [relCoin?.parentCoin?.abbr ?? relCoin?.abbr ?? '']); case MarketMakerTradeFormError.insufficientTradeAmount: - return LocaleKeys.mmBotMinimumTradeVolume.tr(args: ["0.00000001"]); + return LocaleKeys.mmBotMinimumTradeVolume + .tr(args: ["too low for ${baseCoin?.abbr ?? ''}"]); default: return LocaleKeys.dexErrorMessage.tr(); } } } + +extension MarketMakerTradeFormErrorTextWithMin on MarketMakerTradeFormError { + String textWithMin( + Coin? baseCoin, + Coin? relCoin, + String? minTradingVolume, + ) { + if (this == MarketMakerTradeFormError.insufficientTradeAmount) { + final ticker = baseCoin?.abbr ?? ''; + final minText = (minTradingVolume?.isNotEmpty ?? false) + ? minTradingVolume + : 'too low for'; + return LocaleKeys.mmBotMinimumTradeVolume.tr(args: ['$minText $ticker']); + } + return text(baseCoin, relCoin); + } +} From e2d8273d31f33c84af64cd0356d55d239a609554 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Mon, 3 Nov 2025 15:18:41 +0100 Subject: [PATCH 20/30] fix(transaction-history): update transaction sorting logic for unconfirmed transactions --- lib/bloc/transaction_history/transaction_history_bloc.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/bloc/transaction_history/transaction_history_bloc.dart b/lib/bloc/transaction_history/transaction_history_bloc.dart index 0255e7723a..f3e2b84be9 100644 --- a/lib/bloc/transaction_history/transaction_history_bloc.dart +++ b/lib/bloc/transaction_history/transaction_history_bloc.dart @@ -249,10 +249,10 @@ class TransactionHistoryBloc } int _compareTransactions(Transaction left, Transaction right) { - final now = DateTime.now(); - if (right.timestamp == now) { + final unconfirmedTimestamp = DateTime.fromMillisecondsSinceEpoch(0); + if (right.timestamp == unconfirmedTimestamp) { return 1; - } else if (left.timestamp == now) { + } else if (left.timestamp == unconfirmedTimestamp) { return -1; } return right.timestamp.compareTo(left.timestamp); From cefa1e645d3fac6f69245dd2ea978d3dc10abaf7 Mon Sep 17 00:00:00 2001 From: Nitride <77973576+CharlVS@users.noreply.github.com> Date: Tue, 4 Nov 2025 12:21:53 +0100 Subject: [PATCH 21/30] docs: update CHANGELOG.md for v0.9.3 release (#3350) --- CHANGELOG.md | 282 ++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 202 insertions(+), 80 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b8314a006..3c59c5ab33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,103 +1,225 @@ # Komodo Wallet v0.9.3 Release Notes -This release sharpens sign-in convenience, analytics coverage, and operational resilience ahead of the 0.9.3 cut. Highlights include one-click remember-me login, a dual analytics pipeline with Matomo support, a hardened feedback workflow, and improved compliance guardrails across platforms. +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, and extensive optimisations that reduce RPC usage while improving responsiveness across all platforms. ## 🚀 New Features -- **One-Click Remember Me Sign-In** ([@CharlVS], #3041) - Adds a quick login toggle that remembers hashed wallet metadata, auto-detects password manager autofill, and lets you resume the last wallet in one tap across desktop and mobile. -- **Feedback Portal Overhaul** ([@CharlVS], #3017) - Rebuilds the in-app feedback flow with provider plugins, optional contact opt-out, log attachments capped under 10 MB, and screenshot scrubbing for sensitive dialogs. -- **Dual Analytics Pipeline** ([@CharlVS], #2932) - Runs Firebase and Matomo providers side by side with persistent event queues, CI-aware disables, and configurable Matomo dimensions. -- **Wallet Import Renaming & Validation** ([@CharlVS], #2792) - Validates wallet names on creation or import and lets you rename imports before they enter the manager. -- **Version Insight Panel** ([@takenagain], #3109) - Adds a bloc-driven settings panel that surfaces app, mm2, and coin-config commits with periodic polling. -- **ZHTLC (Zcash HTLC) Coin Support** [SDK] ([@takenagain], [SDK#227](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/227)) - Full integration of ZHTLC coins with enhanced activation strategy, task-based RPCs, Zcash params downloader, orderbook v2 support, and activation progress estimation. -- **Custom Token Support in Coin Config** [SDK] ([@takenagain], [SDK#225](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/225)) - Adds custom token storage and management within the coin config system with Hive-based persistence and recovery mechanisms. -- **CoinPaprika Market Data Provider** [SDK] ([@takenagain], [SDK#215](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/215)) - Integrates CoinPaprika API as a fallback provider for CEX market data, improving data availability and resilience. -- **External SDK Logging Support** [SDK] ([@CharlVS], [SDK#222](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/222)) - Enables passing external logger functions to the SDK for custom logging with managed subscriptions and improved callback error handling. -- **Trading-Related RPCs** [SDK] ([@CharlVS], [SDK#191](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/191)) - Implements comprehensive trading, orderbook, and Lightning RPCs with type-safe interfaces and SDK-level swap manager functionality. -- **Flutter Web WASM Support** [SDK] ([@CharlVS], [SDK#176](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/176)) - Comprehensive WASM support with OPFS interop extensions and unified cross-compatible storage implementation. - -## 🎨 UI & UX - -- **Asset List Loading Guards** ([@takenagain], #3134) - Hides portfolio rows until fiat pricing lands and shows placeholders instead of flickering zeroes. -- **Token Parent Labeling** ([@smk762], #2988) - Marks parent chains as native, adopts SDK display names, and keeps network suffixes visible across wallet views. -- **DEX Address Pill Consistency** ([@smk762], #2974) - Aligns the address pill style between list and detail flows for clearer swap confirmations. -- **Coin Detail Fiat Per Address** ([@takenagain], #3049) - Restores fiat balance context for individual addresses on the coin detail screen. -- **Memo Field Contextualization** ([@smk762], #2998) - Only renders memo inputs for Tendermint and ZHTLC assets so other withdrawals stay clutter-free. -- **Parent Display Name Suffix** [SDK] ([@CharlVS], [SDK#213](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/213)) - Adds token standard suffix support via `CoinSubClass.tokenStandardSuffix` for clearer parent chain identification. +- **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** ([@Francois], #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** ([@Francois], #3220) - Status indicators and start/stop controls now available in mobile view +- **Swap Data Export** ([@Kadan], #3220) - Copy and export swap data for reference and debugging +- **Tendermint Faucet Support** ([@Francois], #3206) - Request test coins for Tendermint-based assets with activation guardrails +- **Optional Verbose Logging** ([@Kadan], #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 -## 🔒 Security & Compliance +### SDK Updates (komodo-defi-sdk-flutter) + +This release integrates [komodo-defi-sdk v1.0.0-pre.1](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter) with 82 commits bringing substantial improvements: + +- **Flutter Web WASM Support** ([SDK#176](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/176)) - WASM support with OPFS integration and unified storage +- **Enhanced RPC Coverage** ([SDK#179](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/179), [#188](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/188), [#191](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/191)) - Trading, orderbook, and Lightning RPC support +- **Streaming Infrastructure** ([SDK#178](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/178), [#232](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/232), [#269](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/269)) - Pubkey and balance watch streams with comprehensive caching +- **Multi-Provider Market Data** ([SDK#145](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/145), [#224](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/224)) - CoinPaprika fallback and refined Binance quotes +- **Custom Token Storage** ([SDK#225](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/225), [#190](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/190)) - Runtime coin updates integration +- **Platform Support** ([SDK#237](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/237), [#247](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/247)) - macOS universal binary and packaging updates + +See the [full SDK changelog](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/releases) for complete details. + +## 🎨 UI/UX Improvements + +- **Fiat Value Display** ([@Francois], #3049) - Coin detail pages now show fiat balance for individual addresses +- **Withdraw Form Enhancements** ([@Francois], #3274) - Vertical responsive layout, fiat value previews for amount and fee, and alignment improvements +- **Loading State Placeholders** ([@Francois], #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** ([@Francois], #3225) - Dismiss keyboard on scroll for fiat and swap inputs +- **Mobile Seed Backup Banner** ([@Francois], #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 -- **Geo Blocker Bouncer Integration** ([@CharlVS], #3150) - Streams the new trading-status API, filters blocked assets during wallet bootstrap, and exposes an override for regulated builds. -- **Password Policy Hardening** ([@CharlVS], #3149/#3141) - Expands password limits to 128 characters across forms and makes validation consistent between Flutter and SDK layers. -- **Weak Password Flag Fix** ([@smk762], #3101) - Ensures the configuration flag actually respects weak-password bypass scenarios. -- **Pubkey Hygiene on Logout** ([@CharlVS], #3144) - Clears cached pubkeys when switching wallets or signing out to prevent stale address reuse. -- **Bip39 Compatibility Storage Fix** [SDK] ([@takenagain], [SDK#216](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/216)) - Ensures bip39 compatibility is stored regardless of wallet type, fixing HD wallet seed validation errors. -- **Trezor PIN/Passphrase Security** [SDK] ([@takenagain], [SDK#126](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/126)) - Mitigates potential exposure of Trezor PIN/passphrase by adding custom converters to prevent sensitive data in logs. -- **HD Wallet Message Signing** [SDK] ([@CharlVS], [SDK#198](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/198)) - Adds support for message signing with HD wallets including derivation path specification. -- **Trezor Connection Polling** [SDK] ([@takenagain], [SDK#126](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/126)) - Automatic polling of Trezor device connection status with auto sign-out when disconnected, preventing stale sessions. - -## ⚡ Performance & Reliability - -- **Fiat Onramp Debounce** ([@takenagain], #3125) - Debounces fiat amount edits so API calls only fire after user pauses typing. -- **Custom Token Activation Guardrails** ([@takenagain], #3129) - Waits for token propagation, limits retry loops, and deactivates test imports if the dialog closes without confirmation. -- **Legacy Wallet Import Stability** ([@takenagain], #3126) - Re-applies migrated coin lists after legacy imports and filters unsupported assets before activation. -- **SDK Subscription Lifecycle Management** [SDK] ([@takenagain], [SDK#232](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/232)) - Closes balance and pubkey subscriptions on auth state changes to prevent memory leaks and resource waste. -- **Market Metrics Log Reduction** [SDK] ([@takenagain], [SDK#223](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/223)) - Reduces market metrics log verbosity and removes duplicate logging for better performance. -- **Binance Per-Coin Currency Lists** [SDK] ([@takenagain], [SDK#224](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/224)) - Uses per-coin supported quote currency lists with USD stablecoin fallback mappings. -- **Multi-Provider Market Data System** [SDK] ([@takenagain], [SDK#145](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/145)) - Adds support for multiple market data providers with fallback logic and retry mechanisms. -- **Pubkey Watch Stream** [SDK] ([@takenagain], [SDK#178](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/178)) - Adds reactive public key monitoring with automatic auth state handling. +## ⚡ Performance Enhancements + +- **RPC Spam Reduction** ([@CharlVS], #3253) - Comprehensive SDK-side caching and streaming support drastically reduces redundant RPC calls +- **Fiat On-Ramp Debouncing** ([@Francois], #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 -- **Unauthenticated Coin State Fixes** ([@CharlVS], #3138) - Repairs coin list and sparkline loading when viewing portfolios before logging in. -- **DEX Precision Regression** ([@CharlVS], #3123) - Eliminates precision loss in taker forms and adds tests for large rational conversions. -- **macOS File Picker Entitlements** ([@CharlVS], #3111) - Restores the native file picker by adding the required read-only entitlement and window focus handling. -- **NFT IPFS Fallbacks** ([@takenagain], #3020) - Introduces an IPFS gateway manager with retries, cooldowns, and unit tests so NFT media loads consistently. -- **SDK Disposal Crash** ([@DeckerSU], #3117) - Avoids crashes when mm2 shuts down mid-fetch by guarding the periodic fetch loop. -- **Price/Version Reporting** ([@DeckerSU], #3115) - Ensures the settings screen shows the actual mm2 commit hash instead of a closure string. -- **Custom Token Import & Refresh** [SDK] ([@takenagain], [SDK#220](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/220)) - Fixes custom token refresh, lowercase icon identifiers, and parent-child relationships. -- **ZHTLC Activation Resilience** [SDK] ([@takenagain], [SDK#227](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/227)) - Multiple fixes for ZHTLC activation including config transformation and orderbook v2 alignment. -- **Coingecko OHLC Parsing** [SDK] ([@takenagain], [SDK#203](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/203)) - Fixes OHLC data parsing differences between Coingecko and Binance formats. -- **External Logger Memory Leak** [SDK] ([@CharlVS], [SDK#222](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/222)) - Resolves memory leak from native callback by properly disposing \_kdfOperations. -- **BIP39 Validation for Legacy Wallets** [SDK] ([@takenagain], [SDK#216](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/216)) - Simplifies HD bip39 verification and allows custom seeds for legacy wallets. -- **Runtime Coin Updates Asset Ordering** [SDK] ([@takenagain], [SDK#217](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/217)) - Fixes Linux segfault by sorting assets before returning. -- **WASM JS Call Error Handling** [SDK] ([@takenagain], [SDK#185](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/185)) - Improves JS call error handling on startup for WASM operations. -- **Market Data Price Fetching** [SDK] ([@takenagain], [SDK#167](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/167)) - Prioritizes KomodoPriceRepository over CexRepository for current prices. - -## 🛠️ Build & Developer Experience - -- **Flutter 3.35.1 & SDK Roll** ([@CharlVS], #3108) - Upgrades Flutter, aligns SDK dependencies, and refreshes package overrides for the new mono-repo workspace. -- **SDK Git Submodule Adoption** ([@takenagain], #3110) - Vendors komodo-defi-sdk as a submodule with workspace overrides and adds tooling for deterministic rolls. -- **Matomo Build Validation** ([@DeckerSU], #3165) - Validates Matomo tracking parameters during CI builds to prevent misconfigured releases. -- **Build Script Environment Sanitization** ([@DeckerSU], #3037/#3055/#3058) - Normalises docker env defines, forces web builds off CDN resources, and removes stray .dgph artifacts from iOS outputs. -- **Linux Build Workflow Check** ([@DeckerSU], #3106) - Adds a GitHub workflow that exercises the Linux build script after SDK rolls. -- **Devcontainer Modernisation** ([@CharlVS], #3114) - Switches the devcontainer to lightweight .docker images and consolidates post-create provisioning. -- **SDK Dart Pub Workspaces Migration** [SDK] ([@CharlVS], [SDK#204](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/204)) - Migrates SDK to Dart Pub workspaces, bumps Dart SDK to >=3.9.0, unifies Flutter constraints (>=3.35.0 <3.36.0). -- **SDK Coin Updates Integration** [SDK] ([@takenagain], [SDK#190](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/190)) - Integrates komodo_coin_updates into komodo_coins with Hive CE migration and runtime update capabilities. -- **KDF API Branch Update** [SDK] ([@CharlVS], sdk/72c9de3) - Updates API branch to hotfix-remove-memorydb-size-metric with refreshed checksums for all platform binaries. -- **SDK Package Publishing** [SDK] ([@CharlVS], [SDK#204](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/204)) - Prepares SDK packages for pub.dev with updated dependencies, licenses, and repository links. -- **GitHub Token Authentication** [SDK] ([@CharlVS], [SDK#176](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/176)) - Adds GITHUB_API_PUBLIC_READONLY_TOKEN support to prevent API rate limiting (60→5,000 requests/hour). +- **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** ([@Francois], #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** ([@Francois], #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** ([@Francois], #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** ([@Kadan], #3297) - Added unit tests and fixed decimal handling with proper fiat amount input refactoring +- **Trading Bot Improvements** ([@Francois], #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** ([@Francois], #3187) - Fixed sell coin dropdown reverting to previous coin with occasional flickering +- **ARRR Reactivation** ([@Francois], #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** ([@Kadan], #3305) - Fixed timer leaks preventing proper cleanup +- **SSE Lifecycle** ([@Kadan], #3313, #3318) - Tie SSE to the auth state lifecycle and remove the SSE package for better stability +- **iOS/macOS KDF Reinitialization** ([@Kadan], #3286) - Proper KDF health check and reinitialisation on iOS/macOS +- **Withdrawal Form** ([@Kadan], #3288) - Fixed withdrawal regression +- **KDF Disposal Crash** ([@DeckerSU], #3117) - Fixed crash when `KomodoDefiSdk` is disposed during periodic fetch +- **Fiat On-Ramp CSP** ([@Francois], #3225) - Disable overly restrictive CSP with limited platform support; add Komodo and sandbox domains to allowlist +- **NFT IPFS Loading** ([@Francois], #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** ([@Francois], #3328) - Only consider empty timestamps and confirmations as unconfirmed + +## 🔒 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** ([@Francois], #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 + +### Windows + +- **Single-Instance Enforcement** ([@CharlVS], #3063) - Prevent multiple instances and zombie processes + +### iOS + +- **FD Monitoring** ([@Kadan], #3259) - File descriptor monitoring for release mode +- **Health Check Integration** ([@Kadan], #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** ([@Francois], #3128) - Added Ruby installation step for iOS builds + +### 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](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/179), [#188](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/188), [#191](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/191)) - Implemented missing RPCs, including trading-related endpoints and Lightning support +- **Message Signing** ([SDK#198](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/198), [#231](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/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](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/145), [#215](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/215)) - Support for multiple market data providers with CoinPaprika fallback option +- **Custom Token Integration** ([SDK#225](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/225), [#190](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/190)) - Custom token support in coin config manager; integrate komodo_coin_updates into komodo_coins +- **Balance & Pubkey Streaming** ([SDK#178](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/178), [#232](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/232), [#262](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/262), [#269](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/269)) - Add pubkey watch function similar to balance watch; comprehensive caching and streaming support +- **ETH-BASE Support** ([SDK#254](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/254)) - Add support for ETH-BASE and derived assets +- **Asset Tagging Fixes** ([SDK#244](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/244)) - Correct UTXO coins incorrectly tagged as Smart Chain +- **ZHTLC Fixes** ([SDK#227](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/227), [#264](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/264)) - ZHTLC activation fixes with optional sync params and sign-out cleanup +- **Binance Quote Fixes** ([SDK#224](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/224)) - Use per-coin supported quote currency list instead of global cache +- **Market Metrics Logging** ([SDK#223](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/223)) - Reduce market metrics log verbosity and duplication +- **Etherscan URLs** ([SDK#217](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/217)) - Fix Etherscan URL formatting +- **Sparkline Configuration** ([SDK#248](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/248)) - Add configurable sparkline baseline +- **Dragon Charts Migration** ([SDK#164](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/164)) - Migrate dragon_charts_flutter to monorepo packages +- **Trezor Polling** ([SDK#126](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/126)) - Poll Trezor connection status and sign out when disconnected +- **KDF Version Updates** ([SDK#218](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/218), [#237](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/237), [#249](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/249), [#241](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/241), [#247](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/247)) - Roll KDF to latest releases with checksum updates +- **Runtime Fetch Libraries** ([SDK#280](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/280)) - Use runtime fetch libraries with updated checksums + +### 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** ([@Francois], #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** ([@Francois], #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** ([@Francois], #3128) - Ruby installation guide for iOS/macOS builds +- **Optional Verbose Logging** ([@Kadan], #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** ([@Kadan], #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** ([@Francois], #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** ([@Francois], #3328) - Add logging for errors not propagated to UI layer ## 📚 Documentation -- **Matomo Analytics Guide** ([@CharlVS], #2932) - Documents how to enable Matomo alongside Firebase, including CI toggles and queue behaviour. -- **SDK Submodule Management** ([@takenagain], #3110) - Provides end-to-end instructions for updating, hotfixing, and testing the vendored SDK. -- **macOS/iOS Build Prerequisites** ([@takenagain], #3128) - Expands setup docs with Ruby installation steps and refreshed platform notes. -- **SDK Package Documentation Overhaul** [SDK] ([@CharlVS], [SDK#201](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/201)) - Major documentation improvements across all SDK packages with comprehensive guides and API references. -- **ZHTLC Technical Documentation** [SDK] ([@takenagain], [SDK#227](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/227)) - Adds activation refactoring plan, Firebase deployment setup, and tech debt report for ZHTLC implementations. +- **SDK Changelog Cross-Linking** ([@CharlVS], #3172) - Link SDK PRs with short labels and mark SDK items in wallet changelog +- **Ruby Installation Guide** ([@Francois], #3128) - Added Ruby installation step for iOS and macOS builds +- **SDK Documentation** ([SDK#201](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/pull/201)) - Document project and packages for pub.dev release -## ⚠️ Breaking Changes +## ⚠️ Known Issues -- **SDK Dart/Flutter Version Requirements** [SDK] - Minimum Dart SDK version is now `^3.9.0` and Flutter version constraint is `>=3.35.0 <3.36.0` -- **ZHTLC Activation Parameters** [SDK] - Breaking changes to activation params serialization and structure for ZHTLC and ERC20 coins -- **SDK Workspace Migration** [SDK] - Legacy pubspec_overrides.yaml files removed in favor of Dart Pub workspace resolution +- 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 -## 📦 SDK Changes +## 🙏 Contributors -**SDK Version**: Updated from `68429b23dac43eddd53434dda1bd23296523f27d` to `72c9de3b370f1b4169ebbb3150e8adedf4ed3b23` +This release includes contributions from 11 developers: + +- @CharlVS +- @takenagain +- @ca333 +- @smk762 +- @DeckerSU +- @gcharang +- @TazzyMeister +- @naezith +- Cursor Agent (automated refactoring) **Full Changelog**: [0.9.2...0.9.3](https://github.com/KomodoPlatform/komodo-wallet/compare/0.9.2...0.9.3) +--- + +_For developers building with Komodo DeFi SDK: This release includes [komodo-defi-sdk v1.0.0-pre.1](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/releases) with breaking changes related to streaming APIs and caching behaviour. Review the [SDK changelog](https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/blob/main/CHANGELOG.md) for migration guidance._ + # Komodo Wallet v0.9.2 Release Notes This release brings numerous improvements to wallet functionality, enhanced user experience, and critical bug fixes. Key highlights include HD wallet private key export, improved Trezor support, enhanced UI/UX throughout the application, and platform-specific optimizations. From eb2b0b87dbc19d6fdeda0106ff74289fcc64e5d8 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Tue, 4 Nov 2025 19:55:40 +0100 Subject: [PATCH 22/30] chore: update subproject commit reference in sdk --- sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk b/sdk index 61a417068c..79216f0732 160000 --- a/sdk +++ b/sdk @@ -1 +1 @@ -Subproject commit 61a417068c27b8757fd1fe4cf71b35c241aaf1b4 +Subproject commit 79216f0732abe7b08d2ef8390af51049a48a439c From 1d3ab65202173a1695c21f551a45bb3b962fda0e Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 5 Nov 2025 11:15:15 +0800 Subject: [PATCH 23/30] disable NFT page in sidebar menu --- assets/translations/en.json | 1 + lib/generated/codegen_loader.g.dart | 1 + .../common/main_menu/main_menu_bar_mobile.dart | 11 +++++++---- .../common/main_menu/main_menu_desktop.dart | 16 ++++++++++------ 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/assets/translations/en.json b/assets/translations/en.json index 31e9b2a67a..b33edc6036 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -750,6 +750,7 @@ "trend7d": "7d trend", "tradingDisabledTooltip": "Trading features are currently disabled", "tradingDisabled": "Trading unavailable in your location", + "nftDisabledTooltip": "NFT functionality is currently disabled. Improvements are on the way!", "includeBlockedAssets": "Include blocked assets", "unbanPubkeysResults": "Unban Pubkeys Results", "unbannedPubkeys": { diff --git a/lib/generated/codegen_loader.g.dart b/lib/generated/codegen_loader.g.dart index 9bd6b5edfa..aeadb58ad1 100644 --- a/lib/generated/codegen_loader.g.dart +++ b/lib/generated/codegen_loader.g.dart @@ -744,6 +744,7 @@ abstract class LocaleKeys { static const trend7d = 'trend7d'; static const tradingDisabledTooltip = 'tradingDisabledTooltip'; static const tradingDisabled = 'tradingDisabled'; + static const nftDisabledTooltip = 'nftDisabledTooltip'; static const includeBlockedAssets = 'includeBlockedAssets'; static const unbanPubkeysResults = 'unbanPubkeysResults'; static const unbannedPubkeys = 'unbannedPubkeys'; diff --git a/lib/views/common/main_menu/main_menu_bar_mobile.dart b/lib/views/common/main_menu/main_menu_bar_mobile.dart index 1cb66a7110..71bbaf4759 100644 --- a/lib/views/common/main_menu/main_menu_bar_mobile.dart +++ b/lib/views/common/main_menu/main_menu_bar_mobile.dart @@ -94,10 +94,13 @@ class MainMenuBarMobile extends StatelessWidget { ), ), Expanded( - child: MainMenuBarMobileItem( - value: MainMenuValue.nft, - enabled: currentWallet?.isHW != true, - isActive: selected == MainMenuValue.nft, + child: Tooltip( + message: LocaleKeys.nftDisabledTooltip.tr(), + child: MainMenuBarMobileItem( + value: MainMenuValue.nft, + enabled: false, + isActive: selected == MainMenuValue.nft, + ), ), ), Expanded( diff --git a/lib/views/common/main_menu/main_menu_desktop.dart b/lib/views/common/main_menu/main_menu_desktop.dart index 4ae6450582..364ef7956e 100644 --- a/lib/views/common/main_menu/main_menu_desktop.dart +++ b/lib/views/common/main_menu/main_menu_desktop.dart @@ -135,12 +135,16 @@ class _MainMenuDesktopState extends State { ), ), ), - DesktopMenuDesktopItem( - key: const Key('main-menu-nft'), - enabled: currentWallet?.isHW != true, - menu: MainMenuValue.nft, - onTap: onTapItem, - isSelected: _checkSelectedItem(MainMenuValue.nft), + Tooltip( + message: LocaleKeys.nftDisabledTooltip.tr(), + child: DesktopMenuDesktopItem( + key: const Key('main-menu-nft'), + enabled: false, + menu: MainMenuValue.nft, + onTap: onTapItem, + isSelected: + _checkSelectedItem(MainMenuValue.nft), + ), ), const Spacer(), Divider(thickness: 1), From dacf5035780a24eadf48ea8adbf7f31019d8fb19 Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 5 Nov 2025 11:32:15 +0800 Subject: [PATCH 24/30] fix macos app icons --- .../AppIcon.appiconset/app_icon_.png | Bin 0 -> 174 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 16192 -> 9586 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 1902 -> 1226 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 39083 -> 26985 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 3280 -> 1963 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 114324 -> 94598 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 7116 -> 4062 bytes 7 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_.png diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_.png new file mode 100644 index 0000000000000000000000000000000000000000..516ee96418dcdb4d255ec22fad62aa352887e70b GIT binary patch literal 174 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 literal 16192 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 ez3=?59seJMMDapx*pHb20000CAe zn-7AB#pz^B9+?mZGXdtzh6{v8k#{K)D1A}N%7T;I- zAhdD>c{k^7Yg8bD*r#&C`5^$HJuq<3jYgjw_H45FKb*nDJ)b@@r;57i6*_9AAtrAy zHMKjaRFjg{b6BDEt1%^|D-Tu~6Epj$RYw166XW)@Kt7Zu=nQyZh%6lS`q7e{n}|RvHi8)rDN2L@z^pEc*0teD?E%qkYNJ zUJ=&q(=Z2v007NdHz(OwC&G)>+``eQf|0o6{Qyfz>jhRGEr0sd&q1re`+B-U%g-N* z%jpN6kn(J{Knj{1{C);T00H)uiLguR$S+g?i_INK$m&a$;7tH|pl%i@F>h&bo;V+z zC;#LSXpcYM4_1hiyCm_Qfb{*r47LCg>;l!;MoPMo0?yzYy+X?@(?G32j{63M(zuSz zAe6tZJvA(l4Pv4mhycU?%q<+{of%2YP{I~ox2>N82}il@8xmfC1Wu6(suDAmpcE%2 z?EJ@vdwSRrOa~vpB~eNjH2K?1=D*DZfw)}*DH|q0Lt3SAQ+V8_Iq6F3cleGr*9UrI zPYei;JqNa64uGKqMu5qiON_WU#yvXco`N`8AuZgpB&yyEfT=N)HN-bvyNH+Lur|n@%FO+Sp<9%Tha%ySv*lU8~%w zwu$84V4l@1WNmS~Db`7yTPAnLtZ7%5nDj-{zF^xb%cgZzHV`waNuTvCTU*?nnyW)C z5<6EGeVbkSvITW4F-eF->1>H3rE#fA!eC09ZH*L4iEVAZghD`TbTug9e2g~+-0ehR zM_64ioBa&%LXe>mAp{d?i-VhQ=m&iG+3dEVEGFM&P>f+%X)Kq|i-{75MN-86oftW} zcS5M9709fMWT!C~)z@Fy6y=IL330;sag{pPOBFDeCp%%#iKg;%C*}>x_9=}?|3|yo zY~1PWvi-fcx;mWmcLiQJ?6Z%y$8SG{I#YjeO2Q_gbiV#`o_(EjoWrQ~BiTZI7hKXMgV!yoznm zU^k>mZJd|IWlJmMkNmUM9v_kxJ+)SL$ GF8l>6u1tRb delta 1898 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 Fm;#2 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 M07*qoM6N<$f*?wxYybcN literal 39083 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 LNkvXXu0mjf!PHf- diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png index d42984244f96c082a4210e8834a940ca418c88e9..146c18ce2bb186fd4fdbf32be0fa911ebe375d2b 100644 GIT binary patch literal 94598 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�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 QF8}}l07*qoM6N<$f*G>U1^@s6 literal 7116 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 Date: Wed, 5 Nov 2025 17:54:29 +0800 Subject: [PATCH 25/30] bypass ARRR autoactivation if sync params have not been previously defined --- lib/bloc/coins_bloc/coins_bloc.dart | 45 ++++++++++++++++++- .../coins_manager/coins_manager_bloc.dart | 15 +++++++ 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/lib/bloc/coins_bloc/coins_bloc.dart b/lib/bloc/coins_bloc/coins_bloc.dart index 8721b25cf6..9b0fc9824c 100644 --- a/lib/bloc/coins_bloc/coins_bloc.dart +++ b/lib/bloc/coins_bloc/coins_bloc.dart @@ -523,10 +523,18 @@ class CoinsBloc extends Bloc { .map((assetsSet) => assetsSet.single); // Filter out blocked assets - final coinsToActivate = _tradingStatusService.filterAllowedAssets( + var coinsToActivate = _tradingStatusService.filterAllowedAssets( availableAssets.toList(), ); + // During initial login auto-activation, skip ZHTLC assets that would + // trigger configuration dialogs (i.e. no saved configuration yet). + if (_isInitialActivationInProgress) { + coinsToActivate = await _filterAssetsForInitialActivation( + coinsToActivate, + ); + } + final enableFutures = coinsToActivate .map((asset) => _coinsRepo.activateAssetsSync([asset])) .toList(); @@ -536,6 +544,41 @@ class CoinsBloc extends Bloc { await Future.wait(enableFutures); } + /// Filters assets for initial auto-activation on login. + /// + /// - Keeps all non-ZHTLC assets + /// - Keeps ZHTLC assets only if a saved configuration already exists + Future> _filterAssetsForInitialActivation( + List assets, + ) async { + final filtered = []; + for (final asset in assets) { + if (asset.id.subClass != CoinSubClass.zhtlc) { + filtered.add(asset); + continue; + } + + try { + final saved = + await _kdfSdk.activationConfigService.getSavedZhtlc(asset.id); + if (saved != null) { + filtered.add(asset); + } else { + _log.info( + 'Skipping auto-activation of ZHTLC asset ${asset.id.id} during login: no saved configuration found', + ); + } + } catch (e, s) { + _log.shout( + 'Error checking saved ZHTLC configuration for ${asset.id.id}', + e, + s, + ); + } + } + return filtered; + } + CoinsState _prePopulateListWithActivatingCoins(Iterable coins) { final knownCoins = _coinsRepo.getKnownCoinsMap(); final activatingCoins = Map.fromIterable( diff --git a/lib/bloc/coins_manager/coins_manager_bloc.dart b/lib/bloc/coins_manager/coins_manager_bloc.dart index e59b5856d1..7939f1cecf 100644 --- a/lib/bloc/coins_manager/coins_manager_bloc.dart +++ b/lib/bloc/coins_manager/coins_manager_bloc.dart @@ -374,6 +374,21 @@ class CoinsManagerBloc extends Bloc { final selectedCoinIds = result.map((c) => c.id.id).toSet(); for (final walletCoin in walletCoins) { + // Do not pre-select ZHTLC coins without saved configuration. + // This ensures toggles remain OFF if auto-activation was bypassed. + if (walletCoin.id.subClass == CoinSubClass.zhtlc) { + try { + final saved = + await _sdk.activationConfigService.getSavedZhtlc(walletCoin.id); + if (saved == null) { + continue; + } + } catch (_) { + // On any error, be conservative and keep toggle OFF + continue; + } + } + if (!selectedCoinIds.contains(walletCoin.id.id)) { result.add(walletCoin); } From 0587b3472a7ff647f7c12b3a1b248ab261b1e47f Mon Sep 17 00:00:00 2001 From: smk762 Date: Wed, 5 Nov 2025 18:20:25 +0800 Subject: [PATCH 26/30] fix missing import --- lib/bloc/coins_manager/coins_manager_bloc.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/bloc/coins_manager/coins_manager_bloc.dart b/lib/bloc/coins_manager/coins_manager_bloc.dart index 7939f1cecf..3a464025a6 100644 --- a/lib/bloc/coins_manager/coins_manager_bloc.dart +++ b/lib/bloc/coins_manager/coins_manager_bloc.dart @@ -3,6 +3,7 @@ import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart' show Bloc, Emitter; import 'package:komodo_defi_sdk/komodo_defi_sdk.dart'; +import 'package:komodo_defi_types/komodo_defi_types.dart' show CoinSubClass; import 'package:komodo_ui_kit/komodo_ui_kit.dart'; import 'package:logging/logging.dart'; import 'package:web_dex/analytics/events/portfolio_events.dart'; From 4df5e843ac1ffc1e5af1fef58bb18510269c808a Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Wed, 5 Nov 2025 12:37:15 +0100 Subject: [PATCH 27/30] feat: add photo library usage description to Info.plist for QR code import functionality --- ios/Runner/Info.plist | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 2f37ec4f57..e09082eda8 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -31,6 +31,8 @@ NSCameraUsageDescription This app needs camera access to scan QR codes + NSPhotoLibraryUsageDescription + This app needs access to your photo library to import QR codes UIApplicationSupportsIndirectInputEvents UILaunchStoryboardName From 61c1f5608c827e3184cd862bb0dd8c863cfd3bc4 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Wed, 5 Nov 2025 17:26:06 +0100 Subject: [PATCH 28/30] Enhance iOS file sharing functionality by adding share position origin and updating share method to use SharePlus with appropriate parameters for text and compressed files. --- .../mobile/file_loader_native_ios.dart | 40 ++++++++++++++++++- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/lib/services/file_loader/mobile/file_loader_native_ios.dart b/lib/services/file_loader/mobile/file_loader_native_ios.dart index 5f6cf830a7..5e917c9022 100644 --- a/lib/services/file_loader/mobile/file_loader_native_ios.dart +++ b/lib/services/file_loader/mobile/file_loader_native_ios.dart @@ -1,15 +1,27 @@ import 'dart:io'; import 'package:file_picker/file_picker.dart'; +import 'package:flutter/material.dart'; import 'package:path/path.dart' as path; import 'package:path_provider/path_provider.dart'; import 'package:share_plus/share_plus.dart'; +import 'package:web_dex/common/screen.dart'; import 'package:web_dex/services/file_loader/file_loader.dart'; import 'package:web_dex/shared/utils/zip.dart'; class FileLoaderNativeIOS implements FileLoader { const FileLoaderNativeIOS(); + Rect? _getSharePositionOrigin() { + final context = materialPageContext; + if (context == null) return null; + + final box = context.findRenderObject() as RenderBox?; + if (box == null) return null; + + return box.localToGlobal(Offset.zero) & box.size; + } + @override Future save({ required String fileName, @@ -19,8 +31,10 @@ class FileLoaderNativeIOS implements FileLoader { switch (type) { case LoadFileType.text: await _saveAsTextFile(fileName: fileName, data: data); + break; case LoadFileType.compressed: await _saveAsCompressedFile(fileName: fileName, data: data); + break; } } @@ -33,7 +47,18 @@ class FileLoaderNativeIOS implements FileLoader { final File file = File(filePath); await file.writeAsString(data); - await Share.shareXFiles([XFile(file.path)]); + await SharePlus.instance.share( + ShareParams( + files: [ + XFile( + file.path, + name: '$fileName.txt', + mimeType: 'text/plain', + ) + ], + sharePositionOrigin: _getSharePositionOrigin(), + ), + ); } Future _saveAsCompressedFile({ @@ -49,7 +74,18 @@ class FileLoaderNativeIOS implements FileLoader { final File compressedFile = File(filePath); await compressedFile.writeAsBytes(compressedBytes); - await Share.shareXFiles([XFile(compressedFile.path)]); + await SharePlus.instance.share( + ShareParams( + files: [ + XFile( + compressedFile.path, + name: '$fileName.zip', + mimeType: 'application/zip', + ) + ], + sharePositionOrigin: _getSharePositionOrigin(), + ), + ); } @override From 96c1baa2f93d2c46446ee352052723d48a764acc Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Wed, 5 Nov 2025 17:38:08 +0100 Subject: [PATCH 29/30] Update iOS file loader to use scaffold context for share position origin and correct import path for app configuration. --- lib/services/file_loader/mobile/file_loader_native_ios.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/services/file_loader/mobile/file_loader_native_ios.dart b/lib/services/file_loader/mobile/file_loader_native_ios.dart index 5e917c9022..b5f0bdf224 100644 --- a/lib/services/file_loader/mobile/file_loader_native_ios.dart +++ b/lib/services/file_loader/mobile/file_loader_native_ios.dart @@ -5,7 +5,7 @@ import 'package:flutter/material.dart'; import 'package:path/path.dart' as path; import 'package:path_provider/path_provider.dart'; import 'package:share_plus/share_plus.dart'; -import 'package:web_dex/common/screen.dart'; +import 'package:web_dex/app_config/app_config.dart'; import 'package:web_dex/services/file_loader/file_loader.dart'; import 'package:web_dex/shared/utils/zip.dart'; @@ -13,7 +13,7 @@ class FileLoaderNativeIOS implements FileLoader { const FileLoaderNativeIOS(); Rect? _getSharePositionOrigin() { - final context = materialPageContext; + final context = scaffoldKey.currentContext; if (context == null) return null; final box = context.findRenderObject() as RenderBox?; From 578009662955c26883723db562d594b773e8f43e Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Thu, 6 Nov 2025 20:23:38 +0100 Subject: [PATCH 30/30] Fix: Prevent state loss in private key retrieval and improve empty keys handling (#3375) * refactor: improve handling of private keys in security settings to prevent state loss during async operations * debug: private key retrieval and cache * feat: add handling for empty private keys in security settings to improve user feedback * feat: clear previously stored private keys to prevent stale data in security settings * refactor: remove redundant clearing of fetched keys in security settings to streamline error handling * fix: ensure state preservation by updating private keys within setState in security settings --- assets/translations/en.json | 1 + lib/generated/codegen_loader.g.dart | 1 + .../security_settings_page.dart | 48 +++++++++++++++---- 3 files changed, 41 insertions(+), 9 deletions(-) diff --git a/assets/translations/en.json b/assets/translations/en.json index b33edc6036..60ab6a2a91 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -769,6 +769,7 @@ "noBannedPubkeys": "No banned pubkeys found", "unbanPubkeysFailed": "Failed to unban pubkeys", "privateKeyRetrievalFailed": "Failed to retrieve private keys. Please try again.", + "privateKeysEmptyError": "No private keys found. Assets may need to be activated. Please try again later.", "fetchingPrivateKeysTitle": "Fetching Private Keys...", "fetchingPrivateKeysMessage": "Please wait while we securely fetch your private keys...", "pubkeyType": "Type", diff --git a/lib/generated/codegen_loader.g.dart b/lib/generated/codegen_loader.g.dart index aeadb58ad1..ceb3c15a21 100644 --- a/lib/generated/codegen_loader.g.dart +++ b/lib/generated/codegen_loader.g.dart @@ -756,6 +756,7 @@ abstract class LocaleKeys { static const noBannedPubkeys = 'noBannedPubkeys'; static const unbanPubkeysFailed = 'unbanPubkeysFailed'; static const privateKeyRetrievalFailed = 'privateKeyRetrievalFailed'; + static const privateKeysEmptyError = 'privateKeysEmptyError'; static const fetchingPrivateKeysTitle = 'fetchingPrivateKeysTitle'; static const fetchingPrivateKeysMessage = 'fetchingPrivateKeysMessage'; static const pubkeyType = 'pubkeyType'; diff --git a/lib/views/settings/widgets/security_settings/security_settings_page.dart b/lib/views/settings/widgets/security_settings/security_settings_page.dart index 0cf6016229..14f8b06599 100644 --- a/lib/views/settings/widgets/security_settings/security_settings_page.dart +++ b/lib/views/settings/widgets/security_settings/security_settings_page.dart @@ -245,29 +245,44 @@ class _SecuritySettingsPageState extends State { /// /// This approach provides better UX by showing loading state during the entire operation. Future onViewPrivateKeysPressed(BuildContext context) async { + // IMPORTANT: Store keys in a local variable first to avoid state loss during async operations. + // The onPasswordValidated callback executes asynchronously within WidgetsBinding.instance.addPostFrameCallback, + // and setting _sdkPrivateKeys directly inside the callback may cause the state to be lost when the widget + // rebuilds or when the dialog closes. By storing data in a local variable first and then assigning it to + // _sdkPrivateKeys AFTER the dialog closes, we ensure the state is preserved when the widget rebuilds. + Map>? fetchedKeys; + bool isEmptyKeys = false; + + // Store SDK reference before async operations to avoid BuildContext usage across async gaps + final sdk = context.sdk; + final bool success = await walletPasswordDialogWithLoading( context, onPasswordValidated: (String password) async { try { // Fetch private keys directly into local UI state // This keeps sensitive data in minimal scope - final privateKeys = await context.sdk.security.getPrivateKeys(); + final privateKeys = await sdk.security.getPrivateKeys(); + + // Check if private keys are empty (e.g., when coins haven't been activated yet) + if (privateKeys.isEmpty) { + isEmptyKeys = true; + return false; // Failure - empty private keys + } // Filter out excluded assets (NFTs only) // Geo-blocked assets are handled by the UI toggle final filteredPrivateKeyEntries = privateKeys.entries.where( (entry) => !excludedAssetList.contains(entry.key.id), ); - _sdkPrivateKeys = Map.fromEntries(filteredPrivateKeyEntries); + fetchedKeys = Map.fromEntries(filteredPrivateKeyEntries); return true; // Success } catch (e) { - // Clear sensitive data on any error + isEmptyKeys = false; // Exception occurred, not empty keys + // Clear any previously stored private keys to prevent stale data from persisting _clearPrivateKeyData(); - // Log error for debugging - debugPrint('Failed to retrieve private keys: ${e.toString()}'); - return false; // Failure } }, @@ -277,16 +292,31 @@ class _SecuritySettingsPageState extends State { passwordFieldKey: 'confirmation-showing-private-keys', ); - if (!mounted) return; + if (!mounted) { + return; + } - if (success) { + if (success && fetchedKeys != null) { + // Set the keys AFTER dialog closes to ensure state is preserved + setState(() { + _sdkPrivateKeys = fetchedKeys; + }); + // Clear the local reference to minimize the number of places holding sensitive data + // Note: fetchedKeys is a reference to the same Map object, so we only set it to null + // to remove the extra reference, not clear() which would clear the data used by _sdkPrivateKeys + fetchedKeys = null; + // Private keys are ready, show the private keys screen // ignore: use_build_context_synchronously context.read().add(const ShowPrivateKeysEvent()); } else { // Show error to user + // Check if failure was due to empty private keys + final errorMessage = isEmptyKeys + ? LocaleKeys.privateKeysEmptyError.tr() + : LocaleKeys.privateKeyRetrievalFailed.tr(); // ignore: use_build_context_synchronously - _showPrivateKeyError(context, LocaleKeys.privateKeyRetrievalFailed.tr()); + _showPrivateKeyError(context, errorMessage); } }