Commit Graph

642 Commits

Author SHA1 Message Date
Sander van Grieken
19cd408f98 organize import, whitespace 2025-01-23 12:58:28 +01:00
SomberNight
264a5fe421 qt gui: add command for console use: "scan_qr()"
try
```
>>> scan_qr().data
```
to read a qr code from the screen
2025-01-09 12:18:10 +00:00
ThomasV
c4443b841f Merge pull request #9410 from f321x/fix_user_cancelled_swap
Catch UserCancelled exception in main window on user swap cancellation
2025-01-09 11:15:08 +01:00
f321x
c4fe8433c0 catch UserCancelled exception in main window 2025-01-09 11:12:30 +01:00
ThomasV
29a8c41025 move watchtower to a plugin.
remove watchtower dialog in qt
2024-12-20 15:34:26 +01:00
ThomasV
693210edbe Qt: stop support for password-protected wallets without
storage encryption.

The password will be needed on startup with anchor channels.

Note that it remains possible to use non-encrypted storage
and keystore encryption with the command line.
2024-12-20 09:24:45 +01:00
ThomasV
60f13a977e Swaps over Nostr
- Separation between SwapManager and its transport:
   Legacy transpport uses http, Nostr uses websockets
 - The transport uses a context to open/close connections.
   This context is not async, because it needs to be called
   from the GUI
 - Swapserver fees values are initialized to None instead
   of 0, so that any attempt to use them before the swap
   manager is initialized will raise an exception.
 - Remove swapserver fees disk caching (swap_pairs file)
 - Regtests use http transport
 - Android uses http transport (until QML is ready)
2024-11-12 09:32:25 +01:00
accumulator
3fbceacca2 Merge pull request #9284 from accumulator/update_recently_opened_sync
qt: keep list of recently used wallets in sync across windows
2024-11-05 15:02:38 +01:00
Sander van Grieken
2113cd4f2e qt: keep list of recently used wallets in sync across windows
this also removes alpha-sort of the wallet list in favor of
placing most recently opened on top
2024-10-28 10:59:57 +01:00
ThomasV
c58c4d7451 Make lntransport not require lnutil.
This will be useful if we decide to ship lntransport as a separate
package. It is also a conceptual cleanup.

Notes:
 - lntransport still requires crypto.py
 - parsing node id from a bolt11 invoice is not supported.
2024-10-22 09:26:36 +02:00
SomberNight
8db2489739 qt gui: faster clean-up of hung UpdateCheckThread during exit
If you closed a main_window soon after opening it, and the UpdateCheckThread network request was slow
and still in progress, the gui would freeze until the network request finished.
2024-10-21 18:28:32 +00:00
ThomasV
2fd70d5d94 qt: replace BlockingWaitingDialog with RunCoroutineDialog
RunCoroutineDialog has a run() method that blocks the thread
without blocking the GUI (using exec), and a Cancel button
that cancels the coroutine.

main_window.run_coroutine_dialog() is a wrapper that returns
the coroutine result and may raise exceptions.

BlockingWaitingDialog was removed is transaction_dialog,
where it was not particularly useful.
2024-10-18 12:37:54 +02:00
ThomasV
3721f04ac8 replace electrum/ecc with electrum_ecc package 2024-10-10 15:46:00 +00:00
SomberNight
48527b1501 sweep: trivial clean-up
- wallet.get_receiving_addresses is guaranteed to exist (maybe it was only for HD wallets in the past)
- wallet.is_mine is stricter than wallet.adb.is_mine, usually we want the former
2024-10-09 15:09:49 +00:00
SomberNight
383f99796a qt gui: follow-up qt6: fix args for QWidget.setFocus()
Traceback (most recent call last):
  File "...\electrum\electrum\gui\qt\main_window.py", line 1797, in toggle_search
    self.search_box.setFocus(1)
TypeError: arguments did not match any overloaded call:
  setFocus(self): too many arguments
  setFocus(self, reason: Qt.FocusReason): argument 1 has unexpected type 'int'
2024-09-18 17:39:46 +00:00
SomberNight
e05d2a5dbe qt gui: clean-up QCheckBox.stateChanged handling
Some checkboxes, e.g. main_window.warn_if_testnet became buggy with pyqt6:
looks like the stateChanged signal passes an int, not a Qt.CheckState.
(and note that Qt.CheckState is an Enum, not an IntEnum).
So `x == Qt.CheckState.Checked` would always evaluate to False.

