Skip to content

Commit 5a68b9a

Browse files
committed
Move ChannelId to its own module
2 parents 7ec2b2e + 3c96ee3 commit 5a68b9a

File tree

16 files changed

+168
-101
lines changed

16 files changed

+168
-101
lines changed

fuzz/src/full_stack.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,7 @@ use lightning::chain::chainmonitor;
3434
use lightning::chain::transaction::OutPoint;
3535
use lightning::sign::{InMemorySigner, Recipient, KeyMaterial, EntropySource, NodeSigner, SignerProvider};
3636
use lightning::events::Event;
37-
use lightning::ln::{PaymentHash, PaymentPreimage, PaymentSecret};
38-
use lightning::ln::channel::ChannelId;
37+
use lightning::ln::{ChannelId, PaymentHash, PaymentPreimage, PaymentSecret};
3938
use lightning::ln::channelmanager::{ChainParameters, ChannelDetails, ChannelManager, PaymentId, RecipientOnionFields, Retry};
4039
use lightning::ln::peer_handler::{MessageHandler,PeerManager,SocketDescriptor,IgnoringMessageHandler};
4140
use lightning::ln::msgs::{self, DecodeError};

fuzz/src/router.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use bitcoin::hash_types::BlockHash;
1313

1414
use lightning::blinded_path::{BlindedHop, BlindedPath};
1515
use lightning::chain::transaction::OutPoint;
16-
use lightning::ln::channel::ChannelId;
16+
use lightning::ln::ChannelId;
1717
use lightning::ln::channelmanager::{self, ChannelDetails, ChannelCounterparty};
1818
use lightning::ln::features::{BlindedHopFeatures, Bolt12InvoiceFeatures};
1919
use lightning::ln::msgs;

lightning/src/chain/transaction.rs

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

1010
//! Types describing on-chain transactions.
1111
12-
use crate::ln::channel::ChannelId;
12+
use crate::ln::ChannelId;
1313
use bitcoin::hash_types::Txid;
1414
use bitcoin::hashes::Hash;
1515
use bitcoin::blockdata::transaction::OutPoint as BitcoinOutPoint;

lightning/src/events/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ pub use bump_transaction::BumpTransactionEvent;
2020

2121
use crate::sign::SpendableOutputDescriptor;
2222
use crate::ln::channelmanager::{InterceptId, PaymentId, RecipientOnionFields};
23-
use crate::ln::channel::{ChannelId, FUNDING_CONF_DEADLINE_BLOCKS};
23+
use crate::ln::channel::FUNDING_CONF_DEADLINE_BLOCKS;
2424
use crate::ln::features::ChannelTypeFeatures;
2525
use crate::ln::msgs;
26-
use crate::ln::{PaymentPreimage, PaymentHash, PaymentSecret};
26+
use crate::ln::{ChannelId, PaymentPreimage, PaymentHash, PaymentSecret};
2727
use crate::routing::gossip::NetworkUpdate;
2828
use crate::util::errors::APIError;
2929
use crate::util::ser::{BigSize, FixedLengthReader, Writeable, Writer, MaybeReadable, Readable, RequiredWrapper, UpgradableRequired, WithoutLength};

lightning/src/ln/channel.rs

Lines changed: 1 addition & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use bitcoin::secp256k1::{PublicKey,SecretKey};
2222
use bitcoin::secp256k1::{Secp256k1,ecdsa::Signature};
2323
use bitcoin::secp256k1;
2424

25-
use crate::ln::{PaymentPreimage, PaymentHash};
25+
use crate::ln::{ChannelId, PaymentPreimage, PaymentHash};
2626
use crate::ln::features::{ChannelTypeFeatures, InitFeatures};
2727
use crate::ln::msgs;
2828
use crate::ln::msgs::DecodeError;
@@ -602,78 +602,6 @@ impl_writeable_tlv_based!(PendingChannelMonitorUpdate, {
602602
(0, update, required),
603603
});
604604

