Skip to content

Commit 6bc9b28

Browse files
committed
Add HRN resolver to Node and UnifiedPayment
Introduce the hrn_resolver dependency into the main Node struct and plumb it through to the UnifiedPayment component. This is necessary to allow the node to resolve offers presented via a Human-Readable Name (HRN).
1 parent 63b9378 commit 6bc9b28

File tree

4 files changed

+46
-18
lines changed

4 files changed

+46
-18
lines changed

src/builder.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ use bip39::Mnemonic;
1919
use bitcoin::bip32::{ChildNumber, Xpriv};
2020
use bitcoin::secp256k1::PublicKey;
2121
use bitcoin::{BlockHash, Network};
22+
use bitcoin_payment_instructions::onion_message_resolver::LDKOnionMessageDNSSECHrnResolver;
2223
use lightning::chain::{chainmonitor, BestBlock, Watch};
2324
use lightning::io::Cursor;
2425
use lightning::ln::channelmanager::{self, ChainParameters, ChannelManagerReadArgs};
@@ -1556,6 +1557,8 @@ fn build_with_store_internal(
15561557
})?;
15571558
}
15581559

1560+
let hrn_resolver = Arc::new(LDKOnionMessageDNSSECHrnResolver::new(Arc::clone(&network_graph)));
1561+
15591562
// Initialize the PeerManager
15601563
let onion_messenger: Arc<OnionMessenger> =
15611564
if let Some(AsyncPaymentsRole::Server) = async_payments_role {
@@ -1567,7 +1570,7 @@ fn build_with_store_internal(
15671570
message_router,
15681571
Arc::clone(&channel_manager),
15691572
Arc::clone(&channel_manager),
1570-
IgnoringMessageHandler {},
1573+
Arc::clone(&hrn_resolver),
15711574
IgnoringMessageHandler {},
15721575
))
15731576
} else {
@@ -1579,7 +1582,7 @@ fn build_with_store_internal(
15791582
message_router,
15801583
Arc::clone(&channel_manager),
15811584
Arc::clone(&channel_manager),
1582-
IgnoringMessageHandler {},
1585+
Arc::clone(&hrn_resolver),
15831586
IgnoringMessageHandler {},
15841587
))
15851588
};
@@ -1711,6 +1714,12 @@ fn build_with_store_internal(
17111714
Arc::clone(&keys_manager),
17121715
));
17131716

1717+
let peer_manager_clone = Arc::clone(&peer_manager);
1718+
1719+
hrn_resolver.register_post_queue_action(Box::new(move || {
1720+
peer_manager_clone.process_events();
1721+
}));
1722+
17141723
liquidity_source.as_ref().map(|l| l.set_peer_manager(Arc::clone(&peer_manager)));
17151724

17161725
gossip_source.set_gossip_verifier(
@@ -1818,6 +1827,7 @@ fn build_with_store_internal(
18181827
node_metrics,
18191828
om_mailbox,
18201829
async_payments_role,
1830+
hrn_resolver,
18211831
})
18221832
}
18231833

src/lib.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,8 @@ use peer_store::{PeerInfo, PeerStore};
155155
use rand::Rng;
156156
use runtime::Runtime;
157157
use types::{
158-
Broadcaster, BumpTransactionEventHandler, ChainMonitor, ChannelManager, Graph, KeysManager,
159-
OnionMessenger, PaymentStore, PeerManager, Router, Scorer, Sweeper, Wallet,
158+
Broadcaster, BumpTransactionEventHandler, ChainMonitor, ChannelManager, Graph, HRNResolver,
159+
KeysManager, OnionMessenger, PaymentStore, PeerManager, Router, Scorer, Sweeper, Wallet,
160160
};
161161
pub use types::{
162162
ChannelDetails, CustomTlvRecord, DynStore, PeerDetails, SyncAndAsyncKVStore, UserChannelId,
@@ -206,6 +206,7 @@ pub struct Node {
206206
node_metrics: Arc<RwLock<NodeMetrics>>,
207207
om_mailbox: Option<Arc<OnionMessageMailbox>>,
208208
async_payments_role: Option<AsyncPaymentsRole>,
209+
hrn_resolver: Arc<HRNResolver>,
209210
}
210211

211212
impl Node {
@@ -959,6 +960,7 @@ impl Node {
959960
self.bolt12_payment().into(),
960961
Arc::clone(&self.config),
961962
Arc::clone(&self.logger),
963+
Arc::clone(&self.hrn_resolver),
962964
)
963965
}
964966

@@ -979,6 +981,7 @@ impl Node {
979981
self.bolt12_payment(),
980982
Arc::clone(&self.config),
981983
Arc::clone(&self.logger),
984+
Arc::clone(&self.hrn_resolver),
982985
))
983986
}
984987

src/payment/unified.rs

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,33 @@
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-
//! Holds a payment handler allowing to create [BIP 21] URIs with an on-chain, [BOLT 11], and [BOLT 12] payment
8+
//! Holds a payment handler allowing to create [BIP 21] URIs with on-chain, [BOLT 11], and [BOLT 12] payment
99
//! options.
1010
//!
11+
//! Also allows to send payments using these URIs as well as [BIP 353] HRNs.
12+
//!
1113
//! [BIP 21]: https://github.com/bitcoin/bips/blob/master/bip-0021.mediawiki
14+
//! [BIP 353]: https://github.com/bitcoin/bips/blob/master/bip-0353.mediawiki
1215
//! [BOLT 11]: https://github.com/lightning/bolts/blob/master/11-payment-encoding.md
1316
//! [BOLT 12]: https://github.com/lightning/bolts/blob/master/12-offer-encoding.md
17+
use crate::error::Error;
18+
use crate::ffi::maybe_wrap;
19+
use crate::logger::{log_error, LdkLogger, Logger};
20+
use crate::payment::{Bolt11Payment, Bolt12Payment, OnchainPayment};
21+
use crate::types::HRNResolver;
22+
use crate::Config;
1423
use std::sync::Arc;
1524
use std::vec::IntoIter;
1625

