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§
pub use config::check_and_delete_old_databases;
pub use config::check_and_delete_old_state_databases;
pub use config::database_format_version_on_disk;
pub use config::state_database_format_version_on_disk;
pub use config::Config;
pub use constants::state_database_format_version_in_code;
pub use constants::MAX_BLOCK_REORG_HEIGHT;
pub use constants::latest_version_for_adding_subtrees;
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.
- A contextually verified block, ready to be committed directly to the finalized state with no checks, if it becomes the root of the best non-finalized chain.
- 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
- The state of the chains in memory, including queued blocks.
- 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§
- Identify a block by hash or height.
- An enum of block stores in the state where a block hash could be found.
- A read-only query about the chain state, via the
ReadStateService
. - A response to a read-only
ReadStateService
’sReadRequest
. - A query about or modification to the chain state, via the
StateService
. - A response to a
StateService
Request
. - Actions that we can take in response to a
ChainTipChange
. - An error describing why a block failed contextual validation.
Constants§
- How long we wait for chain tip updates before skipping them.
- The maximum value of an on-disk serialized
Height
.
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. - Initialize a read state service from the provided
Config
. Returns a read-only state service, - Returns a
StateService
with an ephemeralConfig
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_read_only
with the providedConfig
andNetwork
from a blocking task. Returns a [tokio::task::JoinHandle
] with a read state service and chain tip sender. - 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§
- A boxed
std::error::Error
. - The type used in Zebra to store Sapling scanning keys. It can represent a full viewing key or an individual viewing key.