Commit Graph

63 Commits

Author SHA1 Message Date
SomberNight
0d29733419 qml/qedaemon.py: don't use daemon._wallets field directly
it's more robust to use the public methods
2023-06-30 10:11:16 +00:00
SomberNight
24980feab7 config: introduce ConfigVars
A new config API is introduced, and ~all of the codebase is adapted to it.
The old API is kept but mainly only for dynamic usage where its extra flexibility is needed.

Using examples, the old config API looked this:
```
>>> config.get("request_expiry", 86400)
604800
>>> config.set_key("request_expiry", 86400)
>>>
```

The new config API instead:
```
>>> config.WALLET_PAYREQ_EXPIRY_SECONDS
604800
>>> config.WALLET_PAYREQ_EXPIRY_SECONDS = 86400
>>>
```

The old API operated on arbitrary string keys, the new one uses
a static ~enum-like list of variables.

With the new API:
- there is a single centralised list of config variables, as opposed to
  these being scattered all over
- no more duplication of default values (in the getters)
- there is now some (minimal for now) type-validation/conversion for
  the config values

closes https://github.com/spesmilo/electrum/pull/5640
closes https://github.com/spesmilo/electrum/pull/5649

Note: there is yet a third API added here, for certain niche/abstract use-cases,
where we need a reference to the config variable itself.
It should only be used when needed:
```
>>> var = config.cv.WALLET_PAYREQ_EXPIRY_SECONDS
>>> var
<ConfigVarWithConfig key='request_expiry'>
>>> var.get()
604800
>>> var.set(3600)
>>> var.get_default_value()
86400
>>> var.is_set()
True
>>> var.is_modifiable()
True
```
2023-05-25 17:39:48 +00:00
Sander van Grieken
89225a9f41 qml: show result dialog after password change 2023-05-12 10:53:02 +02:00
SomberNight
68fb996d20 wallet_db version 52: break non-homogeneous multisig wallets
- case 1: in version 4.4.1, 4.4.2, the qml GUI wizard allowed creating multisig wallets with an old_mpk as cosigner.
- case 2: in version 4.4.0, 4.4.1, 4.4.2, the qml GUI wizard allowed creating multisig wallets with mixed xpub/Ypub/Zpub.

The corresponding missing input validation was a bug in the wizard, it was unintended behaviour. Validation was added in d2cf21fc2b. Note however that there might be users who created such wallet files.

Re case 1 wallet files: there is no version of Electrum that allows spending from such a wallet. Coins received at addresses are not burned, however it is technically challenging to spend them. (unless the multisig can spend without needing the old_mpk cosigner in the quorum).

Re case 2 wallet files: it is possible to create a corresponding spending wallet for such a multisig, however it is a bit tricky. The script type for the addresses in such a heterogeneous xpub wallet is based on the xpub_type of the first keystore. So e.g. given a wallet file [Yprv1, Zpub2] it will have sh(wsh()) scripts, and the cosigner should create a wallet file [Ypub1, Zprv2] (same order).

Technically case 2 wallet files could be "fixed" automatically by converting the xpub types as part of a wallet_db upgrade. However if the wallet files also contain seeds, those cannot be converted ("standard" vs "segwit" electrum seed).
Case 1 wallet files are not possible to "fix" automatically as the cosigner using the old_mpk is not bip32 based.

It is unclear if there are *any* users out there affected by this. I suspect for case 1 it is very likely there are none (not many people have pre-2.0 electrum seeds which were never supported as part of a multisig who would also now try to create a multisig using them); for case 2 however there might be.

This commit breaks both case 1 and case 2 wallets: these wallet files can no longer be opened in new Electrum, an error message is shown and the crash reporter opens. If any potential users opt to send crash reports, at least we will know they exist and can help them recover.
2023-05-11 14:26:11 +00:00
SomberNight
87909485c5 qml: wizard to check if wallet name is already used
was erroring at the very last moment previously
2023-04-27 08:47:02 +00:00
Sander van Grieken
264540e12b qml: consistency camelcase public slots qedaemon, qeinvoice, qewizard 2023-04-25 13:40:16 +02:00
ThomasV
a03f4769ca auth_protect: pass authMessage in the auth_protect decorator,
instead of relying on side-effects

This is probably safer, and also more self-contained.
2023-04-17 18:17:29 +02:00
ThomasV
73dd6827e0 add auth_message to delete_wallet
This changes the flow slightly: pin confirmation is asked after
we have checked that the wallet does not have open channels,
which is better
2023-04-17 17:58:19 +02:00
Sander van Grieken
21d1a6239f qml: always pass wallet password to init_lightning.
emit also dataChanged so UI updates node pubkey
2023-04-14 12:21:38 +02:00
Sander van Grieken
5d4e6b1cd7 qml: fix setting empty password when switching to already open wallet with password 2023-04-14 10:53:53 +02:00
SomberNight
fcff4b7274 qml: begone, you C-style for loops
how am I going to continue in the middle of the loop body if the i+=1 is at the end? :P
2023-04-05 14:13:40 +00:00
SomberNight
1530668960 qt/qml: delay starting network until after first-start-network-setup
The qt, qml, and kivy GUIs have a first-start network-setup screen
that allows the user customising the network settings before creating a wallet.
Previously the daemon used to create the network and start it, before this screen,
before the GUI even starts. If the user changed network settings, those would
be set on the already running network, potentially including restarting the network.

