Skip to content

Commit c46aa23

Browse files
authored
Merge pull request #4264 from TheBlueMatt/2025-10-0.2-bindings
[0.2-bindings] 0.2 bindings-specific changes
2 parents 311ad94 + 464a8db commit c46aa23

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+351
-267
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ use lightning::ln::msgs::{
5858
BaseMessageHandler, ChannelMessageHandler, CommitmentUpdate, Init, MessageSendEvent,
5959
UpdateAddHTLC,
6060
};
61+
use lightning::ln::outbound_payment::{RecipientOnionFields, Retry};
6162
use lightning::ln::script::ShutdownScript;
6263
use lightning::ln::types::ChannelId;
6364
use lightning::offers::invoice::UnsignedBolt12Invoice;

fuzz/src/full_stack.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,10 @@ use lightning::chain::transaction::OutPoint;
3939
use lightning::chain::{BestBlock, ChannelMonitorUpdateStatus, Confirm, Listen};
4040
use lightning::events::Event;
4141
use lightning::ln::channel_state::ChannelDetails;
42-
use lightning::ln::channelmanager::{
43-
ChainParameters, ChannelManager, InterceptId, PaymentId, RecipientOnionFields, Retry,
44-
};
42+
use lightning::ln::channelmanager::{ChainParameters, ChannelManager, InterceptId, PaymentId};
4543
use lightning::ln::functional_test_utils::*;
4644
use lightning::ln::inbound_payment::ExpandedKey;
45+
use lightning::ln::outbound_payment::{RecipientOnionFields, Retry};
4746
use lightning::ln::peer_handler::{
4847
IgnoringMessageHandler, MessageHandler, PeerManager, SocketDescriptor,
4948
};

fuzz/src/onion_message.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ impl AsyncPaymentsMessageHandler for TestAsyncPaymentsMessageHandler {
164164
fn handle_release_held_htlc(&self, _message: ReleaseHeldHtlc, _context: AsyncPaymentsContext) {}
165165
}
166166

167-
#[derive(Debug)]
167+
#[derive(Clone, Debug)]
168168
struct TestCustomMessage {}
169169

170170
const CUSTOM_MESSAGE_TYPE: u64 = 4242;

lightning-background-processor/src/lib.rs

Lines changed: 21 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -348,11 +348,6 @@ type DynRouter = lightning::routing::router::DefaultRouter<
348348
&'static (dyn Logger + Send + Sync),
349349
>,
350350
>,
351-
lightning::routing::scoring::ProbabilisticScoringFeeParameters,
352-
lightning::routing::scoring::ProbabilisticScorer<
353-
&'static NetworkGraph<&'static (dyn Logger + Send + Sync)>,
354-
&'static (dyn Logger + Send + Sync),
355-
>,
356351
>;
357352

