Skip to content

Commit f94fc6d

Browse files
f move ser to tlvs
1 parent 7294548 commit f94fc6d

File tree

1 file changed

+48
-7
lines changed

1 file changed

+48
-7
lines changed

lightning/src/ln/channel.rs

+48-7
Original file line numberDiff line numberDiff line change
@@ -6500,9 +6500,10 @@ impl<Signer: WriteableEcdsaChannelSigner> Writeable for Channel<Signer> {
65006500
}
65016501

65026502
let mut preimages: Vec<&Option<PaymentPreimage>> = vec![];
6503+
let mut pending_outbound_skimmed_fees: Vec<Option<u64>> = Vec::new();
65036504

65046505
(self.pending_outbound_htlcs.len() as u64).write(writer)?;
6505-
for htlc in self.pending_outbound_htlcs.iter() {
6506+
for (idx, htlc) in self.pending_outbound_htlcs.iter().enumerate() {
65066507
htlc.htlc_id.write(writer)?;
65076508
htlc.amount_msat.write(writer)?;
65086509
htlc.cltv_expiry.write(writer)?;
@@ -6538,23 +6539,37 @@ impl<Signer: WriteableEcdsaChannelSigner> Writeable for Channel<Signer> {
65386539
reason.write(writer)?;
65396540
}
65406541
}
6541-
htlc.skimmed_fee_msat.write(writer)?;
6542+
if let Some(skimmed_fee) = htlc.skimmed_fee_msat {
6543+
if pending_outbound_skimmed_fees.is_empty() {
6544+
for _ in 0..idx { pending_outbound_skimmed_fees.push(None); }
6545+
}
6546+
pending_outbound_skimmed_fees.push(Some(skimmed_fee));
6547+
} else if !pending_outbound_skimmed_fees.is_empty() {
6548+
pending_outbound_skimmed_fees.push(None);
6549+
}
65426550
}
65436551

6552+
let mut holding_cell_skimmed_fees: Vec<Option<u64>> = Vec::new();
65446553
(self.holding_cell_htlc_updates.len() as u64).write(writer)?;
6545-
for update in self.holding_cell_htlc_updates.iter() {
6554+
for (idx, update) in self.holding_cell_htlc_updates.iter().enumerate() {
65466555
match update {
65476556
&HTLCUpdateAwaitingACK::AddHTLC {
65486557
ref amount_msat, ref cltv_expiry, ref payment_hash, ref source, ref onion_routing_packet,
6549-
ref skimmed_fee_msat,
6558+
skimmed_fee_msat,
65506559
} => {
65516560
0u8.write(writer)?;
65526561
amount_msat.write(writer)?;
65536562
cltv_expiry.write(writer)?;
65546563
payment_hash.write(writer)?;
65556564
source.write(writer)?;
65566565
onion_routing_packet.write(writer)?;
6557-
skimmed_fee_msat.write(writer)?;
6566+
6567+
if let Some(skimmed_fee) = skimmed_fee_msat {
6568+
if holding_cell_skimmed_fees.is_empty() {
6569+
for _ in 0..idx { holding_cell_skimmed_fees.push(None); }
6570+
}
6571+
holding_cell_skimmed_fees.push(Some(skimmed_fee));
6572+
} else if !holding_cell_skimmed_fees.is_empty() { holding_cell_skimmed_fees.push(None); }
65586573
},
65596574
&HTLCUpdateAwaitingACK::ClaimHTLC { ref payment_preimage, ref htlc_id } => {
65606575
1u8.write(writer)?;
@@ -6721,6 +6736,8 @@ impl<Signer: WriteableEcdsaChannelSigner> Writeable for Channel<Signer> {
67216736
(29, self.temporary_channel_id, option),
67226737
(31, channel_pending_event_emitted, option),
67236738
(33, self.pending_monitor_updates, vec_type),
6739+
(35, pending_outbound_skimmed_fees, optional_vec),
6740+
(37, holding_cell_skimmed_fees, optional_vec),
67246741
});
67256742

67266743
Ok(())
@@ -6831,7 +6848,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
68316848
},
68326849
_ => return Err(DecodeError::InvalidValue),
68336850
},
6834-
skimmed_fee_msat: Readable::read(reader)?,
6851+
skimmed_fee_msat: None,
68356852
});
68366853
}
68376854

@@ -6845,7 +6862,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
68456862
payment_hash: Readable::read(reader)?,
68466863
source: Readable::read(reader)?,
68476864
onion_routing_packet: Readable::read(reader)?,
6848-
skimmed_fee_msat: Readable::read(reader)?,
6865+
skimmed_fee_msat: None,
68496866
},
68506867
1 => HTLCUpdateAwaitingACK::ClaimHTLC {
68516868
payment_preimage: Readable::read(reader)?,
@@ -7001,6 +7018,9 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
70017018

70027019
let mut pending_monitor_updates = Some(Vec::new());
70037020

7021+
let mut pending_outbound_skimmed_fees_opt: Option<Vec<Option<u64>>> = None;
7022+
let mut holding_cell_skimmed_fees_opt: Option<Vec<Option<u64>>> = None;
7023+
70047024
read_tlv_fields!(reader, {
70057025
(0, announcement_sigs, option),
70067026
(1, minimum_depth, option),
@@ -7024,6 +7044,8 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
70247044
(29, temporary_channel_id, option),
70257045
(31, channel_pending_event_emitted, option),
70267046
(33, pending_monitor_updates, vec_type),
7047+
(35, pending_outbound_skimmed_fees_opt, optional_vec),
7048+
(37, holding_cell_skimmed_fees_opt, optional_vec),
70277049
});
70287050

70297051
let (channel_keys_id, holder_signer) = if let Some(channel_keys_id) = channel_keys_id {
@@ -7078,6 +7100,25 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
70787100

70797101
let holder_max_accepted_htlcs = holder_max_accepted_htlcs.unwrap_or(DEFAULT_MAX_HTLCS);
70807102

7103+
if let Some(skimmed_fees) = pending_outbound_skimmed_fees_opt {
7104+
let mut iter = skimmed_fees.into_iter();
7105+
for htlc in pending_outbound_htlcs.iter_mut() {
7106+
htlc.skimmed_fee_msat = iter.next().ok_or(DecodeError::InvalidValue)?;
7107+
}
7108+
// We expect all skimmed fees to be consumed above
7109+
if iter.next().is_some() { return Err(DecodeError::InvalidValue) }
7110+
}
7111+
if let Some(skimmed_fees) = holding_cell_skimmed_fees_opt {
7112+
let mut iter = skimmed_fees.into_iter();
7113+
for htlc in holding_cell_htlc_updates.iter_mut() {
7114+
if let HTLCUpdateAwaitingACK::AddHTLC { ref mut skimmed_fee_msat, .. } = htlc {
7115+
*skimmed_fee_msat = iter.next().ok_or(DecodeError::InvalidValue)?;
7116+
}
7117+
}
7118+
// We expect all skimmed fees to be consumed above
7119+
if iter.next().is_some() { return Err(DecodeError::InvalidValue) }
7120+
}
7121+
70817122
Ok(Channel {
70827123
user_id,
70837124

0 commit comments

Comments
 (0)