|
@ -63,7 +63,8 @@ from electrum.util import (format_time, |
|
|
get_new_wallet_name, send_exception_to_crash_reporter, |
|
|
get_new_wallet_name, send_exception_to_crash_reporter, |
|
|
InvalidBitcoinURI, maybe_extract_bolt11_invoice, NotEnoughFunds, |
|
|
InvalidBitcoinURI, maybe_extract_bolt11_invoice, NotEnoughFunds, |
|
|
NoDynamicFeeEstimates, MultipleSpendMaxTxOutputs, |
|
|
NoDynamicFeeEstimates, MultipleSpendMaxTxOutputs, |
|
|
AddTransactionException, BITCOIN_BIP21_URI_SCHEME) |
|
|
AddTransactionException, BITCOIN_BIP21_URI_SCHEME, |
|
|
|
|
|
InvoiceError) |
|
|
from electrum.invoices import PR_TYPE_ONCHAIN, PR_TYPE_LN, PR_DEFAULT_EXPIRATION_WHEN_CREATING, Invoice |
|
|
from electrum.invoices import PR_TYPE_ONCHAIN, PR_TYPE_LN, PR_DEFAULT_EXPIRATION_WHEN_CREATING, Invoice |
|
|
from electrum.invoices import PR_PAID, PR_FAILED, pr_expiration_values, LNInvoice, OnchainInvoice |
|
|
from electrum.invoices import PR_PAID, PR_FAILED, pr_expiration_values, LNInvoice, OnchainInvoice |
|
|
from electrum.transaction import (Transaction, PartialTxInput, |
|
|
from electrum.transaction import (Transaction, PartialTxInput, |
|
@ -78,7 +79,7 @@ from electrum.exchange_rate import FxThread |
|
|
from electrum.simple_config import SimpleConfig |
|
|
from electrum.simple_config import SimpleConfig |
|
|
from electrum.logging import Logger |
|
|
from electrum.logging import Logger |
|
|
from electrum.lnutil import ln_dummy_address, extract_nodeid, ConnStringFormatError |
|
|
from electrum.lnutil import ln_dummy_address, extract_nodeid, ConnStringFormatError |
|
|
from electrum.lnaddr import lndecode, LnDecodeException |
|
|
from electrum.lnaddr import lndecode, LnDecodeException, LnAddressError |
|
|
|
|
|
|
|
|
from .exception_window import Exception_Hook |
|
|
from .exception_window import Exception_Hook |
|
|
from .amountedit import AmountEdit, BTCAmountEdit, FreezableLineEdit, FeerateEdit |
|
|
from .amountedit import AmountEdit, BTCAmountEdit, FreezableLineEdit, FeerateEdit |
|
@ -1223,10 +1224,11 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger): |
|
|
else: |
|
|
else: |
|
|
return |
|
|
return |
|
|
|
|
|
|
|
|
def create_invoice(self, is_lightning): |
|
|
def create_invoice(self, is_lightning: bool): |
|
|
amount = self.receive_amount_e.get_amount() |
|
|
amount = self.receive_amount_e.get_amount() |
|
|
message = self.receive_message_e.text() |
|
|
message = self.receive_message_e.text() |
|
|
expiry = self.config.get('request_expiry', PR_DEFAULT_EXPIRATION_WHEN_CREATING) |
|
|
expiry = self.config.get('request_expiry', PR_DEFAULT_EXPIRATION_WHEN_CREATING) |
|
|
|
|
|
try: |
|
|
if is_lightning: |
|
|
if is_lightning: |
|
|
if not self.wallet.lnworker.channels: |
|
|
if not self.wallet.lnworker.channels: |
|
|
self.show_error(_("You need to open a Lightning channel first.")) |
|
|
self.show_error(_("You need to open a Lightning channel first.")) |
|
@ -1238,6 +1240,10 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger): |
|
|
if not key: |
|
|
if not key: |
|
|
return |
|
|
return |
|
|
self.address_list.update() |
|
|
self.address_list.update() |
|
|
|
|
|
except (InvoiceError, LnAddressError) as e: |
|
|
|
|
|
self.show_error(_('Error creating payment request') + ':\n' + str(e)) |
|
|
|
|
|
return |
|
|
|
|
|
|
|
|
assert key is not None |
|
|
assert key is not None |
|
|
self.request_list.update() |
|
|
self.request_list.update() |
|
|
self.request_list.select_key(key) |
|
|
self.request_list.select_key(key) |
|
@ -1250,7 +1256,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger): |
|
|
title = _('Invoice') if is_lightning else _('Address') |
|
|
title = _('Invoice') if is_lightning else _('Address') |
|
|
self.do_copy(content, title=title) |
|
|
self.do_copy(content, title=title) |
|
|
|
|
|
|
|
|
def create_bitcoin_request(self, amount, message, expiration) -> Optional[str]: |
|
|
def create_bitcoin_request(self, amount: int, message: str, expiration: int) -> Optional[str]: |
|
|
addr = self.wallet.get_unused_address() |
|
|
addr = self.wallet.get_unused_address() |
|
|
if addr is None: |
|
|
if addr is None: |
|
|
if not self.wallet.is_deterministic(): # imported wallet |
|
|
if not self.wallet.is_deterministic(): # imported wallet |
|
@ -1595,6 +1601,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger): |
|
|
def read_invoice(self): |
|
|
def read_invoice(self): |
|
|
if self.check_send_tab_payto_line_and_show_errors(): |
|
|
if self.check_send_tab_payto_line_and_show_errors(): |
|
|
return |
|
|
return |
|
|
|
|
|
try: |
|
|
if not self._is_onchain: |
|
|
if not self._is_onchain: |
|
|
invoice_str = self.payto_e.lightning_invoice |
|
|
invoice_str = self.payto_e.lightning_invoice |
|
|
if not invoice_str: |
|
|
if not invoice_str: |
|
@ -1621,6 +1628,8 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger): |
|
|
message=message, |
|
|
message=message, |
|
|
pr=self.payment_request, |
|
|
pr=self.payment_request, |
|
|
URI=self.payto_URI) |
|
|
URI=self.payto_URI) |
|
|
|
|
|
except InvoiceError as e: |
|
|
|
|
|
self.show_error(_('Error creating payment') + ':\n' + str(e)) |
|
|
|
|
|
|
|
|
def do_save_invoice(self): |
|
|
def do_save_invoice(self): |
|
|
self.pending_invoice = self.read_invoice() |
|
|
self.pending_invoice = self.read_invoice() |
|
|