Commit Graph

739 Commits

Author SHA1 Message Date
Daira-Emma Hopwood 4f43a01f83 Refactor transparent address metadata lookups. This is correct as-is but
will be simplified and made more efficient in subsequent commmits.

Signed-off-by: Daira-Emma Hopwood <daira@jacaranda.org>
2024-06-27 01:43:09 +01:00
Daira-Emma Hopwood 6b465b702e Document the mapping functions on `zcash_client_backend::wallet::Recipient`.
Signed-off-by: Daira-Emma Hopwood <daira@jacaranda.org>
2024-06-25 08:40:08 +01:00
Daira-Emma Hopwood e164b59329 Move most ephemeral address index handling into helper functions in
`zcash_client_sqlite::wallet::transparent::ephemeral`. Also report the
account id and index for `SqliteClientError::ReachedGapLimit`.

Signed-off-by: Daira-Emma Hopwood <daira@jacaranda.org>
2024-06-25 08:40:08 +01:00
Daira-Emma Hopwood 994f6ff387 Change type of `n` in `reserve_next_n_ephemeral_addresses`.
Signed-off-by: Daira-Emma Hopwood <daira@jacaranda.org>
2024-06-25 08:40:08 +01:00
Daira-Emma Hopwood 2f521d7873 If a change memo is supplied, it should not be used in the second step
of a ZIP 320 proposal.

Signed-off-by: Daira-Emma Hopwood <daira@jacaranda.org>
2024-06-25 08:40:08 +01:00
Daira-Emma Hopwood c6520cf6a6 Change the protobuf schema to explicitly specify whether a `ChangeValue`
is ephemeral.

This also fixes `try_into_standard_proposal` to allow decoding from the
protobuf representation into a proposal that uses references to prior
ephemeral transparent outputs, provided that the "transparent-inputs"
feature is enabled.

Signed-off-by: Daira-Emma Hopwood <daira@jacaranda.org>
2024-06-25 08:40:08 +01:00
Daira-Emma Hopwood 0f3de63ae1 Apply documentation suggestions from code review.
Co-authored-by: str4d <thestr4d@gmail.com>
Signed-off-by: Daira-Emma Hopwood <daira@jacaranda.org>
2024-06-25 08:40:08 +01:00
Daira-Emma Hopwood 2fae4bb244 ZIP 320 implementation.
Co-authored-by: Kris Nuttycombe <kris@nutty.land>
Co-authored-by: Jack Grigg <str4d@electriccoin.co>
Signed-off-by: Daira-Emma Hopwood <daira@jacaranda.org>
2024-06-25 08:40:08 +01:00
Kris Nuttycombe 72d8df8e68 zcash_client_sqlite: Align handling of transparent UTXOs with that of shielded notes.
Co-authored-by: Daira-Emma Hopwood <daira@jacaranda.org>
Co-authored-by: Jack Grigg <jack@electriccoin.co>
2024-06-21 19:13:18 -06:00
Daira-Emma Hopwood 21d573122c `zcash_client_backend::{fixed,standard,zip317}::SingleOutputChangeStrategy`
now implement a different strategy for choosing whether there will be any
change, and its value. The aims are:

* Ensure that it is possible to create fully transparent transactions with
  no change (this will be needed for ZIP 320). The `InsufficientFunds`
  error in this case should have a `required` field that reflects the
  additional amount needed, according to the fee calculated without an
  extra change output.
* Avoid leaking information about note amounts in some cases: an adversary
  that knew the number of external recipients and the sum of their outputs
  was able to learn the sum of the inputs if no change output was present.
* Defend against losing money by using `DustAction::AddDustToFee` with a
  too-high dust threshold.
* Ensure that if a "change memo" is requested, there will always be a
  shielded change output in which to put it. Previously, this would not
  be the case when using `DustAction::AddDustToFee`.

Co-authored-by: Jack Grigg <jack@electriccoin.co>
Co-authored-by: Kris Nuttycombe <kris@nutty.land>
Signed-off-by: Daira-Emma Hopwood <daira@jacaranda.org>
2024-06-19 13:12:17 +01:00
Daira-Emma Hopwood 0b7f60d544 Refactoring of change calculation.
Signed-off-by: Daira-Emma Hopwood <daira@jacaranda.org>
2024-06-18 21:24:33 +01:00
Daira-Emma Hopwood 4f935a7fa3 Define an error type alias for brevity.
Signed-off-by: Daira-Emma Hopwood <daira@jacaranda.org>
2024-06-18 21:24:33 +01:00
Daira-Emma Hopwood 9881e811ea Miscellaneous documentation improvements.
Signed-off-by: Daira-Emma Hopwood <daira@jacaranda.org>
2024-06-18 21:24:33 +01:00
Daira-Emma Hopwood c9c7fa3b79 Use a simpler way of ascribing a type to an empty slice.
Signed-off-by: Daira-Emma Hopwood <daira@jacaranda.org>
2024-06-18 21:06:42 +01:00
Daira-Emma Hopwood 17af8e32e8 Refactor `FeeRule::fee_required` to take the sizes of transparent
inputs and outputs.

