Skip to content

Commit ff279d6

Browse files
authored
Merge pull request #3662 from martinsaposnic/lsps5
LSPS5 implementation
2 parents 65d518b + 18fe164 commit ff279d6

28 files changed

+4472
-41
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,10 @@ impl NodeSigner for KeyProvider {
365365
let secp_ctx = Secp256k1::signing_only();
366366
Ok(secp_ctx.sign_ecdsa(&msg_hash, &self.node_secret))
367367
}
368+
369+
fn sign_message(&self, msg: &[u8]) -> Result<String, ()> {
370+
Ok(lightning::util::message_signing::sign(msg, &self.node_secret))
371+
}
368372
}
369373

370374
impl SignerProvider for KeyProvider {

fuzz/src/full_stack.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,10 @@ impl NodeSigner for KeyProvider {
436436
Ok(secp_ctx.sign_ecdsa(&msg_hash, &self.node_secret))
437437
}
438438

439+
fn sign_message(&self, msg: &[u8]) -> Result<String, ()> {
440+
Ok(lightning::util::message_signing::sign(msg, &self.node_secret))
441+
}
442+
439443
fn get_peer_storage_key(&self) -> PeerStorageKey {
440444
PeerStorageKey { inner: [42; 32] }
441445
}

fuzz/src/lsps_message.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ pub fn do_test(data: &[u8]) {
7878
));
7979

