Enum Request

Source
pub enum Request {
Show 20 variants CommitSemanticallyVerifiedBlock(SemanticallyVerifiedBlock), CommitCheckpointVerifiedBlock(CheckpointVerifiedBlock), Depth(Hash), Tip, BlockLocator, Transaction(Hash), UnspentBestChainUtxo(OutPoint), Block(HashOrHeight), BlockAndSize(HashOrHeight), BlockHeader(HashOrHeight), AwaitUtxo(OutPoint), FindBlockHashes { known_blocks: Vec<Hash>, stop: Option<Hash>, }, FindBlockHeaders { known_blocks: Vec<Hash>, stop: Option<Hash>, }, CheckBestChainTipNullifiersAndAnchors(UnminedTx), BestChainNextMedianTimePast, BestChainBlockHash(Height), KnownBlock(Hash), InvalidateBlock(Hash), ReconsiderBlock(Hash), CheckBlockProposalValidity(SemanticallyVerifiedBlock),
}
Expand description

A query about or modification to the chain state, via the StateService.

Variants§

§

CommitSemanticallyVerifiedBlock(SemanticallyVerifiedBlock)

Performs contextual validation of the given semantically verified block, committing it to the state if successful.

This request can be made out-of-order; the state service will queue it until its parent is ready.

Returns Response::Committed with the hash of the block when it is committed to the state, or an error if the block fails contextual validation or has already been committed to the state.

This request cannot be cancelled once submitted; dropping the response future will have no effect on whether it is eventually processed. A request to commit a block which has been queued internally but not yet committed will fail the older request and replace it with the newer request.

§Correctness

Block commit requests should be wrapped in a timeout, so that out-of-order and invalid requests do not hang indefinitely. See the crate documentation for details.

§

CommitCheckpointVerifiedBlock(CheckpointVerifiedBlock)

Commit a checkpointed block to the state, skipping most but not all contextual validation.

This is exposed for use in checkpointing, which produces checkpoint vefified blocks. This request can be made out-of-order; the state service will queue it until its parent is ready.

Returns Response::Committed with the hash of the newly committed block, or an error.

This request cannot be cancelled once submitted; dropping the response future will have no effect on whether it is eventually processed. Duplicate requests will replace the older duplicate, and return an error in its response future.

§Note

SemanticallyVerifiedBlock, ContextuallyVerifiedBlock and CheckpointVerifiedBlock are an internal Zebra implementation detail. There is no difference between these blocks on the Zcash network, or in Zebra’s network or syncer implementations.

§Consensus

Checkpointing is allowed under the Zcash “social consensus” rules. Zebra checkpoints both settled network upgrades, and blocks past the rollback limit. (By the time Zebra release is tagged, its final checkpoint is typically hours or days old.)

A network upgrade is settled on a given network when there is a social consensus that it has activated with a given activation block hash. A full validator that potentially risks Mainnet funds or displays Mainnet transaction information to a user MUST do so only for a block chain that includes the activation block of the most recent settled network upgrade, with the corresponding activation block hash. … A full validator MAY impose a limit on the number of blocks it will “roll back” when switching from one best valid block chain to another that is not a descendent. For zcashd and zebra this limit is 100 blocks.

https://zips.z.cash/protocol/protocol.pdf#blockchain

§Correctness

Block commit requests should be wrapped in a timeout, so that out-of-order and invalid requests do not hang indefinitely. See the crate documentation for details.

§

Depth(Hash)

Computes the depth in the current best chain of the block identified by the given hash.

Returns

§

Tip

Returns Response::Tip(Option<(Height, block::Hash)>) with the current best chain tip.

§

BlockLocator

Computes a block locator object based on the current best chain.

Returns Response::BlockLocator with hashes starting from the best chain tip, and following the chain of previous hashes. The first hash is the best chain tip. The last hash is the tip of the finalized portion of the state. Block locators are not continuous - some intermediate hashes might be skipped.

If the state is empty, the block locator is also empty.

§

Transaction(Hash)

Looks up a transaction by hash in the current best chain.

Returns

§

UnspentBestChainUtxo(OutPoint)

Looks up a UTXO identified by the given OutPoint, returning None immediately if it is unknown.

Checks verified blocks in the finalized chain and the best non-finalized chain.

§

Block(HashOrHeight)

Looks up a block by hash or height in the current best chain.

Returns

Note: the HashOrHeight can be constructed from a block::Hash or block::Height using .into().

§

