Commit Graph

363 Commits

Author SHA1 Message Date
Jack Grigg b52e949bd6 zcash_client_backend: Migrate to correct ZIP 316 UFVK encoding
We also add support for parsing Orchard full viewing keys from encoded
UFVKs (rather than treating them as unknown). `UnifiedSpendingKey` still
does not have Orchard support, so `UnifiedFullViewingKey`s will be
generated without Orchard components.
2022-06-17 10:03:17 +00:00
Jack Grigg 76d015ed11 zcash_client_backend: Fix `UnifiedFullViewingKey` Sapling item type
Per ZIP 316, the Sapling FVK Encoding only includes `(ak, nk, ovk, dk)`
which is a subset of the Sapling `ExtendedFullViewingKey`. We therefore
need to use `DiversifiableFullViewingKey` inside `UnifiedFullViewingKey`
in order to make it parseable from the UFVK string encoding.

`zcash_client_sqlite::wallet::get_extended_full_viewing_keys` has been
removed as a consequence of this change: we can no longer reconstruct
the correct `ExtendedFullViewingKey` from the `UnifiedFullViewingKey`.
2022-06-17 10:03:17 +00:00
Jack Grigg d8b860207d zcash_client_backend: Remove account from `UnifiedFullViewingKey`
The account number is not stored in the ZIP 316 UFVK encoding, and in
general won't necessarily be known (e.g. if a UFVK is being imported
into a wallet).

`zcash_client_sqlite::wallet::init::init_accounts_table` reverts to its
previous behaviour of requiring the provided `&[UnifiedFullViewingKey]`
to be indexed by account number.
2022-06-17 10:03:17 +00:00
Jack Grigg 1ce289e568 zcash_client_backend: Pass UFVKs into `decrypt_transaction` 2022-06-17 10:03:17 +00:00
Jack Grigg c0e8ee0fa0 zcash_client_backend: Return UFVKs from `WalletRead` instead of ExtFVKs 2022-06-17 10:03:17 +00:00
Jack Grigg 0d0527dbf3 zcash_client_sqlite: Store UFVK/UA instead of Sapling ExtFVK/address
This is a breaking change to the database format. We don't have support
for migrations yet, so existing wallets won't work after this commit
until zcash/librustzcash#489 is done.
2022-06-14 02:18:25 +00:00
Jack Grigg e86ba927af zcash_client_backend: Add a fake UFVK encoding
We can't use the real ZIP 316 encoding until `UnifiedFullViewingKey` has
been altered to not store a Sapling `ExtendedFullViewingKey`. But making
that change first requires fully migrating `zcash_client_sqlite` in the
same commit (as its entire API is built around `ExtendedFullViewingKey`).

Instead, we define a temporary fake encoding, to enable migrating the
`zcash_client_sqlite` APIs more incrementally.
2022-06-14 02:18:25 +00:00
Jack Grigg 97aee898b2 zcash_client_backend: Box `zip321::parse::Param::Addr`
After adding the `RecipientAddress::Unified` enum case, `Param::Addr`
is now much larger than the other `Param` cases. This change reduces the
size of the `Param` enum, fixing a clippy lint.
2022-06-13 23:04:18 +00:00
Jack Grigg 555a621a10 Add `UnifiedAddress` generation to `UnifiedFullViewingKey` 2022-06-13 23:04:18 +00:00
Jack Grigg ed6016857e zcash_client_backend: Add `RecipientAddress::Unified` 2022-06-10 17:16:59 +00:00
Jack Grigg f20366cf86 zcash_client_backend: Migrate `RecipientAddress` to `zcash_address` 2022-06-10 15:49:19 +00:00
Jack Grigg 1161fc963f zcash_proofs 0.6.0 2022-05-10 23:33:05 +00:00
Jack Grigg 3ecfd26d79 zcash_primitives 0.6.0 2022-05-10 23:33:05 +00:00
Jack Grigg a565c7e113 hdwallet 0.3.1
This release bumped secp256k1 to 0.21.
2022-05-10 23:00:43 +00:00
Jack Grigg 144512b547 Migrate to `ff 0.12` 2022-05-06 20:03:49 +00:00
Kris Nuttycombe 9416ab3a3e Update to secp256k1 v0.21 2022-04-06 16:09:45 -06:00
Jack Grigg 91d9a42a08 Merge branch 'non-consensus-changes-on-branchid-37519621' into merge-non-consensus-changes-3 2022-02-28 23:22:40 +00:00
Kris Nuttycombe 600c06a408 Update MSRV to 1.56.1 2022-02-24 12:26:14 -07:00
str4d efe63ad62b
Merge pull request #515 from str4d/update-compact-proto
zcash_client_backend: Bring in latest `compact_formats.proto`
2022-02-18 00:59:42 +00:00
Jack Grigg cceae3ac34 zcash_client_backend: Address compact_formats.proto comments 2022-02-17 23:58:20 +00:00
Jack Grigg 18562c71dc zcash_client_backend: Bring in latest `compact_formats.proto`
Source: 83bb19918f/walletrpc/compact_formats.proto
2022-02-17 02:44:20 +00:00
Jack Grigg 511ad71a05 Bump `protobuf` to `~2.27.1`
`protobuf 2.26` raised its MSRV to 1.52.1, which we are now above.
`protobuf 2.27.0` raised its MSRV to 1.55.0, but this was reverted in
`protobuf 2.27.1`. In any case, it's clear this dependency bumps MSRV in
minor releases, so we should use tilde requirements for it.
2022-02-15 23:37:52 +00:00
Jack Grigg f822d7aabc Bump MSRV to 1.54.0
This is the MSRV for the orchard crate version that contains the changes
to the Orchard circuit.

