Struct CheckPoint
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§
§impl CheckPoint
impl CheckPoint
pub fn new(block: BlockId) -> CheckPoint
pub fn new(block: BlockId) -> CheckPoint
Construct a new base block at the front of a linked list.
pub 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).
pub 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.
pub 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.
pub 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.
pub fn prev(&self) -> Option<CheckPoint>
pub fn prev(&self) -> Option<CheckPoint>
Get the previous checkpoint in the chain
pub fn iter(&self) -> CheckPointIter ⓘ
pub fn iter(&self) -> CheckPointIter ⓘ
Iterate from this checkpoint in descending height.
pub 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`.
pub 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).
pub 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
.
pub 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§
§impl Clone for CheckPoint
impl Clone for CheckPoint
§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 more