@@ -20,7 +20,7 @@ use bitcoin::hash_types::Txid;
20
20
use bitcoin:: secp256k1:: key:: { SecretKey , PublicKey } ;
21
21
22
22
use ln:: PaymentPreimage ;
23
- use ln:: chan_utils:: { TxCreationKeys , HTLCOutputInCommitment } ;
23
+ use ln:: chan_utils:: { TxCreationKeys , HTLCOutputInCommitment , HTLC_OUTPUT_IN_COMMITMENT_SIZE } ;
24
24
use ln:: chan_utils;
25
25
use ln:: msgs:: DecodeError ;
26
26
use chain:: chaininterface:: { FeeEstimator , ConfirmationTarget , MIN_RELAY_FEE_SAT_PER_1000_WEIGHT } ;
@@ -84,42 +84,19 @@ impl RevokedOutput {
84
84
}
85
85
}
86
86
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
+ } ) ;
123
100
124
101
/// A struct to describe a HTLC output on a counterparty commitment transaction.
125
102
///
@@ -148,46 +125,16 @@ impl CounterpartyHTLCOutput {
148
125
}
149
126
}
150
127
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
+ } ) ;
191
138
192
139
/// A struct to describe a HTLC output on holder commitment transaction.
193
140
///
@@ -208,24 +155,13 @@ impl HolderHTLCOutput {
208
155
}
209
156
}
210
157
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
+ } ) ;
229
165
230
166
/// A struct to describe the channel output on the funding transaction.
231
167
///
@@ -243,20 +179,11 @@ impl HolderFundingOutput {
243
179
}
244
180
}
245
181
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
+ } ) ;
260
187
261
188
/// A wrapper encapsulating all in-protocol differing outputs categories.
262
189
///
0 commit comments