Class ChannelMonitor


  • public class ChannelMonitor
    extends Object
    A ChannelMonitor handles chain events (blocks connected and disconnected) and generates on-chain transactions to ensure no loss of funds occurs. You MUST ensure that no ChannelMonitors for a given channel anywhere contain out-of-date information and are actively monitoring the chain. Note that the deserializer is only implemented for (BlockHash, ChannelMonitor), which tells you the last block hash which was block_connect()ed. You MUST rescan any blocks along the \"reorg path\" (ie disconnecting blocks until you find a common ancestor from both the returned block hash and the the current chain and then reconnecting blocks to get to the best chain) upon deserializing the object!
    • Method Detail

      • write

        public byte[] write()
        Serialize the ChannelMonitor object into a byte array which can be read by ChannelMonitor_read
      • get_latest_update_id

        public long get_latest_update_id()
        Gets the update_id from the latest ChannelMonitorUpdate which was applied to this ChannelMonitor.
      • get_funding_txo

        public TwoTuple_OutPointCVec_u8ZZ get_funding_txo()
        Gets the funding transaction outpoint of the channel this ChannelMonitor is monitoring for.
      • get_outputs_to_watch

        public TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32CVec_u8ZZZZ[] get_outputs_to_watch()
        Gets a list of txids, with their output scripts (in the order they appear in the transaction), which we must learn about spends of via block_connected().
      • load_outputs_to_watch

        public void load_outputs_to_watch​(Filter filter)
        Loads the funding txo and outputs to watch into the given `chain::Filter` by repeatedly calling `chain::Filter::register_output` and `chain::Filter::register_tx` until all outputs have been registered.
      • get_and_clear_pending_monitor_events

        public MonitorEvent[] get_and_clear_pending_monitor_events()
        Get the list of HTLCs who's status has been updated on chain. This should be called by ChannelManager via [`chain::Watch::release_pending_monitor_events`].
      • process_pending_events

        public void process_pending_events​(EventHandler handler)
        Processes [`SpendableOutputs`] events produced from each [`ChannelMonitor`] upon maturity. For channels featuring anchor outputs, this method will also process [`BumpTransaction`] events produced from each [`ChannelMonitor`] while there is a balance to claim onchain within each channel. As the confirmation of a commitment transaction may be critical to the safety of funds, we recommend invoking this every 30 seconds, or lower if running in an environment with spotty connections, like on mobile. An [`EventHandler`] may safely call back to the provider, though this shouldn't be needed in order to handle these events. [`SpendableOutputs`]: crate::events::Event::SpendableOutputs [`BumpTransaction`]: crate::events::Event::BumpTransaction
      • initial_counterparty_commitment_tx

        @Nullable
        public CommitmentTransaction initial_counterparty_commitment_tx()
        Gets the counterparty's initial commitment transaction. The returned commitment transaction is unsigned. This is intended to be called during the initial persistence of the monitor (inside an implementation of [`Persist::persist_new_channel`]), to allow for watchtowers in the persistence pipeline to have enough data to form justice transactions. This is similar to [`Self::counterparty_commitment_txs_from_update`], except that for the initial commitment transaction, we don't have a corresponding update. This will only return `Some` for channel monitors that have been created after upgrading to LDK 0.0.117+. [`Persist::persist_new_channel`]: crate::chain::chainmonitor::Persist::persist_new_channel Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
      • counterparty_commitment_txs_from_update

        public CommitmentTransaction[] counterparty_commitment_txs_from_update​(ChannelMonitorUpdate update)
        Gets all of the counterparty commitment transactions provided by the given update. This may be empty if the update doesn't include any new counterparty commitments. Returned commitment transactions are unsigned. This is provided so that watchtower clients in the persistence pipeline are able to build justice transactions for each counterparty commitment upon each update. It's intended to be used within an implementation of [`Persist::update_persisted_channel`], which is provided with a monitor and an update. Once revoked, signing a justice transaction can be done using [`Self::sign_to_local_justice_tx`]. It is expected that a watchtower client may use this method to retrieve the latest counterparty commitment transaction(s), and then hold the necessary data until a later update in which the monitor has been updated with the corresponding revocation data, at which point the monitor can sign the justice transaction. This will only return a non-empty list for monitor updates that have been created after upgrading to LDK 0.0.117+. Note that no restriction lies on the monitors themselves, which may have been created prior to upgrading. [`Persist::update_persisted_channel`]: crate::chain::chainmonitor::Persist::update_persisted_channel
      • sign_to_local_justice_tx

        public Result_TransactionNoneZ sign_to_local_justice_tx​(byte[] justice_tx,
                                                                long input_idx,
                                                                long value,
                                                                long commitment_number)
        Wrapper around [`EcdsaChannelSigner::sign_justice_revoked_output`] to make signing the justice transaction easier for implementors of [`chain::chainmonitor::Persist`]. On success this method returns the provided transaction signing the input at `input_idx`. This method will only produce a valid signature for a transaction spending the `to_local` output of a commitment transaction, i.e. this cannot be used for revoked HTLC outputs. `Value` is the value of the output being spent by the input at `input_idx`, committed in the BIP 143 signature. This method will only succeed if this monitor has received the revocation secret for the provided `commitment_number`. If a commitment number is provided that does not correspond to the commitment transaction being revoked, this will return a signed transaction, but the signature will not be valid. [`EcdsaChannelSigner::sign_justice_revoked_output`]: crate::sign::EcdsaChannelSigner::sign_justice_revoked_output [`Persist`]: crate::chain::chainmonitor::Persist
      • get_counterparty_node_id

        @Nullable
        public byte[] get_counterparty_node_id()
        Gets the `node_id` of the counterparty for this channel. Will be `None` for channels constructed on LDK versions prior to 0.0.110 and always `Some` otherwise. Note that the return value (or a relevant inner pointer) may be NULL or all-0s to represent None
      • get_latest_holder_commitment_txn

        public byte[][] get_latest_holder_commitment_txn​(Logger logger)
        Used by [`ChannelManager`] deserialization to broadcast the latest holder state if its copy of the channel state was out-of-date. You may also use this to broadcast the latest local commitment transaction, either because a monitor update failed or because we've fallen behind (i.e. we've received proof that our counterparty side knows a revocation secret we gave them that they shouldn't know). Broadcasting these transactions in the second case is UNSAFE, as they allow counterparty side to punish you. Nevertheless you may want to broadcast them if counterparty doesn't close channel with their commitment transaction after a substantial amount of time. Best may be to contact the other node operator out-of-band to coordinate other options available to you. [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
      • block_connected

        public TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ[] block_connected​(byte[] header,
                                                                                 TwoTuple_usizeTransactionZ[] txdata,
                                                                                 int height,
                                                                                 BroadcasterInterface broadcaster,
                                                                                 FeeEstimator fee_estimator,
                                                                                 Logger logger)
        Processes transactions in a newly connected block, which may result in any of the following: - update the monitor's state against resolved HTLCs - punish the counterparty in the case of seeing a revoked commitment transaction - force close the channel and claim/timeout incoming/outgoing HTLCs if near expiration - detect settled outputs for later spending - schedule and bump any in-flight claims Returns any new outputs to watch from `txdata`; after called, these are also included in [`get_outputs_to_watch`]. [`get_outputs_to_watch`]: #method.get_outputs_to_watch
      • block_disconnected

        public void block_disconnected​(byte[] header,
                                       int height,
                                       BroadcasterInterface broadcaster,
                                       FeeEstimator fee_estimator,
                                       Logger logger)
        Determines if the disconnected block contained any transactions of interest and updates appropriately.
      • transactions_confirmed

        public TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ[] transactions_confirmed​(byte[] header,
                                                                                        TwoTuple_usizeTransactionZ[] txdata,
                                                                                        int height,
                                                                                        BroadcasterInterface broadcaster,
                                                                                        FeeEstimator fee_estimator,
                                                                                        Logger logger)
        Processes transactions confirmed in a block with the given header and height, returning new outputs to watch. See [`block_connected`] for details. Used instead of [`block_connected`] by clients that are notified of transactions rather than blocks. See [`chain::Confirm`] for calling expectations. [`block_connected`]: Self::block_connected
      • transaction_unconfirmed

        public void transaction_unconfirmed​(byte[] txid,
                                            BroadcasterInterface broadcaster,
                                            FeeEstimator fee_estimator,
                                            Logger logger)
        Processes a transaction that was reorganized out of the chain. Used instead of [`block_disconnected`] by clients that are notified of transactions rather than blocks. See [`chain::Confirm`] for calling expectations. [`block_disconnected`]: Self::block_disconnected
      • best_block_updated

        public TwoTuple_ThirtyTwoBytesCVec_C2Tuple_u32TxOutZZZ[] best_block_updated​(byte[] header,
                                                                                    int height,
                                                                                    BroadcasterInterface broadcaster,
                                                                                    FeeEstimator fee_estimator,
                                                                                    Logger logger)
        Updates the monitor with the current best chain tip, returning new outputs to watch. See [`block_connected`] for details. Used instead of [`block_connected`] by clients that are notified of transactions rather than blocks. See [`chain::Confirm`] for calling expectations. [`block_connected`]: Self::block_connected
      • current_best_block

        public BestBlock current_best_block()
        Gets the latest best block which was connected either via the [`chain::Listen`] or [`chain::Confirm`] interfaces.
      • rebroadcast_pending_claims

        public void rebroadcast_pending_claims​(BroadcasterInterface broadcaster,
                                               FeeEstimator fee_estimator,
                                               Logger logger)
        Triggers rebroadcasts/fee-bumps of pending claims from a force-closed channel. This is crucial in preventing certain classes of pinning attacks, detecting substantial mempool feerate changes between blocks, and ensuring reliability if broadcasting fails. We recommend invoking this every 30 seconds, or lower if running in an environment with spotty connections, like on mobile.
      • get_spendable_outputs

        public SpendableOutputDescriptor[] get_spendable_outputs​(byte[] tx,
                                                                 int confirmation_height)
        Returns the descriptors for relevant outputs (i.e., those that we can spend) within the transaction if they exist and the transaction has at least [`ANTI_REORG_DELAY`] confirmations. For [`SpendableOutputDescriptor::DelayedPaymentOutput`] descriptors to be returned, the transaction must have at least `max(ANTI_REORG_DELAY, to_self_delay)` confirmations. Descriptors returned by this method are primarily exposed via [`Event::SpendableOutputs`] once they are no longer under reorg risk. This method serves as a way to retrieve these descriptors at a later time, either for historical purposes, or to replay any missed/unhandled descriptors. For the purpose of gathering historical records, if the channel close has fully resolved (i.e., [`ChannelMonitor::get_claimable_balances`] returns an empty set), you can retrieve all spendable outputs by providing all descendant spending transactions starting from the channel's funding transaction and going down three levels. `tx` is a transaction we'll scan the outputs of. Any transaction can be provided. If any outputs which can be spent by us are found, at least one descriptor is returned. `confirmation_height` must be the height of the block in which `tx` was included in.
      • get_claimable_balances

        public Balance[] get_claimable_balances()
        Gets the balances in this channel which are either claimable by us if we were to force-close the channel now or which are claimable on-chain (possibly awaiting confirmation). Any balances in the channel which are available on-chain (excluding on-chain fees) are included here until an [`Event::SpendableOutputs`] event has been generated for the balance, or until our counterparty has claimed the balance and accrued several confirmations on the claim transaction. Note that for `ChannelMonitors` which track a channel which went on-chain with versions of LDK prior to 0.0.111, not all or excess balances may be included. See [`Balance`] for additional details on the types of claimable balances which may be returned here and their meanings.