@@ -760,7 +760,6 @@ impl Channel {
760
760
}
761
761
}
762
762
763
-
764
763
for ref htlc in self . pending_inbound_htlcs . iter ( ) {
765
764
let include = match htlc. state {
766
765
InboundHTLCState :: RemoteAnnounced => !generated_by_local,
@@ -1613,7 +1612,7 @@ impl Channel {
1613
1612
1614
1613
let mut htlcs_and_sigs = Vec :: with_capacity ( local_commitment_tx. 1 . len ( ) ) ;
1615
1614
for ( idx, ref htlc) in local_commitment_tx. 1 . iter ( ) . enumerate ( ) {
1616
- let mut htlc_tx = self . build_htlc_transaction ( & local_commitment_txid, htlc, true , & local_keys, self . feerate_per_kw ) ;
1615
+ let mut htlc_tx = self . build_htlc_transaction ( & local_commitment_txid, htlc, true , & local_keys, feerate_per_kw) ;
1617
1616
let htlc_redeemscript = chan_utils:: get_htlc_redeemscript ( & htlc, & local_keys) ;
1618
1617
let htlc_sighash = Message :: from_slice ( & bip143:: SighashComponents :: new ( & htlc_tx) . sighash_all ( & htlc_tx. input [ 0 ] , & htlc_redeemscript, htlc. amount_msat / 1000 ) [ ..] ) . unwrap ( ) ;
1619
1618
secp_call ! ( self . secp_ctx. verify( & htlc_sighash, & msg. htlc_signatures[ idx] , & local_keys. b_htlc_key) , "Invalid HTLC tx siganture from peer" , self . channel_id( ) ) ;
@@ -1635,6 +1634,9 @@ impl Channel {
1635
1634
if !self . channel_outbound {
1636
1635
if let Some ( fee_update) = self . pending_update_fee {
1637
1636
self . feerate_per_kw = fee_update;
1637
+ // We later use the presence of pending_update_fee to indicate we should generate a
1638
+ // commitment_signed upon receipt of revoke_and_ack, so we can only set it to None
1639
+ // if we're not awaiting a revoke (ie will send a commitment_signed now).
1638
1640
if ( self . channel_state & ChannelState :: AwaitingRemoteRevoke as u32 ) == 0 {
1639
1641
need_our_commitment = true ;
1640
1642
self . pending_update_fee = None ;
@@ -1657,7 +1659,6 @@ impl Channel {
1657
1659
}
1658
1660
}
1659
1661
1660
-
1661
1662
self . cur_local_commitment_transaction_number -= 1 ;
1662
1663
self . last_local_commitment_txn = new_local_commitment_txn;
1663
1664
@@ -1679,7 +1680,7 @@ impl Channel {
1679
1680
/// Used to fulfill holding_cell_htlcs when we get a remote ack (or implicitly get it by them
1680
1681
/// fulfilling or failing the last pending HTLC)
1681
1682
fn free_holding_cell_htlcs ( & mut self ) -> Result < Option < ( msgs:: CommitmentUpdate , ChannelMonitor ) > , HandleError > {
1682
- if self . holding_cell_htlc_updates . len ( ) != 0 {
1683
+ if self . holding_cell_htlc_updates . len ( ) != 0 || self . holding_cell_update_fee . is_some ( ) {
1683
1684
let mut htlc_updates = Vec :: new ( ) ;
1684
1685
mem:: swap ( & mut htlc_updates, & mut self . holding_cell_htlc_updates ) ;
1685
1686
let mut update_add_htlcs = Vec :: with_capacity ( htlc_updates. len ( ) ) ;
@@ -1853,12 +1854,16 @@ impl Channel {
1853
1854
}
1854
1855
self . value_to_self_msat = ( self . value_to_self_msat as i64 + value_to_self_msat_diff) as u64 ;
1855
1856
1856
- if let Some ( feerate ) = self . pending_update_fee . take ( ) {
1857
- if self . channel_outbound {
1857
+ if self . channel_outbound {
1858
+ if let Some ( feerate ) = self . pending_update_fee . take ( ) {
1858
1859
self . feerate_per_kw = feerate;
1859
- } else {
1860
- assert_eq ! ( feerate, self . feerate_per_kw) ;
1861
- require_commitment = true ;
1860
+ }
1861
+ } else {
1862
+ if let Some ( feerate) = self . pending_update_fee {
1863
+ if feerate == self . feerate_per_kw {
1864
+ require_commitment = true ;
1865
+ self . pending_update_fee = None ;
1866
+ }
1862
1867
}
1863
1868
}
1864
1869
@@ -2828,7 +2833,9 @@ impl Channel {
2828
2833
2829
2834
let mut feerate_per_kw = self . feerate_per_kw ;
2830
2835
if let Some ( feerate) = self . pending_update_fee {
2831
- feerate_per_kw = feerate;
2836
+ if self . channel_outbound {
2837
+ feerate_per_kw = feerate;
2838
+ }
2832
2839
}
2833
2840
2834
2841
let remote_keys = self . build_remote_transaction_keys ( ) ?;
0 commit comments