Drop Deref indirection for NodeSigner
What changed, and why it matters
This commit is a code cleanup change in the Lightning Dev Kit Rust library. It removes an extra layer of pointer-like wrapping (called Deref indirection) around the NodeSigner type, which is responsible for node-level cryptographic operations like signing messages and deriving keys. The change simplifies type signatures across many files but does not alter what the code actually does or fix any security bug. The commit message explicitly states the goal is to reduce generics and verbosity while providing equivalent behavior.
No security action required. Treat as a normal refactoring commit. Reviewers may want to confirm the blanket NodeSigner impl compiles correctly with downstream custom signers and that no unintended type inference regressions occur, but the change itself is not security-relevant.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The patch refactors generic bounds from NS: Deref<Target: NodeSigner> to NS: NodeSigner throughout the codebase, and adds a blanket impl<T: NodeSigner + ?Sized, N: Deref<Target = T>> NodeSigner for N in lightning/src/sign/mod.rs. This allows smart pointers and references that implement Deref to still be used wherever a NodeSigner is expected, by delegating trait methods through deref(). Call sites change from &*node_signer to &node_signer in a few places. There is no functional change to signing, ECDH, key derivation, or message handling logic. The change is purely an ergonomic/type-system simplification.
Changed components
lightning/src/sign/mod.rslightning/src/ln/channel.rslightning/src/ln/channelmanager.rslightning/src/ln/peer_handler.rslightning/src/onion_message/messenger.rslightning/src/ln/outbound_payment.rslightning/src/ln/onion_payment.rslightning/src/ln/onion_utils.rslightning/src/ln/msgs.rslightning/src/ln/invoice_utils.rslightning/src/ln/functional_test_utils.rslightning/src/blinded_path/message.rslightning/src/blinded_path/payment.rslightning/src/ln/peer_channel_encryptor.rslightning-liquidity/src/manager.rslightning-liquidity/src/lsps5/service.rslightning-background-processor/src/lib.rsInspect captured patch +181 / −270
diff --git a/lightning-background-processor/src/lib.rs b/lightning-background-processor/src/lib.rs
index c8898b0..6731dae 100644
--- a/lightning-background-processor/src/lib.rs
+++ b/lightning-background-processor/src/lib.rs
@@ -421,8 +421,7 @@ pub const NO_ONION_MESSENGER: Option<
Arc<
dyn AOnionMessenger<
EntropySource = &(dyn EntropySource + Send + Sync),
- NodeSigner = dyn lightning::sign::NodeSigner + Send + Sync,
- NS = &(dyn lightning::sign::NodeSigner + Send + Sync),
+ NodeSigner = &(dyn lightning::sign::NodeSigner + Send + Sync),
Logger = dyn Logger + Send + Sync,
L = &'static (dyn Logger + Send + Sync),
NodeIdLookUp = DynChannelManager,
@@ -480,8 +479,7 @@ pub const NO_LIQUIDITY_MANAGER: Option<
Arc<
dyn ALiquidityManager<
EntropySource = &(dyn EntropySource + Send + Sync),
- NodeSigner = dyn lightning::sign::NodeSigner + Send + Sync,
- NS = &(dyn lightning::sign::NodeSigner + Send + Sync),
+ NodeSigner = &(dyn lightning::sign::NodeSigner + Send + Sync),
AChannelManager = DynChannelManager,
CM = &DynChannelManager,
Filter = dyn chain::Filter + Send + Sync,
@@ -505,8 +503,7 @@ pub const NO_LIQUIDITY_MANAGER_SYNC: Option<
Arc<
dyn ALiquidityManagerSync<
EntropySource = &(dyn EntropySource + Send + Sync),
- NodeSigner = dyn lightning::sign::NodeSigner + Send + Sync,
- NS = &(dyn lightning::sign::NodeSigner + Send + Sync),
+ NodeSigner = &(dyn lightning::sign::NodeSigner + Send + Sync),
AChannelManager = DynChannelManager,
CM = &DynChannelManager,
Filter = dyn chain::Filter + Send + Sync,
diff --git a/lightning-liquidity/src/lsps5/service.rs b/lightning-liquidity/src/lsps5/service.rs
index 53fa96e..489d543 100644
--- a/lightning-liquidity/src/lsps5/service.rs
+++ b/lightning-liquidity/src/lsps5/service.rs
@@ -125,10 +125,9 @@ impl Default for LSPS5ServiceConfig {
/// [`LSPS5ServiceEvent::SendWebhookNotification`]: super::event::LSPS5ServiceEvent::SendWebhookNotification
/// [`app_name`]: super::msgs::LSPS5AppName
/// [`lsps5.webhook_registered`]: super::msgs::WebhookNotificationMethod::LSPS5WebhookRegistered
-pub struct LSPS5ServiceHandler<CM: Deref, NS: Deref, K: Deref + Clone, TP: Deref>
+pub struct LSPS5ServiceHandler<CM: Deref, NS: NodeSigner, K: Deref + Clone, TP: Deref>
where
CM::Target: AChannelManager,
- NS::Target: NodeSigner,
K::Target: KVStore,
TP::Target: TimeProvider,
{
@@ -144,10 +143,9 @@ where
persistence_in_flight: AtomicUsize,
}
-impl<CM: Deref, NS: Deref, K: Deref + Clone, TP: Deref> LSPS5ServiceHandler<CM, NS, K, TP>
+impl<CM: Deref, NS: NodeSigner, K: Deref + Clone, TP: Deref> LSPS5ServiceHandler<CM, NS, K, TP>
where
CM::Target: AChannelManager,
- NS::Target: NodeSigner,
K::Target: KVStore,
TP::Target: TimeProvider,
{
@@ -694,11 +692,10 @@ where
}
}
-impl<CM: Deref, NS: Deref, K: Deref + Clone, TP: Deref> LSPSProtocolMessageHandler
+impl<CM: Deref, NS: NodeSigner, K: Deref + Clone, TP: Deref> LSPSProtocolMessageHandler
for LSPS5ServiceHandler<CM, NS, K, TP>
where
CM::Target: AChannelManager,
- NS::Target: NodeSigner,
K::Target: KVStore,
TP::Target: TimeProvider,
{
diff --git a/lightning-liquidity/src/manager.rs b/lightning-liquidity/src/manager.rs
index 14b0fa5..0e897dd 100644
--- a/lightning-liquidity/src/manager.rs
+++ b/lightning-liquidity/src/manager.rs
@@ -106,9 +106,7 @@ pub trait ALiquidityManager {
/// A type implementing [`EntropySource`]
type EntropySource: EntropySource + Clone;
/// A type implementing [`NodeSigner`]
- type NodeSigner: NodeSigner + ?Sized;
- /// A type that may be dereferenced to [`Self::NodeSigner`].
- type NS: Deref<Target = Self::NodeSigner> + Clone;
+ type NodeSigner: NodeSigner + Clone;
/// A type implementing [`AChannelManager`]
type AChannelManager: AChannelManager + ?Sized;
/// A type that may be dereferenced to [`Self::AChannelManager`].
@@ -132,7 +130,7 @@ pub trait ALiquidityManager {
&self,
) -> &LiquidityManager<
Self::EntropySource,
- Self::NS,
+ Self::NodeSigner,
Self::CM,
Self::C,
Self::K,
@@ -143,7 +141,7 @@ pub trait ALiquidityManager {
impl<
ES: EntropySource + Clone,
- NS: Deref + Clone,
+ NS: NodeSigner + Clone,
CM: Deref + Clone,
C: Deref + Clone,
K: Deref + Clone,
@@ -151,15 +149,13 @@ impl<
T: BroadcasterInterface + Clone,
> ALiquidityManager for LiquidityManager<ES, NS, CM, C, K, TP, T>
where
- NS::Target: NodeSigner,
CM::Target: AChannelManager,
C::Target: Filter,
K::Target: KVStore,
TP::Target: TimeProvider,
{
type EntropySource = ES;
- type NodeSigner = NS::Target;
- type NS = NS;
+ type NodeSigner = NS;
type AChannelManager = CM::Target;
type CM = CM;
type Filter = C::Target;
@@ -182,9 +178,7 @@ pub trait ALiquidityManagerSync {
/// A type implementing [`EntropySource`]
type EntropySource: EntropySource + Clone;
/// A type implementing [`NodeSigner`]
- type NodeSigner: NodeSigner + ?Sized;
- /// A type that may be dereferenced to [`Self::NodeSigner`].
- type NS: Deref<Target = Self::NodeSigner> + Clone;
+ type NodeSigner: NodeSigner + Clone;
/// A type implementing [`AChannelManager`]
type AChannelManager: AChannelManager + ?Sized;
/// A type that may be dereferenced to [`Self::AChannelManager`].
@@ -209,7 +203,7 @@ pub trait ALiquidityManagerSync {
&self,
) -> &LiquidityManager<
Self::EntropySource,
- Self::NS,
+ Self::NodeSigner,
Self::CM,
Self::C,
KVStoreSyncWrapper<Self::KS>,
@@ -221,7 +215,7 @@ pub trait ALiquidityManagerSync {
&self,
) -> &LiquidityManagerSync<
Self::EntropySource,
- Self::NS,
+ Self::NodeSigner,
Self::CM,
Self::C,
Self::KS,
@@ -232,7 +226,7 @@ pub trait ALiquidityManagerSync {
impl<
ES: EntropySource + Clone,
- NS: Deref + Clone,
+ NS: NodeSigner + Clone,
CM: Deref + Clone,
C: Deref + Clone,
KS: Deref + Clone,
@@ -240,15 +234,13 @@ impl<
T: BroadcasterInterface + Clone,
> ALiquidityManagerSync for LiquidityManagerSync<ES, NS, CM, C, KS, TP, T>
where
- NS::Target: NodeSigner,
CM::Target: AChannelManager,
C::Target: Filter,
KS::Target: KVStoreSync,
TP::Target: TimeProvider,
{
type EntropySource = ES;
- type NodeSigner = NS::Target;
- type NS = NS;
+ type NodeSigner = NS;
type AChannelManager = CM::Target;
type CM = CM;
type Filter = C::Target;
@@ -264,7 +256,7 @@ where
&self,
) -> &LiquidityManager<
Self::EntropySource,
- Self::NS,
+ Self::NodeSigner,
Self::CM,
Self::C,
KVStoreSyncWrapper<Self::KS>,
@@ -299,14 +291,13 @@ where
/// [`Event::PaymentForwarded`]: lightning::events::Event::PaymentForwarded
pub struct LiquidityManager<
ES: EntropySource + Clone,
- NS: Deref + Clone,
+ NS: NodeSigner + Clone,
CM: Deref + Clone,
C: Deref + Clone,
K: Deref + Clone,
TP: Deref + Clone,
T: BroadcasterInterface + Clone,
> where
- NS::Target: NodeSigner,
CM::Target: AChannelManager,
C::Target: Filter,
K::Target: KVStore,
@@ -336,14 +327,13 @@ pub struct LiquidityManager<
#[cfg(feature = "time")]
impl<
ES: EntropySource + Clone,
- NS: Deref + Clone,
+ NS: NodeSigner + Clone,
CM: Deref + Clone,
C: Deref + Clone,
K: Deref + Clone,
T: BroadcasterInterface + Clone,
> LiquidityManager<ES, NS, CM, C, K, DefaultTimeProvider, T>
where
- NS::Target: NodeSigner,
CM::Target: AChannelManager,
C::Target: Filter,
K::Target: KVStore,
@@ -375,7 +365,7 @@ where
impl<
ES: EntropySource + Clone,
- NS: Deref + Clone,
+ NS: NodeSigner + Clone,
CM: Deref + Clone,
C: Deref + Clone,
K: Deref + Clone,
@@ -383,7 +373,6 @@ impl<
T: BroadcasterInterface + Clone,
> LiquidityManager<ES, NS, CM, C, K, TP, T>
where
- NS::Target: NodeSigner,
CM::Target: AChannelManager,
C::Target: Filter,
K::Target: KVStore,
@@ -800,7 +789,7 @@ where
impl<
ES: EntropySource + Clone,
- NS: Deref + Clone,
+ NS: NodeSigner + Clone,
CM: Deref + Clone,
C: Deref + Clone,
K: Deref + Clone,
@@ -808,7 +797,6 @@ impl<
T: BroadcasterInterface + Clone,
> CustomMessageReader for LiquidityManager<ES, NS, CM, C, K, TP, T>
where
- NS::Target: NodeSigner,
CM::Target: AChannelManager,
C::Target: Filter,
K::Target: KVStore,
@@ -830,7 +818,7 @@ where
impl<
ES: EntropySource + Clone,
- NS: Deref + Clone,
+ NS: NodeSigner + Clone,
CM: Deref + Clone,
C: Deref + Clone,
K: Deref + Clone,
@@ -838,7 +826,6 @@ impl<
T: BroadcasterInterface + Clone,
> CustomMessageHandler for LiquidityManager<ES, NS, CM, C, K, TP, T>
where
- NS::Target: NodeSigner,
CM::Target: AChannelManager,
C::Target: Filter,
K::Target: KVStore,
@@ -962,7 +949,7 @@ where
impl<
ES: EntropySource + Clone,
- NS: Deref + Clone,
+ NS: NodeSigner + Clone,
CM: Deref + Clone,
C: Deref + Clone,
K: Deref + Clone,
@@ -970,7 +957,6 @@ impl<
T: BroadcasterInterface + Clone,
> Listen for LiquidityManager<ES, NS, CM, C, K, TP, T>
where
- NS::Target: NodeSigner,
CM::Target: AChannelManager,
C::Target: Filter,
K::Target: KVStore,
@@ -1006,7 +992,7 @@ where
impl<
ES: EntropySource + Clone,
- NS: Deref + Clone,
+ NS: NodeSigner + Clone,
CM: Deref + Clone,
C: Deref + Clone,
K: Deref + Clone,
@@ -1014,7 +1000,6 @@ impl<
T: BroadcasterInterface + Clone,
> Confirm for LiquidityManager<ES, NS, CM, C, K, TP, T>
where
- NS::Target: NodeSigner,
CM::Target: AChannelManager,
C::Target: Filter,
K::Target: KVStore,
@@ -1050,14 +1035,13 @@ where
/// available.
pub struct LiquidityManagerSync<
ES: EntropySource + Clone,
- NS: Deref + Clone,
+ NS: NodeSigner + Clone,
CM: Deref + Clone,
C: Deref + Clone,
KS: Deref + Clone,
TP: Deref + Clone,
T: BroadcasterInterface + Clone,
> where
- NS::Target: NodeSigner,
CM::Target: AChannelManager,
C::Target: Filter,
KS::Target: KVStoreSync,
@@ -1069,14 +1053,13 @@ pub struct LiquidityManagerSync<
#[cfg(feature = "time")]
impl<
ES: EntropySource + Clone,
- NS: Deref + Clone,
+ NS: NodeSigner + Clone,
CM: Deref + Clone,
C: Deref + Clone,
KS: Deref + Clone,
T: BroadcasterInterface + Clone,
> LiquidityManagerSync<ES, NS, CM, C, KS, DefaultTimeProvider, T>
where
- NS::Target: NodeSigner,
CM::Target: AChannelManager,
KS::Target: KVStoreSync,
C::Target: Filter,
@@ -1119,7 +1102,7 @@ where
impl<
ES: EntropySource + Clone,
- NS: Deref + Clone,
+ NS: NodeSigner + Clone,
CM: Deref + Clone,
C: Deref + Clone,
KS: Deref + Clone,
@@ -1127,7 +1110,6 @@ impl<
T: BroadcasterInterface + Clone,
> LiquidityManagerSync<ES, NS, CM, C, KS, TP, T>
where
- NS::Target: NodeSigner,
CM::Target: AChannelManager,
C::Target: Filter,
KS::Target: KVStoreSync,
@@ -1287,7 +1269,7 @@ where
impl<
ES: EntropySource + Clone,
- NS: Deref + Clone,
+ NS: NodeSigner + Clone,
CM: Deref + Clone,
C: Deref + Clone,
KS: Deref + Clone,
@@ -1295,7 +1277,6 @@ impl<
T: BroadcasterInterface + Clone,
> CustomMessageReader for LiquidityManagerSync<ES, NS, CM, C, KS, TP, T>
where
- NS::Target: NodeSigner,
CM::Target: AChannelManager,
C::Target: Filter,
KS::Target: KVStoreSync,
@@ -1312,7 +1293,7 @@ where
impl<
ES: EntropySource + Clone,
- NS: Deref + Clone,
+ NS: NodeSigner + Clone,
CM: Deref + Clone,
C: Deref + Clone,
KS: Deref + Clone,
@@ -1320,7 +1301,6 @@ impl<
T: BroadcasterInterface + Clone,
> CustomMessageHandler for LiquidityManagerSync<ES, NS, CM, C, KS, TP, T>
where
- NS::Target: NodeSigner,
CM::Target: AChannelManager,
C::Target: Filter,
KS::Target: KVStoreSync,
@@ -1357,7 +1337,7 @@ where
impl<
ES: EntropySource + Clone,
- NS: Deref + Clone,
+ NS: NodeSigner + Clone,
CM: Deref + Clone,
C: Deref + Clone,
KS: Deref + Clone,
@@ -1365,7 +1345,6 @@ impl<
T: BroadcasterInterface + Clone,
> Listen for LiquidityManagerSync<ES, NS, CM, C, KS, TP, T>
where
- NS::Target: NodeSigner,
CM::Target: AChannelManager,
C::Target: Filter,
KS::Target: KVStoreSync,
@@ -1385,7 +1364,7 @@ where
impl<
ES: EntropySource + Clone,
- NS: Deref + Clone,
+ NS: NodeSigner + Clone,
CM: Deref + Clone,
C: Deref + Clone,
KS: Deref + Clone,
@@ -1393,7 +1372,6 @@ impl<
T: BroadcasterInterface + Clone,
> Confirm for LiquidityManagerSync<ES, NS, CM, C, KS, TP, T>
where
- NS::Target: NodeSigner,
CM::Target: AChannelManager,
C::Target: Filter,
KS::Target: KVStoreSync,
diff --git a/lightning/src/blinded_path/message.rs b/lightning/src/blinded_path/message.rs
index c914458..68c4a60 100644
--- a/lightning/src/blinded_path/message.rs
+++ b/lightning/src/blinded_path/message.rs
@@ -192,11 +192,10 @@ impl BlindedMessagePath {
/// introduction node.
///
/// Will only modify `self` when returning `Ok`.
- pub fn advance_path_by_one<NS: Deref, NL: Deref, T>(
+ pub fn advance_path_by_one<NS: NodeSigner, NL: Deref, T>(
&mut self, node_signer: &NS, node_id_lookup: &NL, secp_ctx: &Secp256k1<T>,
) -> Result<(), ()>
where
- NS::Target: NodeSigner,
NL::Target: NodeIdLookUp,
T: secp256k1::Signing + secp256k1::Verification,
{
diff --git a/lightning/src/blinded_path/payment.rs b/lightning/src/blinded_path/payment.rs
index e195f5a..df0626e 100644
--- a/lightning/src/blinded_path/payment.rs
+++ b/lightning/src/blinded_path/payment.rs
@@ -230,11 +230,10 @@ impl BlindedPaymentPath {
/// introduction node.
///
/// Will only modify `self` when returning `Ok`.
- pub fn advance_path_by_one<NS: Deref, NL: Deref, T>(
+ pub fn advance_path_by_one<NS: NodeSigner, NL: Deref, T>(
&mut self, node_signer: &NS, node_id_lookup: &NL, secp_ctx: &Secp256k1<T>,
) -> Result<(), ()>
where
- NS::Target: NodeSigner,
NL::Target: NodeIdLookUp,
T: secp256k1::Signing + secp256k1::Verification,
{
@@ -265,12 +264,9 @@ impl BlindedPaymentPath {
Ok(())
}
- pub(crate) fn decrypt_intro_payload<NS: Deref>(
+ pub(crate) fn decrypt_intro_payload<NS: NodeSigner>(
&self, node_signer: &NS,
- ) -> Result<(BlindedPaymentTlvs, SharedSecret), ()>
- where
- NS::Target: NodeSigner,
- {
+ ) -> Result<(BlindedPaymentTlvs, SharedSecret), ()> {
let control_tlvs_ss =
node_signer.ecdh(Recipient::Node, &self.inner_path.blinding_point, None)?;
let rho = onion_utils::gen_rho_from_shared_secret(&control_tlvs_ss.secret_bytes());
diff --git a/lightning/src/ln/channel.rs b/lightning/src/ln/channel.rs
index 38502c9..31c3996 100644
--- a/lightning/src/ln/channel.rs
+++ b/lightning/src/ln/channel.rs
@@ -7861,12 +7861,11 @@ where
/// and the channel is now usable (and public), this may generate an announcement_signatures to
/// reply with.
#[rustfmt::skip]
- pub fn channel_ready<NS: Deref, L: Deref>(
+ pub fn channel_ready<NS: NodeSigner, L: Deref>(
&mut self, msg: &msgs::ChannelReady, node_signer: &NS, chain_hash: ChainHash,
user_config: &UserConfig, best_block: &BestBlock, logger: &L
) -> Result<Option<msgs::AnnouncementSignatures>, ChannelError>
where
- NS::Target: NodeSigner,
L::Target: Logger
{
if self.context.channel_state.is_peer_disconnected() {
@@ -9552,13 +9551,12 @@ where
/// successfully and we should restore normal operation. Returns messages which should be sent
/// to the remote side.
#[rustfmt::skip]
- pub fn monitor_updating_restored<L: Deref, NS: Deref, CBP>(
+ pub fn monitor_updating_restored<L: Deref, NS: NodeSigner, CBP>(
&mut self, logger: &L, node_signer: &NS, chain_hash: ChainHash,
user_config: &UserConfig, best_block_height: u32, path_for_release_htlc: CBP
) -> MonitorRestoreUpdates
where
L::Target: Logger,
- NS::Target: NodeSigner,
CBP: Fn(u64) -> BlindedMessagePath
{
assert!(self.context.channel_state.is_monitor_update_in_progress());
@@ -10044,14 +10042,13 @@ where
/// May panic if some calls other than message-handling calls (which will all Err immediately)
/// have been called between remove_uncommitted_htlcs_and_mark_paused and this call.
#[rustfmt::skip]
- pub fn channel_reestablish<L: Deref, NS: Deref, CBP>(
+ pub fn channel_reestablish<L: Deref, NS: NodeSigner, CBP>(
&mut self, msg: &msgs::ChannelReestablish, logger: &L, node_signer: &NS,
chain_hash: ChainHash, user_config: &UserConfig, best_block: &BestBlock,
path_for_release_htlc: CBP,
) -> Result<ReestablishResponses, ChannelError>
where
L::Target: Logger,
- NS::Target: NodeSigner,
CBP: Fn(u64) -> BlindedMessagePath
{
if !self.context.channel_state.is_peer_disconnected() {
@@ -11397,12 +11394,11 @@ where
}
/// Returns `Some` if a splice [`FundingScope`] was promoted.
- fn maybe_promote_splice_funding<NS: Deref, L: Deref>(
+ fn maybe_promote_splice_funding<NS: NodeSigner, L: Deref>(
&mut self, node_signer: &NS, chain_hash: ChainHash, user_config: &UserConfig,
block_height: u32, logger: &L,
) -> Option<SpliceFundingPromotion>
where
- NS::Target: NodeSigner,
L::Target: Logger,
{
debug_assert!(self.pending_splice.is_some());
@@ -11518,12 +11514,11 @@ where
/// In the first case, we store the confirmation height and calculating the short channel id.
/// In the second, we simply return an Err indicating we need to be force-closed now.
#[rustfmt::skip]
- pub fn transactions_confirmed<NS: Deref, L: Deref>(
+ pub fn transactions_confirmed<NS: NodeSigner, L: Deref>(
&mut self, block_hash: &BlockHash, height: u32, txdata: &TransactionData,
chain_hash: ChainHash, node_signer: &NS, user_config: &UserConfig, logger: &L
) -> Result<(Option<FundingConfirmedMessage>, Option<msgs::AnnouncementSignatures>), ClosureReason>
where
- NS::Target: NodeSigner,
L::Target: Logger
{
for &(index_in_block, tx) in txdata.iter() {
@@ -11616,12 +11611,11 @@ where
///
/// May return some HTLCs (and their payment_hash) which have timed out and should be failed
/// back.
- pub fn best_block_updated<NS: Deref, L: Deref>(
+ pub fn best_block_updated<NS: NodeSigner, L: Deref>(
&mut self, height: u32, highest_header_time: Option<u32>, chain_hash: ChainHash,
node_signer: &NS, user_config: &UserConfig, logger: &L,
) -> Result<BestBlockUpdatedRes, ClosureReason>
where
- NS::Target: NodeSigner,
L::Target: Logger,
{
self.do_best_block_updated(
@@ -11633,12 +11627,11 @@ where
}
#[rustfmt::skip]
- fn do_best_block_updated<NS: Deref, L: Deref>(
+ fn do_best_block_updated<NS: NodeSigner, L: Deref>(
&mut self, height: u32, highest_header_time: Option<u32>,
chain_node_signer: Option<(ChainHash, &NS, &UserConfig)>, logger: &L
) -> Result<(Option<FundingConfirmedMessage>, Vec<(HTLCSource, PaymentHash)>, Option<msgs::AnnouncementSignatures>), ClosureReason>
where
- NS::Target: NodeSigner,
L::Target: Logger
{
let mut timed_out_htlcs = Vec::new();
@@ -11866,9 +11859,9 @@ where
///
/// [`ChannelReady`]: crate::ln::msgs::ChannelReady
#[rustfmt::skip]
- fn get_channel_announcement<NS: Deref>(
+ fn get_channel_announcement<NS: NodeSigner>(
&self, node_signer: &NS, chain_hash: ChainHash, user_config: &UserConfig,
- ) -> Result<msgs::UnsignedChannelAnnouncement, ChannelError> where NS::Target: NodeSigner {
+ ) -> Result<msgs::UnsignedChannelAnnouncement, ChannelError> {
if !self.context.config.announce_for_forwarding {
return Err(ChannelError::Ignore("Channel is not available for public announcements".to_owned()));
}
@@ -11898,12 +11891,11 @@ where
}
#[rustfmt::skip]
- fn get_announcement_sigs<NS: Deref, L: Deref>(
+ fn get_announcement_sigs<NS: NodeSigner, L: Deref>(
&mut self, node_signer: &NS, chain_hash: ChainHash, user_config: &UserConfig,
best_block_height: u32, logger: &L
) -> Option<msgs::AnnouncementSignatures>
where
- NS::Target: NodeSigner,
L::Target: Logger
{
if self.funding.funding_tx_confirmation_height == 0 || self.funding.funding_tx_confirmation_height + 5 > best_block_height {
@@ -11972,9 +11964,9 @@ where
/// Signs the given channel announcement, returning a ChannelError::Ignore if no keys are
/// available.
#[rustfmt::skip]
- fn sign_channel_announcement<NS: Deref>(
+ fn sign_channel_announcement<NS: NodeSigner>(
&self, node_signer: &NS, announcement: msgs::UnsignedChannelAnnouncement
- ) -> Result<msgs::ChannelAnnouncement, ChannelError> where NS::Target: NodeSigner {
+ ) -> Result<msgs::ChannelAnnouncement, ChannelError> {
if let Some((their_node_sig, their_bitcoin_sig)) = self.context.announcement_sigs {
let our_node_key = NodeId::from_pubkey(&node_signer.get_node_id(Recipient::Node)
.map_err(|_| ChannelError::Ignore("Signer failed to retrieve own public key".to_owned()))?);
@@ -12009,10 +12001,10 @@ where
/// channel_announcement message which we can broadcast and storing our counterparty's
/// signatures for later reconstruction/rebroadcast of the channel_announcement.
#[rustfmt::skip]
- pub fn announcement_signatures<NS: Deref>(
+ pub fn announcement_signatures<NS: NodeSigner>(
&mut self, node_signer: &NS, chain_hash: ChainHash, best_block_height: u32,
msg: &msgs::AnnouncementSignatures, user_config: &UserConfig
- ) -> Result<msgs::ChannelAnnouncement, ChannelError> where NS::Target: NodeSigner {
+ ) -> Result<msgs::ChannelAnnouncement, ChannelError> {
let announcement = self.get_channel_announcement(node_signer, chain_hash, user_config)?;
let msghash = hash_to_message!(&Sha256d::hash(&announcement.encode()[..])[..]);
@@ -12040,9 +12032,9 @@ where
/// Gets a signed channel_announcement for this channel, if we previously received an
/// announcement_signatures from our counterparty.
#[rustfmt::skip]
- pub fn get_signed_channel_announcement<NS: Deref>(
+ pub fn get_signed_channel_announcement<NS: NodeSigner>(
&self, node_signer: &NS, chain_hash: ChainHash, best_block_height: u32, user_config: &UserConfig
- ) -> Option<msgs::ChannelAnnouncement> where NS::Target: NodeSigner {
+ ) -> Option<msgs::ChannelAnnouncement> {
if self.funding.funding_tx_confirmation_height == 0 || self.funding.funding_tx_confirmation_height + 5 > best_block_height {
return None;
}
@@ -12741,12 +12733,11 @@ where
Ok((holder_balance_floor, counterparty_balance_floor))
}
- pub fn splice_locked<NS: Deref, L: Deref>(
+ pub fn splice_locked<NS: NodeSigner, L: Deref>(
&mut self, msg: &msgs::SpliceLocked, node_signer: &NS, chain_hash: ChainHash,
user_config: &UserConfig, block_height: u32, logger: &L,
) -> Result<Option<SpliceFundingPromotion>, ChannelError>
where
- NS::Target: NodeSigner,
L::Target: Logger,
{
log_info!(logger, "Received splice_locked txid {} from our peer", msg.splice_txid,);
diff --git a/lightning/src/ln/channelmanager.rs b/lightning/src/ln/channelmanager.rs
index bcb5b2a..99adfb6 100644
--- a/lightning/src/ln/channelmanager.rs
+++ b/lightning/src/ln/channelmanager.rs
@@ -1163,11 +1163,11 @@ impl ClaimablePayments {
///
/// If no payment is found, `Err(Vec::new())` is returned.
#[rustfmt::skip]
- fn begin_claiming_payment<L: Deref, S: Deref>(
+ fn begin_claiming_payment<L: Deref, S: NodeSigner>(
&mut self, payment_hash: PaymentHash, node_signer: &S, logger: &L,
inbound_payment_id_secret: &[u8; 32], custom_tlvs_known: bool,
) -> Result<(Vec<ClaimableHTLC>, ClaimingPayment), Vec<ClaimableHTLC>>
- where L::Target: Logger, S::Target: NodeSigner,
+ where L::Target: Logger,
{
match self.claimable_payments.remove(&payment_hash) {
Some(payment) => {
@@ -1793,9 +1793,7 @@ pub trait AChannelManager {
/// A type implementing [`EntropySource`].
type EntropySource: EntropySource;
/// A type implementing [`NodeSigner`].
- type NodeSigner: NodeSigner + ?Sized;
- /// A type that may be dereferenced to [`Self::NodeSigner`].
- type NS: Deref<Target = Self::NodeSigner>;
+ type NodeSigner: NodeSigner;
/// A type implementing [`EcdsaChannelSigner`].
type Signer: EcdsaChannelSigner + Sized;
/// A type implementing [`SignerProvider`] for [`Self::Signer`].
@@ -1825,7 +1823,7 @@ pub trait AChannelManager {
Self::M,
Self::Broadcaster,
Self::EntropySource,
- Self::NS,
+ Self::NodeSigner,
Self::SP,
Self::F,
Self::R,
@@ -1838,7 +1836,7 @@ impl<
M: Deref,
T: BroadcasterInterface,
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
SP: Deref,
F: Deref,
R: Deref,
@@ -1847,7 +1845,6 @@ impl<
> AChannelManager for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
- NS::Target: NodeSigner,
SP::Target: SignerProvider,
F::Target: FeeEstimator,
R::Target: Router,
@@ -1858,8 +1855,7 @@ where
type M = M;
type Broadcaster = T;
type EntropySource = ES;
- type NodeSigner = NS::Target;
- type NS = NS;
+ type NodeSigner = NS;
type Signer = <SP::Target as SignerProvider>::EcdsaSigner;
type SignerProvider = SP::Target;
type SP = SP;
@@ -2619,7 +2615,7 @@ pub struct ChannelManager<
M: Deref,
T: BroadcasterInterface,
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
SP: Deref,
F: Deref,
R: Deref,
@@ -2627,7 +2623,6 @@ pub struct ChannelManager<
L: Deref,
> where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
- NS::Target: NodeSigner,
SP::Target: SignerProvider,
F::Target: FeeEstimator,
R::Target: Router,
@@ -3407,7 +3402,7 @@ impl<
M: Deref,
T: BroadcasterInterface,
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
SP: Deref,
F: Deref,
R: Deref,
@@ -3416,7 +3411,6 @@ impl<
> ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
- NS::Target: NodeSigner,
SP::Target: SignerProvider,
F::Target: FeeEstimator,
R::Target: Router,
@@ -6936,7 +6930,7 @@ where
let (next_hop, next_packet_details_opt) =
match decode_incoming_update_add_htlc_onion(
&update_add_htlc,
- &*self.node_signer,
+ &self.node_signer,
&*self.logger,
&self.secp_ctx,
) {
@@ -6957,7 +6951,7 @@ where
next_hop_hmac,
new_packet_bytes,
next_packet_details,
- &*self.node_signer,
+ &self.node_signer,
&self.secp_ctx,
);
@@ -7412,7 +7406,7 @@ where
onion_packet.hmac,
payment_hash,
None,
- &*self.node_signer,
+ &self.node_signer,
);
let next_hop = match decode_res {
Ok(res) => res,
@@ -13546,7 +13540,7 @@ impl<
M: Deref,
T: BroadcasterInterface,
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
SP: Deref,
F: Deref,
R: Deref,
@@ -13555,7 +13549,6 @@ impl<
> ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
- NS::Target: NodeSigner,
SP::Target: SignerProvider,
F::Target: FeeEstimator,
R::Target: Router,
@@ -14421,7 +14414,7 @@ impl<
M: Deref,
T: BroadcasterInterface,
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
SP: Deref,
F: Deref,
R: Deref,
@@ -14430,7 +14423,6 @@ impl<
> BaseMessageHandler for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
- NS::Target: NodeSigner,
SP::Target: SignerProvider,
F::Target: FeeEstimator,
R::Target: Router,
@@ -14790,7 +14782,7 @@ impl<
M: Deref,
T: BroadcasterInterface,
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
SP: Deref,
F: Deref,
R: Deref,
@@ -14799,7 +14791,6 @@ impl<
> EventsProvider for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
- NS::Target: NodeSigner,
SP::Target: SignerProvider,
F::Target: FeeEstimator,
R::Target: Router,
@@ -14823,7 +14814,7 @@ impl<
M: Deref,
T: BroadcasterInterface,
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
SP: Deref,
F: Deref,
R: Deref,
@@ -14832,7 +14823,6 @@ impl<
> chain::Listen for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
- NS::Target: NodeSigner,
SP::Target: SignerProvider,
F::Target: FeeEstimator,
R::Target: Router,
@@ -14882,7 +14872,7 @@ impl<
M: Deref,
T: BroadcasterInterface,
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
SP: Deref,
F: Deref,
R: Deref,
@@ -14891,7 +14881,6 @@ impl<
> chain::Confirm for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
- NS::Target: NodeSigner,
SP::Target: SignerProvider,
F::Target: FeeEstimator,
R::Target: Router,
@@ -15053,7 +15042,7 @@ impl<
M: Deref,
T: BroadcasterInterface,
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
SP: Deref,
F: Deref,
R: Deref,
@@ -15062,7 +15051,6 @@ impl<
> ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
- NS::Target: NodeSigner,
SP::Target: SignerProvider,
F::Target: FeeEstimator,
R::Target: Router,
@@ -15413,7 +15401,7 @@ impl<
M: Deref,
T: BroadcasterInterface,
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
SP: Deref,
F: Deref,
R: Deref,
@@ -15422,7 +15410,6 @@ impl<
> ChannelMessageHandler for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
- NS::Target: NodeSigner,
SP::Target: SignerProvider,
F::Target: FeeEstimator,
R::Target: Router,
@@ -15986,7 +15973,7 @@ impl<
M: Deref,
T: BroadcasterInterface,
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
SP: Deref,
F: Deref,
R: Deref,
@@ -15995,7 +15982,6 @@ impl<
> OffersMessageHandler for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
- NS::Target: NodeSigner,
SP::Target: SignerProvider,
F::Target: FeeEstimator,
R::Target: Router,
@@ -16202,7 +16188,7 @@ impl<
M: Deref,
T: BroadcasterInterface,
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
SP: Deref,
F: Deref,
R: Deref,
@@ -16211,7 +16197,6 @@ impl<
> AsyncPaymentsMessageHandler for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
- NS::Target: NodeSigner,
SP::Target: SignerProvider,
F::Target: FeeEstimator,
R::Target: Router,
@@ -16445,7 +16430,7 @@ impl<
M: Deref,
T: BroadcasterInterface,
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
SP: Deref,
F: Deref,
R: Deref,
@@ -16454,7 +16439,6 @@ impl<
> DNSResolverMessageHandler for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
- NS::Target: NodeSigner,
SP::Target: SignerProvider,
F::Target: FeeEstimator,
R::Target: Router,
@@ -16511,7 +16495,7 @@ impl<
M: Deref,
T: BroadcasterInterface,
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
SP: Deref,
F: Deref,
R: Deref,
@@ -16520,7 +16504,6 @@ impl<
> NodeIdLookUp for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
- NS::Target: NodeSigner,
SP::Target: SignerProvider,
F::Target: FeeEstimator,
R::Target: Router,
@@ -17025,7 +17008,7 @@ impl<
M: Deref,
T: BroadcasterInterface,
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
SP: Deref,
F: Deref,
R: Deref,
@@ -17034,7 +17017,6 @@ impl<
> Writeable for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
- NS::Target: NodeSigner,
SP::Target: SignerProvider,
F::Target: FeeEstimator,
R::Target: Router,
@@ -17390,7 +17372,7 @@ pub struct ChannelManagerReadArgs<
M: Deref,
T: BroadcasterInterface,
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
SP: Deref,
F: Deref,
R: Deref,
@@ -17398,7 +17380,6 @@ pub struct ChannelManagerReadArgs<
L: Deref + Clone,
> where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
- NS::Target: NodeSigner,
SP::Target: SignerProvider,
F::Target: FeeEstimator,
R::Target: Router,
@@ -17468,7 +17449,7 @@ impl<
M: Deref,
T: BroadcasterInterface,
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
SP: Deref,
F: Deref,
R: Deref,
@@ -17477,7 +17458,6 @@ impl<
> ChannelManagerReadArgs<'a, M, T, ES, NS, SP, F, R, MR, L>
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
- NS::Target: NodeSigner,
SP::Target: SignerProvider,
F::Target: FeeEstimator,
R::Target: Router,
@@ -17554,7 +17534,7 @@ impl<
M: Deref,
T: BroadcasterInterface,
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
SP: Deref,
F: Deref,
R: Deref,
@@ -17564,7 +17544,6 @@ impl<
for (BlockHash, Arc<ChannelManager<M, T, ES, NS, SP, F, R, MR, L>>)
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
- NS::Target: NodeSigner,
SP::Target: SignerProvider,
F::Target: FeeEstimator,
R::Target: Router,
@@ -17585,7 +17564,7 @@ impl<
M: Deref,
T: BroadcasterInterface,
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
SP: Deref,
F: Deref,
R: Deref,
@@ -17595,7 +17574,6 @@ impl<
for (BlockHash, ChannelManager<M, T, ES, NS, SP, F, R, MR, L>)
where
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
- NS::Target: NodeSigner,
SP::Target: SignerProvider,
F::Target: FeeEstimator,
R::Target: Router,
diff --git a/lightning/src/ln/functional_test_utils.rs b/lightning/src/ln/functional_test_utils.rs
index c68a2c7..e560e70 100644
--- a/lightning/src/ln/functional_test_utils.rs
+++ b/lightning/src/ln/functional_test_utils.rs
@@ -735,7 +735,7 @@ pub trait NodeHolder {
<Self::CM as AChannelManager>::M,
<Self::CM as AChannelManager>::Broadcaster,
<Self::CM as AChannelManager>::EntropySource,
- <Self::CM as AChannelManager>::NS,
+ <Self::CM as AChannelManager>::NodeSigner,
<Self::CM as AChannelManager>::SP,
<Self::CM as AChannelManager>::F,
<Self::CM as AChannelManager>::R,
@@ -752,7 +752,7 @@ impl<H: NodeHolder> NodeHolder for &H {
<Self::CM as AChannelManager>::M,
<Self::CM as AChannelManager>::Broadcaster,
<Self::CM as AChannelManager>::EntropySource,
- <Self::CM as AChannelManager>::NS,
+ <Self::CM as AChannelManager>::NodeSigner,
<Self::CM as AChannelManager>::SP,
<Self::CM as AChannelManager>::F,
<Self::CM as AChannelManager>::R,
diff --git a/lightning/src/ln/invoice_utils.rs b/lightning/src/ln/invoice_utils.rs
index 5e4036b..e99f53a 100644
--- a/lightning/src/ln/invoice_utils.rs
+++ b/lightning/src/ln/invoice_utils.rs
@@ -67,14 +67,13 @@ use core::time::Duration;
feature = "std",
doc = "This can be used in a `no_std` environment, where [`std::time::SystemTime`] is not available and the current time is supplied by the caller."
)]
-pub fn create_phantom_invoice<ES: EntropySource, NS: Deref, L: Deref>(
+pub fn create_phantom_invoice<ES: EntropySource, NS: NodeSigner, L: Deref>(
amt_msat: Option<u64>, payment_hash: Option<PaymentHash>, description: String,
invoice_expiry_delta_secs: u32, phantom_route_hints: Vec<PhantomRouteHints>,
entropy_source: ES, node_signer: NS, logger: L, network: Currency,
min_final_cltv_expiry_delta: Option<u16>, duration_since_epoch: Duration,
) -> Result<Bolt11Invoice, SignOrCreationError<()>>
where
- NS::Target: NodeSigner,
L::Target: Logger,
{
let description = Description::new(description).map_err(SignOrCreationError::CreationError)?;
@@ -134,14 +133,13 @@ where
feature = "std",
doc = "This version can be used in a `no_std` environment, where [`std::time::SystemTime`] is not available and the current time is supplied by the caller."
)]
-pub fn create_phantom_invoice_with_description_hash<ES: EntropySource, NS: Deref, L: Deref>(
+pub fn create_phantom_invoice_with_description_hash<ES: EntropySource, NS: NodeSigner, L: Deref>(
amt_msat: Option<u64>, payment_hash: Option<PaymentHash>, invoice_expiry_delta_secs: u32,
description_hash: Sha256, phantom_route_hints: Vec<PhantomRouteHints>, entropy_source: ES,
node_signer: NS, logger: L, network: Currency, min_final_cltv_expiry_delta: Option<u16>,
duration_since_epoch: Duration,
) -> Result<Bolt11Invoice, SignOrCreationError<()>>
where
- NS::Target: NodeSigner,
L::Target: Logger,
{
_create_phantom_invoice::<ES, NS, L>(
@@ -161,14 +159,13 @@ where
const MAX_CHANNEL_HINTS: usize = 3;
-fn _create_phantom_invoice<ES: EntropySource, NS: Deref, L: Deref>(
+fn _create_phantom_invoice<ES: EntropySource, NS: NodeSigner, L: Deref>(
amt_msat: Option<u64>, payment_hash: Option<PaymentHash>,
description: Bolt11InvoiceDescription, invoice_expiry_delta_secs: u32,
phantom_route_hints: Vec<PhantomRouteHints>, entropy_source: ES, node_signer: NS, logger: L,
network: Currency, min_final_cltv_expiry_delta: Option<u16>, duration_since_epoch: Duration,
) -> Result<Bolt11Invoice, SignOrCreationError<()>>
where
- NS::Target: NodeSigner,
L::Target: Logger,
{
if phantom_route_hints.is_empty() {
diff --git a/lightning/src/ln/msgs.rs b/lightning/src/ln/msgs.rs
index 2bb2b24..2f7d1c4 100644
--- a/lightning/src/ln/msgs.rs
+++ b/lightning/src/ln/msgs.rs
@@ -50,7 +50,6 @@ use crate::io_extras::read_to_end;
use core::fmt;
use core::fmt::Debug;
use core::fmt::Display;
-use core::ops::Deref;
#[cfg(feature = "std")]
use core::str::FromStr;
#[cfg(feature = "std")]
@@ -3637,10 +3636,7 @@ impl<'a> Writeable for OutboundTrampolinePayload<'a> {
}
}
-impl<NS: Deref> ReadableArgs<(Option<PublicKey>, NS)> for InboundOnionPayload
-where
- NS::Target: NodeSigner,
-{
+impl<NS: NodeSigner> ReadableArgs<(Option<PublicKey>, NS)> for InboundOnionPayload {
fn read<R: Read>(r: &mut R, args: (Option<PublicKey>, NS)) -> Result<Self, DecodeError> {
let (update_add_blinding_point, node_signer) = args;
@@ -3824,10 +3820,7 @@ where
}
}
-impl<NS: Deref> ReadableArgs<(Option<PublicKey>, NS)> for InboundTrampolinePayload
-where
- NS::Target: NodeSigner,
-{
+impl<NS: NodeSigner> ReadableArgs<(Option<PublicKey>, NS)> for InboundTrampolinePayload {
fn read<R: Read>(r: &mut R, args: (Option<PublicKey>, NS)) -> Result<Self, DecodeError> {
let (update_add_blinding_point, node_signer) = args;
let receive_auth_key = node_signer.get_receive_auth_key();
diff --git a/lightning/src/ln/onion_payment.rs b/lightning/src/ln/onion_payment.rs
index e7b5f55..ed0de39 100644
--- a/lightning/src/ln/onion_payment.rs
+++ b/lightning/src/ln/onion_payment.rs
@@ -487,16 +487,15 @@ pub(super) fn create_recv_pending_htlc_info(
///
/// [`Event::PaymentClaimable`]: crate::events::Event::PaymentClaimable
#[rustfmt::skip]
-pub fn peel_payment_onion<NS: Deref, L: Deref, T: secp256k1::Verification>(
+pub fn peel_payment_onion<NS: NodeSigner, L: Deref, T: secp256k1::Verification>(
msg: &msgs::UpdateAddHTLC, node_signer: NS, logger: L, secp_ctx: &Secp256k1<T>,
cur_height: u32, allow_skimmed_fees: bool,
) -> Result<PendingHTLCInfo, InboundHTLCErr>
where
- NS::Target: NodeSigner,
L::Target: Logger,
{
let (hop, next_packet_details_opt) =
- decode_incoming_update_add_htlc_onion(msg, &*node_signer, &*logger, secp_ctx
+ decode_incoming_update_add_htlc_onion(msg, &node_signer, &*logger, secp_ctx
).map_err(|(msg, failure_reason)| {
let (reason, err_data) = match msg {
HTLCFailureMsg::Malformed(_) => (failure_reason, Vec::new()),
@@ -551,7 +550,7 @@ where
next_hop_hmac,
new_packet_bytes,
next_packet_details,
- &*node_signer,
+ &node_signer,
secp_ctx
);
@@ -586,11 +585,10 @@ pub(super) struct NextPacketDetails {
}
#[rustfmt::skip]
-pub(super) fn decode_incoming_update_add_htlc_onion<NS: Deref, L: Deref, T: secp256k1::Verification>(
+pub(super) fn decode_incoming_update_add_htlc_onion<NS: NodeSigner, L: Deref, T: secp256k1::Verification>(
msg: &msgs::UpdateAddHTLC, node_signer: NS, logger: L, secp_ctx: &Secp256k1<T>,
) -> Result<(onion_utils::Hop, Option<NextPacketDetails>), (HTLCFailureMsg, LocalHTLCFailureReason)>
where
- NS::Target: NodeSigner,
L::Target: Logger,
{
let encode_malformed_error = |message: &str, failure_reason: LocalHTLCFailureReason| {
diff --git a/lightning/src/ln/onion_utils.rs b/lightning/src/ln/onion_utils.rs
index 7cf1062..63d92fd 100644
--- a/lightning/src/ln/onion_utils.rs
+++ b/lightning/src/ln/onion_utils.rs
@@ -2322,13 +2322,10 @@ pub(crate) enum OnionDecodeErr {
},
}
-pub(crate) fn decode_next_payment_hop<NS: Deref>(
+pub(crate) fn decode_next_payment_hop<NS: NodeSigner>(
recipient: Recipient, hop_pubkey: &PublicKey, hop_data: &[u8], hmac_bytes: [u8; 32],
payment_hash: PaymentHash, blinding_point: Option<PublicKey>, node_signer: NS,
-) -> Result<Hop, OnionDecodeErr>
-where
- NS::Target: NodeSigner,
-{
+) -> Result<Hop, OnionDecodeErr> {
let blinded_node_id_tweak = blinding_point.map(|bp| {
let blinded_tlvs_ss = node_signer.ecdh(recipient, &bp, None).unwrap().secret_bytes();
let mut hmac = HmacEngine::<Sha256>::new(b"blinded_node_id");
@@ -2343,7 +2340,7 @@ where
hop_data,
hmac_bytes,
Some(payment_hash),
- (blinding_point, &(*node_signer)),
+ (blinding_point, &node_signer),
);
match decoded_hop {
Ok((next_hop_data, Some((next_hop_hmac, FixedSizeOnionPacket(new_packet_bytes))))) => {
@@ -2417,7 +2414,7 @@ where
&hop_data.trampoline_packet.hop_data,
hop_data.trampoline_packet.hmac,
Some(payment_hash),
- (blinding_point, node_signer),
+ (blinding_point, &node_signer),
);
match decoded_trampoline_hop {
Ok((
@@ -2555,14 +2552,11 @@ where
///
/// This function performs no validation and does not enqueue or forward the HTLC.
/// It only reconstructs the next `UpdateAddHTLC` for further local processing.
-pub(super) fn peel_dummy_hop_update_add_htlc<NS: Deref, T: secp256k1::Verification>(
+pub(super) fn peel_dummy_hop_update_add_htlc<NS: NodeSigner, T: secp256k1::Verification>(
msg: &UpdateAddHTLC, dummy_hop_data: InboundOnionDummyPayload, next_hop_hmac: [u8; 32],
new_packet_bytes: [u8; ONION_DATA_LEN], next_packet_details: NextPacketDetails,
node_signer: NS, secp_ctx: &Secp256k1<T>,
-) -> UpdateAddHTLC
-where
- NS::Target: NodeSigner,
-{
+) -> UpdateAddHTLC {
let NextPacketDetails {
next_packet_pubkey,
outgoing_amt_msat,
diff --git a/lightning/src/ln/outbound_payment.rs b/lightning/src/ln/outbound_payment.rs
index caf31a7..e2fc21c 100644
--- a/lightning/src/ln/outbound_payment.rs
+++ b/lightning/src/ln/outbound_payment.rs
@@ -866,7 +866,7 @@ impl OutboundPayments {
impl OutboundPayments {
#[rustfmt::skip]
- pub(super) fn send_payment<R: Deref, ES: EntropySource, NS: Deref, IH, SP, L: Deref>(
+ pub(super) fn send_payment<R: Deref, ES: EntropySource, NS: NodeSigner, IH, SP, L: Deref>(
&self, payment_hash: PaymentHash, recipient_onion: RecipientOnionFields, payment_id: PaymentId,
retry_strategy: Retry, route_params: RouteParameters, router: &R,
first_hops: Vec<ChannelDetails>, compute_inflight_htlcs: IH, entropy_source: &ES,
@@ -876,7 +876,6 @@ impl OutboundPayments {
) -> Result<(), RetryableSendFailure>
where
R::Target: Router,
- NS::Target: NodeSigner,
IH: Fn() -> InFlightHtlcs,
SP: Fn(SendAlongPathArgs) -> Result<(), APIError>,
L::Target: Logger,
@@ -887,7 +886,7 @@ impl OutboundPayments {
}
#[rustfmt::skip]
- pub(super) fn send_spontaneous_payment<R: Deref, ES: EntropySource, NS: Deref, IH, SP, L: Deref>(
+ pub(super) fn send_spontaneous_payment<R: Deref, ES: EntropySource, NS: NodeSigner, IH, SP, L: Deref>(
&self, payment_preimage: Option<PaymentPreimage>, recipient_onion: RecipientOnionFields,
payment_id: PaymentId, retry_strategy: Retry, route_params: RouteParameters, router: &R,
first_hops: Vec<ChannelDetails>, inflight_htlcs: IH, entropy_source: &ES,
@@ -897,7 +896,6 @@ impl OutboundPayments {
) -> Result<PaymentHash, RetryableSendFailure>
where
R::Target: Router,
- NS::Target: NodeSigner,
IH: Fn() -> InFlightHtlcs,
SP: Fn(SendAlongPathArgs) -> Result<(), APIError>,
L::Target: Logger,
@@ -913,7 +911,7 @@ impl OutboundPayments {
}
#[rustfmt::skip]
- pub(super) fn pay_for_bolt11_invoice<R: Deref, ES: EntropySource, NS: Deref, IH, SP, L: Deref>(
+ pub(super) fn pay_for_bolt11_invoice<R: Deref, ES: EntropySource, NS: NodeSigner, IH, SP, L: Deref>(
&self, invoice: &Bolt11Invoice, payment_id: PaymentId,
amount_msats: Option<u64>,
route_params_config: RouteParametersConfig,
@@ -926,7 +924,6 @@ impl OutboundPayments {
) -> Result<(), Bolt11PaymentError>
where
R::Target: Router,
- NS::Target: NodeSigner,
IH: Fn() -> InFlightHtlcs,
SP: Fn(SendAlongPathArgs) -> Result<(), APIError>,
L::Target: Logger,
@@ -961,7 +958,7 @@ impl OutboundPayments {
#[rustfmt::skip]
pub(super) fn send_payment_for_bolt12_invoice<
- R: Deref, ES: EntropySource, NS: Deref, NL: Deref, IH, SP, L: Deref,
+ R: Deref, ES: EntropySource, NS: NodeSigner, NL: Deref, IH, SP, L: Deref,
>(
&self, invoice: &Bolt12Invoice, payment_id: PaymentId, router: &R,
first_hops: Vec<ChannelDetails>, features: Bolt12InvoiceFeatures, inflight_htlcs: IH,
@@ -972,7 +969,6 @@ impl OutboundPayments {
) -> Result<(), Bolt12PaymentError>
where
R::Target: Router,
- NS::Target: NodeSigner,
NL::Target: NodeIdLookUp,
IH: Fn() -> InFlightHtlcs,
SP: Fn(SendAlongPathArgs) -> Result<(), APIError>,
@@ -1006,7 +1002,7 @@ impl OutboundPayments {
#[rustfmt::skip]
fn send_payment_for_bolt12_invoice_internal<
- R: Deref, ES: EntropySource, NS: Deref, NL: Deref, IH, SP, L: Deref,
+ R: Deref, ES: EntropySource, NS: NodeSigner, NL: Deref, IH, SP, L: Deref,
>(
&self, payment_id: PaymentId, payment_hash: PaymentHash,
keysend_preimage: Option<PaymentPreimage>, invoice_request: Option<&InvoiceRequest>,
@@ -1019,7 +1015,6 @@ impl OutboundPayments {
) -> Result<(), Bolt12PaymentError>
where
R::Target: Router,
- NS::Target: NodeSigner,
NL::Target: NodeIdLookUp,
IH: Fn() -> InFlightHtlcs,
SP: Fn(SendAlongPathArgs) -> Result<(), APIError>,
@@ -1223,7 +1218,7 @@ impl OutboundPayments {
pub(super) fn send_payment_for_static_invoice<
R: Deref,
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
NL: Deref,
IH,
SP,
@@ -1237,7 +1232,6 @@ impl OutboundPayments {
) -> Result<(), Bolt12PaymentError>
where
R::Target: Router,
- NS::Target: NodeSigner,
NL::Target: NodeIdLookUp,
IH: Fn() -> InFlightHtlcs,
SP: Fn(SendAlongPathArgs) -> Result<(), APIError>,
@@ -1308,7 +1302,7 @@ impl OutboundPayments {
pub(super) fn check_retry_payments<
R: Deref,
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
SP,
IH,
FH,
@@ -1321,7 +1315,6 @@ impl OutboundPayments {
) -> bool
where
R::Target: Router,
- NS::Target: NodeSigner,
SP: Fn(SendAlongPathArgs) -> Result<(), APIError>,
IH: Fn() -> InFlightHtlcs,
FH: Fn() -> Vec<ChannelDetails>,
@@ -1424,7 +1417,7 @@ impl OutboundPayments {
}
#[rustfmt::skip]
- fn find_initial_route<R: Deref, NS: Deref, IH, L: Deref>(
+ fn find_initial_route<R: Deref, NS: NodeSigner, IH, L: Deref>(
&self, payment_id: PaymentId, payment_hash: PaymentHash, recipient_onion: &RecipientOnionFields,
keysend_preimage: Option<PaymentPreimage>, invoice_request: Option<&InvoiceRequest>,
route_params: &mut RouteParameters, router: &R, first_hops: &Vec<ChannelDetails>,
@@ -1432,7 +1425,6 @@ impl OutboundPayments {
) -> Result<Route, RetryableSendFailure>
where
R::Target: Router,
- NS::Target: NodeSigner,
L::Target: Logger,
IH: Fn() -> InFlightHtlcs,
{
@@ -1479,7 +1471,7 @@ impl OutboundPayments {
/// [`Event::PaymentPathFailed`]: crate::events::Event::PaymentPathFailed
/// [`Event::PaymentFailed`]: crate::events::Event::PaymentFailed
#[rustfmt::skip]
- fn send_payment_for_non_bolt12_invoice<R: Deref, NS: Deref, ES: EntropySource, IH, SP, L: Deref>(
+ fn send_payment_for_non_bolt12_invoice<R: Deref, NS: NodeSigner, ES: EntropySource, IH, SP, L: Deref>(
&self, payment_id: PaymentId, payment_hash: PaymentHash, recipient_onion: RecipientOnionFields,
keysend_preimage: Option<PaymentPreimage>, retry_strategy: Retry, mut route_params: RouteParameters,
router: &R, first_hops: Vec<ChannelDetails>, inflight_htlcs: IH, entropy_source: &ES,
@@ -1489,7 +1481,6 @@ impl OutboundPayments {
) -> Result<(), RetryableSendFailure>
where
R::Target: Router,
- NS::Target: NodeSigner,
L::Target: Logger,
IH: Fn() -> InFlightHtlcs,
SP: Fn(SendAlongPathArgs) -> Result<(), APIError>,
@@ -1524,7 +1515,7 @@ impl OutboundPayments {
}
#[rustfmt::skip]
- fn find_route_and_send_payment<R: Deref, NS: Deref, ES: EntropySource, IH, SP, L: Deref>(
+ fn find_route_and_send_payment<R: Deref, NS: NodeSigner, ES: EntropySource, IH, SP, L: Deref>(
&self, payment_hash: PaymentHash, payment_id: PaymentId, route_params: RouteParameters,
router: &R, first_hops: Vec<ChannelDetails>, inflight_htlcs: &IH, entropy_source: &ES,
node_signer: &NS, best_block_height: u32,
@@ -1533,7 +1524,6 @@ impl OutboundPayments {
)
where
R::Target: Router,
- NS::Target: NodeSigner,
L::Target: Logger,
IH: Fn() -> InFlightHtlcs,
SP: Fn(SendAlongPathArgs) -> Result<(), APIError>,
@@ -1685,7 +1675,7 @@ impl OutboundPayments {
}
#[rustfmt::skip]
- fn handle_pay_route_err<R: Deref, NS: Deref, ES: EntropySource, IH, SP, L: Deref>(
+ fn handle_pay_route_err<R: Deref, NS: NodeSigner, ES: EntropySource, IH, SP, L: Deref>(
&self, err: PaymentSendFailure, payment_id: PaymentId, payment_hash: PaymentHash, route: Route,
mut route_params: RouteParameters, onion_session_privs: Vec<[u8; 32]>, router: &R,
first_hops: Vec<ChannelDetails>, inflight_htlcs: &IH, entropy_source: &ES, node_signer: &NS,
@@ -1695,7 +1685,6 @@ impl OutboundPayments {
)
where
R::Target: Router,
- NS::Target: NodeSigner,
IH: Fn() -> InFlightHtlcs,
SP: Fn(SendAlongPathArgs) -> Result<(), APIError>,
L::Target: Logger,
@@ -1806,12 +1795,11 @@ impl OutboundPayments {
}
#[rustfmt::skip]
- pub(super) fn send_probe<ES: EntropySource, NS: Deref, F>(
+ pub(super) fn send_probe<ES: EntropySource, NS: NodeSigner, F>(
&self, path: Path, probing_cookie_secret: [u8; 32], entropy_source: &ES, node_signer: &NS,
best_block_height: u32, send_payment_along_path: F,
) -> Result<(PaymentHash, PaymentId), ProbeSendFailure>
where
- NS::Target: NodeSigner,
F: Fn(SendAlongPathArgs) -> Result<(), APIError>,
{
let payment_id = PaymentId(entropy_source.get_secure_random_bytes());
@@ -2078,14 +2066,13 @@ impl OutboundPayments {
}
#[rustfmt::skip]
- fn pay_route_internal<NS: Deref, F>(
+ fn pay_route_internal<NS: NodeSigner, F>(
&self, route: &Route, payment_hash: PaymentHash, recipient_onion: &RecipientOnionFields,
keysend_preimage: Option<PaymentPreimage>, invoice_request: Option<&InvoiceRequest>, bolt12_invoice: Option<&PaidBolt12Invoice>,
payment_id: PaymentId, recv_value_msat: Option<u64>, onion_session_privs: &Vec<[u8; 32]>,
hold_htlcs_at_next_hop: bool, node_signer: &NS, best_block_height: u32, send_payment_along_path: &F
) -> Result<(), PaymentSendFailure>
where
- NS::Target: NodeSigner,
F: Fn(SendAlongPathArgs) -> Result<(), APIError>,
{
if route.paths.len() < 1 {
@@ -2193,14 +2180,13 @@ impl OutboundPayments {
#[cfg(any(test, feature = "_externalize_tests"))]
#[rustfmt::skip]
- pub(super) fn test_send_payment_internal<NS: Deref, F>(
+ pub(super) fn test_send_payment_internal<NS: NodeSigner, F>(
&self, route: &Route, payment_hash: PaymentHash, recipient_onion: RecipientOnionFields,
keysend_preimage: Option<PaymentPreimage>, payment_id: PaymentId, recv_value_msat: Option<u64>,
onion_session_privs: Vec<[u8; 32]>, node_signer: &NS, best_block_height: u32,
send_payment_along_path: F
) -> Result<(), PaymentSendFailure>
where
- NS::Target: NodeSigner,
F: Fn(SendAlongPathArgs) -> Result<(), APIError>,
{
self.pay_route_internal(route, payment_hash, &recipient_onion,
diff --git a/lightning/src/ln/peer_channel_encryptor.rs b/lightning/src/ln/peer_channel_encryptor.rs
index 894de04..5554c5a 100644
--- a/lightning/src/ln/peer_channel_encryptor.rs
+++ b/lightning/src/ln/peer_channel_encryptor.rs
@@ -30,8 +30,6 @@ use crate::crypto::chacha20poly1305rfc::ChaCha20Poly1305RFC;
use crate::crypto::utils::hkdf_extract_expand_twice;
use crate::util::ser::VecWriter;
-use core::ops::Deref;
-
/// Maximum Lightning message data length according to
/// [BOLT-8](https://github.com/lightning/bolts/blob/v1.0/08-transport.md#lightning-message-specification)
/// and [BOLT-1](https://github.com/lightning/bolts/blob/master/01-messaging.md#lightning-message-format):
@@ -52,10 +50,7 @@ const NOISE_H: [u8; 32] = [
0x4b, 0xb4, 0x20, 0xd8, 0x9d, 0x2a, 0x04, 0x8a, 0x3c, 0x4f, 0x4c, 0x09, 0x2e, 0x37, 0xb6, 0x76,
];
-enum NoiseSecretKey<'a, 'b, NS: Deref>
-where
- NS::Target: NodeSigner,
-{
+enum NoiseSecretKey<'a, 'b, NS: NodeSigner> {
InMemory(&'a SecretKey),
NodeSigner(&'b NS),
}
@@ -130,10 +125,7 @@ impl PeerChannelEncryptor {
}
}
- pub fn new_inbound<NS: Deref>(node_signer: &NS) -> PeerChannelEncryptor
- where
- NS::Target: NodeSigner,
- {
+ pub fn new_inbound<NS: NodeSigner>(node_signer: &NS) -> PeerChannelEncryptor {
let mut sha = Sha256::engine();
sha.input(&NOISE_H);
let our_node_id = node_signer.get_node_id(Recipient::Node).unwrap();
@@ -248,12 +240,9 @@ impl PeerChannelEncryptor {
}
#[inline]
- fn inbound_noise_act<'a, 'b, NS: Deref>(
+ fn inbound_noise_act<'a, 'b, NS: NodeSigner>(
state: &mut BidirectionalNoiseState, act: &[u8], secret_key: NoiseSecretKey<'a, 'b, NS>,
- ) -> Result<(PublicKey, [u8; 32]), LightningError>
- where
- NS::Target: NodeSigner,
- {
+ ) -> Result<(PublicKey, [u8; 32]), LightningError> {
assert_eq!(act.len(), 50);
if act[0] != 0 {
@@ -327,13 +316,10 @@ impl PeerChannelEncryptor {
}
}
- pub fn process_act_one_with_keys<C: secp256k1::Signing, NS: Deref>(
+ pub fn process_act_one_with_keys<C: secp256k1::Signing, NS: NodeSigner>(
&mut self, act_one: &[u8], node_signer: &NS, our_ephemeral: SecretKey,
secp_ctx: &Secp256k1<C>,
- ) -> Result<[u8; 50], LightningError>
- where
- NS::Target: NodeSigner,
- {
+ ) -> Result<[u8; 50], LightningError> {
assert_eq!(act_one.len(), 50);
match self.noise_state {
@@ -372,12 +358,9 @@ impl PeerChannelEncryptor {
}
}
- pub fn process_act_two<NS: Deref>(
+ pub fn process_act_two<NS: NodeSigner>(
&mut self, act_two: &[u8], node_signer: &NS,
- ) -> Result<([u8; 66], PublicKey), LightningError>
- where
- NS::Target: NodeSigner,
- {
+ ) -> Result<([u8; 66], PublicKey), LightningError> {
assert_eq!(act_two.len(), 50);
let final_hkdf;
diff --git a/lightning/src/ln/peer_handler.rs b/lightning/src/ln/peer_handler.rs
index 4d1dff9..c2bb0af 100644
--- a/lightning/src/ln/peer_handler.rs
+++ b/lightning/src/ln/peer_handler.rs
@@ -981,8 +981,7 @@ pub trait APeerManager {
type L: Deref<Target = Self::LT>;
type CMHT: CustomMessageHandler + ?Sized;
type CMH: Deref<Target = Self::CMHT>;
- type NST: NodeSigner + ?Sized;
- type NS: Deref<Target = Self::NST>;
+ type NodeSigner: NodeSigner;
type SMT: SendOnlyMessageHandler + ?Sized;
type SM: Deref<Target = Self::SMT>;
/// Gets a reference to the underlying [`PeerManager`].
@@ -995,7 +994,7 @@ pub trait APeerManager {
Self::OM,
Self::L,
Self::CMH,
- Self::NS,
+ Self::NodeSigner,
Self::SM,
>;
}
@@ -1007,7 +1006,7 @@ impl<
OM: Deref,
L: Deref,
CMH: Deref,
- NS: Deref,
+ NS: NodeSigner,
SM: Deref,
> APeerManager for PeerManager<Descriptor, CM, RM, OM, L, CMH, NS, SM>
where
@@ -1016,7 +1015,6 @@ where
OM::Target: OnionMessageHandler,
L::Target: Logger,
CMH::Target: CustomMessageHandler,
- NS::Target: NodeSigner,
SM::Target: SendOnlyMessageHandler,
{
type Descriptor = Descriptor;
@@ -1030,8 +1028,7 @@ where
type L = L;
type CMHT = <CMH as Deref>::Target;
type CMH = CMH;
- type NST = <NS as Deref>::Target;
- type NS = NS;
+ type NodeSigner = NS;
type SMT = <SM as Deref>::Target;
type SM = SM;
fn as_ref(&self) -> &PeerManager<Descriptor, CM, RM, OM, L, CMH, NS, SM> {
@@ -1065,7 +1062,7 @@ pub struct PeerManager<
OM: Deref,
L: Deref,
CMH: Deref,
- NS: Deref,
+ NS: NodeSigner,
SM: Deref,
> where
CM::Target: ChannelMessageHandler,
@@ -1073,7 +1070,6 @@ pub struct PeerManager<
OM::Target: OnionMessageHandler,
L::Target: Logger,
CMH::Target: CustomMessageHandler,
- NS::Target: NodeSigner,
SM::Target: SendOnlyMessageHandler,
{
message_handler: MessageHandler<CM, RM, OM, CMH, SM>,
@@ -1151,13 +1147,12 @@ fn encode_message<T: wire::Type>(message: wire::Message<T>) -> Vec<u8> {
buffer.0
}
-impl<Descriptor: SocketDescriptor, CM: Deref, OM: Deref, L: Deref, NS: Deref, SM: Deref>
+impl<Descriptor: SocketDescriptor, CM: Deref, OM: Deref, L: Deref, NS: NodeSigner, SM: Deref>
PeerManager<Descriptor, CM, IgnoringMessageHandler, OM, L, IgnoringMessageHandler, NS, SM>
where
CM::Target: ChannelMessageHandler,
OM::Target: OnionMessageHandler,
L::Target: Logger,
- NS::Target: NodeSigner,
SM::Target: SendOnlyMessageHandler,
{
/// Constructs a new `PeerManager` with the given `ChannelMessageHandler` and
@@ -1194,7 +1189,7 @@ where
}
}
-impl<Descriptor: SocketDescriptor, RM: Deref, L: Deref, NS: Deref>
+impl<Descriptor: SocketDescriptor, RM: Deref, L: Deref, NS: NodeSigner>
PeerManager<
Descriptor,
ErroringMessageHandler,
@@ -1207,7 +1202,6 @@ impl<Descriptor: SocketDescriptor, RM: Deref, L: Deref, NS: Deref>
> where
RM::Target: RoutingMessageHandler,
L::Target: Logger,
- NS::Target: NodeSigner,
{
/// Constructs a new `PeerManager` with the given `RoutingMessageHandler`. No channel message
/// handler or onion message handler is used and onion and channel messages will be ignored (or
@@ -1298,7 +1292,7 @@ impl<
OM: Deref,
L: Deref,
CMH: Deref,
- NS: Deref,
+ NS: NodeSigner,
SM: Deref,
> PeerManager<Descriptor, CM, RM, OM, L, CMH, NS, SM>
where
@@ -1307,7 +1301,6 @@ where
OM::Target: OnionMessageHandler,
L::Target: Logger,
CMH::Target: CustomMessageHandler,
- NS::Target: NodeSigner,
SM::Target: SendOnlyMessageHandler,
{
/// Constructs a new `PeerManager` with the given message handlers.
diff --git a/lightning/src/onion_message/messenger.rs b/lightning/src/onion_message/messenger.rs
index d859d35..5f4b703 100644
--- a/lightning/src/onion_message/messenger.rs
+++ b/lightning/src/onion_message/messenger.rs
@@ -68,9 +68,7 @@ pub trait AOnionMessenger {
/// A type implementing [`EntropySource`]
type EntropySource: EntropySource;
/// A type implementing [`NodeSigner`]
- type NodeSigner: NodeSigner + ?Sized;
- /// A type that may be dereferenced to [`Self::NodeSigner`]
- type NS: Deref<Target = Self::NodeSigner>;
+ type NodeSigner: NodeSigner;
/// A type implementing [`Logger`]
type Logger: Logger + ?Sized;
/// A type that may be dereferenced to [`Self::Logger`]
@@ -104,7 +102,7 @@ pub trait AOnionMessenger {
&self,
) -> &OnionMessenger<
Self::EntropySource,
- Self::NS,
+ Self::NodeSigner,
Self::L,
Self::NL,
Self::MR,
@@ -117,7 +115,7 @@ pub trait AOnionMessenger {
impl<
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
L: Deref,
NL: Deref,
MR: Deref,
@@ -127,7 +125,6 @@ impl<
CMH: Deref,
> AOnionMessenger for OnionMessenger<ES, NS, L, NL, MR, OMH, APH, DRH, CMH>
where
- NS::Target: NodeSigner,
L::Target: Logger,
NL::Target: NodeIdLookUp,
MR::Target: MessageRouter,
@@ -137,8 +134,7 @@ where
CMH::Target: CustomOnionMessageHandler,
{
type EntropySource = ES;
- type NodeSigner = NS::Target;
- type NS = NS;
+ type NodeSigner = NS;
type Logger = L::Target;
type L = L;
type NodeIdLookUp = NL::Target;
@@ -281,7 +277,7 @@ where
/// [`Bolt12Invoice`]: crate::offers::invoice::Bolt12Invoice
pub struct OnionMessenger<
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
L: Deref,
NL: Deref,
MR: Deref,
@@ -290,7 +286,6 @@ pub struct OnionMessenger<
DRH: Deref,
CMH: Deref,
> where
- NS::Target: NodeSigner,
L::Target: Logger,
NL::Target: NodeIdLookUp,
MR::Target: MessageRouter,
@@ -1042,7 +1037,7 @@ pub enum PeeledOnion<T: OnionMessageContents> {
/// needed to connect to the first node.
pub fn create_onion_message_resolving_destination<
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
NL: Deref,
T: OnionMessageContents,
>(
@@ -1051,7 +1046,6 @@ pub fn create_onion_message_resolving_destination<
mut path: OnionMessagePath, contents: T, reply_path: Option<BlindedMessagePath>,
) -> Result<(PublicKey, OnionMessage, Vec<SocketAddress>), SendError>
where
- NS::Target: NodeSigner,
NL::Target: NodeIdLookUp,
{
path.destination.resolve(network_graph);
@@ -1077,13 +1071,12 @@ where
/// - unless it can be resolved by [`NodeIdLookUp::next_node_id`].
/// Use [`create_onion_message_resolving_destination`] instead to resolve the introduction node
/// first with a [`ReadOnlyNetworkGraph`].
-pub fn create_onion_message<ES: EntropySource, NS: Deref, NL: Deref, T: OnionMessageContents>(
+pub fn create_onion_message<ES: EntropySource, NS: NodeSigner, NL: Deref, T: OnionMessageContents>(
entropy_source: &ES, node_signer: &NS, node_id_lookup: &NL,
secp_ctx: &Secp256k1<secp256k1::All>, path: OnionMessagePath, contents: T,
reply_path: Option<BlindedMessagePath>,
) -> Result<(PublicKey, OnionMessage, Vec<SocketAddress>), SendError>
where
- NS::Target: NodeSigner,
NL::Target: NodeIdLookUp,
{
let OnionMessagePath { intermediate_nodes, mut destination, first_node_addresses } = path;
@@ -1158,12 +1151,11 @@ where
///
/// Returns either the next layer of the onion for forwarding or the decrypted content for the
/// receiver.
-pub fn peel_onion_message<NS: Deref, L: Deref, CMH: Deref>(
+pub fn peel_onion_message<NS: NodeSigner, L: Deref, CMH: Deref>(
msg: &OnionMessage, secp_ctx: &Secp256k1<secp256k1::All>, node_signer: NS, logger: L,
custom_handler: CMH,
) -> Result<PeeledOnion<<<CMH>::Target as CustomOnionMessageHandler>::CustomMessage>, ()>
where
- NS::Target: NodeSigner,
L::Target: Logger,
CMH::Target: CustomOnionMessageHandler,
{
@@ -1382,7 +1374,7 @@ macro_rules! drop_handled_events_and_abort {
impl<
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
L: Deref,
NL: Deref,
MR: Deref,
@@ -1392,7 +1384,6 @@ impl<
CMH: Deref,
> OnionMessenger<ES, NS, L, NL, MR, OMH, APH, DRH, CMH>
where
- NS::Target: NodeSigner,
L::Target: Logger,
NL::Target: NodeIdLookUp,
MR::Target: MessageRouter,
@@ -1794,7 +1785,7 @@ where
peel_onion_message(
msg,
&self.secp_ctx,
- &*self.node_signer,
+ &self.node_signer,
&*self.logger,
&*self.custom_handler,
)
@@ -2025,7 +2016,7 @@ fn outbound_buffer_full(
impl<
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
L: Deref,
NL: Deref,
MR: Deref,
@@ -2035,7 +2026,6 @@ impl<
CMH: Deref,
> EventsProvider for OnionMessenger<ES, NS, L, NL, MR, OMH, APH, DRH, CMH>
where
- NS::Target: NodeSigner,
L::Target: Logger,
NL::Target: NodeIdLookUp,
MR::Target: MessageRouter,
@@ -2145,7 +2135,7 @@ where
impl<
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
L: Deref,
NL: Deref,
MR: Deref,
@@ -2155,7 +2145,6 @@ impl<
CMH: Deref,
> BaseMessageHandler for OnionMessenger<ES, NS, L, NL, MR, OMH, APH, DRH, CMH>
where
- NS::Target: NodeSigner,
L::Target: Logger,
NL::Target: NodeIdLookUp,
MR::Target: MessageRouter,
@@ -2216,7 +2205,7 @@ where
impl<
ES: EntropySource,
- NS: Deref,
+ NS: NodeSigner,
L: Deref,
NL: Deref,
MR: Deref,
@@ -2226,7 +2215,6 @@ impl<
CMH: Deref,
> OnionMessageHandler for OnionMessenger<ES, NS, L, NL, MR, OMH, APH, DRH, CMH>
where
- NS::Target: NodeSigner,
L::Target: Logger,
NL::Target: NodeIdLookUp,
MR::Target: MessageRouter,
diff --git a/lightning/src/sign/mod.rs b/lightning/src/sign/mod.rs
index 51b00a6..fea2062 100644
--- a/lightning/src/sign/mod.rs
+++ b/lightning/src/sign/mod.rs
@@ -885,6 +885,13 @@ impl<T: EntropySource + ?Sized, E: Deref<Target = T>> EntropySource for E {
}
/// A trait that can handle cryptographic operations at the scope level of a node.
+///
+/// Instantiations of this trait should generally be shared by reference across the lightning
+/// node's components, e.g. the [`NodeSigner`]s provided to [`PeerManager`] and [`ChannelManager`],
+/// etc. MUST all return the same value for a given input.
+///
+/// [`PeerManager`]: crate::ln::peer_handler::PeerManager
+/// [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
pub trait NodeSigner {
/// Get the [`ExpandedKey`] which provides cryptographic material for various Lightning Network operations.
///
@@ -998,6 +1005,42 @@ pub trait NodeSigner {
fn sign_message(&self, msg: &[u8]) -> Result<String, ()>;
}
+impl<T: NodeSigner + ?Sized, N: Deref<Target = T>> NodeSigner for N {
+ fn get_expanded_key(&self) -> ExpandedKey {
+ self.deref().get_expanded_key()
+ }
+ fn get_peer_storage_key(&self) -> PeerStorageKey {
+ self.deref().get_peer_storage_key()
+ }
+ fn get_receive_auth_key(&self) -> ReceiveAuthKey {
+ self.deref().get_receive_auth_key()
+ }
+ fn get_node_id(&self, recipient: Recipient) -> Result<PublicKey, ()> {
+ self.deref().get_node_id(recipient)
+ }
+ fn ecdh(
+ &self, recipient: Recipient, other_key: &PublicKey, tweak: Option<&Scalar>,
+ ) -> Result<SharedSecret, ()> {
+ self.deref().ecdh(recipient, other_key, tweak)
+ }
+ fn sign_invoice(
+ &self, invoice: &RawBolt11Invoice, recipient: Recipient,
+ ) -> Result<RecoverableSignature, ()> {
+ self.deref().sign_invoice(invoice, recipient)
+ }
+ fn sign_bolt12_invoice(
+ &self, invoice: &UnsignedBolt12Invoice,
+ ) -> Result<schnorr::Signature, ()> {
+ self.deref().sign_bolt12_invoice(invoice)
+ }
+ fn sign_gossip_message(&self, msg: UnsignedGossipMessage) -> Result<Signature, ()> {
+ self.deref().sign_gossip_message(msg)
+ }
+ fn sign_message(&self, msg: &[u8]) -> Result<String, ()> {
+ self.deref().sign_message(msg)
+ }
+}
+
/// A trait that describes a wallet capable of creating a spending [`Transaction`] from a set of
/// [`SpendableOutputDescriptor`]s.
pub trait OutputSpender {
Why this scored 18/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.