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)>,
pub trusted_oracle_pubkeys: Vec<PublicKey>,
/* 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
trusted_oracle_pubkeys: Vec<PublicKey>
public keys of trusted TXO oracle
Implementations§
Source§impl<L: ChainListener> ChainTracker<L>
impl<L: ChainListener> ChainTracker<L>
Sourcepub const MAX_REORG_SIZE: usize = 100usize
pub const MAX_REORG_SIZE: usize = 100usize
Maximum reorg size that we will accept
Sourcepub fn new(
network: Network,
height: u32,
tip: Headers,
node_id: PublicKey,
validator_factory: Arc<dyn ValidatorFactory>,
trusted_oracle_pubkeys: Vec<PublicKey>,
) -> Result<Self, Error>
pub fn new( network: Network, height: u32, tip: Headers, node_id: PublicKey, validator_factory: Arc<dyn ValidatorFactory>, trusted_oracle_pubkeys: Vec<PublicKey>, ) -> Result<Self, Error>
Create a new tracker
Sourcepub fn set_allow_deep_reorgs(&mut self, allow: bool)
pub fn set_allow_deep_reorgs(&mut self, allow: bool)
Set whether deep reorgs are allowed
Sourcepub 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>,
trusted_oracle_pubkeys: Vec<PublicKey>,
) -> Self
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>, trusted_oracle_pubkeys: Vec<PublicKey>, ) -> Self
Restore a tracker
Sourcepub fn from_genesis(
network: Network,
node_id: PublicKey,
validator_factory: Arc<dyn ValidatorFactory>,
trusted_oracle_pubkeys: Vec<PublicKey>,
) -> Self
pub fn from_genesis( network: Network, node_id: PublicKey, validator_factory: Arc<dyn ValidatorFactory>, trusted_oracle_pubkeys: Vec<PublicKey>, ) -> Self
Create a tracker at genesis
Sourcepub fn for_network(
network: Network,
node_id: PublicKey,
validator_factory: Arc<dyn ValidatorFactory>,
trusted_oracle_pubkeys: Vec<PublicKey>,
) -> Self
pub fn for_network( network: Network, node_id: PublicKey, validator_factory: Arc<dyn ValidatorFactory>, trusted_oracle_pubkeys: Vec<PublicKey>, ) -> Self
Create a tracker for a network, from a checkpoint if exists or from genesis otherwise
Sourcepub fn remove_block(
&mut self,
proof: TxoProof,
supplied_prev_headers: Headers,
) -> Result<BlockHeader, Error>
pub fn remove_block( &mut self, proof: TxoProof, supplied_prev_headers: Headers, ) -> Result<BlockHeader, Error>
Remove block at tip due to reorg
The previous block and filter headers are provided in case the reorg is too deep for our local memory of headers. However, this should only be used on testnet, since a deep reorg may be incompatible with the Lightning security model.
Sourcepub fn restore_listener(
&mut self,
outpoint: L::Key,
listener: L,
slot: ListenSlot,
)
pub fn restore_listener( &mut self, outpoint: L::Key, listener: L, slot: ListenSlot, )
Restore a listener
Sourcepub fn block_chunk(
&mut self,
hash: BlockHash,
offset: u32,
chunk: &[u8],
) -> Result<(), Error>
pub fn block_chunk( &mut self, hash: BlockHash, offset: u32, chunk: &[u8], ) -> Result<(), Error>
Handle a streamed block
Sourcepub fn add_block(
&mut self,
header: BlockHeader,
proof: TxoProof,
) -> Result<(), Error>
pub fn add_block( &mut self, header: BlockHeader, proof: TxoProof, ) -> Result<(), Error>
Add a block, which becomes the new tip
Sourcepub fn add_listener(
&mut self,
listener: L,
initial_txid_watches: OrderedSet<Txid>,
)
pub fn add_listener( &mut self, listener: L, initial_txid_watches: OrderedSet<Txid>, )
Add a listener and initialize the watched outpoint set
Sourcepub fn remove_listener(&mut self, key: &L::Key)
pub fn remove_listener(&mut self, key: &L::Key)
Remove a listener
Sourcepub fn add_listener_watches(
&mut self,
key: &L::Key,
watches: OrderedSet<OutPoint>,
)
pub fn add_listener_watches( &mut self, key: &L::Key, watches: OrderedSet<OutPoint>, )
Add more watches to a listener
Auto Trait Implementations§
impl<L> !Freeze for ChainTracker<L>
impl<L> !RefUnwindSafe for ChainTracker<L>
impl<L> Send for ChainTracker<L>
impl<L> !Sync for ChainTracker<L>
impl<L> Unpin for ChainTracker<L>
impl<L> !UnwindSafe for ChainTracker<L>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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