Trait breez_sdk_liquid::lightning::chain::Watch
pub trait Watch<ChannelSigner>where
ChannelSigner: WriteableEcdsaChannelSigner,{
// Required methods
fn watch_channel(
&self,
funding_txo: OutPoint,
monitor: ChannelMonitor<ChannelSigner>,
) -> ChannelMonitorUpdateStatus;
fn update_channel(
&self,
funding_txo: OutPoint,
update: &ChannelMonitorUpdate,
) -> ChannelMonitorUpdateStatus;
fn release_pending_monitor_events(
&self,
) -> Vec<(OutPoint, Vec<MonitorEvent>, Option<PublicKey>)>;
}
Expand description
The Watch
trait defines behavior for watching on-chain activity pertaining to channels as
blocks are connected and disconnected.
Each channel is associated with a ChannelMonitor
. Implementations of this trait are
responsible for maintaining a set of monitors such that they can be updated accordingly as
channel state changes and HTLCs are resolved. See method documentation for specific
requirements.
Implementations must ensure that updates are successfully applied and persisted upon method
completion. If an update fails with a PermanentFailure
, then it must immediately shut down
without taking any further action such as persisting the current state.
If an implementation maintains multiple instances of a channel’s monitor (e.g., by storing
backup copies), then it must ensure that updates are applied across all instances. Otherwise, it
could result in a revoked transaction being broadcast, allowing the counterparty to claim all
funds in the channel. See ChannelMonitorUpdateStatus
for more details about how to handle
multiple instances.
Required Methods§
fn watch_channel(
&self,
funding_txo: OutPoint,
monitor: ChannelMonitor<ChannelSigner>,
) -> ChannelMonitorUpdateStatus
fn watch_channel( &self, funding_txo: OutPoint, monitor: ChannelMonitor<ChannelSigner>, ) -> ChannelMonitorUpdateStatus
Watches a channel identified by funding_txo
using monitor
.
Implementations are responsible for watching the chain for the funding transaction along
with any spends of outputs returned by get_outputs_to_watch
. In practice, this means
calling block_connected
and block_disconnected
on the monitor.
Note: this interface MUST error with ChannelMonitorUpdateStatus::PermanentFailure
if
the given funding_txo
has previously been registered via watch_channel
.
fn update_channel(
&self,
funding_txo: OutPoint,
update: &ChannelMonitorUpdate,
) -> ChannelMonitorUpdateStatus
fn update_channel( &self, funding_txo: OutPoint, update: &ChannelMonitorUpdate, ) -> ChannelMonitorUpdateStatus
Updates a channel identified by funding_txo
by applying update
to its monitor.
Implementations must call update_monitor
with the given update. See
ChannelMonitorUpdateStatus
for invariants around returning an error.
fn release_pending_monitor_events(
&self,
) -> Vec<(OutPoint, Vec<MonitorEvent>, Option<PublicKey>)>
fn release_pending_monitor_events( &self, ) -> Vec<(OutPoint, Vec<MonitorEvent>, Option<PublicKey>)>
Returns any monitor events since the last call. Subsequent calls must only return new events.
Note that after any block- or transaction-connection calls to a ChannelMonitor
, no
further events may be returned here until the ChannelMonitor
has been fully persisted
to disk.
For details on asynchronous ChannelMonitor
updating and returning
MonitorEvent::Completed
here, see ChannelMonitorUpdateStatus::InProgress
.