Struct FlatChainStore

Source
pub struct FlatChainStore { /* private fields */ }
Available on crate feature flat-chainstore only.
Expand description

The main struct that holds all the context for our flat chain store

This struct is kept in memory, and it holds multiple memory maps that may or may not be in RAM right now. All functions in the impl block are inherently unsafe, since we’re dealing with raw pointers and memory maps. We need to be very careful with them. All methods should be carefully tested and reviewed. This struct is not thread-safe, and it’s not meant to be used in multi-threaded environments without proper synchronization.

We only ever expect one chainstate to hold a FlatChainStore at a time. You can then use that chainstate to interact with the chainstore, even in a multi-threaded environment.

Implementations§

Source§

impl FlatChainStore

Source

pub fn new(config: FlatChainStoreConfig) -> Result<Self, FlatChainstoreError>

Opens a new storage. If it already exists, just load. If not, create a new one

Source

pub fn compute_checksum(&self) -> DbCheckSum

Computes the XXH3-64 checksum for our database

Trait Implementations§

Source§

impl ChainStore for FlatChainStore

Source§

type Error = FlatChainstoreError

Source§

fn check_integrity(&self) -> Result<(), Self::Error>

Checks if our database didn’t get corrupted, and if it has, it returns an error. Read more
Source§

fn flush(&mut self) -> Result<(), Self::Error>

Flushes write buffers to disk, this is called periodically by the ChainState, so in case of a crash, we don’t lose too much data. If the database doesn’t support write buffers, this method can be a no-op.
Source§

fn save_roots_for_block( &mut self, roots: Vec<u8>, height: u32, ) -> Result<(), Self::Error>

Saves the accumulator state for a given block height.
Source§

fn load_roots_for_block( &mut self, height: u32, ) -> Result<Option<Vec<u8>>, Self::Error>

Loads the state of our accumulator for a given block height. Read more
Source§

fn get_header( &self, block_hash: &BlockHash, ) -> Result<Option<DiskBlockHeader>, Self::Error>

Get a block header from our database. See DiskBlockHeader for more info about the data we save.
Source§

fn get_header_by_height( &self, height: u32, ) -> Result<Option<DiskBlockHeader>, Self::Error>

Get a block header by its height in our database.
Source§

fn load_height(&self) -> Result<Option<BestChain>, Self::Error>

Loads the blockchain height
Source§

fn save_height(&mut self, height: &BestChain) -> Result<(), Self::Error>

Saves the blockchain height.
Source§

fn save_header(&mut self, header: &DiskBlockHeader) -> Result<(), Self::Error>

Saves a block header to our database. See DiskBlockHeader for more info about the data we save.
Source§

fn get_block_hash(&self, height: u32) -> Result<Option<BlockHash>, Self::Error>

Returns the block hash for a given height.
Source§

fn update_block_index( &mut self, height: u32, hash: BlockHash, ) -> Result<(), Self::Error>

Associates a block hash with a given height, so we can retrieve it later.

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

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

Initializes a with the given initializer. Read more
§

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

Dereferences the given pointer. Read more
§

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

Mutably dereferences the given pointer. Read more
§

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, 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.
§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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