Skip to content

Commit bff9982

Browse files
multi: update ChannelManager's keys manager from Arc to Deref
1 parent 030c49c commit bff9982

File tree

7 files changed

+77
-51
lines changed

7 files changed

+77
-51
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ pub fn do_test(data: &[u8]) {
233233
channel_monitors: &mut monitor_refs,
234234
};
235235

236-
(<(Sha256d, ChannelManager<EnforcingChannelKeys, Arc<TestChannelMonitor>, Arc<TestBroadcaster>>)>::read(&mut Cursor::new(&$ser.0), read_args).expect("Failed to read manager").1, monitor)
236+
(<(Sha256d, ChannelManager<EnforcingChannelKeys, Arc<TestChannelMonitor>, Arc<TestBroadcaster>, Arc<KeyProvider>>)>::read(&mut Cursor::new(&$ser.0), read_args).expect("Failed to read manager").1, monitor)
237237
} }
238238
}
239239

fuzz/src/full_stack.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,9 @@ impl<'a> Hash for Peer<'a> {
136136
}
137137

138138
struct MoneyLossDetector<'a> {
139-
manager: Arc<ChannelManager<EnforcingChannelKeys, Arc<channelmonitor::SimpleManyChannelMonitor<OutPoint, EnforcingChannelKeys, Arc<TestBroadcaster>>>, Arc<TestBroadcaster>>>,
139+
manager: Arc<ChannelManager<EnforcingChannelKeys, Arc<channelmonitor::SimpleManyChannelMonitor<OutPoint, EnforcingChannelKeys, Arc<TestBroadcaster>>>, Arc<TestBroadcaster>, Arc<KeyProvider>>>,
140140
monitor: Arc<channelmonitor::SimpleManyChannelMonitor<OutPoint, EnforcingChannelKeys, Arc<TestBroadcaster>>>,
141-
handler: PeerManager<Peer<'a>, Arc<ChannelManager<EnforcingChannelKeys, Arc<channelmonitor::SimpleManyChannelMonitor<OutPoint, EnforcingChannelKeys, Arc<TestBroadcaster>>>, Arc<TestBroadcaster>>>>,
141+
handler: PeerManager<Peer<'a>, Arc<ChannelManager<EnforcingChannelKeys, Arc<channelmonitor::SimpleManyChannelMonitor<OutPoint, EnforcingChannelKeys, Arc<TestBroadcaster>>>, Arc<TestBroadcaster>, Arc<KeyProvider>>>>,
142142

