mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-02-24 23:08:36 +01:00
Add payment_hash to PaymentSent #999
This commit is contained in:
parent
801d6e5256
commit
204bfd260c
7 changed files with 66 additions and 30 deletions
|
@ -308,7 +308,7 @@ fn do_test_monitor_temporary_update_fail(disconnect_count: usize) {
|
|||
let channel_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()).2;
|
||||
let logger = test_utils::TestLogger::new();
|
||||
|
||||
let (payment_preimage_1, _, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
|
||||
let (payment_preimage_1, payment_hash_1, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
|
||||
|
||||
// Now try to send a second payment which will fail to send
|
||||
let (payment_preimage_2, payment_hash_2, payment_secret_2) = get_payment_preimage_hash!(nodes[1]);
|
||||
|
@ -344,8 +344,9 @@ fn do_test_monitor_temporary_update_fail(disconnect_count: usize) {
|
|||
let events_3 = nodes[0].node.get_and_clear_pending_events();
|
||||
assert_eq!(events_3.len(), 1);
|
||||
match events_3[0] {
|
||||
Event::PaymentSent { ref payment_preimage } => {
|
||||
Event::PaymentSent { ref payment_preimage, ref payment_hash } => {
|
||||
assert_eq!(*payment_preimage, payment_preimage_1);
|
||||
assert_eq!(*payment_hash, payment_hash_1);
|
||||
},
|
||||
_ => panic!("Unexpected event"),
|
||||
}
|
||||
|
@ -436,8 +437,9 @@ fn do_test_monitor_temporary_update_fail(disconnect_count: usize) {
|
|||
let events_3 = nodes[0].node.get_and_clear_pending_events();
|
||||
assert_eq!(events_3.len(), 1);
|
||||
match events_3[0] {
|
||||
Event::PaymentSent { ref payment_preimage } => {
|
||||
Event::PaymentSent { ref payment_preimage, ref payment_hash } => {
|
||||
assert_eq!(*payment_preimage, payment_preimage_1);
|
||||
assert_eq!(*payment_hash, payment_hash_1);
|
||||
},
|
||||
_ => panic!("Unexpected event"),
|
||||
}
|
||||
|
@ -1362,7 +1364,7 @@ fn claim_while_disconnected_monitor_update_fail() {
|
|||
let logger = test_utils::TestLogger::new();
|
||||
|
||||
// Forward a payment for B to claim
|
||||
let (payment_preimage_1, _, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
|
||||
let (payment_preimage_1, payment_hash_1, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
|
||||
|
||||
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
|
||||
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
|
||||
|
@ -1463,8 +1465,9 @@ fn claim_while_disconnected_monitor_update_fail() {
|
|||
let events = nodes[0].node.get_and_clear_pending_events();
|
||||
assert_eq!(events.len(), 1);
|
||||
match events[0] {
|
||||
Event::PaymentSent { ref payment_preimage } => {
|
||||
Event::PaymentSent { ref payment_preimage, ref payment_hash } => {
|
||||
assert_eq!(*payment_preimage, payment_preimage_1);
|
||||
assert_eq!(*payment_hash, payment_hash_1);
|
||||
},
|
||||
_ => panic!("Unexpected event"),
|
||||
}
|
||||
|
@ -1845,7 +1848,7 @@ fn monitor_update_claim_fail_no_response() {
|
|||
let logger = test_utils::TestLogger::new();
|
||||
|
||||
// Forward a payment for B to claim
|
||||
let (payment_preimage_1, _, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
|
||||
let (payment_preimage_1, payment_hash_1, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
|
||||
|
||||
// Now start forwarding a second payment, skipping the last RAA so B is in AwaitingRAA
|
||||
let (payment_preimage_2, payment_hash_2, payment_secret_2) = get_payment_preimage_hash!(nodes[1]);
|
||||
|
@ -1887,8 +1890,9 @@ fn monitor_update_claim_fail_no_response() {
|
|||
let events = nodes[0].node.get_and_clear_pending_events();
|
||||
assert_eq!(events.len(), 1);
|
||||
match events[0] {
|
||||
Event::PaymentSent { ref payment_preimage } => {
|
||||
Event::PaymentSent { ref payment_preimage, ref payment_hash } => {
|
||||
assert_eq!(*payment_preimage, payment_preimage_1);
|
||||
assert_eq!(*payment_hash, payment_hash_1);
|
||||
},
|
||||
_ => panic!("Unexpected event"),
|
||||
}
|
||||
|
|
|
@ -3161,8 +3161,12 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelMana
|
|||
sessions.remove(&session_priv_bytes)
|
||||
} else { false };
|
||||
if found_payment {
|
||||
let payment_hash = PaymentHash(Sha256::hash(&payment_preimage.0).into_inner());
|
||||
self.pending_events.lock().unwrap().push(
|
||||
events::Event::PaymentSent { payment_preimage }
|
||||
events::Event::PaymentSent {
|
||||
payment_preimage,
|
||||
payment_hash: payment_hash
|
||||
}
|
||||
);
|
||||
} else {
|
||||
log_trace!(self.logger, "Received duplicative fulfill for HTLC with payment_preimage {}", log_bytes!(payment_preimage.0));
|
||||
|
@ -5772,8 +5776,9 @@ mod tests {
|
|||
// further events will be generated for subsequence path successes.
|
||||
let events = nodes[0].node.get_and_clear_pending_events();
|
||||
match events[0] {
|
||||
Event::PaymentSent { payment_preimage: ref preimage } => {
|
||||
Event::PaymentSent { payment_preimage: ref preimage, payment_hash: ref hash } => {
|
||||
assert_eq!(payment_preimage, *preimage);
|
||||
assert_eq!(our_payment_hash, *hash);
|
||||
},
|
||||
_ => panic!("Unexpected event"),
|
||||
}
|
||||
|
|
|
@ -1011,10 +1011,12 @@ macro_rules! expect_payment_received {
|
|||
macro_rules! expect_payment_sent {
|
||||
($node: expr, $expected_payment_preimage: expr) => {
|
||||
let events = $node.node.get_and_clear_pending_events();
|
||||
let expected_payment_hash = PaymentHash(Sha256::hash(&$expected_payment_preimage.0).into_inner());
|
||||
assert_eq!(events.len(), 1);
|
||||
match events[0] {
|
||||
Event::PaymentSent { ref payment_preimage } => {
|
||||
Event::PaymentSent { ref payment_preimage, ref payment_hash } => {
|
||||
assert_eq!($expected_payment_preimage, *payment_preimage);
|
||||
assert_eq!(expected_payment_hash, *payment_hash);
|
||||
},
|
||||
_ => panic!("Unexpected event"),
|
||||
}
|
||||
|
|
|
@ -2481,8 +2481,8 @@ fn test_htlc_on_chain_success() {
|
|||
send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 8000000);
|
||||
send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 8000000);
|
||||
|
||||
let (our_payment_preimage, _payment_hash, _payment_secret) = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2]), 3000000);
|
||||
let (our_payment_preimage_2, _payment_hash_2, _payment_secret_2) = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2]), 3000000);
|
||||
let (our_payment_preimage, payment_hash_1, _payment_secret) = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2]), 3000000);
|
||||
let (our_payment_preimage_2, payment_hash_2, _payment_secret_2) = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2]), 3000000);
|
||||
|
||||
// Broadcast legit commitment tx from C on B's chain
|
||||
// Broadcast HTLC Success transaction by C on received output from C's commitment tx on B's chain
|
||||
|
@ -2636,12 +2636,13 @@ fn test_htlc_on_chain_success() {
|
|||
let mut first_claimed = false;
|
||||
for event in events {
|
||||
match event {
|
||||
Event::PaymentSent { payment_preimage } => {
|
||||
if payment_preimage == our_payment_preimage {
|
||||
Event::PaymentSent { payment_preimage, payment_hash } => {
|
||||
if payment_preimage == our_payment_preimage && payment_hash == payment_hash_1 {
|
||||
assert!(!first_claimed);
|
||||
first_claimed = true;
|
||||
} else {
|
||||
assert_eq!(payment_preimage, our_payment_preimage_2);
|
||||
assert_eq!(payment_hash, payment_hash_2);
|
||||
}
|
||||
},
|
||||
_ => panic!("Unexpected event"),
|
||||
|
@ -3299,7 +3300,7 @@ fn test_simple_peer_disconnect() {
|
|||
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
|
||||
reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
|
||||
|
||||
let payment_preimage_3 = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 1000000).0;
|
||||
let (payment_preimage_3, payment_hash_3, _) = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 1000000);
|
||||
let payment_preimage_4 = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 1000000).0;
|
||||
let payment_hash_5 = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 1000000).1;
|
||||
let payment_hash_6 = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 1000000).1;
|
||||
|
@ -3315,8 +3316,9 @@ fn test_simple_peer_disconnect() {
|
|||
let events = nodes[0].node.get_and_clear_pending_events();
|
||||
assert_eq!(events.len(), 2);
|
||||
match events[0] {
|
||||
Event::PaymentSent { payment_preimage } => {
|
||||
Event::PaymentSent { payment_preimage, payment_hash } => {
|
||||
assert_eq!(payment_preimage, payment_preimage_3);
|
||||
assert_eq!(payment_hash, payment_hash_3);
|
||||
},
|
||||
_ => panic!("Unexpected event"),
|
||||
}
|
||||
|
@ -3483,8 +3485,9 @@ fn do_test_drop_messages_peer_disconnect(messages_delivered: u8, simulate_broken
|
|||
let events_4 = nodes[0].node.get_and_clear_pending_events();
|
||||
assert_eq!(events_4.len(), 1);
|
||||
match events_4[0] {
|
||||
Event::PaymentSent { ref payment_preimage } => {
|
||||
Event::PaymentSent { ref payment_preimage, ref payment_hash } => {
|
||||
assert_eq!(payment_preimage_1, *payment_preimage);
|
||||
assert_eq!(payment_hash_1, *payment_hash);
|
||||
},
|
||||
_ => panic!("Unexpected event"),
|
||||
}
|
||||
|
@ -3523,8 +3526,9 @@ fn do_test_drop_messages_peer_disconnect(messages_delivered: u8, simulate_broken
|
|||
let events_4 = nodes[0].node.get_and_clear_pending_events();
|
||||
assert_eq!(events_4.len(), 1);
|
||||
match events_4[0] {
|
||||
Event::PaymentSent { ref payment_preimage } => {
|
||||
Event::PaymentSent { ref payment_preimage, ref payment_hash } => {
|
||||
assert_eq!(payment_preimage_1, *payment_preimage);
|
||||
assert_eq!(payment_hash_1, *payment_hash);
|
||||
},
|
||||
_ => panic!("Unexpected event"),
|
||||
}
|
||||
|
@ -3729,7 +3733,7 @@ fn test_drop_messages_peer_disconnect_dual_htlc() {
|
|||
create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
|
||||
let logger = test_utils::TestLogger::new();
|
||||
|
||||
let (payment_preimage_1, _, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
|
||||
let (payment_preimage_1, payment_hash_1, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
|
||||
|
||||
// Now try to send a second payment which will fail to send
|
||||
let (payment_preimage_2, payment_hash_2, payment_secret_2) = get_payment_preimage_hash!(nodes[1]);
|
||||
|
@ -3763,8 +3767,9 @@ fn test_drop_messages_peer_disconnect_dual_htlc() {
|
|||
let events_3 = nodes[0].node.get_and_clear_pending_events();
|
||||
assert_eq!(events_3.len(), 1);
|
||||
match events_3[0] {
|
||||
Event::PaymentSent { ref payment_preimage } => {
|
||||
Event::PaymentSent { ref payment_preimage, ref payment_hash } => {
|
||||
assert_eq!(*payment_preimage, payment_preimage_1);
|
||||
assert_eq!(*payment_hash, payment_hash_1);
|
||||
},
|
||||
_ => panic!("Unexpected event"),
|
||||
}
|
||||
|
@ -5150,8 +5155,9 @@ fn test_duplicate_payment_hash_one_failure_one_success() {
|
|||
|
||||
let events = nodes[0].node.get_and_clear_pending_events();
|
||||
match events[0] {
|
||||
Event::PaymentSent { ref payment_preimage } => {
|
||||
Event::PaymentSent { ref payment_preimage, ref payment_hash } => {
|
||||
assert_eq!(*payment_preimage, our_payment_preimage);
|
||||
assert_eq!(*payment_hash, duplicate_payment_hash);
|
||||
}
|
||||
_ => panic!("Unexpected event"),
|
||||
}
|
||||
|
@ -5631,7 +5637,7 @@ fn do_htlc_claim_local_commitment_only(use_dust: bool) {
|
|||
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
|
||||
let chan = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
|
||||
|
||||
let (our_payment_preimage, _, _) = route_payment(&nodes[0], &[&nodes[1]], if use_dust { 50000 } else { 3000000 });
|
||||
let (our_payment_preimage, our_payment_hash, _) = route_payment(&nodes[0], &[&nodes[1]], if use_dust { 50000 } else { 3000000 });
|
||||
|
||||
// Claim the payment, but don't deliver A's commitment_signed, resulting in the HTLC only being
|
||||
// present in B's local commitment transaction, but none of A's commitment transactions.
|
||||
|
@ -5643,8 +5649,9 @@ fn do_htlc_claim_local_commitment_only(use_dust: bool) {
|
|||
let events = nodes[0].node.get_and_clear_pending_events();
|
||||
assert_eq!(events.len(), 1);
|
||||
match events[0] {
|
||||
Event::PaymentSent { payment_preimage } => {
|
||||
Event::PaymentSent { payment_preimage, payment_hash } => {
|
||||
assert_eq!(payment_preimage, our_payment_preimage);
|
||||
assert_eq!(payment_hash, our_payment_hash);
|
||||
},
|
||||
_ => panic!("Unexpected event"),
|
||||
}
|
||||
|
@ -6075,8 +6082,9 @@ fn test_free_and_fail_holding_cell_htlcs() {
|
|||
let events = nodes[0].node.get_and_clear_pending_events();
|
||||
assert_eq!(events.len(), 1);
|
||||
match events[0] {
|
||||
Event::PaymentSent { ref payment_preimage } => {
|
||||
Event::PaymentSent { ref payment_preimage, ref payment_hash } => {
|
||||
assert_eq!(*payment_preimage, payment_preimage_1);
|
||||
assert_eq!(*payment_hash, payment_hash_1);
|
||||
}
|
||||
_ => panic!("Unexpected event"),
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
use chain::channelmonitor::{ANTI_REORG_DELAY, ChannelMonitor};
|
||||
use chain::transaction::OutPoint;
|
||||
use chain::{Confirm, Watch};
|
||||
use ln::PaymentHash;
|
||||
use ln::channelmanager::{ChannelManager, ChannelManagerReadArgs};
|
||||
use ln::features::InitFeatures;
|
||||
use ln::msgs::{ChannelMessageHandler, ErrorAction};
|
||||
|
@ -24,6 +25,8 @@ use util::ser::{ReadableArgs, Writeable};
|
|||
use bitcoin::blockdata::block::{Block, BlockHeader};
|
||||
use bitcoin::blockdata::script::Builder;
|
||||
use bitcoin::blockdata::opcodes;
|
||||
use bitcoin::hashes::sha256::Hash as Sha256;
|
||||
use bitcoin::hashes::Hash;
|
||||
use bitcoin::hash_types::BlockHash;
|
||||
use bitcoin::secp256k1::Secp256k1;
|
||||
|
||||
|
|
|
@ -80,7 +80,7 @@ fn updates_shutdown_wait() {
|
|||
let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::known(), InitFeatures::known());
|
||||
let logger = test_utils::TestLogger::new();
|
||||
|
||||
let (our_payment_preimage, _, _) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 100000);
|
||||
let (our_payment_preimage, our_payment_hash, _) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 100000);
|
||||
|
||||
nodes[0].node.close_channel(&chan_1.2).unwrap();
|
||||
let node_0_shutdown = get_event_msg!(nodes[0], MessageSendEvent::SendShutdown, nodes[1].node.get_our_node_id());
|
||||
|
@ -125,8 +125,9 @@ fn updates_shutdown_wait() {
|
|||
let events = nodes[0].node.get_and_clear_pending_events();
|
||||
assert_eq!(events.len(), 1);
|
||||
match events[0] {
|
||||
Event::PaymentSent { ref payment_preimage } => {
|
||||
Event::PaymentSent { ref payment_preimage, ref payment_hash } => {
|
||||
assert_eq!(our_payment_preimage, *payment_preimage);
|
||||
assert_eq!(our_payment_hash, *payment_hash);
|
||||
},
|
||||
_ => panic!("Unexpected event"),
|
||||
}
|
||||
|
@ -233,7 +234,7 @@ fn do_test_shutdown_rebroadcast(recv_count: u8) {
|
|||
let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
|
||||
let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::known(), InitFeatures::known());
|
||||
|
||||
let (our_payment_preimage, _, _) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 100000);
|
||||
let (our_payment_preimage, our_payment_hash, _) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 100000);
|
||||
|
||||
nodes[1].node.close_channel(&chan_1.2).unwrap();
|
||||
let node_1_shutdown = get_event_msg!(nodes[1], MessageSendEvent::SendShutdown, nodes[0].node.get_our_node_id());
|
||||
|
@ -298,8 +299,9 @@ fn do_test_shutdown_rebroadcast(recv_count: u8) {
|
|||
let events = nodes[0].node.get_and_clear_pending_events();
|
||||
assert_eq!(events.len(), 1);
|
||||
match events[0] {
|
||||
Event::PaymentSent { ref payment_preimage } => {
|
||||
Event::PaymentSent { ref payment_preimage, ref payment_hash } => {
|
||||
assert_eq!(our_payment_preimage, *payment_preimage);
|
||||
assert_eq!(our_payment_hash, *payment_hash);
|
||||
},
|
||||
_ => panic!("Unexpected event"),
|
||||
}
|
||||
|
|
|
@ -21,7 +21,8 @@ use routing::network_graph::NetworkUpdate;
|
|||
use util::ser::{Writeable, Writer, MaybeReadable, Readable, VecReadWrapper, VecWriteWrapper};
|
||||
|
||||
use bitcoin::blockdata::script::Script;
|
||||
|
||||
use bitcoin::hashes::Hash;
|
||||
use bitcoin::hashes::sha256::Hash as Sha256;
|
||||
use bitcoin::secp256k1::key::PublicKey;
|
||||
|
||||
use io;
|
||||
|
@ -122,6 +123,10 @@ pub enum Event {
|
|||
/// Note that this serves as a payment receipt, if you wish to have such a thing, you must
|
||||
/// store it somehow!
|
||||
payment_preimage: PaymentPreimage,
|
||||
/// The hash which was given to [`ChannelManager::send_payment`].
|
||||
///
|
||||
/// [`ChannelManager::send_payment`]: crate::ln::channelmanager::ChannelManager::send_payment
|
||||
payment_hash: PaymentHash,
|
||||
},
|
||||
/// Indicates an outbound payment we made failed. Probably some intermediary node dropped
|
||||
/// something. You may wish to retry with a different route.
|
||||
|
@ -222,10 +227,11 @@ impl Writeable for Event {
|
|||
(8, payment_preimage, option),
|
||||
});
|
||||
},
|
||||
&Event::PaymentSent { ref payment_preimage } => {
|
||||
&Event::PaymentSent { ref payment_preimage, ref payment_hash} => {
|
||||
2u8.write(writer)?;
|
||||
write_tlv_fields!(writer, {
|
||||
(0, payment_preimage, required),
|
||||
(1, payment_hash, required),
|
||||
});
|
||||
},
|
||||
&Event::PaymentFailed { ref payment_hash, ref rejected_by_dest, ref network_update, ref all_paths_failed,
|
||||
|
@ -309,11 +315,17 @@ impl MaybeReadable for Event {
|
|||
2u8 => {
|
||||
let f = || {
|
||||
let mut payment_preimage = PaymentPreimage([0; 32]);
|
||||
let mut payment_hash = None;
|
||||
read_tlv_fields!(reader, {
|
||||
(0, payment_preimage, required),
|
||||
(1, payment_hash, option),
|
||||
});
|
||||
if payment_hash.is_none() {
|
||||
payment_hash = Some(PaymentHash(Sha256::hash(&payment_preimage.0[..]).into_inner()));
|
||||
}
|
||||
Ok(Some(Event::PaymentSent {
|
||||
payment_preimage,
|
||||
payment_hash: payment_hash.unwrap(),
|
||||
}))
|
||||
};
|
||||
f()
|
||||
|
|
Loading…
Add table
Reference in a new issue