Skip to content

Commit 05f3a63

Browse files
committed
Make ChannelMonitor always clonable
Rather than `ChannelMonitor` only being clonable when the signer is clonable, we require all signers to be clonable and then make all `ChannelMonitor`s clonable.
1 parent 4ae7bdb commit 05f3a63

File tree

11 files changed

+47
-26
lines changed

11 files changed

+47
-26
lines changed

lightning/src/chain/channelmonitor.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1078,10 +1078,7 @@ pub struct ChannelMonitor<Signer: EcdsaChannelSigner> {
10781078
pub(crate) inner: Mutex<ChannelMonitorImpl<Signer>>,
10791079
}
10801080

1081-
impl<Signer: EcdsaChannelSigner> Clone for ChannelMonitor<Signer>
1082-
where
1083-
Signer: Clone,
1084-
{
1081+
impl<Signer: EcdsaChannelSigner> Clone for ChannelMonitor<Signer> {
10851082
fn clone(&self) -> Self {
10861083
let inner = self.inner.lock().unwrap().clone();
10871084
ChannelMonitor::from_impl(inner)

lightning/src/events/bump_transaction/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ use crate::ln::chan_utils::{
3131
};
3232
use crate::ln::types::ChannelId;
3333
use crate::prelude::*;
34-
use crate::sign::ecdsa::EcdsaChannelSigner;
34+
use crate::sign::ecdsa::BaseEcdsaChannelSigner;
3535
use crate::sign::{
3636
ChannelDerivationParameters, HTLCDescriptor, SignerProvider, P2WPKH_WITNESS_WEIGHT,
3737
};

lightning/src/ln/async_signer_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use crate::ln::channel_state::{ChannelDetails, ChannelShutdownState};
2222
use crate::ln::channelmanager::{PaymentId, RAACommitmentOrder, RecipientOnionFields};
2323
use crate::ln::msgs::{BaseMessageHandler, ChannelMessageHandler, MessageSendEvent};
2424
use crate::ln::{functional_test_utils::*, msgs};
25-
use crate::sign::ecdsa::EcdsaChannelSigner;
25+
use crate::sign::ecdsa::BaseEcdsaChannelSigner;
2626
use crate::sign::SignerProvider;
2727
use crate::util::logger::Logger;
2828
use crate::util::test_channel_signer::SignerOp;

lightning/src/ln/channel.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ use crate::ln::types::ChannelId;
7272
use crate::ln::LN_MAX_MSG_LEN;
7373
use crate::offers::static_invoice::StaticInvoice;
7474
use crate::routing::gossip::NodeId;
75-
use crate::sign::ecdsa::EcdsaChannelSigner;
75+
use crate::sign::ecdsa::{BaseEcdsaChannelSigner, EcdsaChannelSigner};
7676
use crate::sign::tx_builder::{HTLCAmountDirection, NextCommitmentStats, SpecTxBuilder, TxBuilder};
7777
use crate::sign::{ChannelSigner, EntropySource, NodeSigner, Recipient, SignerProvider};
7878
use crate::types::features::{ChannelTypeFeatures, InitFeatures};

lightning/src/ln/htlc_reserve_unit_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use crate::ln::msgs::{self, BaseMessageHandler, ChannelMessageHandler, MessageSe
1515
use crate::ln::onion_utils::{self, AttributionData};
1616
use crate::ln::outbound_payment::RecipientOnionFields;
1717
use crate::routing::router::PaymentParameters;
18-
use crate::sign::ecdsa::EcdsaChannelSigner;
18+
use crate::sign::ecdsa::BaseEcdsaChannelSigner;
1919
use crate::sign::tx_builder::{SpecTxBuilder, TxBuilder};
2020
use crate::types::features::ChannelTypeFeatures;
2121
use crate::types::payment::PaymentPreimage;

lightning/src/ln/monitor_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
//! Further functional tests which test blockchain reorganizations.
1313
14-
use crate::sign::{ecdsa::EcdsaChannelSigner, OutputSpender, SignerProvider, SpendableOutputDescriptor};
14+
use crate::sign::{ecdsa::BaseEcdsaChannelSigner, OutputSpender, SignerProvider, SpendableOutputDescriptor};
1515
use crate::chain::Watch;
1616
use crate::chain::channelmonitor::{Balance, BalanceSource, ChannelMonitorUpdateStep, HolderCommitmentTransactionBalance, ANTI_REORG_DELAY, ARCHIVAL_DELAY_BLOCKS, COUNTERPARTY_CLAIMABLE_WITHIN_BLOCKS_PINNABLE, LATENCY_GRACE_PERIOD_BLOCKS};
1717
use crate::chain::transaction::OutPoint;

lightning/src/ln/update_fee_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use crate::ln::msgs::{
1515
self, BaseMessageHandler, ChannelMessageHandler, ErrorAction, MessageSendEvent,
1616
};
1717
use crate::ln::outbound_payment::RecipientOnionFields;
18-
use crate::sign::ecdsa::EcdsaChannelSigner;
18+
use crate::sign::ecdsa::BaseEcdsaChannelSigner;
1919
use crate::types::features::ChannelTypeFeatures;
2020
use crate::util::config::UserConfig;
2121
use crate::util::errors::APIError;

lightning/src/sign/ecdsa.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,25 @@ use crate::sign::{ChannelSigner, HTLCDescriptor};
3434
///
3535
/// [`ChannelManager::signer_unblocked`]: crate::ln::channelmanager::ChannelManager::signer_unblocked
3636
/// [`ChainMonitor::signer_unblocked`]: crate::chain::chainmonitor::ChainMonitor::signer_unblocked
37-
pub trait EcdsaChannelSigner: ChannelSigner {
37+
pub trait EcdsaChannelSigner: BaseEcdsaChannelSigner + Clone {}
38+
39+
/// A trait to sign Lightning channel transactions as described in
40+
/// [BOLT 3](https://github.com/lightning/bolts/blob/master/03-transactions.md).
41+
///
42+
/// Signing services could be implemented on a hardware wallet and should implement signing
43+
/// policies in order to be secure. Please refer to the [VLS Policy
44+
/// Controls](https://gitlab.com/lightning-signer/validating-lightning-signer/-/blob/main/docs/policy-controls.md)
45+
/// for an example of such policies.
46+
///
47+
/// Like [`ChannelSigner`], many of the methods allow errors to be returned to support async
48+
/// signing. In such cases, the signing operation can be replayed by calling
49+
/// [`ChannelManager::signer_unblocked`] or [`ChainMonitor::signer_unblocked`] (see individual
50+
/// method documentation for which method should be called) once the result is ready, at which
51+
/// point the channel operation will resume.
52+
///
53+
/// [`ChannelManager::signer_unblocked`]: crate::ln::channelmanager::ChannelManager::signer_unblocked
54+
/// [`ChainMonitor::signer_unblocked`]: crate::chain::chainmonitor::ChainMonitor::signer_unblocked
55+
pub trait BaseEcdsaChannelSigner: ChannelSigner {
3856
/// Create a signature for a counterparty's commitment transaction and associated HTLC transactions.
3957
///
4058
/// Policy checks should be implemented in this function, including checking the amount

lightning/src/sign/mod.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ use crate::util::transaction_utils;
6464

6565
use crate::crypto::chacha20::ChaCha20;
6666
use crate::prelude::*;
67-
use crate::sign::ecdsa::EcdsaChannelSigner;
67+
use crate::sign::ecdsa::{BaseEcdsaChannelSigner, EcdsaChannelSigner};
6868
#[cfg(taproot)]
6969
use crate::sign::taproot::TaprootChannelSigner;
7070
use crate::util::atomic_counter::AtomicCounter;
@@ -1516,7 +1516,9 @@ impl ChannelSigner for InMemorySigner {
15161516
const MISSING_PARAMS_ERR: &'static str =
15171517
"ChannelTransactionParameters must be populated before signing operations";
15181518

1519-
impl EcdsaChannelSigner for InMemorySigner {
1519+
impl EcdsaChannelSigner for InMemorySigner {}
1520+
1521+
impl BaseEcdsaChannelSigner for InMemorySigner {
15201522
fn sign_counterparty_commitment(
15211523
&self, channel_parameters: &ChannelTransactionParameters,
15221524
commitment_tx: &CommitmentTransaction, _inbound_htlc_preimages: Vec<PaymentPreimage>,
@@ -2691,11 +2693,11 @@ impl EntropySource for RandomBytes {
26912693
}
26922694
}
26932695

2694-
// Ensure that EcdsaChannelSigner can have a vtable
2695-
#[test]
2696+
// Ensure that EcdsaChannelSigner can have a vtable - not required in bindings
2697+
/*#[test]
26962698
pub fn dyn_sign() {
26972699
let _signer: Box<dyn EcdsaChannelSigner>;
2698-
}
2700+
}*/
26992701

27002702
#[cfg(ldk_bench)]
27012703
pub mod benches {

lightning/src/util/dyn_signer.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use crate::ln::chan_utils::{
1111
use crate::ln::inbound_payment::ExpandedKey;
1212
use crate::ln::msgs::{UnsignedChannelAnnouncement, UnsignedGossipMessage};
1313
use crate::ln::script::ShutdownScript;
14-
use crate::sign::ecdsa::EcdsaChannelSigner;
14+
use crate::sign::ecdsa::{BaseEcdsaChannelSigner, EcdsaChannelSigner};
1515
#[cfg(taproot)]
1616
use crate::sign::taproot::TaprootChannelSigner;
1717
use crate::sign::InMemorySigner;
@@ -33,11 +33,11 @@ use types::payment::PaymentPreimage;
3333

3434
#[cfg(not(taproot))]
3535
/// A super-trait for all the traits that a dyn signer backing implements
36-
pub trait DynSignerTrait: EcdsaChannelSigner + Send + Sync {}
36+
pub trait DynSignerTrait: BaseEcdsaChannelSigner + Send + Sync {}
3737

3838
#[cfg(taproot)]
3939
/// A super-trait for all the traits that a dyn signer backing implements
40-
pub trait DynSignerTrait: EcdsaChannelSigner + TaprootChannelSigner + Send + Sync {}
40+
pub trait DynSignerTrait: BaseEcdsaChannelSigner + TaprootChannelSigner + Send + Sync {}
4141

4242
/// Helper to allow DynSigner to clone itself
4343
pub trait InnerSign: DynSignerTrait {
@@ -127,7 +127,9 @@ impl Clone for DynSigner {
127127
}
128128
}
129129

130-
delegate!(DynSigner, EcdsaChannelSigner, inner,
130+
impl EcdsaChannelSigner for DynSigner {}
131+
132+
delegate!(DynSigner, BaseEcdsaChannelSigner, inner,
131133
fn sign_holder_commitment(, channel_parameters: &ChannelTransactionParameters,
132134
commitment_tx: &HolderCommitmentTransaction,
133135
secp_ctx: &Secp256k1<secp256k1::All>) -> Result<Signature, ()>,

0 commit comments

Comments
 (0)