Skip to content

Commit 8dcdf1d

Browse files
author
Antoine Riard
committed
-f move to impl_writeable*! macros
1 parent 0a95954 commit 8dcdf1d

File tree

3 files changed

+38
-110
lines changed

3 files changed

+38
-110
lines changed

lightning/src/chain/onchain_utils.rs

Lines changed: 36 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use bitcoin::hash_types::Txid;
2020
use bitcoin::secp256k1::key::{SecretKey,PublicKey};
2121

2222
use ln::PaymentPreimage;
23-
use ln::chan_utils::{TxCreationKeys, HTLCOutputInCommitment};
23+
use ln::chan_utils::{TxCreationKeys, HTLCOutputInCommitment, HTLC_OUTPUT_IN_COMMITMENT_SIZE};
2424
use ln::chan_utils;
2525
use ln::msgs::DecodeError;
2626
use chain::chaininterface::{FeeEstimator, ConfirmationTarget, MIN_RELAY_FEE_SAT_PER_1000_WEIGHT};
@@ -84,42 +84,19 @@ impl RevokedOutput {
8484
}
8585
}
8686

87-
impl Writeable for RevokedOutput {
88-
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), ::std::io::Error> {
89-
self.per_commitment_point.write(writer)?;
90-
self.counterparty_delayed_payment_base_key.write(writer)?;
91-
self.counterparty_htlc_base_key.write(writer)?;
92-
writer.write_all(&self.per_commitment_key[..])?;
93-
writer.write_all(&byte_utils::be64_to_array(self.weight))?;
94-
writer.write_all(&byte_utils::be64_to_array(self.amount))?;
95-
self.htlc.write(writer)?;
96-
self.on_counterparty_tx_csv.write(writer)?;
97-
Ok(())
98-
}
99-
}
100-
101-
impl Readable for RevokedOutput {
102-
fn read<R: ::std::io::Read>(reader: &mut R) -> Result<Self, DecodeError> {
103-
let per_commitment_point = Readable::read(reader)?;
104-
let counterparty_delayed_payment_base_key = Readable::read(reader)?;
105-
let counterparty_htlc_base_key = Readable::read(reader)?;
106-
let per_commitment_key = Readable::read(reader)?;
107-
let weight = Readable::read(reader)?;
108-
let amount = Readable::read(reader)?;
109-
let htlc = Readable::read(reader)?;
110-
let on_counterparty_tx_csv = Readable::read(reader)?;
111-
Ok(RevokedOutput {
112-
per_commitment_point,
113-
counterparty_delayed_payment_base_key,
114-
counterparty_htlc_base_key,
115-
per_commitment_key,
116-
weight,
117-
amount,
118-
htlc,
119-
on_counterparty_tx_csv
120-
})
121-
}
122-
}
87+
impl_writeable_len_match!(RevokedOutput, {
88+
{ RevokedOutput { htlc: None, .. }, 33*3 + 32 + 8 + 8 + 1 + 2 },
89+
{ _, 33*3 + 32 + 8 + 8 + 1 + HTLC_OUTPUT_IN_COMMITMENT_SIZE + 2 }
90+
}, {
91+
per_commitment_point,
92+
counterparty_delayed_payment_base_key,
93+
counterparty_htlc_base_key,
94+
per_commitment_key,
95+
weight,
96+
amount,
97+
htlc,
98+
on_counterparty_tx_csv
99+
});
123100

124101
/// A struct to describe a HTLC output on a counterparty commitment transaction.
125102
///
@@ -148,46 +125,16 @@ impl CounterpartyHTLCOutput {
148125
}
149126
}
150127

