Crate zebra_state

source ·
Expand description

State contextual verification and storage code for Zebra.

§Correctness

Await UTXO and block commit requests should be wrapped in a timeout, because:

  • await UTXO requests wait for a block containing that UTXO, and
  • contextual verification and state updates wait for all previous blocks.

Otherwise, verification of out-of-order and invalid blocks can hang indefinitely.

Re-exports§

Modules§

  • Randomised data generation for state data.
  • Consensus critical contextual checks
  • Cached state configuration for Zebra.
  • Constants that impact state behaviour.
  • error 🔒
    Error types for Zebra’s state.
  • request 🔒
    State [tower::Service] request types.
  • response 🔒
    State [tower::Service] response types.
  • service 🔒
    [tower::Service]s for Zebra’s cached chain state.

Structs§

  • A chain tip block, with precalculated block data.
  • A chain tip change monitor.
  • A sender for changes to the non-finalized and finalized chain tips.
  • A block ready to be committed directly to the finalized state with a small number of checks if compared with a ContextuallyVerifiedBlock.
  • A wrapper for type erased errors that is itself clonable and implements the Error trait
  • An error describing the reason a semantically verified block could not be committed to the state.
  • Wrapper struct to ensure low-level database writes go through the correct API.
  • A structure with the information needed from the state to build a getblocktemplate RPC response.
  • A formatting struct for raw key-value data
  • Efficient access to the state’s current best chain tip.
  • Information about a transaction in the best chain
  • A transparent output’s index in its transaction.
  • A transparent output’s location in the chain, by block height and transaction index.
  • Access database keys or values as raw bytes. Mainly for use in tests, runtime checks, or format compatibility code.
  • A read-only service for accessing Zebra’s cached blockchain state.
  • A database column family entry for a block scanned with a Sapling vieweing key.
  • A database column family key for a block scanned with a Sapling vieweing key.
  • Stores a scanning result.
  • A block which has undergone semantic validation and has been prepared for contextual validation.
  • A transaction’s index in its block.
  • A transaction’s location in the chain, by block height and transaction index.
  • A type-safe read-only column family reference.
  • Efficient access to state data via a [tokio] [watch::Receiver] channel, while avoiding deadlocks.
  • A type-safe and drop-safe batch write to a column family.
  • Wrapper struct to ensure high-level zebra-state database access goes through the correct API.

Enums§

Constants§

Traits§

  • Trait for creating the corresponding duplicate nullifier error from a nullifier.
  • Helper type for reading types from disk as raw bytes.
  • Helper type for writing types to disk as raw bytes. Also used to convert key types to raw bytes for disk lookups.
  • Helper trait for retrieving and deserializing values from rocksdb column families.
  • Helper trait for inserting serialized typed (Key, Value) pairs into rocksdb.

Functions§

  • Initialize a state service from the provided Config. Returns a boxed state service, a read-only state service, and receivers for state chain tip updates.
  • Returns a StateService with an ephemeral Config and a buffer with a single slot.
  • Initializes a state service with an ephemeral Config and a buffer with a single slot, then returns the read-write service, read-only service, and tip watch channels.
  • Initialize a state service with blocks, and return:
  • Calls init with the provided Config and Network from a blocking task. Returns a [tokio::task::JoinHandle] with a boxed state service, a read state service, and receivers for state chain tip updates.
  • Writes changed_version to the on-disk database after the format is changed. (Or a new database is created.)
  • Writes changed_version to the on-disk state database after the format is changed. (Or a new database is created.)

Type Aliases§