X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Fevents%2Fmod.rs;h=f8d251c91c7f43616ddcf10d3d5e1653b8b0848a;hb=dec3fb316a7905284d64bb5bad88a898d04744d1;hp=a6601e4d99c21653ee991614d6662fefba92176b;hpb=63c77a960b3e35a3c28a874b8d321e38831543a0;p=rust-lightning diff --git a/lightning/src/events/mod.rs b/lightning/src/events/mod.rs index a6601e4d..f8d251c9 100644 --- a/lightning/src/events/mod.rs +++ b/lightning/src/events/mod.rs @@ -113,7 +113,7 @@ impl_writeable_tlv_based_enum_upgradable!(PathFailure, ); #[derive(Clone, Debug, PartialEq, Eq)] -/// The reason the channel was closed. See individual variants more details. +/// The reason the channel was closed. See individual variants for more details. pub enum ClosureReason { /// Closure generated from receiving a peer error message. /// @@ -164,7 +164,10 @@ pub enum ClosureReason { /// /// [`ChannelMonitor`]: crate::chain::channelmonitor::ChannelMonitor /// [`ChannelManager`]: crate::ln::channelmanager::ChannelManager - OutdatedChannelManager + OutdatedChannelManager, + /// The counterparty requested a cooperative close of a channel that had not been funded yet. + /// The channel has been immediately closed. + CounterpartyCoopClosedUnfundedChannel, } impl core::fmt::Display for ClosureReason { @@ -184,6 +187,7 @@ impl core::fmt::Display for ClosureReason { }, ClosureReason::DisconnectedPeer => f.write_str("the peer disconnected prior to the channel being funded"), ClosureReason::OutdatedChannelManager => f.write_str("the ChannelManager read from disk was stale compared to ChannelMonitor(s)"), + ClosureReason::CounterpartyCoopClosedUnfundedChannel => f.write_str("the peer requested the unfunded channel be closed"), } } } @@ -197,6 +201,7 @@ impl_writeable_tlv_based_enum_upgradable!(ClosureReason, (8, ProcessingError) => { (1, err, required) }, (10, DisconnectedPeer) => {}, (12, OutdatedChannelManager) => {}, + (13, CounterpartyCoopClosedUnfundedChannel) => {}, ); /// Intended destination of a failed HTLC as indicated in [`Event::HTLCHandlingFailed`]. @@ -351,9 +356,19 @@ pub enum Event { /// Note that if the preimage is not known, you should call /// [`ChannelManager::fail_htlc_backwards`] or [`ChannelManager::fail_htlc_backwards_with_reason`] /// to free up resources for this HTLC and avoid network congestion. - /// If you fail to call either [`ChannelManager::claim_funds`], [`ChannelManager::fail_htlc_backwards`], - /// or [`ChannelManager::fail_htlc_backwards_with_reason`] within the HTLC's timeout, the HTLC will be - /// automatically failed. + /// + /// If [`Event::PaymentClaimable::onion_fields`] is `Some`, and includes custom TLVs with even type + /// numbers, you should use [`ChannelManager::fail_htlc_backwards_with_reason`] with + /// [`FailureCode::InvalidOnionPayload`] if you fail to understand and handle the contents, or + /// [`ChannelManager::claim_funds_with_known_custom_tlvs`] upon successful handling. + /// If you don't intend to check for custom TLVs, you can simply use + /// [`ChannelManager::claim_funds`], which will automatically fail back even custom TLVs. + /// + /// If you fail to call [`ChannelManager::claim_funds`], + /// [`ChannelManager::claim_funds_with_known_custom_tlvs`], + /// [`ChannelManager::fail_htlc_backwards`], or + /// [`ChannelManager::fail_htlc_backwards_with_reason`] within the HTLC's timeout, the HTLC will + /// be automatically failed. /// /// # Note /// LDK will not stop an inbound payment from being paid multiple times, so multiple @@ -365,6 +380,8 @@ pub enum Event { /// This event used to be called `PaymentReceived` in LDK versions 0.0.112 and earlier. /// /// [`ChannelManager::claim_funds`]: crate::ln::channelmanager::ChannelManager::claim_funds + /// [`ChannelManager::claim_funds_with_known_custom_tlvs`]: crate::ln::channelmanager::ChannelManager::claim_funds_with_known_custom_tlvs + /// [`FailureCode::InvalidOnionPayload`]: crate::ln::channelmanager::FailureCode::InvalidOnionPayload /// [`ChannelManager::fail_htlc_backwards`]: crate::ln::channelmanager::ChannelManager::fail_htlc_backwards /// [`ChannelManager::fail_htlc_backwards_with_reason`]: crate::ln::channelmanager::ChannelManager::fail_htlc_backwards_with_reason PaymentClaimable { @@ -909,7 +926,7 @@ impl Writeable for Event { (2, payment_failed_permanently, required), (3, false, required), // all_paths_failed in LDK versions prior to 0.0.114 (4, path.blinded_tail, option), - (5, path.hops, vec_type), + (5, path.hops, required_vec), (7, short_channel_id, option), (9, None::, option), // retry in LDK versions prior to 0.0.115 (11, payment_id, option), @@ -977,7 +994,7 @@ impl Writeable for Event { write_tlv_fields!(writer, { (0, payment_id, required), (2, payment_hash, option), - (4, path.hops, vec_type), + (4, path.hops, required_vec), (6, path.blinded_tail, option), }) }, @@ -1008,7 +1025,7 @@ impl Writeable for Event { write_tlv_fields!(writer, { (0, payment_id, required), (2, payment_hash, required), - (4, path.hops, vec_type), + (4, path.hops, required_vec), (6, path.blinded_tail, option), }) }, @@ -1017,7 +1034,7 @@ impl Writeable for Event { write_tlv_fields!(writer, { (0, payment_id, required), (2, payment_hash, required), - (4, path.hops, vec_type), + (4, path.hops, required_vec), (6, short_channel_id, option), (8, path.blinded_tail, option), }) @@ -1162,7 +1179,9 @@ impl MaybeReadable for Event { (1, network_update, upgradable_option), (2, payment_failed_permanently, required), (4, blinded_tail, option), - (5, path, vec_type), + // Added as a part of LDK 0.0.101 and always filled in since. + // Defaults to an empty Vec, though likely should have been `Option`al. + (5, path, optional_vec), (7, short_channel_id, option), (11, payment_id, option), (13, failure_opt, upgradable_option), @@ -1279,13 +1298,13 @@ impl MaybeReadable for Event { _init_and_read_tlv_fields!(reader, { (0, payment_id, required), (2, payment_hash, option), - (4, path, vec_type), + (4, path, required_vec), (6, blinded_tail, option), }); Ok(Some(Event::PaymentPathSuccessful { payment_id: payment_id.0.unwrap(), payment_hash, - path: Path { hops: path.unwrap(), blinded_tail }, + path: Path { hops: path, blinded_tail }, })) }; f() @@ -1338,13 +1357,13 @@ impl MaybeReadable for Event { _init_and_read_tlv_fields!(reader, { (0, payment_id, required), (2, payment_hash, required), - (4, path, vec_type), + (4, path, required_vec), (6, blinded_tail, option), }); Ok(Some(Event::ProbeSuccessful { payment_id: payment_id.0.unwrap(), payment_hash: payment_hash.0.unwrap(), - path: Path { hops: path.unwrap(), blinded_tail }, + path: Path { hops: path, blinded_tail }, })) }; f() @@ -1354,14 +1373,14 @@ impl MaybeReadable for Event { _init_and_read_tlv_fields!(reader, { (0, payment_id, required), (2, payment_hash, required), - (4, path, vec_type), + (4, path, required_vec), (6, short_channel_id, option), (8, blinded_tail, option), }); Ok(Some(Event::ProbeFailed { payment_id: payment_id.0.unwrap(), payment_hash: payment_hash.0.unwrap(), - path: Path { hops: path.unwrap(), blinded_tail }, + path: Path { hops: path, blinded_tail }, short_channel_id, })) };