From 63bf21cb12adb69d954a696e9d817070de216495 Mon Sep 17 00:00:00 2001 From: Alfredo Garcia Date: Fri, 24 May 2024 15:31:18 -0300 Subject: [PATCH] leave zebra-utils untouched --- Cargo.lock | 56 +++++++++++++++++-- zebra-scan/src/service/scan_task/scan.rs | 14 ----- zebra-utils/Cargo.toml | 5 +- .../src/bin/scanning-results-reader/main.rs | 25 ++++----- 4 files changed, 64 insertions(+), 36 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 74527c786..a3e2ec908 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4265,6 +4265,18 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shardtree" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c19f96dde3a8693874f7e7c53d95616569b4009379a903789efbd448f4ea9cc7" +dependencies = [ + "bitflags 2.5.0", + "either", + "incrementalmerkletree", + "tracing", +] + [[package]] name = "shardtree" version = "0.3.1" @@ -5776,6 +5788,39 @@ dependencies = [ "zcash_protocol", ] +[[package]] +name = "zcash_client_backend" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6a382af39be9ee5a3788157145c404b7cd19acc440903f6c34b09fb44f0e991" +dependencies = [ + "base64 0.21.7", + "bech32", + "bls12_381", + "bs58", + "crossbeam-channel", + "group", + "hex", + "incrementalmerkletree", + "memuse", + "nom", + "orchard 0.6.0", + "percent-encoding", + "prost", + "rayon", + "secrecy", + "shardtree 0.1.0", + "subtle", + "time", + "tonic-build 0.10.2", + "tracing", + "which", + "zcash_address", + "zcash_encoding", + "zcash_note_encryption", + "zcash_primitives 0.13.0", +] + [[package]] name = "zcash_client_backend" version = "0.12.1" @@ -5802,7 +5847,7 @@ dependencies = [ "rayon", "sapling-crypto", "secrecy", - "shardtree", + "shardtree 0.3.1", "subtle", "time", "tonic-build 0.10.2", @@ -6127,7 +6172,7 @@ dependencies = [ "uint", "x25519-dalek", "zcash_address", - "zcash_client_backend", + "zcash_client_backend 0.12.1", "zcash_encoding", "zcash_history", "zcash_note_encryption", @@ -6314,7 +6359,7 @@ dependencies = [ "tokio", "tower", "tracing", - "zcash_client_backend", + "zcash_client_backend 0.12.1", "zcash_keys", "zcash_note_encryption", "zcash_primitives 0.14.0", @@ -6432,9 +6477,8 @@ dependencies = [ "tokio", "tracing-error", "tracing-subscriber", - "zcash_client_backend", - "zcash_primitives 0.14.0", - "zcash_protocol", + "zcash_client_backend 0.10.0", + "zcash_primitives 0.13.0", "zebra-chain", "zebra-node-services", "zebra-rpc", diff --git a/zebra-scan/src/service/scan_task/scan.rs b/zebra-scan/src/service/scan_task/scan.rs index 508659411..30e798931 100644 --- a/zebra-scan/src/service/scan_task/scan.rs +++ b/zebra-scan/src/service/scan_task/scan.rs @@ -416,20 +416,6 @@ pub fn scan_block( ) } -/// Turns a [`SaplingScanningKey`] into [`ScanningKey`] . -/// -/// Currently only accepts a string-encoded extended full viewing key. -/// -// TODO: use `ViewingKey::parse` from zebra-chain instead -pub fn scanning_key( - key: &SaplingScanningKey, - network: &Network, -) -> Result { - let efvk = - decode_extended_full_viewing_key(network.sapling_efvk_hrp(), key).map_err(|e| eyre!(e))?; - Ok(efvk.to_diversifiable_full_viewing_key()) -} - /// Converts a Zebra-format scanning key into some `scan_block()` keys. /// /// Currently only accepts extended full viewing keys, and returns both their diversifiable full diff --git a/zebra-utils/Cargo.toml b/zebra-utils/Cargo.toml index eccca8b6b..7ea94729d 100644 --- a/zebra-utils/Cargo.toml +++ b/zebra-utils/Cargo.toml @@ -120,9 +120,8 @@ tokio = { version = "1.37.0", features = ["full"], optional = true } jsonrpc = { version = "0.18.0", optional = true } -zcash_primitives = { version = "0.14.0", optional = true } -zcash_client_backend = { version = "0.12.1", optional = true, features = ["test-dependencies"] } -zcash_protocol = { version = "0.1.1" } +zcash_primitives = { version = "0.13.0", optional = true } +zcash_client_backend = {version = "0.10.0-rc.1", optional = true} # For the openapi generator syn = { version = "2.0.65", features = ["full"], optional = true } diff --git a/zebra-utils/src/bin/scanning-results-reader/main.rs b/zebra-utils/src/bin/scanning-results-reader/main.rs index f2dd40599..1bfa15d36 100644 --- a/zebra-utils/src/bin/scanning-results-reader/main.rs +++ b/zebra-utils/src/bin/scanning-results-reader/main.rs @@ -18,7 +18,7 @@ use zcash_primitives::consensus::{BlockHeight, BranchId}; use zcash_primitives::transaction::Transaction; use zcash_primitives::zip32::AccountId; -use zebra_scan::scan::scanning_key; +use zebra_scan::scan::sapling_key_to_scan_block_keys; use zebra_scan::{storage::Storage, Config}; /// Prints the memos of transactions from Zebra's scanning results storage. @@ -47,31 +47,30 @@ pub fn main() { let mut prev_memo = "".to_owned(); for (key, _) in storage.sapling_keys_last_heights().iter() { - let dfvk = - scanning_key(key, &network).expect("Scanning key from the storage should be valid"); + let dfvk = sapling_key_to_scan_block_keys(key, &network) + .expect("Scanning key from the storage should be valid") + .0 + .into_iter() + .exactly_one() + .expect("There should be exactly one dfvk"); let ufvk_with_acc_id = HashMap::from([( - AccountId::default(), - UnifiedFullViewingKey::new(Some(dfvk)).expect("`dfvk` should be `Some`"), + AccountId::from(1), + UnifiedFullViewingKey::new(Some(dfvk), None).expect("`dfvk` should be `Some`"), )]); for (height, txids) in storage.sapling_results(key) { - let height2 = BlockHeight::from(height.0); + let height = BlockHeight::from(height); for txid in txids.iter() { let tx = Transaction::read( &hex::decode(&fetch_tx_via_rpc(txid.encode_hex())) .expect("RPC response should be decodable from hex string to bytes")[..], - BranchId::for_height(&network.into(), height2), + BranchId::for_height(&network, height), ) .expect("TX fetched via RPC should be deserializable from raw bytes"); - for output in decrypt_transaction( - &network, - zcash_protocol::consensus::BlockHeight::from_u32(height.0), - &tx, - &ufvk_with_acc_id, - ) { + for output in decrypt_transaction(&network, height, &tx, &ufvk_with_acc_id) { let memo = memo_bytes_to_string(output.memo.as_array()); if !memo.is_empty()