Skip to content

Commit 3a648c9

Browse files
committed
Allow create_blinded_paths function to take Recipient Data as a field
1. Recipient Data is intended to be sent along with the reply_path provided to the counterparty. 2. This commit introduces recipient data in the create_blinded_path flow, optionally appending it within the created reply_path. 3. Also update the test, to test the new added feature.
1 parent e057531 commit 3a648c9

13 files changed

+83
-52
lines changed

fuzz/src/chanmon_consistency.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ use bitcoin::hashes::sha256d::Hash as Sha256dHash;
3131
use bitcoin::hash_types::{BlockHash, WPubkeyHash};
3232

3333
use lightning::blinded_path::BlindedPath;
34-
use lightning::blinded_path::message::ForwardNode;
34+
use lightning::blinded_path::message::{ForwardNode, RecipientData};
3535
use lightning::blinded_path::payment::ReceiveTlvs;
3636
use lightning::chain;
3737
use lightning::chain::{BestBlock, ChannelMonitorUpdateStatus, chainmonitor, channelmonitor, Confirm, Watch};
@@ -120,7 +120,7 @@ impl MessageRouter for FuzzRouter {
120120
}
121121

122122
fn create_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
123-
&self, _recipient: PublicKey, _peers: Vec<ForwardNode>, _secp_ctx: &Secp256k1<T>,
123+
&self, _recipient: PublicKey, _recipient_data: Option<RecipientData>, _peers: Vec<ForwardNode>, _secp_ctx: &Secp256k1<T>,
124124
) -> Result<Vec<BlindedPath>, ()> {
125125
unreachable!()
126126
}

fuzz/src/full_stack.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ use bitcoin::hashes::sha256d::Hash as Sha256dHash;
2828
use bitcoin::hash_types::{Txid, BlockHash, WPubkeyHash};
2929

3030
use lightning::blinded_path::BlindedPath;
31-
use lightning::blinded_path::message::ForwardNode;
31+
use lightning::blinded_path::message::{ForwardNode, RecipientData};
3232
use lightning::blinded_path::payment::ReceiveTlvs;
3333
use lightning::chain;
3434
use lightning::chain::{BestBlock, ChannelMonitorUpdateStatus, Confirm, Listen};
@@ -158,7 +158,7 @@ impl MessageRouter for FuzzRouter {
158158
}
159159

160160
fn create_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
161-
&self, _recipient: PublicKey, _peers: Vec<ForwardNode>, _secp_ctx: &Secp256k1<T>,
161+
&self, _recipient: PublicKey, _recipient_data: Option<RecipientData>, _peers: Vec<ForwardNode>, _secp_ctx: &Secp256k1<T>,
162162
) -> Result<Vec<BlindedPath>, ()> {
163163
unreachable!()
164164
}

fuzz/src/invoice_request_deser.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,8 @@ fn build_response<T: secp256k1::Signing + secp256k1::Verification>(
8585
],
8686
];
8787
let paths = vec![
88-
BlindedPath::new_for_message(&intermediate_nodes[0], pubkey(42), &entropy_source, secp_ctx).unwrap(),
89-
BlindedPath::new_for_message(&intermediate_nodes[1], pubkey(42), &entropy_source, secp_ctx).unwrap(),
88+
BlindedPath::new_for_message(&intermediate_nodes[0], pubkey(42), None, &entropy_source, secp_ctx).unwrap(),
89+
BlindedPath::new_for_message(&intermediate_nodes[1], pubkey(42), None, &entropy_source, secp_ctx).unwrap(),
9090
];
9191

9292
let payinfo = vec![

fuzz/src/onion_message.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,8 @@ impl MessageRouter for TestMessageRouter {
8989
}
9090

9191
fn create_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
92-
&self, _recipient: PublicKey, _peers: Vec<ForwardNode>, _secp_ctx: &Secp256k1<T>,
92+
&self, _recipient: PublicKey, _recipient_data: Option<RecipientData>,
93+
_peers: Vec<ForwardNode>, _secp_ctx: &Secp256k1<T>,
9394
) -> Result<Vec<BlindedPath>, ()> {
9495
unreachable!()
9596
}

