Skip to content

Commit 7a77c9f

Browse files
authored
Merge pull request #298 from TheBlueMatt/2019-01-271-cleanup
Implement serialize/deserialize for Router
2 parents 4a4cdc1 + c7b8c31 commit 7a77c9f

File tree

8 files changed

+444
-221
lines changed

8 files changed

+444
-221
lines changed

src/ln/channel.rs

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use secp256k1::{Secp256k1,Signature};
1515
use secp256k1;
1616

1717
use ln::msgs;
18-
use ln::msgs::DecodeError;
18+
use ln::msgs::{DecodeError, OptionalField};
1919
use ln::channelmonitor::ChannelMonitor;
2020
use ln::channelmanager::{PendingHTLCStatus, HTLCSource, HTLCFailReason, HTLCFailureMsg, PendingForwardHTLCInfo, RAACommitmentOrder, PaymentPreimage, PaymentHash};
2121
use ln::chan_utils::{TxCreationKeys,HTLCOutputInCommitment,HTLC_SUCCESS_TX_WEIGHT,HTLC_TIMEOUT_TX_WEIGHT};
@@ -2943,7 +2943,7 @@ impl Channel {
29432943
htlc_basepoint: PublicKey::from_secret_key(&self.secp_ctx, &self.local_keys.htlc_base_key),
29442944
first_per_commitment_point: PublicKey::from_secret_key(&self.secp_ctx, &local_commitment_secret),
29452945
channel_flags: if self.config.announced_channel {1} else {0},
2946-
shutdown_scriptpubkey: None,
2946+
shutdown_scriptpubkey: OptionalField::Absent
29472947
}
29482948
}
29492949

@@ -2975,7 +2975,7 @@ impl Channel {
29752975
delayed_payment_basepoint: PublicKey::from_secret_key(&self.secp_ctx, &self.local_keys.delayed_payment_base_key),
29762976
htlc_basepoint: PublicKey::from_secret_key(&self.secp_ctx, &self.local_keys.htlc_base_key),
29772977
first_per_commitment_point: PublicKey::from_secret_key(&self.secp_ctx, &local_commitment_secret),
2978-
shutdown_scriptpubkey: None,
2978+
shutdown_scriptpubkey: OptionalField::Absent
29792979
}
29802980
}
29812981

@@ -3103,7 +3103,7 @@ impl Channel {
31033103
// dropped this channel on disconnect as it hasn't yet reached FundingSent so we can't
31043104
// overflow here.
31053105
next_remote_commitment_number: INITIAL_COMMITMENT_NUMBER - self.cur_remote_commitment_transaction_number - 1,
3106-
data_loss_protect: None,
3106+
data_loss_protect: OptionalField::Absent,
31073107
}
31083108
}
31093109

@@ -3688,14 +3688,6 @@ impl<R : ::std::io::Read> ReadableArgs<R, Arc<Logger>> for Channel {
36883688
});
36893689
}
36903690