605-
/// A unique 32-byte identifier for a channel.
606-
/// Depending on how the ID is generated, several varieties are distinguished (but all are stored as 32 bytes):
607-
/// - v1: generated based on funding tx outpoint (txid&index)
608-
/// - temporary: generated randomly
609-
/// (later planned v2: based on revocation point)
610-
/// The variety (context) is not stored, it is relevant only at creation.
611-
/// This is not exported to bindings users as we just use [u8; 32] directly
612-
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
613-
pub struct ChannelId {
614-
// The 32-byte data of the ID
615-
data: [u8; 32],
616-
}
617-
618-
impl ChannelId {
619-
/// Create v1 channel ID based on a funding TX ID and output index
620-
pub fn v1_from_funding_txid(txid: &[u8; 32], output_index: u16) -> Self {
621-
let mut res = [0; 32];
622-
res[..].copy_from_slice(&txid[..]);
623-
res[30] ^= ((output_index >> 8) & 0xff) as u8;
624-
res[31] ^= ((output_index >> 0) & 0xff) as u8;
625-
Self::from_bytes(res)
626-
}
627-
628-
/// Create a temporary channel ID randomly, based on an entropy source.
629-
pub fn temporary_from_entropy_source<ES: Deref>(entropy_source: &ES) -> Self
630-
where ES::Target: EntropySource {
631-
Self::from_bytes(entropy_source.get_secure_random_bytes())
632-
}
633-
634-
/// Generic constructor; create a new channel ID from the provided data.
635-
/// Use a more specific *from_* constructor when possible.
636-
/// This constructor is useful for tests, and internally, e.g. when the channel ID is being deserialized.
637-
pub fn from_bytes(data: [u8; 32]) -> Self {
638-
Self{data}
639-
}
640-
641-
/// Create a channel ID consisting of all-zeros data (placeholder).
642-
pub fn new_zero() -> Self {
643-
Self::from_bytes([0; 32])
644-
}
645-
646-
/// Accessor for the channel ID data
647-
pub fn bytes(&self) -> &[u8; 32] {
648-
&self.data
649-
}
650-
}
651-
652-
impl Writeable for ChannelId {
653-
fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
654-
self.data.write(w)
655-
}
656-
}
657-
658-
impl Readable for ChannelId {
659-
fn read<R: io::Read>(r: &mut R) -> Result<Self, DecodeError> {
660-
let buf: [u8; 32] = Readable::read(r)?;
661-
Ok(ChannelId::from_bytes(buf))
662-
}
663-
}
664-
665-
impl ToHex for ChannelId {
666-
fn to_hex(&self) -> String {
667-
self.data.to_hex()
668-
}
669-
}
670-
671-
impl fmt::Display for ChannelId {
672-
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
673-
crate::util::logger::DebugBytes(&self.data).fmt(f)
674-
}
675-
}
676-
677605
/// Contains all state common to unfunded inbound/outbound channels.
678606
pub(super) struct UnfundedChannelContext {
679607
/// A counter tracking how many ticks have elapsed since this unfunded channel was

lightning/src/ln/channel_id.rs

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
// This file is Copyright its original authors, visible in version control
2+
// history.
3+
//
4+
// This file is licensed under the Apache License, Version 2.0 <LICENSE-APACHE
5+
// or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
6+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
7+
// You may not use this file except in accordance with one or both of these
8+
// licenses.
9+
10+
use crate::ln::msgs::DecodeError;
11+
use crate::sign::EntropySource;
12+
use crate::util::ser::{Readable, Writeable, Writer};
13+
14+
use bitcoin::hashes::hex::ToHex;
15+
16+
use crate::io;
17+
use crate::prelude::*;
18+
use core::fmt;
19+
use core::ops::Deref;
20+
21+
22+
/// A unique 32-byte identifier for a channel.
23+
/// Depending on how the ID is generated, several varieties are distinguished (but all are stored as 32 bytes):
24+
/// - v1: generated based on funding tx outpoint (txid&index)
25+
/// - temporary: generated randomly
26+
/// (later planned v2: based on revocation point)
27+
/// The variety (context) is not stored, it is relevant only at creation.
28+
/// This is not exported to bindings users as we just use [u8; 32] directly
29+
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
30+
pub struct ChannelId {
31+
// The 32-byte data of the ID
32+
data: [u8; 32],
33+
}
34+
35+
impl ChannelId {
36+
/// Create v1 channel ID based on a funding TX ID and output index
37+
pub fn v1_from_funding_txid(txid: &[u8; 32], output_index: u16) -> Self {
38+
let mut res = [0; 32];
39+
res[..].copy_from_slice(&txid[..]);
40+
res[30] ^= ((output_index >> 8) & 0xff) as u8;
41+
res[31] ^= ((output_index >> 0) & 0xff) as u8;
42+
Self::from_bytes(res)
43+
}
44+
45+
/// Create a temporary channel ID randomly, based on an entropy source.
46+
pub fn temporary_from_entropy_source<ES: Deref>(entropy_source: &ES) -> Self
47+
where ES::Target: EntropySource {
48+
Self::from_bytes(entropy_source.get_secure_random_bytes())
49+
}
50+
51+
/// Generic constructor; create a new channel ID from the provided data.
52+
/// Use a more specific *from_* constructor when possible.
53+
/// This constructor is useful for tests, and internally, e.g. when the channel ID is being deserialized.
54+
pub fn from_bytes(data: [u8; 32]) -> Self {
55+
Self{data}
56+
}
57+
58+
/// Create a channel ID consisting of all-zeros data (placeholder).
59+
pub fn new_zero() -> Self {
60+
Self::from_bytes([0; 32])
61+
}
62+
63+
/// Accessor for the channel ID data
64+
pub fn bytes(&self) -> &[u8; 32] {
65+
&self.data
66+
}
67+
}
68+
69+
impl Writeable for ChannelId {
70+
fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
71+
self.data.write(w)
72+
}
73+
}
74+
75+
impl Readable for ChannelId {
76+
fn read<R: io::Read>(r: &mut R) -> Result<Self, DecodeError> {
77+
let buf: [u8; 32] = Readable::read(r)?;
78+
Ok(ChannelId::from_bytes(buf))
79+
}
80+
}
81+
82+
impl ToHex for ChannelId {
83+
fn to_hex(&self) -> String {
84+
self.data.to_hex()
85+
}
86+
}
87+
88+
impl fmt::Display for ChannelId {
89+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
90+
crate::util::logger::DebugBytes(&self.data).fmt(f)
91+
}
92+
}
93+
94+
#[cfg(test)]
95+
mod tests {
96+
use crate::ln::ChannelId;
97+
use crate::util::ser::{Readable, Writeable};
98+
use crate::util::test_utils;
99+
use bitcoin::hashes::hex::ToHex;
100+
use crate::prelude::*;
101+
use crate::io;
102+
103+
#[test]
104+
fn test_channel_id_new_from_data() {
105+
let data: [u8; 32] = [2; 32];
106+
let channel_id = ChannelId::from_bytes(data.clone());
107+
assert_eq!(*channel_id.bytes(), data);
108+
}
109+
110+
#[test]
111+
fn test_channel_id_v1_from_funding_txid() {
112+
let channel_id = ChannelId::v1_from_funding_txid(&[2; 32], 1);
113+
assert_eq!(channel_id.to_hex(), "0202020202020202020202020202020202020202020202020202020202020203");
114+
}
115+
116+
#[test]
117+
fn test_channel_id_equals() {
118+
let channel_id11 = ChannelId::v1_from_funding_txid(&[2; 32], 2);
119+
let channel_id12 = ChannelId::v1_from_funding_txid(&[2; 32], 2);
120+
let channel_id21 = ChannelId::v1_from_funding_txid(&[2; 32], 42);
121+
assert_eq!(channel_id11, channel_id12);
122+
assert_ne!(channel_id11, channel_id21);
123+
}
124+
125+
#[test]
126+
fn test_channel_id_write_read() {
127+
let data: [u8; 32] = [2; 32];
128+
let channel_id = ChannelId::from_bytes(data.clone());
129+
130+
let mut w = test_utils::TestVecWriter(Vec::new());
131+
channel_id.write(&mut w).unwrap();
132+
133+
let channel_id_2 = ChannelId::read(&mut io::Cursor::new(&w.0)).unwrap();
134+
assert_eq!(channel_id_2, channel_id);
135+
assert_eq!(channel_id_2.bytes(), &data);
136+
}
137+
138+
#[test]
139+
fn test_channel_id_display() {
140+
let channel_id = ChannelId::from_bytes([42; 32]);
141+
assert_eq!(format!("{}", &channel_id), "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a");
142+
}
143+
}

