pub struct FileClient<B: Block = Block> { /* private fields */ }
Expand description
Front-end API for fetching chain data from a file.
Blocks are assumed to be written one after another in a file, as rlp bytes.
For example, if the file contains 3 blocks, the file is assumed to be encoded as follows: rlp(block1) || rlp(block2) || rlp(block3)
Blocks are assumed to have populated transactions, so reading headers will also buffer transactions in memory for use in the bodies stage.
This reads the entire file into memory, so it is not suitable for large files.
Implementations§
Source§impl<B: FullBlock> FileClient<B>
impl<B: FullBlock> FileClient<B>
Sourcepub async fn new<P: AsRef<Path>>(path: P) -> Result<Self, FileClientError>
pub async fn new<P: AsRef<Path>>(path: P) -> Result<Self, FileClientError>
Create a new file client from a file path.
Sourcepub fn max_block(&self) -> Option<u64>
pub fn max_block(&self) -> Option<u64>
Returns the highest block number of this client has or None
if empty
Sourcepub fn min_block(&self) -> Option<u64>
pub fn min_block(&self) -> Option<u64>
Returns the lowest block number of this client has or None
if empty
Sourcepub fn tip_header(&self) -> Option<SealedHeader<B::Header>>
pub fn tip_header(&self) -> Option<SealedHeader<B::Header>>
Clones and returns the highest header of this client has or None
if empty. Seals header
before returning.
Sourcepub fn has_canonical_blocks(&self) -> bool
pub fn has_canonical_blocks(&self) -> bool
Returns true if all blocks are canonical (no gaps)
Sourcepub fn with_bodies(self, bodies: HashMap<BlockHash, B::Body>) -> Self
pub fn with_bodies(self, bodies: HashMap<BlockHash, B::Body>) -> Self
Use the provided bodies as the file client’s block body buffer.
Sourcepub fn with_headers(self, headers: HashMap<BlockNumber, B::Header>) -> Self
pub fn with_headers(self, headers: HashMap<BlockNumber, B::Header>) -> Self
Use the provided headers as the file client’s block body buffer.
Sourcepub fn headers_len(&self) -> usize
pub fn headers_len(&self) -> usize
Returns the current number of headers in the client.
Sourcepub fn bodies_len(&self) -> usize
pub fn bodies_len(&self) -> usize
Returns the current number of bodies in the client.
Sourcepub fn headers_iter(&self) -> impl Iterator<Item = &B::Header>
pub fn headers_iter(&self) -> impl Iterator<Item = &B::Header>
Returns an iterator over headers in the client.
Sourcepub fn bodies_iter_mut(&mut self) -> impl Iterator<Item = (u64, &mut B::Body)>
pub fn bodies_iter_mut(&mut self) -> impl Iterator<Item = (u64, &mut B::Body)>
Returns a mutable iterator over bodies in the client.
Panics, if file client headers and bodies are not mapping 1-1.
Sourcepub fn total_transactions(&self) -> usize
pub fn total_transactions(&self) -> usize
Returns the current number of transactions in the client.
Trait Implementations§
Source§impl<B: FullBlock> BodiesClient for FileClient<B>
impl<B: FullBlock> BodiesClient for FileClient<B>
Source§type Output = Pin<Box<dyn Future<Output = Result<WithPeerId<Vec<<B as Block>::Body>>, RequestError>> + Send + Sync>>
type Output = Pin<Box<dyn Future<Output = Result<WithPeerId<Vec<<B as Block>::Body>>, RequestError>> + Send + Sync>>
Source§fn get_block_bodies_with_priority(
&self,
hashes: Vec<B256>,
_priority: Priority,
) -> Self::Output
fn get_block_bodies_with_priority( &self, hashes: Vec<B256>, _priority: Priority, ) -> Self::Output
Source§fn get_block_bodies(&self, hashes: Vec<FixedBytes<32>>) -> Self::Output
fn get_block_bodies(&self, hashes: Vec<FixedBytes<32>>) -> Self::Output
Source§fn get_block_body(
&self,
hash: FixedBytes<32>,
) -> SingleBodyRequest<Self::Output>
fn get_block_body( &self, hash: FixedBytes<32>, ) -> SingleBodyRequest<Self::Output>
Source§fn get_block_body_with_priority(
&self,
hash: FixedBytes<32>,
priority: Priority,
) -> SingleBodyRequest<Self::Output>
fn get_block_body_with_priority( &self, hash: FixedBytes<32>, priority: Priority, ) -> SingleBodyRequest<Self::Output>
Source§impl<B: Debug + Block> Debug for FileClient<B>
impl<B: Debug + Block> Debug for FileClient<B>
Source§impl<B: FullBlock> DownloadClient for FileClient<B>
impl<B: FullBlock> DownloadClient for FileClient<B>
Source§fn report_bad_message(&self, _peer_id: PeerId)
fn report_bad_message(&self, _peer_id: PeerId)
Source§fn num_connected_peers(&self) -> usize
fn num_connected_peers(&self) -> usize
Source§impl<B: FullBlock> FromReader for FileClient<B>
impl<B: FullBlock> FromReader for FileClient<B>
Source§fn from_reader<R>(
reader: R,
num_bytes: u64,
) -> impl Future<Output = Result<DecodedFileChunk<Self>, Self::Error>>where
R: AsyncReadExt + Unpin,
fn from_reader<R>(
reader: R,
num_bytes: u64,
) -> impl Future<Output = Result<DecodedFileChunk<Self>, Self::Error>>where
R: AsyncReadExt + Unpin,
Initialize the FileClient
from bytes that have been read from file.
Source§type Error = FileClientError
type Error = FileClientError
Source§impl<B: FullBlock> HeadersClient for FileClient<B>
impl<B: FullBlock> HeadersClient for FileClient<B>
Source§type Output = Pin<Box<dyn Future<Output = Result<WithPeerId<Vec<<B as Block>::Header>>, RequestError>> + Send + Sync>>
type Output = Pin<Box<dyn Future<Output = Result<WithPeerId<Vec<<B as Block>::Header>>, RequestError>> + Send + Sync>>
Source§fn get_headers_with_priority(
&self,
request: HeadersRequest,
_priority: Priority,
) -> Self::Output
fn get_headers_with_priority( &self, request: HeadersRequest, _priority: Priority, ) -> Self::Output
Source§fn get_headers(&self, request: HeadersRequest) -> Self::Output
fn get_headers(&self, request: HeadersRequest) -> Self::Output
Source§fn get_header(&self, start: HashOrNumber) -> SingleHeaderRequest<Self::Output>
fn get_header(&self, start: HashOrNumber) -> SingleHeaderRequest<Self::Output>
Source§fn get_header_with_priority(
&self,
start: HashOrNumber,
priority: Priority,
) -> SingleHeaderRequest<Self::Output>
fn get_header_with_priority( &self, start: HashOrNumber, priority: Priority, ) -> SingleHeaderRequest<Self::Output>
Auto Trait Implementations§
impl<B> Freeze for FileClient<B>
impl<B> RefUnwindSafe for FileClient<B>where
<B as Block>::Header: RefUnwindSafe,
<B as Block>::Body: RefUnwindSafe,
impl<B> Send for FileClient<B>
impl<B> Sync for FileClient<B>
impl<B> Unpin for FileClient<B>
impl<B> UnwindSafe for FileClient<B>where
<B as Block>::Header: UnwindSafe,
<B as Block>::Body: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.§impl<T> TryConv for T
impl<T> TryConv for T
§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where
S: Into<Dispatch>,
§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where
S: Into<Dispatch>,
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> MaybeDebug for Twhere
T: Debug,
impl<T> MaybeSendSync for T
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 144 bytes