+ let to_remote_rescue = match <u8 as Readable<R>>::read(reader)? {
+ 0 => None,
+ 1 => {
+ let to_remote_script = Readable::read(reader)?;
+ let local_key = Readable::read(reader)?;
+ Some((to_remote_script, local_key))
+ }
+ _ => return Err(DecodeError::InvalidValue),
+ };
+
+ let our_claim_txn_waiting_first_conf_len: u64 = Readable::read(reader)?;
+ let mut our_claim_txn_waiting_first_conf = HashMap::with_capacity(cmp::min(our_claim_txn_waiting_first_conf_len as usize, MAX_ALLOC_SIZE / 128));
+ for _ in 0..our_claim_txn_waiting_first_conf_len {
+ let outpoint = Readable::read(reader)?;
+ let height_target = Readable::read(reader)?;
+ let tx_material = match <u8 as Readable<R>>::read(reader)? {
+ 0 => {
+ let script = Readable::read(reader)?;
+ let pubkey = Readable::read(reader)?;
+ let key = Readable::read(reader)?;
+ let is_htlc = match <u8 as Readable<R>>::read(reader)? {
+ 0 => true,
+ 1 => false,
+ _ => return Err(DecodeError::InvalidValue),
+ };
+ let amount = Readable::read(reader)?;
+ TxMaterial::Revoked {
+ script,
+ pubkey,
+ key,
+ is_htlc,
+ amount
+ }
+ },
+ 1 => {
+ let script = Readable::read(reader)?;
+ let key = Readable::read(reader)?;
+ let preimage = Readable::read(reader)?;
+ let amount = Readable::read(reader)?;
+ TxMaterial::RemoteHTLC {
+ script,
+ key,
+ preimage,
+ amount
+ }
+ },
+ 2 => {
+ let script = Readable::read(reader)?;
+ let their_sig = Readable::read(reader)?;
+ let our_sig = Readable::read(reader)?;
+ let preimage = Readable::read(reader)?;
+ let amount = Readable::read(reader)?;
+ TxMaterial::LocalHTLC {
+ script,
+ sigs: (their_sig, our_sig),
+ preimage,
+ amount
+ }
+ }
+ _ => return Err(DecodeError::InvalidValue),
+ };
+ let last_fee = Readable::read(reader)?;
+ let timelock_expiration = Readable::read(reader)?;
+ let height = Readable::read(reader)?;
+ our_claim_txn_waiting_first_conf.insert(outpoint, (height_target, tx_material, last_fee, timelock_expiration, height));
+ }
+
+ let waiting_threshold_conf_len: u64 = Readable::read(reader)?;
+ let mut onchain_events_waiting_threshold_conf = HashMap::with_capacity(cmp::min(waiting_threshold_conf_len as usize, MAX_ALLOC_SIZE / 128));
+ for _ in 0..waiting_threshold_conf_len {
+ let height_target = Readable::read(reader)?;
+ let events_len: u64 = Readable::read(reader)?;
+ let mut events = Vec::with_capacity(cmp::min(events_len as usize, MAX_ALLOC_SIZE / 128));
+ for _ in 0..events_len {
+ let ev = match <u8 as Readable<R>>::read(reader)? {
+ 0 => {
+ let outpoint = Readable::read(reader)?;
+ OnchainEvent::Claim {
+ outpoint
+ }
+ },
+ 1 => {
+ let htlc_source = Readable::read(reader)?;
+ let hash = Readable::read(reader)?;
+ OnchainEvent::HTLCUpdate {
+ htlc_update: (htlc_source, hash)
+ }
+ },
+ _ => return Err(DecodeError::InvalidValue),
+ };
+ events.push(ev);
+ }
+ onchain_events_waiting_threshold_conf.insert(height_target, events);
+ }