1548 Commits

Author SHA1 Message Date
edouardparis
bfc55fb084
Merge #1019: [GUI] tab on TextInputs
158bdc8a70bcd1a5dae34a842e7ac0bb39c20127 tab on TextInputs (pythcoiner)

Pull request description:

  this PR  introduce handling of new events in all views:
  - `Tab` will move cursor to the next TextInput
  - `Tab` + `Shift` will move the cursor to previous TextInput

ACKs for top commit:
  edouardparis:
    ACK 158bdc8a70bcd1a5dae34a842e7ac0bb39c20127

Tree-SHA512: 018fa55bfc4cae597ff82e7663ce43b906086b524eb3f95193a69e296c60a93d1a20d453221a7747037a84313fdcbf1d84cd970794b512841b9387385147bda1
2024-03-20 20:26:43 +01:00
pythcoiner
158bdc8a70 tab on TextInputs 2024-03-20 20:16:01 +01:00
Antoine Poinsot
4f78d3b3d0
Merge #986: Gui taproot
b7f35c03300710c71f5e8a4af471260f0a35ddc0 Add installer dropdown for advanced settings (edouardparis)
59a4b181c1e1be64ed8122edd95a7378ebef39af fix: merge tap_script_sigs from signed psbt (edouardparis)
02a52b98bcdbcf62d42c748b154beaee76d0f26a add ledger version support for tapminiscript (edouardparis)
2debb32181f2365fb4e30d9d7e28a4cb7c86cd65 Add taproot support to installer descriptor editor step (edouardparis)
8bc0cac00a4894c316285223924e91a85f1c6088 gui: async-hwi:0.0.16 (edouardparis)
4a4c78d5f7ed43aae1199481fb060e77d1d88c80 bump liana:master (edouardparis)

Pull request description:

  based on #985

ACKs for top commit:
  darosior:
    tACK b7f35c03300710c71f5e8a4af471260f0a35ddc0 -- i've lightly tested this a couple times. It's good enough to get in and get tested along with the other changes.

Tree-SHA512: 4481be4797cf6fa901de9fec989837381c7817d18dd2c9a45ff1802a15982d1251696e577fb23da2d4ca9f0ed27044dade28f0e7b56703594dae4b3a5065306b
2024-03-20 19:19:58 +01:00
edouardparis
d7b8f53c1f
Merge #992: [GUI] Limit amount to 8 decimal digits
9415dc939080caa5bf41e93c8717dd0b75bb6a0e new_amount_btc (pythcoiner)

Pull request description:

  This PR replace #977 and fixes #798
  I've followed jp1ac4 advice and create a `Form::new_amount_btc()` method that act like `Form::new_trimmed()` ~w/ few more (filtering) features:~
  ~- allow only input of "0123456789,." characters~
  ~- "," is replaced by "."~
  ~- only one "." separator~
  ~- maximum 8 digit after separator~

  ~these features works for keyboard input or paste~

  ~i've tryied to add a "0" in case the String start with a "." but this make the cursor have a bad location and i do not find a way to control the cursor location w/ iced, so i revert this feature~

ACKs for top commit:
  jp1ac4:
    ACK 9415dc9390.
  edouardparis:
    ACK 9415dc939080caa5bf41e93c8717dd0b75bb6a0e

Tree-SHA512: c8387e5fd9c3c030a71d0ba4a7aa3cd7f834215000f04e4e4d6b689c6bc9bf9dcecbf8b0799882f00f92d5bb8a656714f5149479e7f25e608a0ce96326a6e630
2024-03-20 18:37:43 +01:00
edouardparis
6f6c35d0c6
Merge #1023: gui: record updates to aliases
67ebde1432c5cea5afe34f4fa79e2e9a119875a6 gui: add wallet to reload (jp1ac4)

Pull request description:

  This is to fix https://github.com/wizardsardine/liana/issues/1017.

  It adds the `wallet` to the `reload` trait method so that changes are recorded.

  As part of this change, the `TransactionsPanel` now has a `wallet` field to be used when calling its own `reload` method.

