@@ -450,36 +450,43 @@ impl InteractiveTxSigningSession {
450
450
451
451
impl Writeable for InteractiveTxSigningSession {
452
452
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
+ } ) ;
470
467
Ok ( ( ) )
471
468
}
472
469
}
473
470
474
471
impl Readable for InteractiveTxSigningSession {
475
472
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
+ } ) ;
483
490
484
491
// We use an empty dummy `TxOut` for all `TxOut`s as they will be populated with their real
485
492
// values from `funding_transaction` after reading.
@@ -493,7 +500,7 @@ impl Readable for InteractiveTxSigningSession {
493
500
unsigned_tx : ConstructedTransaction {
494
501
holder_is_initiator,
495
502
holder_sends_tx_signatures_first,
496
- inputs : inputs
503
+ inputs : input_serial_ids
497
504
. into_iter ( )
498
505
. map ( |serial_id| {
499
506
if is_serial_id_valid_for_counterparty ( holder_is_initiator, serial_id) {
@@ -514,7 +521,7 @@ impl Readable for InteractiveTxSigningSession {
514
521
}
515
522
} )
516
523
. collect ( ) ,
517
- outputs : outputs
524
+ outputs : output_serial_ids
518
525
. into_iter ( )
519
526
. map ( |serial_id| {
520
527
let added_by = if is_serial_id_valid_for_counterparty (
0 commit comments