Skip to content

Commit 2da0e2d

Browse files
authored
Merge pull request #4050 from joostjager/flow-logging
Add logging to OffersMessageFlow
2 parents eb300b6 + 6ab6894 commit 2da0e2d

File tree

2 files changed

+47
-14
lines changed

2 files changed

+47
-14
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2548,9 +2548,9 @@ pub struct ChannelManager<
25482548
router: R,
25492549

25502550
#[cfg(test)]
2551-
pub(super) flow: OffersMessageFlow<MR>,
2551+
pub(super) flow: OffersMessageFlow<MR, L>,
25522552
#[cfg(not(test))]
2553-
flow: OffersMessageFlow<MR>,
2553+
flow: OffersMessageFlow<MR, L>,
25542554

25552555
/// See `ChannelManager` struct-level documentation for lock order requirements.
25562556
#[cfg(any(test, feature = "_test_utils"))]
@@ -3749,7 +3749,10 @@ where
37493749
fee_est: F, chain_monitor: M, tx_broadcaster: T, router: R, message_router: MR, logger: L,
37503750
entropy_source: ES, node_signer: NS, signer_provider: SP, config: UserConfig,
37513751
params: ChainParameters, current_timestamp: u32,
3752-
) -> Self {
3752+
) -> Self
3753+
where
3754+
L: Clone,
3755+
{
37533756
let mut secp_ctx = Secp256k1::new();
37543757
secp_ctx.seeded_randomize(&entropy_source.get_secure_random_bytes());
37553758

@@ -3759,7 +3762,7 @@ where
37593762
let flow = OffersMessageFlow::new(
37603763
ChainHash::using_genesis_block(params.network), params.best_block,
37613764
our_network_pubkey, current_timestamp, expanded_inbound_key,
3762-
node_signer.get_receive_auth_key(), secp_ctx.clone(), message_router
3765+
node_signer.get_receive_auth_key(), secp_ctx.clone(), message_router, logger.clone(),
37633766
);
37643767

37653768
ChannelManager {
@@ -15560,7 +15563,7 @@ pub struct ChannelManagerReadArgs<
1556015563
F: Deref,
1556115564
R: Deref,
1556215565
MR: Deref,
15563-
L: Deref,
15566+
L: Deref + Clone,
1556415567
> where
1556515568
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
1556615569
T::Target: BroadcasterInterface,
@@ -15640,7 +15643,7 @@ impl<
1564015643
F: Deref,
1564115644
R: Deref,
1564215645
MR: Deref,
15643-
L: Deref,
15646+
L: Deref + Clone,
1564415647
> ChannelManagerReadArgs<'a, M, T, ES, NS, SP, F, R, MR, L>
1564515648
where
1564615649
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -15692,7 +15695,7 @@ impl<
1569215695
F: Deref,
1569315696
R: Deref,
1569415697
MR: Deref,
15695-
L: Deref,
15698+
L: Deref + Clone,
1569615699
> ReadableArgs<ChannelManagerReadArgs<'a, M, T, ES, NS, SP, F, R, MR, L>>
1569715700
for (BlockHash, Arc<ChannelManager<M, T, ES, NS, SP, F, R, MR, L>>)
1569815701
where
@@ -15725,7 +15728,7 @@ impl<
1572515728
F: Deref,
1572615729
R: Deref,
1572715730
MR: Deref,
15728-
L: Deref,
15731+
L: Deref + Clone,
1572915732
> ReadableArgs<ChannelManagerReadArgs<'a, M, T, ES, NS, SP, F, R, MR, L>>
1573015733
for (BlockHash, ChannelManager<M, T, ES, NS, SP, F, R, MR, L>)
1573115734
where
@@ -17015,6 +17018,7 @@ where
1701517018
args.node_signer.get_receive_auth_key(),
1701617019
secp_ctx.clone(),
1701717020
args.message_router,
17021+
args.logger.clone(),
1701817022
)
1701917023
.with_async_payments_offers_cache(async_receive_offer_cache);
1702017024

lightning/src/offers/flow.rs

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ use crate::sign::{EntropySource, NodeSigner, ReceiveAuthKey};
6262
use crate::offers::static_invoice::{StaticInvoice, StaticInvoiceBuilder};
6363
use crate::sync::{Mutex, RwLock};
6464
use crate::types::payment::{PaymentHash, PaymentSecret};
65+
use crate::util::logger::Logger;
6566
use crate::util::ser::Writeable;
6667

6768
#[cfg(feature = "dnssec")]
@@ -75,9 +76,10 @@ use {
7576
///
7677
/// [`OffersMessageFlow`] is parameterized by a [`MessageRouter`], which is responsible
7778
/// for finding message paths when initiating and retrying onion messages.
78-
pub struct OffersMessageFlow<MR: Deref>
79+
pub struct OffersMessageFlow<MR: Deref, L: Deref>
7980
where
8081
MR::Target: MessageRouter,
82+
L::Target: Logger,
8183
{
8284
chain_hash: ChainHash,
8385
best_block: RwLock<BestBlock>,
@@ -103,17 +105,21 @@ where
103105
pub(crate) hrn_resolver: OMNameResolver,
104106
#[cfg(feature = "dnssec")]
105107
pending_dns_onion_messages: Mutex<Vec<(DNSResolverMessage, MessageSendInstructions)>>,
108+
109+
logger: L,
106110
}
107111

108-
impl<MR: Deref> OffersMessageFlow<MR>
112+
impl<MR: Deref, L: Deref> OffersMessageFlow<MR, L>
109113
where
110114
MR::Target: MessageRouter,
115+
L::Target: Logger,
111116
{
112117
/// Creates a new [`OffersMessageFlow`]
113118
pub fn new(
114119
chain_hash: ChainHash, best_block: BestBlock, our_network_pubkey: PublicKey,
115120
current_timestamp: u32, inbound_payment_key: inbound_payment::ExpandedKey,
116121
receive_auth_key: ReceiveAuthKey, secp_ctx: Secp256k1<secp256k1::All>, message_router: MR,
122+
logger: L,
117123
) -> Self {
118124
Self {
119125
chain_hash,
@@ -137,6 +143,8 @@ where
137143
pending_dns_onion_messages: Mutex::new(Vec::new()),
138144

139145
async_receive_offer_cache: Mutex::new(AsyncReceiveOfferCache::new()),
146+
147+
logger,
140148
}
141149
}
142150

@@ -260,9 +268,10 @@ const DEFAULT_ASYNC_RECEIVE_OFFER_EXPIRY: Duration = Duration::from_secs(365 * 2
260268
pub(crate) const TEST_DEFAULT_ASYNC_RECEIVE_OFFER_EXPIRY: Duration =
261269
DEFAULT_ASYNC_RECEIVE_OFFER_EXPIRY;
262270

263-
impl<MR: Deref> OffersMessageFlow<MR>
271+
impl<MR: Deref, L: Deref> OffersMessageFlow<MR, L>
264272
where
265273
MR::Target: MessageRouter,
274+
L::Target: Logger,
266275
{
267276
/// [`BlindedMessagePath`]s for an async recipient to communicate with this node and interactively
268277
/// build [`Offer`]s and [`StaticInvoice`]s for receiving async payments.
@@ -278,6 +287,7 @@ where
278287
peers: Vec<MessageForwardNode>,
279288
) -> Result<Vec<BlindedMessagePath>, ()> {
280289
if recipient_id.len() > 1024 {
290+
log_trace!(self.logger, "Async recipient ID exceeds 1024 bytes");
281291
return Err(());
282292
}
283293

@@ -409,9 +419,10 @@ pub enum InvreqResponseInstructions {
409419
},
410420
}
411421

412-
impl<MR: Deref> OffersMessageFlow<MR>
422+
impl<MR: Deref, L: Deref> OffersMessageFlow<MR, L>
413423
where
414424
MR::Target: MessageRouter,
425+
L::Target: Logger,
415426
{
416427
/// Verifies an [`InvoiceRequest`] using the provided [`OffersContext`] or the [`InvoiceRequest::metadata`].
417428
///
@@ -439,6 +450,7 @@ where
439450
path_absolute_expiry,
440451
}) => {
441452
if path_absolute_expiry < self.duration_since_epoch() {
453+
log_trace!(self.logger, "Static invoice request has expired");
442454
return Err(());
443455
}
444456

@@ -1281,6 +1293,10 @@ where
12811293
let reply_paths = match self.create_blinded_paths(peers, context) {
12821294
Ok(paths) => paths,
12831295
Err(()) => {
1296+
log_error!(
1297+
self.logger,
1298+
"Failed to create blinded paths for OfferPathsRequest message"
1299+
);
12841300
return Err(());
12851301
},
12861302
};
@@ -1399,7 +1415,13 @@ where
13991415

14001416
match self.create_blinded_paths(peers, context) {
14011417
Ok(paths) => (paths, path_absolute_expiry),
1402-
Err(()) => return None,
1418+
Err(()) => {
1419+
log_error!(
1420+
self.logger,
1421+
"Failed to create blinded paths for OfferPaths message"
1422+
);
1423+
return None;
1424+
},
14031425
}
14041426
};
14051427

@@ -1473,6 +1495,7 @@ where
14731495
let (offer_id, offer) = match offer_builder.build() {
14741496
Ok(offer) => (offer.id(), offer),
14751497
Err(_) => {
1498+
log_error!(self.logger, "Failed to build async receive offer");
14761499
debug_assert!(false);
14771500
return None;
14781501
},
@@ -1487,7 +1510,10 @@ where
14871510
router,
14881511
) {
14891512
Ok(res) => res,
1490-
Err(()) => return None,
1513+
Err(()) => {
1514+
log_error!(self.logger, "Failed to create static invoice for server");
1515+
return None;
1516+
},
14911517
};
14921518

14931519
if let Err(()) = self.async_receive_offer_cache.lock().unwrap().cache_pending_offer(
@@ -1498,6 +1524,7 @@ where
14981524
duration_since_epoch,
14991525
invoice_slot,
15001526
) {
1527+
log_error!(self.logger, "Failed to cache pending offer");
15011528
return None;
15021529
}
15031530

@@ -1581,6 +1608,7 @@ where
15811608
&self, message: &ServeStaticInvoice, context: AsyncPaymentsContext,
15821609
) -> Result<(Vec<u8>, u16), ()> {
15831610
if message.invoice.is_expired_no_std(self.duration_since_epoch()) {
1611+
log_trace!(self.logger, "Received expired StaticInvoice");
15841612
return Err(());
15851613
}
15861614
if message.invoice.serialized_length() > MAX_STATIC_INVOICE_SIZE_BYTES {
@@ -1593,6 +1621,7 @@ where
15931621
path_absolute_expiry,
15941622
} => {
15951623
if self.duration_since_epoch() > path_absolute_expiry {
1624+
log_trace!(self.logger, "Received expired StaticInvoice path");
15961625
return Err(());
15971626
}
15981627

0 commit comments

Comments
 (0)