Closes zcash/librustzcash#513.
2022-02-15 16:39:29 +00:00
Kris Nuttycombe e20de50b84 Make AccountId internal representation private. 2022-02-10 11:30:02 -07:00
Kris Nuttycombe a304c3953b Fix Clippy beta linting complaints. 2022-02-02 16:02:45 -07:00
Kris Nuttycombe 3699a6df97 Fix typos. 2022-02-02 14:00:05 -07:00
Kris Nuttycombe cdd899dda1 Fix documentation.
Co-authored-by: str4d <jack@electriccoin.co>
2022-02-02 12:53:59 -07:00
Kris Nuttycombe 6b189f18ff Correct the changelog relating to `store_decrypted_tx` 2022-02-02 10:33:44 -07:00
Kris Nuttycombe 9c2d485c80 Address comments from code review.
Co-authored-by: str4d <jack@electriccoin.co>
Co-authored-by: Daira Hopwood <daira@jacaranda.org>
2022-02-02 10:33:41 -07:00
Kris Nuttycombe 2dd0348792 Remove the `nullifiers` argument from `store_decrypted_tx`
This value can be obtained internally within the implementation
of `store_decrypted_tx` and does not need to be part of the
public API.
2022-02-02 10:32:35 -07:00
Kris Nuttycombe 41810e5be9 Merge remote-tracking branch 'upstream/non-consensus-changes-on-branchid-37519621' into autoshield-poc-daa 2022-02-02 10:32:35 -07:00
Kris Nuttycombe 3d51c53d68 Address comments from code review.
Co-authored-by: Daira Hopwood <daira@jacaranda.org>
2022-02-02 10:32:33 -07:00
Kris Nuttycombe d0e1f98429 Use extension traits for transparent-related data api functionality. 2022-02-02 10:30:43 -07:00
Kris Nuttycombe e8e5d94ea6 Mark functions that will be made crate-private as deprecated 2022-02-02 10:29:19 -07:00
Jack Grigg e9ecb19143 Restrict cargo to `protobuf >=2.20,<2.26`
`protobuf 2.26.0` bumped its MSRV to 1.52.1, which is incompatible with
our current MSRV.
2022-02-01 14:26:47 +00:00
Kris Nuttycombe 2f1d3da26d Update changelogs. 2022-01-27 16:25:01 -07:00
Kris Nuttycombe 6e11f2d11a Validate ZIP 321 request by roundtrip through the URI format.
Co-authored-by: str4d <jack@electriccoin.co>
2022-01-27 16:08:04 -07:00
Kris Nuttycombe a1e693d15f Remove the Wif type; it should not be used.
We should attempt to avoid passing spending keys back and forth
across the FFI entirely, but in any case this is no longer the
correct type to use at this boundary; we should use the encoding
of the transparent component of a unified spending key instead.
2022-01-27 16:08:04 -07:00
Kris Nuttycombe 3a20176092 Apply suggestions from code review
Co-authored-by: str4d <jack@electriccoin.co>
2022-01-27 15:00:37 -07:00
Kris Nuttycombe 6fcdfda69e Derive OVKs from transparent account-level key, not child keys.
This also renames a number of legacy key types to better reflect
their intended use.
2022-01-26 13:36:27 -07:00
Kris Nuttycombe 0b43535203 Move OutgoingViewingKey to zcash_primitives::keys 2022-01-25 08:53:51 -07:00
Kris Nuttycombe f58d191439 Move transparent account keys to zcash_primitives. 2022-01-25 08:53:51 -07:00
Kris Nuttycombe 4dac37ffde Ensure that transparent input functionality is correctly feature-flagged. 2022-01-22 22:33:22 -07:00
therealyingtong c9fe8402e2 Use transparent internal ovk in shield_transparent_funds(). 2022-01-22 22:29:45 -07:00
therealyingtong a4c9f53a3a Move ExternalPrivKey, ExternalPubKey to zcash_primitives. 2022-01-22 22:29:45 -07:00
Kris Nuttycombe 15eb5aab50 Fix a minor naming error in AccountPubKey 2022-01-21 19:08:26 -07:00
Kris Nuttycombe 7d873e9d79 Fix test compilation errors related to UFVK construction. 2022-01-21 19:01:32 -07:00
Kris Nuttycombe 574ca4e180 Add accessors to UnifiedSpendingKey 2022-01-21 18:20:12 -07:00
Kris Nuttycombe 281a4d5c16 Add accessors for the ExtendedPrivKey wrapped by AccountPrivKey 2022-01-21 18:07:23 -07:00
Kris Nuttycombe 00aee09662 Add accessors for the ExtendedPubKey wrapped by AccountPubKey 2022-01-21 14:02:51 -07:00
Kris Nuttycombe dec395a5b0 Add unified spending keys. 2022-01-21 13:54:23 -07:00
Kris Nuttycombe 8f408354b9 Remove cyclic dev dependency between zcash_client_backend and zcash_client_sqlite. 2022-01-20 21:50:26 -07:00
Kris Nuttycombe 79bd2f7733 Add missing documentation & rustfmt. 2022-01-20 20:14:44 -07:00
Kris Nuttycombe ffc4d0cefb Add newtypes for transparent keys at the account & external levels.
This updates UnifiedFullViewingKey to conform to ZIP 316, and
adds types that facilitate this support. These types should likely
be factored out from `zcash_client_backend` into `zcash_primitives`
along with the remainder of the existing unified address support.
2022-01-20 20:03:20 -07:00
Kris Nuttycombe 37e6d3a2bc Apply suggestions from code review
Co-authored-by: Daira Hopwood <daira@jacaranda.org>
Co-authored-by: ying tong <yingtong@z.cash>
2022-01-20 16:43:57 -07:00
Kris Nuttycombe 3dd1f310d9 Merge remote-tracking branch 'upstream/non-consensus-changes-on-branchid-37519621' into autoshield-poc-daa 2022-01-20 13:54:38 -07:00
Jack Grigg 142a38e792 zcash_note_encryption 0.1.0 2021-12-17 20:00:46 +00:00
Jack Grigg e148ca84ba Migrate to latest `zcash_note_encryption` API 2021-12-17 05:34:45 +00:00
Kris Nuttycombe fc0dd8e3eb Merge remote-tracking branch 'upstream/master' into autoshield-poc-daa 2021-10-25 13:24:03 -06:00
Kris Nuttycombe 120cc70a6d Fix type of default_address 2021-10-11 16:34:37 -06:00
Kris Nuttycombe 1373221439 Renames the `ExtendedFullViewingKey::address` method to `find_address`.
This also adds a new semantically different `address` method which
attempts to produce an address given the specified diversifier index,
and returns `None` if that index does not produce a valid diversifier.

