Skip to main content

BlockLocator

Struct BlockLocator 

Source
pub struct BlockLocator {
    pub block_hash: BlockHash,
    pub height: u32,
    pub previous_blocks: [Option<BlockHash>; 12],
}
Expand description

Identifies a position in the chain by its block hash and height, along with recent ancestor hashes used to locate the fork point of a reorg.

Fields§

§block_hash: BlockHash

The block’s hash.

§height: u32

The block’s height.

§previous_blocks: [Option<BlockHash>; 12]

Ancestor block hashes immediately before Self::block_hash, in reverse chronological order.

These ensure we can find the fork point of a reorg if our block source no longer has the previous tip after a restart.

Implementations§

Source§

impl BlockLocator

Source

pub fn from_network(network: Network) -> Self

Constructs a BlockLocator that represents the genesis block at height 0 of the given network.

Source

pub fn new(block_hash: BlockHash, height: u32) -> Self

Returns a BlockLocator as identified by the given block hash and height.

This is not exported to bindings users directly as the bindings auto-generate an equivalent new.

Source

pub fn advance(&mut self, new_hash: BlockHash)

Advances to a new block at height Self::height + 1.

Source

pub fn update_for_new_tip( &mut self, new_tip_hash: BlockHash, new_tip_height: u32, )

Updates this locator for a new chain tip, either delegating to Self::advance if the new block is simply one higher than the current tip and wiping Self::previous_blocks if a few blocks have been skipped.

Source

pub fn get_hash_at_height(&self, height: u32) -> Option<BlockHash>

Returns the block hash at the given height, if available in our history.

Source

pub fn find_common_ancestor( &self, other: &BlockLocator, ) -> Option<(BlockHash, u32)>

Finds the most recent common ancestor between two BlockLocators by searching their ancestor hash histories.

Returns the common block hash and height, or None if no common block is found in the available histories.

Trait Implementations§

Source§

impl Clone for BlockLocator

Source§

fn clone(&self) -> BlockLocator

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Copy for BlockLocator

Source§

impl Debug for BlockLocator

Source§

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

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

impl Eq for BlockLocator

Source§

impl Hash for BlockLocator

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for BlockLocator

Source§

fn eq(&self, other: &BlockLocator) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Readable for BlockLocator

Source§

fn read<R: Read>(reader: &mut R) -> Result<Self, DecodeError>

Reads a Self in from the given Read.
Source§

impl StructuralPartialEq for BlockLocator

Source§

impl Writeable for BlockLocator

Source§

fn write<W: Writer>(&self, writer: &mut W) -> Result<(), Error>

Writes self out to the given Writer.
Source§

fn serialized_length(&self) -> usize

Gets the length of this object after it has been serialized. This can be overridden to optimize cases where we prepend an object with its length.
Source§

fn encode(&self) -> Vec<u8>

Writes self out to a Vec<u8>.

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

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> LengthReadable for T
where T: Readable,

Source§

fn read_from_fixed_length_buffer<R>(reader: &mut R) -> Result<T, DecodeError>

Reads a Self in from the given LengthLimitedRead.
Source§

impl<T> MaybeReadable for T
where T: Readable,

Source§

fn read<R>(reader: &mut R) -> Result<Option<T>, DecodeError>
where R: Read,

Reads a Self in from the given Read.
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, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

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.