diff --git a/zingo-sync/src/primitives.rs b/zingo-sync/src/primitives.rs index 00e4d377f..2fbeb34c5 100644 --- a/zingo-sync/src/primitives.rs +++ b/zingo-sync/src/primitives.rs @@ -258,11 +258,10 @@ impl From for OutPoint { } /// Binary tree map of nullifiers from transaction spends or actions -#[derive(Debug, Getters, MutGetters)] -#[getset(get = "pub", get_mut = "pub")] +#[derive(Debug)] pub struct NullifierMap { - sapling: BTreeMap, - orchard: BTreeMap, + pub(crate) sapling: BTreeMap, + pub(crate) orchard: BTreeMap, } impl NullifierMap { @@ -272,6 +271,11 @@ impl NullifierMap { orchard: BTreeMap::new(), } } + + pub fn clear(&mut self) { + self.sapling.clear(); + self.orchard.clear(); + } } impl Default for NullifierMap { @@ -281,14 +285,12 @@ impl Default for NullifierMap { } /// Wallet block data -#[derive(Debug, Clone, CopyGetters)] -#[getset(get_copy = "pub")] +#[derive(Debug, Clone)] pub struct WalletBlock { block_height: BlockHeight, block_hash: BlockHash, prev_hash: BlockHash, time: u32, - #[getset(skip)] txids: Vec, tree_boundaries: TreeBoundaries, // TODO: optional price @@ -313,9 +315,29 @@ impl WalletBlock { } } + pub fn block_height(&self) -> BlockHeight { + self.block_height + } + + pub fn block_hash(&self) -> BlockHash { + self.block_hash + } + + pub fn prev_hash(&self) -> BlockHash { + self.prev_hash + } + + pub fn time(&self) -> u32 { + self.time + } + pub fn txids(&self) -> &[TxId] { &self.txids } + + pub fn tree_boundaries(&self) -> TreeBoundaries { + self.tree_boundaries + } } /// Wallet transaction diff --git a/zingo-sync/src/scan/compact_blocks.rs b/zingo-sync/src/scan/compact_blocks.rs index 553e3bfc6..48a09b938 100644 --- a/zingo-sync/src/scan/compact_blocks.rs +++ b/zingo-sync/src/scan/compact_blocks.rs @@ -396,7 +396,7 @@ fn collect_nullifiers( .map(|spend| sapling_crypto::Nullifier::from_slice(spend.nf.as_slice()).unwrap()) .for_each(|nullifier| { nullifier_map - .sapling_mut() + .sapling .insert(nullifier, (block_height, transaction.txid())); }); transaction @@ -408,7 +408,7 @@ fn collect_nullifiers( }) .for_each(|nullifier| { nullifier_map - .orchard_mut() + .orchard .insert(nullifier, (block_height, transaction.txid())); }); Ok(()) diff --git a/zingo-sync/src/scan/transactions.rs b/zingo-sync/src/scan/transactions.rs index 53dc9bb0c..8afe96d2f 100644 --- a/zingo-sync/src/scan/transactions.rs +++ b/zingo-sync/src/scan/transactions.rs @@ -493,7 +493,7 @@ fn collect_nullifiers( .map(|spend| spend.nullifier()) .for_each(|nullifier| { nullifier_map - .sapling_mut() + .sapling .insert(*nullifier, (block_height, transaction.txid())); }); } @@ -504,7 +504,7 @@ fn collect_nullifiers( .map(|action| action.nullifier()) .for_each(|nullifier| { nullifier_map - .orchard_mut() + .orchard .insert(*nullifier, (block_height, transaction.txid())); }); } diff --git a/zingo-sync/src/sync.rs b/zingo-sync/src/sync.rs index ef99867b6..ad8cfe88e 100644 --- a/zingo-sync/src/sync.rs +++ b/zingo-sync/src/sync.rs @@ -581,12 +581,12 @@ where wallet .get_nullifiers_mut() .unwrap() - .sapling_mut() + .sapling .retain(|_, (height, _)| *height > fully_scanned_height); wallet .get_nullifiers_mut() .unwrap() - .orchard_mut() + .orchard .retain(|_, (height, _)| *height > fully_scanned_height); wallet .get_sync_state_mut() diff --git a/zingo-sync/src/sync/spend.rs b/zingo-sync/src/sync/spend.rs index d529ac1ce..2fbe6b00f 100644 --- a/zingo-sync/src/sync/spend.rs +++ b/zingo-sync/src/sync/spend.rs @@ -117,11 +117,11 @@ pub(super) fn detect_shielded_spends( ) { let sapling_spend_locators = sapling_derived_nullifiers .iter() - .flat_map(|nf| nullifier_map.sapling_mut().remove_entry(nf)) + .flat_map(|nf| nullifier_map.sapling.remove_entry(nf)) .collect(); let orchard_spend_locators = orchard_derived_nullifiers .iter() - .flat_map(|nf| nullifier_map.orchard_mut().remove_entry(nf)) + .flat_map(|nf| nullifier_map.orchard.remove_entry(nf)) .collect(); (sapling_spend_locators, orchard_spend_locators) diff --git a/zingo-sync/src/traits.rs b/zingo-sync/src/traits.rs index c6a637b94..1ce66e849 100644 --- a/zingo-sync/src/traits.rs +++ b/zingo-sync/src/traits.rs @@ -168,11 +168,11 @@ pub trait SyncNullifiers: SyncWallet { /// Append nullifiers to wallet nullifier map fn append_nullifiers(&mut self, mut nullifiers: NullifierMap) -> Result<(), Self::Error> { self.get_nullifiers_mut()? - .sapling_mut() - .append(nullifiers.sapling_mut()); + .sapling + .append(&mut nullifiers.sapling); self.get_nullifiers_mut()? - .orchard_mut() - .append(nullifiers.orchard_mut()); + .orchard + .append(&mut nullifiers.orchard); Ok(()) } @@ -181,10 +181,10 @@ pub trait SyncNullifiers: SyncWallet { fn truncate_nullifiers(&mut self, truncate_height: BlockHeight) -> Result<(), Self::Error> { let nullifier_map = self.get_nullifiers_mut()?; nullifier_map - .sapling_mut() + .sapling .retain(|_, (block_height, _)| *block_height <= truncate_height); nullifier_map - .orchard_mut() + .orchard .retain(|_, (block_height, _)| *block_height <= truncate_height); Ok(()) diff --git a/zingolib/src/wallet.rs b/zingolib/src/wallet.rs index b6a5a896b..d63c22ba0 100644 --- a/zingolib/src/wallet.rs +++ b/zingolib/src/wallet.rs @@ -224,8 +224,7 @@ impl LightWallet { pub fn clear_all(&mut self) { self.wallet_blocks.clear(); self.wallet_transactions.clear(); - self.nullifier_map.sapling_mut().clear(); - self.nullifier_map.orchard_mut().clear(); + self.nullifier_map.clear(); self.outpoint_map.clear(); self.sync_state = SyncState::new(); }