It is then up to the caller to search the diversifier index space if
the diversifier index that they are attempting to use does not result in
a valid diversifier.
2021-10-11 16:34:37 -06:00
Kris Nuttycombe cc58a21ad7 Feature-flag transparent functionality in zcash_client_sqlite
This fixes the wasm32-wasi build issues by excluding the
hdwallet dependencies which are not wasm32-wasi compatible.
2021-10-04 16:53:55 -06:00
Kris Nuttycombe 86da9434ad Fix zcash_client_backend doctest 2021-10-04 09:12:28 -06:00
Kris Nuttycombe 74b0c50294 Fix transitivity of the test-dependencies feature. 2021-10-01 15:20:01 -06:00
Kris Nuttycombe da3c84ff31 Update hdwallet to depend upon secp256k1-v0.20 2021-10-01 12:52:19 -06:00
Kris Nuttycombe e30c5cd628 Enforce maximum zip321 payment count in TransactionRequest constructor. 2021-10-01 12:22:59 -06:00
Kris Nuttycombe d43a893c72 Apply suggestions from code review & update changelog
Co-authored-by: str4d <jack@electriccoin.co>
Co-authored-by: Daira Hopwood <daira@jacaranda.org>
2021-10-01 12:03:06 -06:00
Kris Nuttycombe d49a20e6d2 Modify WalletTransparentOutput to wrap TxOut directly. 2021-10-01 11:42:04 -06:00
Kris Nuttycombe 6cf0749ac9 Merge remote-tracking branch 'upstream/master' into autoshield-poc-reorder 2021-10-01 11:03:41 -06:00
Kris Nuttycombe db89569b90 Address documentation & naming requests from code review. 2021-10-01 11:03:09 -06:00
Kris Nuttycombe 2053d7f57b Always take number of confirmations as a parameter. 2021-10-01 11:00:50 -06:00
Jack Grigg 65e1d32774 ff 0.11, group 0.11, etc. 2021-09-09 18:20:37 +01:00
Kris Nuttycombe edd7471d90 Merge remote-tracking branch 'upstream/master' into autoshield-poc-daa 2021-08-27 11:08:50 -06:00
Jack Grigg ecb82ed813 nom 7 2021-08-23 20:15:51 +01:00
Kris Nuttycombe b783c4d0e7 Merge remote-tracking branch 'upstream/master' into autoshield-poc-daa 2021-08-12 11:21:30 -06:00
Jack Grigg 0facec094f Update changelogs with `EphemeralKeyBytes` changes 2021-08-09 21:45:16 +01:00
Jack Grigg 279a8b6bb6 Use `EphemeralKeyBytes` type in place of `[u8; 32]` 2021-08-09 21:28:42 +01:00
Jack Grigg 83c6a2d1ca Store OutputDescription `ephemeral_key` as bytes
This removes an unnecessary `to_bytes` during trial decryption of notes,
and more closely matches the protocol spec. We retain the consensus rule
canonicity check on epk due to `SaplingVerificationContext::check_output`
taking a `jubjub::ExtendedPoint`, forcing `zcashd` to parse the bytes.
2021-08-06 16:54:48 +01:00
Jack Grigg 0f15743200 Disable default benchmark harness for all workspace crates
This is necessary in order to provide criterion-specific arguments to
`cargo bench`, such as `--profile-time`.
2021-08-05 22:39:36 +01:00
Kris Nuttycombe 1a5aad723b Use generalized signature_hash for transaction builder. 2021-06-04 15:45:39 -06:00
Kris Nuttycombe 55d1090f70 Add v5 txid & signature hashing. 2021-06-04 15:45:39 -06:00
Jack Grigg 1222391dd7 Migrate to bitvec 0.22, ff 0.10, etc.
Requires patching three dependencies:

