zebra_state/service/finalized_state/zebra_db/
arbitrary.rs1#![allow(unused_imports)]
4
5use std::ops::Deref;
6
7use zebra_chain::{amount::NonNegative, block::Block, sprout, value_balance::ValueBalance};
8
9use crate::service::finalized_state::{
10 disk_db::{DiskDb, DiskWriteBatch, WriteDisk},
11 ZebraDb,
12};
13
14impl Deref for ZebraDb {
16 type Target = DiskDb;
17
18 fn deref(&self) -> &Self::Target {
19 self.db()
20 }
21}
22
23impl ZebraDb {
24 pub fn db(&self) -> &DiskDb {
29 &self.db
30 }
31
32 #[cfg(any(test, feature = "proptest-impl"))]
34 pub fn set_finalized_value_pool(&self, fake_value_pool: ValueBalance<NonNegative>) {
35 let mut batch = DiskWriteBatch::new();
36 let value_pool_cf = self.db().cf_handle("tip_chain_value_pool").unwrap();
37
38 batch.zs_insert(&value_pool_cf, (), fake_value_pool);
39 self.db().write(batch).unwrap();
40 }
41
42 #[cfg(any(test, feature = "proptest-impl"))]
45 pub fn populate_with_anchors(&self, block: &Block) {
46 let mut batch = DiskWriteBatch::new();
47
48 let sprout_anchors = self.db().cf_handle("sprout_anchors").unwrap();
49 let sapling_anchors = self.db().cf_handle("sapling_anchors").unwrap();
50 let orchard_anchors = self.db().cf_handle("orchard_anchors").unwrap();
51
52 let sprout_tree = sprout::tree::NoteCommitmentTree::default();
53 sprout_tree.root();
56
57 for transaction in block.transactions.iter() {
58 for joinsplit in transaction.sprout_groth16_joinsplits() {
60 batch.zs_insert(&sprout_anchors, joinsplit.anchor, sprout_tree.clone());
61 }
62
63 for anchor in transaction.sapling_anchors() {
65 batch.zs_insert(&sapling_anchors, anchor, ());
66 }
67
68 if let Some(orchard_shielded_data) = transaction.orchard_shielded_data() {
70 batch.zs_insert(&orchard_anchors, orchard_shielded_data.shared_anchor, ());
71 }
72 }
73
74 self.db().write(batch).unwrap();
75 }
76}