Struct bdk_chain::local_chain::CheckPoint
source · pub struct CheckPoint(/* private fields */);
Expand description
A checkpoint is a node of a reference-counted linked list of BlockId
s.
Checkpoints are cheaply cloneable and are useful to find the agreement point between two sparse block chains.
Implementations§
source§impl CheckPoint
impl CheckPoint
sourcepub fn new(block: BlockId) -> CheckPoint
pub fn new(block: BlockId) -> CheckPoint
Construct a new base block at the front of a linked list.
sourcepub fn from_block_ids(
block_ids: impl IntoIterator<Item = BlockId>
) -> Result<CheckPoint, Option<CheckPoint>>
pub fn from_block_ids( block_ids: impl IntoIterator<Item = BlockId> ) -> Result<CheckPoint, Option<CheckPoint>>
Construct a checkpoint from a list of BlockId
s in ascending height order.
§Errors
This method will error if any of the follow occurs:
- The
blocks
iterator is empty, in which case, the error will beNone
. - The
blocks
iterator is not in ascending height order. - The
blocks
iterator contains multipleBlockId
s of the same height.
The error type is the last successful checkpoint constructed (if any).
sourcepub fn from_header(header: &Header, height: u32) -> CheckPoint
pub fn from_header(header: &Header, height: u32) -> CheckPoint
Construct a checkpoint from the given header
and block height
.
If header
is of the genesis block, the checkpoint won’t have a prev
node. Otherwise,
we return a checkpoint linked with the previous block.
sourcepub fn push(self, block: BlockId) -> Result<CheckPoint, CheckPoint>
pub fn push(self, block: BlockId) -> Result<CheckPoint, CheckPoint>
Puts another checkpoint onto the linked list representing the blockchain.
Returns an Err(self)
if the block you are pushing on is not at a greater height that the one you
are pushing on to.
sourcepub fn extend(
self,
blocks: impl IntoIterator<Item = BlockId>
) -> Result<CheckPoint, CheckPoint>
pub fn extend( self, blocks: impl IntoIterator<Item = BlockId> ) -> Result<CheckPoint, CheckPoint>
Extends the checkpoint linked list by a iterator of block ids.
Returns an Err(self)
if there is block which does not have a greater height than the
previous one.
sourcepub fn prev(&self) -> Option<CheckPoint>
pub fn prev(&self) -> Option<CheckPoint>
Get the previous checkpoint in the chain
sourcepub fn iter(&self) -> CheckPointIter ⓘ
pub fn iter(&self) -> CheckPointIter ⓘ
Iterate from this checkpoint in descending height.
sourcepub fn get(&self, height: u32) -> Option<CheckPoint>
pub fn get(&self, height: u32) -> Option<CheckPoint>
Get checkpoint at height
.
Returns None
if checkpoint at height
does not exist`.
sourcepub fn range<R>(&self, range: R) -> impl Iterator<Item = CheckPoint>where
R: RangeBounds<u32>,
pub fn range<R>(&self, range: R) -> impl Iterator<Item = CheckPoint>where
R: RangeBounds<u32>,
Iterate checkpoints over a height range.
Note that we always iterate checkpoints in reverse height order (iteration starts at tip height).
sourcepub fn insert(self, block_id: BlockId) -> CheckPoint
pub fn insert(self, block_id: BlockId) -> CheckPoint
Inserts block_id
at its height within the chain.
The effect of insert
depends on whether a height already exists. If it doesn’t the
block_id
we inserted and all pre-existing blocks higher than it will be re-inserted after
it. If the height already existed and has a conflicting block hash then it will be purged
along with all block following it. The returned chain will have a tip of the block_id
passed in. Of course, if the block_id
was already present then this just returns self
.
§Panics
This panics if called with a genesis block that differs from that of self
.
sourcepub fn eq_ptr(&self, other: &CheckPoint) -> bool
pub fn eq_ptr(&self, other: &CheckPoint) -> bool
This method tests for self
and other
to have equal internal pointers.
Trait Implementations§
source§impl Clone for CheckPoint
impl Clone for CheckPoint
source§fn clone(&self) -> CheckPoint
fn clone(&self) -> CheckPoint
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for CheckPoint
impl Debug for CheckPoint
source§impl IntoIterator for CheckPoint
impl IntoIterator for CheckPoint
§type Item = CheckPoint
type Item = CheckPoint
§type IntoIter = CheckPointIter
type IntoIter = CheckPointIter
source§fn into_iter(self) -> <CheckPoint as IntoIterator>::IntoIter
fn into_iter(self) -> <CheckPoint as IntoIterator>::IntoIter
source§impl PartialEq for CheckPoint
impl PartialEq for CheckPoint
source§fn eq(&self, other: &CheckPoint) -> bool
fn eq(&self, other: &CheckPoint) -> bool
self
and other
values to be equal, and is used
by ==
.