Browse Source

payment_identifier: return onchain invoice when GUI requests MAX amount (fixes #8900)

master
Sander van Grieken 2 years ago
parent
commit
ef87fbd3e5
No known key found for this signature in database
GPG Key ID: 9BCF8209EA402EBA
  1. 4
      electrum/gui/qt/send_tab.py
  2. 6
      electrum/payment_identifier.py

4
electrum/gui/qt/send_tab.py

@ -3,7 +3,7 @@
# file LICENCE or http://www.opensource.org/licenses/mit-license.php # file LICENCE or http://www.opensource.org/licenses/mit-license.php
from decimal import Decimal 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.QtCore import pyqtSignal, QPoint, QSize, Qt
from PyQt5.QtWidgets import (QLabel, QVBoxLayout, QGridLayout, QHBoxLayout, from PyQt5.QtWidgets import (QLabel, QVBoxLayout, QGridLayout, QHBoxLayout,
QWidget, QToolTip, QPushButton, QApplication) QWidget, QToolTip, QPushButton, QApplication)
@ -600,7 +600,7 @@ class SendTab(QWidget, MessageBoxMixin, Logger):
else: else:
self.pay_onchain_dialog(invoice.outputs, invoice=invoice) 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() amount = '!' if self.max_button.isChecked() else self.get_amount()
return amount return amount

6
electrum/payment_identifier.py

@ -675,11 +675,13 @@ class PaymentIdentifier(Logger):
def invoice_from_payment_identifier( def invoice_from_payment_identifier(
pi: 'PaymentIdentifier', pi: 'PaymentIdentifier',
wallet: 'Abstract_Wallet', wallet: 'Abstract_Wallet',
amount_sat: int, amount_sat: Union[int, str],
message: str = None message: str = None
) -> Optional[Invoice]: ) -> Optional[Invoice]:
assert pi.state in [PaymentIdentifierState.AVAILABLE, PaymentIdentifierState.MERCHANT_NOTIFY] 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 invoice = pi.bolt11
if not invoice: if not invoice:
return return

Loading…
Cancel
Save