358353
#[cfg(not(c_bindings))]
@@ -1483,7 +1478,6 @@ impl BackgroundProcessor {
14831478
PGS: 'static + Deref<Target = P2PGossipSync<G, UL, L>> + Send,
14841479
RGS: 'static + Deref<Target = RapidGossipSync<G, L>> + Send,
14851480
PM: 'static + Deref + Send,
1486-
LM: 'static + Deref + Send,
14871481
S: 'static + Deref<Target = SC> + Send + Sync,
14881482
SC: for<'b> WriteableScore<'b>,
14891483
D: 'static + Deref,
@@ -1492,8 +1486,8 @@ impl BackgroundProcessor {
14921486
OS: 'static + Deref<Target = OutputSweeperSync<T, D, F, CF, K, L, O>> + Send,
14931487
>(
14941488
kv_store: K, event_handler: EH, chain_monitor: M, channel_manager: CM,
1495-
onion_messenger: Option<OM>, gossip_sync: GossipSync<PGS, RGS, G, UL, L>, peer_manager: PM,
1496-
liquidity_manager: Option<LM>, sweeper: Option<OS>, logger: L, scorer: Option<S>,
1489+
onion_messenger: OM, gossip_sync: GossipSync<PGS, RGS, G, UL, L>, peer_manager: PM,
1490+
sweeper: Option<OS>, logger: L, scorer: Option<S>,
14971491
) -> Self
14981492
where
14991493
UL::Target: 'static + UtxoLookup,
@@ -1506,7 +1500,6 @@ impl BackgroundProcessor {
15061500
CM::Target: AChannelManager,
15071501
OM::Target: AOnionMessenger,
15081502
PM::Target: APeerManager,
1509-
LM::Target: ALiquidityManagerSync,
15101503
D::Target: ChangeDestinationSourceSync,
15111504
O::Target: 'static + OutputSpender,
15121505
K::Target: 'static + KVStoreSync,
@@ -1561,7 +1554,7 @@ impl BackgroundProcessor {
15611554
loop {
15621555
channel_manager.get_cm().process_pending_events(&event_handler);
15631556
chain_monitor.process_pending_events(&event_handler);
1564-
if let Some(om) = &onion_messenger {
1557+
if let Some(om) = Some(&onion_messenger) {
15651558
om.get_om().process_pending_events(&event_handler)
15661559
};
15671560

@@ -1586,24 +1579,13 @@ impl BackgroundProcessor {
15861579
log_trace!(logger, "Terminating background processor.");
15871580
break;
15881581
}
1589-
let sleeper = match (onion_messenger.as_ref(), liquidity_manager.as_ref()) {
1590-
(Some(om), Some(lm)) => Sleeper::from_four_futures(
1591-
&channel_manager.get_cm().get_event_or_persistence_needed_future(),
1592-
&chain_monitor.get_update_future(),
1593-
&om.get_om().get_update_future(),
1594-
&lm.get_lm().get_pending_msgs_or_needs_persist_future(),
1595-
),
1596-
(Some(om), None) => Sleeper::from_three_futures(
1582+
let sleeper = match Some(&onion_messenger) {
1583+
Some(om) => Sleeper::from_three_futures(
15971584
&channel_manager.get_cm().get_event_or_persistence_needed_future(),
15981585
&chain_monitor.get_update_future(),
15991586
&om.get_om().get_update_future(),
16001587
),
1601-
(None, Some(lm)) => Sleeper::from_three_futures(
1602-
&channel_manager.get_cm().get_event_or_persistence_needed_future(),
1603-
&chain_monitor.get_update_future(),
1604-
&lm.get_lm().get_pending_msgs_or_needs_persist_future(),
1605-
),
1606-
(None, None) => Sleeper::from_two_futures(
1588+
None => Sleeper::from_two_futures(
16071589
&channel_manager.get_cm().get_event_or_persistence_needed_future(),
16081590
&chain_monitor.get_update_future(),
16091591
),
@@ -1635,13 +1617,6 @@ impl BackgroundProcessor {
16351617
log_trace!(logger, "Done persisting ChannelManager.");
16361618
}
16371619

1638-
if let Some(liquidity_manager) = liquidity_manager.as_ref() {
1639-
log_trace!(logger, "Persisting LiquidityManager...");
1640-
let _ = liquidity_manager.get_lm().persist().map_err(|e| {
1641-
log_error!(logger, "Persisting LiquidityManager failed: {}", e);
1642-
});
1643-
}
1644-
16451620
// Note that we want to run a graph prune once not long after startup before
16461621
// falling back to our usual hourly prunes. This avoids short-lived clients never
16471622
// pruning their network graph. We run once 60 seconds after startup before
@@ -1713,7 +1688,7 @@ impl BackgroundProcessor {
17131688
last_sweeper_call = Instant::now();
17141689
}
17151690
if last_onion_message_handler_call.elapsed() > ONION_MESSAGE_HANDLER_TIMER {
1716-
if let Some(om) = &onion_messenger {
1691+
if let Some(om) = Some(&onion_messenger) {
17171692
log_trace!(logger, "Calling OnionMessageHandler's timer_tick_occurred");
17181693
om.get_om().timer_tick_occurred();
17191694
}
@@ -1899,8 +1874,6 @@ mod tests {
18991874
Arc<test_utils::TestLogger>,
19001875
Arc<KeysManager>,
19011876
Arc<LockingWrapper<TestScorer>>,
1902-
(),
1903-
TestScorer,
19041877
>,
19051878
>,
19061879
Arc<
@@ -2187,10 +2160,11 @@ mod tests {
21872160
}
21882161

21892162
impl ScoreLookUp for TestScorer {
2163+
#[cfg(not(c_bindings))]
21902164
type ScoreParams = ();
21912165
fn channel_penalty_msat(
21922166
&self, _candidate: &CandidateRouteHop, _usage: ChannelUsage,
2193-
_score_params: &Self::ScoreParams,
2167+
_score_params: &lightning::routing::scoring::ProbabilisticScoringFeeParameters,
21942168
) -> u64 {
21952169
unimplemented!();
21962170
}
@@ -2625,7 +2599,7 @@ mod tests {
26252599
event_handler,
26262600
Arc::clone(&nodes[0].chain_monitor),
26272601
Arc::clone(&nodes[0].node),
2628-
Some(Arc::clone(&nodes[0].messenger)),
2602+
Arc::clone(&nodes[0].messenger),
26292603
nodes[0].p2p_gossip_sync(),
26302604
Arc::clone(&nodes[0].peer_manager),
26312605
Some(Arc::clone(&nodes[0].liquidity_manager)),
@@ -2720,7 +2694,7 @@ mod tests {
27202694
event_handler,
27212695
Arc::clone(&nodes[0].chain_monitor),
27222696
Arc::clone(&nodes[0].node),
2723-
Some(Arc::clone(&nodes[0].messenger)),
2697+
Arc::clone(&nodes[0].messenger),
27242698
nodes[0].no_gossip_sync(),
27252699
Arc::clone(&nodes[0].peer_manager),
27262700
Some(Arc::clone(&nodes[0].liquidity_manager)),
@@ -2764,7 +2738,7 @@ mod tests {
27642738
event_handler,
27652739
Arc::clone(&nodes[0].chain_monitor),
27662740
Arc::clone(&nodes[0].node),
2767-
Some(Arc::clone(&nodes[0].messenger)),
2741+
Arc::clone(&nodes[0].messenger),
27682742
nodes[0].no_gossip_sync(),
27692743
Arc::clone(&nodes[0].peer_manager),
27702744
Some(Arc::clone(&nodes[0].liquidity_manager)),
@@ -2847,7 +2821,7 @@ mod tests {
28472821
event_handler,
28482822
Arc::clone(&nodes[0].chain_monitor),
28492823
Arc::clone(&nodes[0].node),
2850-
Some(Arc::clone(&nodes[0].messenger)),
2824+
Arc::clone(&nodes[0].messenger),
28512825
nodes[0].p2p_gossip_sync(),
28522826
Arc::clone(&nodes[0].peer_manager),
28532827
Some(Arc::clone(&nodes[0].liquidity_manager)),
@@ -2878,7 +2852,7 @@ mod tests {
28782852
event_handler,
28792853
Arc::clone(&nodes[0].chain_monitor),
28802854
Arc::clone(&nodes[0].node),
2881-
Some(Arc::clone(&nodes[0].messenger)),
2855+
Arc::clone(&nodes[0].messenger),
28822856
nodes[0].no_gossip_sync(),
28832857
Arc::clone(&nodes[0].peer_manager),
28842858
Some(Arc::clone(&nodes[0].liquidity_manager)),
@@ -2926,7 +2900,7 @@ mod tests {
29262900
event_handler,
29272901
Arc::clone(&nodes[0].chain_monitor),
29282902
Arc::clone(&nodes[0].node),
2929-
Some(Arc::clone(&nodes[0].messenger)),
2903+
Arc::clone(&nodes[0].messenger),
29302904
nodes[0].no_gossip_sync(),
29312905
Arc::clone(&nodes[0].peer_manager),
29322906
Some(Arc::clone(&nodes[0].liquidity_manager)),
@@ -2990,7 +2964,7 @@ mod tests {
29902964
event_handler,
29912965
Arc::clone(&nodes[0].chain_monitor),
29922966
Arc::clone(&nodes[0].node),
2993-
Some(Arc::clone(&nodes[0].messenger)),
2967+
Arc::clone(&nodes[0].messenger),
29942968
nodes[0].no_gossip_sync(),
29952969
Arc::clone(&nodes[0].peer_manager),
29962970
Some(Arc::clone(&nodes[0].liquidity_manager)),
@@ -3154,7 +3128,7 @@ mod tests {
31543128
event_handler,
31553129
Arc::clone(&nodes[0].chain_monitor),
31563130
Arc::clone(&nodes[0].node),
3157-
Some(Arc::clone(&nodes[0].messenger)),
3131+
Arc::clone(&nodes[0].messenger),
31583132
nodes[0].no_gossip_sync(),
31593133
Arc::clone(&nodes[0].peer_manager),
31603134
Some(Arc::clone(&nodes[0].liquidity_manager)),
@@ -3185,7 +3159,7 @@ mod tests {
31853159
event_handler,
31863160
Arc::clone(&nodes[0].chain_monitor),
31873161
Arc::clone(&nodes[0].node),
3188-
Some(Arc::clone(&nodes[0].messenger)),
3162+
Arc::clone(&nodes[0].messenger),
31893163
nodes[0].no_gossip_sync(),
31903164
Arc::clone(&nodes[0].peer_manager),
31913165
Some(Arc::clone(&nodes[0].liquidity_manager)),
@@ -3283,7 +3257,7 @@ mod tests {
32833257
event_handler,
32843258
Arc::clone(&nodes[0].chain_monitor),
32853259
Arc::clone(&nodes[0].node),
3286-
Some(Arc::clone(&nodes[0].messenger)),
3260+
Arc::clone(&nodes[0].messenger),
32873261
nodes[0].rapid_gossip_sync(),
32883262
Arc::clone(&nodes[0].peer_manager),
32893263
Some(Arc::clone(&nodes[0].liquidity_manager)),
@@ -3495,7 +3469,7 @@ mod tests {
34953469
event_handler,
34963470
Arc::clone(&nodes[0].chain_monitor),
34973471
Arc::clone(&nodes[0].node),
3498-
Some(Arc::clone(&nodes[0].messenger)),
3472+
Arc::clone(&nodes[0].messenger),
34993473
nodes[0].no_gossip_sync(),
35003474
Arc::clone(&nodes[0].peer_manager),
35013475
Some(Arc::clone(&nodes[0].liquidity_manager)),
@@ -3602,7 +3576,7 @@ mod tests {
36023576
move |_: Event| Ok(()),
36033577
Arc::clone(&nodes[0].chain_monitor),
36043578
Arc::clone(&nodes[0].node),
3605-
crate::NO_ONION_MESSENGER,
3579+
Arc::clone(&nodes[0].messenger),
36063580
nodes[0].no_gossip_sync(),
36073581
Arc::clone(&nodes[0].peer_manager),
36083582
crate::NO_LIQUIDITY_MANAGER_SYNC,

lightning-invoice/src/lib.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,9 @@ pub const MAX_LENGTH: usize = 7089;
162162

163163
/// The [`bech32::Bech32`] checksum algorithm, with extended max length suitable
164164
/// for BOLT11 invoices.
165+
///
166+
/// This is not exported to bindings users as it generally shouldn't be used directly publicly
167+
/// anyway.
165168
pub enum Bolt11Bech32 {}
166169

167170
impl Checksum for Bolt11Bech32 {
@@ -1220,12 +1223,16 @@ impl RawBolt11Invoice {
12201223

12211224
/// Convert to HRP prefix and Fe32 encoded data part.
12221225
/// Can be used to transmit unsigned invoices for remote signing.
1226+
///
1227+
/// This is not exported to bindings users as we don't currently support Fe32s
12231228
pub fn to_raw(&self) -> (String, Vec<Fe32>) {
12241229
(self.hrp.to_string(), self.data.fe_iter().collect())
12251230
}
12261231

12271232
/// Convert from HRP prefix and Fe32 encoded data part.
12281233
/// Can be used to receive unsigned invoices for remote signing.
1234+
///
1235+
/// This is not exported to bindings users as we don't currently support Fe32s
12291236
pub fn from_raw(hrp: &str, data: &[Fe32]) -> Result<Self, Bolt11ParseError> {
12301237
let raw_hrp: RawHrp = RawHrp::from_str(hrp)?;
12311238
let data_part = RawDataPart::from_base32(data)?;
@@ -1602,6 +1609,29 @@ impl Bolt11Invoice {
16021609
self.fallbacks().iter().filter_map(filter_fn).collect()
16031610
}
16041611

1612+
/// Returns the first fallback address as an [`Address`].
1613+
///
1614+
/// See [`Self::fallback_addresses`] to fetch all addresses of known type.
1615+
pub fn first_fallback_address(&self) -> Option<Address> {
1616+
let filter_fn = |fallback: &&Fallback| {
1617+
let address = match fallback {
1618+
Fallback::SegWitProgram { version, program } => {
1619+
match WitnessProgram::new(*version, &program) {
1620+
Ok(witness_program) => {
1621+
Address::from_witness_program(witness_program, self.network())
1622+
},
1623+
Err(_) => return None,
1624+
}
1625+
},
1626+
Fallback::PubKeyHash(pkh) => Address::p2pkh(*pkh, self.network()),
1627+
Fallback::ScriptHash(sh) => Address::p2sh_from_hash(*sh, self.network()),
1628+
};
1629+
1630+
Some(address)
1631+
};
1632+
self.fallbacks().iter().filter_map(filter_fn).next()
1633+
}
1634+
16051635
/// Returns a list of all routes included in the invoice
16061636
pub fn private_routes(&self) -> Vec<&PrivateRoute> {
16071637
self.signed_invoice.private_routes()

lightning-liquidity/tests/lsps2_integration_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use lightning::check_added_monitors;
1111
use lightning::events::{ClosureReason, Event};
1212
use lightning::get_event_msg;
1313
use lightning::ln::channelmanager::PaymentId;
14-
use lightning::ln::channelmanager::Retry;
14+
use lightning::ln::outbound_payment::Retry;
1515
use lightning::ln::functional_test_utils::create_funding_transaction;
1616
use lightning::ln::functional_test_utils::do_commitment_signed_dance;
1717
use lightning::ln::functional_test_utils::expect_channel_pending_event;

lightning-persister/src/fs_store.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,13 @@ struct FilesystemStoreInner {
5353
/// A [`KVStore`] and [`KVStoreSync`] implementation that writes to and reads from the file system.
5454
///
5555
/// [`KVStore`]: lightning::util::persist::KVStore
56+
#[derive(Clone)]
5657
pub struct FilesystemStore {
5758
inner: Arc<FilesystemStoreInner>,
5859

5960
// Version counter to ensure that writes are applied in the correct order. It is assumed that read and list
6061
// operations aren't sensitive to the order of execution.
61-
next_version: AtomicU64,
62+
next_version: Arc<AtomicU64>,
6263
}
6364

6465
impl FilesystemStore {
@@ -68,7 +69,7 @@ impl FilesystemStore {
6869
let tmp_file_counter = AtomicUsize::new(0);
6970
Self {
7071
inner: Arc::new(FilesystemStoreInner { data_dir, tmp_file_counter, locks }),
71-
next_version: AtomicU64::new(1),
72+
next_version: Arc::new(AtomicU64::new(1)),
7273
}
7374
}
7475

lightning-transaction-sync/src/electrum.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
// http://opensource.org/licenses/MIT>, at your option. You may not use this file except in
66
// accordance with one or both of these licenses.
77

8+
//! Chain sync using the electrum protocol
9+
810
use crate::common::{ConfirmedTx, FilterQueue, SyncState};
911
use crate::error::{InternalError, TxSyncError};
1012

lightning-transaction-sync/src/error.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
// http://opensource.org/licenses/MIT>, at your option. You may not use this file except in
66
// accordance with one or both of these licenses.
77

8+
//! Common error types
9+
810
use std::fmt;
911

1012
#[derive(Debug)]

lightning-transaction-sync/src/esplora.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
// http://opensource.org/licenses/MIT>, at your option. You may not use this file except in
66
// accordance with one or both of these licenses.
77

8+
//! Chain sync using the Esplora API
9+
810
use crate::common::{ConfirmedTx, FilterQueue, SyncState};
911
use crate::error::{InternalError, TxSyncError};
1012

0 commit comments

Comments
 (0)