8080
let liquidity_manager = Arc::new(LiquidityManager::new(
81+
Arc::clone(&keys_manager),
8182
Arc::clone(&keys_manager),
8283
Arc::clone(&manager),
8384
None::<Arc<dyn Filter + Send + Sync>>,

fuzz/src/onion_message.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,10 @@ impl NodeSigner for KeyProvider {
277277
unreachable!()
278278
}
279279

280+
fn sign_message(&self, msg: &[u8]) -> Result<String, ()> {
281+
Ok(lightning::util::message_signing::sign(msg, &self.node_secret))
282+
}
283+
280284
fn get_peer_storage_key(&self) -> PeerStorageKey {
281285
unreachable!()
282286
}

lightning-background-processor/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ all-features = true
1414
rustdoc-args = ["--cfg", "docsrs"]
1515

1616
[features]
17-
std = ["lightning/std", "lightning-liquidity/std", "bitcoin-io/std", "bitcoin_hashes/std"]
18-
1917
default = ["std"]
18+
std = ["lightning/std", "lightning-liquidity/std", "bitcoin-io/std", "bitcoin_hashes/std", "lightning-liquidity/time"]
19+
2020

2121
[dependencies]
2222
bitcoin = { version = "0.32.2", default-features = false }

lightning-background-processor/src/lib.rs

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -735,6 +735,7 @@ use futures_util::{dummy_waker, OptionalSelector, Selector, SelectorOutput};
735735
/// # use lightning_background_processor::{process_events_async, GossipSync};
736736
/// # use core::future::Future;
737737
/// # use core::pin::Pin;
738+
/// # use lightning_liquidity::lsps5::service::TimeProvider;
738739
/// # struct Logger {}
739740
/// # impl lightning::util::logger::Logger for Logger {
740741
/// # fn log(&self, _record: lightning::util::logger::Record) {}
@@ -753,6 +754,15 @@ use futures_util::{dummy_waker, OptionalSelector, Selector, SelectorOutput};
753754
/// # fn remove(&self, primary_namespace: &str, secondary_namespace: &str, key: &str, lazy: bool) -> Pin<Box<dyn Future<Output = Result<(), io::Error>> + 'static + Send>> { todo!() }
754755
/// # fn list(&self, primary_namespace: &str, secondary_namespace: &str) -> Pin<Box<dyn Future<Output = Result<Vec<String>, io::Error>> + 'static + Send>> { todo!() }
755756
/// # }
757+
/// # use core::time::Duration;
758+
/// # struct DefaultTimeProvider;
759+
/// #
760+
/// # impl TimeProvider for DefaultTimeProvider {
761+
/// # fn duration_since_epoch(&self) -> Duration {
762+
/// # use std::time::{SystemTime, UNIX_EPOCH};
763+
/// # SystemTime::now().duration_since(UNIX_EPOCH).expect("system time before Unix epoch")
764+
/// # }
765+
/// # }
756766
/// # struct EventHandler {}
757767
/// # impl EventHandler {
758768
/// # async fn handle_event(&self, _: lightning::events::Event) -> Result<(), ReplayEvent> { Ok(()) }
@@ -768,7 +778,7 @@ use futures_util::{dummy_waker, OptionalSelector, Selector, SelectorOutput};
768778
/// # type P2PGossipSync<UL> = lightning::routing::gossip::P2PGossipSync<Arc<NetworkGraph>, Arc<UL>, Arc<Logger>>;
769779
/// # type ChannelManager<B, F, FE> = lightning::ln::channelmanager::SimpleArcChannelManager<ChainMonitor<B, F, FE>, B, FE, Logger>;
770780
/// # type OnionMessenger<B, F, FE> = lightning::onion_message::messenger::OnionMessenger<Arc<lightning::sign::KeysManager>, Arc<lightning::sign::KeysManager>, Arc<Logger>, Arc<ChannelManager<B, F, FE>>, Arc<lightning::onion_message::messenger::DefaultMessageRouter<Arc<NetworkGraph>, Arc<Logger>, Arc<lightning::sign::KeysManager>>>, Arc<ChannelManager<B, F, FE>>, lightning::ln::peer_handler::IgnoringMessageHandler, lightning::ln::peer_handler::IgnoringMessageHandler, lightning::ln::peer_handler::IgnoringMessageHandler>;
771-
/// # type LiquidityManager<B, F, FE> = lightning_liquidity::LiquidityManager<Arc<lightning::sign::KeysManager>, Arc<ChannelManager<B, F, FE>>, Arc<F>>;
781+
/// # type LiquidityManager<B, F, FE> = lightning_liquidity::LiquidityManager<Arc<lightning::sign::KeysManager>, Arc<lightning::sign::KeysManager>, Arc<ChannelManager<B, F, FE>>, Arc<F>, Arc<DefaultTimeProvider>>;
772782
/// # type Scorer = RwLock<lightning::routing::scoring::ProbabilisticScorer<Arc<NetworkGraph>, Arc<Logger>>>;
773783
/// # type PeerManager<B, F, FE, UL> = lightning::ln::peer_handler::SimpleArcPeerManager<SocketDescriptor, ChainMonitor<B, F, FE>, B, FE, Arc<UL>, Logger, F, StoreSync>;
774784
/// # type OutputSweeper<B, D, FE, F, O> = lightning::util::sweep::OutputSweeper<Arc<B>, Arc<D>, Arc<FE>, Arc<F>, Arc<Store>, Arc<Logger>, Arc<O>>;
@@ -1391,6 +1401,7 @@ mod tests {
13911401
use lightning::util::sweep::{OutputSpendStatus, OutputSweeperSync, PRUNE_DELAY_BLOCKS};
13921402
use lightning::util::test_utils;
13931403
use lightning::{get_event, get_event_msg};
1404+
use lightning_liquidity::lsps5::service::DefaultTimeProvider;
13941405
use lightning_liquidity::LiquidityManager;
13951406
use lightning_persister::fs_store::FilesystemStore;
13961407
use lightning_rapid_gossip_sync::RapidGossipSync;
@@ -1488,8 +1499,13 @@ mod tests {
14881499
IgnoringMessageHandler,
14891500
>;
14901501

1491-
type LM =
1492-
LiquidityManager<Arc<KeysManager>, Arc<ChannelManager>, Arc<dyn Filter + Sync + Send>>;
1502+
type LM = LiquidityManager<
1503+
Arc<KeysManager>,
1504+
Arc<KeysManager>,
1505+
Arc<ChannelManager>,
1506+
Arc<dyn Filter + Sync + Send>,
1507+
Arc<DefaultTimeProvider>,
1508+
>;
14931509

14941510
struct Node {
14951511
node: Arc<ChannelManager>,
@@ -1936,6 +1952,7 @@ mod tests {
19361952
Arc::clone(&keys_manager),
19371953
));
19381954
let liquidity_manager = Arc::new(LiquidityManager::new(
1955+
Arc::clone(&keys_manager),
19391956
Arc::clone(&keys_manager),
19401957
Arc::clone(&manager),
19411958
None,

lightning-liquidity/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ categories = ["cryptography::cryptocurrencies"]
1414
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
1515

1616
[features]
17-
default = ["std"]
17+
default = ["std", "time"]
1818
std = ["lightning/std"]
19+
time = ["std"]
1920
backtrace = ["dep:backtrace"]
2021

2122
[dependencies]

lightning-liquidity/src/events/mod.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ pub use event_queue::MAX_EVENT_QUEUE_SIZE;
2323
use crate::lsps0;
2424
use crate::lsps1;
2525
use crate::lsps2;
26+
use crate::lsps5;
2627

2728
/// An event which you should probably take some action in response to.
2829
#[derive(Debug, Clone, PartialEq, Eq)]
@@ -38,6 +39,10 @@ pub enum LiquidityEvent {
3839
LSPS2Client(lsps2::event::LSPS2ClientEvent),
3940
/// An LSPS2 (JIT Channel) server event.
4041
LSPS2Service(lsps2::event::LSPS2ServiceEvent),
42+
/// An LSPS5 (Webhook) client event.
43+
LSPS5Client(lsps5::event::LSPS5ClientEvent),
44+
/// An LSPS5 (Webhook) server event.
45+
LSPS5Service(lsps5::event::LSPS5ServiceEvent),
4146
}
4247

4348
impl From<lsps0::event::LSPS0ClientEvent> for LiquidityEvent {
@@ -70,3 +75,15 @@ impl From<lsps2::event::LSPS2ServiceEvent> for LiquidityEvent {
7075
Self::LSPS2Service(event)
7176
}
7277
}
78+
79+
impl From<lsps5::event::LSPS5ClientEvent> for LiquidityEvent {
80+
fn from(event: lsps5::event::LSPS5ClientEvent) -> Self {
81+
Self::LSPS5Client(event)
82+
}
83+
}
84+
85+
impl From<lsps5::event::LSPS5ServiceEvent> for LiquidityEvent {
86+
fn from(event: lsps5::event::LSPS5ServiceEvent) -> Self {
87+
Self::LSPS5Service(event)
88+
}
89+
}

lightning-liquidity/src/lib.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
//! an LSP will open a "just-in-time" channel. This is useful for the initial on-boarding of
2424
//! clients as the channel opening fees are deducted from the incoming payment, i.e., no funds are
2525
//! required client-side to initiate this flow.
26+
//! - [bLIP-55 / LSPS5] defines a protocol for sending webhook notifications to clients. This is
27+
//! useful for notifying clients about incoming payments, channel expiries, etc.
2628
//!
2729
//! To get started, you'll want to setup a [`LiquidityManager`] and configure it to be the
2830
//! [`CustomMessageHandler`] of your LDK node. You can then for example call
@@ -37,6 +39,7 @@
3739
//! [bLIP-50 / LSPS0]: https://github.com/lightning/blips/blob/master/blip-0050.md
3840
//! [bLIP-51 / LSPS1]: https://github.com/lightning/blips/blob/master/blip-0051.md
3941
//! [bLIP-52 / LSPS2]: https://github.com/lightning/blips/blob/master/blip-0052.md
42+
//! [bLIP-55 / LSPS5]: https://github.com/lightning/blips/pull/55/files
4043
//! [`CustomMessageHandler`]: lightning::ln::peer_handler::CustomMessageHandler
4144
//! [`LiquidityManager::next_event`]: crate::LiquidityManager::next_event
4245
#![deny(missing_docs)]
@@ -59,6 +62,7 @@ pub mod events;
5962
pub mod lsps0;
6063
pub mod lsps1;
6164
pub mod lsps2;
65+
pub mod lsps5;
6266
mod manager;
6367
pub mod message_queue;
6468
#[allow(dead_code)]

lightning-liquidity/src/lsps0/msgs.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ impl TryFrom<LSPSMessage> for LSPS0Message {
8383
LSPSMessage::LSPS0(message) => Ok(message),
8484
LSPSMessage::LSPS1(_) => Err(()),
8585
LSPSMessage::LSPS2(_) => Err(()),
86+
LSPSMessage::LSPS5(_) => Err(()),
8687
}
8788
}
8889
}

0 commit comments

Comments
 (0)