From 0c5a365c604c9ddcf7d006cff48720e3fb6aa553 Mon Sep 17 00:00:00 2001 From: Kris Nuttycombe Date: Tue, 12 Mar 2024 08:22:44 -0600 Subject: [PATCH] zcash_client_sqlite: Update to make use of `orchard::note::Rho` --- Cargo.lock | 3 +- Cargo.toml | 3 ++ zcash_client_backend/src/decrypt.rs | 2 +- zcash_client_backend/src/scanning.rs | 4 +-- zcash_client_sqlite/src/testing.rs | 37 ++++++++--------------- zcash_client_sqlite/src/wallet/orchard.rs | 4 +-- 6 files changed, 21 insertions(+), 32 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b671f7ebf..8f16ba160 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1476,8 +1476,7 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "orchard" version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb255c3ffdccd3c84fe9ebed72aef64fdc72e6a3e4180dd411002d47abaad42" +source = "git+https://github.com/zcash/orchard?rev=e74879dd0ad0918f4ffe0826e03905cd819981bd#e74879dd0ad0918f4ffe0826e03905cd819981bd" dependencies = [ "aes", "bitvec", diff --git a/Cargo.toml b/Cargo.toml index d90c6d3e0..68ef991c0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -120,3 +120,6 @@ zip32 = "0.1" lto = true panic = 'abort' codegen-units = 1 + +[patch.crates-io] +orchard = { git = "https://github.com/zcash/orchard", rev = "e74879dd0ad0918f4ffe0826e03905cd819981bd" } diff --git a/zcash_client_backend/src/decrypt.rs b/zcash_client_backend/src/decrypt.rs index fa197ad05..0db6c9481 100644 --- a/zcash_client_backend/src/decrypt.rs +++ b/zcash_client_backend/src/decrypt.rs @@ -185,7 +185,7 @@ pub fn decrypt_transaction<'a, P: consensus::Parameters, AccountId: Copy>( .iter() .enumerate() .flat_map(move |(index, action)| { - let domain = OrchardDomain::for_nullifier(*action.nullifier()); + let domain = OrchardDomain::for_action(action); let account = account; try_note_decryption(&domain, &ivk_external, action) .map(|ret| (ret, TransferType::Incoming)) diff --git a/zcash_client_backend/src/scanning.rs b/zcash_client_backend/src/scanning.rs index 4a99f8754..0da940ce7 100644 --- a/zcash_client_backend/src/scanning.rs +++ b/zcash_client_backend/src/scanning.rs @@ -624,7 +624,7 @@ where self.orchard.add_outputs( block_hash, txid, - |action| OrchardDomain::for_nullifier(action.nullifier()), + |action| OrchardDomain::for_compact_action(action), &tx.actions .iter() .enumerate() @@ -888,7 +888,7 @@ where index: i, } })?; - Ok((OrchardDomain::for_nullifier(action.nullifier()), action)) + Ok((OrchardDomain::for_compact_action(&action), action)) }) .collect::, _>>()?, batch_runners diff --git a/zcash_client_sqlite/src/testing.rs b/zcash_client_sqlite/src/testing.rs index 8682e5449..2975b8011 100644 --- a/zcash_client_sqlite/src/testing.rs +++ b/zcash_client_sqlite/src/testing.rs @@ -77,7 +77,6 @@ use super::BlockDb; #[cfg(feature = "orchard")] use { group::ff::{Field, PrimeField}, - orchard::note_encryption::{OrchardDomain, OrchardNoteEncryption}, pasta_curves::pallas, zcash_client_backend::proto::compact_formats::CompactOrchardAction, }; @@ -1095,40 +1094,28 @@ fn compact_sapling_output( /// Returns the `CompactOrchardAction` and the new note. #[cfg(feature = "orchard")] fn compact_orchard_action( - nullifier: orchard::note::Nullifier, + nf_old: orchard::note::Nullifier, recipient: orchard::Address, value: NonNegativeAmount, ovk: Option, rng: &mut R, ) -> (CompactOrchardAction, orchard::Note) { - let rseed = { - loop { - let mut bytes = [0; 32]; - rng.fill_bytes(&mut bytes); - let rseed = orchard::note::RandomSeed::from_bytes(bytes, &nullifier); - if rseed.is_some().into() { - break rseed.unwrap(); - } - } - }; - let note = orchard::Note::from_parts( + use zcash_note_encryption::ShieldedOutput; + + let (compact_action, note) = orchard::note_encryption::testing::fake_compact_action( + rng, + nf_old, recipient, orchard::value::NoteValue::from_raw(value.into_u64()), - nullifier, - rseed, - ) - .unwrap(); - let encryptor = OrchardNoteEncryption::new(ovk, note, *MemoBytes::empty().as_array()); - let cmx = orchard::note::ExtractedNoteCommitment::from(note.commitment()); - let ephemeral_key = OrchardDomain::epk_bytes(encryptor.epk()).0.to_vec(); - let enc_ciphertext = encryptor.encrypt_note_plaintext(); + ovk, + ); ( CompactOrchardAction { - nullifier: nullifier.to_bytes().to_vec(), - cmx: cmx.to_bytes().to_vec(), - ephemeral_key, - ciphertext: enc_ciphertext.as_ref()[..52].to_vec(), + nullifier: compact_action.nullifier().to_bytes().to_vec(), + cmx: compact_action.cmx().to_bytes().to_vec(), + ephemeral_key: compact_action.ephemeral_key().0.to_vec(), + ciphertext: compact_action.enc_ciphertext().as_ref()[..52].to_vec(), }, note, ) diff --git a/zcash_client_sqlite/src/wallet/orchard.rs b/zcash_client_sqlite/src/wallet/orchard.rs index e3eacdfe8..3b3859077 100644 --- a/zcash_client_sqlite/src/wallet/orchard.rs +++ b/zcash_client_sqlite/src/wallet/orchard.rs @@ -1,7 +1,7 @@ use incrementalmerkletree::Position; use orchard::{ keys::Diversifier, - note::{Note, Nullifier, RandomSeed}, + note::{Note, Nullifier, RandomSeed, Rho}, }; use rusqlite::{named_params, params, Connection, Row}; @@ -121,7 +121,7 @@ fn to_spendable_note( let rho = { let rho_bytes: [u8; 32] = row.get(5)?; - Option::from(Nullifier::from_bytes(&rho_bytes)) + Option::from(Rho::from_bytes(&rho_bytes)) .ok_or_else(|| SqliteClientError::CorruptedData("Invalid rho.".to_string())) }?;