Co-authored-by: Kris Nuttycombe <kris@nutty.land>
Signed-off-by: Daira-Emma Hopwood <daira@jacaranda.org>
2024-06-18 21:05:49 +01:00
Daira-Emma Hopwood cefbaf59d5 Add `zcash_client_backend::fees::{sapling,orchard}::EmptyBundleView`.
Signed-off-by: Daira-Emma Hopwood <daira@jacaranda.org>
2024-06-18 21:03:22 +01:00
Daira-Emma Hopwood 2337f79484 Add `zcash_keys::Address::Tex`.
Signed-off-by: Daira-Emma Hopwood <daira@jacaranda.org>
2024-06-18 21:03:22 +01:00
Daira-Emma Hopwood 6c90219817 Prefer the `PoolType::{SAPLING, ORCHARD, TRANSPARENT}` constants to
`PoolType::{Shielded(_), Transparent}`.

Signed-off-by: Daira-Emma Hopwood <daira@jacaranda.org>
2024-06-18 21:03:22 +01:00
Daira-Emma Hopwood c3e532f29b The return type of `ChangeValue::new` is now optional; it returns `None`
if a memo is given for the transparent pool. Use `ChangeValue::shielded`
to avoid this error case when creating a `ChangeValue` known to be for a
shielded pool.

Co-authored-by: Jack Grigg <jack@electriccoin.co>
Signed-off-by: Daira-Emma Hopwood <daira@jacaranda.org>
2024-06-18 21:03:22 +01:00
Daira-Emma Hopwood 3582f84686 Allow `ChangeValue::output_pool` to reference the transparent pool by
changing its type from `ShieldedProtocol` to `PoolType`.

Also fix compilation errors when the "orchard" feature is used without
the "transparent-inputs" feature.

Signed-off-by: Daira-Emma Hopwood <daira@jacaranda.org>
2024-06-18 21:03:22 +01:00
Andrew Arnott ce40387511
Add `import_account_hd` and `import_account_ufvk` methods 2024-06-17 08:57:39 -06:00
Kris Nuttycombe ecea9ca196 zcash_client_sqlite: Fix shardtree error caused by pruning after frontier insertion.
Fixes #1398
2024-06-13 18:09:46 -06:00
Kris Nuttycombe de66c5b154 zcash_client_sqlite: Add test to reproduce incomplete penultimate subtree error. 2024-06-13 18:09:39 -06:00
jimmycathy 3510384f10 chore: remove repetitive words
Signed-off-by: jimmycathy <clonecode@outlook.com>
2024-05-04 20:54:15 +08:00
Kris Nuttycombe f28aa6b304 `zcash_{keys, client_backend}`: Fix no-default-features build. 2024-04-11 18:00:59 -06:00
Kris Nuttycombe b60600a4c3 zcash_client_sqlite: Use `ZcashAddress` for persistence of sent note addresses
Prior to this change, the recipient of a sent transaction would always
be shown as the protocol-level address, instead of any unified address
intended as the recipient. Now, instead of reencoding the recipient
address, we use the original `ZcashAddress` value from the payment
request.
2024-04-05 16:48:13 -06:00
Kris Nuttycombe 86e1181259 zip321: Make `Payment` fields private. 2024-04-05 16:30:31 -06:00
Kris Nuttycombe 3ea7d84183 zcash_client_backend: Update to use extracted `zip321` crate 2024-04-05 16:25:21 -06:00
Kris Nuttycombe d982d7826a zip321: Replace dependencies on `zcash_keys` types with `zcash_address` 2024-04-05 16:10:22 -06:00
Kris Nuttycombe fdf86ad740 Move `zcash_client_backend::zip321` to the `zip321` crate. 2024-04-03 12:14:20 -06:00
Jack Grigg 24277a6ba4 zcash_client_backend: Implement async wallet synchronization function
This implements the necessary state machine for taking a wallet in some
arbitrary synchronization status, and fully scanning (the remainder of)
the chain.

