use util::ser::{Writeable, Writer, MaybeReadable, Readable, VecReadWrapper, VecWriteWrapper};
use bitcoin::blockdata::script::Script;
use util::ser::{Writeable, Writer, MaybeReadable, Readable, VecReadWrapper, VecWriteWrapper};
use bitcoin::blockdata::script::Script;
PaymentSent {
/// The preimage to the hash given to ChannelManager::send_payment.
/// Note that this serves as a payment receipt, if you wish to have such a thing, you must
/// store it somehow!
payment_preimage: PaymentPreimage,
PaymentSent {
/// The preimage to the hash given to ChannelManager::send_payment.
/// Note that this serves as a payment receipt, if you wish to have such a thing, you must
/// store it somehow!
payment_preimage: PaymentPreimage,
},
/// Indicates an outbound payment we made failed. Probably some intermediary node dropped
/// something. You may wish to retry with a different route.
},
/// Indicates an outbound payment we made failed. Probably some intermediary node dropped
/// something. You may wish to retry with a different route.
/// retry the payment via a different route.
rejected_by_dest: bool,
/// Any failure information conveyed via the Onion return packet by a node along the failed
/// retry the payment via a different route.
rejected_by_dest: bool,
/// Any failure information conveyed via the Onion return packet by a node along the failed
- /// payment route. Should be applied to the [`NetworkGraph`] so that routing decisions can
- /// take into account the update.
+ /// payment route.
+ ///
+ /// Should be applied to the [`NetworkGraph`] so that routing decisions can take into
+ /// account the update. [`NetGraphMsgHandler`] is capable of doing this.
+ /// For both single-path and multi-path payments, this is set if all paths of the payment have
+ /// failed. This will be set to false if (1) this is an MPP payment and (2) other parts of the
+ /// larger MPP payment were still in flight when this event was generated.
+ all_paths_failed: bool,
(8, payment_preimage, option),
});
},
(8, payment_preimage, option),
});
},
2u8.write(writer)?;
write_tlv_fields!(writer, {
(0, payment_preimage, required),
2u8.write(writer)?;
write_tlv_fields!(writer, {
(0, payment_preimage, required),
- &Event::PaymentFailed { ref payment_hash, ref rejected_by_dest, ref network_update,
+ &Event::PaymentFailed { ref payment_hash, ref rejected_by_dest, ref network_update, ref all_paths_failed,
(0, payment_hash, required),
(1, network_update, option),
(2, rejected_by_dest, required),
(0, payment_hash, required),
(1, network_update, option),
(2, rejected_by_dest, required),
read_tlv_fields!(reader, {
(0, payment_preimage, required),
read_tlv_fields!(reader, {
(0, payment_preimage, required),
let mut payment_hash = PaymentHash([0; 32]);
let mut rejected_by_dest = false;
let mut network_update = None;
let mut payment_hash = PaymentHash([0; 32]);
let mut rejected_by_dest = false;
let mut network_update = None;
read_tlv_fields!(reader, {
(0, payment_hash, required),
(1, network_update, ignorable),
(2, rejected_by_dest, required),
read_tlv_fields!(reader, {
(0, payment_hash, required),
(1, network_update, ignorable),
(2, rejected_by_dest, required),