mirror of
https://github.com/LBRYFoundation/LBRY-Vault.git
synced 2025-09-04 04:45:16 +00:00
wallet: get_tx_info now returns NamedTuple instead of abomination
This commit is contained in:
parent
271d1a3f1d
commit
205c437d9a
3 changed files with 50 additions and 21 deletions
|
@ -121,11 +121,18 @@ class TxDialog(Factory.Popup):
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
format_amount = self.app.format_amount_and_units
|
format_amount = self.app.format_amount_and_units
|
||||||
tx_hash, self.status_str, self.description, self.can_broadcast, self.can_rbf, amount, fee, height, conf, timestamp, exp_n = self.wallet.get_tx_info(self.tx)
|
tx_details = self.wallet.get_tx_info(self.tx)
|
||||||
self.tx_hash = tx_hash or ''
|
tx_mined_status = tx_details.tx_mined_status
|
||||||
if timestamp:
|
exp_n = tx_details.mempool_depth_bytes
|
||||||
|
amount, fee = tx_details.amount, tx_details.fee
|
||||||
|
self.status_str = tx_details.status
|
||||||
|
self.description = tx_details.label
|
||||||
|
self.can_broadcast = tx_details.can_broadcast
|
||||||
|
self.can_rbf = tx_details.can_bump
|
||||||
|
self.tx_hash = tx_details.txid or ''
|
||||||
|
if tx_mined_status.timestamp:
|
||||||
self.date_label = _('Date')
|
self.date_label = _('Date')
|
||||||
self.date_str = datetime.fromtimestamp(timestamp).isoformat(' ')[:-3]
|
self.date_str = datetime.fromtimestamp(tx_mined_status.timestamp).isoformat(' ')[:-3]
|
||||||
elif exp_n:
|
elif exp_n:
|
||||||
self.date_label = _('Mempool depth')
|
self.date_label = _('Mempool depth')
|
||||||
self.date_str = _('{} from tip').format('%.2f MB'%(exp_n/1000000))
|
self.date_str = _('{} from tip').format('%.2f MB'%(exp_n/1000000))
|
||||||
|
@ -144,7 +151,7 @@ class TxDialog(Factory.Popup):
|
||||||
self.fee_str = format_amount(fee) if fee is not None else _('unknown')
|
self.fee_str = format_amount(fee) if fee is not None else _('unknown')
|
||||||
self.can_sign = self.wallet.can_sign(self.tx)
|
self.can_sign = self.wallet.can_sign(self.tx)
|
||||||
self.ids.output_list.update(self.tx.get_outputs_for_UI())
|
self.ids.output_list.update(self.tx.get_outputs_for_UI())
|
||||||
self.is_local_tx = height == TX_HEIGHT_LOCAL
|
self.is_local_tx = tx_mined_status.height == TX_HEIGHT_LOCAL
|
||||||
self.update_action_button()
|
self.update_action_button()
|
||||||
|
|
||||||
def update_action_button(self):
|
def update_action_button(self):
|
||||||
|
|
|
@ -223,22 +223,25 @@ class TxDialog(QDialog, MessageBoxMixin):
|
||||||
desc = self.desc
|
desc = self.desc
|
||||||
base_unit = self.main_window.base_unit()
|
base_unit = self.main_window.base_unit()
|
||||||
format_amount = self.main_window.format_amount
|
format_amount = self.main_window.format_amount
|
||||||
tx_hash, status, label, can_broadcast, can_rbf, amount, fee, height, conf, timestamp, exp_n = self.wallet.get_tx_info(self.tx)
|
tx_details = self.wallet.get_tx_info(self.tx)
|
||||||
|
tx_mined_status = tx_details.tx_mined_status
|
||||||
|
exp_n = tx_details.mempool_depth_bytes
|
||||||
|
amount, fee = tx_details.amount, tx_details.fee
|
||||||
size = self.tx.estimated_size()
|
size = self.tx.estimated_size()
|
||||||
self.broadcast_button.setEnabled(can_broadcast)
|
self.broadcast_button.setEnabled(tx_details.can_broadcast)
|
||||||
can_sign = not self.tx.is_complete() and \
|
can_sign = not self.tx.is_complete() and \
|
||||||
(self.wallet.can_sign(self.tx) or bool(self.main_window.tx_external_keypairs))
|
(self.wallet.can_sign(self.tx) or bool(self.main_window.tx_external_keypairs))
|
||||||
self.sign_button.setEnabled(can_sign)
|
self.sign_button.setEnabled(can_sign)
|
||||||
self.tx_hash_e.setText(tx_hash or _('Unknown'))
|
self.tx_hash_e.setText(tx_details.txid or _('Unknown'))
|
||||||
if desc is None:
|
if desc is None:
|
||||||
self.tx_desc.hide()
|
self.tx_desc.hide()
|
||||||
else:
|
else:
|
||||||
self.tx_desc.setText(_("Description") + ': ' + desc)
|
self.tx_desc.setText(_("Description") + ': ' + desc)
|
||||||
self.tx_desc.show()
|
self.tx_desc.show()
|
||||||
self.status_label.setText(_('Status:') + ' ' + status)
|
self.status_label.setText(_('Status:') + ' ' + tx_details.status)
|
||||||
|
|
||||||
if timestamp:
|
if tx_mined_status.timestamp:
|
||||||
time_str = datetime.datetime.fromtimestamp(timestamp).isoformat(' ')[:-3]
|
time_str = datetime.datetime.fromtimestamp(tx_mined_status.timestamp).isoformat(' ')[:-3]
|
||||||
self.date_label.setText(_("Date: {}").format(time_str))
|
self.date_label.setText(_("Date: {}").format(time_str))
|
||||||
self.date_label.show()
|
self.date_label.show()
|
||||||
elif exp_n:
|
elif exp_n:
|
||||||
|
|
|
@ -38,7 +38,7 @@ import traceback
|
||||||
from functools import partial
|
from functools import partial
|
||||||
from numbers import Number
|
from numbers import Number
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from typing import TYPE_CHECKING, List, Optional, Tuple, Union
|
from typing import TYPE_CHECKING, List, Optional, Tuple, Union, NamedTuple
|
||||||
|
|
||||||
from .i18n import _
|
from .i18n import _
|
||||||
from .util import (NotEnoughFunds, PrintError, UserCancelled, profiler,
|
from .util import (NotEnoughFunds, PrintError, UserCancelled, profiler,
|
||||||
|
@ -180,6 +180,17 @@ class InternalAddressCorruption(Exception):
|
||||||
"Please restore your wallet from seed, and compare the addresses in both files")
|
"Please restore your wallet from seed, and compare the addresses in both files")
|
||||||
|
|
||||||
|
|
||||||
|
class TxWalletDetails(NamedTuple):
|
||||||
|
txid: Optional[str]
|
||||||
|
status: str
|
||||||
|
label: str
|
||||||
|
can_broadcast: bool
|
||||||
|
can_bump: bool
|
||||||
|
amount: Optional[int]
|
||||||
|
fee: Optional[int]
|
||||||
|
tx_mined_status: TxMinedInfo
|
||||||
|
mempool_depth_bytes: Optional[int]
|
||||||
|
|
||||||
|
|
||||||
class Abstract_Wallet(AddressSynchronizer):
|
class Abstract_Wallet(AddressSynchronizer):
|
||||||
"""
|
"""
|
||||||
|
@ -344,25 +355,23 @@ class Abstract_Wallet(AddressSynchronizer):
|
||||||
return True
|
return True
|
||||||
#return self.history.values() != [[]] * len(self.history)
|
#return self.history.values() != [[]] * len(self.history)
|
||||||
|
|
||||||
def get_tx_info(self, tx):
|
def get_tx_info(self, tx) -> TxWalletDetails:
|
||||||
is_relevant, is_mine, v, fee = self.get_wallet_delta(tx)
|
is_relevant, is_mine, v, fee = self.get_wallet_delta(tx)
|
||||||
exp_n = None
|
exp_n = None
|
||||||
can_broadcast = False
|
can_broadcast = False
|
||||||
can_bump = False
|
can_bump = False
|
||||||
label = ''
|
label = ''
|
||||||
height = conf = timestamp = None
|
|
||||||
tx_hash = tx.txid()
|
tx_hash = tx.txid()
|
||||||
|
tx_mined_status = self.get_tx_height(tx_hash)
|
||||||
if tx.is_complete():
|
if tx.is_complete():
|
||||||
if self.db.get_transaction(tx_hash):
|
if self.db.get_transaction(tx_hash):
|
||||||
label = self.get_label(tx_hash)
|
label = self.get_label(tx_hash)
|
||||||
tx_mined_status = self.get_tx_height(tx_hash)
|
if tx_mined_status.height > 0:
|
||||||
height, conf, timestamp = tx_mined_status.height, tx_mined_status.conf, tx_mined_status.timestamp
|
if tx_mined_status.conf:
|
||||||
if height > 0:
|
status = _("{} confirmations").format(tx_mined_status.conf)
|
||||||
if conf:
|
|
||||||
status = _("{} confirmations").format(conf)
|
|
||||||
else:
|
else:
|
||||||
status = _('Not verified')
|
status = _('Not verified')
|
||||||
elif height in (TX_HEIGHT_UNCONF_PARENT, TX_HEIGHT_UNCONFIRMED):
|
elif tx_mined_status.height in (TX_HEIGHT_UNCONF_PARENT, TX_HEIGHT_UNCONFIRMED):
|
||||||
status = _('Unconfirmed')
|
status = _('Unconfirmed')
|
||||||
if fee is None:
|
if fee is None:
|
||||||
fee = self.db.get_tx_fee(tx_hash)
|
fee = self.db.get_tx_fee(tx_hash)
|
||||||
|
@ -392,7 +401,17 @@ class Abstract_Wallet(AddressSynchronizer):
|
||||||
else:
|
else:
|
||||||
amount = None
|
amount = None
|
||||||
|
|
||||||
return tx_hash, status, label, can_broadcast, can_bump, amount, fee, height, conf, timestamp, exp_n
|
return TxWalletDetails(
|
||||||
|
txid=tx_hash,
|
||||||
|
status=status,
|
||||||
|
label=label,
|
||||||
|
can_broadcast=can_broadcast,
|
||||||
|
can_bump=can_bump,
|
||||||
|
amount=amount,
|
||||||
|
fee=fee,
|
||||||
|
tx_mined_status=tx_mined_status,
|
||||||
|
mempool_depth_bytes=exp_n,
|
||||||
|
)
|
||||||
|
|
||||||
def get_spendable_coins(self, domain, config, *, nonlocal_only=False):
|
def get_spendable_coins(self, domain, config, *, nonlocal_only=False):
|
||||||
confirmed_only = config.get('confirmed_only', False)
|
confirmed_only = config.get('confirmed_only', False)
|
||||||
|
|
Loading…
Add table
Reference in a new issue