@@ -142,8 +142,11 @@ class ReceiveBloc extends Bloc<ReceiveEvent, ReceiveState> {
142142 /// contribute as an input. Unconfirmed counts: the contribution path draws
143143 /// from BDK's listUnspent (which includes unconfirmed outputs), so waiting
144144 /// for a confirmation only delays payjoin activation on fresh wallets;
145- /// worst case a strict sender rejects a proposal spending an unconfirmed
146- /// input and the payment falls back to a normal broadcast.
145+ /// worst case is not just a strict sender rejecting the proposal (falling
146+ /// back to a normal broadcast): a payjoin tx spending our unconfirmed
147+ /// input can be invalidated by an RBF of that input's parent after both
148+ /// sides consider the payment done. _filterAvailableUtxos preferring
149+ /// confirmed UTXOs when available is the cheap mitigation.
147150 bool _isPayjoinEligible (Wallet wallet, bool payjoinEnabled) =>
148151 wallet.signsLocally && payjoinEnabled && wallet.balanceSat > BigInt .zero;
149152
@@ -236,7 +239,7 @@ class ReceiveBloc extends Bloc<ReceiveEvent, ReceiveState> {
236239
237240 // If the payjoin receiver is not set yet, we need to create it, but only
238241 // if the wallet is eligible (see _isPayjoinEligible: not watch-only,
239- // payjoin enabled globally, and a confirmed balance to contribute) —
242+ // payjoin enabled globally, and a balance to contribute) —
240243 // when disabled the QR must never advertise a pj= endpoint, or the
241244 // sender's wallet would attempt a payjoin nobody here will process.
242245 //
0 commit comments