Now it becomes the responsibility of the GUI to start the network, allowing this
first-start customisation to take place before starting the network at all.
The qt and the qml GUIs are adapted to make use of this. Kivy, and the other
prototype GUIs are not adapted and just start the network right away, as before.
2023-03-30 00:59:02 +00:00
Sander van Grieken
39ac484ec7 qml: password change requires password, not PIN. fixes #8257 2023-03-18 00:52:42 +01:00
ThomasV
849d987d0d qml: fix #8247 2023-03-16 20:23:29 +01:00
Sander van Grieken
0f596cf2e9 qml: report unified password change failure, impose minimum password length of 5, disallow empty passwords 2023-03-03 12:56:02 +01:00
Sander van Grieken
c7cb2fb9e6 qml: explicitly use None when empty string is used as password
backend requires None, Qt5 passes empty string
2023-02-28 14:51:19 +01:00
Sander van Grieken
d59e687cdb qml: follow-up fe540200a9 2023-02-28 14:11:52 +01:00
Sander van Grieken
fe540200a9 qml: report wallet open problems when walletdb cannot open a wallet (WalletFileException) 2023-02-28 14:04:20 +01:00
Sander van Grieken
278486602b qml: add loader overlay, avoid interacting with the to-be-unloaded wallet 2023-02-23 18:20:29 +01:00
Sander van Grieken
a56c9687c8 qml: initial async wallet load 2023-02-23 14:39:55 +01:00
Sander van Grieken
e9ad9986d7 qml: qedaemon doesn't need wallet path and name properties, pass them via the signal 2023-02-10 14:27:39 +01:00
Sander van Grieken
0bc8460005 qml: don't initialize instance variables on class scope for non-singletons
(this somehow escaped attention before, as most objects usually don't have multiple instances,
unless multiple wallets are open at the same time.)
Also, move all signal declarations, class constants and variables to the top of class definitions.
2023-01-12 13:09:21 +01:00
Sander van Grieken
20eacc37e1 qml: allow delete wallet if has channels not in REDEEMED state but is channelbackup 2023-01-06 13:42:59 +01:00
Sander van Grieken
79d12330ac qml: let WalletListModel update the wallet state when a wallet is loaded 2022-11-11 12:28:00 +01:00
Sander van Grieken
12086ba0de qml: unify to single WalletListModel, WalletDB trigger actions on every path set,
camelcase more QML exposed functions/slots.
2022-11-11 12:00:07 +01:00
SomberNight
01b5e3f8e0 flake8: enable more mandatory tests 2022-10-31 16:13:22 +00:00
Sander van Grieken
15e2ed4f58 rewrite server connect wizard to new wizard style
'last' property on WizardComponents is now queried from UI, not from the wizard.
This allows the content of the WizardComponent itself to be taken into account.
2022-10-21 13:32:16 +02:00
Sander van Grieken
e579f5b8a5 properly remember wallet password and pass to tx signing call 2022-10-21 13:31:24 +02:00
Sander van Grieken
43bac2edff qml: use new wizard approach in qml and also implement 2FA/trustedcoin 2022-10-21 13:31:24 +02:00
Sander van Grieken
98c747ea6e qml: use -w command line parameter to open wallet, if specified 2022-10-04 12:35:07 +02:00
Sander van Grieken
32a81d8ee7 qml: initial plugin support, with labelsync mostly implemented 2022-09-08 12:19:38 +02:00
SomberNight
c421bdaff4 (trivial) qml/qedaemon.py: add missing import 2022-08-04 21:52:22 +02:00
Sander van Grieken
3de498907c qml: delete_wallet and add checks for channels, balance, pending requests 2022-07-28 18:56:27 +02:00
Sander van Grieken
5008cef491 qml: optimize imports 2022-07-28 16:53:05 +02:00
Sander van Grieken
894495aa92 qml: clean up 2022-07-12 19:07:19 +02:00
Sander van Grieken
63fed38305 qml: skip wallet password entry when single_password and password is known 2022-07-12 17:34:52 +02:00
Sander van Grieken
70cf44ccec qml: wip single password 2022-07-12 16:55:11 +02:00
Sander van Grieken
f83c944f0e qml: properly set keystore password when creating new wallet 2022-07-12 14:00:53 +02:00
SomberNight
bcbe69672e qml gui: fix flake8 "F821 undefined name" errors 2022-07-09 03:49:45 +02:00
Sander van Grieken
f5933da348 skip wallet files with leading dot 2022-07-08 11:10:15 +02:00
Sander van Grieken
0228169852 refactor to new event listener framework 2022-07-08 11:09:08 +02:00
Sander van Grieken
cd6d5e577b add unified wallet password support 2022-07-07 18:30:20 +02:00
Sander van Grieken
0130e5aecf invert (in)validPassword property in QEWalletDB, add invalidPassword signal.
This is to better support state in OpenWallet page
2022-07-07 18:30:20 +02:00
Sander van Grieken
a44f8d9b3b create new wallet name suggestion and pre-select and focus the textfield 2022-07-07 18:29:02 +02:00
Sander van Grieken
9243f3b896 implement wallet password change.
implement wallet delete (though actual wallet file delete is left out still)
2022-07-07 18:29:01 +02:00
Sander van Grieken
e9a174711b UI on Wallets screen. Add active/not active/current indicator tags.
initial wallet delete/change password boilerplate
2022-07-07 18:29:01 +02:00
Sander van Grieken
e1f53c4ea0 QEDaemon uses internal QEWalletDB for wallet open pre-checks
various other fixes
2022-07-07 18:29:01 +02:00
Sander van Grieken
e8ce221a34 Qt.UserRole can be 0 offset, don't repeat wallet create request dict 2022-07-07 18:29:01 +02:00
Sander van Grieken
d3e2737308 complete and refactor Fx preferences and use in Send/Receive tabs 2022-07-07 18:29:01 +02:00
Sander van Grieken
d5cfb67ebe add fiat<->sat conversion methods and hook up UI 2022-07-07 18:29:01 +02:00