fuzz/src/refund_deser.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@ fn build_response<T: secp256k1::Signing + secp256k1::Verification>(
7474
],
7575
];
7676
let paths = vec![
77-
BlindedPath::new_for_message(&intermediate_nodes[0], pubkey(42), &entropy_source, secp_ctx).unwrap(),
78-
BlindedPath::new_for_message(&intermediate_nodes[1], pubkey(42), &entropy_source, secp_ctx).unwrap(),
77+
BlindedPath::new_for_message(&intermediate_nodes[0], pubkey(42), None, &entropy_source, secp_ctx).unwrap(),
78+
BlindedPath::new_for_message(&intermediate_nodes[1], pubkey(42), None, &entropy_source, secp_ctx).unwrap(),
7979
];
8080

8181
let payinfo = vec![

lightning/src/blinded_path/message.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,11 @@ impl Writeable for ReceiveTlvs {
112112
/// Construct blinded onion message hops for the given `intermediate_nodes` and `recipient_node_id`.
113113
pub(super) fn blinded_hops<T: secp256k1::Signing + secp256k1::Verification>(
114114
secp_ctx: &Secp256k1<T>, intermediate_nodes: &[ForwardNode], recipient_node_id: PublicKey,
115-
session_priv: &SecretKey
115+
recipient_data: Option<RecipientData>, session_priv: &SecretKey
116116
) -> Result<Vec<BlindedHop>, secp256k1::Error> {
117117
let pks = intermediate_nodes.iter().map(|node| &node.node_id)
118118
.chain(core::iter::once(&recipient_node_id));
119+
let recipient_data = recipient_data.unwrap_or(RecipientData::new());
119120
let tlvs = pks.clone()
120121
.skip(1) // The first node's TLVs contains the next node's pubkey
121122
.zip(intermediate_nodes.iter().map(|node| node.short_channel_id))
@@ -124,7 +125,7 @@ pub(super) fn blinded_hops<T: secp256k1::Signing + secp256k1::Verification>(
124125
None => NextMessageHop::NodeId(*pubkey),
125126
})
126127
.map(|next_hop| ControlTlvs::Forward(ForwardTlvs { next_hop, next_blinding_override: None }))
127-
.chain(core::iter::once(ControlTlvs::Receive(ReceiveTlvs { path_id: None, recipient_data: RecipientData::new() })));
128+
.chain(core::iter::once(ControlTlvs::Receive(ReceiveTlvs { path_id: None, recipient_data })));
128129

129130
utils::construct_blinded_hops(secp_ctx, pks, tlvs, session_priv)
130131
}

lightning/src/blinded_path/mod.rs

+6-4
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ pub(crate) mod utils;
1616
use bitcoin::secp256k1::{self, PublicKey, Secp256k1, SecretKey};
1717
use core::ops::Deref;
1818

19+
use crate::blinded_path::message::RecipientData;
1920
use crate::ln::msgs::DecodeError;
2021
use crate::offers::invoice::BlindedPayInfo;
2122
use crate::routing::gossip::{NodeId, ReadOnlyNetworkGraph};
@@ -123,9 +124,9 @@ pub struct BlindedHop {
123124
impl BlindedPath {
124125
/// Create a one-hop blinded path for a message.
125126
pub fn one_hop_for_message<ES: Deref, T: secp256k1::Signing + secp256k1::Verification>(
126-
recipient_node_id: PublicKey, entropy_source: ES, secp_ctx: &Secp256k1<T>
127+
recipient_node_id: PublicKey, recipient_data: Option<RecipientData>, entropy_source: ES, secp_ctx: &Secp256k1<T>
127128
) -> Result<Self, ()> where ES::Target: EntropySource {
128-
Self::new_for_message(&[], recipient_node_id, entropy_source, secp_ctx)
129+
Self::new_for_message(&[], recipient_node_id, recipient_data, entropy_source, secp_ctx)
129130
}
130131

131132
/// Create a blinded path for an onion message, to be forwarded along `node_pks`. The last node
@@ -135,7 +136,7 @@ impl BlindedPath {
135136
// TODO: make all payloads the same size with padding + add dummy hops
136137
pub fn new_for_message<ES: Deref, T: secp256k1::Signing + secp256k1::Verification>(
137138
intermediate_nodes: &[message::ForwardNode], recipient_node_id: PublicKey,
138-
entropy_source: ES, secp_ctx: &Secp256k1<T>
139+
recipient_data: Option<RecipientData>, entropy_source: ES, secp_ctx: &Secp256k1<T>
139140
) -> Result<Self, ()> where ES::Target: EntropySource {
140141
let introduction_node = IntroductionNode::NodeId(
141142
intermediate_nodes.first().map_or(recipient_node_id, |n| n.node_id)
@@ -147,7 +148,8 @@ impl BlindedPath {
147148
introduction_node,
148149
blinding_point: PublicKey::from_secret_key(secp_ctx, &blinding_secret),
149150
blinded_hops: message::blinded_hops(
150-
secp_ctx, intermediate_nodes, recipient_node_id, &blinding_secret,
151+
secp_ctx, intermediate_nodes, recipient_node_id, recipient_data,
152+
&blinding_secret,
151153
).map_err(|_| ())?,
152154
})
153155
}

lightning/src/ln/channelmanager.rs

+13-6
Original file line numberDiff line numberDiff line change
@@ -8573,7 +8573,7 @@ macro_rules! create_offer_builder { ($self: ident, $builder: ty) => {
85738573
let entropy = &*$self.entropy_source;
85748574
let secp_ctx = &$self.secp_ctx;
85758575

8576-
let path = $self.create_blinded_path().map_err(|_| Bolt12SemanticError::MissingPaths)?;
8576+
let path = $self.create_blinded_path(None).map_err(|_| Bolt12SemanticError::MissingPaths)?;
85778577
let builder = OfferBuilder::deriving_signing_pubkey(
85788578
node_id, expanded_key, entropy, secp_ctx
85798579
)
@@ -8640,7 +8640,11 @@ macro_rules! create_refund_builder { ($self: ident, $builder: ty) => {
86408640
let entropy = &*$self.entropy_source;
86418641
let secp_ctx = &$self.secp_ctx;
86428642

8643-
let path = $self.create_blinded_path().map_err(|_| Bolt12SemanticError::MissingPaths)?;
8643+
let recipient_data = RecipientData {
8644+
payment_id: Some(payment_id)
8645+
};
8646+
8647+
let path = $self.create_blinded_path(Some(recipient_data)).map_err(|_| Bolt12SemanticError::MissingPaths)?;
86448648
let builder = RefundBuilder::deriving_payer_id(
86458649
node_id, expanded_key, entropy, secp_ctx, amount_msats, payment_id
86468650
)?
@@ -8763,7 +8767,10 @@ where
87638767
Some(payer_note) => builder.payer_note(payer_note),
87648768
};
87658769
let invoice_request = builder.build_and_sign()?;
8766-
let reply_path = self.create_blinded_path().map_err(|_| Bolt12SemanticError::MissingPaths)?;
8770+
let recipient_data = RecipientData {
8771+
payment_id: Some(payment_id)
8772+
};
8773+
let reply_path = self.create_blinded_path(Some(recipient_data)).map_err(|_| Bolt12SemanticError::MissingPaths)?;
87678774

87688775
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
87698776

@@ -8863,7 +8870,7 @@ where
88638870
)?;
88648871
let builder: InvoiceBuilder<DerivedSigningPubkey> = builder.into();
88658872
let invoice = builder.allow_mpp().build_and_sign(secp_ctx)?;
8866-
let reply_path = self.create_blinded_path()
8873+
let reply_path = self.create_blinded_path(None)
88678874
.map_err(|_| Bolt12SemanticError::MissingPaths)?;
88688875

88698876
let mut pending_offers_messages = self.pending_offers_messages.lock().unwrap();
@@ -8992,7 +8999,7 @@ where
89928999
/// Creates a blinded path by delegating to [`MessageRouter::create_blinded_paths`].
89939000
///
89949001
/// Errors if the `MessageRouter` errors or returns an empty `Vec`.
8995-
fn create_blinded_path(&self) -> Result<BlindedPath, ()> {
9002+
fn create_blinded_path(&self, recipient_data: Option<RecipientData>) -> Result<BlindedPath, ()> {
89969003
let recipient = self.get_our_node_id();
89979004
let secp_ctx = &self.secp_ctx;
89989005

@@ -9011,7 +9018,7 @@ where
90119018
.collect::<Vec<_>>();
90129019

90139020
self.router
9014-
.create_blinded_paths(recipient, peers, secp_ctx)
9021+
.create_blinded_paths(recipient, recipient_data, peers, secp_ctx)
90159022
.and_then(|paths| paths.into_iter().next().ok_or(()))
90169023
}
90179024

lightning/src/ln/offers_tests.rs

+10
Original file line numberDiff line numberDiff line change
@@ -1018,6 +1018,16 @@ fn fails_sending_invoice_without_blinded_payment_paths_for_offer() {
10181018

10191019
let invoice_error = extract_invoice_error(david, &onion_message);
10201020
assert_eq!(invoice_error, InvoiceError::from(Bolt12SemanticError::MissingPaths));
1021+
1022+
// Confirm that david drops this failed payment from his pending outbound payments.
1023+
let events = david.node.get_and_clear_pending_events();
1024+
assert_eq!(events.len(), 1);
1025+
match events[0] {
1026+
Event::InvoiceRequestFailed { payment_id: pay_id} => {
1027+
assert_eq!(pay_id, payment_id)
1028+
},
1029+
_ => panic!("Unexpected Event"),
1030+
}
10211031
}
10221032

10231033
#[test]

lightning/src/onion_message/functional_tests.rs

+15-15
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,7 @@ fn one_blinded_hop() {
359359
let test_msg = TestCustomMessage::Pong;
360360

361361
let secp_ctx = Secp256k1::new();
362-
let blinded_path = BlindedPath::new_for_message(&[], nodes[1].node_id, &*nodes[1].entropy_source, &secp_ctx).unwrap();
362+
let blinded_path = BlindedPath::new_for_message(&[], nodes[1].node_id, None, &*nodes[1].entropy_source, &secp_ctx).unwrap();
363363
let destination = Destination::BlindedPath(blinded_path);
364364
nodes[0].messenger.send_onion_message(test_msg, destination, None).unwrap();
365365
nodes[1].custom_message_handler.expect_message(TestCustomMessage::Pong);
@@ -373,7 +373,7 @@ fn two_unblinded_two_blinded() {
373373

374374
let secp_ctx = Secp256k1::new();
375375
let intermediate_nodes = [ForwardNode { node_id: nodes[3].node_id, short_channel_id: None }];
376-
let blinded_path = BlindedPath::new_for_message(&intermediate_nodes, nodes[4].node_id, &*nodes[4].entropy_source, &secp_ctx).unwrap();
376+
let blinded_path = BlindedPath::new_for_message(&intermediate_nodes, nodes[4].node_id, None, &*nodes[4].entropy_source, &secp_ctx).unwrap();
377377
let path = OnionMessagePath {
378378
intermediate_nodes: vec![nodes[1].node_id, nodes[2].node_id],
379379
destination: Destination::BlindedPath(blinded_path),
@@ -395,7 +395,7 @@ fn three_blinded_hops() {
395395
ForwardNode { node_id: nodes[1].node_id, short_channel_id: None },
396396
ForwardNode { node_id: nodes[2].node_id, short_channel_id: None },
397397
];
398-
let blinded_path = BlindedPath::new_for_message(&intermediate_nodes, nodes[3].node_id, &*nodes[3].entropy_source, &secp_ctx).unwrap();
398+
let blinded_path = BlindedPath::new_for_message(&intermediate_nodes, nodes[3].node_id, None, &*nodes[3].entropy_source, &secp_ctx).unwrap();
399399
let destination = Destination::BlindedPath(blinded_path);
400400

401401
nodes[0].messenger.send_onion_message(test_msg, destination, None).unwrap();
@@ -418,7 +418,7 @@ fn async_response_over_one_blinded_hop() {
418418

419419
// 3. Simulate the creation of a Blinded Reply path provided by Bob.
420420
let secp_ctx = Secp256k1::new();
421-
let reply_path = BlindedPath::new_for_message(&[], nodes[1].node_id, &*nodes[1].entropy_source, &secp_ctx).unwrap();
421+
let reply_path = BlindedPath::new_for_message(&[], nodes[1].node_id, None, &*nodes[1].entropy_source, &secp_ctx).unwrap();
422422

423423
// 4. Create a responder using the reply path for Alice.
424424
let responder = Some(Responder::new(reply_path, path_id));
@@ -454,7 +454,7 @@ fn async_response_with_reply_path_succeeds() {
454454
// Alice receives a message from Bob with an added reply_path for responding back.
455455
let message = TestCustomMessage::Ping;
456456
let path_id = Some([2; 32]);
457-
let reply_path = BlindedPath::new_for_message(&[], bob.node_id, &*bob.entropy_source, &secp_ctx).unwrap();
457+
let reply_path = BlindedPath::new_for_message(&[], bob.node_id, None, &*bob.entropy_source, &secp_ctx).unwrap();
458458

459459
// Alice asynchronously responds to Bob, expecting a response back from him.
460460
let responder = Responder::new(reply_path, path_id);
@@ -491,7 +491,7 @@ fn async_response_with_reply_path_fails() {
491491
// Alice receives a message from Bob with an added reply_path for responding back.
492492
let message = TestCustomMessage::Ping;
493493
let path_id = Some([2; 32]);
494-
let reply_path = BlindedPath::new_for_message(&[], bob.node_id, &*bob.entropy_source, &secp_ctx).unwrap();
494+
let reply_path = BlindedPath::new_for_message(&[], bob.node_id, None, &*bob.entropy_source, &secp_ctx).unwrap();
495495

496496
// Alice tries to asynchronously respond to Bob, but fails because the nodes are unannounced.
497497
// Therefore, the reply_path cannot be used for the response.
@@ -534,7 +534,7 @@ fn we_are_intro_node() {
534534
ForwardNode { node_id: nodes[0].node_id, short_channel_id: None },
535535
ForwardNode { node_id: nodes[1].node_id, short_channel_id: None },
536536
];
537-
let blinded_path = BlindedPath::new_for_message(&intermediate_nodes, nodes[2].node_id, &*nodes[2].entropy_source, &secp_ctx).unwrap();
537+
let blinded_path = BlindedPath::new_for_message(&intermediate_nodes, nodes[2].node_id, None, &*nodes[2].entropy_source, &secp_ctx).unwrap();
538538
let destination = Destination::BlindedPath(blinded_path);
539539

540540
nodes[0].messenger.send_onion_message(test_msg.clone(), destination, None).unwrap();
@@ -543,7 +543,7 @@ fn we_are_intro_node() {
543543

544544
// Try with a two-hop blinded path where we are the introduction node.
545545
let intermediate_nodes = [ForwardNode { node_id: nodes[0].node_id, short_channel_id: None }];
546-
let blinded_path = BlindedPath::new_for_message(&intermediate_nodes, nodes[1].node_id, &*nodes[1].entropy_source, &secp_ctx).unwrap();
546+
let blinded_path = BlindedPath::new_for_message(&intermediate_nodes, nodes[1].node_id, None, &*nodes[1].entropy_source, &secp_ctx).unwrap();
547547
let destination = Destination::BlindedPath(blinded_path);
548548
nodes[0].messenger.send_onion_message(test_msg, destination, None).unwrap();
549549
nodes[1].custom_message_handler.expect_message(TestCustomMessage::Pong);
@@ -559,7 +559,7 @@ fn invalid_blinded_path_error() {
559559

560560
let secp_ctx = Secp256k1::new();
561561
let intermediate_nodes = [ForwardNode { node_id: nodes[1].node_id, short_channel_id: None }];
562-
let mut blinded_path = BlindedPath::new_for_message(&intermediate_nodes, nodes[2].node_id, &*nodes[2].entropy_source, &secp_ctx).unwrap();
562+
let mut blinded_path = BlindedPath::new_for_message(&intermediate_nodes, nodes[2].node_id, None, &*nodes[2].entropy_source, &secp_ctx).unwrap();
563563
blinded_path.blinded_hops.clear();
564564
let destination = Destination::BlindedPath(blinded_path);
565565
let err = nodes[0].messenger.send_onion_message(test_msg, destination, None).unwrap_err();
@@ -582,7 +582,7 @@ fn reply_path() {
582582
ForwardNode { node_id: nodes[2].node_id, short_channel_id: None },
583583
ForwardNode { node_id: nodes[1].node_id, short_channel_id: None },
584584
];
585-
let reply_path = BlindedPath::new_for_message(&intermediate_nodes, nodes[0].node_id, &*nodes[0].entropy_source, &secp_ctx).unwrap();
585+
let reply_path = BlindedPath::new_for_message(&intermediate_nodes, nodes[0].node_id, None, &*nodes[0].entropy_source, &secp_ctx).unwrap();
586586
nodes[0].messenger.send_onion_message_using_path(path, test_msg.clone(), Some(reply_path)).unwrap();
587587
nodes[3].custom_message_handler.expect_message(TestCustomMessage::Ping);
588588
pass_along_path(&nodes);
@@ -596,13 +596,13 @@ fn reply_path() {
596596
ForwardNode { node_id: nodes[1].node_id, short_channel_id: None },
597597
ForwardNode { node_id: nodes[2].node_id, short_channel_id: None },
598598
];
599-
let blinded_path = BlindedPath::new_for_message(&intermediate_nodes, nodes[3].node_id, &*nodes[3].entropy_source, &secp_ctx).unwrap();
599+
let blinded_path = BlindedPath::new_for_message(&intermediate_nodes, nodes[3].node_id, None, &*nodes[3].entropy_source, &secp_ctx).unwrap();
600600
let destination = Destination::BlindedPath(blinded_path);
601601
let intermediate_nodes = [
602602
ForwardNode { node_id: nodes[2].node_id, short_channel_id: None },
603603
ForwardNode { node_id: nodes[1].node_id, short_channel_id: None },
604604
];
605-
let reply_path = BlindedPath::new_for_message(&intermediate_nodes, nodes[0].node_id, &*nodes[0].entropy_source, &secp_ctx).unwrap();
605+
let reply_path = BlindedPath::new_for_message(&intermediate_nodes, nodes[0].node_id, None, &*nodes[0].entropy_source, &secp_ctx).unwrap();
606606

607607
nodes[0].messenger.send_onion_message(test_msg, destination, Some(reply_path)).unwrap();
608608
nodes[3].custom_message_handler.expect_message(TestCustomMessage::Ping);
@@ -684,7 +684,7 @@ fn requests_peer_connection_for_buffered_messages() {
684684

685685
let intermediate_nodes = [ForwardNode { node_id: nodes[1].node_id, short_channel_id: None }];
686686
let blinded_path = BlindedPath::new_for_message(
687-
&intermediate_nodes, nodes[2].node_id, &*nodes[0].entropy_source, &secp_ctx
687+
&intermediate_nodes, nodes[2].node_id, None, &*nodes[0].entropy_source, &secp_ctx
688688
).unwrap();
689689
let destination = Destination::BlindedPath(blinded_path);
690690

@@ -722,7 +722,7 @@ fn drops_buffered_messages_waiting_for_peer_connection() {
722722

723723
let intermediate_nodes = [ForwardNode { node_id: nodes[1].node_id, short_channel_id: None }];
724724
let blinded_path = BlindedPath::new_for_message(
725-
&intermediate_nodes, nodes[2].node_id, &*nodes[0].entropy_source, &secp_ctx
725+
&intermediate_nodes, nodes[2].node_id, None, &*nodes[0].entropy_source, &secp_ctx
726726
).unwrap();
727727
let destination = Destination::BlindedPath(blinded_path);
728728

@@ -772,7 +772,7 @@ fn intercept_offline_peer_oms() {
772772
let secp_ctx = Secp256k1::new();
773773
let intermediate_nodes = [ForwardNode { node_id: nodes[1].node_id, short_channel_id: None }];
774774
let blinded_path = BlindedPath::new_for_message(
775-
&intermediate_nodes, nodes[2].node_id, &*nodes[2].entropy_source, &secp_ctx
775+
&intermediate_nodes, nodes[2].node_id, None, &*nodes[2].entropy_source, &secp_ctx
776776
).unwrap();
777777
let destination = Destination::BlindedPath(blinded_path);
778778

0 commit comments

Comments
 (0)