mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-01-18 21:34:48 +01:00
Merge pull request #2083 from wpaulino/events-module
Move events.rs into its own top-level module
This commit is contained in:
commit
2d4bf974e5
@ -38,6 +38,8 @@ use lightning::chain::channelmonitor::{ChannelMonitor, MonitorEvent};
|
||||
use lightning::chain::transaction::OutPoint;
|
||||
use lightning::chain::chaininterface::{BroadcasterInterface, ConfirmationTarget, FeeEstimator};
|
||||
use lightning::chain::keysinterface::{KeyMaterial, InMemorySigner, Recipient, EntropySource, NodeSigner, SignerProvider};
|
||||
use lightning::events;
|
||||
use lightning::events::MessageSendEventsProvider;
|
||||
use lightning::ln::{PaymentHash, PaymentPreimage, PaymentSecret};
|
||||
use lightning::ln::channelmanager::{ChainParameters, ChannelDetails, ChannelManager, PaymentSendFailure, ChannelManagerReadArgs, PaymentId};
|
||||
use lightning::ln::channel::FEE_SPIKE_BUFFER_FEE_INCREASE_MULTIPLE;
|
||||
@ -45,10 +47,8 @@ use lightning::ln::msgs::{self, CommitmentUpdate, ChannelMessageHandler, DecodeE
|
||||
use lightning::ln::script::ShutdownScript;
|
||||
use lightning::util::enforcing_trait_impls::{EnforcingSigner, EnforcementState};
|
||||
use lightning::util::errors::APIError;
|
||||
use lightning::util::events;
|
||||
use lightning::util::logger::Logger;
|
||||
use lightning::util::config::UserConfig;
|
||||
use lightning::util::events::MessageSendEventsProvider;
|
||||
use lightning::util::ser::{Readable, ReadableArgs, Writeable, Writer};
|
||||
use lightning::routing::router::{InFlightHtlcs, Route, RouteHop, RouteParameters, Router};
|
||||
|
||||
|
@ -35,6 +35,7 @@ use lightning::chain::chaininterface::{BroadcasterInterface, ConfirmationTarget,
|
||||
use lightning::chain::chainmonitor;
|
||||
use lightning::chain::transaction::OutPoint;
|
||||
use lightning::chain::keysinterface::{InMemorySigner, Recipient, KeyMaterial, EntropySource, NodeSigner, SignerProvider};
|
||||
use lightning::events::Event;
|
||||
use lightning::ln::{PaymentHash, PaymentPreimage, PaymentSecret};
|
||||
use lightning::ln::channelmanager::{ChainParameters, ChannelDetails, ChannelManager, PaymentId};
|
||||
use lightning::ln::peer_handler::{MessageHandler,PeerManager,SocketDescriptor,IgnoringMessageHandler};
|
||||
@ -46,7 +47,6 @@ use lightning::routing::router::{find_route, InFlightHtlcs, PaymentParameters, R
|
||||
use lightning::routing::scoring::FixedPenaltyScorer;
|
||||
use lightning::util::config::UserConfig;
|
||||
use lightning::util::errors::APIError;
|
||||
use lightning::util::events::Event;
|
||||
use lightning::util::enforcing_trait_impls::{EnforcingSigner, EnforcementState};
|
||||
use lightning::util::logger::Logger;
|
||||
use lightning::util::ser::{Readable, Writeable};
|
||||
|
@ -26,6 +26,9 @@ use lightning::chain;
|
||||
use lightning::chain::chaininterface::{BroadcasterInterface, FeeEstimator};
|
||||
use lightning::chain::chainmonitor::{ChainMonitor, Persist};
|
||||
use lightning::chain::keysinterface::{EntropySource, NodeSigner, SignerProvider};
|
||||
use lightning::events::{Event, PathFailure};
|
||||
#[cfg(feature = "std")]
|
||||
use lightning::events::{EventHandler, EventsProvider};
|
||||
use lightning::ln::channelmanager::ChannelManager;
|
||||
use lightning::ln::msgs::{ChannelMessageHandler, OnionMessageHandler, RoutingMessageHandler};
|
||||
use lightning::ln::peer_handler::{CustomMessageHandler, PeerManager, SocketDescriptor};
|
||||
@ -33,9 +36,6 @@ use lightning::routing::gossip::{NetworkGraph, P2PGossipSync};
|
||||
use lightning::routing::utxo::UtxoLookup;
|
||||
use lightning::routing::router::Router;
|
||||
use lightning::routing::scoring::{Score, WriteableScore};
|
||||
use lightning::util::events::{Event, PathFailure};
|
||||
#[cfg(feature = "std")]
|
||||
use lightning::util::events::{EventHandler, EventsProvider};
|
||||
use lightning::util::logger::Logger;
|
||||
use lightning::util::persist::Persister;
|
||||
use lightning_rapid_gossip_sync::RapidGossipSync;
|
||||
@ -80,7 +80,7 @@ use alloc::vec::Vec;
|
||||
/// unilateral chain closure fees are at risk.
|
||||
///
|
||||
/// [`ChannelMonitor`]: lightning::chain::channelmonitor::ChannelMonitor
|
||||
/// [`Event`]: lightning::util::events::Event
|
||||
/// [`Event`]: lightning::events::Event
|
||||
#[cfg(feature = "std")]
|
||||
#[must_use = "BackgroundProcessor will immediately stop on drop. It should be stored until shutdown."]
|
||||
pub struct BackgroundProcessor {
|
||||
@ -663,6 +663,7 @@ mod tests {
|
||||
use lightning::chain::channelmonitor::ANTI_REORG_DELAY;
|
||||
use lightning::chain::keysinterface::{InMemorySigner, KeysManager};
|
||||
use lightning::chain::transaction::OutPoint;
|
||||
use lightning::events::{Event, PathFailure, MessageSendEventsProvider, MessageSendEvent};
|
||||
use lightning::get_event_msg;
|
||||
use lightning::ln::PaymentHash;
|
||||
use lightning::ln::channelmanager;
|
||||
@ -674,7 +675,6 @@ mod tests {
|
||||
use lightning::routing::router::{DefaultRouter, RouteHop};
|
||||
use lightning::routing::scoring::{ChannelUsage, Score};
|
||||
use lightning::util::config::UserConfig;
|
||||
use lightning::util::events::{Event, PathFailure, MessageSendEventsProvider, MessageSendEvent};
|
||||
use lightning::util::ser::Writeable;
|
||||
use lightning::util::test_utils;
|
||||
use lightning::util::persist::KVStorePersister;
|
||||
|
@ -665,12 +665,12 @@ mod test {
|
||||
use bitcoin_hashes::{Hash, sha256};
|
||||
use bitcoin_hashes::sha256::Hash as Sha256;
|
||||
use lightning::chain::keysinterface::{EntropySource, PhantomKeysManager};
|
||||
use lightning::events::{MessageSendEvent, MessageSendEventsProvider, Event};
|
||||
use lightning::ln::{PaymentPreimage, PaymentHash};
|
||||
use lightning::ln::channelmanager::{PhantomRouteHints, MIN_FINAL_CLTV_EXPIRY_DELTA, PaymentId};
|
||||
use lightning::ln::functional_test_utils::*;
|
||||
use lightning::ln::msgs::ChannelMessageHandler;
|
||||
use lightning::routing::router::{PaymentParameters, RouteParameters, find_route};
|
||||
use lightning::util::events::{MessageSendEvent, MessageSendEventsProvider, Event};
|
||||
use lightning::util::test_utils;
|
||||
use lightning::util::config::UserConfig;
|
||||
use crate::utils::create_invoice_from_channelmanager_and_duration_since_epoch;
|
||||
|
@ -24,7 +24,7 @@
|
||||
//! ```
|
||||
//! use std::net::TcpStream;
|
||||
//! use bitcoin::secp256k1::PublicKey;
|
||||
//! use lightning::util::events::{Event, EventHandler, EventsProvider};
|
||||
//! use lightning::events::{Event, EventHandler, EventsProvider};
|
||||
//! use std::net::SocketAddr;
|
||||
//! use std::sync::Arc;
|
||||
//!
|
||||
@ -586,7 +586,7 @@ mod tests {
|
||||
use lightning::ln::peer_handler::{MessageHandler, PeerManager};
|
||||
use lightning::ln::features::NodeFeatures;
|
||||
use lightning::routing::gossip::NodeId;
|
||||
use lightning::util::events::*;
|
||||
use lightning::events::*;
|
||||
use lightning::util::test_utils::TestNodeSigner;
|
||||
use bitcoin::secp256k1::{Secp256k1, SecretKey, PublicKey};
|
||||
|
||||
|
@ -143,8 +143,8 @@ mod tests {
|
||||
use lightning::chain::chainmonitor::Persist;
|
||||
use lightning::chain::transaction::OutPoint;
|
||||
use lightning::{check_closed_broadcast, check_closed_event, check_added_monitors};
|
||||
use lightning::events::{ClosureReason, MessageSendEventsProvider};
|
||||
use lightning::ln::functional_test_utils::*;
|
||||
use lightning::util::events::{ClosureReason, MessageSendEventsProvider};
|
||||
use lightning::util::test_utils;
|
||||
use std::fs;
|
||||
use bitcoin::hashes::Hash;
|
||||
|
@ -32,11 +32,11 @@ use crate::chain::chaininterface::{BroadcasterInterface, FeeEstimator};
|
||||
use crate::chain::channelmonitor::{ChannelMonitor, ChannelMonitorUpdate, Balance, MonitorEvent, TransactionOutputs, LATENCY_GRACE_PERIOD_BLOCKS};
|
||||
use crate::chain::transaction::{OutPoint, TransactionData};
|
||||
use crate::chain::keysinterface::WriteableEcdsaChannelSigner;
|
||||
use crate::events;
|
||||
use crate::events::{Event, EventHandler};
|
||||
use crate::util::atomic_counter::AtomicCounter;
|
||||
use crate::util::logger::Logger;
|
||||
use crate::util::errors::APIError;
|
||||
use crate::util::events;
|
||||
use crate::util::events::{Event, EventHandler};
|
||||
use crate::ln::channelmanager::ChannelDetails;
|
||||
|
||||
use crate::prelude::*;
|
||||
@ -490,7 +490,7 @@ where C::Target: chain::Filter,
|
||||
|
||||
#[cfg(any(test, fuzzing, feature = "_test_utils"))]
|
||||
pub fn get_and_clear_pending_events(&self) -> Vec<events::Event> {
|
||||
use crate::util::events::EventsProvider;
|
||||
use crate::events::EventsProvider;
|
||||
let events = core::cell::RefCell::new(Vec::new());
|
||||
let event_handler = |event: events::Event| events.borrow_mut().push(event);
|
||||
self.process_pending_events(&event_handler);
|
||||
@ -502,7 +502,7 @@ where C::Target: chain::Filter,
|
||||
///
|
||||
/// See the trait-level documentation of [`EventsProvider`] for requirements.
|
||||
///
|
||||
/// [`EventsProvider`]: crate::util::events::EventsProvider
|
||||
/// [`EventsProvider`]: crate::events::EventsProvider
|
||||
pub async fn process_pending_events_async<Future: core::future::Future, H: Fn(Event) -> Future>(
|
||||
&self, handler: H
|
||||
) {
|
||||
@ -792,11 +792,11 @@ mod tests {
|
||||
use crate::{get_htlc_update_msgs, get_local_commitment_txn, get_revoke_commit_msgs, get_route_and_payment_hash, unwrap_send_err};
|
||||
use crate::chain::{ChannelMonitorUpdateStatus, Confirm, Watch};
|
||||
use crate::chain::channelmonitor::LATENCY_GRACE_PERIOD_BLOCKS;
|
||||
use crate::events::{Event, ClosureReason, MessageSendEvent, MessageSendEventsProvider};
|
||||
use crate::ln::channelmanager::{PaymentSendFailure, PaymentId};
|
||||
use crate::ln::functional_test_utils::*;
|
||||
use crate::ln::msgs::ChannelMessageHandler;
|
||||
use crate::util::errors::APIError;
|
||||
use crate::util::events::{Event, ClosureReason, MessageSendEvent, MessageSendEventsProvider};
|
||||
|
||||
#[test]
|
||||
fn test_async_ooo_offchain_updates() {
|
||||
|
@ -51,9 +51,9 @@ use crate::chain::Filter;
|
||||
use crate::util::logger::Logger;
|
||||
use crate::util::ser::{Readable, ReadableArgs, RequiredWrapper, MaybeReadable, UpgradableRequired, Writer, Writeable, U48};
|
||||
use crate::util::byte_utils;
|
||||
use crate::util::events::Event;
|
||||
use crate::events::Event;
|
||||
#[cfg(anchors)]
|
||||
use crate::util::events::{AnchorDescriptor, HTLCDescriptor, BumpTransactionEvent};
|
||||
use crate::events::bump_transaction::{AnchorDescriptor, HTLCDescriptor, BumpTransactionEvent};
|
||||
|
||||
use crate::prelude::*;
|
||||
use core::{cmp, mem};
|
||||
@ -1279,7 +1279,7 @@ impl<Signer: WriteableEcdsaChannelSigner> ChannelMonitor<Signer> {
|
||||
/// This is called by the [`EventsProvider::process_pending_events`] implementation for
|
||||
/// [`ChainMonitor`].
|
||||
///
|
||||
/// [`EventsProvider::process_pending_events`]: crate::util::events::EventsProvider::process_pending_events
|
||||
/// [`EventsProvider::process_pending_events`]: crate::events::EventsProvider::process_pending_events
|
||||
/// [`ChainMonitor`]: crate::chain::chainmonitor::ChainMonitor
|
||||
pub fn get_and_clear_pending_events(&self) -> Vec<Event> {
|
||||
self.inner.lock().unwrap().get_and_clear_pending_events()
|
||||
@ -4005,6 +4005,7 @@ mod tests {
|
||||
use crate::chain::package::{weight_offered_htlc, weight_received_htlc, weight_revoked_offered_htlc, weight_revoked_received_htlc, WEIGHT_REVOKED_OUTPUT};
|
||||
use crate::chain::transaction::OutPoint;
|
||||
use crate::chain::keysinterface::InMemorySigner;
|
||||
use crate::events::ClosureReason;
|
||||
use crate::ln::{PaymentPreimage, PaymentHash};
|
||||
use crate::ln::chan_utils;
|
||||
use crate::ln::chan_utils::{HTLCOutputInCommitment, ChannelPublicKeys, ChannelTransactionParameters, HolderCommitmentTransaction, CounterpartyChannelTransactionParameters};
|
||||
@ -4012,7 +4013,6 @@ mod tests {
|
||||
use crate::ln::functional_test_utils::*;
|
||||
use crate::ln::script::ShutdownScript;
|
||||
use crate::util::errors::APIError;
|
||||
use crate::util::events::ClosureReason;
|
||||
use crate::util::test_utils::{TestLogger, TestBroadcaster, TestFeeEstimator};
|
||||
use crate::util::ser::{ReadableArgs, Writeable};
|
||||
use crate::sync::{Arc, Mutex};
|
||||
|
@ -34,9 +34,9 @@ use bitcoin::{PackedLockTime, secp256k1, Sequence, Witness};
|
||||
use crate::util::transaction_utils;
|
||||
use crate::util::crypto::{hkdf_extract_expand_twice, sign};
|
||||
use crate::util::ser::{Writeable, Writer, Readable};
|
||||
#[cfg(anchors)]
|
||||
use crate::util::events::HTLCDescriptor;
|
||||
use crate::chain::transaction::OutPoint;
|
||||
#[cfg(anchors)]
|
||||
use crate::events::bump_transaction::HTLCDescriptor;
|
||||
use crate::ln::channel::ANCHOR_OUTPUT_VALUE_SATOSHI;
|
||||
use crate::ln::{chan_utils, PaymentPreimage};
|
||||
use crate::ln::chan_utils::{HTLCOutputInCommitment, make_funding_redeemscript, ChannelPublicKeys, HolderCommitmentTransaction, ChannelTransactionParameters, CommitmentTransaction, ClosingTransaction};
|
||||
@ -135,7 +135,7 @@ impl_writeable_tlv_based!(StaticPaymentOutputDescriptor, {
|
||||
/// outpoint describing which `txid` and output `index` is available, the full output which exists
|
||||
/// at that `txid`/`index`, and any keys or other information required to sign.
|
||||
///
|
||||
/// [`SpendableOutputs`]: crate::util::events::Event::SpendableOutputs
|
||||
/// [`SpendableOutputs`]: crate::events::Event::SpendableOutputs
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
pub enum SpendableOutputDescriptor {
|
||||
/// An output to a script which was provided via [`SignerProvider`] directly, either from
|
||||
|
231
lightning/src/events/bump_transaction.rs
Normal file
231
lightning/src/events/bump_transaction.rs
Normal file
@ -0,0 +1,231 @@
|
||||
// This file is Copyright its original authors, visible in version control
|
||||
// history.
|
||||
//
|
||||
// This file is licensed under the Apache License, Version 2.0 <LICENSE-APACHE
|
||||
// or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
|
||||
// You may not use this file except in accordance with one or both of these
|
||||
// licenses.
|
||||
|
||||
//! Utitilies for bumping transactions originating from [`super::Event`]s.
|
||||
|
||||
use crate::ln::PaymentPreimage;
|
||||
use crate::ln::chan_utils;
|
||||
use crate::ln::chan_utils::{ChannelTransactionParameters, HTLCOutputInCommitment};
|
||||
|
||||
use bitcoin::{OutPoint, PackedLockTime, Script, Transaction, Txid, TxIn, TxOut, Witness};
|
||||
use bitcoin::secp256k1;
|
||||
use bitcoin::secp256k1::{PublicKey, Secp256k1};
|
||||
use bitcoin::secp256k1::ecdsa::Signature;
|
||||
|
||||
/// A descriptor used to sign for a commitment transaction's anchor output.
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
pub struct AnchorDescriptor {
|
||||
/// A unique identifier used along with `channel_value_satoshis` to re-derive the
|
||||
/// [`InMemorySigner`] required to sign `input`.
|
||||
///
|
||||
/// [`InMemorySigner`]: crate::chain::keysinterface::InMemorySigner
|
||||
pub channel_keys_id: [u8; 32],
|
||||
/// The value in satoshis of the channel we're attempting to spend the anchor output of. This is
|
||||
/// used along with `channel_keys_id` to re-derive the [`InMemorySigner`] required to sign
|
||||
/// `input`.
|
||||
///
|
||||
/// [`InMemorySigner`]: crate::chain::keysinterface::InMemorySigner
|
||||
pub channel_value_satoshis: u64,
|
||||
/// The transaction input's outpoint corresponding to the commitment transaction's anchor
|
||||
/// output.
|
||||
pub outpoint: OutPoint,
|
||||
}
|
||||
|
||||
/// A descriptor used to sign for a commitment transaction's HTLC output.
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
pub struct HTLCDescriptor {
|
||||
/// A unique identifier used along with `channel_value_satoshis` to re-derive the
|
||||
/// [`InMemorySigner`] required to sign `input`.
|
||||
///
|
||||
/// [`InMemorySigner`]: crate::chain::keysinterface::InMemorySigner
|
||||
pub channel_keys_id: [u8; 32],
|
||||
/// The value in satoshis of the channel we're attempting to spend the anchor output of. This is
|
||||
/// used along with `channel_keys_id` to re-derive the [`InMemorySigner`] required to sign
|
||||
/// `input`.
|
||||
///
|
||||
/// [`InMemorySigner`]: crate::chain::keysinterface::InMemorySigner
|
||||
pub channel_value_satoshis: u64,
|
||||
/// The necessary channel parameters that need to be provided to the re-derived
|
||||
/// [`InMemorySigner`] through [`ChannelSigner::provide_channel_parameters`].
|
||||
///
|
||||
/// [`InMemorySigner`]: crate::chain::keysinterface::InMemorySigner
|
||||
/// [`ChannelSigner::provide_channel_parameters`]: crate::chain::keysinterface::ChannelSigner::provide_channel_parameters
|
||||
pub channel_parameters: ChannelTransactionParameters,
|
||||
/// The txid of the commitment transaction in which the HTLC output lives.
|
||||
pub commitment_txid: Txid,
|
||||
/// The number of the commitment transaction in which the HTLC output lives.
|
||||
pub per_commitment_number: u64,
|
||||
/// The details of the HTLC as it appears in the commitment transaction.
|
||||
pub htlc: HTLCOutputInCommitment,
|
||||
/// The preimage, if `Some`, to claim the HTLC output with. If `None`, the timeout path must be
|
||||
/// taken.
|
||||
pub preimage: Option<PaymentPreimage>,
|
||||
/// The counterparty's signature required to spend the HTLC output.
|
||||
pub counterparty_sig: Signature
|
||||
}
|
||||
|
||||
impl HTLCDescriptor {
|
||||
/// Returns the unsigned transaction input spending the HTLC output in the commitment
|
||||
/// transaction.
|
||||
pub fn unsigned_tx_input(&self) -> TxIn {
|
||||
chan_utils::build_htlc_input(&self.commitment_txid, &self.htlc, true /* opt_anchors */)
|
||||
}
|
||||
|
||||
/// Returns the delayed output created as a result of spending the HTLC output in the commitment
|
||||
/// transaction.
|
||||
pub fn tx_output<C: secp256k1::Signing + secp256k1::Verification>(
|
||||
&self, per_commitment_point: &PublicKey, secp: &Secp256k1<C>
|
||||
) -> TxOut {
|
||||
let channel_params = self.channel_parameters.as_holder_broadcastable();
|
||||
let broadcaster_keys = channel_params.broadcaster_pubkeys();
|
||||
let counterparty_keys = channel_params.countersignatory_pubkeys();
|
||||
let broadcaster_delayed_key = chan_utils::derive_public_key(
|
||||
secp, per_commitment_point, &broadcaster_keys.delayed_payment_basepoint
|
||||
);
|
||||
let counterparty_revocation_key = chan_utils::derive_public_revocation_key(
|
||||
secp, per_commitment_point, &counterparty_keys.revocation_basepoint
|
||||
);
|
||||
chan_utils::build_htlc_output(
|
||||
0 /* feerate_per_kw */, channel_params.contest_delay(), &self.htlc, true /* opt_anchors */,
|
||||
false /* use_non_zero_fee_anchors */, &broadcaster_delayed_key, &counterparty_revocation_key
|
||||
)
|
||||
}
|
||||
|
||||
/// Returns the witness script of the HTLC output in the commitment transaction.
|
||||
pub fn witness_script<C: secp256k1::Signing + secp256k1::Verification>(
|
||||
&self, per_commitment_point: &PublicKey, secp: &Secp256k1<C>
|
||||
) -> Script {
|
||||
let channel_params = self.channel_parameters.as_holder_broadcastable();
|
||||
let broadcaster_keys = channel_params.broadcaster_pubkeys();
|
||||
let counterparty_keys = channel_params.countersignatory_pubkeys();
|
||||
let broadcaster_htlc_key = chan_utils::derive_public_key(
|
||||
secp, per_commitment_point, &broadcaster_keys.htlc_basepoint
|
||||
);
|
||||
let counterparty_htlc_key = chan_utils::derive_public_key(
|
||||
secp, per_commitment_point, &counterparty_keys.htlc_basepoint
|
||||
);
|
||||
let counterparty_revocation_key = chan_utils::derive_public_revocation_key(
|
||||
secp, per_commitment_point, &counterparty_keys.revocation_basepoint
|
||||
);
|
||||
chan_utils::get_htlc_redeemscript_with_explicit_keys(
|
||||
&self.htlc, true /* opt_anchors */, &broadcaster_htlc_key, &counterparty_htlc_key,
|
||||
&counterparty_revocation_key,
|
||||
)
|
||||
}
|
||||
|
||||
/// Returns the fully signed witness required to spend the HTLC output in the commitment
|
||||
/// transaction.
|
||||
pub fn tx_input_witness(&self, signature: &Signature, witness_script: &Script) -> Witness {
|
||||
chan_utils::build_htlc_input_witness(
|
||||
signature, &self.counterparty_sig, &self.preimage, witness_script, true /* opt_anchors */
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/// Represents the different types of transactions, originating from LDK, to be bumped.
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
pub enum BumpTransactionEvent {
|
||||
/// Indicates that a channel featuring anchor outputs is to be closed by broadcasting the local
|
||||
/// commitment transaction. Since commitment transactions have a static feerate pre-agreed upon,
|
||||
/// they may need additional fees to be attached through a child transaction using the popular
|
||||
/// [Child-Pays-For-Parent](https://bitcoinops.org/en/topics/cpfp) fee bumping technique. This
|
||||
/// child transaction must include the anchor input described within `anchor_descriptor` along
|
||||
/// with additional inputs to meet the target feerate. Failure to meet the target feerate
|
||||
/// decreases the confirmation odds of the transaction package (which includes the commitment
|
||||
/// and child anchor transactions), possibly resulting in a loss of funds. Once the transaction
|
||||
/// is constructed, it must be fully signed for and broadcast by the consumer of the event
|
||||
/// along with the `commitment_tx` enclosed. Note that the `commitment_tx` must always be
|
||||
/// broadcast first, as the child anchor transaction depends on it.
|
||||
///
|
||||
/// The consumer should be able to sign for any of the additional inputs included within the
|
||||
/// child anchor transaction. To sign its anchor input, an [`InMemorySigner`] should be
|
||||
/// re-derived through [`KeysManager::derive_channel_keys`] with the help of
|
||||
/// [`AnchorDescriptor::channel_keys_id`] and [`AnchorDescriptor::channel_value_satoshis`]. The
|
||||
/// anchor input signature can be computed with [`EcdsaChannelSigner::sign_holder_anchor_input`],
|
||||
/// which can then be provided to [`build_anchor_input_witness`] along with the `funding_pubkey`
|
||||
/// to obtain the full witness required to spend.
|
||||
///
|
||||
/// It is possible to receive more than one instance of this event if a valid child anchor
|
||||
/// transaction is never broadcast or is but not with a sufficient fee to be mined. Care should
|
||||
/// be taken by the consumer of the event to ensure any future iterations of the child anchor
|
||||
/// transaction adhere to the [Replace-By-Fee
|
||||
/// rules](https://github.com/bitcoin/bitcoin/blob/master/doc/policy/mempool-replacements.md)
|
||||
/// for fee bumps to be accepted into the mempool, and eventually the chain. As the frequency of
|
||||
/// these events is not user-controlled, users may ignore/drop the event if they are no longer
|
||||
/// able to commit external confirmed funds to the child anchor transaction.
|
||||
///
|
||||
/// The set of `pending_htlcs` on the commitment transaction to be broadcast can be inspected to
|
||||
/// determine whether a significant portion of the channel's funds are allocated to HTLCs,
|
||||
/// enabling users to make their own decisions regarding the importance of the commitment
|
||||
/// transaction's confirmation. Note that this is not required, but simply exists as an option
|
||||
/// for users to override LDK's behavior. On commitments with no HTLCs (indicated by those with
|
||||
/// an empty `pending_htlcs`), confirmation of the commitment transaction can be considered to
|
||||
/// be not urgent.
|
||||
///
|
||||
/// [`InMemorySigner`]: crate::chain::keysinterface::InMemorySigner
|
||||
/// [`KeysManager::derive_channel_keys`]: crate::chain::keysinterface::KeysManager::derive_channel_keys
|
||||
/// [`EcdsaChannelSigner::sign_holder_anchor_input`]: crate::chain::keysinterface::EcdsaChannelSigner::sign_holder_anchor_input
|
||||
/// [`build_anchor_input_witness`]: crate::ln::chan_utils::build_anchor_input_witness
|
||||
ChannelClose {
|
||||
/// The target feerate that the transaction package, which consists of the commitment
|
||||
/// transaction and the to-be-crafted child anchor transaction, must meet.
|
||||
package_target_feerate_sat_per_1000_weight: u32,
|
||||
/// The channel's commitment transaction to bump the fee of. This transaction should be
|
||||
/// broadcast along with the anchor transaction constructed as a result of consuming this
|
||||
/// event.
|
||||
commitment_tx: Transaction,
|
||||
/// The absolute fee in satoshis of the commitment transaction. This can be used along the
|
||||
/// with weight of the commitment transaction to determine its feerate.
|
||||
commitment_tx_fee_satoshis: u64,
|
||||
/// The descriptor to sign the anchor input of the anchor transaction constructed as a
|
||||
/// result of consuming this event.
|
||||
anchor_descriptor: AnchorDescriptor,
|
||||
/// The set of pending HTLCs on the commitment transaction that need to be resolved once the
|
||||
/// commitment transaction confirms.
|
||||
pending_htlcs: Vec<HTLCOutputInCommitment>,
|
||||
},
|
||||
/// Indicates that a channel featuring anchor outputs has unilaterally closed on-chain by a
|
||||
/// holder commitment transaction and its HTLC(s) need to be resolved on-chain. With the
|
||||
/// zero-HTLC-transaction-fee variant of anchor outputs, the pre-signed HTLC
|
||||
/// transactions have a zero fee, thus requiring additional inputs and/or outputs to be attached
|
||||
/// for a timely confirmation within the chain. These additional inputs and/or outputs must be
|
||||
/// appended to the resulting HTLC transaction to meet the target feerate. Failure to meet the
|
||||
/// target feerate decreases the confirmation odds of the transaction, possibly resulting in a
|
||||
/// loss of funds. Once the transaction meets the target feerate, it must be signed for and
|
||||
/// broadcast by the consumer of the event.
|
||||
///
|
||||
/// The consumer should be able to sign for any of the non-HTLC inputs added to the resulting
|
||||
/// HTLC transaction. To sign HTLC inputs, an [`InMemorySigner`] should be re-derived through
|
||||
/// [`KeysManager::derive_channel_keys`] with the help of `channel_keys_id` and
|
||||
/// `channel_value_satoshis`. Each HTLC input's signature can be computed with
|
||||
/// [`EcdsaChannelSigner::sign_holder_htlc_transaction`], which can then be provided to
|
||||
/// [`HTLCDescriptor::tx_input_witness`] to obtain the fully signed witness required to spend.
|
||||
///
|
||||
/// It is possible to receive more than one instance of this event if a valid HTLC transaction
|
||||
/// is never broadcast or is but not with a sufficient fee to be mined. Care should be taken by
|
||||
/// the consumer of the event to ensure any future iterations of the HTLC transaction adhere to
|
||||
/// the [Replace-By-Fee
|
||||
/// rules](https://github.com/bitcoin/bitcoin/blob/master/doc/policy/mempool-replacements.md)
|
||||
/// for fee bumps to be accepted into the mempool, and eventually the chain. As the frequency of
|
||||
/// these events is not user-controlled, users may ignore/drop the event if either they are no
|
||||
/// longer able to commit external confirmed funds to the HTLC transaction or the fee committed
|
||||
/// to the HTLC transaction is greater in value than the HTLCs being claimed.
|
||||
///
|
||||
/// [`InMemorySigner`]: crate::chain::keysinterface::InMemorySigner
|
||||
/// [`KeysManager::derive_channel_keys`]: crate::chain::keysinterface::KeysManager::derive_channel_keys
|
||||
/// [`EcdsaChannelSigner::sign_holder_htlc_transaction`]: crate::chain::keysinterface::EcdsaChannelSigner::sign_holder_htlc_transaction
|
||||
/// [`HTLCDescriptor::tx_input_witness`]: HTLCDescriptor::tx_input_witness
|
||||
HTLCResolution {
|
||||
/// The target feerate that the resulting HTLC transaction must meet.
|
||||
target_feerate_sat_per_1000_weight: u32,
|
||||
/// The set of pending HTLCs on the confirmed commitment that need to be claimed, preferably
|
||||
/// by the same transaction.
|
||||
htlc_descriptors: Vec<HTLCDescriptor>,
|
||||
},
|
||||
}
|
@ -14,9 +14,13 @@
|
||||
//! future, as well as generate and broadcast funding transactions handle payment preimages and a
|
||||
//! few other things.
|
||||
|
||||
use crate::chain::keysinterface::SpendableOutputDescriptor;
|
||||
#[cfg(anchors)]
|
||||
use crate::ln::chan_utils::{self, ChannelTransactionParameters, HTLCOutputInCommitment};
|
||||
pub mod bump_transaction;
|
||||
|
||||
#[cfg(anchors)]
|
||||
pub use bump_transaction::BumpTransactionEvent;
|
||||
|
||||
use crate::chain::keysinterface::SpendableOutputDescriptor;
|
||||
use crate::ln::channelmanager::{InterceptId, PaymentId};
|
||||
use crate::ln::channel::FUNDING_CONF_DEADLINE_BLOCKS;
|
||||
use crate::ln::features::ChannelTypeFeatures;
|
||||
@ -29,16 +33,10 @@ use crate::util::string::UntrustedString;
|
||||
use crate::routing::router::{RouteHop, RouteParameters};
|
||||
|
||||
use bitcoin::{PackedLockTime, Transaction};
|
||||
#[cfg(anchors)]
|
||||
use bitcoin::{OutPoint, Txid, TxIn, TxOut, Witness};
|
||||
use bitcoin::blockdata::script::Script;
|
||||
use bitcoin::hashes::Hash;
|
||||
use bitcoin::hashes::sha256::Hash as Sha256;
|
||||
use bitcoin::secp256k1::PublicKey;
|
||||
#[cfg(anchors)]
|
||||
use bitcoin::secp256k1::{self, Secp256k1};
|
||||
#[cfg(anchors)]
|
||||
use bitcoin::secp256k1::ecdsa::Signature;
|
||||
use crate::io;
|
||||
use crate::prelude::*;
|
||||
use core::time::Duration;
|
||||
@ -256,222 +254,6 @@ impl_writeable_tlv_based_enum_upgradable!(HTLCDestination,
|
||||
},
|
||||
);
|
||||
|
||||
#[cfg(anchors)]
|
||||
/// A descriptor used to sign for a commitment transaction's anchor output.
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
pub struct AnchorDescriptor {
|
||||
/// A unique identifier used along with `channel_value_satoshis` to re-derive the
|
||||
/// [`InMemorySigner`] required to sign `input`.
|
||||
///
|
||||
/// [`InMemorySigner`]: crate::chain::keysinterface::InMemorySigner
|
||||
pub channel_keys_id: [u8; 32],
|
||||
/// The value in satoshis of the channel we're attempting to spend the anchor output of. This is
|
||||
/// used along with `channel_keys_id` to re-derive the [`InMemorySigner`] required to sign
|
||||
/// `input`.
|
||||
///
|
||||
/// [`InMemorySigner`]: crate::chain::keysinterface::InMemorySigner
|
||||
pub channel_value_satoshis: u64,
|
||||
/// The transaction input's outpoint corresponding to the commitment transaction's anchor
|
||||
/// output.
|
||||
pub outpoint: OutPoint,
|
||||
}
|
||||
|
||||
#[cfg(anchors)]
|
||||
/// A descriptor used to sign for a commitment transaction's HTLC output.
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
pub struct HTLCDescriptor {
|
||||
/// A unique identifier used along with `channel_value_satoshis` to re-derive the
|
||||
/// [`InMemorySigner`] required to sign `input`.
|
||||
///
|
||||
/// [`InMemorySigner`]: crate::chain::keysinterface::InMemorySigner
|
||||
pub channel_keys_id: [u8; 32],
|
||||
/// The value in satoshis of the channel we're attempting to spend the anchor output of. This is
|
||||
/// used along with `channel_keys_id` to re-derive the [`InMemorySigner`] required to sign
|
||||
/// `input`.
|
||||
///
|
||||
/// [`InMemorySigner`]: crate::chain::keysinterface::InMemorySigner
|
||||
pub channel_value_satoshis: u64,
|
||||
/// The necessary channel parameters that need to be provided to the re-derived
|
||||
/// [`InMemorySigner`] through [`ChannelSigner::provide_channel_parameters`].
|
||||
///
|
||||
/// [`InMemorySigner`]: crate::chain::keysinterface::InMemorySigner
|
||||
/// [`ChannelSigner::provide_channel_parameters`]: crate::chain::keysinterface::ChannelSigner::provide_channel_parameters
|
||||
pub channel_parameters: ChannelTransactionParameters,
|
||||
/// The txid of the commitment transaction in which the HTLC output lives.
|
||||
pub commitment_txid: Txid,
|
||||
/// The number of the commitment transaction in which the HTLC output lives.
|
||||
pub per_commitment_number: u64,
|
||||
/// The details of the HTLC as it appears in the commitment transaction.
|
||||
pub htlc: HTLCOutputInCommitment,
|
||||
/// The preimage, if `Some`, to claim the HTLC output with. If `None`, the timeout path must be
|
||||
/// taken.
|
||||
pub preimage: Option<PaymentPreimage>,
|
||||
/// The counterparty's signature required to spend the HTLC output.
|
||||
pub counterparty_sig: Signature
|
||||
}
|
||||
|
||||
#[cfg(anchors)]
|
||||
impl HTLCDescriptor {
|
||||
/// Returns the unsigned transaction input spending the HTLC output in the commitment
|
||||
/// transaction.
|
||||
pub fn unsigned_tx_input(&self) -> TxIn {
|
||||
chan_utils::build_htlc_input(&self.commitment_txid, &self.htlc, true /* opt_anchors */)
|
||||
}
|
||||
|
||||
/// Returns the delayed output created as a result of spending the HTLC output in the commitment
|
||||
/// transaction.
|
||||
pub fn tx_output<C: secp256k1::Signing + secp256k1::Verification>(
|
||||
&self, per_commitment_point: &PublicKey, secp: &Secp256k1<C>
|
||||
) -> TxOut {
|
||||
let channel_params = self.channel_parameters.as_holder_broadcastable();
|
||||
let broadcaster_keys = channel_params.broadcaster_pubkeys();
|
||||
let counterparty_keys = channel_params.countersignatory_pubkeys();
|
||||
let broadcaster_delayed_key = chan_utils::derive_public_key(
|
||||
secp, per_commitment_point, &broadcaster_keys.delayed_payment_basepoint
|
||||
);
|
||||
let counterparty_revocation_key = chan_utils::derive_public_revocation_key(
|
||||
secp, per_commitment_point, &counterparty_keys.revocation_basepoint
|
||||
);
|
||||
chan_utils::build_htlc_output(
|
||||
0 /* feerate_per_kw */, channel_params.contest_delay(), &self.htlc, true /* opt_anchors */,
|
||||
false /* use_non_zero_fee_anchors */, &broadcaster_delayed_key, &counterparty_revocation_key
|
||||
)
|
||||
}
|
||||
|
||||
/// Returns the witness script of the HTLC output in the commitment transaction.
|
||||
pub fn witness_script<C: secp256k1::Signing + secp256k1::Verification>(
|
||||
&self, per_commitment_point: &PublicKey, secp: &Secp256k1<C>
|
||||
) -> Script {
|
||||
let channel_params = self.channel_parameters.as_holder_broadcastable();
|
||||
let broadcaster_keys = channel_params.broadcaster_pubkeys();
|
||||
let counterparty_keys = channel_params.countersignatory_pubkeys();
|
||||
let broadcaster_htlc_key = chan_utils::derive_public_key(
|
||||
secp, per_commitment_point, &broadcaster_keys.htlc_basepoint
|
||||
);
|
||||
let counterparty_htlc_key = chan_utils::derive_public_key(
|
||||
secp, per_commitment_point, &counterparty_keys.htlc_basepoint
|
||||
);
|
||||
let counterparty_revocation_key = chan_utils::derive_public_revocation_key(
|
||||
secp, per_commitment_point, &counterparty_keys.revocation_basepoint
|
||||
);
|
||||
chan_utils::get_htlc_redeemscript_with_explicit_keys(
|
||||
&self.htlc, true /* opt_anchors */, &broadcaster_htlc_key, &counterparty_htlc_key,
|
||||
&counterparty_revocation_key,
|
||||
)
|
||||
}
|
||||
|
||||
/// Returns the fully signed witness required to spend the HTLC output in the commitment
|
||||
/// transaction.
|
||||
pub fn tx_input_witness(&self, signature: &Signature, witness_script: &Script) -> Witness {
|
||||
chan_utils::build_htlc_input_witness(
|
||||
signature, &self.counterparty_sig, &self.preimage, witness_script, true /* opt_anchors */
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(anchors)]
|
||||
/// Represents the different types of transactions, originating from LDK, to be bumped.
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
pub enum BumpTransactionEvent {
|
||||
/// Indicates that a channel featuring anchor outputs is to be closed by broadcasting the local
|
||||
/// commitment transaction. Since commitment transactions have a static feerate pre-agreed upon,
|
||||
/// they may need additional fees to be attached through a child transaction using the popular
|
||||
/// [Child-Pays-For-Parent](https://bitcoinops.org/en/topics/cpfp) fee bumping technique. This
|
||||
/// child transaction must include the anchor input described within `anchor_descriptor` along
|
||||
/// with additional inputs to meet the target feerate. Failure to meet the target feerate
|
||||
/// decreases the confirmation odds of the transaction package (which includes the commitment
|
||||
/// and child anchor transactions), possibly resulting in a loss of funds. Once the transaction
|
||||
/// is constructed, it must be fully signed for and broadcast by the consumer of the event
|
||||
/// along with the `commitment_tx` enclosed. Note that the `commitment_tx` must always be
|
||||
/// broadcast first, as the child anchor transaction depends on it.
|
||||
///
|
||||
/// The consumer should be able to sign for any of the additional inputs included within the
|
||||
/// child anchor transaction. To sign its anchor input, an [`InMemorySigner`] should be
|
||||
/// re-derived through [`KeysManager::derive_channel_keys`] with the help of
|
||||
/// [`AnchorDescriptor::channel_keys_id`] and [`AnchorDescriptor::channel_value_satoshis`]. The
|
||||
/// anchor input signature can be computed with [`EcdsaChannelSigner::sign_holder_anchor_input`],
|
||||
/// which can then be provided to [`build_anchor_input_witness`] along with the `funding_pubkey`
|
||||
/// to obtain the full witness required to spend.
|
||||
///
|
||||
/// It is possible to receive more than one instance of this event if a valid child anchor
|
||||
/// transaction is never broadcast or is but not with a sufficient fee to be mined. Care should
|
||||
/// be taken by the consumer of the event to ensure any future iterations of the child anchor
|
||||
/// transaction adhere to the [Replace-By-Fee
|
||||
/// rules](https://github.com/bitcoin/bitcoin/blob/master/doc/policy/mempool-replacements.md)
|
||||
/// for fee bumps to be accepted into the mempool, and eventually the chain. As the frequency of
|
||||
/// these events is not user-controlled, users may ignore/drop the event if they are no longer
|
||||
/// able to commit external confirmed funds to the child anchor transaction.
|
||||
///
|
||||
/// The set of `pending_htlcs` on the commitment transaction to be broadcast can be inspected to
|
||||
/// determine whether a significant portion of the channel's funds are allocated to HTLCs,
|
||||
/// enabling users to make their own decisions regarding the importance of the commitment
|
||||
/// transaction's confirmation. Note that this is not required, but simply exists as an option
|
||||
/// for users to override LDK's behavior. On commitments with no HTLCs (indicated by those with
|
||||
/// an empty `pending_htlcs`), confirmation of the commitment transaction can be considered to
|
||||
/// be not urgent.
|
||||
///
|
||||
/// [`InMemorySigner`]: crate::chain::keysinterface::InMemorySigner
|
||||
/// [`KeysManager::derive_channel_keys`]: crate::chain::keysinterface::KeysManager::derive_channel_keys
|
||||
/// [`EcdsaChannelSigner::sign_holder_anchor_input`]: crate::chain::keysinterface::EcdsaChannelSigner::sign_holder_anchor_input
|
||||
/// [`build_anchor_input_witness`]: crate::ln::chan_utils::build_anchor_input_witness
|
||||
ChannelClose {
|
||||
/// The target feerate that the transaction package, which consists of the commitment
|
||||
/// transaction and the to-be-crafted child anchor transaction, must meet.
|
||||
package_target_feerate_sat_per_1000_weight: u32,
|
||||
/// The channel's commitment transaction to bump the fee of. This transaction should be
|
||||
/// broadcast along with the anchor transaction constructed as a result of consuming this
|
||||
/// event.
|
||||
commitment_tx: Transaction,
|
||||
/// The absolute fee in satoshis of the commitment transaction. This can be used along the
|
||||
/// with weight of the commitment transaction to determine its feerate.
|
||||
commitment_tx_fee_satoshis: u64,
|
||||
/// The descriptor to sign the anchor input of the anchor transaction constructed as a
|
||||
/// result of consuming this event.
|
||||
anchor_descriptor: AnchorDescriptor,
|
||||
/// The set of pending HTLCs on the commitment transaction that need to be resolved once the
|
||||
/// commitment transaction confirms.
|
||||
pending_htlcs: Vec<HTLCOutputInCommitment>,
|
||||
},
|
||||
/// Indicates that a channel featuring anchor outputs has unilaterally closed on-chain by a
|
||||
/// holder commitment transaction and its HTLC(s) need to be resolved on-chain. With the
|
||||
/// zero-HTLC-transaction-fee variant of anchor outputs, the pre-signed HTLC
|
||||
/// transactions have a zero fee, thus requiring additional inputs and/or outputs to be attached
|
||||
/// for a timely confirmation within the chain. These additional inputs and/or outputs must be
|
||||
/// appended to the resulting HTLC transaction to meet the target feerate. Failure to meet the
|
||||
/// target feerate decreases the confirmation odds of the transaction, possibly resulting in a
|
||||
/// loss of funds. Once the transaction meets the target feerate, it must be signed for and
|
||||
/// broadcast by the consumer of the event.
|
||||
///
|
||||
/// The consumer should be able to sign for any of the non-HTLC inputs added to the resulting
|
||||
/// HTLC transaction. To sign HTLC inputs, an [`InMemorySigner`] should be re-derived through
|
||||
/// [`KeysManager::derive_channel_keys`] with the help of `channel_keys_id` and
|
||||
/// `channel_value_satoshis`. Each HTLC input's signature can be computed with
|
||||
/// [`EcdsaChannelSigner::sign_holder_htlc_transaction`], which can then be provided to
|
||||
/// [`HTLCDescriptor::tx_input_witness`] to obtain the fully signed witness required to spend.
|
||||
///
|
||||
/// It is possible to receive more than one instance of this event if a valid HTLC transaction
|
||||
/// is never broadcast or is but not with a sufficient fee to be mined. Care should be taken by
|
||||
/// the consumer of the event to ensure any future iterations of the HTLC transaction adhere to
|
||||
/// the [Replace-By-Fee
|
||||
/// rules](https://github.com/bitcoin/bitcoin/blob/master/doc/policy/mempool-replacements.md)
|
||||
/// for fee bumps to be accepted into the mempool, and eventually the chain. As the frequency of
|
||||
/// these events is not user-controlled, users may ignore/drop the event if either they are no
|
||||
/// longer able to commit external confirmed funds to the HTLC transaction or the fee committed
|
||||
/// to the HTLC transaction is greater in value than the HTLCs being claimed.
|
||||
///
|
||||
/// [`InMemorySigner`]: crate::chain::keysinterface::InMemorySigner
|
||||
/// [`KeysManager::derive_channel_keys`]: crate::chain::keysinterface::KeysManager::derive_channel_keys
|
||||
/// [`EcdsaChannelSigner::sign_holder_htlc_transaction`]: crate::chain::keysinterface::EcdsaChannelSigner::sign_holder_htlc_transaction
|
||||
/// [`HTLCDescriptor::tx_input_witness`]: HTLCDescriptor::tx_input_witness
|
||||
HTLCResolution {
|
||||
/// The target feerate that the resulting HTLC transaction must meet.
|
||||
target_feerate_sat_per_1000_weight: u32,
|
||||
/// The set of pending HTLCs on the confirmed commitment that need to be claimed, preferably
|
||||
/// by the same transaction.
|
||||
htlc_descriptors: Vec<HTLCDescriptor>,
|
||||
},
|
||||
}
|
||||
|
||||
/// Will be used in [`Event::HTLCIntercepted`] to identify the next hop in the HTLC's path.
|
||||
/// Currently only used in serialization for the sake of maintaining compatibility. More variants
|
||||
/// will be added for general-purpose HTLC forward intercepts as well as trampoline forward
|
@ -81,6 +81,7 @@ pub mod ln;
|
||||
pub mod offers;
|
||||
pub mod routing;
|
||||
pub mod onion_message;
|
||||
pub mod events;
|
||||
|
||||
#[cfg(feature = "std")]
|
||||
/// Re-export of either `core2::io` or `std::io`, depending on the `std` feature flag.
|
||||
|
@ -19,12 +19,12 @@ use bitcoin::network::constants::Network;
|
||||
use crate::chain::channelmonitor::{ANTI_REORG_DELAY, ChannelMonitor};
|
||||
use crate::chain::transaction::OutPoint;
|
||||
use crate::chain::{ChannelMonitorUpdateStatus, Listen, Watch};
|
||||
use crate::events::{Event, MessageSendEvent, MessageSendEventsProvider, PaymentPurpose, ClosureReason, HTLCDestination};
|
||||
use crate::ln::channelmanager::{ChannelManager, RAACommitmentOrder, PaymentSendFailure, PaymentId};
|
||||
use crate::ln::channel::AnnouncementSigsState;
|
||||
use crate::ln::msgs;
|
||||
use crate::ln::msgs::{ChannelMessageHandler, RoutingMessageHandler};
|
||||
use crate::util::enforcing_trait_impls::EnforcingSigner;
|
||||
use crate::util::events::{Event, MessageSendEvent, MessageSendEventsProvider, PaymentPurpose, ClosureReason, HTLCDestination};
|
||||
use crate::util::errors::APIError;
|
||||
use crate::util::ser::{ReadableArgs, Writeable};
|
||||
use crate::util::test_utils::TestBroadcaster;
|
||||
|
@ -36,8 +36,8 @@ use crate::chain::chaininterface::{FeeEstimator, ConfirmationTarget, LowerBounde
|
||||
use crate::chain::channelmonitor::{ChannelMonitor, ChannelMonitorUpdate, ChannelMonitorUpdateStep, LATENCY_GRACE_PERIOD_BLOCKS};
|
||||
use crate::chain::transaction::{OutPoint, TransactionData};
|
||||
use crate::chain::keysinterface::{WriteableEcdsaChannelSigner, EntropySource, ChannelSigner, SignerProvider, NodeSigner, Recipient};
|
||||
use crate::events::ClosureReason;
|
||||
use crate::routing::gossip::NodeId;
|
||||
use crate::util::events::ClosureReason;
|
||||
use crate::util::ser::{Readable, ReadableArgs, Writeable, Writer, VecWriter};
|
||||
use crate::util::logger::Logger;
|
||||
use crate::util::errors::APIError;
|
||||
|
@ -35,6 +35,8 @@ use crate::chain::{Confirm, ChannelMonitorUpdateStatus, Watch, BestBlock};
|
||||
use crate::chain::chaininterface::{BroadcasterInterface, ConfirmationTarget, FeeEstimator, LowerBoundedFeeEstimator};
|
||||
use crate::chain::channelmonitor::{ChannelMonitor, ChannelMonitorUpdate, ChannelMonitorUpdateStep, HTLC_FAIL_BACK_BUFFER, CLTV_CLAIM_BUFFER, LATENCY_GRACE_PERIOD_BLOCKS, ANTI_REORG_DELAY, MonitorEvent, CLOSED_CHANNEL_UPDATE_ID};
|
||||
use crate::chain::transaction::{OutPoint, TransactionData};
|
||||
use crate::events;
|
||||
use crate::events::{Event, EventHandler, EventsProvider, MessageSendEvent, MessageSendEventsProvider, ClosureReason, HTLCDestination};
|
||||
// Since this struct is returned in `list_channels` methods, expose it here in case users want to
|
||||
// construct one themselves.
|
||||
use crate::ln::{inbound_payment, PaymentHash, PaymentPreimage, PaymentSecret};
|
||||
@ -55,8 +57,6 @@ use crate::ln::outbound_payment::{OutboundPayments, PaymentAttempts, PendingOutb
|
||||
use crate::ln::wire::Encode;
|
||||
use crate::chain::keysinterface::{EntropySource, KeysManager, NodeSigner, Recipient, SignerProvider, ChannelSigner, WriteableEcdsaChannelSigner};
|
||||
use crate::util::config::{UserConfig, ChannelConfig};
|
||||
use crate::util::events::{Event, EventHandler, EventsProvider, MessageSendEvent, MessageSendEventsProvider, ClosureReason, HTLCDestination};
|
||||
use crate::util::events;
|
||||
use crate::util::wakers::{Future, Notifier};
|
||||
use crate::util::scid_utils::fake_scid;
|
||||
use crate::util::string::UntrustedString;
|
||||
@ -1949,7 +1949,7 @@ where
|
||||
/// [`ChannelConfig::force_close_avoidance_max_fee_satoshis`]: crate::util::config::ChannelConfig::force_close_avoidance_max_fee_satoshis
|
||||
/// [`Background`]: crate::chain::chaininterface::ConfirmationTarget::Background
|
||||
/// [`Normal`]: crate::chain::chaininterface::ConfirmationTarget::Normal
|
||||
/// [`SendShutdown`]: crate::util::events::MessageSendEvent::SendShutdown
|
||||
/// [`SendShutdown`]: crate::events::MessageSendEvent::SendShutdown
|
||||
pub fn close_channel(&self, channel_id: &[u8; 32], counterparty_node_id: &PublicKey) -> Result<(), APIError> {
|
||||
self.close_channel_internal(channel_id, counterparty_node_id, None)
|
||||
}
|
||||
@ -1973,7 +1973,7 @@ where
|
||||
/// [`ChannelConfig::force_close_avoidance_max_fee_satoshis`]: crate::util::config::ChannelConfig::force_close_avoidance_max_fee_satoshis
|
||||
/// [`Background`]: crate::chain::chaininterface::ConfirmationTarget::Background
|
||||
/// [`Normal`]: crate::chain::chaininterface::ConfirmationTarget::Normal
|
||||
/// [`SendShutdown`]: crate::util::events::MessageSendEvent::SendShutdown
|
||||
/// [`SendShutdown`]: crate::events::MessageSendEvent::SendShutdown
|
||||
pub fn close_channel_with_target_feerate(&self, channel_id: &[u8; 32], counterparty_node_id: &PublicKey, target_feerate_sats_per_1000_weight: u32) -> Result<(), APIError> {
|
||||
self.close_channel_internal(channel_id, counterparty_node_id, Some(target_feerate_sats_per_1000_weight))
|
||||
}
|
||||
@ -2847,8 +2847,8 @@ where
|
||||
/// implemented by Bitcoin Core wallet. See <https://bitcoinops.org/en/topics/fee-sniping/>
|
||||
/// for more details.
|
||||
///
|
||||
/// [`Event::FundingGenerationReady`]: crate::util::events::Event::FundingGenerationReady
|
||||
/// [`Event::ChannelClosed`]: crate::util::events::Event::ChannelClosed
|
||||
/// [`Event::FundingGenerationReady`]: crate::events::Event::FundingGenerationReady
|
||||
/// [`Event::ChannelClosed`]: crate::events::Event::ChannelClosed
|
||||
pub fn funding_transaction_generated(&self, temporary_channel_id: &[u8; 32], counterparty_node_id: &PublicKey, funding_transaction: Transaction) -> Result<(), APIError> {
|
||||
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(&self.total_consistency_lock, &self.persistence_notifier);
|
||||
|
||||
@ -3907,8 +3907,8 @@ where
|
||||
/// event matches your expectation. If you fail to do so and call this method, you may provide
|
||||
/// the sender "proof-of-payment" when they did not fulfill the full expected payment.
|
||||
///
|
||||
/// [`Event::PaymentClaimable`]: crate::util::events::Event::PaymentClaimable
|
||||
/// [`Event::PaymentClaimed`]: crate::util::events::Event::PaymentClaimed
|
||||
/// [`Event::PaymentClaimable`]: crate::events::Event::PaymentClaimable
|
||||
/// [`Event::PaymentClaimed`]: crate::events::Event::PaymentClaimed
|
||||
/// [`process_pending_events`]: EventsProvider::process_pending_events
|
||||
/// [`create_inbound_payment`]: Self::create_inbound_payment
|
||||
/// [`create_inbound_payment_for_hash`]: Self::create_inbound_payment_for_hash
|
||||
@ -7876,6 +7876,7 @@ mod tests {
|
||||
use bitcoin::secp256k1::{PublicKey, Secp256k1, SecretKey};
|
||||
use core::time::Duration;
|
||||
use core::sync::atomic::Ordering;
|
||||
use crate::events::{Event, HTLCDestination, MessageSendEvent, MessageSendEventsProvider, ClosureReason};
|
||||
use crate::ln::{PaymentPreimage, PaymentHash, PaymentSecret};
|
||||
use crate::ln::channelmanager::{inbound_payment, PaymentId, PaymentSendFailure, InterceptId};
|
||||
use crate::ln::functional_test_utils::*;
|
||||
@ -7883,7 +7884,6 @@ mod tests {
|
||||
use crate::ln::msgs::ChannelMessageHandler;
|
||||
use crate::routing::router::{PaymentParameters, RouteParameters, find_route};
|
||||
use crate::util::errors::APIError;
|
||||
use crate::util::events::{Event, HTLCDestination, MessageSendEvent, MessageSendEventsProvider, ClosureReason};
|
||||
use crate::util::test_utils;
|
||||
use crate::util::config::ChannelConfig;
|
||||
use crate::chain::keysinterface::EntropySource;
|
||||
@ -8784,6 +8784,7 @@ pub mod bench {
|
||||
use crate::chain::Listen;
|
||||
use crate::chain::chainmonitor::{ChainMonitor, Persist};
|
||||
use crate::chain::keysinterface::{EntropySource, KeysManager, InMemorySigner};
|
||||
use crate::events::{Event, MessageSendEvent, MessageSendEventsProvider};
|
||||
use crate::ln::channelmanager::{self, BestBlock, ChainParameters, ChannelManager, PaymentHash, PaymentPreimage, PaymentId};
|
||||
use crate::ln::functional_test_utils::*;
|
||||
use crate::ln::msgs::{ChannelMessageHandler, Init};
|
||||
@ -8791,7 +8792,6 @@ pub mod bench {
|
||||
use crate::routing::router::{PaymentParameters, get_route};
|
||||
use crate::util::test_utils;
|
||||
use crate::util::config::UserConfig;
|
||||
use crate::util::events::{Event, MessageSendEvent, MessageSendEventsProvider};
|
||||
|
||||
use bitcoin::hashes::Hash;
|
||||
use bitcoin::hashes::sha256::Hash as Sha256;
|
||||
|
@ -13,6 +13,7 @@
|
||||
use crate::chain::{BestBlock, ChannelMonitorUpdateStatus, Confirm, Listen, Watch, keysinterface::EntropySource};
|
||||
use crate::chain::channelmonitor::ChannelMonitor;
|
||||
use crate::chain::transaction::OutPoint;
|
||||
use crate::events::{ClosureReason, Event, HTLCDestination, MessageSendEvent, MessageSendEventsProvider, PathFailure, PaymentPurpose};
|
||||
use crate::ln::{PaymentPreimage, PaymentHash, PaymentSecret};
|
||||
use crate::ln::channelmanager::{ChainParameters, ChannelManager, ChannelManagerReadArgs, RAACommitmentOrder, PaymentSendFailure, PaymentId, MIN_CLTV_EXPIRY_DELTA};
|
||||
use crate::routing::gossip::{P2PGossipSync, NetworkGraph, NetworkUpdate};
|
||||
@ -20,12 +21,10 @@ use crate::routing::router::{self, PaymentParameters, Route};
|
||||
use crate::ln::features::InitFeatures;
|
||||
use crate::ln::msgs;
|
||||
use crate::ln::msgs::{ChannelMessageHandler,RoutingMessageHandler};
|
||||
use crate::util::events::ClosureReason;
|
||||
use crate::util::enforcing_trait_impls::EnforcingSigner;
|
||||
use crate::util::scid_utils;
|
||||
use crate::util::test_utils;
|
||||
use crate::util::test_utils::{panicking, TestChainMonitor, TestScorer, TestKeysInterface};
|
||||
use crate::util::events::{Event, HTLCDestination, MessageSendEvent, MessageSendEventsProvider, PathFailure, PaymentPurpose};
|
||||
use crate::util::errors::APIError;
|
||||
use crate::util::config::UserConfig;
|
||||
use crate::util::ser::{ReadableArgs, Writeable};
|
||||
@ -1412,8 +1411,8 @@ macro_rules! expect_htlc_handling_failed_destinations {
|
||||
($events: expr, $expected_failures: expr) => {{
|
||||
for event in $events {
|
||||
match event {
|
||||
$crate::util::events::Event::PendingHTLCsForwardable { .. } => { },
|
||||
$crate::util::events::Event::HTLCHandlingFailed { ref failed_next_destination, .. } => {
|
||||
$crate::events::Event::PendingHTLCsForwardable { .. } => { },
|
||||
$crate::events::Event::HTLCHandlingFailed { ref failed_next_destination, .. } => {
|
||||
assert!($expected_failures.contains(&failed_next_destination))
|
||||
},
|
||||
_ => panic!("Unexpected destination"),
|
||||
@ -1579,7 +1578,7 @@ pub fn do_commitment_signed_dance(node_a: &Node<'_, '_, '_>, node_b: &Node<'_, '
|
||||
|
||||
if fail_backwards {
|
||||
expect_pending_htlcs_forwardable_and_htlc_handling_failed!(node_a,
|
||||
vec![crate::util::events::HTLCDestination::NextHopChannel{ node_id: Some(node_b.node.get_our_node_id()), channel_id: commitment_signed.channel_id }]);
|
||||
vec![crate::events::HTLCDestination::NextHopChannel{ node_id: Some(node_b.node.get_our_node_id()), channel_id: commitment_signed.channel_id }]);
|
||||
check_added_monitors!(node_a, 1);
|
||||
|
||||
let node_a_per_peer_state = node_a.node.per_peer_state.read().unwrap();
|
||||
@ -1675,12 +1674,12 @@ macro_rules! expect_payment_claimable {
|
||||
let events = $node.node.get_and_clear_pending_events();
|
||||
assert_eq!(events.len(), 1);
|
||||
match events[0] {
|
||||
$crate::util::events::Event::PaymentClaimable { ref payment_hash, ref purpose, amount_msat, receiver_node_id, via_channel_id: _, via_user_channel_id: _ } => {
|
||||
$crate::events::Event::PaymentClaimable { ref payment_hash, ref purpose, amount_msat, receiver_node_id, via_channel_id: _, via_user_channel_id: _ } => {
|
||||
assert_eq!($expected_payment_hash, *payment_hash);
|
||||
assert_eq!($expected_recv_value, amount_msat);
|
||||
assert_eq!($expected_receiver_node_id, receiver_node_id.unwrap());
|
||||
match purpose {
|
||||
$crate::util::events::PaymentPurpose::InvoicePayment { payment_preimage, payment_secret, .. } => {
|
||||
$crate::events::PaymentPurpose::InvoicePayment { payment_preimage, payment_secret, .. } => {
|
||||
assert_eq!(&$expected_payment_preimage, payment_preimage);
|
||||
assert_eq!($expected_payment_secret, *payment_secret);
|
||||
},
|
||||
@ -1699,7 +1698,7 @@ macro_rules! expect_payment_claimed {
|
||||
let events = $node.node.get_and_clear_pending_events();
|
||||
assert_eq!(events.len(), 1);
|
||||
match events[0] {
|
||||
$crate::util::events::Event::PaymentClaimed { ref payment_hash, amount_msat, .. } => {
|
||||
$crate::events::Event::PaymentClaimed { ref payment_hash, amount_msat, .. } => {
|
||||
assert_eq!($expected_payment_hash, *payment_hash);
|
||||
assert_eq!($expected_recv_value, amount_msat);
|
||||
},
|
||||
@ -1738,7 +1737,7 @@ macro_rules! expect_payment_sent {
|
||||
assert_eq!(events.len(), 1);
|
||||
}
|
||||
let expected_payment_id = match events[0] {
|
||||
$crate::util::events::Event::PaymentSent { ref payment_id, ref payment_preimage, ref payment_hash, ref fee_paid_msat } => {
|
||||
$crate::events::Event::PaymentSent { ref payment_id, ref payment_preimage, ref payment_hash, ref fee_paid_msat } => {
|
||||
assert_eq!($expected_payment_preimage, *payment_preimage);
|
||||
assert_eq!(expected_payment_hash, *payment_hash);
|
||||
assert!(fee_paid_msat.is_some());
|
||||
@ -1752,7 +1751,7 @@ macro_rules! expect_payment_sent {
|
||||
if $expect_paths {
|
||||
for i in 1..events.len() {
|
||||
match events[i] {
|
||||
$crate::util::events::Event::PaymentPathSuccessful { payment_id, payment_hash, .. } => {
|
||||
$crate::events::Event::PaymentPathSuccessful { payment_id, payment_hash, .. } => {
|
||||
assert_eq!(payment_id, expected_payment_id);
|
||||
assert_eq!(payment_hash, Some(expected_payment_hash));
|
||||
},
|
||||
@ -1770,7 +1769,7 @@ macro_rules! expect_payment_path_successful {
|
||||
let events = $node.node.get_and_clear_pending_events();
|
||||
assert_eq!(events.len(), 1);
|
||||
match events[0] {
|
||||
$crate::util::events::Event::PaymentPathSuccessful { .. } => {},
|
||||
$crate::events::Event::PaymentPathSuccessful { .. } => {},
|
||||
_ => panic!("Unexpected event"),
|
||||
}
|
||||
}
|
||||
@ -1804,7 +1803,7 @@ pub fn expect_channel_ready_event<'a, 'b, 'c, 'd>(node: &'a Node<'b, 'c, 'd>, ex
|
||||
let events = node.node.get_and_clear_pending_events();
|
||||
assert_eq!(events.len(), 1);
|
||||
match events[0] {
|
||||
crate::util::events::Event::ChannelReady{ ref counterparty_node_id, .. } => {
|
||||
crate::events::Event::ChannelReady{ ref counterparty_node_id, .. } => {
|
||||
assert_eq!(*expected_counterparty_node_id, *counterparty_node_id);
|
||||
},
|
||||
_ => panic!("Unexpected event"),
|
||||
|
@ -18,6 +18,7 @@ use crate::chain::channelmonitor;
|
||||
use crate::chain::channelmonitor::{CLTV_CLAIM_BUFFER, LATENCY_GRACE_PERIOD_BLOCKS, ANTI_REORG_DELAY};
|
||||
use crate::chain::transaction::OutPoint;
|
||||
use crate::chain::keysinterface::{ChannelSigner, EcdsaChannelSigner, EntropySource};
|
||||
use crate::events::{Event, MessageSendEvent, MessageSendEventsProvider, PathFailure, PaymentPurpose, ClosureReason, HTLCDestination};
|
||||
use crate::ln::{PaymentPreimage, PaymentSecret, PaymentHash};
|
||||
use crate::ln::channel::{commitment_tx_base_weight, COMMITMENT_TX_WEIGHT_PER_HTLC, CONCURRENT_INBOUND_HTLC_FEE_BUFFER, FEE_SPIKE_BUFFER_FEE_INCREASE_MULTIPLE, MIN_AFFORDABLE_HTLC_COUNT};
|
||||
use crate::ln::channelmanager::{self, PaymentId, RAACommitmentOrder, PaymentSendFailure, BREAKDOWN_TIMEOUT, MIN_CLTV_EXPIRY_DELTA};
|
||||
@ -31,7 +32,6 @@ use crate::ln::msgs;
|
||||
use crate::ln::msgs::{ChannelMessageHandler, RoutingMessageHandler, ErrorAction};
|
||||
use crate::util::enforcing_trait_impls::EnforcingSigner;
|
||||
use crate::util::test_utils;
|
||||
use crate::util::events::{Event, MessageSendEvent, MessageSendEventsProvider, PathFailure, PaymentPurpose, ClosureReason, HTLCDestination};
|
||||
use crate::util::errors::APIError;
|
||||
use crate::util::ser::{Writeable, ReadableArgs};
|
||||
use crate::util::string::UntrustedString;
|
||||
|
@ -16,6 +16,9 @@ use crate::chain::channelmonitor::LATENCY_GRACE_PERIOD_BLOCKS;
|
||||
use crate::chain::channelmonitor::{ANTI_REORG_DELAY, Balance};
|
||||
use crate::chain::transaction::OutPoint;
|
||||
use crate::chain::chaininterface::LowerBoundedFeeEstimator;
|
||||
#[cfg(anchors)]
|
||||
use crate::events::bump_transaction::BumpTransactionEvent;
|
||||
use crate::events::{Event, MessageSendEvent, MessageSendEventsProvider, ClosureReason, HTLCDestination};
|
||||
use crate::ln::channel;
|
||||
#[cfg(anchors)]
|
||||
use crate::ln::chan_utils;
|
||||
@ -28,9 +31,6 @@ use crate::util::config::UserConfig;
|
||||
#[cfg(anchors)]
|
||||
use crate::util::crypto::sign;
|
||||
#[cfg(anchors)]
|
||||
use crate::util::events::BumpTransactionEvent;
|
||||
use crate::util::events::{Event, MessageSendEvent, MessageSendEventsProvider, ClosureReason, HTLCDestination};
|
||||
#[cfg(anchors)]
|
||||
use crate::util::ser::Writeable;
|
||||
#[cfg(anchors)]
|
||||
use crate::util::test_utils;
|
||||
|
@ -40,7 +40,7 @@ use core::fmt::Debug;
|
||||
use crate::io::{self, Read};
|
||||
use crate::io_extras::read_to_end;
|
||||
|
||||
use crate::util::events::{MessageSendEventsProvider, OnionMessageProvider};
|
||||
use crate::events::{MessageSendEventsProvider, OnionMessageProvider};
|
||||
use crate::util::logger;
|
||||
use crate::util::ser::{LengthReadable, Readable, ReadableArgs, Writeable, Writer, FixedLengthReader, HighZeroBytesDroppedBigSize, Hostname};
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
|
||||
use crate::chain::channelmonitor::{CLTV_CLAIM_BUFFER, LATENCY_GRACE_PERIOD_BLOCKS};
|
||||
use crate::chain::keysinterface::{EntropySource, NodeSigner, Recipient};
|
||||
use crate::events::{Event, HTLCDestination, MessageSendEvent, MessageSendEventsProvider, PathFailure};
|
||||
use crate::ln::{PaymentHash, PaymentSecret};
|
||||
use crate::ln::channel::EXPIRE_PREV_CONFIG_TICKS;
|
||||
use crate::ln::channelmanager::{HTLCForwardInfo, FailureCode, CLTV_FAR_FAR_AWAY, MIN_CLTV_EXPIRY_DELTA, PendingAddHTLCInfo, PendingHTLCInfo, PendingHTLCRouting, PaymentId};
|
||||
@ -23,7 +24,6 @@ use crate::ln::features::{InitFeatures, InvoiceFeatures};
|
||||
use crate::ln::msgs;
|
||||
use crate::ln::msgs::{ChannelMessageHandler, ChannelUpdate};
|
||||
use crate::ln::wire::Encode;
|
||||
use crate::util::events::{Event, HTLCDestination, MessageSendEvent, MessageSendEventsProvider, PathFailure};
|
||||
use crate::util::ser::{Writeable, Writer};
|
||||
use crate::util::test_utils;
|
||||
use crate::util::config::{UserConfig, ChannelConfig};
|
||||
|
@ -14,12 +14,12 @@ use bitcoin::hashes::sha256::Hash as Sha256;
|
||||
use bitcoin::secp256k1::{self, Secp256k1, SecretKey};
|
||||
|
||||
use crate::chain::keysinterface::{EntropySource, NodeSigner, Recipient};
|
||||
use crate::events;
|
||||
use crate::ln::{PaymentHash, PaymentPreimage, PaymentSecret};
|
||||
use crate::ln::channelmanager::{ChannelDetails, HTLCSource, IDEMPOTENCY_TIMEOUT_TICKS, PaymentId};
|
||||
use crate::ln::onion_utils::HTLCFailReason;
|
||||
use crate::routing::router::{InFlightHtlcs, PaymentParameters, Route, RouteHop, RouteParameters, RoutePath, Router};
|
||||
use crate::util::errors::APIError;
|
||||
use crate::util::events;
|
||||
use crate::util::logger::Logger;
|
||||
use crate::util::time::Time;
|
||||
#[cfg(all(not(feature = "no-std"), test))]
|
||||
@ -314,8 +314,8 @@ impl<T: Time> Display for PaymentAttemptsUsingTime<T> {
|
||||
/// may be surfaced later via [`Event::PaymentPathFailed`] and [`Event::PaymentFailed`].
|
||||
///
|
||||
/// [`ChannelManager::send_payment_with_retry`]: crate::ln::channelmanager::ChannelManager::send_payment_with_retry
|
||||
/// [`Event::PaymentPathFailed`]: crate::util::events::Event::PaymentPathFailed
|
||||
/// [`Event::PaymentFailed`]: crate::util::events::Event::PaymentFailed
|
||||
/// [`Event::PaymentPathFailed`]: crate::events::Event::PaymentPathFailed
|
||||
/// [`Event::PaymentFailed`]: crate::events::Event::PaymentFailed
|
||||
#[derive(Clone, Debug)]
|
||||
pub enum RetryableSendFailure {
|
||||
/// The provided [`PaymentParameters::expiry_time`] indicated that the payment has expired. Note
|
||||
@ -329,8 +329,8 @@ pub enum RetryableSendFailure {
|
||||
/// yet completed (i.e. generated an [`Event::PaymentSent`] or [`Event::PaymentFailed`]).
|
||||
///
|
||||
/// [`PaymentId`]: crate::ln::channelmanager::PaymentId
|
||||
/// [`Event::PaymentSent`]: crate::util::events::Event::PaymentSent
|
||||
/// [`Event::PaymentFailed`]: crate::util::events::Event::PaymentFailed
|
||||
/// [`Event::PaymentSent`]: crate::events::Event::PaymentSent
|
||||
/// [`Event::PaymentFailed`]: crate::events::Event::PaymentFailed
|
||||
DuplicatePayment,
|
||||
}
|
||||
|
||||
@ -349,8 +349,8 @@ pub enum PaymentSendFailure {
|
||||
/// Because the payment failed outright, no payment tracking is done and no
|
||||
/// [`Event::PaymentPathFailed`] or [`Event::PaymentFailed`] events will be generated.
|
||||
///
|
||||
/// [`Event::PaymentPathFailed`]: crate::util::events::Event::PaymentPathFailed
|
||||
/// [`Event::PaymentFailed`]: crate::util::events::Event::PaymentFailed
|
||||
/// [`Event::PaymentPathFailed`]: crate::events::Event::PaymentPathFailed
|
||||
/// [`Event::PaymentFailed`]: crate::events::Event::PaymentFailed
|
||||
ParameterError(APIError),
|
||||
/// A parameter in a single path which was passed to send_payment was invalid, preventing us
|
||||
/// from attempting to send the payment at all.
|
||||
@ -363,8 +363,8 @@ pub enum PaymentSendFailure {
|
||||
/// The results here are ordered the same as the paths in the route object which was passed to
|
||||
/// send_payment.
|
||||
///
|
||||
/// [`Event::PaymentPathFailed`]: crate::util::events::Event::PaymentPathFailed
|
||||
/// [`Event::PaymentFailed`]: crate::util::events::Event::PaymentFailed
|
||||
/// [`Event::PaymentPathFailed`]: crate::events::Event::PaymentPathFailed
|
||||
/// [`Event::PaymentFailed`]: crate::events::Event::PaymentFailed
|
||||
PathParameterError(Vec<Result<(), APIError>>),
|
||||
/// All paths which were attempted failed to send, with no channel state change taking place.
|
||||
/// You can freely resend the payment in full (though you probably want to do so over different
|
||||
@ -373,15 +373,15 @@ pub enum PaymentSendFailure {
|
||||
/// Because the payment failed outright, no payment tracking is done and no
|
||||
/// [`Event::PaymentPathFailed`] or [`Event::PaymentFailed`] events will be generated.
|
||||
///
|
||||
/// [`Event::PaymentPathFailed`]: crate::util::events::Event::PaymentPathFailed
|
||||
/// [`Event::PaymentFailed`]: crate::util::events::Event::PaymentFailed
|
||||
/// [`Event::PaymentPathFailed`]: crate::events::Event::PaymentPathFailed
|
||||
/// [`Event::PaymentFailed`]: crate::events::Event::PaymentFailed
|
||||
AllFailedResendSafe(Vec<APIError>),
|
||||
/// Indicates that a payment for the provided [`PaymentId`] is already in-flight and has not
|
||||
/// yet completed (i.e. generated an [`Event::PaymentSent`] or [`Event::PaymentFailed`]).
|
||||
///
|
||||
/// [`PaymentId`]: crate::ln::channelmanager::PaymentId
|
||||
/// [`Event::PaymentSent`]: crate::util::events::Event::PaymentSent
|
||||
/// [`Event::PaymentFailed`]: crate::util::events::Event::PaymentFailed
|
||||
/// [`Event::PaymentSent`]: crate::events::Event::PaymentSent
|
||||
/// [`Event::PaymentFailed`]: crate::events::Event::PaymentFailed
|
||||
DuplicatePayment,
|
||||
/// Some paths that were attempted failed to send, though some paths may have succeeded. At least
|
||||
/// some paths have irrevocably committed to the HTLC.
|
||||
@ -567,8 +567,8 @@ impl OutboundPayments {
|
||||
/// Errors immediately on [`RetryableSendFailure`] error conditions. Otherwise, further errors may
|
||||
/// be surfaced asynchronously via [`Event::PaymentPathFailed`] and [`Event::PaymentFailed`].
|
||||
///
|
||||
/// [`Event::PaymentPathFailed`]: crate::util::events::Event::PaymentPathFailed
|
||||
/// [`Event::PaymentFailed`]: crate::util::events::Event::PaymentFailed
|
||||
/// [`Event::PaymentPathFailed`]: crate::events::Event::PaymentPathFailed
|
||||
/// [`Event::PaymentFailed`]: crate::events::Event::PaymentFailed
|
||||
fn send_payment_internal<R: Deref, NS: Deref, ES: Deref, IH, SP, L: Deref>(
|
||||
&self, payment_id: PaymentId, payment_hash: PaymentHash, payment_secret: &Option<PaymentSecret>,
|
||||
keysend_preimage: Option<PaymentPreimage>, retry_strategy: Retry, route_params: RouteParameters,
|
||||
@ -1313,6 +1313,7 @@ mod tests {
|
||||
use bitcoin::network::constants::Network;
|
||||
use bitcoin::secp256k1::{PublicKey, Secp256k1, SecretKey};
|
||||
|
||||
use crate::events::{Event, PathFailure};
|
||||
use crate::ln::PaymentHash;
|
||||
use crate::ln::channelmanager::PaymentId;
|
||||
use crate::ln::features::{ChannelFeatures, NodeFeatures};
|
||||
@ -1322,7 +1323,6 @@ mod tests {
|
||||
use crate::routing::router::{InFlightHtlcs, PaymentParameters, Route, RouteHop, RouteParameters};
|
||||
use crate::sync::{Arc, Mutex};
|
||||
use crate::util::errors::APIError;
|
||||
use crate::util::events::{Event, PathFailure};
|
||||
use crate::util::test_utils;
|
||||
|
||||
#[test]
|
||||
|
@ -15,6 +15,7 @@ use crate::chain::{ChannelMonitorUpdateStatus, Confirm, Listen, Watch};
|
||||
use crate::chain::channelmonitor::{ANTI_REORG_DELAY, LATENCY_GRACE_PERIOD_BLOCKS};
|
||||
use crate::chain::keysinterface::EntropySource;
|
||||
use crate::chain::transaction::OutPoint;
|
||||
use crate::events::{ClosureReason, Event, HTLCDestination, MessageSendEvent, MessageSendEventsProvider, PathFailure};
|
||||
use crate::ln::channel::EXPIRE_PREV_CONFIG_TICKS;
|
||||
use crate::ln::channelmanager::{BREAKDOWN_TIMEOUT, ChannelManager, MPP_TIMEOUT_TICKS, MIN_CLTV_EXPIRY_DELTA, PaymentId, PaymentSendFailure, IDEMPOTENCY_TIMEOUT_TICKS, RecentPaymentDetails};
|
||||
use crate::ln::features::InvoiceFeatures;
|
||||
@ -24,7 +25,6 @@ use crate::ln::outbound_payment::Retry;
|
||||
use crate::routing::gossip::{EffectiveCapacity, RoutingFees};
|
||||
use crate::routing::router::{get_route, PaymentParameters, Route, RouteHint, RouteHintHop, RouteHop, RouteParameters};
|
||||
use crate::routing::scoring::ChannelUsage;
|
||||
use crate::util::events::{ClosureReason, Event, HTLCDestination, MessageSendEvent, MessageSendEventsProvider, PathFailure};
|
||||
use crate::util::test_utils;
|
||||
use crate::util::errors::APIError;
|
||||
use crate::util::ser::Writeable;
|
||||
@ -934,7 +934,7 @@ fn successful_probe_yields_event() {
|
||||
let mut events = nodes[0].node.get_and_clear_pending_events();
|
||||
assert_eq!(events.len(), 1);
|
||||
match events.drain(..).next().unwrap() {
|
||||
crate::util::events::Event::ProbeSuccessful { payment_id: ev_pid, payment_hash: ev_ph, .. } => {
|
||||
crate::events::Event::ProbeSuccessful { payment_id: ev_pid, payment_hash: ev_ph, .. } => {
|
||||
assert_eq!(payment_id, ev_pid);
|
||||
assert_eq!(payment_hash, ev_ph);
|
||||
},
|
||||
@ -980,7 +980,7 @@ fn failed_probe_yields_event() {
|
||||
let mut events = nodes[0].node.get_and_clear_pending_events();
|
||||
assert_eq!(events.len(), 1);
|
||||
match events.drain(..).next().unwrap() {
|
||||
crate::util::events::Event::ProbeFailed { payment_id: ev_pid, payment_hash: ev_ph, .. } => {
|
||||
crate::events::Event::ProbeFailed { payment_id: ev_pid, payment_hash: ev_ph, .. } => {
|
||||
assert_eq!(payment_id, ev_pid);
|
||||
assert_eq!(payment_hash, ev_ph);
|
||||
},
|
||||
@ -1414,7 +1414,7 @@ fn do_test_intercepted_payment(test: InterceptTest) {
|
||||
let events = nodes[1].node.get_and_clear_pending_events();
|
||||
assert_eq!(events.len(), 1);
|
||||
let (intercept_id, expected_outbound_amount_msat) = match events[0] {
|
||||
crate::util::events::Event::HTLCIntercepted {
|
||||
crate::events::Event::HTLCIntercepted {
|
||||
intercept_id, expected_outbound_amount_msat, payment_hash: pmt_hash, inbound_amount_msat, requested_next_hop_scid: short_channel_id
|
||||
} => {
|
||||
assert_eq!(pmt_hash, payment_hash);
|
||||
|
@ -18,6 +18,7 @@
|
||||
use bitcoin::secp256k1::{self, Secp256k1, SecretKey, PublicKey};
|
||||
|
||||
use crate::chain::keysinterface::{KeysManager, NodeSigner, Recipient};
|
||||
use crate::events::{MessageSendEvent, MessageSendEventsProvider, OnionMessageProvider};
|
||||
use crate::ln::features::{InitFeatures, NodeFeatures};
|
||||
use crate::ln::msgs;
|
||||
use crate::ln::msgs::{ChannelMessageHandler, LightningError, NetAddress, OnionMessageHandler, RoutingMessageHandler};
|
||||
@ -29,7 +30,6 @@ use crate::ln::wire::Encode;
|
||||
use crate::onion_message::{CustomOnionMessageContents, CustomOnionMessageHandler, SimpleArcOnionMessenger, SimpleRefOnionMessenger};
|
||||
use crate::routing::gossip::{NetworkGraph, P2PGossipSync, NodeId};
|
||||
use crate::util::atomic_counter::AtomicCounter;
|
||||
use crate::util::events::{MessageSendEvent, MessageSendEventsProvider, OnionMessageProvider};
|
||||
use crate::util::logger::Logger;
|
||||
|
||||
use crate::prelude::*;
|
||||
@ -2194,11 +2194,11 @@ fn is_gossip_msg(type_id: u16) -> bool {
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::chain::keysinterface::{NodeSigner, Recipient};
|
||||
use crate::events;
|
||||
use crate::ln::peer_channel_encryptor::PeerChannelEncryptor;
|
||||
use crate::ln::peer_handler::{PeerManager, MessageHandler, SocketDescriptor, IgnoringMessageHandler, filter_addresses};
|
||||
use crate::ln::{msgs, wire};
|
||||
use crate::ln::msgs::NetAddress;
|
||||
use crate::util::events;
|
||||
use crate::util::test_utils;
|
||||
|
||||
use bitcoin::secp256k1::SecretKey;
|
||||
@ -2349,7 +2349,7 @@ mod tests {
|
||||
if peers[0].read_event(&mut fd_a, &b_data).is_err() { break; }
|
||||
|
||||
cfgs[0].chan_handler.pending_events.lock().unwrap()
|
||||
.push(crate::util::events::MessageSendEvent::SendShutdown {
|
||||
.push(crate::events::MessageSendEvent::SendShutdown {
|
||||
node_id: peers[1].node_signer.get_node_id(Recipient::Node).unwrap(),
|
||||
msg: msgs::Shutdown {
|
||||
channel_id: [0; 32],
|
||||
@ -2357,7 +2357,7 @@ mod tests {
|
||||
},
|
||||
});
|
||||
cfgs[1].chan_handler.pending_events.lock().unwrap()
|
||||
.push(crate::util::events::MessageSendEvent::SendShutdown {
|
||||
.push(crate::events::MessageSendEvent::SendShutdown {
|
||||
node_id: peers[0].node_signer.get_node_id(Recipient::Node).unwrap(),
|
||||
msg: msgs::Shutdown {
|
||||
channel_id: [0; 32],
|
||||
|
@ -13,6 +13,7 @@
|
||||
|
||||
use crate::chain::ChannelMonitorUpdateStatus;
|
||||
use crate::chain::keysinterface::NodeSigner;
|
||||
use crate::events::{ClosureReason, Event, HTLCDestination, MessageSendEvent, MessageSendEventsProvider};
|
||||
use crate::ln::channelmanager::{ChannelManager, MIN_CLTV_EXPIRY_DELTA, PaymentId};
|
||||
use crate::routing::gossip::RoutingFees;
|
||||
use crate::routing::router::{PaymentParameters, RouteHint, RouteHintHop};
|
||||
@ -20,7 +21,6 @@ use crate::ln::features::ChannelTypeFeatures;
|
||||
use crate::ln::msgs;
|
||||
use crate::ln::msgs::{ChannelMessageHandler, RoutingMessageHandler, ChannelUpdate, ErrorAction};
|
||||
use crate::ln::wire::Encode;
|
||||
use crate::util::events::{ClosureReason, Event, HTLCDestination, MessageSendEvent, MessageSendEventsProvider};
|
||||
use crate::util::config::UserConfig;
|
||||
use crate::util::ser::Writeable;
|
||||
use crate::util::test_utils;
|
||||
|
@ -14,13 +14,13 @@ use crate::chain::chaininterface::LowerBoundedFeeEstimator;
|
||||
use crate::chain::channelmonitor::ChannelMonitor;
|
||||
use crate::chain::keysinterface::EntropySource;
|
||||
use crate::chain::transaction::OutPoint;
|
||||
use crate::events::{ClosureReason, Event, HTLCDestination, MessageSendEvent, MessageSendEventsProvider};
|
||||
use crate::ln::channelmanager::{ChannelManager, ChannelManagerReadArgs, PaymentId};
|
||||
use crate::ln::msgs;
|
||||
use crate::ln::msgs::{ChannelMessageHandler, RoutingMessageHandler, ErrorAction};
|
||||
use crate::util::enforcing_trait_impls::EnforcingSigner;
|
||||
use crate::util::test_utils;
|
||||
use crate::util::errors::APIError;
|
||||
use crate::util::events::{ClosureReason, Event, HTLCDestination, MessageSendEvent, MessageSendEventsProvider};
|
||||
use crate::util::ser::{Writeable, ReadableArgs};
|
||||
use crate::util::config::UserConfig;
|
||||
use crate::util::string::UntrustedString;
|
||||
|
@ -12,9 +12,9 @@
|
||||
use crate::chain::channelmonitor::ANTI_REORG_DELAY;
|
||||
use crate::chain::transaction::OutPoint;
|
||||
use crate::chain::Confirm;
|
||||
use crate::events::{Event, MessageSendEventsProvider, ClosureReason, HTLCDestination};
|
||||
use crate::ln::channelmanager::ChannelManager;
|
||||
use crate::ln::msgs::{ChannelMessageHandler, Init};
|
||||
use crate::util::events::{Event, MessageSendEventsProvider, ClosureReason, HTLCDestination};
|
||||
use crate::util::test_utils;
|
||||
use crate::util::ser::Writeable;
|
||||
use crate::util::string::UntrustedString;
|
||||
|
@ -11,6 +11,7 @@
|
||||
|
||||
use crate::chain::keysinterface::{EntropySource, SignerProvider};
|
||||
use crate::chain::transaction::OutPoint;
|
||||
use crate::events::{Event, MessageSendEvent, MessageSendEventsProvider, ClosureReason};
|
||||
use crate::ln::channelmanager::{self, PaymentSendFailure, PaymentId};
|
||||
use crate::routing::router::{PaymentParameters, get_route};
|
||||
use crate::ln::msgs;
|
||||
@ -18,7 +19,6 @@ use crate::ln::msgs::{ChannelMessageHandler, ErrorAction};
|
||||
use crate::ln::script::ShutdownScript;
|
||||
use crate::util::test_utils;
|
||||
use crate::util::test_utils::OnGetShutdownScriptpubkey;
|
||||
use crate::util::events::{Event, MessageSendEvent, MessageSendEventsProvider, ClosureReason};
|
||||
use crate::util::errors::APIError;
|
||||
use crate::util::config::UserConfig;
|
||||
use crate::util::string::UntrustedString;
|
||||
|
@ -16,6 +16,7 @@ use bitcoin::hashes::sha256::Hash as Sha256;
|
||||
use bitcoin::secp256k1::{self, PublicKey, Scalar, Secp256k1, SecretKey};
|
||||
|
||||
use crate::chain::keysinterface::{EntropySource, KeysManager, NodeSigner, Recipient};
|
||||
use crate::events::OnionMessageProvider;
|
||||
use crate::ln::features::{InitFeatures, NodeFeatures};
|
||||
use crate::ln::msgs::{self, OnionMessageHandler};
|
||||
use crate::ln::onion_utils;
|
||||
@ -24,7 +25,6 @@ use super::blinded_path::{BlindedPath, ForwardTlvs, ReceiveTlvs};
|
||||
pub use super::packet::{CustomOnionMessageContents, OnionMessageContents};
|
||||
use super::packet::{BIG_PACKET_HOP_DATA_LEN, ForwardControlTlvs, Packet, Payload, ReceiveControlTlvs, SMALL_PACKET_HOP_DATA_LEN};
|
||||
use super::utils;
|
||||
use crate::util::events::OnionMessageProvider;
|
||||
use crate::util::logger::Logger;
|
||||
use crate::util::ser::Writeable;
|
||||
|
||||
|
@ -21,6 +21,7 @@ use bitcoin::hash_types::BlockHash;
|
||||
use bitcoin::network::constants::Network;
|
||||
use bitcoin::blockdata::constants::genesis_block;
|
||||
|
||||
use crate::events::{MessageSendEvent, MessageSendEventsProvider};
|
||||
use crate::ln::features::{ChannelFeatures, NodeFeatures, InitFeatures};
|
||||
use crate::ln::msgs::{DecodeError, ErrorAction, Init, LightningError, RoutingMessageHandler, NetAddress, MAX_VALUE_MSAT};
|
||||
use crate::ln::msgs::{ChannelAnnouncement, ChannelUpdate, NodeAnnouncement, GossipTimestampFilter};
|
||||
@ -29,7 +30,6 @@ use crate::ln::msgs;
|
||||
use crate::routing::utxo::{self, UtxoLookup};
|
||||
use crate::util::ser::{Readable, ReadableArgs, Writeable, Writer, MaybeReadable};
|
||||
use crate::util::logger::{Logger, Level};
|
||||
use crate::util::events::{MessageSendEvent, MessageSendEventsProvider};
|
||||
use crate::util::scid_utils::{block_from_scid, scid_from_parts, MAX_SCID_BLOCK};
|
||||
use crate::util::string::PrintableString;
|
||||
use crate::util::indexed_map::{IndexedMap, Entry as IndexedMapEntry};
|
||||
@ -310,7 +310,7 @@ where U::Target: UtxoLookup, L::Target: Logger
|
||||
impl<L: Deref> NetworkGraph<L> where L::Target: Logger {
|
||||
/// Handles any network updates originating from [`Event`]s.
|
||||
///
|
||||
/// [`Event`]: crate::util::events::Event
|
||||
/// [`Event`]: crate::events::Event
|
||||
pub fn handle_network_update(&self, network_update: &NetworkUpdate) {
|
||||
match *network_update {
|
||||
NetworkUpdate::ChannelUpdateMessage { ref msg } => {
|
||||
@ -1957,6 +1957,7 @@ impl ReadOnlyNetworkGraph<'_> {
|
||||
|
||||
#[cfg(test)]
|
||||
pub(crate) mod tests {
|
||||
use crate::events::{MessageSendEvent, MessageSendEventsProvider};
|
||||
use crate::ln::channelmanager;
|
||||
use crate::ln::chan_utils::make_funding_redeemscript;
|
||||
#[cfg(feature = "std")]
|
||||
@ -1969,7 +1970,6 @@ pub(crate) mod tests {
|
||||
use crate::util::config::UserConfig;
|
||||
use crate::util::test_utils;
|
||||
use crate::util::ser::{ReadableArgs, Readable, Writeable};
|
||||
use crate::util::events::{MessageSendEvent, MessageSendEventsProvider};
|
||||
use crate::util::scid_utils::scid_from_parts;
|
||||
|
||||
use crate::routing::gossip::REMOVED_ENTRIES_TRACKING_AGE_LIMIT_SECS;
|
||||
|
@ -255,7 +255,7 @@ pub struct Route {
|
||||
/// This is used by `ChannelManager` to track information which may be required for retries,
|
||||
/// provided back to you via [`Event::PaymentPathFailed`].
|
||||
///
|
||||
/// [`Event::PaymentPathFailed`]: crate::util::events::Event::PaymentPathFailed
|
||||
/// [`Event::PaymentPathFailed`]: crate::events::Event::PaymentPathFailed
|
||||
pub payment_params: Option<PaymentParameters>,
|
||||
}
|
||||
|
||||
@ -340,7 +340,7 @@ impl Readable for Route {
|
||||
/// Passed to [`find_route`] and [`build_route_from_hops`], but also provided in
|
||||
/// [`Event::PaymentPathFailed`].
|
||||
///
|
||||
/// [`Event::PaymentPathFailed`]: crate::util::events::Event::PaymentPathFailed
|
||||
/// [`Event::PaymentPathFailed`]: crate::events::Event::PaymentPathFailed
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
pub struct RouteParameters {
|
||||
/// The parameters of the failed payment path.
|
||||
@ -983,7 +983,7 @@ fn default_node_features() -> NodeFeatures {
|
||||
/// [`ChannelManager::list_usable_channels`] will never include such channels.
|
||||
///
|
||||
/// [`ChannelManager::list_usable_channels`]: crate::ln::channelmanager::ChannelManager::list_usable_channels
|
||||
/// [`Event::PaymentPathFailed`]: crate::util::events::Event::PaymentPathFailed
|
||||
/// [`Event::PaymentPathFailed`]: crate::events::Event::PaymentPathFailed
|
||||
/// [`NetworkGraph`]: crate::routing::gossip::NetworkGraph
|
||||
pub fn find_route<L: Deref, GL: Deref, S: Score>(
|
||||
our_node_pubkey: &PublicKey, route_params: &RouteParameters,
|
||||
|
@ -16,10 +16,10 @@
|
||||
use bitcoin::{BlockHash, TxOut};
|
||||
use bitcoin::hashes::hex::ToHex;
|
||||
|
||||
use crate::events::MessageSendEvent;
|
||||
use crate::ln::chan_utils::make_funding_redeemscript_from_slices;
|
||||
use crate::ln::msgs::{self, LightningError, ErrorAction};
|
||||
use crate::routing::gossip::{NetworkGraph, NodeId, P2PGossipSync};
|
||||
use crate::util::events::MessageSendEvent;
|
||||
use crate::util::logger::{Level, Logger};
|
||||
use crate::util::ser::Writeable;
|
||||
|
||||
|
@ -523,7 +523,7 @@ pub struct UserConfig {
|
||||
///
|
||||
/// Default value: false.
|
||||
///
|
||||
/// [`Event::OpenChannelRequest`]: crate::util::events::Event::OpenChannelRequest
|
||||
/// [`Event::OpenChannelRequest`]: crate::events::Event::OpenChannelRequest
|
||||
/// [`msgs::OpenChannel`]: crate::ln::msgs::OpenChannel
|
||||
/// [`msgs::AcceptChannel`]: crate::ln::msgs::AcceptChannel
|
||||
pub manually_accept_inbound_channels: bool,
|
||||
@ -536,7 +536,7 @@ pub struct UserConfig {
|
||||
/// Default value: false.
|
||||
///
|
||||
/// [`ChannelManager::get_intercept_scid`]: crate::ln::channelmanager::ChannelManager::get_intercept_scid
|
||||
/// [`Event::HTLCIntercepted`]: crate::util::events::Event::HTLCIntercepted
|
||||
/// [`Event::HTLCIntercepted`]: crate::events::Event::HTLCIntercepted
|
||||
pub accept_intercept_htlcs: bool,
|
||||
}
|
||||
|
||||
|
@ -24,7 +24,7 @@ use bitcoin::secp256k1;
|
||||
use bitcoin::secp256k1::{SecretKey, PublicKey};
|
||||
use bitcoin::secp256k1::{Secp256k1, ecdsa::Signature};
|
||||
#[cfg(anchors)]
|
||||
use crate::util::events::HTLCDescriptor;
|
||||
use crate::events::bump_transaction::HTLCDescriptor;
|
||||
use crate::util::ser::{Writeable, Writer};
|
||||
use crate::io::Error;
|
||||
|
||||
|
@ -15,7 +15,6 @@ pub(crate) mod fuzz_wrappers;
|
||||
#[macro_use]
|
||||
pub mod ser_macros;
|
||||
|
||||
pub mod events;
|
||||
pub mod errors;
|
||||
pub mod ser;
|
||||
pub mod message_signing;
|
||||
|
@ -17,6 +17,7 @@ use crate::chain::channelmonitor;
|
||||
use crate::chain::channelmonitor::MonitorEvent;
|
||||
use crate::chain::transaction::OutPoint;
|
||||
use crate::chain::keysinterface;
|
||||
use crate::events;
|
||||
use crate::ln::channelmanager;
|
||||
use crate::ln::features::{ChannelFeatures, InitFeatures, NodeFeatures};
|
||||
use crate::ln::{msgs, wire};
|
||||
@ -28,7 +29,6 @@ use crate::routing::router::{find_route, InFlightHtlcs, Route, RouteHop, RoutePa
|
||||
use crate::routing::scoring::{ChannelUsage, Score};
|
||||
use crate::util::config::UserConfig;
|
||||
use crate::util::enforcing_trait_impls::{EnforcingSigner, EnforcementState};
|
||||
use crate::util::events;
|
||||
use crate::util::logger::{Logger, Level, Record};
|
||||
use crate::util::ser::{Readable, ReadableArgs, Writer, Writeable};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user