Skip to content

Commit b9797eb

Browse files
authored
Merge pull request #2781 from jkczyz/2023-09-multihop-paths
Multi-hop `BlindedPath` creation interface
2 parents c92db69 + 37319a6 commit b9797eb

File tree

11 files changed

+458
-125
lines changed

11 files changed

+458
-125
lines changed

fuzz/src/chanmon_consistency.rs

+31-2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ use bitcoin::hashes::sha256::Hash as Sha256;
3030
use bitcoin::hashes::sha256d::Hash as Sha256dHash;
3131
use bitcoin::hash_types::{BlockHash, WPubkeyHash};
3232

33+
use lightning::blinded_path::BlindedPath;
34+
use lightning::blinded_path::payment::ReceiveTlvs;
3335
use lightning::chain;
3436
use lightning::chain::{BestBlock, ChannelMonitorUpdateStatus, chainmonitor, channelmonitor, Confirm, Watch};
3537
use lightning::chain::channelmonitor::{ChannelMonitor, MonitorEvent};
@@ -44,8 +46,9 @@ use lightning::ln::channel::FEE_SPIKE_BUFFER_FEE_INCREASE_MULTIPLE;
4446
use lightning::ln::msgs::{self, CommitmentUpdate, ChannelMessageHandler, DecodeError, UpdateAddHTLC, Init};
4547
use lightning::ln::script::ShutdownScript;
4648
use lightning::ln::functional_test_utils::*;
47-
use lightning::offers::invoice::UnsignedBolt12Invoice;
49+
use lightning::offers::invoice::{BlindedPayInfo, UnsignedBolt12Invoice};
4850
use lightning::offers::invoice_request::UnsignedInvoiceRequest;
51+
use lightning::onion_message::{Destination, MessageRouter, OnionMessagePath};
4952
use lightning::util::test_channel_signer::{TestChannelSigner, EnforcementState};
5053
use lightning::util::errors::APIError;
5154
use lightning::util::logger::Logger;
@@ -56,7 +59,7 @@ use lightning::routing::router::{InFlightHtlcs, Path, Route, RouteHop, RoutePara
5659
use crate::utils::test_logger::{self, Output};
5760
use crate::utils::test_persister::TestPersister;
5861

59-
use bitcoin::secp256k1::{Message, PublicKey, SecretKey, Scalar, Secp256k1};
62+
use bitcoin::secp256k1::{Message, PublicKey, SecretKey, Scalar, Secp256k1, self};
6063
use bitcoin::secp256k1::ecdh::SharedSecret;
6164
use bitcoin::secp256k1::ecdsa::{RecoverableSignature, Signature};
6265
use bitcoin::secp256k1::schnorr;
@@ -99,6 +102,32 @@ impl Router for FuzzRouter {
99102
action: msgs::ErrorAction::IgnoreError
100103
})
101104
}
105+
106+
fn create_blinded_payment_paths<
107+
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
108+
>(
109+
&self, _recipient: PublicKey, _first_hops: Vec<ChannelDetails>, _tlvs: ReceiveTlvs,
110+
_amount_msats: u64, _entropy_source: &ES, _secp_ctx: &Secp256k1<T>
111+
) -> Result<Vec<(BlindedPayInfo, BlindedPath)>, ()> {
112+
unreachable!()
113+
}
114+
}
115+
116+
impl MessageRouter for FuzzRouter {
117+
fn find_path(
118+
&self, _sender: PublicKey, _peers: Vec<PublicKey>, _destination: Destination
119+
) -> Result<OnionMessagePath, ()> {
120+
unreachable!()
121+
}
122+
123+
fn create_blinded_paths<
124+
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
125+
>(
126+
&self, _recipient: PublicKey, _peers: Vec<PublicKey>, _entropy_source: &ES,
127+
_secp_ctx: &Secp256k1<T>
128+
) -> Result<Vec<BlindedPath>, ()> {
129+
unreachable!()
130+
}
102131
}
103132

104133
pub struct TestBroadcaster {}

fuzz/src/full_stack.rs

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