ACKs for top commit:
  edouardparis:
    ACK 67ebde1432c5cea5afe34f4fa79e2e9a119875a6

Tree-SHA512: 273684dd7bfbf19b40d9e19e33561cd0428e2d7d93a2faa4409f7dab836bd52e907d7e95a1f95a05476363b8766d630c73be7a64775a2c52ca9f0d5c2509f812
2024-03-20 17:54:30 +01:00
edouardparis
b7f35c0330 Add installer dropdown for advanced settings 2024-03-20 17:33:39 +01:00
edouardparis
59a4b181c1 fix: merge tap_script_sigs from signed psbt 2024-03-20 17:33:39 +01:00
edouardparis
02a52b98bc add ledger version support for tapminiscript 2024-03-20 17:33:39 +01:00
edouardparis
2debb32181 Add taproot support to installer descriptor editor step 2024-03-20 17:33:39 +01:00
edouardparis
8bc0cac00a gui: async-hwi:0.0.16
for the new implem of PartialOrd for
async_hwi::DeviceKind
2024-03-20 17:33:39 +01:00
edouardparis
4a4c78d5f7 bump liana:master 2024-03-20 17:33:39 +01:00
jp1ac4
67ebde1432
gui: add wallet to reload 2024-03-20 12:41:54 +00:00
edouardparis
19d9a4b26a
Merge #1022: gui: sort events and txs after push in the list
ff7e30794b7c79c3aa237dde33f52e716703c434 gui: sort events and txs after push in the list (edouardparis)

Pull request description:

  when a pending tx is confirmed, it is pushed in the HistoryTransaction list at the end. It should be first in the list. We sort now the list in order to make sure it will be always the case.

ACKs for top commit:
  edouardparis:
    Self-ACK ff7e30794b7c79c3aa237dde33f52e716703c434

Tree-SHA512: 06c1c48728b7623605a493442eeaca3319afbb29c90e676f42ecd7d6d90843e69947759b538f0acb1324d3bb8c68029b38a66ddb8536db3291f706a57d16c28c
2024-03-20 13:18:49 +01:00
edouardparis
ff7e30794b gui: sort events and txs after push in the list
when a pending tx is confirmed, it is pushed in the
HistoryTransaction list at the end. It should be first
in the list. We sort now the list in order to make sure
it will be always the case.
2024-03-20 13:01:36 +01:00
Antoine Poinsot
dd29578c50
Merge #1020: descriptors: change detection under Taproot
52c3613568736a1f2b4ab57bffcaee31d3d85b35 descriptors: adapt 'change_indexes()' to Taproot (Antoine Poinsot)
0c65d205697cb93e40faae1c4d87972ac19bf787 descriptors: encapsulate change_indexes unit test (Antoine Poinsot)

Pull request description:

  I remember thinking about this helper when working on #985, but for some reason i didn't address it there. Here it is.

ACKs for top commit:
  edouardparis:
    utACK 52c3613568736a1f2b4ab57bffcaee31d3d85b35

Tree-SHA512: 276fdb4087ba0ec097142d7ff7a4c8762814d6423b9f5535c8951d6ef628c164e4a5191aeb9aa48eaad9afd1361416157774341ef7873fee284d039f9dcf5b3e
2024-03-20 11:22:02 +01:00
Antoine Poinsot
52c3613568
descriptors: adapt 'change_indexes()' to Taproot
We match on both the legacy and the Taproot field in the PSBT output. It shouldn't matter since we already assume the PSBT is well-formed.
2024-03-20 10:44:50 +01:00
Antoine Poinsot
0c65d20569
descriptors: encapsulate change_indexes unit test 2024-03-20 10:41:56 +01:00
Antoine Poinsot
2e63bf3069
Merge #1013: fix descriptor in config example
aa7db1b9a38fb04131969b72cc4c744c84562fdb fix descriptor in config example (pythcoiner)

Pull request description:

  fixes #1012

ACKs for top commit:
  jp1ac4:
    ACK aa7db1b9a3. I was able to import this descriptor in a new regtest wallet (using GUI installer).

