Struct DiskWriteBatch

Source
pub struct DiskWriteBatch { /* private fields */ }
Expand description

Wrapper struct to ensure low-level database writes go through the correct API.

rocksdb::WriteBatch is a batched set of database updates, which must be written to the database using DiskDb::write(batch).

Implementations§

Source§

impl DiskWriteBatch

Source

pub fn new() -> Self

Creates and returns a new transactional batch write.

§Correctness

Each block must be written to the state inside a batch, so that:

  • concurrent ReadStateService queries don’t see half-written blocks, and
  • if Zebra calls exit, panics, or crashes, half-written blocks are rolled back.
Source§

impl DiskWriteBatch

Source

pub fn prepare_block_batch( &mut self, zebra_db: &ZebraDb, network: &Network, finalized: &FinalizedBlock, new_outputs_by_out_loc: BTreeMap<OutputLocation, Utxo>, spent_utxos_by_outpoint: HashMap<OutPoint, Utxo>, spent_utxos_by_out_loc: BTreeMap<OutputLocation, Utxo>, address_balances: HashMap<Address, AddressBalanceLocationChange>, value_pool: ValueBalance<NonNegative>, prev_note_commitment_trees: Option<NoteCommitmentTrees>, ) -> Result<(), BoxError>

Prepare a database batch containing finalized.block, and return it (without actually writing anything).

If this method returns an error, it will be propagated, and the batch should not be written to the database.

§Errors
  • Propagates any errors from updating history tree, note commitment trees, or value pools
Source

pub fn prepare_block_header_and_transaction_data_batch( &mut self, db: &DiskDb, finalized: &FinalizedBlock, ) -> Result<(), BoxError>

Prepare a database batch containing the block header and transaction data from finalized.block, and return it (without actually writing anything).

§Errors
  • This method does not currently return any errors.
Source§

impl DiskWriteBatch

Source

pub fn update_history_tree(&mut self, db: &ZebraDb, tree: &HistoryTree)

Updates the history tree for the tip, if it is not empty.

The batch must be written to the database by the caller.

Source

pub fn delete_range_history_tree( &mut self, db: &ZebraDb, from: &Height, until_strictly_before: &Height, )

Legacy method: Deletes the range of history trees at the given Heights. Doesn’t delete the upper bound.

From state format 25.3.0 onwards, the history trees are indexed by an empty key, so this method does nothing.

The batch must be written to the database by the caller.

Source

pub fn prepare_chain_value_pools_batch( &mut self, db: &ZebraDb, finalized: &FinalizedBlock, utxos_spent_by_block: HashMap<OutPoint, Utxo>, value_pool: ValueBalance<NonNegative>, ) -> Result<(), BoxError>

Prepares a database batch containing the chain value pool update from finalized.block, and returns it without actually writing anything.

The batch is modified by this method and written by the caller. The caller should not write the batch if this method returns an error.

The parameter utxos_spent_by_block must contain the transparent::Utxos of every input in this block, including UTXOs created by earlier transactions in this block.

Note that the chain value pool has the opposite sign to the transaction value pool. See the chain_value_pool_change and add_chain_value_pool_change methods for more details.

§Errors
  • Propagates any errors from updating value pools
Source§

impl DiskWriteBatch

Source

pub fn prepare_shielded_transaction_batch( &mut self, zebra_db: &ZebraDb, finalized: &FinalizedBlock, ) -> Result<(), BoxError>

Prepare a database batch containing finalized.block’s shielded transaction indexes, and return it (without actually writing anything).

If this method returns an error, it will be propagated, and the batch should not be written to the database.

§Errors
  • Propagates any errors from updating note commitment trees
Source

pub fn prepare_nullifier_batch( &mut self, zebra_db: &ZebraDb, transaction: &Transaction, ) -> Result<(), BoxError>

Prepare a database batch containing finalized.block’s nullifiers, and return it (without actually writing anything).

§Errors
  • This method doesn’t currently return any errors, but it might in future
Source

