Fix build after integration of librustzcash

This commit is contained in:
Hanh 2022-10-22 12:01:29 +08:00
parent d5f06cc7eb
commit 4094c5d25b
17 changed files with 50 additions and 54 deletions

View File

@ -114,32 +114,32 @@ apple_metal = ["metal", "objc", "block"]
[dependencies.zcash_params]
git = "https://github.com/hhanh00/zcash-params.git"
rev = "0f1975b0d8799d852fe62e717dad8885eec1f106"
rev = "849107a56e83f150c86405df733bf87ae589811d"
[dependencies.zcash_client_backend]
git = "https://github.com/hhanh00/librustzcash.git"
rev = "625a06128659d011881698ec13edb66c078a6aa2"
rev = "f546cf86f4ee7191c9b85c51af86ed9c36bb9eb0"
[dependencies.zcash_primitives]
git = "https://github.com/hhanh00/librustzcash.git"
rev = "625a06128659d011881698ec13edb66c078a6aa2"
rev = "f546cf86f4ee7191c9b85c51af86ed9c36bb9eb0"
features = [ "transparent-inputs" ]
[dependencies.zcash_proofs]
git = "https://github.com/hhanh00/librustzcash.git"
rev = "625a06128659d011881698ec13edb66c078a6aa2"
rev = "f546cf86f4ee7191c9b85c51af86ed9c36bb9eb0"
[dependencies.zcash_address]
git = "https://github.com/hhanh00/librustzcash.git"
rev = "625a06128659d011881698ec13edb66c078a6aa2"
rev = "f546cf86f4ee7191c9b85c51af86ed9c36bb9eb0"
[dependencies.zcash_encoding]
git = "https://github.com/hhanh00/librustzcash.git"
rev = "625a06128659d011881698ec13edb66c078a6aa2"
rev = "f546cf86f4ee7191c9b85c51af86ed9c36bb9eb0"
[dependencies.zcash_note_encryption]
git = "https://github.com/hhanh00/librustzcash.git"
rev = "625a06128659d011881698ec13edb66c078a6aa2"
rev = "f546cf86f4ee7191c9b85c51af86ed9c36bb9eb0"
[build-dependencies]
tonic-build = "0.7.2"

View File

@ -126,8 +126,7 @@ pub fn new_diversified_address() -> anyhow::Result<String> {
let fvk = decode_extended_full_viewing_key(
c.chain.network().hrp_sapling_extended_full_viewing_key(),
&fvk,
)?
.unwrap();
).map_err(|_| anyhow!("Bech32 Decode Error"))?;
let mut diversifier_index = db.get_diversifier(c.id_account)?;
diversifier_index.increment().unwrap();
let (new_diversifier_index, pa) = fvk

View File

@ -1,5 +1,6 @@
//! Access to server mempool
use anyhow::anyhow;
use zcash_client_backend::encoding::decode_extended_full_viewing_key;
use zcash_primitives::consensus::Parameters;
use crate::api::sync::get_latest_height;
@ -21,8 +22,7 @@ pub async fn scan() -> anyhow::Result<i64> {
let fvk = decode_extended_full_viewing_key(
c.chain.network().hrp_sapling_extended_full_viewing_key(),
&fvk,
)?
.unwrap();
).map_err(|_| anyhow!("Decode error"))?;
let mut client = c.connect_lwd().await?;
mempool
.update(&mut client, height, &fvk.fvk.vk.ivk())

View File