BlockAndSize(HashOrHeight)

§

BlockHeader(HashOrHeight)

Looks up a block header by hash or height in the current best chain.

Returns

Response::BlockHeader(block::Header).

Note: the HashOrHeight can be constructed from a block::Hash or block::Height using .into().

§

AwaitUtxo(OutPoint)

Request a UTXO identified by the given OutPoint, waiting until it becomes available if it is unknown.

Checks the finalized chain, all non-finalized chains, queued unverified blocks, and any blocks that arrive at the state after the request future has been created.

This request is purely informational, and there are no guarantees about whether the UTXO remains unspent or is on the best chain, or any chain. Its purpose is to allow asynchronous script verification or to wait until the UTXO arrives in the state before validating dependent transactions.

§Correctness

UTXO requests should be wrapped in a timeout, so that out-of-order and invalid requests do not hang indefinitely. See the crate documentation for details.

Outdated requests are pruned on a regular basis.

§

FindBlockHashes

Finds the first hash that’s in the peer’s known_blocks and the local best chain. Returns a list of hashes that follow that intersection, from the best chain.

If there is no matching hash in the best chain, starts from the genesis hash.

Stops the list of hashes after:

  • adding the best tip,
  • adding the stop hash to the list, if it is in the best chain, or
  • adding 500 hashes to the list.

Returns an empty list if the state is empty.

Returns

Response::BlockHashes(Vec<block::Hash>). See https://en.bitcoin.it/wiki/Protocol_documentation#getblocks

Fields

§known_blocks: Vec<Hash>

Hashes of known blocks, ordered from highest height to lowest height.

§stop: Option<Hash>

Optionally, the last block hash to request.

§

FindBlockHeaders

Finds the first hash that’s in the peer’s known_blocks and the local best chain. Returns a list of headers that follow that intersection, from the best chain.

If there is no matching hash in the best chain, starts from the genesis header.

Stops the list of headers after:

  • adding the best tip,
  • adding the header matching the stop hash to the list, if it is in the best chain, or
  • adding MAX_FIND_BLOCK_HEADERS_RESULTS headers to the list.

Returns an empty list if the state is empty.

Returns

Response::BlockHeaders(Vec<block::Header>). See https://en.bitcoin.it/wiki/Protocol_documentation#getheaders

Fields

§known_blocks: Vec<Hash>

Hashes of known blocks, ordered from highest height to lowest height.

§stop: Option<Hash>

Optionally, the hash of the last header to request.

§

CheckBestChainTipNullifiersAndAnchors(UnminedTx)

Contextually validates anchors and nullifiers of a transaction on the best chain

Returns Response::ValidBestChainTipNullifiersAndAnchors

§

BestChainNextMedianTimePast

Calculates the median-time-past for the next block on the best chain.

Returns Response::BestChainNextMedianTimePast when successful.

§

BestChainBlockHash(Height)

Looks up a block hash by height in the current best chain.

Returns

§

KnownBlock(Hash)

Checks if a block is present anywhere in the state service. Looks up hash in block queues as well as the finalized chain and all non-finalized chains.

Returns Response::KnownBlock(Some(Location)) if the block is in the best state service. Returns Response::KnownBlock(None) otherwise.

§

InvalidateBlock(Hash)

Invalidates a block in the non-finalized state with the provided hash if one is present, removing it and its child blocks, and rejecting it during contextual validation if it’s resubmitted to the state.

§

ReconsiderBlock(Hash)

Reconsiders a previously invalidated block in the non-finalized state with the provided hash if one is present.

§

CheckBlockProposalValidity(SemanticallyVerifiedBlock)

Performs contextual validation of the given block, but does not commit it to the state.

Returns Response::ValidBlockProposal when successful. See [ReadRequest::CheckBlockProposalValidity] for details.

Implementations§

Source§

impl Request

Source

pub fn count_metric(&self)

Counts metric for StateService call

Trait Implementations§

Source§

impl Clone for Request

Source§

fn clone(&self) -> Request

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Request

Source§

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

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

impl PartialEq for Request

Source§

fn eq(&self, other: &Request) -> 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 TryFrom<Request> for ReadRequest

Conversion from read-write Requests to read-only ReadRequests.

Used to dispatch read requests concurrently from the StateService.

Source§

type Error = &'static str

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

fn try_from(request: Request) -> Result<ReadRequest, Self::Error>

Performs the conversion.
Source§

impl Eq for Request

Source§

impl StructuralPartialEq for Request

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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