143143
peers: &'a RefCell<[bool; 256]>,
144144
funding_txn: Vec<Transaction>,
@@ -150,9 +150,9 @@ struct MoneyLossDetector<'a> {
150150
}
151151
impl<'a> MoneyLossDetector<'a> {
152152
pub fn new(peers: &'a RefCell<[bool; 256]>,
153-
manager: Arc<ChannelManager<EnforcingChannelKeys, Arc<channelmonitor::SimpleManyChannelMonitor<OutPoint, EnforcingChannelKeys, Arc<TestBroadcaster>>>, Arc<TestBroadcaster>>>,
153+
manager: Arc<ChannelManager<EnforcingChannelKeys, Arc<channelmonitor::SimpleManyChannelMonitor<OutPoint, EnforcingChannelKeys, Arc<TestBroadcaster>>>, Arc<TestBroadcaster>, Arc<KeyProvider>>>,
154154
monitor: Arc<channelmonitor::SimpleManyChannelMonitor<OutPoint, EnforcingChannelKeys, Arc<TestBroadcaster>>>,
155-
handler: PeerManager<Peer<'a>, Arc<ChannelManager<EnforcingChannelKeys, Arc<channelmonitor::SimpleManyChannelMonitor<OutPoint, EnforcingChannelKeys, Arc<TestBroadcaster>>>, Arc<TestBroadcaster>>>>) -> Self {
155+
handler: PeerManager<Peer<'a>, Arc<ChannelManager<EnforcingChannelKeys, Arc<channelmonitor::SimpleManyChannelMonitor<OutPoint, EnforcingChannelKeys, Arc<TestBroadcaster>>>, Arc<TestBroadcaster>, Arc<KeyProvider>>>>) -> Self {
156156
MoneyLossDetector {
157157
manager,
158158
monitor,

lightning/src/ln/channel.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ use std;
3535
use std::default::Default;
3636
use std::{cmp,mem,fmt};
3737
use std::sync::{Arc};
38+
use std::ops::Deref;
3839

3940
#[cfg(test)]
4041
pub struct ChannelValueStat {
@@ -437,7 +438,9 @@ impl<ChanSigner: ChannelKeys> Channel<ChanSigner> {
437438
}
438439

439440
// Constructors:
440-
pub fn new_outbound(fee_estimator: &FeeEstimator, keys_provider: &Arc<KeysInterface<ChanKeySigner = ChanSigner>>, their_node_id: PublicKey, channel_value_satoshis: u64, push_msat: u64, user_id: u64, logger: Arc<Logger>, config: &UserConfig) -> Result<Channel<ChanSigner>, APIError> {
441+
pub fn new_outbound<K: Deref>(fee_estimator: &FeeEstimator, keys_provider: &K, their_node_id: PublicKey, channel_value_satoshis: u64, push_msat: u64, user_id: u64, logger: Arc<Logger>, config: &UserConfig) -> Result<Channel<ChanSigner>, APIError>
442+
where K::Target: KeysInterface<ChanKeySigner = ChanSigner>
443+
{
441444
let chan_keys = keys_provider.get_channel_keys(false, channel_value_satoshis);
442445

443446
if channel_value_satoshis >= MAX_FUNDING_SATOSHIS {
@@ -550,7 +553,9 @@ impl<ChanSigner: ChannelKeys> Channel<ChanSigner> {
550553

551554
/// Creates a new channel from a remote sides' request for one.
552555
/// Assumes chain_hash has already been checked and corresponds with what we expect!
553-
pub fn new_from_req(fee_estimator: &FeeEstimator, keys_provider: &Arc<KeysInterface<ChanKeySigner = ChanSigner>>, their_node_id: PublicKey, their_features: InitFeatures, msg: &msgs::OpenChannel, user_id: u64, logger: Arc<Logger>, config: &UserConfig) -> Result<Channel<ChanSigner>, ChannelError> {
556+
pub fn new_from_req<K: Deref>(fee_estimator: &FeeEstimator, keys_provider: &K, their_node_id: PublicKey, their_features: InitFeatures, msg: &msgs::OpenChannel, user_id: u64, logger: Arc<Logger>, config: &UserConfig) -> Result<Channel<ChanSigner>, ChannelError>
557+
where K::Target: KeysInterface<ChanKeySigner = ChanSigner>
558+
{
554559
let mut chan_keys = keys_provider.get_channel_keys(true, msg.funding_satoshis);
555560
let their_pubkeys = ChannelPublicKeys {
556561
funding_pubkey: msg.funding_pubkey,

lightning/src/ln/channelmanager.rs

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ use ln::features::InitFeatures;
3434
use ln::msgs;
3535
use ln::onion_utils;
3636
use ln::msgs::{ChannelMessageHandler, DecodeError, LightningError};
37-
use chain::keysinterface::{ChannelKeys, KeysInterface, InMemoryChannelKeys};
37+
use chain::keysinterface::{ChannelKeys, KeysInterface, KeysManager, InMemoryChannelKeys};
3838
use util::config::UserConfig;
3939
use util::{byte_utils, events};
4040
use util::ser::{Readable, ReadableArgs, Writeable, Writer};
@@ -292,16 +292,20 @@ const ERR: () = "You need at least 32 bit pointers (well, usize, but we'll assum
292292
/// when you're using lightning-net-tokio (since tokio::spawn requires parameters with static
293293
/// lifetimes). Other times you can afford a reference, which is more efficient, in which case
294294
/// SimpleRefChannelManager is the more appropriate type. Defining these type aliases prevents
295-
/// issues such as overly long function definitions.
296-
pub type SimpleArcChannelManager<M, T> = Arc<ChannelManager<InMemoryChannelKeys, Arc<M>, Arc<T>>>;
295+
/// issues such as overly long function definitions. Note that the ChannelManager can take any
296+
/// type that implements KeysInterface for its keys manager, but this type alias chooses the
297+
/// concrete type of the KeysManager.
298+
pub type SimpleArcChannelManager<M, T> = Arc<ChannelManager<InMemoryChannelKeys, Arc<M>, Arc<T>, Arc<KeysManager>>>;
297299

298300
/// SimpleRefChannelManager is a type alias for a ChannelManager reference, and is the reference
299301
/// counterpart to the SimpleArcChannelManager type alias. Use this type by default when you don't
300302
/// need a ChannelManager with a static lifetime. You'll need a static lifetime in cases such as
301303
/// usage of lightning-net-tokio (since tokio::spawn requires parameters with static lifetimes).
302304
/// But if this is not necessary, using a reference is more efficient. Defining these type aliases
303-
/// helps with issues such as long function definitions.
304-
pub type SimpleRefChannelManager<'a, 'b, M, T> = ChannelManager<InMemoryChannelKeys, &'a M, &'b T>;
305+
/// helps with issues such as long function definitions. Note that the ChannelManager can take any
306+
/// type that implements KeysInterface for its keys manager, but this type alias chooses the
307+
/// concrete type of the KeysManager.
308+
pub type SimpleRefChannelManager<'a, 'b, 'c, M, T> = ChannelManager<InMemoryChannelKeys, &'a M, &'b T, &'c KeysManager>;
305309

306310
/// Manager which keeps track of a number of channels and sends messages to the appropriate
307311
/// channel, also tracking HTLC preimages and forwarding onion packets appropriately.
@@ -339,9 +343,10 @@ pub type SimpleRefChannelManager<'a, 'b, M, T> = ChannelManager<InMemoryChannelK
339343
/// essentially you should default to using a SimpleRefChannelManager, and use a
340344
/// SimpleArcChannelManager when you require a ChannelManager with a static lifetime, such as when
341345
/// you're using lightning-net-tokio.
342-
pub struct ChannelManager<ChanSigner: ChannelKeys, M: Deref, T: Deref>
346+
pub struct ChannelManager<ChanSigner: ChannelKeys, M: Deref, T: Deref, K: Deref>
343347
where M::Target: ManyChannelMonitor<ChanSigner>,
344348
T::Target: BroadcasterInterface,
349+
K::Target: KeysInterface<ChanKeySigner = ChanSigner>,
345350
{
346351
default_configuration: UserConfig,
347352
genesis_hash: Sha256dHash,
@@ -376,7 +381,7 @@ pub struct ChannelManager<ChanSigner: ChannelKeys, M: Deref, T: Deref>
376381
/// Taken first everywhere where we are making changes before any other locks.
377382
total_consistency_lock: RwLock<()>,
378383

379-
keys_manager: Arc<KeysInterface<ChanKeySigner = ChanSigner>>,
384+
keys_manager: K,
380385

381386
logger: Arc<Logger>,
382387
}
@@ -612,9 +617,10 @@ macro_rules! maybe_break_monitor_err {
612617
}
613618
}
614619

615-
impl<ChanSigner: ChannelKeys, M: Deref, T: Deref> ChannelManager<ChanSigner, M, T>
620+
impl<ChanSigner: ChannelKeys, M: Deref, T: Deref, K: Deref> ChannelManager<ChanSigner, M, T, K>
616621
where M::Target: ManyChannelMonitor<ChanSigner>,
617622
T::Target: BroadcasterInterface,
623+
K::Target: KeysInterface<ChanKeySigner = ChanSigner>,
618624
{
619625
/// Constructs a new ChannelManager to hold several channels and route between them.
620626
///
@@ -634,7 +640,7 @@ impl<ChanSigner: ChannelKeys, M: Deref, T: Deref> ChannelManager<ChanSigner, M,
634640
/// the ChannelManager as a listener to the BlockNotifier and call the BlockNotifier's
635641
/// `block_(dis)connected` methods, which will notify all registered listeners in one
636642
/// go.
637-
pub fn new(network: Network, feeest: Arc<FeeEstimator>, monitor: M, tx_broadcaster: T, logger: Arc<Logger>,keys_manager: Arc<KeysInterface<ChanKeySigner = ChanSigner>>, config: UserConfig, current_blockchain_height: usize) -> Result<ChannelManager<ChanSigner, M, T>, secp256k1::Error> {
643+
pub fn new(network: Network, feeest: Arc<FeeEstimator>, monitor: M, tx_broadcaster: T, logger: Arc<Logger>, keys_manager: K, config: UserConfig, current_blockchain_height: usize) -> Result<ChannelManager<ChanSigner, M, T, K>, secp256k1::Error> {
638644
let secp_ctx = Secp256k1::new();
639645

640646
let res = ChannelManager {
@@ -2563,9 +2569,10 @@ impl<ChanSigner: ChannelKeys, M: Deref, T: Deref> ChannelManager<ChanSigner, M,
25632569
}
25642570
}
25652571

2566-
impl<ChanSigner: ChannelKeys, M: Deref, T: Deref> events::MessageSendEventsProvider for ChannelManager<ChanSigner, M, T>
2572+
impl<ChanSigner: ChannelKeys, M: Deref, T: Deref, K: Deref> events::MessageSendEventsProvider for ChannelManager<ChanSigner, M, T, K>
25672573
where M::Target: ManyChannelMonitor<ChanSigner>,
25682574
T::Target: BroadcasterInterface,
2575+
K::Target: KeysInterface<ChanKeySigner = ChanSigner>,
25692576
{
25702577
fn get_and_clear_pending_msg_events(&self) -> Vec<events::MessageSendEvent> {
25712578
// TODO: Event release to users and serialization is currently race-y: it's very easy for a
@@ -2591,9 +2598,10 @@ impl<ChanSigner: ChannelKeys, M: Deref, T: Deref> events::MessageSendEventsProvi
25912598
}
25922599
}
25932600

2594-
impl<ChanSigner: ChannelKeys, M: Deref, T: Deref> events::EventsProvider for ChannelManager<ChanSigner, M, T>
2601+
impl<ChanSigner: ChannelKeys, M: Deref, T: Deref, K: Deref> events::EventsProvider for ChannelManager<ChanSigner, M, T, K>
25952602
where M::Target: ManyChannelMonitor<ChanSigner>,
25962603
T::Target: BroadcasterInterface,
2604+
K::Target: KeysInterface<ChanKeySigner = ChanSigner>,
25972605
{
25982606
fn get_and_clear_pending_events(&self) -> Vec<events::Event> {
25992607
// TODO: Event release to users and serialization is currently race-y: it's very easy for a
@@ -2619,9 +2627,11 @@ impl<ChanSigner: ChannelKeys, M: Deref, T: Deref> events::EventsProvider for Cha
26192627
}
26202628
}
26212629

2622-
impl<ChanSigner: ChannelKeys, M: Deref + Sync + Send, T: Deref + Sync + Send> ChainListener for ChannelManager<ChanSigner, M, T>
2630+
impl<ChanSigner: ChannelKeys, M: Deref + Sync + Send, T: Deref + Sync + Send, K: Deref + Sync + Send>
2631+
ChainListener for ChannelManager<ChanSigner, M, T, K>
26232632
where M::Target: ManyChannelMonitor<ChanSigner>,
26242633
T::Target: BroadcasterInterface,
2634+
K::Target: KeysInterface<ChanKeySigner = ChanSigner>,
26252635
{
26262636
fn block_connected(&self, header: &BlockHeader, height: u32, txn_matched: &[&Transaction], indexes_of_txn_matched: &[u32]) {
26272637
let header_hash = header.bitcoin_hash();
@@ -2739,9 +2749,11 @@ impl<ChanSigner: ChannelKeys, M: Deref + Sync + Send, T: Deref + Sync + Send> Ch
27392749
}
27402750
}
27412751

2742-
impl<ChanSigner: ChannelKeys, M: Deref + Sync + Send, T: Deref + Sync + Send> ChannelMessageHandler for ChannelManager<ChanSigner, M, T>
2752+
impl<ChanSigner: ChannelKeys, M: Deref + Sync + Send, T: Deref + Sync + Send, K: Deref + Sync + Send>
2753+
ChannelMessageHandler for ChannelManager<ChanSigner, M, T, K>
27432754
where M::Target: ManyChannelMonitor<ChanSigner>,
27442755
T::Target: BroadcasterInterface,
2756+
K::Target: KeysInterface<ChanKeySigner = ChanSigner>,
27452757
{
27462758
fn handle_open_channel(&self, their_node_id: &PublicKey, their_features: InitFeatures, msg: &msgs::OpenChannel) {
27472759
let _ = self.total_consistency_lock.read().unwrap();
@@ -3212,9 +3224,10 @@ impl<R: ::std::io::Read> Readable<R> for HTLCForwardInfo {
32123224
}
32133225
}
32143226

3215-
impl<ChanSigner: ChannelKeys + Writeable, M: Deref, T: Deref> Writeable for ChannelManager<ChanSigner, M, T>
3227+
impl<ChanSigner: ChannelKeys + Writeable, M: Deref, T: Deref, K: Deref> Writeable for ChannelManager<ChanSigner, M, T, K>
32163228
where M::Target: ManyChannelMonitor<ChanSigner>,
32173229
T::Target: BroadcasterInterface,
3230+
K::Target: KeysInterface<ChanKeySigner = ChanSigner>,
32183231
{
32193232
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), ::std::io::Error> {
32203233
let _ = self.total_consistency_lock.write().unwrap();
@@ -3286,14 +3299,15 @@ impl<ChanSigner: ChannelKeys + Writeable, M: Deref, T: Deref> Writeable for Chan
32863299
/// 5) Move the ChannelMonitors into your local ManyChannelMonitor.
32873300
/// 6) Disconnect/connect blocks on the ChannelManager.
32883301
/// 7) Register the new ChannelManager with your ChainWatchInterface.
3289-
pub struct ChannelManagerReadArgs<'a, ChanSigner: 'a + ChannelKeys, M: Deref, T: Deref>
3302+
pub struct ChannelManagerReadArgs<'a, ChanSigner: 'a + ChannelKeys, M: Deref, T: Deref, K: Deref>
32903303
where M::Target: ManyChannelMonitor<ChanSigner>,
32913304
T::Target: BroadcasterInterface,
3305+
K::Target: KeysInterface<ChanKeySigner = ChanSigner>,
32923306
{
32933307

32943308
/// The keys provider which will give us relevant keys. Some keys will be loaded during
32953309
/// deserialization.
3296-
pub keys_manager: Arc<KeysInterface<ChanKeySigner = ChanSigner>>,
3310+
pub keys_manager: K,
32973311

32983312
/// The fee_estimator for use in the ChannelManager in the future.
32993313
///
@@ -3330,11 +3344,13 @@ pub struct ChannelManagerReadArgs<'a, ChanSigner: 'a + ChannelKeys, M: Deref, T:
33303344
pub channel_monitors: &'a mut HashMap<OutPoint, &'a mut ChannelMonitor<ChanSigner>>,
33313345
}
33323346

3333-
impl<'a, R : ::std::io::Read, ChanSigner: ChannelKeys + Readable<R>, M: Deref, T: Deref> ReadableArgs<R, ChannelManagerReadArgs<'a, ChanSigner, M, T>> for (Sha256dHash, ChannelManager<ChanSigner, M, T>)
3347+
impl<'a, R : ::std::io::Read, ChanSigner: ChannelKeys + Readable<R>, M: Deref, T: Deref, K: Deref>
3348+
ReadableArgs<R, ChannelManagerReadArgs<'a, ChanSigner, M, T, K>> for (Sha256dHash, ChannelManager<ChanSigner, M, T, K>)
33343349
where M::Target: ManyChannelMonitor<ChanSigner>,
33353350
T::Target: BroadcasterInterface,
3351+
K::Target: KeysInterface<ChanKeySigner = ChanSigner>,
33363352
{
3337-
fn read(reader: &mut R, args: ChannelManagerReadArgs<'a, ChanSigner, M, T>) -> Result<Self, DecodeError> {
3353+
fn read(reader: &mut R, args: ChannelManagerReadArgs<'a, ChanSigner, M, T, K>) -> Result<Self, DecodeError> {
33383354
let _ver: u8 = Readable::read(reader)?;
33393355
let min_ver: u8 = Readable::read(reader)?;
33403356
if min_ver > SERIALIZATION_VERSION {

0 commit comments

Comments
 (0)