pub struct FsBlock {
    pub file: Arc<Mutex<File>>,
    pub start: usize,
    pub end: usize,
    pub hash: BlockHash,
    pub prev: BlockHash,
    pub next: Vec<BlockHash>,
}
Expand description

Before reorder we keep only the position of the block in the file system and data relative to the block hash, the previous hash and the following hash (populated during reorder phase) We will need to read the block from disk again, but by doing so we will avoid using too much memory in the OutOfOrderBlocks map.

Fields§

§file: Arc<Mutex<File>>

the file the block identified by hash is stored in. Multiple blocks are stored in the and we don’t want to open/close the file many times for performance reasons so it’s shared. It’s a Mutex to allow to be sent between threads but only one thread (reorder) mutably access to it so there is no contention. (Arc alone isn’t enough cause it can’t be mutated, RefCell can be mutated but not sent between threads)

§start: usize

The start position in bytes in the file at which the block identified by hash

§end: usize

The end position in bytes in the file at which the block identified by hash

§hash: BlockHash

The hash identifying this block, output of block.header.block_hash()

§prev: BlockHash

The hash of the block previous to this one, block.header.prev_blockhash

§next: Vec<BlockHash>

The hash of the blocks following this one. It is populated during the reorder phase, it can be more than one because of reorgs.

Trait Implementations§

source§

impl Debug for FsBlock

source§

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

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

impl TryFrom<FsBlock> for BlockExtra

§

type Error = String

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

fn try_from(fs_block: FsBlock) -> Result<Self, Self::Error>

Performs the conversion.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere 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.

source§

impl<T, U> Into<U> for Twhere 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.

§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

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

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

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 Twhere U: TryFrom<T>,

§

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.