From 437f40d3c8f346e8203e52cabfa30262c833b9ee Mon Sep 17 00:00:00 2001 From: Deirdre Connolly Date: Wed, 12 Aug 2020 02:15:57 -0400 Subject: [PATCH] Refine JoinSplit::anchor to be a sprout::NoteTreeRootHash type --- zebra-chain/src/transaction/joinsplit.rs | 5 ++--- zebra-chain/src/transaction/serialize.rs | 6 +++--- zebra-chain/src/transaction/tests/arbitrary.rs | 4 ++-- zebra-chain/src/treestate.rs | 1 + 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/zebra-chain/src/transaction/joinsplit.rs b/zebra-chain/src/transaction/joinsplit.rs index 54df4d62..569fec19 100644 --- a/zebra-chain/src/transaction/joinsplit.rs +++ b/zebra-chain/src/transaction/joinsplit.rs @@ -4,6 +4,7 @@ use crate::{ ed25519_zebra, notes::sprout, proofs::ZkSnarkProof, + treestate, types::amount::{Amount, NonNegative}, }; @@ -22,9 +23,7 @@ pub struct JoinSplit { /// A root of the Sprout note commitment tree at some block height in the /// past, or the root produced by a previous JoinSplit transfer in this /// transaction. - /// - /// XXX refine type - pub anchor: [u8; 32], + pub anchor: treestate::sprout::NoteTreeRootHash, /// A nullifier for the input notes. pub nullifiers: [crate::notes::sprout::Nullifier; 2], /// A note commitment for this output note. diff --git a/zebra-chain/src/transaction/serialize.rs b/zebra-chain/src/transaction/serialize.rs index fbfa2f99..da4cf303 100644 --- a/zebra-chain/src/transaction/serialize.rs +++ b/zebra-chain/src/transaction/serialize.rs @@ -14,7 +14,7 @@ use crate::{ serialization::{ ReadZcashExt, SerializationError, WriteZcashExt, ZcashDeserialize, ZcashSerialize, }, - types, + treestate, types, }; use super::*; @@ -241,7 +241,7 @@ impl ZcashSerialize for JoinSplit

{ fn zcash_serialize(&self, mut writer: W) -> Result<(), io::Error> { writer.write_u64::(self.vpub_old.into())?; writer.write_u64::(self.vpub_new.into())?; - writer.write_all(&self.anchor[..])?; + writer.write_32_bytes(&self.anchor.into())?; writer.write_32_bytes(&self.nullifiers[0].into())?; writer.write_32_bytes(&self.nullifiers[1].into())?; writer.write_32_bytes(&self.commitments[0].into())?; @@ -262,7 +262,7 @@ impl ZcashDeserialize for JoinSplit

{ Ok(JoinSplit::

{ vpub_old: reader.read_u64::()?.try_into()?, vpub_new: reader.read_u64::()?.try_into()?, - anchor: reader.read_32_bytes()?, + anchor: treestate::sprout::NoteTreeRootHash::from(reader.read_32_bytes()?), nullifiers: [ reader.read_32_bytes()?.into(), reader.read_32_bytes()?.into(), diff --git a/zebra-chain/src/transaction/tests/arbitrary.rs b/zebra-chain/src/transaction/tests/arbitrary.rs index 1216f757..621eebc0 100644 --- a/zebra-chain/src/transaction/tests/arbitrary.rs +++ b/zebra-chain/src/transaction/tests/arbitrary.rs @@ -6,7 +6,7 @@ use crate::{ CoinbaseData, JoinSplit, JoinSplitData, OutPoint, Output, ShieldedData, Spend, Transaction, TransparentInput, }, - treestate::note_commitment_tree::SaplingNoteTreeRootHash, + treestate::{self, note_commitment_tree::SaplingNoteTreeRootHash}, types::{ amount::{Amount, NonNegative}, BlockHeight, Script, @@ -22,7 +22,7 @@ impl Arbitrary for JoinSplit

{ ( any::>(), any::>(), - array::uniform32(any::()), + any::(), array::uniform2(any::()), array::uniform2(any::()), array::uniform32(any::()), diff --git a/zebra-chain/src/treestate.rs b/zebra-chain/src/treestate.rs index 925aaa36..bd487343 100644 --- a/zebra-chain/src/treestate.rs +++ b/zebra-chain/src/treestate.rs @@ -2,3 +2,4 @@ pub mod note_commitment_tree; // mod nullifier_set; +pub mod sprout;