Skip to content

Commit e916e4b

Browse files
f move ser to tlvs
1 parent 8fd9083 commit e916e4b

File tree

1 file changed

+48
-7
lines changed

1 file changed

+48
-7
lines changed

lightning/src/ln/channel.rs

Lines changed: 48 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6560,9 +6560,10 @@ impl<Signer: WriteableEcdsaChannelSigner> Writeable for Channel<Signer> {
65606560
}
65616561

65626562
let mut preimages: Vec<&Option<PaymentPreimage>> = vec![];
6563+
let mut pending_outbound_skimmed_fees: Vec<Option<u64>> = Vec::new();
65636564

65646565
(self.pending_outbound_htlcs.len() as u64).write(writer)?;
6565-
for htlc in self.pending_outbound_htlcs.iter() {
6566+
for (idx, htlc) in self.pending_outbound_htlcs.iter().enumerate() {
65666567
htlc.htlc_id.write(writer)?;
65676568
htlc.amount_msat.write(writer)?;
65686569
htlc.cltv_expiry.write(writer)?;
@@ -6598,23 +6599,37 @@ impl<Signer: WriteableEcdsaChannelSigner> Writeable for Channel<Signer> {
65986599
reason.write(writer)?;
65996600
}
66006601
}
6601-
htlc.skimmed_fee_msat.write(writer)?;
6602+
if let Some(skimmed_fee) = htlc.skimmed_fee_msat {
6603+
if pending_outbound_skimmed_fees.is_empty() {
6604+
for _ in 0..idx { pending_outbound_skimmed_fees.push(None); }
6605+
}
6606+
pending_outbound_skimmed_fees.push(Some(skimmed_fee));
6607+
} else if !pending_outbound_skimmed_fees.is_empty() {
6608+
pending_outbound_skimmed_fees.push(None);
6609+
}
66026610
}
66036611

6612+
let mut holding_cell_skimmed_fees: Vec<Option<u64>> = Vec::new();
66046613
(self.holding_cell_htlc_updates.len() as u64).write(writer)?;
6605-
for update in self.holding_cell_htlc_updates.iter() {
6614+
for (idx, update) in self.holding_cell_htlc_updates.iter().enumerate() {
66066615
match update {
66076616
&HTLCUpdateAwaitingACK::AddHTLC {
66086617
ref amount_msat, ref cltv_expiry, ref payment_hash, ref source, ref onion_routing_packet,
6609-
ref skimmed_fee_msat,
6618+
skimmed_fee_msat,
66106619
} => {
66116620
0u8.write(writer)?;
66126621
amount_msat.write(writer)?;
66136622
cltv_expiry.write(writer)?;
66146623
payment_hash.write(writer)?;
66156624
source.write(writer)?;
66166625
onion_routing_packet.write(writer)?;
6617-
skimmed_fee_msat.write(writer)?;
6626+
6627+
if let Some(skimmed_fee) = skimmed_fee_msat {
6628+
if holding_cell_skimmed_fees.is_empty() {
6629+
for _ in 0..idx { holding_cell_skimmed_fees.push(None); }
6630+
}
6631+
holding_cell_skimmed_fees.push(Some(skimmed_fee));
6632+
} else if !holding_cell_skimmed_fees.is_empty() { holding_cell_skimmed_fees.push(None); }
66186633
},
66196634
&HTLCUpdateAwaitingACK::ClaimHTLC { ref payment_preimage, ref htlc_id } => {
66206635
1u8.write(writer)?;
@@ -6781,6 +6796,8 @@ impl<Signer: WriteableEcdsaChannelSigner> Writeable for Channel<Signer> {
67816796
(29, self.temporary_channel_id, option),
67826797
(31, channel_pending_event_emitted, option),
67836798
(33, self.pending_monitor_updates, vec_type),
6799+
(35, pending_outbound_skimmed_fees, optional_vec),
6800+
(37, holding_cell_skimmed_fees, optional_vec),
67846801
});
67856802

67866803
Ok(())
@@ -6891,7 +6908,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
68916908
},
68926909
_ => return Err(DecodeError::InvalidValue),
68936910
},
6894-
skimmed_fee_msat: Readable::read(reader)?,
6911+
skimmed_fee_msat: None,
68956912
});
68966913
}
68976914

@@ -6905,7 +6922,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
69056922
payment_hash: Readable::read(reader)?,
69066923
source: Readable::read(reader)?,
69076924
onion_routing_packet: Readable::read(reader)?,
6908-
skimmed_fee_msat: Readable::read(reader)?,
6925+
skimmed_fee_msat: None,
69096926
},
69106927
1 => HTLCUpdateAwaitingACK::ClaimHTLC {
69116928
payment_preimage: Readable::read(reader)?,
@@ -7061,6 +7078,9 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
70617078

70627079
let mut pending_monitor_updates = Some(Vec::new());
70637080

7081+
let mut pending_outbound_skimmed_fees_opt: Option<Vec<Option<u64>>> = None;
7082+
let mut holding_cell_skimmed_fees_opt: Option<Vec<Option<u64>>> = None;
7083+
70647084
read_tlv_fields!(reader, {
70657085
(0, announcement_sigs, option),
70667086
(1, minimum_depth, option),
@@ -7084,6 +7104,8 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
70847104
(29, temporary_channel_id, option),
70857105
(31, channel_pending_event_emitted, option),
70867106
(33, pending_monitor_updates, vec_type),
7107+
(35, pending_outbound_skimmed_fees_opt, optional_vec),
7108+
(37, holding_cell_skimmed_fees_opt, optional_vec),
70877109
});
70887110

70897111
let (channel_keys_id, holder_signer) = if let Some(channel_keys_id) = channel_keys_id {
@@ -7138,6 +7160,25 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
71387160

71397161
let holder_max_accepted_htlcs = holder_max_accepted_htlcs.unwrap_or(DEFAULT_MAX_HTLCS);
71407162

7163+
if let Some(skimmed_fees) = pending_outbound_skimmed_fees_opt {
7164+
let mut iter = skimmed_fees.into_iter();
7165+
for htlc in pending_outbound_htlcs.iter_mut() {
7166+
htlc.skimmed_fee_msat = iter.next().ok_or(DecodeError::InvalidValue)?;
7167+
}
7168+
// We expect all skimmed fees to be consumed above
7169+
if iter.next().is_some() { return Err(DecodeError::InvalidValue) }
7170+
}
7171+
if let Some(skimmed_fees) = holding_cell_skimmed_fees_opt {
7172+
let mut iter = skimmed_fees.into_iter();
7173+
for htlc in holding_cell_htlc_updates.iter_mut() {
7174+
if let HTLCUpdateAwaitingACK::AddHTLC { ref mut skimmed_fee_msat, .. } = htlc {
7175+
*skimmed_fee_msat = iter.next().ok_or(DecodeError::InvalidValue)?;
7176+
}
7177+
}
7178+
// We expect all skimmed fees to be consumed above
7179+
if iter.next().is_some() { return Err(DecodeError::InvalidValue) }
7180+
}
7181+
71417182
Ok(Channel {
71427183
user_id,
71437184

0 commit comments

Comments
 (0)