so that we don't need the extra permission.
also because phones these days have enough internal storage for
the headers; and maybe it's better even for security reasons to
store it there.
no upgrade path is provided for the headers stored on external storage,
we will litter the filesystem and leave them there. they will be
downloaded again into internal storage.
mainly because the main "merchant" using bip70 is bitpay, and they
are failing all the PaymentAcks due to the tx is using RBF...
no need to confuse users.
follow-up 1686a97ece
we should not raise generic Exception when wanting to communicate with
the user. it makes distinguishing programming errors and messages hard,
as the caller will necessarily need to catch all Exceptions then
If auto_connect is enabled, allow jumping between forks too.
(Previously auto_connect was only switching servers on a given fork,
not across forks)
If there is a preferred fork set, jump to that (and stay);
if there isn't, always jump to the longest fork.
This is an attempt to commit the changes made to Electrum-BTC to morph it into FLO, on top of the latest Electrum-BTC codebase at the time of writing. The code has become messy pulling upstream changes and its become difficult to debug issues
[127.0.0.1] Exception in wrapper_func : AttributeError 'ElectrumWindow' object has no attribute 'wallet'
Traceback (most recent call last):
File "/home/user/wspace/electrum/electrum/util.py", line 839, in f2
return await f(*args, **kwargs)
File "/home/user/wspace/electrum/electrum/interface.py", line 245, in wrapper_func
return await func(self, *args, **kwargs)
File "/home/user/wspace/electrum/electrum/interface.py", line 260, in run
await self.open_session(ssl_context, exit_early=False)
File "/home/user/wspace/electrum/electrum/interface.py", line 357, in open_session
await group.spawn(self.monitor_connection())
File "/usr/local/lib/python3.6/dist-packages/aiorpcx/curio.py", line 241, in __aexit__
await self.join(wait=self._wait)
File "/usr/local/lib/python3.6/dist-packages/aiorpcx/curio.py", line 214, in join
raise task.exception()
File "/home/user/wspace/electrum/electrum/address_synchronizer.py", line 173, in job
await group.spawn(self.synchronizer.main())
File "/usr/local/lib/python3.6/dist-packages/aiorpcx/curio.py", line 241, in __aexit__
await self.join(wait=self._wait)
File "/usr/local/lib/python3.6/dist-packages/aiorpcx/curio.py", line 214, in join
raise task.exception()
File "/home/user/wspace/electrum/electrum/synchronizer.py", line 181, in main
self.wallet.network.trigger_callback('wallet_updated', self.wallet)
File "/home/user/wspace/electrum/electrum/network.py", line 267, in trigger_callback
callback(event, *args)
File "/home/user/wspace/electrum/electrum/gui/qt/main_window.py", line 300, in on_network
if wallet == self.wallet:
AttributeError: 'ElectrumWindow' object has no attribute 'wallet'
this is a performance optimisation.
measurements using a large wallet with 11k txns:
syncing XPUB for the first time takes 10 seconds. leaving window open, and
syncing same XPUB again in new window takes 30 seconds. in third window,
it takes ~50 seconds. then ~70s. presumably scaling linearly.
this is due to the history_list.update_item call being CPU-heavy.
now all of them take 10 seconds.
Comment is no longer relevant. Also, actually it was incorrect.
Each txn is only downloaded once, though 'added' multiple times to the wallet.
The triggers are only sent out by the Synchronizer, once, when downloaded.
The actual reason for the inconsistency was that get_wallet_delta can only
give complete results once the wallet is synced.