Skip to content

Commit c84dad1

Browse files
committed
Use the new ChannelId struct
1 parent fbe9b3c commit c84dad1

18 files changed

+389
-331
lines changed

fuzz/src/full_stack.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ use lightning::chain::transaction::OutPoint;
3535
use lightning::sign::{InMemorySigner, Recipient, KeyMaterial, EntropySource, NodeSigner, SignerProvider};
3636
use lightning::events::Event;
3737
use lightning::ln::{PaymentHash, PaymentPreimage, PaymentSecret};
38+
use lightning::ln::channel::ChannelId;
3839
use lightning::ln::channelmanager::{ChainParameters, ChannelDetails, ChannelManager, PaymentId, RecipientOnionFields, Retry};
3940
use lightning::ln::peer_handler::{MessageHandler,PeerManager,SocketDescriptor,IgnoringMessageHandler};
4041
use lightning::ln::msgs::{self, DecodeError};
@@ -466,7 +467,7 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
466467
let mut should_forward = false;
467468
let mut payments_received: Vec<PaymentHash> = Vec::new();
468469
let mut payments_sent = 0;
469-
let mut pending_funding_generation: Vec<([u8; 32], PublicKey, u64, Script)> = Vec::new();
470+
let mut pending_funding_generation: Vec<(ChannelId, PublicKey, u64, Script)> = Vec::new();
470471
let mut pending_funding_signatures = HashMap::new();
471472

472473
loop {

fuzz/src/router.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +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;
1617
use lightning::ln::channelmanager::{self, ChannelDetails, ChannelCounterparty};
1718
use lightning::ln::features::{BlindedHopFeatures, Bolt12InvoiceFeatures};
1819
use lightning::ln::msgs;
@@ -210,7 +211,7 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
210211
let rnid = node_pks.iter().skip(u16::from_be_bytes(get_slice!(2).try_into().unwrap()) as usize % node_pks.len()).next().unwrap();
211212
let capacity = u64::from_be_bytes(get_slice!(8).try_into().unwrap());
212213
$first_hops_vec.push(ChannelDetails {
213-
channel_id: [0; 32],
214+
channel_id: ChannelId::new_zero(),
214215
counterparty: ChannelCounterparty {
215216
node_id: *rnid,
216217
features: channelmanager::provided_init_features(&UserConfig::default()),

lightning-invoice/src/utils.rs

+9-9
Original file line numberDiff line numberDiff line change
@@ -627,7 +627,7 @@ where
627627
log_trace!(logger, "Considering {} channels for invoice route hints", channels.len());
628628
for channel in channels.into_iter().filter(|chan| chan.is_channel_ready) {
629629
if channel.get_inbound_payment_scid().is_none() || channel.counterparty.forwarding_info.is_none() {
630-
log_trace!(logger, "Ignoring channel {} for invoice route hints", log_bytes!(channel.channel_id));
630+
log_trace!(logger, "Ignoring channel {} for invoice route hints", &channel.channel_id);
631631
continue;
632632
}
633633

@@ -641,7 +641,7 @@ where
641641
// If any public channel exists, return no hints and let the sender
642642
// look at the public channels instead.
643643
log_trace!(logger, "Not including channels in invoice route hints on account of public channel {}",
644-
log_bytes!(channel.channel_id));
644+
&channel.channel_id);
645645
return vec![].into_iter().take(MAX_CHANNEL_HINTS).map(route_hint_from_channel);
646646
}
647647
}
@@ -681,18 +681,18 @@ where
681681
log_trace!(logger,
682682
"Preferring counterparty {} channel {} (SCID {:?}, {} msats) over {} (SCID {:?}, {} msats) for invoice route hints",
683683
log_pubkey!(channel.counterparty.node_id),
684-
log_bytes!(channel.channel_id), channel.short_channel_id,
684+
&channel.channel_id, channel.short_channel_id,
685685
channel.inbound_capacity_msat,
686-
log_bytes!(entry.get().channel_id), entry.get().short_channel_id,
686+
&entry.get().channel_id, entry.get().short_channel_id,
687687
current_max_capacity);
688688
entry.insert(channel);
689689
} else {
690690
log_trace!(logger,
691691
"Preferring counterparty {} channel {} (SCID {:?}, {} msats) over {} (SCID {:?}, {} msats) for invoice route hints",
692692
log_pubkey!(channel.counterparty.node_id),
693-
log_bytes!(entry.get().channel_id), entry.get().short_channel_id,
693+
&entry.get().channel_id, entry.get().short_channel_id,
694694
current_max_capacity,
695-
log_bytes!(channel.channel_id), channel.short_channel_id,
695+
&channel.channel_id, channel.short_channel_id,
696696
channel.inbound_capacity_msat);
697697
}
698698
}
@@ -731,14 +731,14 @@ where
731731

