@@ -6045,7 +6045,7 @@ where
60456045 should_broadcast: broadcast,
60466046 }],
60476047 channel_id: Some(self.channel_id()),
6048- encoded_channel: None,
6048+ encoded_channel: Some(Vec::new()), // Clear channel on shut down.
60496049 };
60506050 Some((self.get_counterparty_node_id(), funding_txo, self.channel_id(), update))
60516051 } else {
@@ -8195,6 +8195,7 @@ where
81958195 }
81968196 log_debug!(logger, "Received valid commitment_signed from peer in channel {}, updated HTLC state but awaiting a monitor update resolution to reply.",
81978197 &self.context.channel_id);
8198+ monitor_update.encoded_channel = Some(self.encode());
81988199 return Ok(self.push_ret_blockable_mon_update(monitor_update));
81998200 }
82008201
@@ -12724,13 +12725,13 @@ where
1272412725 }
1272512726
1272612727 self.context.latest_monitor_update_id += 1;
12728+ self.context.channel_state.set_awaiting_remote_revoke();
1272712729 let monitor_update = ChannelMonitorUpdate {
1272812730 update_id: self.context.latest_monitor_update_id,
1272912731 updates: vec![update],
1273012732 channel_id: Some(self.context.channel_id()),
1273112733 encoded_channel: Some(self.encode()),
1273212734 };
12733- self.context.channel_state.set_awaiting_remote_revoke();
1273412735 monitor_update
1273512736 }
1273612737
@@ -15601,6 +15602,62 @@ where
1560115602 }
1560215603}
1560315604
15605+ pub struct ChannelStateCheckData {
15606+ pub cur_holder_commitment_transaction_number: u64,
15607+ pub revoked_counterparty_commitment_transaction_number: u64,
15608+ pub cur_counterparty_commitment_transaction_number: u64,
15609+ pub latest_monitor_update_id: u64,
15610+ }
15611+
15612+ pub fn read_check_data<R: io::Read>(reader: &mut R) -> Result<ChannelStateCheckData, DecodeError> {
15613+ let ver = read_ver_prefix!(reader, SERIALIZATION_VERSION);
15614+ if ver <= 2 {
15615+ return Err(DecodeError::UnknownVersion);
15616+ }
15617+
15618+ // `user_id` used to be a single u64 value. In order to remain backwards compatible with
15619+ // versions prior to 0.0.113, the u128 is serialized as two separate u64 values. We read
15620+ // the low bytes now and the high bytes later.
15621+ let user_id_low: u64 = Readable::read(reader)?;
15622+
15623+ let mut config = LegacyChannelConfig::default();
15624+ {
15625+ // Read the 8 bytes of backwards-compatibility ChannelConfig data.
15626+ let mut _val: u64 = Readable::read(reader)?;
15627+ }
15628+
15629+ let channel_id: ChannelId = Readable::read(reader)?;
15630+ let channel_state =
15631+ ChannelState::from_u32(Readable::read(reader)?).map_err(|_| DecodeError::InvalidValue)?;
15632+ let channel_value_satoshis: u64 = Readable::read(reader)?;
15633+
15634+ let latest_monitor_update_id = Readable::read(reader)?;
15635+
15636+ // Read the old serialization for shutdown_pubkey, preferring the TLV field later if set.
15637+ let mut shutdown_scriptpubkey = match <PublicKey as Readable>::read(reader) {
15638+ Ok(pubkey) => Some(ShutdownScript::new_p2wpkh_from_pubkey(pubkey)),
15639+ Err(_) => None,
15640+ };
15641+ let destination_script: ScriptBuf = Readable::read(reader)?;
15642+
15643+ let holder_commitment_next_transaction_number: u64 = Readable::read(reader)?;
15644+ let counterparty_next_commitment_transaction_number: u64 = Readable::read(reader)?;
15645+
15646+ let cur_holder_commitment_transaction_number = holder_commitment_next_transaction_number + 1;
15647+ let revoked_counterparty_commitment_transaction_number =
15648+ counterparty_next_commitment_transaction_number + 2;
15649+ let cur_counterparty_commitment_transaction_number =
15650+ counterparty_next_commitment_transaction_number
15651+ + if channel_state.is_awaiting_remote_revoke() { 0 } else { 1 };
15652+
15653+ Ok(ChannelStateCheckData {
15654+ cur_holder_commitment_transaction_number,
15655+ revoked_counterparty_commitment_transaction_number,
15656+ cur_counterparty_commitment_transaction_number,
15657+ latest_monitor_update_id,
15658+ })
15659+ }
15660+
1560415661fn duration_since_epoch() -> Option<Duration> {
1560515662 #[cfg(not(feature = "std"))]
1560615663 let now = None;
0 commit comments