3691-
macro_rules! read_option { () => {
3692-
match <u8 as Readable<R>>::read(reader)? {
3693-
0 => None,
3694-
1 => Some(Readable::read(reader)?),
3695-
_ => return Err(DecodeError::InvalidValue),
3696-
}
3697-
} }
3698-
36993691
let pending_outbound_htlc_count: u64 = Readable::read(reader)?;
37003692
let mut pending_outbound_htlcs = Vec::with_capacity(cmp::min(pending_outbound_htlc_count as usize, OUR_MAX_HTLCS as usize));
37013693
for _ in 0..pending_outbound_htlc_count {
@@ -3705,7 +3697,7 @@ impl<R : ::std::io::Read> ReadableArgs<R, Arc<Logger>> for Channel {
37053697
cltv_expiry: Readable::read(reader)?,
37063698
payment_hash: Readable::read(reader)?,
37073699
source: Readable::read(reader)?,
3708-
fail_reason: read_option!(),
3700+
fail_reason: Readable::read(reader)?,
37093701
state: match <u8 as Readable<R>>::read(reader)? {
37103702
0 => OutboundHTLCState::LocalAnnounced(Box::new(Readable::read(reader)?)),
37113703
1 => OutboundHTLCState::Committed,
@@ -3763,8 +3755,8 @@ impl<R : ::std::io::Read> ReadableArgs<R, Arc<Logger>> for Channel {
37633755
monitor_pending_failures.push((Readable::read(reader)?, Readable::read(reader)?, Readable::read(reader)?));
37643756
}
37653757

3766-
let pending_update_fee = read_option!();
3767-
let holding_cell_update_fee = read_option!();
3758+
let pending_update_fee = Readable::read(reader)?;
3759+
let holding_cell_update_fee = Readable::read(reader)?;
37683760

37693761
let next_local_htlc_id = Readable::read(reader)?;
37703762
let next_remote_htlc_id = Readable::read(reader)?;
@@ -3786,8 +3778,8 @@ impl<R : ::std::io::Read> ReadableArgs<R, Arc<Logger>> for Channel {
37863778
_ => return Err(DecodeError::InvalidValue),
37873779
};
37883780

3789-
let funding_tx_confirmed_in = read_option!();
3790-
let short_channel_id = read_option!();
3781+
let funding_tx_confirmed_in = Readable::read(reader)?;
3782+
let short_channel_id = Readable::read(reader)?;
37913783

37923784
let last_block_connected = Readable::read(reader)?;
37933785
let funding_tx_confirmations = Readable::read(reader)?;
@@ -3802,17 +3794,17 @@ impl<R : ::std::io::Read> ReadableArgs<R, Arc<Logger>> for Channel {
38023794
let their_max_accepted_htlcs = Readable::read(reader)?;
38033795
let minimum_depth = Readable::read(reader)?;
38043796

3805-
let their_funding_pubkey = read_option!();
3806-
let their_revocation_basepoint = read_option!();
3807-
let their_payment_basepoint = read_option!();
3808-
let their_delayed_payment_basepoint = read_option!();
3809-
let their_htlc_basepoint = read_option!();
3810-
let their_cur_commitment_point = read_option!();
3797+
let their_funding_pubkey = Readable::read(reader)?;
3798+
let their_revocation_basepoint = Readable::read(reader)?;
3799+
let their_payment_basepoint = Readable::read(reader)?;
3800+
let their_delayed_payment_basepoint = Readable::read(reader)?;
3801+
let their_htlc_basepoint = Readable::read(reader)?;
3802+
let their_cur_commitment_point = Readable::read(reader)?;
38113803

3812-
let their_prev_commitment_point = read_option!();
3804+
let their_prev_commitment_point = Readable::read(reader)?;
38133805
let their_node_id = Readable::read(reader)?;
38143806

3815-
let their_shutdown_scriptpubkey = read_option!();
3807+
let their_shutdown_scriptpubkey = Readable::read(reader)?;
38163808
let (monitor_last_block, channel_monitor) = ReadableArgs::read(reader, logger.clone())?;
38173809
// We drop the ChannelMonitor's last block connected hash cause we don't actually bother
38183810
// doing full block connection operations on the internal CHannelMonitor copies

src/ln/channelmanager.rs

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2621,12 +2621,7 @@ const MIN_SERIALIZATION_VERSION: u8 = 1;
26212621

26222622
impl Writeable for PendingForwardHTLCInfo {
26232623
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), ::std::io::Error> {
2624-
if let &Some(ref onion) = &self.onion_packet {
2625-
1u8.write(writer)?;
2626-
onion.write(writer)?;
2627-
} else {
2628-
0u8.write(writer)?;
2629-
}
2624+
self.onion_packet.write(writer)?;
26302625
self.incoming_shared_secret.write(writer)?;
26312626
self.payment_hash.write(writer)?;
26322627
self.short_channel_id.write(writer)?;
@@ -2638,13 +2633,8 @@ impl Writeable for PendingForwardHTLCInfo {
26382633

26392634
impl<R: ::std::io::Read> Readable<R> for PendingForwardHTLCInfo {
26402635
fn read(reader: &mut R) -> Result<PendingForwardHTLCInfo, DecodeError> {
2641-
let onion_packet = match <u8 as Readable<R>>::read(reader)? {
2642-
0 => None,
2643-
1 => Some(msgs::OnionPacket::read(reader)?),
2644-
_ => return Err(DecodeError::InvalidValue),
2645-
};
26462636
Ok(PendingForwardHTLCInfo {
2647-
onion_packet,
2637+
onion_packet: Readable::read(reader)?,
26482638
incoming_shared_secret: Readable::read(reader)?,
26492639
payment_hash: Readable::read(reader)?,
26502640
short_channel_id: Readable::read(reader)?,

src/ln/channelmonitor.rs

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1960,13 +1960,6 @@ impl<R: ::std::io::Read> ReadableArgs<R, Arc<Logger>> for (Sha256dHash, ChannelM
19601960
}
19611961
}
19621962
}
1963-
macro_rules! read_option { () => {
1964-
match <u8 as Readable<R>>::read(reader)? {
1965-
0 => None,
1966-
1 => Some(Readable::read(reader)?),
1967-
_ => return Err(DecodeError::InvalidValue),
1968-
}
1969-
} }
19701963

19711964
let _ver: u8 = Readable::read(reader)?;
19721965
let min_ver: u8 = Readable::read(reader)?;
@@ -1983,25 +1976,17 @@ impl<R: ::std::io::Read> ReadableArgs<R, Arc<Logger>> for (Sha256dHash, ChannelM
19831976
let delayed_payment_base_key = Readable::read(reader)?;
19841977
let payment_base_key = Readable::read(reader)?;
19851978
let shutdown_pubkey = Readable::read(reader)?;
1986-
let prev_latest_per_commitment_point = match <u8 as Readable<R>>::read(reader)? {
1987-
0 => None,
1988-
1 => Some(Readable::read(reader)?),
1989-
_ => return Err(DecodeError::InvalidValue),
1990-
};
1991-
let latest_per_commitment_point = match <u8 as Readable<R>>::read(reader)? {
1992-
0 => None,
1993-
1 => Some(Readable::read(reader)?),
1994-
_ => return Err(DecodeError::InvalidValue),
1995-
};
1979+
let prev_latest_per_commitment_point = Readable::read(reader)?;
1980+
let latest_per_commitment_point = Readable::read(reader)?;
19961981
// Technically this can fail and serialize fail a round-trip, but only for serialization of
19971982
// barely-init'd ChannelMonitors that we can't do anything with.
19981983
let outpoint = OutPoint {
19991984
txid: Readable::read(reader)?,
20001985
index: Readable::read(reader)?,
20011986
};
20021987
let funding_info = Some((outpoint, Readable::read(reader)?));
2003-
let current_remote_commitment_txid = read_option!();
2004-
let prev_remote_commitment_txid = read_option!();
1988+
let current_remote_commitment_txid = Readable::read(reader)?;
1989+
let prev_remote_commitment_txid = Readable::read(reader)?;
20051990
Storage::Local {
20061991
revocation_base_key,
20071992
htlc_base_key,
@@ -2052,7 +2037,7 @@ impl<R: ::std::io::Read> ReadableArgs<R, Arc<Logger>> for (Sha256dHash, ChannelM
20522037
let amount_msat: u64 = Readable::read(reader)?;
20532038
let cltv_expiry: u32 = Readable::read(reader)?;
20542039
let payment_hash: PaymentHash = Readable::read(reader)?;
2055-
let transaction_output_index: Option<u32> = read_option!();
2040+
let transaction_output_index: Option<u32> = Readable::read(reader)?;
20562041

20572042
HTLCOutputInCommitment {
20582043
offered, amount_msat, cltv_expiry, payment_hash, transaction_output_index
@@ -2068,7 +2053,7 @@ impl<R: ::std::io::Read> ReadableArgs<R, Arc<Logger>> for (Sha256dHash, ChannelM
20682053
let htlcs_count: u64 = Readable::read(reader)?;
20692054
let mut htlcs = Vec::with_capacity(cmp::min(htlcs_count as usize, MAX_ALLOC_SIZE / 32));
20702055
for _ in 0..htlcs_count {
2071-
htlcs.push((read_htlc_in_commitment!(), read_option!().map(|o: HTLCSource| Box::new(o))));
2056+
htlcs.push((read_htlc_in_commitment!(), <Option<HTLCSource> as Readable<R>>::read(reader)?.map(|o: HTLCSource| Box::new(o))));
20722057
}
20732058
if let Some(_) = remote_claimable_outpoints.insert(txid, htlcs) {
20742059
return Err(DecodeError::InvalidValue);
@@ -2131,7 +2116,7 @@ impl<R: ::std::io::Read> ReadableArgs<R, Arc<Logger>> for (Sha256dHash, ChannelM
21312116
1 => Some((Readable::read(reader)?, Readable::read(reader)?)),
21322117
_ => return Err(DecodeError::InvalidValue),
21332118
};
2134-
htlcs.push((htlc, sigs, read_option!()));
2119+
htlcs.push((htlc, sigs, Readable::read(reader)?));
21352120
}
21362121

21372122
LocalSignedTx {

0 commit comments

Comments
 (0)