@@ -9,7 +9,6 @@ import 'package:bb_mobile/core/utils/logger.dart';
99import 'package:bb_mobile/core/utils/result.dart' ;
1010import 'package:bb_mobile/core/wallet/domain/entities/wallet.dart' ;
1111import 'package:bb_mobile/core/wallet/domain/entities/wallet_utxo.dart' ;
12- import 'package:bb_mobile/core/wallet/domain/usecases/calculate_bitcoin_absolute_fees_usecase.dart' ;
1312import 'package:bb_mobile/core/wallet/domain/usecases/prepare_bitcoin_send_usecase.dart' ;
1413import 'package:bb_mobile/features/labels/labels_facade.dart' ;
1514import 'package:bb_mobile/features/sell/domain/sell_failure.dart' ;
@@ -33,21 +32,20 @@ Future<String> _defaultLiquidTxidFromPset(String pset) async =>
3332
3433/// Builds, signs and broadcasts the payin transaction for a sell order.
3534///
36- /// The broadcast is the point of no return: once it succeeds the user's money
37- /// has moved, so the payin is reported as a success even if the after-the-fact
35+ /// The broadcast is the point of no return: once it succeeds the money has
36+ /// moved, so the payin is reported as a success even if the after-the-fact
3837/// bookkeeping (transaction labelling) fails — that is logged but never turned
3938/// into a [SellSendPaymentFailure] , which would otherwise invite a double-spend
4039/// retry. Every failure before or during broadcast is mapped to a sealed
41- /// [SellFailure] , and the raw exception never leaves the boundary.
40+ /// [SellFailure] ; the raw exception is logged for diagnosis but never carried
41+ /// in the failure value that reaches bloc state.
4242class ConfirmSellPayinUsecase {
4343 final PrepareBitcoinSendUsecase _prepareBitcoinSendUsecase;
4444 final PrepareLiquidSendUsecase _prepareLiquidSendUsecase;
4545 final SignBitcoinTxUsecase _signBitcoinTxUsecase;
4646 final SignLiquidTxUsecase _signLiquidTxUsecase;
4747 final BroadcastBitcoinTransactionUsecase _broadcastBitcoinTransactionUsecase;
4848 final BroadcastLiquidTransactionUsecase _broadcastLiquidTransactionUsecase;
49- final CalculateBitcoinAbsoluteFeesUsecase
50- _calculateBitcoinAbsoluteFeesUsecase;
5149 final LabelsFacade _labelsFacade;
5250 final BitcoinTxidFromPsbt _bitcoinTxidFromPsbt;
5351 final LiquidTxidFromPset _liquidTxidFromPset;
@@ -59,15 +57,13 @@ class ConfirmSellPayinUsecase {
5957 required this ._signLiquidTxUsecase,
6058 required this ._broadcastBitcoinTransactionUsecase,
6159 required this ._broadcastLiquidTransactionUsecase,
62- required this ._calculateBitcoinAbsoluteFeesUsecase,
6360 required this ._labelsFacade,
6461 this ._bitcoinTxidFromPsbt = _defaultBitcoinTxidFromPsbt,
6562 this ._liquidTxidFromPset = _defaultLiquidTxidFromPset,
6663 });
6764
6865 @useResult
69- Future <Result <({String txid, int ? updatedAbsoluteFees}), SellFailure >>
70- execute ({
66+ Future <Result <String , SellFailure >> execute ({
7167 required Wallet wallet,
7268 required SellOrder sellOrder,
7369 required int ? absoluteFees,
@@ -77,7 +73,6 @@ class ConfirmSellPayinUsecase {
7773 final payinAmountSat = ConvertAmount .btcToSats (sellOrder.payinAmount);
7874
7975 final String txid;
80- final int ? updatedAbsoluteFees;
8176 try {
8277 if (wallet.isLiquid) {
8378 final pset = await _prepareLiquidSendUsecase.execute (
@@ -94,7 +89,6 @@ class ConfirmSellPayinUsecase {
9489 // Derive the txid before broadcasting so nothing fallible runs after
9590 // the money has moved.
9691 txid = await _liquidTxidFromPset (signedPset);
97- updatedAbsoluteFees = null ;
9892 await _broadcastLiquidTransactionUsecase.execute (signedPset);
9993 } else {
10094 if (absoluteFees == null ) {
@@ -108,8 +102,6 @@ class ConfirmSellPayinUsecase {
108102 selectedInputs: selectedInputs.isNotEmpty ? selectedInputs : null ,
109103 replaceByFee: replaceByFee,
110104 );
111- updatedAbsoluteFees = await _calculateBitcoinAbsoluteFeesUsecase
112- .execute (psbt: preparedSend.unsignedPsbt);
113105 final signedTx = await _signBitcoinTxUsecase.execute (
114106 psbt: preparedSend.unsignedPsbt,
115107 walletId: wallet.id,
@@ -121,19 +113,15 @@ class ConfirmSellPayinUsecase {
121113 );
122114 }
123115 } catch (e, st) {
124- log.severe (
125- message: 'sell confirm payin failed' ,
126- error: e.runtimeType,
127- trace: st,
128- );
116+ log.severe (message: 'sell confirm payin failed' , error: e, trace: st);
129117 return Err (SellSendPaymentFailure (e.runtimeType.toString ()));
130118 }
131119
132120 // Broadcast succeeded: the payin is done. Labelling is best-effort and must
133121 // never demote a completed payin to a failure.
134122 await _storeSellLabel (walletId: wallet.id, txid: txid);
135123
136- return Ok (( txid: txid, updatedAbsoluteFees : updatedAbsoluteFees) );
124+ return Ok (txid);
137125 }
138126
139127 Future <void > _storeSellLabel ({
@@ -151,7 +139,7 @@ class ConfirmSellPayinUsecase {
151139 } catch (e, st) {
152140 log.warning (
153141 'sell payin label store failed (payin already broadcast)' ,
154- error: e.runtimeType ,
142+ error: e,
155143 trace: st,
156144 );
157145 }
0 commit comments