```
def on_cb(_x):
    print(f"heyheyhey. {_x=!r}, {Qt.CheckState.Checked=!r}, {cb.checkState()=!r}, {cb.isChecked()=!r}")
cb = QCheckBox("")
cb.stateChanged.connect(on_cb)
```

heyheyhey. x=2, Qt.CheckState.Checked=<CheckState.Checked: 2>, cb.checkState()=<CheckState.Checked: 2>, cb.isChecked()=True
heyheyhey. x=0, Qt.CheckState.Checked=<CheckState.Checked: 2>, cb.checkState()=<CheckState.Unchecked: 0>, cb.isChecked()=False
2024-09-18 15:48:54 +00:00
SomberNight
d791e3a9c8 qt gui: fix: qt6 segfaults on macOS if we add a menu item named "About"
macOS reserves the "About" menu item name, similarly to "Preferences" (see a few lines above).
The "About" keyword seems even more strictly locked down:
not allowed as either a prefix or a suffix.
- With Qt5, a matching menu item is simply auto-recognised as the special "About" item,
- but with Qt6, it seems we explicitly have to do this dance, as directly adding
  a menu item with the "About" name results in a segfault...
2024-09-18 15:48:46 +00:00
SomberNight
cfe8502f96 qt desktop gui: upgrade qt5->qt6
closes https://github.com/spesmilo/electrum/issues/8007
2024-09-18 15:48:38 +00:00
Sander van Grieken
0b09592ef1 qt: move query_choice to MessageBoxMixin, document ChoiceWidget 2024-09-14 11:12:42 +02:00
Sander van Grieken
0277950247 qt: factor out remaining ChoicesLayout uses 2024-09-13 17:10:52 +02:00
timesince
18d90aee4f chore: fix some comments and var name
Signed-off-by: timesince <seekseat@icloud.com>
2024-08-12 01:36:35 +08:00
ThomasV
2f3d89f415 prepare for separation of ecc module:
- move encrypt/sign functions elsewhere
- remove local dependencies in ecc.py, ecc_fast.py (except logging)
2024-06-17 13:05:57 +02:00
SomberNight
db5f1a11a5 fix typo
note: "everytime" even appears in the old_mnemonic wordlist, but it is a misspelling.
2024-05-30 16:59:28 +00:00
SomberNight
2f02e0acc3 qt main window: rm dead code 2024-05-23 13:38:18 +00:00
SomberNight
13d9677e53 transaction: tx.sign API change: rm hex usage 2024-04-29 17:10:30 +00:00
SomberNight
bd9d0ccc33 ecc: refactor/clean-up sign/verify APIs 2024-04-11 15:25:45 +00:00
SomberNight
f495511886 safer os.chmod for wallet files and config: set perms before write
Set unix file permissions first, before writing data.
2024-04-08 14:09:00 +00:00
ThomasV
17599de611 save notes whenever modified, using 10s rate limiter. fixes #8951 2024-03-27 16:44:31 +01:00
SomberNight
01155ac6f5 swaps: homogenise gui messages
see https://github.com/spesmilo/electrum/issues/8940
2024-03-13 13:52:40 +00:00
SomberNight
ff8f8d6104 qt: sweep_key_dialog: make UI a bit more intuitive
user complained:
> when you want to sweep an address. it's very unclear to me as a noob who is getting the money
> might want a little picture with an arrow to show which direction the funds are going
2024-02-05 23:26:39 +00:00
SomberNight
a9a8ed2eb4 follow-up: factor out more hardcoded "sat/byte" and "sat/b" strings
- rename globals
- also rm hardcoded strings from qml
- use consistent unit names in qml
  (previously mixed sat/vB and sat/byte (latter coming from core lib))
2024-02-03 05:26:31 +00:00
SomberNight
49c3567d7d wallet: simplify bump_fee: rm txid arg
closes https://github.com/spesmilo/electrum/issues/8797
2024-01-17 19:20:29 +00:00
Sander van Grieken
6a28ef5db3 qt: add ElectrumWindow.set_payment_identifier delegate 2024-01-16 17:40:50 +01:00
SomberNight
d4f31929af qt chan details dlg: add onchain feerate, to_self_delay 2024-01-16 04:07:48 +00:00
SomberNight
eee61a98cb gui: cpfp: calc parent fee for cpfp using wallet.get_tx_info
I am only making this change as it makes it simpler to do manual testing of CPFP-ing *local* txs.
That is, by changing a few easy-to-find lines of code, I can make the GUI allow CPFP-ing a local tx, but
without this change it errors out with "unknown fee for parent transaction".

