commit 0b224ba685b7c4e0fb57f69a31f1f330119233a6
parent 23ea64808d139b45ea7ed2bb0f39e63aaa9bce58
Author: SomberNight <somber.night@protonmail.com>
Date: Sat, 13 Jun 2020 18:54:22 +0200
invoices: minor clean-up (type hints, mark broken things)
also rm some dead code
Diffstat:
5 files changed, 29 insertions(+), 29 deletions(-)
diff --git a/electrum/gui/qt/main_window.py b/electrum/gui/qt/main_window.py
@@ -1159,7 +1159,6 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
def sign_payment_request(self, addr):
alias = self.config.get('alias')
- alias_privkey = None
if alias and self.alias_info:
alias_addr, alias_name, validated = self.alias_info
if alias_addr:
@@ -1230,17 +1229,6 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
tooltip_text = _("{} copied to clipboard").format(title)
QToolTip.showText(QCursor.pos(), tooltip_text, self)
- def export_payment_request(self, addr):
- r = self.wallet.receive_requests.get(addr)
- pr = paymentrequest.serialize_request(r).SerializeToString()
- name = r.id + '.bip70'
- fileName = self.getSaveFileName(_("Select where to save your payment request"), name, "*.bip70")
- if fileName:
- with open(fileName, "wb+") as f:
- f.write(util.to_bytes(pr))
- self.show_message(_("Request saved successfully"))
- self.saved = True
-
def clear_receive_tab(self):
self.receive_payreq_e.setText('')
self.receive_address_e.setText('')
diff --git a/electrum/invoices.py b/electrum/invoices.py
@@ -115,7 +115,7 @@ class OnchainInvoice(Invoice):
id=pr.get_id(),
time=pr.get_time(),
exp=pr.get_expiration_date() - pr.get_time(),
- bip70=pr.raw.hex() if pr else None,
+ bip70=pr.raw.hex(),
requestor=pr.get_requestor(),
)
diff --git a/electrum/paymentrequest.py b/electrum/paymentrequest.py
@@ -25,7 +25,7 @@
import hashlib
import sys
import time
-from typing import Optional, List
+from typing import Optional, List, TYPE_CHECKING
import asyncio
import urllib.parse
@@ -41,13 +41,16 @@ except ImportError:
from . import bitcoin, ecc, util, transaction, x509, rsakey
from .util import bh2u, bfh, make_aiohttp_session
-from .invoices import PR_UNPAID, PR_EXPIRED, PR_PAID, PR_UNKNOWN, PR_INFLIGHT
+from .invoices import OnchainInvoice
from .crypto import sha256
from .bitcoin import address_to_script
from .transaction import PartialTxOutput
from .network import Network
from .logging import get_logger, Logger
+if TYPE_CHECKING:
+ from .simple_config import SimpleConfig
+
_logger = get_logger(__name__)
@@ -315,8 +318,7 @@ class PaymentRequest:
return False, error
-def make_unsigned_request(req):
- from .transaction import Transaction
+def make_unsigned_request(req: 'OnchainInvoice'):
addr = req.get_address()
time = req.time
exp = req.exp
@@ -444,7 +446,7 @@ def sign_request_with_x509(pr, key_path, cert_path):
pr.signature = bytes(sig)
-def serialize_request(req):
+def serialize_request(req): # FIXME this is broken
pr = make_unsigned_request(req)
signature = req.get('sig')
requestor = req.get('name')
@@ -455,7 +457,7 @@ def serialize_request(req):
return pr
-def make_request(config, req):
+def make_request(config: 'SimpleConfig', req: 'OnchainInvoice'):
pr = make_unsigned_request(req)
key_path = config.get('ssl_keyfile')
cert_path = config.get('ssl_certfile')
diff --git a/electrum/plugins/email_requests/qt.py b/electrum/plugins/email_requests/qt.py
@@ -44,6 +44,7 @@ from PyQt5.QtWidgets import (QVBoxLayout, QLabel, QGridLayout, QLineEdit,
from electrum.gui.qt.util import (EnterButton, Buttons, CloseButton, OkButton,
WindowModalDialog, get_parent_main_window)
+from electrum.gui.qt.main_window import ElectrumWindow
from electrum.plugin import BasePlugin, hook
from electrum.paymentrequest import PaymentRequest
@@ -179,7 +180,7 @@ class Plugin(BasePlugin):
window = get_parent_main_window(menu)
menu.addAction(_("Send via e-mail"), lambda: self.send(window, addr))
- def send(self, window, addr):
+ def send(self, window: ElectrumWindow, addr): # FIXME this is broken
from electrum import paymentrequest
r = window.wallet.receive_requests.get(addr)
message = r.get('memo', '')
diff --git a/electrum/wallet.py b/electrum/wallet.py
@@ -267,7 +267,7 @@ class Abstract_Wallet(AddressSynchronizer, ABC):
self.frozen_addresses = set(db.get('frozen_addresses', []))
self.frozen_coins = set(db.get('frozen_coins', [])) # set of txid:vout strings
self.fiat_value = db.get_dict('fiat_value')
- self.receive_requests = db.get_dict('payment_requests')
+ self.receive_requests = db.get_dict('payment_requests') # type: Dict[str, Invoice]
self.invoices = db.get_dict('invoices') # type: Dict[str, Invoice]
self._reserved_addresses = set(db.get('reserved_addresses', []))
@@ -1624,7 +1624,7 @@ class Abstract_Wallet(AddressSynchronizer, ABC):
return True, conf
return False, None
- def get_request_URI(self, req: Invoice):
+ def get_request_URI(self, req: OnchainInvoice) -> str:
addr = req.get_address()
message = self.labels.get(addr, '')
amount = req.amount
@@ -1674,8 +1674,13 @@ class Abstract_Wallet(AddressSynchronizer, ABC):
if x:
return self.export_request(x)
- def export_request(self, x):
- key = x.rhash if x.is_lightning() else x.get_address()
+ def export_request(self, x: Invoice) -> Dict[str, Any]:
+ if x.is_lightning():
+ assert isinstance(x, LNInvoice)
+ key = x.rhash
+ else:
+ assert isinstance(x, OnchainInvoice)
+ key = x.get_address()
status = self.get_request_status(key)
status_str = x.get_status_str(status)
is_lightning = x.is_lightning()
@@ -1695,7 +1700,6 @@ class Abstract_Wallet(AddressSynchronizer, ABC):
if self.lnworker and status == PR_UNPAID:
d['can_receive'] = self.lnworker.can_receive_invoice(x)
else:
- #key = x.id
addr = x.get_address()
paid, conf = self.get_payment_status(addr, x.amount)
d['address'] = addr
@@ -1715,7 +1719,7 @@ class Abstract_Wallet(AddressSynchronizer, ABC):
d['bip70_url'] = request_url
return d
- def export_invoice(self, x):
+ def export_invoice(self, x: Invoice) -> Dict[str, Any]:
status = self.get_invoice_status(x)
status_str = x.get_status_str(status)
is_lightning = x.is_lightning()
@@ -1730,10 +1734,12 @@ class Abstract_Wallet(AddressSynchronizer, ABC):
'status_str': status_str,
}
if is_lightning:
+ assert isinstance(x, LNInvoice)
d['invoice'] = x.invoice
if self.lnworker and status == PR_UNPAID:
d['can_pay'] = self.lnworker.can_pay_invoice(x)
else:
+ assert isinstance(x, OnchainInvoice)
d['outputs'] = [y.to_legacy_tuple() for y in x.outputs]
if x.bip70:
d['bip70'] = x.bip70
@@ -1763,25 +1769,28 @@ class Abstract_Wallet(AddressSynchronizer, ABC):
bip70 = None,
requestor = None)
- def sign_payment_request(self, key, alias, alias_addr, password):
+ def sign_payment_request(self, key, alias, alias_addr, password): # FIXME this is broken
req = self.receive_requests.get(key)
+ assert isinstance(req, OnchainInvoice)
alias_privkey = self.export_private_key(alias_addr, password)
pr = paymentrequest.make_unsigned_request(req)
paymentrequest.sign_request_with_alias(pr, alias, alias_privkey)
+ req.bip70 = pr.raw.hex()
req['name'] = pr.pki_data
req['sig'] = bh2u(pr.signature)
self.receive_requests[key] = req
- def add_payment_request(self, req):
+ def add_payment_request(self, req: Invoice):
if not req.is_lightning():
+ assert isinstance(req, OnchainInvoice)
addr = req.get_address()
if not bitcoin.is_address(addr):
raise Exception(_('Invalid Bitcoin address.'))
if not self.is_mine(addr):
raise Exception(_('Address not in wallet.'))
key = addr
- message = req.message
else:
+ assert isinstance(req, LNInvoice)
key = req.rhash
message = req.message
self.receive_requests[key] = req