17-
use bip21::de::ParamKind;
18-
use bip21::{DeserializationError, DeserializeParams, Param, SerializeParams};
19-
use bitcoin::address::{NetworkChecked, NetworkUnchecked};
20-
use bitcoin::{Amount, Txid};
2126
use lightning::ln::channelmanager::PaymentId;
2227
use lightning::offers::offer::Offer;
2328
use lightning::routing::router::RouteParametersConfig;
2429
use lightning_invoice::{Bolt11Invoice, Bolt11InvoiceDescription, Description};
2530

26-
use crate::error::Error;
27-
use crate::ffi::maybe_wrap;
28-
use crate::logger::{log_error, LdkLogger, Logger};
29-
use crate::payment::{Bolt11Payment, Bolt12Payment, OnchainPayment};
30-
use crate::Config;
31+
use bip21::de::ParamKind;
32+
use bip21::{DeserializationError, DeserializeParams, Param, SerializeParams};
33+
use bitcoin::address::{NetworkChecked, NetworkUnchecked};
34+
use bitcoin::{Amount, Txid};
3135

3236
type Uri<'a> = bip21::Uri<'a, NetworkChecked, Extras>;
3337

@@ -40,26 +44,31 @@ struct Extras {
4044
/// A payment handler allowing to create [BIP 21] URIs with an on-chain, [BOLT 11], and [BOLT 12] payment
4145
/// option.
4246
///
43-
/// Should be retrieved by calling [`Node::unified_qr_payment`]
47+
/// Should be retrieved by calling [`Node::unified_payment`]
48+
///
49+
/// This handler allows you to send payments to these URIs as well as [BIP 353] HRNs.
4450
///
4551
/// [BIP 21]: https://github.com/bitcoin/bips/blob/master/bip-0021.mediawiki
52+
/// [BIP 353]: https://github.com/bitcoin/bips/blob/master/bip-0353.mediawiki
4653
/// [BOLT 11]: https://github.com/lightning/bolts/blob/master/11-payment-encoding.md
4754
/// [BOLT 12]: https://github.com/lightning/bolts/blob/master/12-offer-encoding.md
48-
/// [`Node::unified_qr_payment`]: crate::Node::unified_qr_payment
55+
/// [`Node::unified_payment`]: crate::Node::unified_payment
4956
pub struct UnifiedPayment {
5057
onchain_payment: Arc<OnchainPayment>,
5158
bolt11_invoice: Arc<Bolt11Payment>,
5259
bolt12_payment: Arc<Bolt12Payment>,
5360
config: Arc<Config>,
5461
logger: Arc<Logger>,
62+
hrn_resolver: Arc<HRNResolver>,
5563
}
5664

5765
impl UnifiedPayment {
5866
pub(crate) fn new(
5967
onchain_payment: Arc<OnchainPayment>, bolt11_invoice: Arc<Bolt11Payment>,
6068
bolt12_payment: Arc<Bolt12Payment>, config: Arc<Config>, logger: Arc<Logger>,
69+
hrn_resolver: Arc<HRNResolver>,
6170
) -> Self {
62-
Self { onchain_payment, bolt11_invoice, bolt12_payment, config, logger }
71+
Self { onchain_payment, bolt11_invoice, bolt12_payment, config, logger, hrn_resolver }
6372
}
6473

6574
/// Generates a URI with an on-chain address, [BOLT 11] invoice and [BOLT 12] offer.
@@ -148,6 +157,8 @@ impl UnifiedPayment {
148157
let uri: bip21::Uri<NetworkUnchecked, Extras> =
149158
uri_str.parse().map_err(|_| Error::InvalidUri)?;
150159

160+
let _resolver = &self.hrn_resolver;
161+
151162
let uri_network_checked =
152163
uri.clone().require_network(self.config.network).map_err(|_| Error::InvalidNetwork)?;
153164

src/types.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ use crate::logger::Logger;
3636
use crate::message_handler::NodeCustomMessageHandler;
3737
use crate::payment::PaymentDetails;
3838

39+
use bitcoin_payment_instructions::onion_message_resolver::LDKOnionMessageDNSSECHrnResolver;
40+
3941
/// Supported BIP39 mnemonic word counts for entropy generation.
4042
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
4143
pub enum WordCount {
@@ -170,10 +172,12 @@ pub(crate) type OnionMessenger = lightning::onion_message::messenger::OnionMesse
170172
Arc<MessageRouter>,
171173
Arc<ChannelManager>,
172174
Arc<ChannelManager>,
173-
IgnoringMessageHandler,
175+
Arc<HRNResolver>,
174176
IgnoringMessageHandler,
175177
>;
176178

179+
pub(crate) type HRNResolver = LDKOnionMessageDNSSECHrnResolver<Arc<Graph>, Arc<Logger>>;
180+
177181
pub(crate) type MessageRouter = lightning::onion_message::messenger::DefaultMessageRouter<
178182
Arc<Graph>,
179183
Arc<Logger>,

0 commit comments

Comments
 (0)