tlightning_tx_dialog.py - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- tlightning_tx_dialog.py (4669B) --- 1 #!/usr/bin/env python 2 # 3 # Electrum - lightweight Bitcoin client 4 # Copyright (C) 2020 The Electrum Developers 5 # 6 # Permission is hereby granted, free of charge, to any person 7 # obtaining a copy of this software and associated documentation files 8 # (the "Software"), to deal in the Software without restriction, 9 # including without limitation the rights to use, copy, modify, merge, 10 # publish, distribute, sublicense, and/or sell copies of the Software, 11 # and to permit persons to whom the Software is furnished to do so, 12 # subject to the following conditions: 13 # 14 # The above copyright notice and this permission notice shall be 15 # included in all copies or substantial portions of the Software. 16 # 17 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 18 # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19 # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 20 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 21 # BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 22 # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 23 # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 24 # SOFTWARE. 25 26 from typing import TYPE_CHECKING 27 from decimal import Decimal 28 import datetime 29 30 from PyQt5.QtGui import QFont 31 from PyQt5.QtWidgets import QVBoxLayout, QLabel, QGridLayout 32 33 from electrum.i18n import _ 34 from electrum.invoices import LNInvoice 35 36 from .util import WindowModalDialog, ButtonsLineEdit, ColorScheme, Buttons, CloseButton, MONOSPACE_FONT 37 from .qrtextedit import ShowQRTextEdit 38 39 if TYPE_CHECKING: 40 from .main_window import ElectrumWindow 41 42 43 44 class LightningTxDialog(WindowModalDialog): 45 46 def __init__(self, parent: 'ElectrumWindow', tx_item: dict): 47 WindowModalDialog.__init__(self, parent, _("Lightning Payment")) 48 self.parent = parent 49 self.is_sent = bool(tx_item['direction'] == 'sent') 50 self.label = tx_item['label'] 51 self.timestamp = tx_item['timestamp'] 52 self.amount = Decimal(tx_item['amount_msat']) / 1000 53 self.payment_hash = tx_item['payment_hash'] 54 self.preimage = tx_item['preimage'] 55 invoice = (self.parent.wallet.get_invoice(self.payment_hash) 56 or self.parent.wallet.get_request(self.payment_hash)) 57 if invoice: 58 assert isinstance(invoice, LNInvoice), f"{self.invoice!r}" 59 self.invoice = invoice.invoice 60 else: 61 self.invoice = '' 62 63 self.setMinimumWidth(700) 64 vbox = QVBoxLayout() 65 self.setLayout(vbox) 66 67 # FIXME fiat values here are using today's FX rate instead of historical 68 vbox.addWidget(QLabel(_("Amount") + ": " + self.parent.format_amount_and_units(self.amount))) 69 if self.is_sent: 70 fee = Decimal(tx_item['fee_msat']) / 1000 71 vbox.addWidget(QLabel(_("Fee") + ": " + self.parent.format_amount_and_units(fee))) 72 time_str = datetime.datetime.fromtimestamp(self.timestamp).isoformat(' ')[:-3] 73 vbox.addWidget(QLabel(_("Date") + ": " + time_str)) 74 75 qr_icon = "qrcode_white.png" if ColorScheme.dark_scheme else "qrcode.png" 76 77 vbox.addWidget(QLabel(_("Payment hash") + ":")) 78 self.hash_e = ButtonsLineEdit(self.payment_hash) 79 self.hash_e.addCopyButton(self.parent.app) 80 self.hash_e.addButton(qr_icon, 81 self.show_qr(self.hash_e, _("Payment hash")), 82 _("Show QR Code")) 83 self.hash_e.setReadOnly(True) 84 self.hash_e.setFont(QFont(MONOSPACE_FONT)) 85 vbox.addWidget(self.hash_e) 86 87 vbox.addWidget(QLabel(_("Preimage") + ":")) 88 self.preimage_e = ButtonsLineEdit(self.preimage) 89 self.preimage_e.addCopyButton(self.parent.app) 90 self.preimage_e.addButton(qr_icon, 91 self.show_qr(self.preimage_e, _("Preimage")), 92 _("Show QR Code")) 93 self.preimage_e.setReadOnly(True) 94 self.preimage_e.setFont(QFont(MONOSPACE_FONT)) 95 vbox.addWidget(self.preimage_e) 96 97 vbox.addWidget(QLabel(_("Lightning Invoice") + ":")) 98 self.invoice_e = ShowQRTextEdit(self.invoice, config=parent.config) 99 self.invoice_e.setMaximumHeight(150) 100 self.invoice_e.addCopyButton(self.parent.app) 101 vbox.addWidget(self.invoice_e) 102 103 vbox.addLayout(Buttons(CloseButton(self))) 104 105 def show_qr(self, line_edit, title=''): 106 def f(): 107 text = line_edit.text() 108 try: 109 self.parent.show_qrcode(text, title, parent=self) 110 except Exception as e: 111 self.show_message(repr(e)) 112 return f