mirror of
https://github.com/Qortal/piratewallet-light-cli.git
synced 2025-07-31 12:21:25 +00:00
@@ -39,33 +39,33 @@ webpki-roots = "0.18.0"
|
||||
|
||||
[dependencies.bellman]
|
||||
git = "https://github.com/adityapk00/librustzcash.git"
|
||||
rev = "98f9bda32957a6d7f0011c9a6adec13b5b80ea94"
|
||||
rev = "ff0ffc3d1b8bc36a0ad4b6b0f06aa3ca5900d3e4"
|
||||
default-features = false
|
||||
features = ["groth16"]
|
||||
|
||||
[dependencies.pairing]
|
||||
git = "https://github.com/adityapk00/librustzcash.git"
|
||||
rev = "98f9bda32957a6d7f0011c9a6adec13b5b80ea94"
|
||||
rev = "ff0ffc3d1b8bc36a0ad4b6b0f06aa3ca5900d3e4"
|
||||
|
||||
[dependencies.zcash_client_backend]
|
||||
git = "https://github.com/adityapk00/librustzcash.git"
|
||||
rev = "98f9bda32957a6d7f0011c9a6adec13b5b80ea94"
|
||||
rev = "ff0ffc3d1b8bc36a0ad4b6b0f06aa3ca5900d3e4"
|
||||
default-features = false
|
||||
|
||||
[dependencies.zcash_primitives]
|
||||
git = "https://github.com/adityapk00/librustzcash.git"
|
||||
rev = "98f9bda32957a6d7f0011c9a6adec13b5b80ea94"
|
||||
rev = "ff0ffc3d1b8bc36a0ad4b6b0f06aa3ca5900d3e4"
|
||||
default-features = false
|
||||
features = ["transparent-inputs"]
|
||||
|
||||
[dependencies.zcash_proofs]
|
||||
git = "https://github.com/adityapk00/librustzcash.git"
|
||||
rev = "98f9bda32957a6d7f0011c9a6adec13b5b80ea94"
|
||||
rev = "ff0ffc3d1b8bc36a0ad4b6b0f06aa3ca5900d3e4"
|
||||
default-features = false
|
||||
|
||||
[dependencies.ff]
|
||||
git = "https://github.com/adityapk00/librustzcash.git"
|
||||
rev = "98f9bda32957a6d7f0011c9a6adec13b5b80ea94"
|
||||
rev = "ff0ffc3d1b8bc36a0ad4b6b0f06aa3ca5900d3e4"
|
||||
features = ["ff_derive"]
|
||||
|
||||
[build-dependencies]
|
||||
|
@@ -4,6 +4,7 @@ use std::cmp;
|
||||
use std::collections::{HashMap, HashSet};
|
||||
use std::sync::{Arc, RwLock};
|
||||
use std::io::{Error, ErrorKind};
|
||||
use std::convert::TryFrom;
|
||||
|
||||
use rand::{Rng, rngs::OsRng};
|
||||
|
||||
@@ -28,12 +29,13 @@ use zcash_primitives::{
|
||||
block::BlockHash,
|
||||
merkle_tree::{CommitmentTree},
|
||||
serialize::{Vector},
|
||||
consensus::BranchId,
|
||||
transaction::{
|
||||
builder::{Builder},
|
||||
components::{Amount, OutPoint, TxOut}, components::amount::DEFAULT_FEE,
|
||||
TxId, Transaction,
|
||||
},
|
||||
legacy::{Script, TransparentAddress},
|
||||
legacy::{Script, TransparentAddress},
|
||||
note_encryption::{Memo, try_sapling_note_decryption, try_sapling_output_recovery},
|
||||
zip32::{ExtendedFullViewingKey, ExtendedSpendingKey, ChildIndex},
|
||||
JUBJUB,
|
||||
@@ -411,7 +413,7 @@ impl LightWallet {
|
||||
}
|
||||
|
||||
pub fn note_address(hrp: &str, note: &SaplingNoteData) -> Option<String> {
|
||||
match note.extfvk.fvk.vk.into_payment_address(note.diversifier, &JUBJUB) {
|
||||
match note.extfvk.fvk.vk.to_payment_address(note.diversifier, &JUBJUB) {
|
||||
Some(pa) => Some(encode_payment_address(hrp, &pa)),
|
||||
None => None
|
||||
}
|
||||
@@ -793,7 +795,7 @@ impl LightWallet {
|
||||
Some(a) => a == encode_payment_address(
|
||||
self.config.hrp_sapling_address(),
|
||||
&nd.extfvk.fvk.vk
|
||||
.into_payment_address(nd.diversifier, &JUBJUB).unwrap()
|
||||
.to_payment_address(nd.diversifier, &JUBJUB).unwrap()
|
||||
),
|
||||
None => true
|
||||
}
|
||||
@@ -847,7 +849,7 @@ impl LightWallet {
|
||||
Some(a) => a == encode_payment_address(
|
||||
self.config.hrp_sapling_address(),
|
||||
&nd.extfvk.fvk.vk
|
||||
.into_payment_address(nd.diversifier, &JUBJUB).unwrap()
|
||||
.to_payment_address(nd.diversifier, &JUBJUB).unwrap()
|
||||
),
|
||||
None => true
|
||||
}
|
||||
@@ -1542,7 +1544,7 @@ impl LightWallet {
|
||||
|
||||
})
|
||||
.collect::<Result<Vec<_>, _>>()
|
||||
.map_err(|e| format!("{}", e))?;
|
||||
.map_err(|e| format!("{:?}", e))?;
|
||||
|
||||
|
||||
// Confirm we were able to select sufficient value
|
||||
@@ -1566,7 +1568,7 @@ impl LightWallet {
|
||||
selected.extsk.clone(),
|
||||
selected.diversifier,
|
||||
selected.note.clone(),
|
||||
selected.witness.clone(),
|
||||
selected.witness.path().unwrap(),
|
||||
) {
|
||||
let e = format!("Error adding note: {:?}", e);
|
||||
error!("{}", e);
|
||||
@@ -1590,7 +1592,7 @@ impl LightWallet {
|
||||
// Compute memo if it exists
|
||||
let encoded_memo = match memo {
|
||||
None => None,
|
||||
Some(s) => match Memo::from_str(&s) {
|
||||
Some(s) => match Memo::from_bytes(s.as_bytes()) {
|
||||
None => {
|
||||
let e = format!("Error creating output. Memo {:?} is too long", s);
|
||||
error!("{}", e);
|
||||
@@ -1619,8 +1621,8 @@ impl LightWallet {
|
||||
|
||||
println!("{}: Building transaction", now() - start_time);
|
||||
let (tx, _) = match builder.build(
|
||||
consensus_branch_id,
|
||||
prover::InMemTxProver::new(spend_params, output_params),
|
||||
BranchId::try_from(consensus_branch_id).unwrap(),
|
||||
&prover::InMemTxProver::new(spend_params, output_params),
|
||||
) {
|
||||
Ok(res) => res,
|
||||
Err(e) => {
|
||||
@@ -1669,7 +1671,7 @@ impl LightWallet {
|
||||
Some(s) => {
|
||||
// If the address is not a z-address, then drop the memo
|
||||
if LightWallet::is_shielded_address(&addr.to_string(), &self.config) {
|
||||
Memo::from_str(s).unwrap()
|
||||
Memo::from_bytes(s.as_bytes()).unwrap()
|
||||
} else {
|
||||
Memo::default()
|
||||
}
|
||||
|
@@ -2,7 +2,7 @@ use std::io::{self, Read, Write};
|
||||
|
||||
use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt};
|
||||
use pairing::bls12_381::{Bls12};
|
||||
use ff::{PrimeField, PrimeFieldRepr};
|
||||
use ff::{PrimeField};
|
||||
|
||||
use zcash_primitives::{
|
||||
block::BlockHash,
|
||||
@@ -18,7 +18,6 @@ use zcash_primitives::{
|
||||
JUBJUB,
|
||||
primitives::{Diversifier, Note,},
|
||||
jubjub::{
|
||||
JubjubEngine,
|
||||
fs::{Fs, FsRepr},
|
||||
}
|
||||
};
|
||||
@@ -83,8 +82,8 @@ pub struct SaplingNoteData {
|
||||
fn read_fs(from: &[u8]) -> FsRepr {
|
||||
assert_eq!(from.len(), 32);
|
||||
|
||||
let mut f = <<Bls12 as JubjubEngine>::Fs as PrimeField>::Repr::default();
|
||||
f.read_le(from).expect("length is 32 bytes");
|
||||
let mut f = FsRepr::default();
|
||||
f.0.copy_from_slice(&from);
|
||||
|
||||
f
|
||||
}
|
||||
@@ -97,8 +96,8 @@ pub fn read_note<R: Read>(mut reader: R) -> io::Result<(u64, Fs)> {
|
||||
reader.read_exact(&mut r_bytes)?;
|
||||
|
||||
let r = match Fs::from_repr(read_fs(&r_bytes)) {
|
||||
Ok(r) => r,
|
||||
Err(_) => return Err(io::Error::new(
|
||||
Some(r) => r,
|
||||
None => return Err(io::Error::new(
|
||||
io::ErrorKind::InvalidInput, "Couldn't parse randomness"))
|
||||
};
|
||||
|
||||
@@ -128,7 +127,7 @@ impl SaplingNoteData {
|
||||
SaplingNoteData {
|
||||
account: output.account,
|
||||
extfvk: extfvk.clone(),
|
||||
diversifier: output.to.diversifier,
|
||||
diversifier: *output.to.diversifier(),
|
||||
note: output.note,
|
||||
witnesses: vec![witness],
|
||||
nullifier: nf,
|
||||
@@ -156,7 +155,7 @@ impl SaplingNoteData {
|
||||
// to recreate the note
|
||||
let (value, r) = read_note(&mut reader)?; // TODO: This method is in a different package, because of some fields that are private
|
||||
|
||||
let maybe_note = extfvk.fvk.vk.into_payment_address(diversifier, &JUBJUB).unwrap().create_note(value, r, &JUBJUB);
|
||||
let maybe_note = extfvk.fvk.vk.to_payment_address(diversifier, &JUBJUB).unwrap().create_note(value, r, &JUBJUB);
|
||||
|
||||
let note = match maybe_note {
|
||||
Some(n) => Ok(n),
|
||||
@@ -216,9 +215,7 @@ impl SaplingNoteData {
|
||||
// from these 2 values and the Payment address.
|
||||
writer.write_u64::<LittleEndian>(self.note.value)?;
|
||||
|
||||
let mut rcm = [0; 32];
|
||||
self.note.r.into_repr().write_le(&mut rcm[..])?;
|
||||
writer.write_all(&rcm)?;
|
||||
writer.write_all(&self.note.r.to_repr().0)?;
|
||||
|
||||
Vector::write(&mut writer, &self.witnesses, |wr, wi| wi.write(wr) )?;
|
||||
|
||||
|
@@ -9,7 +9,8 @@ use zcash_primitives::{
|
||||
transaction::components::Amount
|
||||
};
|
||||
use zcash_primitives::{
|
||||
merkle_tree::CommitmentTreeWitness, prover::TxProver, sapling::Node,
|
||||
merkle_tree::{MerklePath},
|
||||
prover::TxProver, sapling::Node,
|
||||
transaction::components::GROTH_PROOF_SIZE, JUBJUB,
|
||||
};
|
||||
use zcash_proofs::sapling::SaplingProvingContext;
|
||||
@@ -57,7 +58,7 @@ impl TxProver for InMemTxProver {
|
||||
ar: Fs,
|
||||
value: u64,
|
||||
anchor: Fr,
|
||||
witness: CommitmentTreeWitness<Node>,
|
||||
witness: MerklePath<Node>,
|
||||
) -> Result<
|
||||
(
|
||||
[u8; GROTH_PROOF_SIZE],
|
||||
|
@@ -2,7 +2,7 @@ use std::convert::TryInto;
|
||||
use std::io::{Error};
|
||||
use rand::{RngCore, rngs::OsRng};
|
||||
|
||||
use ff::{Field, PrimeField, PrimeFieldRepr};
|
||||
use ff::{Field, PrimeField};
|
||||
use pairing::bls12_381::Bls12;
|
||||
use protobuf::{Message, UnknownFields, CachedSize, RepeatedField};
|
||||
use zcash_client_backend::{encoding::encode_payment_address,
|
||||
@@ -85,7 +85,7 @@ impl FakeCompactBlock {
|
||||
let mut c_out = CompactOutput::default();
|
||||
|
||||
let mut cmu_bytes = vec![];
|
||||
o.cmu.into_repr().write_le(&mut cmu_bytes).unwrap();
|
||||
cmu_bytes.extend_from_slice(&o.cmu.to_repr().0);
|
||||
|
||||
let mut epk_bytes = vec![];
|
||||
o.ephemeral_key.write(&mut epk_bytes).unwrap();
|
||||
@@ -124,8 +124,8 @@ impl FakeCompactBlock {
|
||||
// Create a fake Note for the account
|
||||
let mut rng = OsRng;
|
||||
let note = Note {
|
||||
g_d: to.diversifier.g_d::<Bls12>(&JUBJUB).unwrap(),
|
||||
pk_d: to.pk_d.clone(),
|
||||
g_d: to.diversifier().g_d::<Bls12>(&JUBJUB).unwrap(),
|
||||
pk_d: to.pk_d().clone(),
|
||||
value: value.into(),
|
||||
r: Fs::random(&mut rng),
|
||||
};
|
||||
@@ -137,7 +137,7 @@ impl FakeCompactBlock {
|
||||
&mut rng,
|
||||
);
|
||||
let mut cmu = vec![];
|
||||
note.cm(&JUBJUB).into_repr().write_le(&mut cmu).unwrap();
|
||||
cmu.extend_from_slice(¬e.cm(&JUBJUB).to_repr().0);
|
||||
let mut epk = vec![];
|
||||
encryptor.epk().write(&mut epk).unwrap();
|
||||
let enc_ciphertext = encryptor.encrypt_note_plaintext();
|
||||
@@ -179,8 +179,8 @@ impl FakeCompactBlock {
|
||||
// Create a fake Note for the payment
|
||||
ctx.outputs.push({
|
||||
let note = Note {
|
||||
g_d: to.diversifier.g_d::<Bls12>(&JUBJUB).unwrap(),
|
||||
pk_d: to.pk_d.clone(),
|
||||
g_d: to.diversifier().g_d::<Bls12>(&JUBJUB).unwrap(),
|
||||
pk_d: to.pk_d().clone(),
|
||||
value: value.into(),
|
||||
r: Fs::random(&mut rng),
|
||||
};
|
||||
@@ -192,7 +192,7 @@ impl FakeCompactBlock {
|
||||
&mut rng,
|
||||
);
|
||||
let mut cmu = vec![];
|
||||
note.cm(&JUBJUB).into_repr().write_le(&mut cmu).unwrap();
|
||||
cmu.extend_from_slice(¬e.cm(&JUBJUB).to_repr().0);
|
||||
let mut epk = vec![];
|
||||
encryptor.epk().write(&mut epk).unwrap();
|
||||
let enc_ciphertext = encryptor.encrypt_note_plaintext();
|
||||
@@ -208,8 +208,8 @@ impl FakeCompactBlock {
|
||||
ctx.outputs.push({
|
||||
let change_addr = extfvk.default_address().unwrap().1;
|
||||
let note = Note {
|
||||
g_d: change_addr.diversifier.g_d::<Bls12>(&JUBJUB).unwrap(),
|
||||
pk_d: change_addr.pk_d.clone(),
|
||||
g_d: change_addr.diversifier().g_d::<Bls12>(&JUBJUB).unwrap(),
|
||||
pk_d: change_addr.pk_d().clone(),
|
||||
value: (in_value - value).into(),
|
||||
r: Fs::random(&mut rng),
|
||||
};
|
||||
@@ -221,7 +221,7 @@ impl FakeCompactBlock {
|
||||
&mut rng,
|
||||
);
|
||||
let mut cmu = vec![];
|
||||
note.cm(&JUBJUB).into_repr().write_le(&mut cmu).unwrap();
|
||||
cmu.extend_from_slice(¬e.cm(&JUBJUB).to_repr().0);
|
||||
let mut epk = vec![];
|
||||
encryptor.epk().write(&mut epk).unwrap();
|
||||
let enc_ciphertext = encryptor.encrypt_note_plaintext();
|
||||
|
Reference in New Issue
Block a user