88// licenses.
99
1010use crate :: io_extras:: sink;
11- use crate :: { io , prelude:: * } ;
11+ use crate :: prelude:: * ;
1212
1313use bitcoin:: absolute:: LockTime as AbsoluteLockTime ;
1414use bitcoin:: amount:: Amount ;
1515use bitcoin:: consensus:: Encodable ;
1616use bitcoin:: constants:: WITNESS_SCALE_FACTOR ;
17- use bitcoin:: hashes:: Hash ;
1817use bitcoin:: policy:: MAX_STANDARD_TX_WEIGHT ;
1918use bitcoin:: secp256k1:: PublicKey ;
2019use bitcoin:: transaction:: Version ;
@@ -27,13 +26,11 @@ use crate::ln::msgs;
2726use crate :: ln:: msgs:: { MessageSendEvent , SerialId , TxSignatures } ;
2827use crate :: ln:: types:: ChannelId ;
2928use 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 ;
3130
3231use core:: fmt:: Display ;
3332use core:: ops:: Deref ;
3433
35- use super :: msgs:: DecodeError ;
36-
3734/// The number of received `tx_add_input` messages during a negotiation at which point the
3835/// negotiation MUST be failed.
3936const MAX_RECEIVED_TX_ADD_INPUT_COUNT : u16 = 4096 ;
@@ -171,60 +168,17 @@ pub(crate) struct ConstructedTransaction {
171168 holder_sends_tx_signatures_first : bool ,
172169}
173170
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+ } ) ;
228182
229183impl ConstructedTransaction {
230184 fn new ( context : NegotiationContext ) -> Self {
@@ -1219,44 +1173,11 @@ pub struct LocalOrRemoteInput {
12191173 prev_output : TxOut ,
12201174}
12211175
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+ } ) ;
12601181
12611182#[ derive( Clone , Debug , Eq , PartialEq ) ]
12621183pub ( crate ) enum InteractiveTxInput {
0 commit comments