invoices: minor clean-up (type hints, mark broken things)
also rm some dead code
This commit is contained in:
@@ -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('')
|
||||
|
||||
@@ -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(),
|
||||
)
|
||||
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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', '')
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user