`electrum_plugins` is imported in the `electrum` script
without being used - I assume it's done to make PyInstaller
find that package. But this can be achieved by avoiding
the usage of `__import__()` when importing `electrum_plugins`
where it's effectively used.
As this project is currently structured, absolute
imports have the drawback that they'll load modules
from installed paths rather then from the local repo
when running unit tests. This somehow breaks the main
idea of unit tests which is being able to quickly test
newest development changes. Therefore, use a relative
import here.
* Fix format_satoshi to properly handle non-integer values
Handling the integer and fraction parts together via string formatting
simplifies the initial composition because the default behavior manages
the - sign, and the incorporation of the fractional part.
* Limit fee rate output to one decimal place
Via a new precision arg
* Introduce format_fee_satoshis and use it for all fee display
wallet.synchronizer gets assigned a newly constructed Synchronizer instance.
Synchronizer in tx_response refers to the value of wallet.synchronizer.
If the wallet has a missing txn, there could be a race condition that synchronizer asks for a txn and we get the callback from the network WHILE the constructor is still running, in which case wallet.synchronizer would still be None and we would consider the callback "orphan", and the wallet would get "stuck" synchronizing.