Skip to content

Commit e00d81a

Browse files
committed
Add Node fn for sending an onion message
1 parent 378fd0e commit e00d81a

File tree

1 file changed

+36
-2
lines changed

1 file changed

+36
-2
lines changed

src/lib.rs

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,9 @@ use lightning::ln::channelmanager::{
128128
};
129129
use lightning::ln::peer_handler::{IgnoringMessageHandler, MessageHandler};
130130
use lightning::ln::{PaymentHash, PaymentPreimage};
131+
use lightning::onion_message::{CustomOnionMessageContents, Destination, OnionMessageContents};
131132
use lightning::routing::scoring::{ProbabilisticScorer, ProbabilisticScoringParameters};
133+
use lightning::util::ser::{Writeable, Writer};
132134

133135
use lightning::util::config::{ChannelHandshakeConfig, ChannelHandshakeLimits, UserConfig};
134136
use lightning::util::ser::ReadableArgs;
@@ -248,6 +250,23 @@ enum GossipSourceConfig {
248250
RapidGossipSync(String),
249251
}
250252

253+
struct UserOnionMessageContents {
254+
tlv_type: u64,
255+
data: Vec<u8>,
256+
}
257+
258+
impl CustomOnionMessageContents for UserOnionMessageContents {
259+
fn tlv_type(&self) -> u64 {
260+
self.tlv_type
261+
}
262+
}
263+
264+
impl Writeable for UserOnionMessageContents {
265+
fn write<W: Writer>(&self, w: &mut W) -> Result<(), std::io::Error> {
266+
w.write_all(&self.data)
267+
}
268+
}
269+
251270
/// A builder for an [`Node`] instance, allowing to set some configuration and module choices from
252271
/// the getgo.
253272
///
@@ -705,7 +724,7 @@ impl Builder {
705724
scorer,
706725
peer_store,
707726
payment_store,
708-
_onion_messenger: onion_messenger,
727+
onion_messenger,
709728
})
710729
}
711730
}
@@ -732,7 +751,7 @@ pub struct Node<K: KVStore + Sync + Send + 'static> {
732751
scorer: Arc<Mutex<Scorer>>,
733752
peer_store: Arc<PeerStore<K, Arc<FilesystemLogger>>>,
734753
payment_store: Arc<PaymentStore<K, Arc<FilesystemLogger>>>,
735-
_onion_messenger: Arc<OnionMessenger>,
754+
onion_messenger: Arc<OnionMessenger>,
736755
}
737756

738757
impl<K: KVStore + Sync + Send + 'static> Node<K> {
@@ -1153,6 +1172,21 @@ impl<K: KVStore + Sync + Send + 'static> Node<K> {
11531172
self.wallet.send_to_address(address, None)
11541173
}
11551174

1175+
/// Send an onion message to the following address.
1176+
pub fn send_onion_message(
1177+
&self, node_pks: Vec<PublicKey>, destination_pk: PublicKey, tlv_type: u64, data: Vec<u8>,
1178+
) {
1179+
match self.onion_messenger.send_onion_message(
1180+
&node_pks,
1181+
Destination::Node(destination_pk),
1182+
OnionMessageContents::Custom(UserOnionMessageContents { tlv_type, data }),
1183+
None,
1184+
) {
1185+
Ok(()) => println!("SUCCESS: forwarded onion message to first hop"),
1186+
Err(e) => println!("ERROR: failed to send onion message: {:?}", e),
1187+
}
1188+
}
1189+
11561190
/// Retrieve the currently spendable on-chain balance in satoshis.
11571191
pub fn spendable_onchain_balance_sats(&self) -> Result<u64, Error> {
11581192
Ok(self.wallet.get_balance().map(|bal| bal.get_spendable())?)

0 commit comments

Comments
 (0)