Fix build after integration of librustzcash
This commit is contained in:
parent
d5f06cc7eb
commit
4094c5d25b
14
Cargo.toml
14
Cargo.toml
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -212,7 +212,6 @@ impl DbAdapter {
|
|||
self.network().hrp_sapling_extended_full_viewing_key(),
|
||||
&ivk,
|
||||
)
|
||||
.unwrap()
|
||||
.unwrap();
|
||||
let ivk = fvk.fvk.vk.ivk();
|
||||
Ok((
|
||||
|
|
|
@ -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());
|
||||
|
|
10
src/key.rs
10
src/key.rs
|
@ -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;
|
||||
}
|
||||
|
|
10
src/key2.rs
10
src/key2.rs
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -94,7 +94,7 @@ mod print;
|
|||
mod scan;
|
||||
mod taddr;
|
||||
mod transaction;
|
||||
mod ua;
|
||||
// mod ua;
|
||||
mod zip32;
|
||||
// mod wallet;
|
||||
/// accounts, sync, payments, etc.
|
||||
|
|
|
@ -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
|
||||
|
|
16
src/pay.rs
16
src/pay.rs
|
@ -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 })
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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()];
|
||||
|
|
|
@ -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(),
|
||||
|
|
Loading…
Reference in New Issue