Skip to content

Commit 0739d90

Browse files
committed
Add hrn_resolver to Node and pass into UnifiedPayment
This commit adds a HRN Resolver to the Node struct which will be useful for resolving HRNs when making BIP 353 payments. It also passes the HRN Resolver into UnifiedPayment.
1 parent 1a97eb9 commit 0739d90

File tree

5 files changed

+47
-19
lines changed

5 files changed

+47
-19
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,4 +149,4 @@ check-cfg = [
149149
"cfg(tokio_unstable)",
150150
"cfg(cln_test)",
151151
"cfg(lnd_test)",
152-
]
152+
]

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};
@@ -1536,6 +1537,8 @@ fn build_with_store_internal(
15361537
})?;
15371538
}
15381539

1540+
let hrn_resolver = Arc::new(LDKOnionMessageDNSSECHrnResolver::new(Arc::clone(&network_graph)));
1541+
15391542
// Initialize the PeerManager
15401543
let onion_messenger: Arc<OnionMessenger> =
15411544
if let Some(AsyncPaymentsRole::Server) = async_payments_role {
@@ -1547,7 +1550,7 @@ fn build_with_store_internal(
15471550
message_router,
15481551
Arc::clone(&channel_manager),
15491552
Arc::clone(&channel_manager),
1550-
IgnoringMessageHandler {},
1553+
Arc::clone(&hrn_resolver),
15511554
IgnoringMessageHandler {},
15521555
))
15531556
} else {
@@ -1559,7 +1562,7 @@ fn build_with_store_internal(
15591562
message_router,
15601563
Arc::clone(&channel_manager),
15611564
Arc::clone(&channel_manager),
1562-
IgnoringMessageHandler {},
1565+
Arc::clone(&hrn_resolver),
15631566
IgnoringMessageHandler {},
15641567
))
15651568
};
@@ -1691,6 +1694,12 @@ fn build_with_store_internal(
16911694
Arc::clone(&keys_manager),
16921695
));
16931696

1697+
let peer_manager_clone = Arc::clone(&peer_manager);
1698+
1699+
hrn_resolver.register_post_queue_action(Box::new(move || {
1700+
peer_manager_clone.process_events();
1701+
}));
1702+
16941703
liquidity_source.as_ref().map(|l| l.set_peer_manager(Arc::clone(&peer_manager)));
16951704

16961705
gossip_source.set_gossip_verifier(
@@ -1797,6 +1806,7 @@ fn build_with_store_internal(
17971806
node_metrics,
17981807
om_mailbox,
17991808
async_payments_role,
1809+
hrn_resolver,
18001810
})
18011811
}
18021812

src/lib.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,8 @@ use payment::{
140140
use peer_store::{PeerInfo, PeerStore};
141141
use runtime::Runtime;
142142
use types::{
143-
Broadcaster, BumpTransactionEventHandler, ChainMonitor, ChannelManager, Graph, KeysManager,
144-
OnionMessenger, PaymentStore, PeerManager, Router, Scorer, Sweeper, Wallet,
143+
Broadcaster, BumpTransactionEventHandler, ChainMonitor, ChannelManager, Graph, HRNResolver,
144+
KeysManager, OnionMessenger, PaymentStore, PeerManager, Router, Scorer, Sweeper, Wallet,
145145
};
146146
pub use types::{
147147
ChannelDetails, CustomTlvRecord, DynStore, PeerDetails, SyncAndAsyncKVStore, UserChannelId,
@@ -200,6 +200,7 @@ pub struct Node {
200200
node_metrics: Arc<RwLock<NodeMetrics>>,
201201
om_mailbox: Option<Arc<OnionMessageMailbox>>,
202202
async_payments_role: Option<AsyncPaymentsRole>,
203+
hrn_resolver: Arc<HRNResolver>,
203204
}
204205

205206
impl Node {
@@ -941,6 +942,7 @@ impl Node {
941942
self.bolt12_payment().into(),
942943
Arc::clone(&self.config),
943944
Arc::clone(&self.logger),
945+
Arc::clone(&self.hrn_resolver),
944946
)
945947
}
946948

@@ -961,6 +963,7 @@ impl Node {
961963
self.bolt12_payment(),
962964
Arc::clone(&self.config),
963965
Arc::clone(&self.logger),
966+
Arc::clone(&self.hrn_resolver),
964967
))
965968
}
966969

src/payment/unified.rs

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,32 @@
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_invoice::{Bolt11Invoice, Bolt11InvoiceDescription, Description};
2429

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

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

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

5664
impl UnifiedPayment {
5765
pub(crate) fn new(
5866
onchain_payment: Arc<OnchainPayment>, bolt11_invoice: Arc<Bolt11Payment>,
5967
bolt12_payment: Arc<Bolt12Payment>, config: Arc<Config>, logger: Arc<Logger>,
68+
hrn_resolver: Arc<HRNResolver>,
6069
) -> Self {
61-
Self { onchain_payment, bolt11_invoice, bolt12_payment, config, logger }
70+
Self { onchain_payment, bolt11_invoice, bolt12_payment, config, logger, hrn_resolver }
6271
}
6372

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

154+
let _resolver = &self.hrn_resolver;
155+
145156
let uri_network_checked =
146157
uri.clone().require_network(self.config.network).map_err(|_| Error::InvalidNetwork)?;
147158

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
/// A supertrait that requires that a type implements both [`KVStore`] and [`KVStoreSync`] at the
4042
/// same time.
4143
pub trait SyncAndAsyncKVStore: KVStore + KVStoreSync {}
@@ -142,10 +144,12 @@ pub(crate) type OnionMessenger = lightning::onion_message::messenger::OnionMesse
142144
Arc<MessageRouter>,
143145
Arc<ChannelManager>,
144146
Arc<ChannelManager>,
145-
IgnoringMessageHandler,
147+
Arc<HRNResolver>,
146148
IgnoringMessageHandler,
147149
>;
148150

151+
pub(crate) type HRNResolver = LDKOnionMessageDNSSECHrnResolver<Arc<Graph>, Arc<Logger>>;
152+
149153
pub(crate) type MessageRouter = lightning::onion_message::messenger::DefaultMessageRouter<
150154
Arc<Graph>,
151155
Arc<Logger>,

0 commit comments

Comments
 (0)