Trait lightning::chain::Confirm

source ·
pub trait Confirm {
    // Required methods
    fn transactions_confirmed(
        &self,
        header: &BlockHeader,
        txdata: &TransactionData<'_>,
        height: u32
    );
    fn transaction_unconfirmed(&self, txid: &Txid);
    fn best_block_updated(&self, header: &BlockHeader, height: u32);
    fn get_relevant_txids(&self) -> Vec<(Txid, Option<BlockHash>)>;
}
Expand description

The Confirm trait is used to notify LDK when relevant transactions have been confirmed on chain or unconfirmed during a chain reorganization.

Clients sourcing chain data using a transaction-oriented API should prefer this interface over Listen. For instance, an Electrum-based transaction sync implementation may implement Filter to subscribe to relevant transactions and unspent outputs it should monitor for on-chain activity. Then, it needs to notify LDK via this interface upon observing any changes with reference to the confirmation status of the monitored objects.

Use

The intended use is as follows:

Order

Clients must call these methods in chain order. Specifically:

  • Transactions which are confirmed in a particular block must be given before transactions confirmed in a later block.
  • Dependent transactions within the same block must be given in topological order, possibly in separate calls.
  • All unconfirmed transactions must be given after the original confirmations and before any reconfirmations, i.e., transactions_confirmed and transaction_unconfirmed calls should never be interleaved, but always conduced en bloc.
  • Any reconfirmed transactions need to be explicitly unconfirmed before they are reconfirmed in regard to the new block.

See individual method documentation for further details.

Required Methods§

source

fn transactions_confirmed( &self, header: &BlockHeader, txdata: &TransactionData<'_>, height: u32 )

Notifies LDK of transactions confirmed in a block with a given header and height.

Must be called for any transactions registered by Filter::register_tx or any transactions spending an output registered by Filter::register_output. Such transactions appearing in the same block do not need to be included in the same call; instead, multiple calls with additional transactions may be made so long as they are made in chain order.

May be called before or after best_block_updated for the corresponding block. However, in the event of a chain reorganization, it must not be called with a header that is no longer in the chain as of the last call to best_block_updated.

source

fn transaction_unconfirmed(&self, txid: &Txid)

Notifies LDK of a transaction that is no longer confirmed as result of a chain reorganization.

Must be called for any transaction returned by get_relevant_txids if it has been reorganized out of the best chain or if it is no longer confirmed in the block with the given block hash. Once called, the given transaction will not be returned by get_relevant_txids, unless it has been reconfirmed via transactions_confirmed.

source

fn best_block_updated(&self, header: &BlockHeader, height: u32)

Notifies LDK of an update to the best header connected at the given height.

Must be called whenever a new chain tip becomes available. May be skipped for intermediary blocks.

source

fn get_relevant_txids(&self) -> Vec<(Txid, Option<BlockHash>)>

Returns transactions that must be monitored for reorganization out of the chain along with the hash of the block as part of which it had been previously confirmed.

Note that the returned Option<BlockHash> might be None for channels created with LDK 0.0.112 and prior, in which case you need to manually track previous confirmations.

Will include any transactions passed to transactions_confirmed that have insufficient confirmations to be safe from a chain reorganization. Will not include any transactions passed to transaction_unconfirmed, unless later reconfirmed.

Must be called to determine the subset of transactions that must be monitored for reorganization. Will be idempotent between calls but may change as a result of calls to the other interface methods. Thus, this is useful to determine which transactions must be given to transaction_unconfirmed.

If any of the returned transactions are confirmed in a block other than the one with the given hash, they need to be unconfirmed and reconfirmed via transaction_unconfirmed and transactions_confirmed, respectively.

Implementations on Foreign Types§

source§

impl<Signer: WriteableEcdsaChannelSigner, M, T: Deref, F: Deref, L: Deref> Confirm for (M, T, F, L)where M: Deref<Target = ChannelMonitor<Signer>>, T::Target: BroadcasterInterface, F::Target: FeeEstimator, L::Target: Logger,

Implementors§

source§

impl<ChannelSigner: WriteableEcdsaChannelSigner, C: Deref, T: Deref, F: Deref, L: Deref, P: Deref> Confirm for ChainMonitor<ChannelSigner, C, T, F, L, P>where C::Target: Filter, T::Target: BroadcasterInterface, F::Target: FeeEstimator, L::Target: Logger, P::Target: Persist<ChannelSigner>,

source§

impl<M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, L: Deref> Confirm for ChannelManager<M, T, ES, NS, SP, F, R, L>where M::Target: Watch<<SP::Target as SignerProvider>::Signer>, T::Target: BroadcasterInterface, ES::Target: EntropySource, NS::Target: NodeSigner, SP::Target: SignerProvider, F::Target: FeeEstimator, R::Target: Router, L::Target: Logger,