732732
if include_channel {
733733
log_trace!(logger, "Including channel {} in invoice route hints",
734-
log_bytes!(channel.channel_id));
734+
&channel.channel_id);
735735
} else if !has_enough_capacity {
736736
log_trace!(logger, "Ignoring channel {} without enough capacity for invoice route hints",
737-
log_bytes!(channel.channel_id));
737+
&channel.channel_id);
738738
} else {
739739
debug_assert!(!channel.is_usable || (has_pub_unconf_chan && !channel.is_public));
740740
log_trace!(logger, "Ignoring channel {} with disconnected peer",
741-
log_bytes!(channel.channel_id));
741+
&channel.channel_id);
742742
}
743743

744744
include_channel

lightning/src/chain/channelmonitor.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -2525,7 +2525,7 @@ impl<Signer: WriteableEcdsaChannelSigner> ChannelMonitorImpl<Signer> {
25252525
}
25262526
} else if !self.holder_tx_signed {
25272527
log_error!(logger, "WARNING: You have a potentially-unsafe holder commitment transaction available to broadcast");
2528-
log_error!(logger, " in channel monitor for channel {}!", log_bytes!(self.funding_info.0.to_channel_id()));
2528+
log_error!(logger, " in channel monitor for channel {}!", &self.funding_info.0.to_channel_id());
25292529
log_error!(logger, " Read the docs for ChannelMonitor::get_latest_holder_commitment_txn and take manual action!");
25302530
} else {
25312531
// If we generated a MonitorEvent::CommitmentTxConfirmed, the ChannelManager
@@ -3183,7 +3183,7 @@ impl<Signer: WriteableEcdsaChannelSigner> ChannelMonitorImpl<Signer> {
31833183
if prevout.txid == self.funding_info.0.txid && prevout.vout == self.funding_info.0.index as u32 {
31843184
let mut balance_spendable_csv = None;
31853185
log_info!(logger, "Channel {} closed by funding output spend in txid {}.",
3186-
log_bytes!(self.funding_info.0.to_channel_id()), txid);
3186+
&self.funding_info.0.to_channel_id(), txid);
31873187
self.funding_spend_seen = true;
31883188
let mut commitment_tx_to_counterparty_output = None;
31893189
if (tx.input[0].sequence.0 >> 8*3) as u8 == 0x80 && (tx.lock_time.0 >> 8*3) as u8 == 0x20 {

lightning/src/chain/transaction.rs

+6-8
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99

1010
//! Types describing on-chain transactions.
1111
12+
use crate::ln::channel::ChannelId;
1213
use bitcoin::hash_types::Txid;
14+
use bitcoin::hashes::Hash;
1315
use bitcoin::blockdata::transaction::OutPoint as BitcoinOutPoint;
1416
use bitcoin::blockdata::transaction::Transaction;
1517

@@ -57,12 +59,8 @@ pub struct OutPoint {
5759

5860
impl OutPoint {
5961
/// Convert an `OutPoint` to a lightning channel id.
60-
pub fn to_channel_id(&self) -> [u8; 32] {
61-
let mut res = [0; 32];
62-
res[..].copy_from_slice(&self.txid[..]);
63-
res[30] ^= ((self.index >> 8) & 0xff) as u8;
64-
res[31] ^= ((self.index >> 0) & 0xff) as u8;
65-
res
62+
pub fn to_channel_id(&self) -> ChannelId {
63+
ChannelId::v1_from_funding_txid(&self.txid.as_inner(), self.index)
6664
}
6765

6866
/// Converts this OutPoint into the OutPoint field as used by rust-bitcoin
@@ -94,10 +92,10 @@ mod tests {
9492
assert_eq!(&OutPoint {
9593
txid: tx.txid(),
9694
index: 0
97-
}.to_channel_id(), &hex::decode("3e88dd7165faf7be58b3c5bb2c9c452aebef682807ea57080f62e6f6e113c25e").unwrap()[..]);
95+
}.to_channel_id().bytes()[..], &hex::decode("3e88dd7165faf7be58b3c5bb2c9c452aebef682807ea57080f62e6f6e113c25e").unwrap()[..]);
9896
assert_eq!(&OutPoint {
9997
txid: tx.txid(),
10098
index: 1
101-
}.to_channel_id(), &hex::decode("3e88dd7165faf7be58b3c5bb2c9c452aebef682807ea57080f62e6f6e113c25f").unwrap()[..]);
99+
}.to_channel_id().bytes()[..], &hex::decode("3e88dd7165faf7be58b3c5bb2c9c452aebef682807ea57080f62e6f6e113c25f").unwrap()[..]);
102100
}
103101
}

lightning/src/events/mod.rs

+19-19
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ pub use bump_transaction::BumpTransactionEvent;
2020

2121
use crate::sign::SpendableOutputDescriptor;
2222
use crate::ln::channelmanager::{InterceptId, PaymentId, RecipientOnionFields};
23-
use crate::ln::channel::FUNDING_CONF_DEADLINE_BLOCKS;
23+
use crate::ln::channel::{ChannelId, FUNDING_CONF_DEADLINE_BLOCKS};
2424
use crate::ln::features::ChannelTypeFeatures;
2525
use crate::ln::msgs;
2626
use crate::ln::{PaymentPreimage, PaymentHash, PaymentSecret};
@@ -83,7 +83,7 @@ impl_writeable_tlv_based_enum!(PaymentPurpose,
8383
#[derive(Clone, Debug, PartialEq, Eq)]
8484
pub struct ClaimedHTLC {
8585
/// The `channel_id` of the channel over which the HTLC was received.
86-
pub channel_id: [u8; 32],
86+
pub channel_id: ChannelId,
8787
/// The `user_channel_id` of the channel over which the HTLC was received. This is the value
8888
/// passed in to [`ChannelManager::create_channel`] for outbound channels, or to
8989
/// [`ChannelManager::accept_inbound_channel`] for inbound channels if
@@ -246,7 +246,7 @@ pub enum HTLCDestination {
246246
/// counterparty node information.
247247
node_id: Option<PublicKey>,
248248
/// The outgoing `channel_id` between us and the next node.
249-
channel_id: [u8; 32],
249+
channel_id: ChannelId,
250250
},
251251
/// Scenario where we are unsure of the next node to forward the HTLC to.
252252
UnknownNextHop {
@@ -364,7 +364,7 @@ pub enum Event {
364364
/// [`ChannelManager::funding_transaction_generated`].
365365
///
366366
/// [`ChannelManager::funding_transaction_generated`]: crate::ln::channelmanager::ChannelManager::funding_transaction_generated
367-
temporary_channel_id: [u8; 32],
367+
temporary_channel_id: ChannelId,
368368
/// The counterparty's node_id, which you'll need to pass back into
369369
/// [`ChannelManager::funding_transaction_generated`].
370370
///
@@ -458,7 +458,7 @@ pub enum Event {
458458
/// payment is to pay an invoice or to send a spontaneous payment.
459459
purpose: PaymentPurpose,
460460
/// The `channel_id` indicating over which channel we received the payment.
461-
via_channel_id: Option<[u8; 32]>,
461+
via_channel_id: Option<ChannelId>,
462462
/// The `user_channel_id` indicating over which channel we received the payment.
463463
via_user_channel_id: Option<u128>,
464464
/// The block height at which this payment will be failed back and will no longer be
@@ -721,10 +721,10 @@ pub enum Event {
721721
PaymentForwarded {
722722
/// The incoming channel between the previous node and us. This is only `None` for events
723723
/// generated or serialized by versions prior to 0.0.107.
724-
prev_channel_id: Option<[u8; 32]>,
724+
prev_channel_id: Option<ChannelId>,
725725
/// The outgoing channel between the next node and us. This is only `None` for events
726726
/// generated or serialized by versions prior to 0.0.107.
727-
next_channel_id: Option<[u8; 32]>,
727+
next_channel_id: Option<ChannelId>,
728728
/// The fee, in milli-satoshis, which was earned as a result of the payment.
729729
///
730730
/// Note that if we force-closed the channel over which we forwarded an HTLC while the HTLC
@@ -755,7 +755,7 @@ pub enum Event {
755755
/// [`Event::ChannelReady`] event.
756756
ChannelPending {
757757
/// The `channel_id` of the channel that is pending confirmation.
758-
channel_id: [u8; 32],
758+
channel_id: ChannelId,
759759
/// The `user_channel_id` value passed in to [`ChannelManager::create_channel`] for outbound
760760
/// channels, or to [`ChannelManager::accept_inbound_channel`] for inbound channels if
761761
/// [`UserConfig::manually_accept_inbound_channels`] config flag is set to true. Otherwise
@@ -768,7 +768,7 @@ pub enum Event {
768768
/// The `temporary_channel_id` this channel used to be known by during channel establishment.
769769
///
770770
/// Will be `None` for channels created prior to LDK version 0.0.115.
771-
former_temporary_channel_id: Option<[u8; 32]>,
771+
former_temporary_channel_id: Option<ChannelId>,
772772
/// The `node_id` of the channel counterparty.
773773
counterparty_node_id: PublicKey,
774774
/// The outpoint of the channel's funding transaction.
@@ -780,7 +780,7 @@ pub enum Event {
780780
/// establishment.
781781
ChannelReady {
782782
/// The `channel_id` of the channel that is ready.
783-
channel_id: [u8; 32],
783+
channel_id: ChannelId,
784784
/// The `user_channel_id` value passed in to [`ChannelManager::create_channel`] for outbound
785785
/// channels, or to [`ChannelManager::accept_inbound_channel`] for inbound channels if
786786
/// [`UserConfig::manually_accept_inbound_channels`] config flag is set to true. Otherwise
@@ -807,7 +807,7 @@ pub enum Event {
807807
ChannelClosed {
808808
/// The `channel_id` of the channel which has been closed. Note that on-chain transactions
809809
/// resolving the channel are likely still awaiting confirmation.
810-
channel_id: [u8; 32],
810+
channel_id: ChannelId,
811811
/// The `user_channel_id` value passed in to [`ChannelManager::create_channel`] for outbound
812812
/// channels, or to [`ChannelManager::accept_inbound_channel`] for inbound channels if
813813
/// [`UserConfig::manually_accept_inbound_channels`] config flag is set to true. Otherwise
@@ -834,7 +834,7 @@ pub enum Event {
834834
/// inputs for another purpose.
835835
DiscardFunding {
836836
/// The channel_id of the channel which has been closed.
837-
channel_id: [u8; 32],
837+
channel_id: ChannelId,
838838
/// The full transaction received from the user
839839
transaction: Transaction
840840
},
@@ -859,7 +859,7 @@ pub enum Event {
859859
///
860860
/// [`ChannelManager::accept_inbound_channel`]: crate::ln::channelmanager::ChannelManager::accept_inbound_channel
861861
/// [`ChannelManager::force_close_without_broadcasting_txn`]: crate::ln::channelmanager::ChannelManager::force_close_without_broadcasting_txn
862-
temporary_channel_id: [u8; 32],
862+
temporary_channel_id: ChannelId,
863863
/// The node_id of the counterparty requesting to open the channel.
864864
///
865865
/// When responding to the request, the `counterparty_node_id` should be passed
@@ -905,7 +905,7 @@ pub enum Event {
905905
/// requirements (i.e. insufficient fees paid, or a CLTV that is too soon).
906906
HTLCHandlingFailed {
907907
/// The channel over which the HTLC was received.
908-
prev_channel_id: [u8; 32],
908+
prev_channel_id: ChannelId,
909909
/// Destination of the HTLC that failed to be processed.
910910
failed_next_destination: HTLCDestination,
911911
},
@@ -1328,7 +1328,7 @@ impl MaybeReadable for Event {
13281328
},
13291329
9u8 => {
13301330
let f = || {
1331-
let mut channel_id = [0; 32];
1331+
let mut channel_id = ChannelId::new_zero();
13321332
let mut reason = UpgradableRequired(None);
13331333
let mut user_channel_id_low_opt: Option<u64> = None;
13341334
let mut user_channel_id_high_opt: Option<u64> = None;
@@ -1356,7 +1356,7 @@ impl MaybeReadable for Event {
13561356
},
13571357
11u8 => {
13581358
let f = || {
1359-
let mut channel_id = [0; 32];
1359+
let mut channel_id = ChannelId::new_zero();
13601360
let mut transaction = Transaction{ version: 2, lock_time: PackedLockTime::ZERO, input: Vec::new(), output: Vec::new() };
13611361
read_tlv_fields!(reader, {
13621362
(0, channel_id, required),
@@ -1467,7 +1467,7 @@ impl MaybeReadable for Event {
14671467
},
14681468
25u8 => {
14691469
let f = || {
1470-
let mut prev_channel_id = [0; 32];
1470+
let mut prev_channel_id = ChannelId::new_zero();
14711471
let mut failed_next_destination_opt = UpgradableRequired(None);
14721472
read_tlv_fields!(reader, {
14731473
(0, prev_channel_id, required),
@@ -1483,7 +1483,7 @@ impl MaybeReadable for Event {
14831483
27u8 => Ok(None),
14841484
29u8 => {
14851485
let f = || {
1486-
let mut channel_id = [0; 32];
1486+
let mut channel_id = ChannelId::new_zero();
14871487
let mut user_channel_id: u128 = 0;
14881488
let mut counterparty_node_id = RequiredWrapper(None);
14891489
let mut channel_type = RequiredWrapper(None);
@@ -1505,7 +1505,7 @@ impl MaybeReadable for Event {
15051505
},
15061506
31u8 => {
15071507
let f = || {
1508-
let mut channel_id = [0; 32];
1508+
let mut channel_id = ChannelId::new_zero();
15091509
let mut user_channel_id: u128 = 0;
15101510
let mut former_temporary_channel_id = None;
15111511
let mut counterparty_node_id = RequiredWrapper(None);

0 commit comments

Comments
 (0)