wallet history fees: only calculate fees when exporting history
it's expensive, and it slows down startup of large wallets a lot
This commit is contained in:
@@ -722,9 +722,8 @@ class AddressSynchronizer(PrintError):
|
||||
if fee is None:
|
||||
txid = tx.txid()
|
||||
fee = self.tx_fees.get(txid)
|
||||
# cache fees. if wallet is synced, cache all;
|
||||
# otherwise only cache non-None, as None can still change while syncing
|
||||
if self.up_to_date or fee is not None:
|
||||
# only cache non-None, as None can still change while syncing
|
||||
if fee is not None:
|
||||
tx._cached_fee = fee
|
||||
return fee
|
||||
|
||||
|
||||
@@ -520,9 +520,12 @@ class Commands:
|
||||
return tx.as_dict()
|
||||
|
||||
@command('w')
|
||||
def history(self, year=None, show_addresses=False, show_fiat=False):
|
||||
def history(self, year=None, show_addresses=False, show_fiat=False, show_fees=False):
|
||||
"""Wallet history. Returns the transaction history of your wallet."""
|
||||
kwargs = {'show_addresses': show_addresses}
|
||||
kwargs = {
|
||||
'show_addresses': show_addresses,
|
||||
'show_fees': show_fees,
|
||||
}
|
||||
if year:
|
||||
import time
|
||||
start_date = datetime.datetime(year, 1, 1)
|
||||
@@ -808,6 +811,7 @@ command_options = {
|
||||
'paid': (None, "Show only paid requests."),
|
||||
'show_addresses': (None, "Show input and output addresses"),
|
||||
'show_fiat': (None, "Show fiat value of transactions"),
|
||||
'show_fees': (None, "Show miner fees paid by transactions"),
|
||||
'year': (None, "Show history for a given year"),
|
||||
'fee_method': (None, "Fee estimation method to use"),
|
||||
'fee_level': (None, "Float between 0.0 and 1.0, representing fee slider position")
|
||||
|
||||
@@ -555,10 +555,15 @@ class HistoryList(MyTreeView, AcceptFileDragDrop):
|
||||
self.parent.show_message(_("Your wallet history has been successfully exported."))
|
||||
|
||||
def do_export_history(self, file_name, is_csv):
|
||||
history = self.transactions.values()
|
||||
hist = self.wallet.get_full_history(domain=self.get_domain(),
|
||||
from_timestamp=None,
|
||||
to_timestamp=None,
|
||||
fx=self.parent.fx,
|
||||
show_fees=True)
|
||||
txns = hist['transactions']
|
||||
lines = []
|
||||
if is_csv:
|
||||
for item in history:
|
||||
for item in txns:
|
||||
lines.append([item['txid'],
|
||||
item.get('label', ''),
|
||||
item['confirmations'],
|
||||
@@ -583,4 +588,4 @@ class HistoryList(MyTreeView, AcceptFileDragDrop):
|
||||
transaction.writerow(line)
|
||||
else:
|
||||
from electrum.util import json_encode
|
||||
f.write(json_encode(history))
|
||||
f.write(json_encode(txns))
|
||||
|
||||
@@ -394,7 +394,8 @@ class Abstract_Wallet(AddressSynchronizer):
|
||||
return balance
|
||||
|
||||
@profiler
|
||||
def get_full_history(self, domain=None, from_timestamp=None, to_timestamp=None, fx=None, show_addresses=False):
|
||||
def get_full_history(self, domain=None, from_timestamp=None, to_timestamp=None,
|
||||
fx=None, show_addresses=False, show_fees=False):
|
||||
out = []
|
||||
income = 0
|
||||
expenditures = 0
|
||||
@@ -420,8 +421,10 @@ class Abstract_Wallet(AddressSynchronizer):
|
||||
'date': timestamp_to_datetime(timestamp),
|
||||
'label': self.get_label(tx_hash),
|
||||
}
|
||||
tx_fee = self.get_tx_fee(tx)
|
||||
item['fee'] = Satoshis(tx_fee) if tx_fee is not None else None
|
||||
tx_fee = None
|
||||
if show_fees:
|
||||
tx_fee = self.get_tx_fee(tx)
|
||||
item['fee'] = Satoshis(tx_fee) if tx_fee is not None else None
|
||||
if show_addresses:
|
||||
item['inputs'] = list(map(lambda x: dict((k, x[k]) for k in ('prevout_hash', 'prevout_n')), tx.inputs()))
|
||||
item['outputs'] = list(map(lambda x:{'address':x.address, 'value':Satoshis(x.value)},
|
||||
|
||||
Reference in New Issue
Block a user