Tree-SHA512: 6b06024a1717eafa237bad25f69a7aa6856a8f3bb3c8eec8240a2541a5fdfcf339807093c755c0abbc4a4beb27d20c83c7dff96bb099322e0c0c0b9c05059139
2024-03-19 11:29:45 +01:00
pythcoiner
9415dc9390 new_amount_btc 2024-03-18 21:23:56 +01:00
edouardparis
cde2adbdce
Merge #1014: fix recovery panel reload
56d9dbb72d5cb4c41355deeb9455c61edc403235 fix recovery panel reload (edouardparis)

Pull request description:

  Once a psbt was generated with the recovery panel
  it is impossible for user to start again a recovery process He is redirected to the previous generated psbt because of the panel state being not reset.

  This commit reset the panel state on reload.

ACKs for top commit:
  edouardparis:
    Self-ACK 56d9dbb72d5cb4c41355deeb9455c61edc403235

Tree-SHA512: fd634f6d9d338cbc05260a84b4ad6638c88f6d9c2af49384827500a4f97e04b457c061268a9beb902b117cff97a39d55d44baa6517e23762a5d49ff537c6f6fc
2024-03-18 12:51:03 +01:00
edouardparis
56d9dbb72d fix recovery panel reload
Once a psbt was generated with the recovery panel
it is impossible for user to start again a recovery process
He is redirected to the previous generated psbt because
of the panel state being not reset.

This commit reset the panel state on reload.
2024-03-18 11:48:08 +01:00
pythcoiner
aa7db1b9a3 fix descriptor in config example 2024-03-17 19:56:14 +01:00
edouardparis
1310896bf6
Merge #991: [GUI] Move qr code to modal
e38c5f123221ad33b9dc116a9c4d9bc269c518e2 move qr code to modal (pythcoiner)

