lnwallet: when validating fee updates, ensure newFee < balance
This commit is contained in:
parent
ac90a8288e
commit
b8d0df998a
@ -3054,7 +3054,7 @@ func (lc *LightningChannel) ChanSyncMsg() (*lnwire.ChannelReestablish, error) {
|
||||
|
||||
// computeView takes the given htlcView, and calculates the balances, filtered
|
||||
// view (settling unsettled HTLCs), commitment weight and feePerKw, after
|
||||
// applying the HTLCs to the latest commitment. The returned balanced are the
|
||||
// applying the HTLCs to the latest commitment. The returned balances are the
|
||||
// balances *before* subtracting the commitment fee from the initiator's
|
||||
// balance.
|
||||
//
|
||||
@ -5137,10 +5137,18 @@ func (lc *LightningChannel) validateFeeRate(feePerKw SatPerKWeight) error {
|
||||
newFee := lnwire.NewMSatFromSatoshis(
|
||||
feePerKw.FeeForWeight(txWeight),
|
||||
)
|
||||
balanceAfterFee := availableBalance - newFee
|
||||
|
||||
// If the total fee exceeds our available balance, then we'll reject
|
||||
// this update as it would mean we need to trim our entire output.
|
||||
if newFee > availableBalance {
|
||||
return fmt.Errorf("cannot apply fee_update=%v sat/kw, new fee "+
|
||||
"of %v is greater than balance of %v", int64(feePerKw),
|
||||
newFee, availableBalance)
|
||||
}
|
||||
|
||||
// If this new balance is below our reserve, then we can't accommodate
|
||||
// the fee change, so we'll reject it.
|
||||
balanceAfterFee := availableBalance - newFee
|
||||
if balanceAfterFee.ToSatoshis() < lc.channelState.LocalChanCfg.ChanReserve {
|
||||
return fmt.Errorf("cannot apply fee_update=%v sat/kw, "+
|
||||
"insufficient balance: start=%v, end=%v",
|
||||
|
@ -2477,7 +2477,7 @@ func TestAddHTLCNegativeBalance(t *testing.T) {
|
||||
}
|
||||
|
||||
// Alice now has an available balance of 2 BTC. We'll add a new HTLC of
|
||||
// value 2 BTC, which should make Alice's balance negative (since (she
|
||||
// value 2 BTC, which should make Alice's balance negative (since she
|
||||
// has to pay a commitment fee).
|
||||
htlcAmt = lnwire.NewMSatFromSatoshis(2 * btcutil.SatoshiPerBitcoin)
|
||||
htlc, _ := createHTLC(numHTLCs+1, htlcAmt)
|
||||
@ -4378,7 +4378,7 @@ func TestDesyncHTLCs(t *testing.T) {
|
||||
|
||||
// Alice now has gotten all her original balance (5 BTC) back, however,
|
||||
// adding a new HTLC at this point SHOULD fail, since if she adds the
|
||||
// HTLC and sign the next state, Bob cannot assume she received the
|
||||
// HTLC and signs the next state, Bob cannot assume she received the
|
||||
// FailHTLC, and must assume she doesn't have the necessary balance
|
||||
// available.
|
||||
//
|
||||
|
Loading…
Reference in New Issue
Block a user