- bellman is pending a new release.
- nom is part of the funty breakage; we are blocking on a new release.
- orchard is in development.
2021-06-04 22:02:48 +01:00
Kris Nuttycombe 523424e50b Move Transparent components to a bundle within TransactionData 2021-06-03 18:46:38 -06:00
Kris Nuttycombe 84e8952ec3 Move Sapling components to a bundle within TransactionData 2021-06-03 18:46:38 -06:00
Kris Nuttycombe 72ac97a35f Derive transaction version & branch id from target height. 2021-06-02 13:45:29 -06:00
Kris Nuttycombe 8267d06846 Refactor transaction builder to create separate builders for each section. 2021-06-02 11:48:46 -06:00
Kris Nuttycombe 76999eb5c7 Make txid contents private & use txid for TzeOutPoint 2021-06-01 07:03:31 -06:00
Kris Nuttycombe 4efb21d1c7 Make amount addition and subtraction traits use checked operations. 2021-06-01 07:03:31 -06:00
Jack Grigg 5623e02a7c Migrate to ff 0.9 et al. 2021-05-19 18:29:37 +01:00
Kris Nuttycombe fd47ee3652 Fix missing method in in-memory wallet prototype. 2021-05-14 15:09:36 -06:00
Kris Nuttycombe 8e3e7de50c Minor code cleanup. 2021-05-14 14:17:42 -06:00
Kevin Gorham c1bc06964f Add get_all_nullifiers. 2021-04-16 14:27:18 -06:00
Kevin Gorham bb68744df1 Ensure that rewinds go far enough to properly restore incremental witness state. 2021-04-16 14:27:18 -06:00
Kris Nuttycombe 9b3025de4d Add ZIP-321 request based sends to zcash_client_backend. 2021-04-16 14:26:53 -06:00
Kevin Gorham 8e16d93f94 Update accounts table create statement.
This PR makes the opinionated change that T-addrs are required
to be supported when using the zcash_client_sqlite backend.
2021-04-16 14:26:53 -06:00
Kevin Gorham 5595ca225c Add public key derivations and related tests. 2021-04-16 14:26:53 -06:00
Kris Nuttycombe 665c4c7aff Figure out the account ID for z->t spends. 2021-04-16 14:26:53 -06:00
Kris Nuttycombe 13cd7498b7 Store vout as part of store_decrypted_tx 2021-04-16 14:26:53 -06:00
Kris Nuttycombe 8828276361 Query for unspent utxos checks to ensure that spending tx is mined.
Also make it an error to try to send a memo to a transparent address.
2021-04-16 14:26:51 -06:00
Kris Nuttycombe b88ee47e36 Add confirmation depth to shield_funds 2021-04-16 14:23:28 -06:00