@@ -450,36 +450,43 @@ impl InteractiveTxSigningSession {
450450
451451impl Writeable for InteractiveTxSigningSession {
452452 fn write < W : Writer > ( & self , writer : & mut W ) -> Result < ( ) , io:: Error > {
453- self . unsigned_tx . holder_is_initiator . write ( writer) ?;
454- self . unsigned_tx . holder_sends_tx_signatures_first . write ( writer) ?;
455- self . unsigned_tx
456- . inputs
457- . iter ( )
458- . map ( |input| input. serial_id ( ) )
459- . collect :: < Vec < _ > > ( )
460- . write ( writer) ?;
461- self . unsigned_tx
462- . outputs
463- . iter ( )
464- . map ( |output| output. serial_id )
465- . collect :: < Vec < _ > > ( )
466- . write ( writer) ?;
467- self . holder_tx_signatures . write ( writer) ?;
468- self . counterparty_sent_tx_signatures . write ( writer) ?;
469- self . has_received_commitment_signed . write ( writer) ?;
453+ let input_serial_ids =
454+ self . unsigned_tx . inputs . iter ( ) . map ( |input| input. serial_id ( ) ) . collect :: < Vec < _ > > ( ) ;
455+ let output_serial_ids =
456+ self . unsigned_tx . outputs . iter ( ) . map ( |output| output. serial_id ) . collect :: < Vec < _ > > ( ) ;
457+
458+ write_tlv_fields ! ( writer, {
459+ ( 0 , self . unsigned_tx. holder_is_initiator, required) ,
460+ ( 2 , self . unsigned_tx. holder_sends_tx_signatures_first, required) ,
461+ ( 4 , input_serial_ids, required) ,
462+ ( 6 , output_serial_ids, required) ,
463+ ( 8 , self . holder_tx_signatures, required) ,
464+ ( 10 , self . counterparty_sent_tx_signatures, required) ,
465+ ( 12 , self . has_received_commitment_signed, required) ,
466+ } ) ;
470467 Ok ( ( ) )
471468 }
472469}
473470
474471impl Readable for InteractiveTxSigningSession {
475472 fn read < R : io:: Read > ( reader : & mut R ) -> Result < Self , DecodeError > {
476- let holder_is_initiator: bool = Readable :: read ( reader) ?;
477- let holder_sends_tx_signatures_first: bool = Readable :: read ( reader) ?;
478- let inputs: Vec < SerialId > = Readable :: read ( reader) ?;
479- let outputs: Vec < SerialId > = Readable :: read ( reader) ?;
480- let holder_tx_signatures: Option < TxSignatures > = Readable :: read ( reader) ?;
481- let counterparty_sent_tx_signatures: bool = Readable :: read ( reader) ?;
482- let has_received_commitment_signed: bool = Readable :: read ( reader) ?;
473+ let mut holder_is_initiator = false ;
474+ let mut holder_sends_tx_signatures_first = false ;
475+ let mut input_serial_ids: Vec < SerialId > = vec ! [ ] ;
476+ let mut output_serial_ids: Vec < SerialId > = vec ! [ ] ;
477+ let mut holder_tx_signatures: Option < TxSignatures > = None ;
478+ let mut counterparty_sent_tx_signatures = false ;
479+ let mut has_received_commitment_signed = false ;
480+
481+ read_tlv_fields ! ( reader, {
482+ ( 0 , holder_is_initiator, required) ,
483+ ( 2 , holder_sends_tx_signatures_first, required) ,
484+ ( 4 , input_serial_ids, required) ,
485+ ( 6 , output_serial_ids, required) ,
486+ ( 8 , holder_tx_signatures, required) ,
487+ ( 10 , counterparty_sent_tx_signatures, required) ,
488+ ( 12 , has_received_commitment_signed, required) ,
489+ } ) ;
483490
484491 // We use an empty dummy `TxOut` for all `TxOut`s as they will be populated with their real
485492 // values from `funding_transaction` after reading.
@@ -493,7 +500,7 @@ impl Readable for InteractiveTxSigningSession {
493500 unsigned_tx : ConstructedTransaction {
494501 holder_is_initiator,
495502 holder_sends_tx_signatures_first,
496- inputs : inputs
503+ inputs : input_serial_ids
497504 . into_iter ( )
498505 . map ( |serial_id| {
499506 if is_serial_id_valid_for_counterparty ( holder_is_initiator, serial_id) {
@@ -514,7 +521,7 @@ impl Readable for InteractiveTxSigningSession {
514521 }
515522 } )
516523 . collect ( ) ,
517- outputs : outputs
524+ outputs : output_serial_ids
518525 . into_iter ( )
519526 . map ( |serial_id| {
520527 let added_by = if is_serial_id_valid_for_counterparty (
0 commit comments