lightning/src/ln/channelmanager.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ use crate::events;
3939
use crate::events::{Event, EventHandler, EventsProvider, MessageSendEvent, MessageSendEventsProvider, ClosureReason, HTLCDestination, PaymentFailureReason};
4040
// Since this struct is returned in `list_channels` methods, expose it here in case users want to
4141
// construct one themselves.
42-
use crate::ln::{inbound_payment, PaymentHash, PaymentPreimage, PaymentSecret};
43-
use crate::ln::channel::{Channel, ChannelContext, ChannelError, ChannelId, ChannelUpdateStatus, ShutdownResult, UnfundedChannelContext, UpdateFulfillCommitFetch, OutboundV1Channel, InboundV1Channel};
42+
use crate::ln::{inbound_payment, ChannelId, PaymentHash, PaymentPreimage, PaymentSecret};
43+
use crate::ln::channel::{Channel, ChannelContext, ChannelError, ChannelUpdateStatus, ShutdownResult, UnfundedChannelContext, UpdateFulfillCommitFetch, OutboundV1Channel, InboundV1Channel};
4444
use crate::ln::features::{ChannelFeatures, ChannelTypeFeatures, InitFeatures, NodeFeatures};
4545
#[cfg(any(feature = "_test_utils", test))]
4646
use crate::ln::features::Bolt11InvoiceFeatures;
@@ -9408,7 +9408,7 @@ mod tests {
94089408
use core::sync::atomic::Ordering;
94099409
use crate::events::{Event, HTLCDestination, MessageSendEvent, MessageSendEventsProvider, ClosureReason};
94109410
use crate::ln::{PaymentPreimage, PaymentHash, PaymentSecret};
9411-
use crate::ln::channel::ChannelId;
9411+
use crate::ln::ChannelId;
94129412
use crate::ln::channelmanager::{inbound_payment, PaymentId, PaymentSendFailure, RecipientOnionFields, InterceptId};
94139413
use crate::ln::functional_test_utils::*;
94149414
use crate::ln::msgs::{self, ErrorAction};

lightning/src/ln/functional_test_utils.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ use crate::chain::channelmonitor::ChannelMonitor;
1616
use crate::chain::transaction::OutPoint;
1717
use crate::events::{ClaimedHTLC, ClosureReason, Event, HTLCDestination, MessageSendEvent, MessageSendEventsProvider, PathFailure, PaymentPurpose, PaymentFailureReason};
1818
use crate::events::bump_transaction::{BumpTransactionEventHandler, Wallet, WalletSource};
19-
use crate::ln::{PaymentPreimage, PaymentHash, PaymentSecret};
20-
use crate::ln::channel::ChannelId;
19+
use crate::ln::{ChannelId, PaymentPreimage, PaymentHash, PaymentSecret};
2120
use crate::ln::channelmanager::{self, AChannelManager, ChainParameters, ChannelManager, ChannelManagerReadArgs, RAACommitmentOrder, PaymentSendFailure, RecipientOnionFields, PaymentId, MIN_CLTV_EXPIRY_DELTA};
2221
use crate::routing::gossip::{P2PGossipSync, NetworkGraph, NetworkUpdate};
2322
use crate::routing::router::{self, PaymentParameters, Route};

lightning/src/ln/functional_tests.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@ use crate::chain::channelmonitor::{CLTV_CLAIM_BUFFER, LATENCY_GRACE_PERIOD_BLOCK
1919
use crate::chain::transaction::OutPoint;
2020
use crate::sign::{ChannelSigner, EcdsaChannelSigner, EntropySource, SignerProvider};
2121
use crate::events::{Event, MessageSendEvent, MessageSendEventsProvider, PathFailure, PaymentPurpose, ClosureReason, HTLCDestination, PaymentFailureReason};
22-
use crate::ln::{PaymentPreimage, PaymentSecret, PaymentHash};
23-
use crate::ln::channel::ChannelId;
22+
use crate::ln::{ChannelId, PaymentPreimage, PaymentSecret, PaymentHash};
2423
use crate::ln::channel::{commitment_tx_base_weight, COMMITMENT_TX_WEIGHT_PER_HTLC, CONCURRENT_INBOUND_HTLC_FEE_BUFFER, FEE_SPIKE_BUFFER_FEE_INCREASE_MULTIPLE, MIN_AFFORDABLE_HTLC_COUNT, get_holder_selected_channel_reserve_satoshis, OutboundV1Channel, InboundV1Channel};
2524
use crate::ln::channelmanager::{self, PaymentId, RAACommitmentOrder, PaymentSendFailure, RecipientOnionFields, BREAKDOWN_TIMEOUT, ENABLE_GOSSIP_TICKS, DISABLE_GOSSIP_TICKS, MIN_CLTV_EXPIRY_DELTA};
2625
use crate::ln::channel::{DISCONNECT_PEER_AWAITING_RESPONSE_TICKS, ChannelError};

lightning/src/ln/mod.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#[macro_use]
1414
pub mod functional_test_utils;
1515

16+
pub mod channel_id;
1617
pub mod channelmanager;
1718
pub mod inbound_payment;
1819
pub mod msgs;
@@ -31,6 +32,9 @@ pub mod channel;
3132
#[cfg(not(fuzzing))]
3233
pub(crate) mod channel;
3334

35+
// Re-export ChannelId
36+
pub use self::channel_id::ChannelId;
37+
3438
pub(crate) mod onion_utils;
3539
mod outbound_payment;
3640
pub mod wire;
@@ -67,9 +71,6 @@ mod monitor_tests;
6771
#[allow(unused_mut)]
6872
mod shutdown_tests;
6973

70-
// Re-export ChannelId
71-
pub use self::channel::ChannelId;
72-
7374
pub use self::peer_channel_encryptor::LN_MAX_MSG_LEN;
7475

7576
/// payment_hash type, use to cross-lock hop

lightning/src/ln/msgs.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ use bitcoin::{secp256k1, Witness};
3131
use bitcoin::blockdata::script::Script;
3232
use bitcoin::hash_types::{Txid, BlockHash};
3333

34-
use crate::ln::channel::ChannelId;
34+
use crate::ln::{ChannelId, PaymentPreimage, PaymentHash, PaymentSecret};
3535
use crate::ln::features::{ChannelFeatures, ChannelTypeFeatures, InitFeatures, NodeFeatures};
3636
use crate::ln::onion_utils;
3737
use crate::onion_message;
@@ -46,8 +46,6 @@ use crate::events::{MessageSendEventsProvider, OnionMessageProvider};
4646
use crate::util::logger;
4747
use crate::util::ser::{LengthReadable, Readable, ReadableArgs, Writeable, Writer, WithoutLength, FixedLengthReader, HighZeroBytesDroppedBigSize, Hostname, TransactionU16LenLimited, BigSize};
4848

49-
use crate::ln::{PaymentPreimage, PaymentHash, PaymentSecret};
50-
5149
use crate::routing::gossip::{NodeAlias, NodeId};
5250

5351
/// 21 million * 10^8 * 1000
@@ -2477,7 +2475,7 @@ mod tests {
24772475
use bitcoin::{Transaction, PackedLockTime, TxIn, Script, Sequence, Witness, TxOut};
24782476
use hex;
24792477
use crate::ln::{PaymentPreimage, PaymentHash, PaymentSecret};
2480-
use crate::ln::channel::ChannelId;
2478+
use crate::ln::ChannelId;
24812479
use crate::ln::features::{ChannelFeatures, ChannelTypeFeatures, InitFeatures, NodeFeatures};
24822480
use crate::ln::msgs::{self, FinalOnionHopData, OnionErrorPacket};
24832481
use crate::routing::gossip::{NodeAlias, NodeId};

lightning/src/ln/payment_tests.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ use crate::chain::channelmonitor::{ANTI_REORG_DELAY, HTLC_FAIL_BACK_BUFFER, LATE
1616
use crate::sign::EntropySource;
1717
use crate::chain::transaction::OutPoint;
1818
use crate::events::{ClosureReason, Event, HTLCDestination, MessageSendEvent, MessageSendEventsProvider, PathFailure, PaymentFailureReason, PaymentPurpose};
19-
use crate::ln::channel::{ChannelId, EXPIRE_PREV_CONFIG_TICKS};
19+
use crate::ln::channel::{EXPIRE_PREV_CONFIG_TICKS};
2020
use crate::ln::channelmanager::{BREAKDOWN_TIMEOUT, MPP_TIMEOUT_TICKS, MIN_CLTV_EXPIRY_DELTA, PaymentId, PaymentSendFailure, IDEMPOTENCY_TIMEOUT_TICKS, RecentPaymentDetails, RecipientOnionFields, HTLCForwardInfo, PendingHTLCRouting, PendingAddHTLCInfo};
2121
use crate::ln::features::Bolt11InvoiceFeatures;
22-
use crate::ln::{msgs, PaymentSecret, PaymentPreimage};
22+
use crate::ln::{msgs, ChannelId, PaymentSecret, PaymentPreimage};
2323
use crate::ln::msgs::ChannelMessageHandler;
2424
use crate::ln::outbound_payment::Retry;
2525
use crate::routing::gossip::{EffectiveCapacity, RoutingFees};

lightning/src/ln/peer_handler.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use bitcoin::secp256k1::{self, Secp256k1, SecretKey, PublicKey};
2020

2121
use crate::sign::{KeysManager, NodeSigner, Recipient};
2222
use crate::events::{MessageSendEvent, MessageSendEventsProvider, OnionMessageProvider};
23-
use crate::ln::channel::ChannelId;
23+
use crate::ln::ChannelId;
2424
use crate::ln::features::{InitFeatures, NodeFeatures};
2525
use crate::ln::msgs;
2626
use crate::ln::msgs::{ChannelMessageHandler, LightningError, NetAddress, OnionMessageHandler, RoutingMessageHandler};
@@ -2483,7 +2483,7 @@ mod tests {
24832483
use crate::sign::{NodeSigner, Recipient};
24842484
use crate::events;
24852485
use crate::io;
2486-
use crate::ln::channel::ChannelId;
2486+
use crate::ln::ChannelId;
24872487
use crate::ln::features::{InitFeatures, NodeFeatures};
24882488
use crate::ln::peer_channel_encryptor::PeerChannelEncryptor;
24892489
use crate::ln::peer_handler::{CustomMessageHandler, PeerManager, MessageHandler, SocketDescriptor, IgnoringMessageHandler, filter_addresses};

0 commit comments

Comments
 (0)