Skip to content

Commit 3e30c34

Browse files
multi: update ChannelManager's keys manager from Arc to Deref
1 parent 3670dd0 commit 3e30c34

File tree

7 files changed

+71
-49
lines changed

7 files changed

+71
-49
lines changed

fuzz/src/chanmon_consistency.rs

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

233-
let res = (<(Sha256d, ChannelManager<EnforcingChannelKeys, Arc<TestChannelMonitor>, Arc<TestBroadcaster>>)>::read(&mut Cursor::new(&$ser.0), read_args).expect("Failed to read manager").1, monitor);
233+
let res = (<(Sha256d, ChannelManager<EnforcingChannelKeys, Arc<TestChannelMonitor>, Arc<TestBroadcaster>, Arc<KeyProvider>>)>::read(&mut Cursor::new(&$ser.0), read_args).expect("Failed to read manager").1, monitor);
234234
for (_, was_good) in $old_monitors.latest_updates_good_at_last_ser.lock().unwrap().iter() {
235235
if !was_good {
236236
// If the last time we updated a monitor we didn't successfully update (and we

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 {
@@ -429,7 +430,9 @@ impl<ChanSigner: ChannelKeys> Channel<ChanSigner> {
429430
}
430431

431432
// Constructors:
432-
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> {
433+
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>
434+
where K::Target: KeysInterface<ChanKeySigner = ChanSigner>
435+
{
433436
let chan_keys = keys_provider.get_channel_keys(false, channel_value_satoshis);
434437

435438
if channel_value_satoshis >= MAX_FUNDING_SATOSHIS {
@@ -542,7 +545,9 @@ impl<ChanSigner: ChannelKeys> Channel<ChanSigner> {
542545

543546
/// Creates a new channel from a remote sides' request for one.
544547
/// Assumes chain_hash has already been checked and corresponds with what we expect!
545-
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<ChanSigner>> {
548+
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<ChanSigner>>
549+
where K::Target: KeysInterface<ChanKeySigner = ChanSigner>
550+
{
546551
let mut chan_keys = keys_provider.get_channel_keys(true, msg.funding_satoshis);
547552
let their_pubkeys = ChannelPublicKeys {
548553
funding_pubkey: msg.funding_pubkey,

lightning/src/ln/channelmanager.rs

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -289,15 +289,15 @@ const ERR: () = "You need at least 32 bit pointers (well, usize, but we'll assum
289289
/// lifetimes). Other times you can afford a reference, which is more efficient, in which case
290290
/// SimpleRefChannelManager is the more appropriate type. Defining these type aliases prevents
291291
/// issues such as overly long function definitions.
292-
pub type SimpleArcChannelManager<M, T> = Arc<ChannelManager<InMemoryChannelKeys, Arc<M>, Arc<T>>>;
292+
pub type SimpleArcChannelManager<M, T, K> = Arc<ChannelManager<InMemoryChannelKeys, Arc<M>, Arc<T>, Arc<K>>>;
293293

294294
/// SimpleRefChannelManager is a type alias for a ChannelManager reference, and is the reference
295295
/// counterpart to the SimpleArcChannelManager type alias. Use this type by default when you don't
296296
/// need a ChannelManager with a static lifetime. You'll need a static lifetime in cases such as
297297
/// usage of lightning-net-tokio (since tokio::spawn requires parameters with static lifetimes).
298298
/// But if this is not necessary, using a reference is more efficient. Defining these type aliases
299299
/// helps with issues such as long function definitions.
300-
pub type SimpleRefChannelManager<'a, 'b, M, T> = ChannelManager<InMemoryChannelKeys, &'a M, &'b T>;
300+
pub type SimpleRefChannelManager<'a, 'b, 'c, M, T, K> = ChannelManager<InMemoryChannelKeys, &'a M, &'b T, &'c K>;
301301

302302
/// Manager which keeps track of a number of channels and sends messages to the appropriate
303303
/// channel, also tracking HTLC preimages and forwarding onion packets appropriately.
@@ -335,9 +335,10 @@ pub type SimpleRefChannelManager<'a, 'b, M, T> = ChannelManager<InMemoryChannelK
335335
/// essentially you should default to using a SimpleRefChannelManager, and use a
336336
/// SimpleArcChannelManager when you require a ChannelManager with a static lifetime, such as when
337337
/// you're using lightning-net-tokio.
338-
pub struct ChannelManager<ChanSigner: ChannelKeys, M: Deref, T: Deref>
338+
pub struct ChannelManager<ChanSigner: ChannelKeys, M: Deref, T: Deref, K: Deref>
339339
where M::Target: ManyChannelMonitor<ChanSigner>,
340340
T::Target: BroadcasterInterface,
341+
K::Target: KeysInterface<ChanKeySigner = ChanSigner>,
341342
{
342343
default_configuration: UserConfig,
343344
genesis_hash: Sha256dHash,
@@ -372,7 +373,7 @@ pub struct ChannelManager<ChanSigner: ChannelKeys, M: Deref, T: Deref>
372373
/// Taken first everywhere where we are making changes before any other locks.
373374
total_consistency_lock: RwLock<()>,
374375

375-
keys_manager: Arc<KeysInterface<ChanKeySigner = ChanSigner>>,
376+
keys_manager: K,
376377

377378
logger: Arc<Logger>,
378379
}
@@ -610,9 +611,10 @@ macro_rules! maybe_break_monitor_err {
610611
}
611612
}
612613

613-
impl<ChanSigner: ChannelKeys, M: Deref, T: Deref> ChannelManager<ChanSigner, M, T>
614+
impl<ChanSigner: ChannelKeys, M: Deref, T: Deref, K: Deref> ChannelManager<ChanSigner, M, T, K>
614615
where M::Target: ManyChannelMonitor<ChanSigner>,
615616
T::Target: BroadcasterInterface,
617+
K::Target: KeysInterface<ChanKeySigner = ChanSigner>,
616618
{
617619
/// Constructs a new ChannelManager to hold several channels and route between them.
618620
///
@@ -632,7 +634,7 @@ impl<ChanSigner: ChannelKeys, M: Deref, T: Deref> ChannelManager<ChanSigner, M,
632634
/// the ChannelManager as a listener to the BlockNotifier and call the BlockNotifier's
633635
/// `block_(dis)connected` methods, which will notify all registered listeners in one
634636
/// go.
635-
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> {
637+
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> {
636638
let secp_ctx = Secp256k1::new();
637639

638640
let res = ChannelManager {
@@ -2548,9 +2550,10 @@ impl<ChanSigner: ChannelKeys, M: Deref, T: Deref> ChannelManager<ChanSigner, M,
25482550
}
25492551
}
25502552

2551-
impl<ChanSigner: ChannelKeys, M: Deref, T: Deref> events::MessageSendEventsProvider for ChannelManager<ChanSigner, M, T>
2553+
impl<ChanSigner: ChannelKeys, M: Deref, T: Deref, K: Deref> events::MessageSendEventsProvider for ChannelManager<ChanSigner, M, T, K>
25522554
where M::Target: ManyChannelMonitor<ChanSigner>,
25532555
T::Target: BroadcasterInterface,
2556+
K::Target: KeysInterface<ChanKeySigner = ChanSigner>,
25542557
{
25552558
fn get_and_clear_pending_msg_events(&self) -> Vec<events::MessageSendEvent> {
25562559
// TODO: Event release to users and serialization is currently race-y: it's very easy for a
@@ -2576,9 +2579,10 @@ impl<ChanSigner: ChannelKeys, M: Deref, T: Deref> events::MessageSendEventsProvi
25762579
}
25772580
}
25782581

2579-
impl<ChanSigner: ChannelKeys, M: Deref, T: Deref> events::EventsProvider for ChannelManager<ChanSigner, M, T>
2582+
impl<ChanSigner: ChannelKeys, M: Deref, T: Deref, K: Deref> events::EventsProvider for ChannelManager<ChanSigner, M, T, K>
25802583
where M::Target: ManyChannelMonitor<ChanSigner>,
25812584
T::Target: BroadcasterInterface,
2585+
K::Target: KeysInterface<ChanKeySigner = ChanSigner>,
25822586
{
25832587
fn get_and_clear_pending_events(&self) -> Vec<events::Event> {
25842588
// TODO: Event release to users and serialization is currently race-y: it's very easy for a
@@ -2604,9 +2608,11 @@ impl<ChanSigner: ChannelKeys, M: Deref, T: Deref> events::EventsProvider for Cha
26042608
}
26052609
}
26062610

2607-
impl<ChanSigner: ChannelKeys, M: Deref + Sync + Send, T: Deref + Sync + Send> ChainListener for ChannelManager<ChanSigner, M, T>
2611+
impl<ChanSigner: ChannelKeys, M: Deref + Sync + Send, T: Deref + Sync + Send, K: Deref + Sync + Send>
2612+
ChainListener for ChannelManager<ChanSigner, M, T, K>
26082613
where M::Target: ManyChannelMonitor<ChanSigner>,
26092614
T::Target: BroadcasterInterface,
2615+
K::Target: KeysInterface<ChanKeySigner = ChanSigner>,
26102616
{
26112617
fn block_connected(&self, header: &BlockHeader, height: u32, txn_matched: &[&Transaction], indexes_of_txn_matched: &[u32]) {
26122618
let header_hash = header.bitcoin_hash();
@@ -2724,9 +2730,11 @@ impl<ChanSigner: ChannelKeys, M: Deref + Sync + Send, T: Deref + Sync + Send> Ch
27242730
}
27252731
}
27262732

2727-
impl<ChanSigner: ChannelKeys, M: Deref + Sync + Send, T: Deref + Sync + Send> ChannelMessageHandler for ChannelManager<ChanSigner, M, T>
2733+
impl<ChanSigner: ChannelKeys, M: Deref + Sync + Send, T: Deref + Sync + Send, K: Deref + Sync + Send>
2734+
ChannelMessageHandler for ChannelManager<ChanSigner, M, T, K>
27282735
where M::Target: ManyChannelMonitor<ChanSigner>,
27292736
T::Target: BroadcasterInterface,
2737+
K::Target: KeysInterface<ChanKeySigner = ChanSigner>,
27302738
{
27312739
fn handle_open_channel(&self, their_node_id: &PublicKey, their_features: InitFeatures, msg: &msgs::OpenChannel) {
27322740
let _ = self.total_consistency_lock.read().unwrap();
@@ -3197,9 +3205,10 @@ impl<R: ::std::io::Read> Readable<R> for HTLCForwardInfo {
31973205
}
31983206
}
31993207

3200-
impl<ChanSigner: ChannelKeys + Writeable, M: Deref, T: Deref> Writeable for ChannelManager<ChanSigner, M, T>
3208+
impl<ChanSigner: ChannelKeys + Writeable, M: Deref, T: Deref, K: Deref> Writeable for ChannelManager<ChanSigner, M, T, K>
32013209
where M::Target: ManyChannelMonitor<ChanSigner>,
32023210
T::Target: BroadcasterInterface,
3211+
K::Target: KeysInterface<ChanKeySigner = ChanSigner>,
32033212
{
32043213
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), ::std::io::Error> {
32053214
let _ = self.total_consistency_lock.write().unwrap();
@@ -3271,14 +3280,15 @@ impl<ChanSigner: ChannelKeys + Writeable, M: Deref, T: Deref> Writeable for Chan
32713280
/// 5) Move the ChannelMonitors into your local ManyChannelMonitor.
32723281
/// 6) Disconnect/connect blocks on the ChannelManager.
32733282
/// 7) Register the new ChannelManager with your ChainWatchInterface.
3274-
pub struct ChannelManagerReadArgs<'a, ChanSigner: 'a + ChannelKeys, M: Deref, T: Deref>
3283+
pub struct ChannelManagerReadArgs<'a, ChanSigner: 'a + ChannelKeys, M: Deref, T: Deref, K: Deref>
32753284
where M::Target: ManyChannelMonitor<ChanSigner>,
32763285
T::Target: BroadcasterInterface,
3286+
K::Target: KeysInterface<ChanKeySigner = ChanSigner>,
32773287
{
32783288

32793289
/// The keys provider which will give us relevant keys. Some keys will be loaded during
32803290
/// deserialization.
3281-
pub keys_manager: Arc<KeysInterface<ChanKeySigner = ChanSigner>>,
3291+
pub keys_manager: K,
32823292

32833293
/// The fee_estimator for use in the ChannelManager in the future.
32843294
///
@@ -3315,11 +3325,13 @@ pub struct ChannelManagerReadArgs<'a, ChanSigner: 'a + ChannelKeys, M: Deref, T:
33153325
pub channel_monitors: &'a mut HashMap<OutPoint, &'a mut ChannelMonitor<ChanSigner>>,
33163326
}
33173327

3318-
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>)
3328+
impl<'a, R : ::std::io::Read, ChanSigner: ChannelKeys + Readable<R>, M: Deref, T: Deref, K: Deref>
3329+
ReadableArgs<R, ChannelManagerReadArgs<'a, ChanSigner, M, T, K>> for (Sha256dHash, ChannelManager<ChanSigner, M, T, K>)
33193330
where M::Target: ManyChannelMonitor<ChanSigner>,
33203331
T::Target: BroadcasterInterface,
3332+
K::Target: KeysInterface<ChanKeySigner = ChanSigner>,
33213333
{
3322-
fn read(reader: &mut R, args: ChannelManagerReadArgs<'a, ChanSigner, M, T>) -> Result<Self, DecodeError> {
3334+
fn read(reader: &mut R, args: ChannelManagerReadArgs<'a, ChanSigner, M, T, K>) -> Result<Self, DecodeError> {
33233335
let _ver: u8 = Readable::read(reader)?;
33243336
let min_ver: u8 = Readable::read(reader)?;
33253337
if min_ver > SERIALIZATION_VERSION {

0 commit comments

Comments
 (0)