@@ -6692,30 +6692,46 @@ fn test_bump_penalty_txn_on_revoked_htlcs() {
6692
6692
6693
6693
// Connect three more block to see if bumped penalty are issued for HTLC txn
6694
6694
let header_132 = connect_blocks ( & nodes[ 0 ] . block_notifier , 3 , 129 , true , header_129. bitcoin_hash ( ) ) ;
6695
- let node_txn = {
6695
+ let penalty_local_tx;
6696
+ {
6696
6697
let mut node_txn = nodes[ 0 ] . tx_broadcaster . txn_broadcasted . lock ( ) . unwrap ( ) ;
6697
- 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
6698
+ 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
6698
6699
6699
6700
check_spends ! ( node_txn[ 0 ] , revoked_local_txn[ 0 ] . clone( ) ) ;
6700
6701
check_spends ! ( node_txn[ 1 ] , revoked_local_txn[ 0 ] . clone( ) ) ;
6701
6702
6702
- let mut penalty_local = :: std:: usize:: MAX ;
6703
+ check_spends ! ( node_txn[ 2 ] , revoked_local_txn[ 0 ] . clone( ) ) ;
6704
+
6705
+ penalty_local_tx = node_txn[ 2 ] . clone ( ) ;
6706
+ node_txn. clear ( ) ;
6707
+ } ;
6708
+ // Few more blocks to broadcast and confirm penalty_local_tx
6709
+ let header_133 = BlockHeader { version : 0x20000000 , prev_blockhash : header_132, merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ;
6710
+ nodes[ 0 ] . block_notifier . block_connected ( & Block { header : header_133, txdata : vec ! [ penalty_local_tx] } , 133 ) ;
6711
+ let header_135 = connect_blocks ( & nodes[ 0 ] . block_notifier , 2 , 133 , true , header_133. bitcoin_hash ( ) ) ;
6712
+ {
6713
+ let mut node_txn = nodes[ 0 ] . tx_broadcaster . txn_broadcasted . lock ( ) . unwrap ( ) ;
6714
+ assert_eq ! ( node_txn. len( ) , 1 ) ;
6715
+ check_spends ! ( node_txn[ 0 ] , revoked_local_txn[ 0 ] . clone( ) ) ;
6716
+ node_txn. clear ( ) ;
6717
+ }
6718
+ let header_144 = connect_blocks ( & nodes[ 0 ] . block_notifier , 9 , 135 , true , header_135) ;
6719
+ let node_txn = {
6720
+ let mut node_txn = nodes[ 0 ] . tx_broadcaster . txn_broadcasted . lock ( ) . unwrap ( ) ;
6721
+ assert_eq ! ( node_txn. len( ) , 2 ) ;
6722
+
6703
6723
let mut penalty_offered = :: std:: usize:: MAX ;
6704
6724
let mut penalty_received = :: std:: usize:: MAX ;
6705
6725
6706
6726
{
6707
- let iter_txn = node_txn[ 2 ..] . iter ( ) ;
6708
- for ( i, tx) in iter_txn. enumerate ( ) {
6709
- if tx. input [ 0 ] . previous_output . txid == revoked_local_txn[ 0 ] . txid ( ) {
6710
- penalty_local = 2 + i;
6711
- } else if tx. input [ 0 ] . previous_output . txid == revoked_htlc_txn[ offered] . txid ( ) {
6712
- penalty_offered = 2 + i;
6727
+ for ( i, tx) in node_txn. iter ( ) . enumerate ( ) {
6728
+ if tx. input [ 0 ] . previous_output . txid == revoked_htlc_txn[ offered] . txid ( ) {
6729
+ penalty_offered = i;
6713
6730
} else if tx. input [ 0 ] . previous_output . txid == revoked_htlc_txn[ received] . txid ( ) {
6714
- penalty_received = 2 + i;
6731
+ penalty_received = i;
6715
6732
}
6716
6733
}
6717
6734
}
6718
- check_spends ! ( node_txn[ penalty_local] , revoked_local_txn[ 0 ] . clone( ) ) ;
6719
6735
6720
6736
assert_eq ! ( node_txn[ penalty_received] . input. len( ) , 1 ) ;
6721
6737
assert_eq ! ( node_txn[ penalty_received] . output. len( ) , 1 ) ;
@@ -6733,24 +6749,17 @@ fn test_bump_penalty_txn_on_revoked_htlcs() {
6733
6749
let fee = revoked_htlc_txn[ received] . output [ 0 ] . value - node_txn[ penalty_received] . output [ 0 ] . value ;
6734
6750
let new_feerate = fee * 1000 / node_txn[ penalty_received] . get_weight ( ) as u64 ;
6735
6751
assert ! ( new_feerate * 100 > feerate_2 * 125 ) ;
6736
- let txn = vec ! [ node_txn[ 2 ] . clone( ) , node_txn[ 3 ] . clone ( ) , node_txn [ 4 ] . clone( ) ] ;
6752
+ let txn = vec ! [ node_txn[ 0 ] . clone( ) , node_txn[ 1 ] . clone( ) ] ;
6737
6753
node_txn. clear ( ) ;
6738
6754
txn
6739
6755
} ;
6740
6756
// Broadcast claim txn and confirm blocks to avoid further bumps on this outputs
6741
- let header_133 = BlockHeader { version : 0x20000000 , prev_blockhash : header_132, merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ;
6742
- nodes[ 0 ] . block_notifier . block_connected ( & Block { header : header_133, txdata : node_txn } , 133 ) ;
6743
- let header_140 = connect_blocks ( & nodes[ 0 ] . block_notifier , 6 , 134 , true , header_133. bitcoin_hash ( ) ) ;
6744
- {
6745
- let mut node_txn = nodes[ 0 ] . tx_broadcaster . txn_broadcasted . lock ( ) . unwrap ( ) ;
6746
- node_txn. clear ( ) ;
6747
- }
6748
-
6749
- // Connect few more blocks and check only penalty transaction for to_local output have been issued
6750
- connect_blocks ( & nodes[ 0 ] . block_notifier , 7 , 140 , true , header_140) ;
6757
+ let header_145 = BlockHeader { version : 0x20000000 , prev_blockhash : header_144, merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ;
6758
+ nodes[ 0 ] . block_notifier . block_connected ( & Block { header : header_145, txdata : node_txn } , 145 ) ;
6759
+ connect_blocks ( & nodes[ 0 ] . block_notifier , 20 , 145 , true , header_145. bitcoin_hash ( ) ) ;
6751
6760
{
6752
6761
let mut node_txn = nodes[ 0 ] . tx_broadcaster . txn_broadcasted . lock ( ) . unwrap ( ) ;
6753
- assert_eq ! ( node_txn. len( ) , 2 ) ; //TODO: should be zero when we fix check_spend_remote_htlc
6762
+ assert_eq ! ( node_txn. len( ) , 2 ) ; //TODO: fix check_spend_remote_htlc lack of watch output
6754
6763
node_txn. clear ( ) ;
6755
6764
}
6756
6765
check_closed_broadcast ! ( nodes[ 0 ] , false ) ;
0 commit comments