@ -37,7 +37,6 @@ async fn prepare_multi_payment(
c.chain.network().hrp_sapling_extended_full_viewing_key(),
&fvk,
)
.unwrap()
.unwrap();
let utxos = if use_transparent {
let mut client = c.connect_lwd().await?;
@ -72,7 +71,6 @@ fn sign(tx: &Tx, progress_callback: PaymentProgressCallback) -> anyhow::Result<V
.map(|tsk| SecretKey::from_str(&tsk).unwrap());
let extsk =
decode_extended_spending_key(c.chain.network().hrp_sapling_extended_spending_key(), &zsk)
.unwrap()
.unwrap();
let raw_tx = tx.sign(tsk, &extsk, prover, progress_callback)?;
Ok(raw_tx)

View File

@ -27,7 +27,7 @@ use zcash_note_encryption::batch::try_compact_note_decryption;
use zcash_note_encryption::{Domain, EphemeralKeyBytes, ShieldedOutput, COMPACT_NOTE_SIZE};
use zcash_primitives::consensus::{BlockHeight, Network, NetworkUpgrade, Parameters};
use zcash_primitives::merkle_tree::{CommitmentTree, IncrementalWitness};
use zcash_primitives::sapling::note_encryption::SaplingDomain;
use zcash_primitives::sapling::note_encryption::{PreparedIncomingViewingKey, SaplingDomain};
use zcash_primitives::sapling::{Node, Note, PaymentAddress};
use zcash_primitives::transaction::components::sapling::CompactOutputDescription;
use zcash_primitives::zip32::ExtendedFullViewingKey;
@ -355,7 +355,7 @@ fn decrypt_notes<'a, N: Parameters>(
let mut count_outputs = 0u32;
let mut spends: Vec<Nf> = vec![];
let mut notes: Vec<DecryptedNote> = vec![];
let vvks: Vec<_> = vks.iter().map(|vk| vk.1.ivk.clone()).collect();
let vvks: Vec<_> = vks.iter().map(|vk| PreparedIncomingViewingKey::new(&vk.1.ivk)).collect();
let mut outputs: Vec<(SaplingDomain<N>, AccountOutput<N>)> = vec![];
for (tx_index, vtx) in block.vtx.iter().enumerate() {
for cs in vtx.spends.iter() {
@ -393,7 +393,7 @@ fn decrypt_notes<'a, N: Parameters>(
let elapsed = start.elapsed().as_millis() as usize;
for (pos, opt_note) in notes_decrypted.iter().enumerate() {
if let Some((note, pa)) = opt_note {
if let Some(((note, pa), _)) = opt_note {
let vk = &vks[pos / outputs.len()];
let output = &outputs[pos % outputs.len()];
notes.push(DecryptedNote {

View File

@ -212,7 +212,6 @@ impl DbAdapter {
self.network().hrp_sapling_extended_full_viewing_key(),
&ivk,
)
.unwrap()
.unwrap();
let ivk = fvk.fvk.vk.ivk();
Ok((

View File

@ -7,7 +7,7 @@ use std::convert::TryInto;
use std::sync::Mutex;
use zcash_note_encryption::Domain;
use zcash_primitives::consensus::{BlockHeight, Network};
use zcash_primitives::sapling::note_encryption::SaplingDomain;
use zcash_primitives::sapling::note_encryption::{PreparedIncomingViewingKey, SaplingDomain};
use zcash_primitives::sapling::SaplingIvk;
use zcash_primitives::zip32::ExtendedFullViewingKey;
@ -115,6 +115,7 @@ fn collect_decrypted_notes(
buffer_stride: usize,
decrypted_blocks: &mut [DecryptedBlock],
) {
let pivk = PreparedIncomingViewingKey::new(ivk);
// merge the decrypted blocks
let mut i = 0;
for db in decrypted_blocks {
@ -129,7 +130,7 @@ fn collect_decrypted_notes(
// version and amount must be in range - 21 million ZEC is less than 0x0008 0000 0000 0000
if plaintext[0] <= 2 && plaintext[18] < 0x08 && plaintext[19] == 0 {
if let Some((note, pa)) =
domain.parse_note_plaintext_without_memo_ivk(&ivk, plaintext)
domain.parse_note_plaintext_without_memo_ivk(&pivk, plaintext)
{
let position_in_block =
usize::from_le_bytes(plaintext[52..60].try_into().unwrap());

View File

@ -33,12 +33,12 @@ impl KeyHelpers {
let res = if let Ok(mnemonic) = Mnemonic::from_phrase(key, Language::English) {
let (sk, ivk, pa) = self.derive_secret_key(&mnemonic, index)?;
Ok((Some(key.to_string()), Some(sk), ivk, pa))
} else if let Ok(Some(sk)) =
} else if let Ok(sk) =
decode_extended_spending_key(network.hrp_sapling_extended_spending_key(), key)
{
let (ivk, pa) = self.derive_viewing_key(&sk)?;
Ok((None, Some(key.to_string()), ivk, pa))
} else if let Ok(Some(fvk)) =
} else if let Ok(fvk) =
decode_extended_full_viewing_key(network.hrp_sapling_extended_full_viewing_key(), key)
{
let pa = self.derive_address(&fvk)?;
@ -54,13 +54,11 @@ impl KeyHelpers {
if Mnemonic::from_phrase(key, Language::English).is_ok() {
return 0;
}
if let Ok(Some(_)) =
decode_extended_spending_key(network.hrp_sapling_extended_spending_key(), key)
if decode_extended_spending_key(network.hrp_sapling_extended_spending_key(), key).is_ok()
{
return 1;
}
if let Ok(Some(_)) =
decode_extended_full_viewing_key(network.hrp_sapling_extended_full_viewing_key(), key)
if decode_extended_full_viewing_key(network.hrp_sapling_extended_full_viewing_key(), key).is_ok()
{
return 2;
}

View File

@ -18,12 +18,12 @@ pub fn decode_key(
let res = if let Ok(mnemonic) = Mnemonic::from_phrase(key, Language::English) {
let (sk, ivk, pa) = derive_secret_key(network, &mnemonic, index)?;
Ok((Some(key.to_string()), Some(sk), ivk, pa))
} else if let Ok(Some(sk)) =
} else if let Ok(sk) =
decode_extended_spending_key(network.hrp_sapling_extended_spending_key(), key)
{
let (ivk, pa) = derive_viewing_key(network, &sk)?;
Ok((None, Some(key.to_string()), ivk, pa))
} else if let Ok(Some(fvk)) =
} else if let Ok(fvk) =
decode_extended_full_viewing_key(network.hrp_sapling_extended_full_viewing_key(), key)
{
let pa = derive_address(network, &fvk)?;
@ -40,13 +40,11 @@ pub fn is_valid_key(coin: u8, key: &str) -> i8 {
if Mnemonic::from_phrase(key, Language::English).is_ok() {
return 0;
}
if let Ok(Some(_)) =
decode_extended_spending_key(network.hrp_sapling_extended_spending_key(), key)
if decode_extended_spending_key(network.hrp_sapling_extended_spending_key(), key).is_ok()
{
return 1;
}
if let Ok(Some(_)) =
decode_extended_full_viewing_key(network.hrp_sapling_extended_full_viewing_key(), key)
if decode_extended_full_viewing_key(network.hrp_sapling_extended_full_viewing_key(), key).is_ok()
{
return 2;
}

View File

@ -94,7 +94,7 @@ mod print;
mod scan;
mod taddr;
mod transaction;
mod ua;
// mod ua;
mod zip32;
// mod wallet;
/// accounts, sync, payments, etc.

View File

@ -6,7 +6,7 @@ use tonic::Request;
use crate::coinconfig::CoinConfig;
use zcash_primitives::consensus::BlockHeight;
use zcash_primitives::sapling::note_encryption::try_sapling_compact_note_decryption;
use zcash_primitives::sapling::note_encryption::{PreparedIncomingViewingKey, try_sapling_compact_note_decryption};
use zcash_primitives::sapling::SaplingIvk;
const DEFAULT_EXCLUDE_LEN: u8 = 1;
@ -96,12 +96,13 @@ impl MemPool {
balance -= value as i64;
}
}
let pivk = PreparedIncomingViewingKey::new(ivk);
for co in tx.outputs.iter() {
let od = to_output_description(co);
if let Some((note, _)) = try_sapling_compact_note_decryption(
c.chain.network(),
BlockHeight::from_u32(height),
ivk,
&pivk,
&od,
) {
balance += note.value as i64; // value is incoming

View File

@ -12,10 +12,7 @@ use serde::{Deserialize, Serialize};
use std::sync::mpsc;
use tonic::Request;
use zcash_client_backend::address::RecipientAddress;
use zcash_client_backend::encoding::{
decode_extended_full_viewing_key, decode_payment_address, encode_extended_full_viewing_key,
encode_payment_address,
};
use zcash_client_backend::encoding::{decode_extended_full_viewing_key, decode_payment_address, encode_extended_full_viewing_key, encode_payment_address};
use zcash_params::coin::{get_coin_chain, CoinChain, CoinType};
use zcash_primitives::consensus::{BlockHeight, Parameters};
use zcash_primitives::keys::OutgoingViewingKey;
@ -291,6 +288,9 @@ impl TxBuilder {
RecipientAddress::Transparent(_address) => {
self.add_t_output(&r.address, note_amount)
}
RecipientAddress::Unified(_ua) => {
todo!() // TODO
}
}?;
}
}
@ -323,7 +323,6 @@ impl Tx {
builder.send_change_to(
OutgoingViewingKey(ovk),
decode_payment_address(chain.network().hrp_sapling_payment_address(), &self.change)
.unwrap()
.unwrap(),
);
@ -351,8 +350,7 @@ impl Tx {
let fvk = decode_extended_full_viewing_key(
chain.network().hrp_sapling_extended_full_viewing_key(),
&txin.fvk,
)?
.unwrap();
).map_err(|_| anyhow!("Bech32 Decode Error"))?;
if fvk != efvk {
anyhow::bail!("Incorrect account - Secret key mismatch")
}
@ -387,6 +385,9 @@ impl Tx {
let memo = MemoBytes::from_bytes(&memo)?;
builder.add_sapling_output(Some(ovk), pa, amount, memo)?;
}
RecipientAddress::Unified(_ua) => {
todo!() // TODO
}
}
}
@ -438,3 +439,4 @@ pub fn get_tx_summary(tx: &Tx) -> anyhow::Result<TxSummary> {
}
Ok(TxSummary { recipients })
}

View File

@ -2,7 +2,7 @@ use std::convert::TryInto;
use ff::PrimeField;
use zcash_note_encryption::Domain;
use zcash_primitives::consensus::{BlockHeight, Parameters};
use zcash_primitives::sapling::note_encryption::SaplingDomain;
use zcash_primitives::sapling::note_encryption::{PreparedIncomingViewingKey, SaplingDomain};
use zcash_primitives::sapling::{PaymentAddress, SaplingIvk};
use zcash_primitives::zip32::ExtendedFullViewingKey;
use crate::chain::Nf;
@ -21,7 +21,7 @@ pub struct SaplingViewKey {
impl <P: Parameters> ViewKey<SaplingDomain<P>> for SaplingViewKey {
fn account(&self) -> u32 { self.account }
fn ivk(&self) -> <SaplingDomain<P> as Domain>::IncomingViewingKey {
self.ivk.clone()
PreparedIncomingViewingKey::new(&self.ivk)
}
}
@ -61,7 +61,7 @@ impl <P: Parameters> DecryptedNote<SaplingDomain<P>, SaplingViewKey> for Decrypt
diversifier: self.pa.diversifier().0.to_vec(),
value: self.note.value,
rcm: self.note.rcm().to_repr().to_vec(),
nf: self.note.nf(viewing_key, position).to_vec(),
nf: self.note.nf(&viewing_key.nk, position).to_vec(),
rho: None,
spent: None
}

View File

@ -184,7 +184,7 @@ pub async fn sync_async(
let note = &n.note;
let rcm = note.rcm().to_repr();
let nf = note.nf(&n.ivk.fvk.vk, p as u64);
let nf = note.nf(&n.ivk.fvk.vk.nk, p as u64);
let id_tx = DbAdapter::store_transaction(
&n.txid,
@ -393,8 +393,8 @@ pub fn trial_decrypt_one(
) -> anyhow::Result<Option<Note>> {
let mut vks = HashMap::new();
let fvk =
decode_extended_full_viewing_key(network.hrp_sapling_extended_full_viewing_key(), &fvk)?
.ok_or(anyhow!("Invalid FVK"))?;
decode_extended_full_viewing_key(network.hrp_sapling_extended_full_viewing_key(), &fvk)
.map_err(|e| anyhow!("Bech32 Decode Error"))?;
let ivk = fvk.fvk.vk.ivk();
vks.insert(
0,

View File

@ -131,7 +131,7 @@ pub trait TrialDecrypter<N: Parameters, D: BatchDomain<ExtractedCommitmentBytes
let elapsed = start.elapsed().as_millis() as usize;
for (pos, opt_note) in notes_decrypted.iter().enumerate() {
if let Some((note, pa)) = opt_note {
if let Some(((note, pa), _)) = opt_note {
let vk = &vks[pos / outputs.len()];
let account = vk.account();
let output = &outputs[pos % outputs.len()];

View File

@ -16,9 +16,7 @@ use zcash_client_backend::encoding::{
use zcash_params::coin::{get_branch, get_coin_chain, CoinType};
use zcash_primitives::consensus::{BlockHeight, Network, Parameters};
use zcash_primitives::memo::Memo;
use zcash_primitives::sapling::note_encryption::{
try_sapling_note_decryption, try_sapling_output_recovery,
};
use zcash_primitives::sapling::note_encryption::{PreparedIncomingViewingKey, try_sapling_note_decryption, try_sapling_output_recovery};
use zcash_primitives::transaction::Transaction;
use zcash_primitives::zip32::ExtendedFullViewingKey;
@ -91,7 +89,7 @@ pub async fn decode_transaction(
if let Some(transparent_bundle) = tx.transparent_bundle() {
for output in transparent_bundle.vout.iter() {
if let Some(taddr) = output.script_pubkey.address() {
if let Some(taddr) = output.recipient_address() {
taddress = encode_transparent_address(
&network.b58_pubkey_address_prefix(),
&network.b58_script_address_prefix(),
@ -102,7 +100,8 @@ pub async fn decode_transaction(
}
for output in sapling_bundle.shielded_outputs.iter() {
if let Some((note, pa, memo)) = try_sapling_note_decryption(network, height, &ivk, output) {
let pivk = PreparedIncomingViewingKey::new(&ivk);
if let Some((note, pa, memo)) = try_sapling_note_decryption(network, height, &pivk, output) {
amount += note.value as i64; // change or self transfer
let _ = contact_decoder.add_memo(&memo); // ignore memo that is not for contacts
let memo = Memo::try_from(memo)?;
@ -194,7 +193,6 @@ pub async fn retrieve_tx_info(
let fvk: &ExtendedFullViewingKey = fvk_cache.entry(account).or_insert_with(|| {
decode_extended_full_viewing_key(network.hrp_sapling_extended_full_viewing_key(), &ivk)
.unwrap()
.unwrap()
});
let params = DecodeTxParams {
tx: tx.clone(),

View File

@ -1,3 +1,5 @@
//! This file is not in use!
use zcash_address::unified::{Address, Container, Receiver};
use zcash_address::{FromAddress, Network, ToAddress, UnsupportedAddress, ZcashAddress};