Skip to content

Commit e1cf884

Browse files
committed
Update update_fee logic
1 parent cd1b8eb commit e1cf884

File tree

1 file changed

+25
-12
lines changed

1 file changed

+25
-12
lines changed

src/ln/channel.rs

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1590,16 +1590,15 @@ impl Channel {
15901590

15911591
let funding_script = self.get_funding_redeemscript();
15921592

1593-
let mut need_our_commitment = false;
1594-
if !self.channel_outbound {
1595-
if let Some(fee_update) = self.pending_update_fee.take() {
1596-
self.feerate_per_kw = fee_update;
1597-
need_our_commitment = true;
1598-
}
1599-
}
1600-
16011593
let local_keys = self.build_local_transaction_keys(self.cur_local_commitment_transaction_number)?;
1602-
let mut local_commitment_tx = self.build_commitment_transaction(self.cur_local_commitment_transaction_number, &local_keys, true, false, self.feerate_per_kw);
1594+
1595+
let feerate_per_kw = if !self.channel_outbound && self.pending_update_fee.is_some() {
1596+
self.pending_update_fee.unwrap()
1597+
} else {
1598+
self.feerate_per_kw
1599+
};
1600+
1601+
let mut local_commitment_tx = self.build_commitment_transaction(self.cur_local_commitment_transaction_number, &local_keys, true, false, feerate_per_kw);
16031602
let local_commitment_txid = local_commitment_tx.0.txid();
16041603
let local_sighash = Message::from_slice(&bip143::SighashComponents::new(&local_commitment_tx.0).sighash_all(&local_commitment_tx.0.input[0], &funding_script, self.channel_value_satoshis)[..]).unwrap();
16051604
secp_call!(self.secp_ctx.verify(&local_sighash, &msg.signature, &self.their_funding_pubkey.unwrap()), "Invalid commitment tx signature from peer", self.channel_id());
@@ -1632,6 +1631,17 @@ impl Channel {
16321631
let per_commitment_secret = chan_utils::build_commitment_secret(self.local_keys.commitment_seed, self.cur_local_commitment_transaction_number + 1);
16331632

16341633
// Update state now that we've passed all the can-fail calls...
1634+
let mut need_our_commitment = false;
1635+
if !self.channel_outbound {
1636+
if let Some(fee_update) = self.pending_update_fee {
1637+
self.feerate_per_kw = fee_update;
1638+
if (self.channel_state & ChannelState::AwaitingRemoteRevoke as u32) == 0 {
1639+
need_our_commitment = true;
1640+
self.pending_update_fee = None;
1641+
}
1642+
}
1643+
}
1644+
16351645
self.channel_monitor.provide_latest_local_commitment_tx_info(local_commitment_tx.0, local_keys, self.feerate_per_kw, htlcs_and_sigs);
16361646

16371647
for htlc in self.pending_inbound_htlcs.iter_mut() {
@@ -1844,10 +1854,13 @@ impl Channel {
18441854
}
18451855
self.value_to_self_msat = (self.value_to_self_msat as i64 + value_to_self_msat_diff) as u64;
18461856

1847-
debug_assert!(self.channel_outbound || self.pending_update_fee.is_none());
18481857
if let Some(feerate) = self.pending_update_fee.take() {
1849-
debug_assert!(self.channel_outbound);
1850-
self.feerate_per_kw = feerate;
1858+
if self.channel_outbound {
1859+
self.feerate_per_kw = feerate;
1860+
} else {
1861+
assert_eq!(feerate, self.feerate_per_kw);
1862+
require_commitment = true;
1863+
}
18511864
}
18521865

18531866
match self.free_holding_cell_htlcs()? {

0 commit comments

Comments
 (0)