pub fn prepare_trees_batch( &mut self, zebra_db: &ZebraDb, finalized: &FinalizedBlock, prev_note_commitment_trees: Option<NoteCommitmentTrees>, ) -> Result<(), BoxError>

Prepare a database batch containing the note commitment and history tree updates from finalized.block, and return it (without actually writing anything).

If this method returns an error, it will be propagated, and the batch should not be written to the database.

§Errors
  • Propagates any errors from updating the history tree
Source

pub fn update_sprout_tree( &mut self, zebra_db: &ZebraDb, tree: &NoteCommitmentTree, )

Updates the Sprout note commitment tree for the tip, and the Sprout anchors.

Source

pub fn delete_range_sprout_tree( &mut self, zebra_db: &ZebraDb, from: &Height, to: &Height, )

Legacy method: Deletes the range of Sprout note commitment trees at the given Heights. Doesn’t delete anchors from the anchor index. Doesn’t delete the upper bound.

From state format 25.3.0 onwards, the Sprout trees are indexed by an empty key, so this method does nothing.

Source

pub fn delete_sprout_anchor(&mut self, zebra_db: &ZebraDb, anchor: &Root)

Deletes the given Sprout note commitment tree anchor.

Source

pub fn create_sapling_tree( &mut self, zebra_db: &ZebraDb, height: &Height, tree: &NoteCommitmentTree, )

Inserts or overwrites the Sapling note commitment tree at the given Height, and the Sapling anchors.

Source

pub fn insert_sapling_subtree( &mut self, zebra_db: &ZebraDb, subtree: &NoteCommitmentSubtree<Node>, )

Inserts the Sapling note commitment subtree into the batch.

Source

pub fn delete_sapling_tree(&mut self, zebra_db: &ZebraDb, height: &Height)

Deletes the Sapling note commitment tree at the given Height.

Source

pub fn delete_range_sapling_tree( &mut self, zebra_db: &ZebraDb, from: &Height, to: &Height, )

Deletes the range of Sapling note commitment trees at the given Heights. Doesn’t delete anchors from the anchor index. Doesn’t delete the upper bound.

Source

pub fn delete_sapling_anchor(&mut self, zebra_db: &ZebraDb, anchor: &Root)

Deletes the given Sapling note commitment tree anchor.

Source

pub fn delete_range_sapling_subtree( &mut self, zebra_db: &ZebraDb, from: NoteCommitmentSubtreeIndex, to: NoteCommitmentSubtreeIndex, )

Deletes the range of Sapling subtrees at the given NoteCommitmentSubtreeIndexes. Doesn’t delete the upper bound.

Source

pub fn create_orchard_tree( &mut self, zebra_db: &ZebraDb, height: &Height, tree: &NoteCommitmentTree, )

Inserts or overwrites the Orchard note commitment tree at the given Height, and the Orchard anchors.

Source

pub fn insert_orchard_subtree( &mut self, zebra_db: &ZebraDb, subtree: &NoteCommitmentSubtree<Node>, )

Inserts the Orchard note commitment subtree into the batch.

Source

pub fn delete_orchard_tree(&mut self, zebra_db: &ZebraDb, height: &Height)

Deletes the Orchard note commitment tree at the given Height.

Source

pub fn delete_range_orchard_tree( &mut self, zebra_db: &ZebraDb, from: &Height, to: &Height, )

Deletes the range of Orchard note commitment trees at the given Heights. Doesn’t delete anchors from the anchor index. Doesn’t delete the upper bound.

Source

pub fn delete_orchard_anchor(&mut self, zebra_db: &ZebraDb, anchor: &Root)

Deletes the given Orchard note commitment tree anchor.

Source

pub fn delete_range_orchard_subtree( &mut self, zebra_db: &ZebraDb, from: NoteCommitmentSubtreeIndex, to: NoteCommitmentSubtreeIndex, )

Deletes the range of Orchard subtrees at the given NoteCommitmentSubtreeIndexes. Doesn’t delete the upper bound.

Source§

impl DiskWriteBatch

Source

