@@ -6500,30 +6500,46 @@ fn test_bump_penalty_txn_on_revoked_htlcs() {
6500
6500
6501
6501
// Connect three more block to see if bumped penalty are issued for HTLC txn
6502
6502
let header_132 = connect_blocks ( & nodes[ 0 ] . block_notifier , 3 , 129 , true , header_129. bitcoin_hash ( ) ) ;
6503
- let node_txn = {
6503
+ let penalty_local_tx;
6504
+ {
6504
6505
let mut node_txn = nodes[ 0 ] . tx_broadcaster . txn_broadcasted . lock ( ) . unwrap ( ) ;
6505
- assert_eq ! ( node_txn. len( ) , 5 ) ; // 2 bumped penalty txn on offered/received HTLC outputs of revoked commitment tx + 1 penalty tx on to_local of revoked commitment tx + 2 bumped penalty tx on revoked HTLC txn
6506
+ assert_eq ! ( node_txn. len( ) , 3 ) ; // 2 bumped penalty txn on offered/received HTLC outputs of revoked commitment tx + 1 penalty tx on to_local of revoked commitment tx + 2 bumped penalty tx on revoked HTLC txn
6506
6507
6507
6508
check_spends ! ( node_txn[ 0 ] , revoked_local_txn[ 0 ] . clone( ) ) ;
6508
6509
check_spends ! ( node_txn[ 1 ] , revoked_local_txn[ 0 ] . clone( ) ) ;
6509
6510
6510
- let mut penalty_local = :: std:: usize:: MAX ;
6511
+ check_spends ! ( node_txn[ 2 ] , revoked_local_txn[ 0 ] . clone( ) ) ;
6512
+
6513
+ penalty_local_tx = node_txn[ 2 ] . clone ( ) ;
6514
+ node_txn. clear ( ) ;
6515
+ } ;
6516
+ // Few more blocks to broadcast and confirm penalty_local_tx
6517
+ let header_133 = BlockHeader { version : 0x20000000 , prev_blockhash : header_132, merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ;
6518
+ nodes[ 0 ] . block_notifier . block_connected ( & Block { header : header_133, txdata : vec ! [ penalty_local_tx] } , 133 ) ;
6519
+ let header_135 = connect_blocks ( & nodes[ 0 ] . block_notifier , 2 , 133 , true , header_133. bitcoin_hash ( ) ) ;
6520
+ {
6521
+ let mut node_txn = nodes[ 0 ] . tx_broadcaster . txn_broadcasted . lock ( ) . unwrap ( ) ;
6522
+ assert_eq ! ( node_txn. len( ) , 1 ) ;
6523
+ check_spends ! ( node_txn[ 0 ] , revoked_local_txn[ 0 ] . clone( ) ) ;
6524
+ node_txn. clear ( ) ;
6525
+ }
6526
+ let header_144 = connect_blocks ( & nodes[ 0 ] . block_notifier , 9 , 135 , true , header_135) ;
6527
+ let node_txn = {
6528
+ let mut node_txn = nodes[ 0 ] . tx_broadcaster . txn_broadcasted . lock ( ) . unwrap ( ) ;
6529
+ assert_eq ! ( node_txn. len( ) , 2 ) ;
6530
+
6511
6531
let mut penalty_offered = :: std:: usize:: MAX ;
6512
6532
let mut penalty_received = :: std:: usize:: MAX ;
6513
6533
6514
6534
{
6515
- let iter_txn = node_txn[ 2 ..] . iter ( ) ;
6516
- for ( i, tx) in iter_txn. enumerate ( ) {
6517
- if tx. input [ 0 ] . previous_output . txid == revoked_local_txn[ 0 ] . txid ( ) {
6518
- penalty_local = 2 + i;
6519
- } else if tx. input [ 0 ] . previous_output . txid == revoked_htlc_txn[ offered] . txid ( ) {
6520
- penalty_offered = 2 + i;
6535
+ for ( i, tx) in node_txn. iter ( ) . enumerate ( ) {
6536
+ if tx. input [ 0 ] . previous_output . txid == revoked_htlc_txn[ offered] . txid ( ) {
6537
+ penalty_offered = i;
6521
6538
} else if tx. input [ 0 ] . previous_output . txid == revoked_htlc_txn[ received] . txid ( ) {
6522
- penalty_received = 2 + i;
6539
+ penalty_received = i;
6523
6540
}
6524
6541
}
6525
6542
}
6526
- check_spends ! ( node_txn[ penalty_local] , revoked_local_txn[ 0 ] . clone( ) ) ;
6527
6543
6528
6544
assert_eq ! ( node_txn[ penalty_received] . input. len( ) , 1 ) ;
6529
6545
assert_eq ! ( node_txn[ penalty_received] . output. len( ) , 1 ) ;
@@ -6541,24 +6557,17 @@ fn test_bump_penalty_txn_on_revoked_htlcs() {
6541
6557
let fee = revoked_htlc_txn[ received] . output [ 0 ] . value - node_txn[ penalty_received] . output [ 0 ] . value ;
6542
6558
let new_feerate = fee * 1000 / node_txn[ penalty_received] . get_weight ( ) as u64 ;
6543
6559
assert ! ( new_feerate * 100 > feerate_2 * 125 ) ;
6544
- let txn = vec ! [ node_txn[ 2 ] . clone( ) , node_txn[ 3 ] . clone ( ) , node_txn [ 4 ] . clone( ) ] ;
6560
+ let txn = vec ! [ node_txn[ 0 ] . clone( ) , node_txn[ 1 ] . clone( ) ] ;
6545
6561
node_txn. clear ( ) ;
6546
6562
txn
6547
6563
} ;
6548
6564
// Broadcast claim txn and confirm blocks to avoid further bumps on this outputs
6549
- let header_133 = BlockHeader { version : 0x20000000 , prev_blockhash : header_132, merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ;
6550
- nodes[ 0 ] . block_notifier . block_connected ( & Block { header : header_133, txdata : node_txn } , 133 ) ;
6551
- let header_140 = connect_blocks ( & nodes[ 0 ] . block_notifier , 6 , 134 , true , header_133. bitcoin_hash ( ) ) ;
6552
- {
6553
- let mut node_txn = nodes[ 0 ] . tx_broadcaster . txn_broadcasted . lock ( ) . unwrap ( ) ;
6554
- node_txn. clear ( ) ;
6555
- }
6556
-
6557
- // Connect few more blocks and check only penalty transaction for to_local output have been issued
6558
- connect_blocks ( & nodes[ 0 ] . block_notifier , 7 , 140 , true , header_140) ;
6565
+ let header_145 = BlockHeader { version : 0x20000000 , prev_blockhash : header_144, merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ;
6566
+ nodes[ 0 ] . block_notifier . block_connected ( & Block { header : header_145, txdata : node_txn } , 145 ) ;
6567
+ connect_blocks ( & nodes[ 0 ] . block_notifier , 20 , 145 , true , header_145. bitcoin_hash ( ) ) ;
6559
6568
{
6560
6569
let mut node_txn = nodes[ 0 ] . tx_broadcaster . txn_broadcasted . lock ( ) . unwrap ( ) ;
6561
- assert_eq ! ( node_txn. len( ) , 2 ) ; //TODO: should be zero when we fix check_spend_remote_htlc
6570
+ assert_eq ! ( node_txn. len( ) , 2 ) ; //TODO: fix check_spend_remote_htlc lack of watch output
6562
6571
node_txn. clear ( ) ;
6563
6572
}
6564
6573
check_closed_broadcast ! ( nodes[ 0 ] , false ) ;
0 commit comments