8
8
// licenses.
9
9
10
10
use crate :: io_extras:: sink;
11
- use crate :: { io , prelude:: * } ;
11
+ use crate :: prelude:: * ;
12
12
13
13
use bitcoin:: absolute:: LockTime as AbsoluteLockTime ;
14
14
use bitcoin:: amount:: Amount ;
15
15
use bitcoin:: consensus:: Encodable ;
16
16
use bitcoin:: constants:: WITNESS_SCALE_FACTOR ;
17
- use bitcoin:: hashes:: Hash ;
18
17
use bitcoin:: policy:: MAX_STANDARD_TX_WEIGHT ;
19
18
use bitcoin:: secp256k1:: PublicKey ;
20
19
use bitcoin:: transaction:: Version ;
@@ -27,13 +26,11 @@ use crate::ln::msgs;
27
26
use crate :: ln:: msgs:: { MessageSendEvent , SerialId , TxSignatures } ;
28
27
use crate :: ln:: types:: ChannelId ;
29
28
use crate :: sign:: { EntropySource , P2TR_KEY_PATH_WITNESS_WEIGHT , P2WPKH_WITNESS_WEIGHT } ;
30
- use crate :: util:: ser:: { Readable , TransactionU16LenLimited , Writeable , Writer } ;
29
+ use crate :: util:: ser:: TransactionU16LenLimited ;
31
30
32
31
use core:: fmt:: Display ;
33
32
use core:: ops:: Deref ;
34
33
35
- use super :: msgs:: DecodeError ;
36
-
37
34
/// The number of received `tx_add_input` messages during a negotiation at which point the
38
35
/// negotiation MUST be failed.
39
36
const MAX_RECEIVED_TX_ADD_INPUT_COUNT : u16 = 4096 ;
@@ -171,60 +168,17 @@ pub(crate) struct ConstructedTransaction {
171
168
holder_sends_tx_signatures_first : bool ,
172
169
}
173
170
174
- impl Writeable for ConstructedTransaction {
175
- fn write < W : Writer > ( & self , writer : & mut W ) -> Result < ( ) , io:: Error > {
176
- let lock_time = self . lock_time . to_consensus_u32 ( ) ;
177
- write_tlv_fields ! ( writer, {
178
- ( 1 , self . holder_is_initiator, required) ,
179
- ( 3 , self . inputs, required) ,
180
- ( 5 , self . outputs, required) ,
181
- ( 7 , self . local_inputs_value_satoshis, required) ,
182
- ( 9 , self . local_outputs_value_satoshis, required) ,
183
- ( 11 , self . remote_inputs_value_satoshis, required) ,
184
- ( 13 , self . remote_outputs_value_satoshis, required) ,
185
- ( 15 , lock_time, required) ,
186
- ( 17 , self . holder_sends_tx_signatures_first, required) ,
187
- } ) ;
188
- Ok ( ( ) )
189
- }
190
- }
191
-
192
- impl Readable for ConstructedTransaction {
193
- fn read < R : io:: Read > ( reader : & mut R ) -> Result < Self , DecodeError > {
194
- let mut holder_is_initiator = false ;
195
- let mut inputs: Vec < InteractiveTxInput > = vec ! [ ] ;
196
- let mut outputs: Vec < InteractiveTxOutput > = vec ! [ ] ;
197
- let mut local_inputs_value_satoshis: u64 = 0 ;
198
- let mut local_outputs_value_satoshis: u64 = 0 ;
199
- let mut remote_inputs_value_satoshis: u64 = 0 ;
200
- let mut remote_outputs_value_satoshis: u64 = 0 ;
201
- let mut lock_time: u32 = 0 ;
202
- let mut holder_sends_tx_signatures_first = false ;
203
- read_tlv_fields ! ( reader, {
204
- ( 1 , holder_is_initiator, required) ,
205
- ( 3 , inputs, required) ,
206
- ( 5 , outputs, required) ,
207
- ( 7 , local_inputs_value_satoshis, required) ,
208
- ( 9 , local_outputs_value_satoshis, required) ,
209
- ( 11 , remote_inputs_value_satoshis, required) ,
210
- ( 13 , remote_outputs_value_satoshis, required) ,
211
- ( 15 , lock_time, required) ,
212
- ( 17 , holder_sends_tx_signatures_first, required) ,
213
- } ) ;
214
- let lock_time = AbsoluteLockTime :: from_consensus ( lock_time) ;
215
- Ok ( ConstructedTransaction {
216
- holder_is_initiator,
217
- inputs,
218
- outputs,
219
- local_inputs_value_satoshis,
220
- local_outputs_value_satoshis,
221
- remote_inputs_value_satoshis,
222
- remote_outputs_value_satoshis,
223
- lock_time,
224
- holder_sends_tx_signatures_first,
225
- } )
226
- }
227
- }
171
+ impl_writeable_tlv_based ! ( ConstructedTransaction , {
172
+ ( 1 , holder_is_initiator, required) ,
173
+ ( 3 , inputs, required) ,
174
+ ( 5 , outputs, required) ,
175
+ ( 7 , local_inputs_value_satoshis, required) ,
176
+ ( 9 , local_outputs_value_satoshis, required) ,
177
+ ( 11 , remote_inputs_value_satoshis, required) ,
178
+ ( 13 , remote_outputs_value_satoshis, required) ,
179
+ ( 15 , lock_time, required) ,
180
+ ( 17 , holder_sends_tx_signatures_first, required) ,
181
+ } ) ;
228
182
229
183
impl ConstructedTransaction {
230
184
fn new ( context : NegotiationContext ) -> Self {
@@ -1219,44 +1173,11 @@ pub struct LocalOrRemoteInput {
1219
1173
prev_output : TxOut ,
1220
1174
}
1221
1175
1222
- impl Writeable for LocalOrRemoteInput {
1223
- fn write < W : Writer > ( & self , writer : & mut W ) -> Result < ( ) , io:: Error > {
1224
- write_tlv_fields ! ( writer, {
1225
- ( 1 , self . serial_id, required) ,
1226
- ( 3 , self . input. sequence. 0 , required) ,
1227
- ( 5 , self . input. previous_output, required) ,
1228
- ( 7 , self . input. script_sig, required) ,
1229
- ( 9 , self . input. witness, required) ,
1230
- ( 11 , self . prev_output, required) ,
1231
- } ) ;
1232
- Ok ( ( ) )
1233
- }
1234
- }
1235
-
1236
- impl Readable for LocalOrRemoteInput {
1237
- fn read < R : io:: Read > ( reader : & mut R ) -> Result < Self , DecodeError > {
1238
- let mut serial_id: u64 = 0 ;
1239
- let mut sequence: u32 = 0 ;
1240
- let mut previous_output = OutPoint :: new ( Txid :: from_byte_array ( [ 0 ; 32 ] ) , 0 ) ;
1241
- let mut script_sig = ScriptBuf :: default ( ) ;
1242
- let mut witness = Witness :: new ( ) ;
1243
- let mut prev_output =
1244
- TxOut { value : Amount :: default ( ) , script_pubkey : ScriptBuf :: default ( ) } ;
1245
- read_tlv_fields ! ( reader, {
1246
- ( 1 , serial_id, required) ,
1247
- ( 3 , sequence, required) ,
1248
- ( 5 , previous_output, required) ,
1249
- ( 7 , script_sig, required) ,
1250
- ( 9 , witness, required) ,
1251
- ( 11 , prev_output, required) ,
1252
- } ) ;
1253
- Ok ( LocalOrRemoteInput {
1254
- serial_id,
1255
- input : TxIn { previous_output, script_sig, sequence : Sequence ( sequence) , witness } ,
1256
- prev_output,
1257
- } )
1258
- }
1259
- }
1176
+ impl_writeable_tlv_based ! ( LocalOrRemoteInput , {
1177
+ ( 1 , serial_id, required) ,
1178
+ ( 3 , input, required) ,
1179
+ ( 5 , prev_output, required) ,
1180
+ } ) ;
1260
1181
1261
1182
#[ derive( Clone , Debug , Eq , PartialEq ) ]
1262
1183
pub ( crate ) enum InteractiveTxInput {
0 commit comments