If one has an incoming local tx saved in the wallet, adb.get_tx_fee(txid) returns None
(if the tx gets into the mempool, it will use the server-reported value instead).
In contrast, wallet.get_tx_info(tx).fee calls both wallet.get_wallet_delta(tx) and adb.get_tx_fee(txid),
making it more expensive but more complete.
2023-12-29 02:55:11 +00:00
ThomasV
d691aa0736 qt: add 'notes' tab 2023-12-13 12:31:22 +01:00
SomberNight
dd3fc041f9 qt main window: statusbar: swap Tor and Network buttons
I think it's nicer for the network status to be rightmost, which was the case for a long time.

(Though plugins are still added after (via multiple different mechanisms, see 2fa, hww, revealer).
We could perhaps add a VLine separator, or add them to the left instead.)

follow-up 90d1d587e8
2023-12-12 10:56:41 +00:00
SomberNight
58f041fd38 qt: fix window.donate_to_server to switch to send tab
probably regression from payment_identifier refactor
2023-12-12 01:14:13 +00:00
ThomasV
ee10b0bf3e qt: move plugins dialog to own module 2023-12-11 10:19:36 +01:00
accumulator
1edb5bac81 Merge pull request #8651 from accumulator/issue_8028
config: keep wallets directory stable, regardless of wallet opens in …
2023-12-07 17:25:12 +01:00
Sander van Grieken
0d476f73df network: rename network.tor_proxy to network.is_proxy_tor and keep it at None until TOR probe is done. 2023-12-04 10:42:32 +01:00
Sander van Grieken
786979ec50 config: keep wallets directory stable, regardless of wallet opens in other directories 2023-12-01 16:14:31 +01:00
Sander van Grieken
90d1d587e8 network: async tor probe 2023-11-30 14:32:19 +01:00
Sander van Grieken
7b96a83350 wallet: add sighash check to class Abstract_Wallet
qml: use backend sighash check and add user confirmation path
qt: use backend sighash check and add user confirmation path
qml: include get_warning_for_risk_of_burning_coins_as_fees test in txdetails
qt: add warning icon to sighash warning
add sighash and fee checks to wallet.sign_transaction, making all warnings fatal unless ignore_warnings is set to True
tests: test sign_transaction on both code paths with ignore_warnings True and False,
raise specific exceptions TransactionPotentiallyDangerousException and TransactionDangerousException
2023-11-30 12:53:46 +01:00
SomberNight
711a325085 main_window: split out "walet info" dlg into separate file
- no semantic changes, only moving code
- the change in qt/util.py is to avoid GC issues
  - due to moving code, the group was moving out of scope and getting GC-ed,
    as we only keep a reference to the vbox

(idea from 263fb2ba33 )
2023-10-31 17:41:11 +00:00
SomberNight
097a10f84d qt: window.how_lightning_invoice: routing_e should be read-only 2023-10-27 14:24:16 +00:00
ThomasV
35a86ec5aa qt console history: ensure partial writes 2023-09-24 12:24:21 +02:00
Sander van Grieken
0aebc1a31e qt+plugins: cleanup. remove all old wizard code 2023-09-20 14:34:31 +02:00
SomberNight
4c63d8729b add sanity checks we don't sign tx including dummy addr
Somewhat a follow-up to 649ce979ab.

This adds some safety belts so we don't accidentally sign a tx that
contains a dummy address.
Specifically we check that tx does not contain output for dummy addr:
- in wallet.sign_transaction
- in network.broadcast_transaction

The second one is perhaps redundant, but I think it does not hurt.
2023-09-16 04:36:08 +00:00
ThomasV
9df8bb61a5 Give users an option to cancel a submarine swap while awaiting HTLCs.
Note that HTLCs must not be cancelled after the funding transaction
has been broadcast. If one want to cancel a swap once the funding
transaction is in mempool, one should double spend the transaction.
2023-09-13 16:28:31 +02:00