Struct lightning_signer::chain::tracker::ChainTracker

source ·
pub struct ChainTracker<L: ChainListener> {
    pub headers: VecDeque<Headers>,
    pub tip: Headers,
    pub height: u32,
    pub network: Network,
    pub listeners: OrderedMap<L::Key, (L, ListenSlot)>,
    /* private fields */
}
Expand description

Track chain, with basic validation

Fields§

§headers: VecDeque<Headers>

headers past the tip

§tip: Headers

tip header

§height: u32

height

§network: Network

The network

§listeners: OrderedMap<L::Key, (L, ListenSlot)>

listeners

Implementations§

source§

impl<L: ChainListener> ChainTracker<L>

source

pub const MAX_REORG_SIZE: usize = 100usize

Maximum reorg size that we will accept

source

pub fn new( network: Network, height: u32, tip: Headers, node_id: PublicKey, validator_factory: Arc<dyn ValidatorFactory> ) -> Result<Self, Error>

Create a new tracker

source

pub fn restore( headers: VecDeque<Headers>, tip: Headers, height: u32, network: Network, listeners: OrderedMap<L::Key, (L, ListenSlot)>, node_id: PublicKey, validator_factory: Arc<dyn ValidatorFactory> ) -> Self

Restore a tracker

source

pub fn from_genesis( network: Network, node_id: PublicKey, validator_factory: Arc<dyn ValidatorFactory> ) -> Self

Create a tracker at genesis

source

pub fn for_network( network: Network, node_id: PublicKey, validator_factory: Arc<dyn ValidatorFactory> ) -> Self

Create a tracker for a network, from a checkpoint if exists or from genesis otherwise

source

pub fn tip(&self) -> &Headers

Current chain tip header

source

pub fn headers(&self) -> &VecDeque<Headers>

Headers past the tip

source

pub fn height(&self) -> u32

Height of current chain tip

source

pub fn remove_block(&mut self, proof: TxoProof) -> Result<BlockHeader, Error>

Remove block at tip due to reorg

source

pub fn restore_listener( &mut self, outpoint: L::Key, listener: L, slot: ListenSlot )

Restore a listener

source

pub fn block_chunk( &mut self, hash: BlockHash, offset: u32, chunk: &[u8] ) -> Result<(), Error>

Handle a streamed block

source

pub fn add_block( &mut self, header: BlockHeader, proof: TxoProof ) -> Result<(), Error>

Add a block, which becomes the new tip

source

pub fn add_listener( &mut self, listener: L, initial_txid_watches: OrderedSet<Txid> )

Add a listener and initialize the watched outpoint set

source

pub fn remove_listener(&mut self, key: &L::Key)

Remove a listener

source

pub fn add_listener_watches( &mut self, key: &L::Key, watches: OrderedSet<OutPoint> )

Add more watches to a listener

source

pub fn get_all_forward_watches(&self) -> (Vec<Txid>, Vec<OutPoint>)

Return all Txid and OutPoint watches for future blocks.

source

pub fn get_all_reverse_watches(&self) -> (Vec<Txid>, Vec<OutPoint>)

Return all Txid and OutPoint watches for removing blocks. This is a superset of the forward watches, and also includes watches for outpoints which were seen as spent in previous blocks.

Auto Trait Implementations§

§

impl<L> !Freeze for ChainTracker<L>

§

impl<L> !RefUnwindSafe for ChainTracker<L>

§

impl<L> Send for ChainTracker<L>
where <L as ChainListener>::Key: Send,

§

impl<L> !Sync for ChainTracker<L>

§

impl<L> Unpin for ChainTracker<L>

§

impl<L> !UnwindSafe for ChainTracker<L>

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.

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
source§

impl<T, U> TryFrom<U> for T
where 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 T
where 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.
source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V