From ef87fbd3e53b41a877821bd085bf238d2fd73e4b Mon Sep 17 00:00:00 2001 From: Sander van Grieken Date: Mon, 19 Feb 2024 10:35:55 +0100 Subject: [PATCH] payment_identifier: return onchain invoice when GUI requests MAX amount (fixes #8900) --- electrum/gui/qt/send_tab.py | 4 ++-- electrum/payment_identifier.py | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/electrum/gui/qt/send_tab.py b/electrum/gui/qt/send_tab.py index 8625947e8..4fbd4745c 100644 --- a/electrum/gui/qt/send_tab.py +++ b/electrum/gui/qt/send_tab.py @@ -3,7 +3,7 @@ # file LICENCE or http://www.opensource.org/licenses/mit-license.php from decimal import Decimal -from typing import Optional, TYPE_CHECKING, Sequence, List, Callable +from typing import Optional, TYPE_CHECKING, Sequence, List, Callable, Union from PyQt5.QtCore import pyqtSignal, QPoint, QSize, Qt from PyQt5.QtWidgets import (QLabel, QVBoxLayout, QGridLayout, QHBoxLayout, QWidget, QToolTip, QPushButton, QApplication) @@ -600,7 +600,7 @@ class SendTab(QWidget, MessageBoxMixin, Logger): else: self.pay_onchain_dialog(invoice.outputs, invoice=invoice) - def read_amount(self) -> List[PartialTxOutput]: + def read_amount(self) -> Union[int, str]: amount = '!' if self.max_button.isChecked() else self.get_amount() return amount diff --git a/electrum/payment_identifier.py b/electrum/payment_identifier.py index ce8698532..815a736d5 100644 --- a/electrum/payment_identifier.py +++ b/electrum/payment_identifier.py @@ -675,11 +675,13 @@ class PaymentIdentifier(Logger): def invoice_from_payment_identifier( pi: 'PaymentIdentifier', wallet: 'Abstract_Wallet', - amount_sat: int, + amount_sat: Union[int, str], message: str = None ) -> Optional[Invoice]: assert pi.state in [PaymentIdentifierState.AVAILABLE, PaymentIdentifierState.MERCHANT_NOTIFY] - if pi.is_lightning(): + assert pi.is_onchain() if amount_sat == '!' else True # MAX should only be allowed if pi has onchain destination + + if pi.is_lightning() and not amount_sat == '!': invoice = pi.bolt11 if not invoice: return