Closes zcash/librustzcash#1169.
2024-04-02 00:26:08 +00:00
oscar-pepper 25b8404e2d
Add block cache trait (#1192) 2024-04-01 21:55:16 +01:00
Kris Nuttycombe d431889560 zcash_client_sqlite: Fix incorrect input selection filtering when sending to transparent.
The "avoid pool crossing" conditions in not selection were erroneously
not taking into account the need to pay transparent outputs.
2024-03-27 14:58:12 -06:00
Kris Nuttycombe 151e6e526e zcash_client_backend: Track external addresses in inter-account transactions.
Previously, if the funding account for a received transaction output was
determined to be an account known to the wallet, the output was recorded
as though it were sent to an internal (change) address of the wallet.
2024-03-25 07:59:21 -06:00
Kris Nuttycombe 7e7dba8020 zcash_client_sqlite: Add `get_funding_accounts` method. 2024-03-25 07:59:20 -06:00
Kris Nuttycombe 874d6b608b zcash_client_backend: Ensure checkpoint at the end of each block.
This fixes an error wherein a note commitment in the last note
commitment position in a block was not being correctly marked as a
checkpoint.

This would occur when a block contained both Sapling and Orchard note
commitments, but the final transaction in the block contained only
either Sapling or Orchard note commitments, but not both.

Fixes #1302
2024-03-24 11:50:12 -06:00
Kris Nuttycombe 5d3ddabe24 zcash_client_sqlite: Add a test to attempt to simulate the checkpoint conflict bug (not failing.) 2024-03-23 08:37:59 -06:00
Kris Nuttycombe dc4fccf566 zcash_client_sqlite: Modify `TestState` to allow initialization with chain state. 2024-03-20 20:43:49 -06:00
Kris Nuttycombe 5f1d75937b zcash_client_backend: Treat protobuf default as the empty tree.
Fixes #1280
2024-03-19 17:26:45 -06:00
str4d 97651a6d4b
Merge pull request #1289 from nuttycom/sqlite_wallet/branching_chain_test_fixes
zcash_client_sqlite: Fix `scan_complete` tests.
2024-03-19 22:47:30 +00:00
Kris Nuttycombe 4f7c5bd722 zcash_client_sqlite: Fix `scan_complete` tests. 2024-03-19 16:11:57 -06:00
Jack Grigg b189fe7a36 Remove `orchard` feature flag from behind `zcash_unstable` cfg flag 2024-03-19 18:24:39 +00:00
Jack Grigg 3090aff87f Distinguish seed relevance when no derived accounts are present
During wallet migration in particular, the absence of _any_ accounts is
expected, and all seeds should be treated as relevant (because accounts
cannot be added before a wallet is initialized).
2024-03-19 17:53:41 +00:00
Jack Grigg e6bc21b461 Add `WalletRead::is_seed_relevant_to_any_derived_accounts` 2024-03-19 00:34:28 +00:00
Jack Grigg 703e50ae03 Add `Account::uivk`
The blanket `impl Account<A> for (A, Option<UnifiedFullViewingKey>)` is
removed because we cannot know the UIVK for `(A, None)`. We instead
provide a blanket impl for `(A, UnifiedIncomingViewingKey)`. We also
move both of them behind `test-dependencies` because they are only
intended for testing purposes.
2024-03-19 00:34:28 +00:00
Kris Nuttycombe ab3e790bfc zcash_client_backend: Rename `AccountKind` to `AccountSource` 2024-03-15 09:28:35 -06:00
Willem Olding 1775f6525b
Add WASM support to `lightwalletd-tonic` feature flag (#1270)
The transport-specific code is moved behind a new `lightwalletd-tonic-transport` feature flag.
2024-03-15 11:58:13 +00:00
Kris Nuttycombe 46fd6ab0fe zcash_client_backend: Make `WalletRead::get_transaction` return `Result<Option<Transaction>, _>`
This should never have had the behavior of returning an error on a
missing txid in the first place; doing so conflates database corruption
or connectivity errors with the ordinary case where data may not be
available.
2024-03-14 17:38:51 -06:00
Kris Nuttycombe cc990b60e0 zcash_keys: Remove HdSeedFingerprint as it duplicates `zip32::fingerprint::SeedFingerprint` 2024-03-14 17:09:03 -06:00
Kris Nuttycombe 0bae47b05b zcash_client_backend: Improve API ergonomics for input selection. 2024-03-13 19:33:06 -06:00
Kris Nuttycombe 22f341888f zcash_client_backend: Add `SpendableNotes` type and `NoteRetention` trait. 2024-03-13 19:32:16 -06:00
str4d 2e0a3005de
Merge pull request #1268 from nuttycom/sqlite_wallet/cross_pool_note_selection
zcash_client_backend: Fix note selection & add more multi-pool tests.
2024-03-14 01:12:42 +00:00
Kris Nuttycombe a81e7ff306 zcash_client_backend: Fix note selection & add more cross-pool tests. 2024-03-13 18:44:36 -06:00
Jack Grigg bbb7f36e55 zcash_client_backend: Add `WalletRead::get_account` 2024-03-13 21:00:59 +00:00
Jack Grigg 64aabdc54a Rename `WalletRead::get_seed_account` to `WalletRead::get_derived_account` 2024-03-13 21:00:59 +00:00
Jack Grigg 65093487c3 zcash_client_backend: Expose the kind of an `Account` 2024-03-13 21:00:59 +00:00
Kris Nuttycombe dd63a6e3dd zcash_client_backend: Remove unnecessary `ReceivedNote::traverse_opt` 2024-03-13 14:19:26 -06:00
Kris Nuttycombe b2597aa952 zcash_client_backend: Add a test for ZIP 317 cross-pool payments. 2024-03-13 13:54:53 -06:00
Jack Grigg 634ebf51ef Reorder `WalletRead` and `WalletWrite` trait methods for clarity 2024-03-13 16:00:32 +00:00
Jack Grigg 7d603b8c59 zcash_client_backend: Add `proto::service::TreeState::to_chain_state` 2024-03-13 12:54:58 +00:00
Kris Nuttycombe a0460886f4 Fix stray clippy complaint. 2024-03-12 18:27:02 -06:00
Kris Nuttycombe 2ba89a6d16 zcash_client_backend: Fix `scan_cached_blocks` example doc compilation errors. 2024-03-12 18:27:02 -06:00
Kris Nuttycombe f58263e211 zcash_client_backend: Require the tree state for the start of each scanned range.
In order to support constructing the anchor for multiple pools with a
common anchor height, we must be able to checkpoint each note commitment
tree (and consequently compute the root) at that height. Since we may
not have the information in the tree needed to do so, we require that it
be provided.

As a bonus, this change makes it possible to improve the UX around
spendability, because we will no longer require subtree ranges below
received notes to be fully scanned; the inserted frontier provides
sufficient information to make them spendable.
2024-03-12 18:14:11 -06:00
Kris Nuttycombe 0c5a365c60 zcash_client_sqlite: Update to make use of `orchard::note::Rho` 2024-03-12 17:28:10 -06:00
Kris Nuttycombe 33e943d14a zcash_client_backend: Add `WalletRead::get_seed_account` 2024-03-12 11:21:04 -06:00
Kris Nuttycombe 5e810d3689
Merge pull request #1258 from nuttycom/sqlite_wallet/fuzzy_key_matching
Return partial matches when using `WalletRead::get_account_for_ufvk`.
2024-03-12 11:12:34 -06:00
Kris Nuttycombe 09181f458c zcash_client_sqlite: Return a backend-specific `Account` type from get_account_by_ufvk. 2024-03-12 08:59:53 -06:00
Jack Grigg 5a6057b8fb zcash_client_backend: Detect Orchard dust in `zip317::SingleOutputChangeStrategy` 2024-03-11 18:58:09 +00:00
Kris Nuttycombe 1028894324 zcash_client_sqlite: Minor refactoring for improved debuggability & future Sapling flagging. 2024-03-11 18:58:09 +00:00
Kris Nuttycombe 8dfa836a03 zcash_client_sqlite: Use correct offsets for Orchard commitment positions. 2024-03-11 17:42:23 +00:00
Kris Nuttycombe 374ed8cf94 zcash_client_sqlite: Add backend impl for the Orchard note commitment tree 2024-03-11 16:35:01 +00:00
Kris Nuttycombe de58b5a5b1 zcash_client_sqlite: Add a failing test of cross-pool transfer 2024-03-11 11:36:35 +00:00
Jack Grigg c4abcba343 zcash_client_backend: Add Orchard change output support to proposals 2024-03-10 21:47:40 +00:00
Kris Nuttycombe e24d93ccfd
Merge pull request #1228 from Oscar-Pepper/fix_cargo_doc_build_failure
Fixed cargo doc build failure
2024-03-08 15:44:09 -07:00
Kris Nuttycombe 78e4916899 zcash_client_backend: Generalize `DecryptedOutput` to support Orchard 2024-03-08 13:48:30 -07:00
Kris Nuttycombe 4c5ce32dee zcash_client_backend: Use `NonNegativeAmount` for `select_spendable_notes` 2024-03-08 13:48:30 -07:00
Kris Nuttycombe 8f4de9b235
Merge pull request #1235 from zcash/diverse_accounts
zcash_client_sqlite: Rework accounts to support imported viewing keys
2024-03-08 13:39:08 -07:00
Andrew Arnott 0c80893ce0 zcash_client_sqlite: Rework accounts to support imported viewing keys 2024-03-08 18:55:18 +00:00
Kris Nuttycombe 4532520670 zcash_client_backend: Add Orchard frontier to `AccountBirthday` 2024-03-07 14:45:23 -07:00
Oscar Pepper ab701118f3
zcash_client_backend: Fixed cargo doc build failure when transparent-inputs feature is not specified 2024-03-07 11:33:10 +00:00
Kris Nuttycombe 376db4684b Fix incorrect zip321 amount parsing. 2024-03-05 21:50:25 -07:00
Kris Nuttycombe 6b4942f8eb Add failing test for incorrect zip321 amount parsing. 2024-03-05 21:48:05 -07:00
Kris Nuttycombe eaabc0f514 Apply suggestions from code review
Co-authored-by: Daira-Emma Hopwood <daira@jacaranda.org>
2024-03-05 20:03:46 -07:00
Kris Nuttycombe 5675a76f0d zcash_protocol: Use `BalanceError` instead of `()` for monetary range violations. 2024-03-05 13:59:26 -07:00
Kris Nuttycombe a823ed776f Expose address generation errors when constructing default addresses 2024-03-05 13:36:15 -07:00
Kris Nuttycombe 4b18426fcd zcash_address: Use `zcash_protocol::consensus::NetworkType`
This inverts the dependency relationship between `zcash_protocol` and
`zcash_address`, permitting the network constants (primarily the HRPs)
defined in `zcash_protocol` to be used directly in `zcash_address`
instead of being duplicated.
2024-03-05 13:36:15 -07:00
Kris Nuttycombe 64454100c5 zcash_client_backend: Move the `ShieldedProtocol` and `PoolType` types to `zcash_protocol` 2024-03-05 09:46:03 -07:00
Kris Nuttycombe a35ccfc10b Fix broken intra-doc links after `zcash_protocol` crate extraction. 2024-03-05 09:45:24 -07:00
Kris Nuttycombe eb3c7b479e zcash_protocol: Modify `Zatoshis` to directly wrap a u64 2024-03-05 09:45:24 -07:00
Kris Nuttycombe 5e4d9abbce Move `Amount` and `NonNegativeAmount` types to the `zcash_protocol` crate. 2024-03-05 09:45:24 -07:00
Kris Nuttycombe bacfe3cb9d Move `zcash_primitives::{consensus, constants}` to the `zcash_protocol` crate 2024-03-05 09:45:24 -07:00
Kris Nuttycombe 0d430ba62c Apply documentation suggestions from code review.
Co-authored-by: str4d <thestr4d@gmail.com>
2024-03-04 13:32:26 -07:00
Kris Nuttycombe e4c0b0e63f zcash_client_backend: Add `WalletRead::validate_seed`
This adds a mechanism that allows a caller to verify that a given seed
generates the viewing key that is stored in the wallet for a specified
account.

Fixes #1189
2024-03-04 10:59:56 -07:00
Kris Nuttycombe e44ddee8ad zcash_client_backend: Add documentation for the `data_api` module.
Fixes #1209
2024-03-01 00:47:15 +00:00
Kris Nuttycombe a4b951d193 Apply suggestions from code review
Co-authored-by: str4d <thestr4d@gmail.com>
2024-02-29 15:19:07 -07:00
Kris Nuttycombe 27f6207a7c zcash_client_backend: Pass nullifiers separately from scanning keys. 2024-02-29 12:06:22 -07:00
Kris Nuttycombe a63d5e51d1 zcash_client_backend: Return decoding errors from `BatchRunners::add_block` 2024-02-29 12:04:55 -07:00
Kris Nuttycombe 7e8723bea9 zcash_client_backend: Add Orchard support to batch scanning. 2024-02-29 12:04:53 -07:00
Kris Nuttycombe 880c24c45d zcash_client_backend: Generalize key source metadata. 2024-02-29 11:55:44 -07:00
Kris Nuttycombe 802c01002a zcash_client_backend: Rework scanning key identifiers.
In the process of making the internals of `scan_block_with_runner`
reusable across Sapling and Orchard, it became evident that key
identifier abstraction along the lines of #1175 is needed more
generally. This commit refactors the use of ZIP 32 account identifiers
and key scopes to better separate scanning concerns from ZIP 32 key
derivation. In the process, this removes a fair amount of unnecessary
polymorphism from `zcash_client_backend::wallet::WalletTx` and related
types.
2024-02-29 11:55:25 -07:00