151-
impl Writeable for CounterpartyHTLCOutput {
152-
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), ::std::io::Error> {
153-
self.per_commitment_point.write(writer)?;
154-
self.counterparty_delayed_payment_base_key.write(writer)?;
155-
self.counterparty_htlc_base_key.write(writer)?;
156-
if let Some(preimage) = self.preimage {
157-
writer.write_all(&[0; 1])?;
158-
preimage.write(writer)?;
159-
} else {
160-
writer.write_all(&[1;1])?;
161-
}
162-
self.htlc.write(writer)?;
163-
Ok(())
164-
}
165-
}
166-
167-
impl Readable for CounterpartyHTLCOutput {
168-
fn read<R: ::std::io::Read>(reader: &mut R) -> Result<Self, DecodeError> {
169-
let per_commitment_point = Readable::read(reader)?;
170-
let counterparty_delayed_payment_base_key = Readable::read(reader)?;
171-
let counterparty_htlc_base_key = Readable::read(reader)?;
172-
let preimage = match <u8 as Readable>::read(reader)? {
173-
0 => {
174-
let preimage = Readable::read(reader)?;
175-
Some(preimage)
176-
},
177-
1 => { None },
178-
_ => return Err(DecodeError::InvalidValue),
179-
};
180-
181-
let htlc = Readable::read(reader)?;
182-
Ok(CounterpartyHTLCOutput {
183-
per_commitment_point,
184-
counterparty_delayed_payment_base_key,
185-
counterparty_htlc_base_key,
186-
preimage,
187-
htlc
188-
})
189-
}
190-
}
128+
impl_writeable_len_match!(CounterpartyHTLCOutput, {
129+
{ CounterpartyHTLCOutput { preimage: None, .. }, 33*3 + 1 + HTLC_OUTPUT_IN_COMMITMENT_SIZE },
130+
{ _, 33*3 + 1 + 32 + HTLC_OUTPUT_IN_COMMITMENT_SIZE }
131+
}, {
132+
per_commitment_point,
133+
counterparty_delayed_payment_base_key,
134+
counterparty_htlc_base_key,
135+
preimage,
136+
htlc
137+
});
191138

192139
/// A struct to describe a HTLC output on holder commitment transaction.
193140
///
@@ -208,24 +155,13 @@ impl HolderHTLCOutput {
208155
}
209156
}
210157

211-
impl Writeable for HolderHTLCOutput {
212-
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), ::std::io::Error> {
213-
self.preimage.write(writer)?;
214-
writer.write_all(&byte_utils::be64_to_array(self.amount))?;
215-
Ok(())
216-
}
217-
}
218-
219-
impl Readable for HolderHTLCOutput {
220-
fn read<R: ::std::io::Read>(reader: &mut R) -> Result<Self, DecodeError> {
221-
let preimage = Readable::read(reader)?;
222-
let amount = Readable::read(reader)?;
223-
Ok(HolderHTLCOutput {
224-
preimage,
225-
amount,
226-
})
227-
}
228-
}
158+
impl_writeable_len_match!(HolderHTLCOutput, {
159+
{ HolderHTLCOutput { preimage: None, .. }, 1 + 8 },
160+
{ _, 1 + 32 + 8 }
161+
}, {
162+
preimage,
163+
amount
164+
});
229165

230166
/// A struct to describe the channel output on the funding transaction.
231167
///
@@ -243,20 +179,11 @@ impl HolderFundingOutput {
243179
}
244180
}
245181

246-
impl Writeable for HolderFundingOutput {
247-
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), ::std::io::Error> {
248-
self.funding_redeemscript.write(writer)?;
249-
Ok(())
250-
}
251-
}
252-
253-
impl Readable for HolderFundingOutput {
254-
fn read<R: ::std::io::Read>(reader: &mut R) -> Result<Self, DecodeError> {
255-
Ok(HolderFundingOutput {
256-
funding_redeemscript: Readable::read(reader)?,
257-
})
258-
}
259-
}
182+
impl_writeable_len_match!(HolderFundingOutput, {
183+
{ HolderFundingOutput { ref funding_redeemscript }, 2 + funding_redeemscript.len() }
184+
}, {
185+
funding_redeemscript
186+
});
260187

261188
/// A wrapper encapsulating all in-protocol differing outputs categories.
262189
///

lightning/src/ln/chan_utils.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ use std::ops::Deref;
4040
use chain;
4141

4242
// Maximum size of a serialized HTLCOutputInCommitment
43-
const HTLC_OUTPUT_IN_COMMITMENT_SIZE: usize = 1 + 8 + 4 + 32 + 5;
43+
pub(crate) const HTLC_OUTPUT_IN_COMMITMENT_SIZE: usize = 1 + 8 + 4 + 32 + 5;
4444

4545
pub(crate) const MAX_HTLCS: u16 = 483;
4646

lightning/src/util/ser_macros.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ macro_rules! impl_writeable_len_match {
158158
use util::ser::LengthCalculatingWriter;
159159
let mut len_calc = LengthCalculatingWriter(0);
160160
$( self.$field.write(&mut len_calc)?; )*
161+
println!("len calc {} vs len {}", len_calc.0, len);
161162
assert!(len_calc.0 $cmp len);
162163
}
163164
$( self.$field.write(w)?; )*

0 commit comments

Comments
 (0)