31+
use lightning::blinded_path::BlindedPath;
32+
use lightning::blinded_path::payment::ReceiveTlvs;
3133
use lightning::chain;
3234
use lightning::chain::{BestBlock, ChannelMonitorUpdateStatus, Confirm, Listen};
3335
use lightning::chain::chaininterface::{BroadcasterInterface, ConfirmationTarget, FeeEstimator};
@@ -41,8 +43,9 @@ use lightning::ln::peer_handler::{MessageHandler,PeerManager,SocketDescriptor,Ig
4143
use lightning::ln::msgs::{self, DecodeError};
4244
use lightning::ln::script::ShutdownScript;
4345
use lightning::ln::functional_test_utils::*;
44-
use lightning::offers::invoice::UnsignedBolt12Invoice;
46+
use lightning::offers::invoice::{BlindedPayInfo, UnsignedBolt12Invoice};
4547
use lightning::offers::invoice_request::UnsignedInvoiceRequest;
48+
use lightning::onion_message::{Destination, MessageRouter, OnionMessagePath};
4649
use lightning::routing::gossip::{P2PGossipSync, NetworkGraph};
4750
use lightning::routing::utxo::UtxoLookup;
4851
use lightning::routing::router::{InFlightHtlcs, PaymentParameters, Route, RouteParameters, Router};
@@ -55,7 +58,7 @@ use lightning::util::ser::{ReadableArgs, Writeable};
5558
use crate::utils::test_logger;
5659
use crate::utils::test_persister::TestPersister;
5760

58-
use bitcoin::secp256k1::{Message, PublicKey, SecretKey, Scalar, Secp256k1};
61+
use bitcoin::secp256k1::{Message, PublicKey, SecretKey, Scalar, Secp256k1, self};
5962
use bitcoin::secp256k1::ecdh::SharedSecret;
6063
use bitcoin::secp256k1::ecdsa::{RecoverableSignature, Signature};
6164
use bitcoin::secp256k1::schnorr;
@@ -142,6 +145,32 @@ impl Router for FuzzRouter {
142145
action: msgs::ErrorAction::IgnoreError
143146
})
144147
}
148+
149+
fn create_blinded_payment_paths<
150+
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
151+
>(
152+
&self, _recipient: PublicKey, _first_hops: Vec<ChannelDetails>, _tlvs: ReceiveTlvs,
153+
_amount_msats: u64, _entropy_source: &ES, _secp_ctx: &Secp256k1<T>
154+
) -> Result<Vec<(BlindedPayInfo, BlindedPath)>, ()> {
155+
unreachable!()
156+
}
157+
}
158+
159+
impl MessageRouter for FuzzRouter {
160+
fn find_path(
161+
&self, _sender: PublicKey, _peers: Vec<PublicKey>, _destination: Destination
162+
) -> Result<OnionMessagePath, ()> {
163+
unreachable!()
164+
}
165+
166+
fn create_blinded_paths<
167+
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
168+
>(
169+
&self, _recipient: PublicKey, _peers: Vec<PublicKey>, _entropy_source: &ES,
170+
_secp_ctx: &Secp256k1<T>
171+
) -> Result<Vec<BlindedPath>, ()> {
172+
unreachable!()
173+
}
145174
}
146175

147176
struct TestBroadcaster {

fuzz/src/onion_message.rs

+12-2
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
// Imports that need to be added manually
22
use bitcoin::bech32::u5;
33
use bitcoin::blockdata::script::ScriptBuf;
4-
use bitcoin::secp256k1::{PublicKey, Scalar, Secp256k1, SecretKey};
4+
use bitcoin::secp256k1::{PublicKey, Scalar, Secp256k1, SecretKey, self};
55
use bitcoin::secp256k1::ecdh::SharedSecret;
66
use bitcoin::secp256k1::ecdsa::RecoverableSignature;
77
use bitcoin::secp256k1::schnorr;
88

9-
use lightning::sign::{Recipient, KeyMaterial, EntropySource, NodeSigner, SignerProvider};
9+
use lightning::blinded_path::BlindedPath;
1010
use lightning::ln::features::InitFeatures;
1111
use lightning::ln::msgs::{self, DecodeError, OnionMessageHandler};
1212
use lightning::ln::script::ShutdownScript;
1313
use lightning::offers::invoice::UnsignedBolt12Invoice;
1414
use lightning::offers::invoice_request::UnsignedInvoiceRequest;
15+
use lightning::sign::{Recipient, KeyMaterial, EntropySource, NodeSigner, SignerProvider};
1516
use lightning::util::test_channel_signer::TestChannelSigner;
1617
use lightning::util::logger::Logger;
1718
use lightning::util::ser::{Readable, Writeable, Writer};
@@ -82,6 +83,15 @@ impl MessageRouter for TestMessageRouter {
8283
first_node_addresses: None,
8384
})
8485
}
86+
87+
fn create_blinded_paths<
88+
ES: EntropySource + ?Sized, T: secp256k1::Signing + secp256k1::Verification
89+
>(
90+
&self, _recipient: PublicKey, _peers: Vec<PublicKey>, _entropy_source: &ES,
91+
_secp_ctx: &Secp256k1<T>
92+
) -> Result<Vec<BlindedPath>, ()> {
93+
unreachable!()
94+
}
8595
}
8696

8797
struct TestOffersMessageHandler {}

lightning/src/blinded_path/payment.rs

+10
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use crate::blinded_path::BlindedHop;
88
use crate::blinded_path::utils;
99
use crate::io;
1010
use crate::ln::PaymentSecret;
11+
use crate::ln::channelmanager::CounterpartyForwardingInfo;
1112
use crate::ln::features::BlindedHopFeatures;
1213
use crate::ln::msgs::DecodeError;
1314
use crate::offers::invoice::BlindedPayInfo;
@@ -96,6 +97,15 @@ pub struct PaymentConstraints {
9697
pub htlc_minimum_msat: u64,
9798
}
9899

100+
impl From<CounterpartyForwardingInfo> for PaymentRelay {
101+
fn from(info: CounterpartyForwardingInfo) -> Self {
102+
let CounterpartyForwardingInfo {
103+
fee_base_msat, fee_proportional_millionths, cltv_expiry_delta
104+
} = info;
105+
Self { cltv_expiry_delta, fee_proportional_millionths, fee_base_msat }
106+
}
107+
}
108+
99109
impl Writeable for ForwardTlvs {
100110
fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
101111
encode_tlv_stream!(w, {

0 commit comments

Comments
 (0)