pub fn prepare_transparent_transaction_batch( &mut self, zebra_db: &ZebraDb, network: &Network, finalized: &FinalizedBlock, new_outputs_by_out_loc: &BTreeMap<OutputLocation, Utxo>, spent_utxos_by_outpoint: &HashMap<OutPoint, Utxo>, spent_utxos_by_out_loc: &BTreeMap<OutputLocation, Utxo>, address_balances: HashMap<Address, AddressBalanceLocationChange>, ) -> Result<(), BoxError>

Prepare a database batch containing finalized.block’s transparent transaction indexes, and return it (without actually writing anything).

If this method returns an error, it will be propagated, and the batch should not be written to the database.

§Errors
  • Propagates any errors from updating note commitment trees
Source

pub fn prepare_new_transparent_outputs_batch( &mut self, db: &DiskDb, network: &Network, new_outputs_by_out_loc: &BTreeMap<OutputLocation, Utxo>, address_balances: &mut HashMap<Address, AddressBalanceLocationChange>, ) -> Result<(), BoxError>

Prepare a database batch for the new UTXOs in new_outputs_by_out_loc.

Adds the following changes to this batch:

  • insert created UTXOs,
  • insert transparent address UTXO index entries, and
  • insert transparent address transaction entries,

without actually writing anything.

Also modifies the address_balances for these new UTXOs.

§Errors
  • This method doesn’t currently return any errors, but it might in future
Source

pub fn prepare_spent_transparent_outputs_batch( &mut self, db: &DiskDb, network: &Network, spent_utxos_by_out_loc: &BTreeMap<OutputLocation, Utxo>, address_balances: &mut HashMap<Address, AddressBalanceLocationChange>, ) -> Result<(), BoxError>

Prepare a database batch for the spent outputs in spent_utxos_by_out_loc.

Adds the following changes to this batch:

  • delete spent UTXOs, and
  • delete transparent address UTXO index entries,

without actually writing anything.

Also modifies the address_balances for these new UTXOs.

§Errors
  • This method doesn’t currently return any errors, but it might in future
Source

pub fn prepare_spending_transparent_tx_ids_batch( &mut self, zebra_db: &ZebraDb, network: &Network, spending_tx_location: TransactionLocation, transaction: &Transaction, spent_utxos_by_outpoint: &HashMap<OutPoint, Utxo>, address_balances: &HashMap<Address, AddressBalanceLocationChange>, ) -> Result<(), BoxError>

Prepare a database batch indexing the transparent addresses that spent in this transaction.

Adds the following changes to this batch:

  • index spending transactions for each spent transparent output (this is different from the transaction that created the output),

without actually writing anything.

§Errors
  • This method doesn’t currently return any errors, but it might in future
Source

pub fn prepare_transparent_balances_batch( &mut self, db: &DiskDb, address_balances: HashMap<Address, AddressBalanceLocationChange>, ) -> Result<(), BoxError>

Prepare a database batch containing finalized.block’s:

  • transparent address balance changes,

and return it (without actually writing anything).

§Errors
  • This method doesn’t currently return any errors, but it might in future

Trait Implementations§

Source§

impl Debug for DiskWriteBatch

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for DiskWriteBatch

Source§

fn default() -> DiskWriteBatch

Returns the “default value” for a type. Read more
Source§

impl PartialEq for DiskWriteBatch

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl WriteDisk for DiskWriteBatch

§Deprecation

These impls should not be used in new code, use [WriteTypedBatch] instead.

Source§

fn zs_insert<C, K, V>(&mut self, cf: &C, key: K, value: V)

Serialize and insert the given key and value into a rocksdb column family, overwriting any existing value for key.
Source§

fn zs_merge<C, K, V>(&mut self, cf: &C, key: K, value: V)

Serialize and merge the given key and value into a rocksdb column family, merging with any existing value for key.
Source§

fn zs_delete<C, K>(&mut self, cf: &C, key: K)

Remove the given key from a rocksdb column family, if it exists.
Source§

fn zs_delete_range<C, K>(&mut self, cf: &C, from: K, until_strictly_before: K)

Delete the given key range from a rocksdb column family, if it exists, including from and excluding until_strictly_before.
Source§

impl Eq for DiskWriteBatch

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more