Pull request description:

  fix #949:
  - Remove Qr code from view
  - Add a button `Show QR Code` that display the QRCode in a new modal
  - Increased size of Qr Code as we now have more room

  ![image](https://github.com/wizardsardine/liana/assets/124568858/446793c8-1cee-496b-a818-032a4dda547c)

  ![image](https://github.com/wizardsardine/liana/assets/124568858/0b918e2d-e48d-4b07-adb3-c58f97de42f0)

ACKs for top commit:
  edouardparis:
    ACK e38c5f123221ad33b9dc116a9c4d9bc269c518e2

Tree-SHA512: 7901b07661e900b5a14a1b3b25389f0222b4900e8cb04fe31473a68beb7cd073e6f26149f5f58b4ce34f66b8cc6716b51b0de8405e37ca172462e56a159c9277
2024-03-15 09:42:40 +01:00
pythcoiner
e38c5f1232 move qr code to modal 2024-03-14 19:48:52 +01:00
Antoine Poinsot
b22f22f0bc
Merge #985: Taproot support
4bb2372a63bb4b36ca9f0dd91d2373cff3e9e9a4 qa: drop specific value assertions in coin selection test (Antoine Poinsot)
7eb024afbc43ac73aa29d6b892bc4833067c5a3f fuzz: alternate between generating wsh() and tr() descs (Antoine Poinsot)
b9a462519791b64165719891c6f0e9c867a07372 ci: run functional tests both under Taproot and P2WSH (Antoine Poinsot)
687a0c2816290d09bda8f1323232bc4c643e9a35 qa: adapt hardcoded coin selection tests to Taproot (Antoine Poinsot)
ecef6bff5eaf00305941c04d93a8bac8003f9d34 qa: functional tests lianad using Taproot descriptors (Antoine Poinsot)
96d30db5b868c8f2e6ecc45f1bf6759df582569e signer: taproot support in hot signer (Antoine Poinsot)
80a7dc32aad43fe4c6a1cd0fc41d4ac1bb8a7de6 signer: move p2wsh signing into a dedicated function (Antoine Poinsot)
d6222583be148a6b12caed7b0ede00be317d89c6 command: also update Taproot sigs in 'updatespend' (Antoine Poinsot)
714bd3c4eda1420142b5761623808f73c64578c6 spend: check for either p2wsh or Taproot sigs in sanity checks (Antoine Poinsot)
e05039f67b3d7a44cd9079f3a57d75a3161cb3f1 spend: don't populate non_witness_utxo for Taproot (Antoine Poinsot)
8596ca76f3547c77cf64c556966ee1651550f231 bitcoind: compare descriptors, not their string representation. (Antoine Poinsot)
602c862118ff43616b24b5d252321a98a83d2454 bitcoind: sanity check min supported version for Taproot descriptor (Antoine Poinsot)
d3b7e4cc44c59b8aad77b0cf0d9ae29095db65f9 config: unit test a valid config with a Taproot descriptor (Antoine Poinsot)
6cf8eaab3b92a7f5bcc9c35490dc9766d071ca00 config: deser_from_str isn't descriptor specific. (Antoine Poinsot)
04f4b8a744cdcc52e345948ed9636640d641c528 descriptors: Taproot support (Antoine Poinsot)
c897d41965cf077fda63cc39c31cb75f400d757e descriptors: encapsulate key matching logic (Antoine Poinsot)
85fdc40366dcb3c5c8cf91be1b1cc59727402e04 descriptor: encapsulate PSBT in/out information update (Antoine Poinsot)

Pull request description:

  This introduces Taproot support in the Liana daemon / core library.

  We start by introducing support for `tr()` descriptors alongside `wsh()` descriptors in the Taproot modules. For Taproot-Liana descriptors whose primary spending path isn't a single key, we deterministically derive an unspendable internal key as per https://delvingbitcoin.org/t/unspendable-keys-in-descriptors/304/21. This is to allow signing devices to not display the internal key as a spendable key when verifying a descriptor. Currently signing device vendors signaled willingness to implement this scheme.

  We then adapt the PSBT management logic to use Taproot fields when necessary and upgrade the hot signer to provide Schnorr signatures depending on the PSBT information.

  Finally, the functional tests are adapted to be able to run the whole test suite under either P2WSH or Taproot. This is done in a somewhat hacky way as i bailed out of re-implementing a Taproot PSBT signer and finalizer in Python after implementing [TapMiniscript support in upstream python-bip380](https://github.com/darosior/python-bip380/pull/23). Instead we use a small Rust program to sign PSBTs for now and we skip a test which explicitly requires an external finalizer.

ACKs for top commit:
  darosior:
    ACK 4bb2372a63bb4b36ca9f0dd91d2373cff3e9e9a4 -- this underwent multiple rounds of review, Edouard tested it in his follow-up PR to the GUI and i wrote a couple fuzz targets exercising part of the logic introduced here

Tree-SHA512: 426032f0bcf8a27e43cf3d158da011bda648cb56534ea678d3c4a43c3f59047e4bb7f83469fd38f70ac962d1a9721e9c1f68baa60bf597bf08fa3c39fc00ebe8
2024-03-14 11:20:56 +01:00
Antoine Poinsot
b11dbfd6f5
Merge #996: gui: hint at rescan when importing wallet
492baeaabaf181523d0aac3ac1da8ce2ca837ece gui: hint at rescan when importing wallet (jp1ac4)

Pull request description:

  This is to resolve #866.

  I've added the message to the first step where the user enters the descriptor:

  ![image](https://github.com/wizardsardine/liana/assets/121959000/122c0476-79b5-4b0d-a711-73312a94dc01)

ACKs for top commit:
  edouardparis:
    ACK 492baeaabaf181523d0aac3ac1da8ce2ca837ece

Tree-SHA512: 7899ca979b2988d18e6d7be35bad4029db0f1c45f332739f779b532059a710be70463bb85167ffc04491dae35d9300e051788da92bd63ca67a301576b449ad8b
2024-03-13 19:23:27 +01:00
Antoine Poinsot
4bb2372a63
qa: drop specific value assertions in coin selection test
They don't add much value and cause flakiness because the size might sometimes be lower than that due to low-R signature grinding.

Fixes #1000.
2024-03-13 19:21:54 +01:00
Antoine Poinsot
7eb024afbc
fuzz: alternate between generating wsh() and tr() descs 2024-03-13 19:21:54 +01:00
Antoine Poinsot
b9a4625197
ci: run functional tests both under Taproot and P2WSH 2024-03-13 19:21:53 +01:00
Antoine Poinsot
687a0c2816
qa: adapt hardcoded coin selection tests to Taproot 2024-03-13 19:21:53 +01:00
Antoine Poinsot
ecef6bff5e
qa: functional tests lianad using Taproot descriptors
We introduce Taproot support in the test framework through a global
toggle. A few modifications are made to some tests to adapt them under
Taproot (notably the hardcoded fees / amounts).

This is based on my introduction of a quick and dirty support for
TapMiniscript in my python-bip380 library:
https://github.com/darosior/python-bip380/pull/23. In addition to this i
didn't want to implement a signer in the Python test suite so here we
introduce a simple Rust program based on our "hot signer" which will
sign a PSBT with an xpriv provided through its stdin and output the
signed PSBT on its stdout. Eventually it would be nicer to have a Python
signer instead of having to call a program.

The whole test suite should pass under both Taproot and P2WSH. Only a
single test is skipped for now under Taproot since it needs a finalizer
in the test suite.

I also caught a bug in the RBF tests which i fixed in place.
2024-03-13 19:21:52 +01:00
Antoine Poinsot
96d30db5b8
signer: taproot support in hot signer 2024-03-13 19:21:52 +01:00
Antoine Poinsot
80a7dc32aa
signer: move p2wsh signing into a dedicated function 2024-03-13 19:21:51 +01:00
Antoine Poinsot
d6222583be
command: also update Taproot sigs in 'updatespend' 2024-03-13 19:21:51 +01:00
Antoine Poinsot
714bd3c4ed
spend: check for either p2wsh or Taproot sigs in sanity checks 2024-03-13 19:21:50 +01:00
Antoine Poinsot
e05039f67b
spend: don't populate non_witness_utxo for Taproot 2024-03-13 19:21:50 +01:00
Antoine Poinsot
8596ca76f3
bitcoind: compare descriptors, not their string representation.
It's more robust and bitcoind serializes `wsh()` descriptors using `'`
as hardened marker and `tr()` descriptors using `h`..
2024-03-13 19:21:49 +01:00
Antoine Poinsot
602c862118
bitcoind: sanity check min supported version for Taproot descriptor
TapMiniscript support was only released in 26.0:
https://bitcoincore.org/en/releases/26.0
2024-03-13 19:21:48 +01:00
Antoine Poinsot
d3b7e4cc44
config: unit test a valid config with a Taproot descriptor 2024-03-13 19:21:48 +01:00
Antoine Poinsot
6cf8eaab3b
config: deser_from_str isn't descriptor specific. 2024-03-13 19:21:47 +01:00
Antoine Poinsot
04f4b8a744
descriptors: Taproot support
We introduce support for tr() descriptors alongside wsh() descriptors in
creating (compiling from policy, parsing from string) and working with
(analyizing its policy, getting spend information) a descriptor.

When compiling a Taproot descriptor, if no key from the policy could be
used as single internal key we deterministically generate an unspendable
internal key as per
https://delvingbitcoin.org/t/unspendable-keys-in-descriptors/304/21.
Similarly when lifting the policy of a Taproot descriptor, if the
internal key matches the deterministic unspendable key for this
descriptor we discard it from the analysis.

To fill information about an output for signers, we re-use
rust-miniscript PSBT input updated instead of re-inventing the wheel. It
does necessitate a hack however to use a type they would accept.

We don't change the "max size of a spending input" for now, even though
it means we would significantly overpay fees for descriptors with a
spendable internal key.
2024-03-13 19:21:47 +01:00
Antoine Poinsot
c897d41965
descriptors: encapsulate key matching logic
It will be useful when we introduce Taproot support in the next commit.
2024-03-13 19:21:46 +01:00
Antoine Poinsot
3bd9160d02
Merge #1003: Add default hint for hardware wallet errors
d2c4f136649c0a259b29531487737a50a2339be9 Add hint for hw errors (edouardparis)

Pull request description:

  Signing fails if another process has an open connection with a Ledger for example. Async-hwi needs to have a more detailed error api in order to handle graciously errors, but for now we provide a hint to what to check for the user

  close #381
  ![20240312_17h00m03s_grim](https://github.com/wizardsardine/liana/assets/6933020/6e5aff8c-d46f-4a44-a5e6-68d40e4d297c)

ACKs for top commit:
  jp1ac4:
    utACK d2c4f13664.

Tree-SHA512: 651c123e4f65af7080a6617062c98fb58f03b3b564c3bd104332eaa198b27242bda180118c996b46822b27168fabdd1ff422a9dfd2285db479f0332edc8908a4
2024-03-13 17:11:34 +01:00
Antoine Poinsot
85fdc40366
descriptor: encapsulate PSBT in/out information update
It'll make it easier to switch to update Taproot info.
2024-03-13 16:49:45 +01:00
edouardparis
a7b9718ddf
Merge #979: [GUI] fixed size/position for PSBT badges
e05e42136801e3168b99be378ae85e2852a8ccf6 refac ui: expose badge_pill width (edouardparis)
66f392c7543a013d0ba7eed8a3104538dd10f1f5 fixed size for badges (pythcoiner)

Pull request description:

  this PR try to fix #509
  i refactored some badges , moving (optional) `batch` badge before mandatory ones and give fixed positions/size for mandatory badges

  before:

  ![image](https://github.com/wizardsardine/liana/assets/124568858/02390bf1-d409-4854-a2bc-e9cf39aae53e)

  after:

  ![image](https://github.com/wizardsardine/liana/assets/124568858/38fee222-e0ee-42ad-a088-0ac449a6fa81)

ACKs for top commit:
  edouardparis:
    ACK e05e42136801e3168b99be378ae85e2852a8ccf6

Tree-SHA512: 9e7efa8aec40540255666350f2aea3f7175cb2fd161152e30335eb2a8b605ba5fa8fbac9cce90e7e3e53aab3ca71c8cc855ae8448ddfed337cf2eca2dc3d2e2a
2024-03-13 15:55:10 +01:00
edouardparis
e05e421368 refac ui: expose badge_pill width 2024-03-13 15:36:37 +01:00
jp1ac4
492baeaaba
gui: hint at rescan when importing wallet 2024-03-13 14:25:10 +00:00
Antoine Poinsot
f17092375e
Merge #1004: Fuzzing integration
3017b88e27849830530fc0ccf77df215889d17ba fuzz: fuzzing integrations, fuzz the descriptors module (Antoine Poinsot)
f7924fb9dcd4d91d404d1da736021f83619e2529 descriptors: lifting *can* fail (Antoine Poinsot)

Pull request description:

  This introduces fuzzing into our project with two fuzz targets exercising our descriptor parsing logic. See the commit messages for details. This found a crash (first commit).

  This was motivated by testing the work on Taproot (#985).

ACKs for top commit:
  darosior:
    ACK 3017b88e27849830530fc0ccf77df215889d17ba - it's not interfering with anything in the repo, been running these for half a day with no crash.

Tree-SHA512: 25c1b64a86585fc5f676c3526e2dae945b74c6b0cb4ce2d9db33dc48aa85aaa11a07b279838703d62c9ca00cf39cc34577ca19c0a8f9aaf5327266eb7be6dce0
2024-03-13 14:28:41 +01:00
Antoine Poinsot
3017b88e27
fuzz: fuzzing integrations, fuzz the descriptors module
This integrates fuzzing into our project by introducing two targets
which exercise the descriptor parsing and analysis logic.

The `descriptor_parse` is dead simple but not very effective. The
`descriptors` harness tries to be smarter by almost always generating a
valid Liana descriptor.

Of course, this is just a first integration and both could be made more
effective.
2024-03-13 12:02:51 +01:00
Antoine Poinsot
f7924fb9dc
descriptors: lifting *can* fail
Not sure what i was thinking when writing this.
2024-03-13 12:02:50 +01:00