lnwallet: increase legacy fee limit threshold to 1k sats

In this commit, we increase the legacy fee limit threshold (the amount
below which we'll allow 100% of funds to go to fees for the non-v2 RPC
calls) from 50 sats to 1k sats.
This commit is contained in:
Olaoluwa Osuntokun 2022-02-03 11:49:50 -08:00
parent 04bbbea9a7
commit 80e304573c
No known key found for this signature in database
GPG Key ID: 3BBD59E99B280306
6 changed files with 23 additions and 19 deletions

View File

@ -22,13 +22,14 @@ connection from the watch-only node.
* A bug that allowed fees to be up to 100% of the payment amount was fixed by * A bug that allowed fees to be up to 100% of the payment amount was fixed by
[introducing a more sane default [introducing a more sane default
value](https://github.com/lightningnetwork/lnd/pull/6226) of 5% routing fees value](https://github.com/lightningnetwork/lnd/pull/6226) of 5% routing fees
(except for small amounts <= 50 satoshis where the 100% routing fees are kept (except for small amounts <= [1k
to accommodate for the base fee in channels). To avoid falling back to a satoshis](https://github.com/lightningnetwork/lnd/pull/6234) where the 100%
default value, users should always set their own fee limits by using the routing fees are kept to accommodate for the base fee in channels). To avoid
`--fee_limit` or `--fee_limit_percent` flags on the `lncli payinvoice`, falling back to a default value, users should always set their own fee limits
`lncli sendpayment` and `lncli queryroutes` commands. Users of the gRPC or by using the `--fee_limit` or `--fee_limit_percent` flags on the `lncli
REST API should set the `fee_limit` field on the corresponding calls payinvoice`, `lncli sendpayment` and `lncli queryroutes` commands. Users of
(`SendPayment`, `SendPaymentSync`, `QueryRoutes`). the gRPC or REST API should set the `fee_limit` field on the corresponding
calls (`SendPayment`, `SendPaymentSync`, `QueryRoutes`).
## Database ## Database

View File

@ -1939,7 +1939,7 @@ type SendRequest struct {
//This value can be represented either as a percentage of the amount being //This value can be represented either as a percentage of the amount being
//sent, or as a fixed amount of the maximum fee the user is willing the pay to //sent, or as a fixed amount of the maximum fee the user is willing the pay to
//send the payment. If not specified, lnd will use a default value of 100% //send the payment. If not specified, lnd will use a default value of 100%
//fees for small amounts (<=50 sat) or 5% fees for larger amounts. //fees for small amounts (<=1k sat) or 5% fees for larger amounts.
FeeLimit *FeeLimit `protobuf:"bytes,8,opt,name=fee_limit,json=feeLimit,proto3" json:"fee_limit,omitempty"` FeeLimit *FeeLimit `protobuf:"bytes,8,opt,name=fee_limit,json=feeLimit,proto3" json:"fee_limit,omitempty"`
// //
//The channel id of the channel that must be taken to the first hop. If zero, //The channel id of the channel that must be taken to the first hop. If zero,
@ -8519,7 +8519,7 @@ type QueryRoutesRequest struct {
//This value can be represented either as a percentage of the amount being //This value can be represented either as a percentage of the amount being
//sent, or as a fixed amount of the maximum fee the user is willing the pay to //sent, or as a fixed amount of the maximum fee the user is willing the pay to
//send the payment. If not specified, lnd will use a default value of 100% //send the payment. If not specified, lnd will use a default value of 100%
//fees for small amounts (<=50 sat) or 5% fees for larger amounts. //fees for small amounts (<=1k sat) or 5% fees for larger amounts.
FeeLimit *FeeLimit `protobuf:"bytes,5,opt,name=fee_limit,json=feeLimit,proto3" json:"fee_limit,omitempty"` FeeLimit *FeeLimit `protobuf:"bytes,5,opt,name=fee_limit,json=feeLimit,proto3" json:"fee_limit,omitempty"`
// //
//A list of nodes to ignore during path finding. When using REST, these fields //A list of nodes to ignore during path finding. When using REST, these fields

View File

@ -754,7 +754,7 @@ message SendRequest {
This value can be represented either as a percentage of the amount being This value can be represented either as a percentage of the amount being
sent, or as a fixed amount of the maximum fee the user is willing the pay to sent, or as a fixed amount of the maximum fee the user is willing the pay to
send the payment. If not specified, lnd will use a default value of 100% send the payment. If not specified, lnd will use a default value of 100%
fees for small amounts (<=50 sat) or 5% fees for larger amounts. fees for small amounts (<=1k sat) or 5% fees for larger amounts.
*/ */
FeeLimit fee_limit = 8; FeeLimit fee_limit = 8;
@ -2576,7 +2576,7 @@ message QueryRoutesRequest {
This value can be represented either as a percentage of the amount being This value can be represented either as a percentage of the amount being
sent, or as a fixed amount of the maximum fee the user is willing the pay to sent, or as a fixed amount of the maximum fee the user is willing the pay to
send the payment. If not specified, lnd will use a default value of 100% send the payment. If not specified, lnd will use a default value of 100%
fees for small amounts (<=50 sat) or 5% fees for larger amounts. fees for small amounts (<=1k sat) or 5% fees for larger amounts.
*/ */
FeeLimit fee_limit = 5; FeeLimit fee_limit = 5;

View File

@ -6238,7 +6238,7 @@
}, },
"fee_limit": { "fee_limit": {
"$ref": "#/definitions/lnrpcFeeLimit", "$ref": "#/definitions/lnrpcFeeLimit",
"description": "The maximum number of satoshis that will be paid as a fee of the payment.\nThis value can be represented either as a percentage of the amount being\nsent, or as a fixed amount of the maximum fee the user is willing the pay to\nsend the payment. If not specified, lnd will use a default value of 100%\nfees for small amounts (\u003c=50 sat) or 5% fees for larger amounts." "description": "The maximum number of satoshis that will be paid as a fee of the payment.\nThis value can be represented either as a percentage of the amount being\nsent, or as a fixed amount of the maximum fee the user is willing the pay to\nsend the payment. If not specified, lnd will use a default value of 100%\nfees for small amounts (\u003c=1k sat) or 5% fees for larger amounts."
}, },
"outgoing_chan_id": { "outgoing_chan_id": {
"type": "string", "type": "string",

View File

@ -8,10 +8,13 @@ import (
"github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/lnwire"
) )
const ( var (
// RoutingFee100PercentUpTo is the cut-off amount we allow 100% fees to // RoutingFee100PercentUpTo is the cut-off amount we allow 100% fees to
// be charged up to. // be charged up to.
RoutingFee100PercentUpTo lnwire.MilliSatoshi = 50_000 RoutingFee100PercentUpTo = lnwire.NewMSatFromSatoshis(1_000)
)
const (
// DefaultRoutingFeePercentage is the default off-chain routing fee we // DefaultRoutingFeePercentage is the default off-chain routing fee we
// allow to be charged for a payment over the RoutingFee100PercentUpTo // allow to be charged for a payment over the RoutingFee100PercentUpTo

View File

@ -24,12 +24,12 @@ func TestDefaultRoutingFeeLimitForAmount(t *testing.T) {
expectedLimit: 1, expectedLimit: 1,
}, },
{ {
amount: 50_000, amount: lnwire.NewMSatFromSatoshis(1_000),
expectedLimit: 50_000, expectedLimit: lnwire.NewMSatFromSatoshis(1_000),
}, },
{ {
amount: 50_001, amount: lnwire.NewMSatFromSatoshis(1_001),
expectedLimit: 2_500, expectedLimit: 50_050,
}, },
{ {
amount: 5_000_000_000, amount: 5_000_000_000,
@ -42,7 +42,7 @@ func TestDefaultRoutingFeeLimitForAmount(t *testing.T) {
t.Run(fmt.Sprintf("%d sats", test.amount), func(t *testing.T) { t.Run(fmt.Sprintf("%d sats", test.amount), func(t *testing.T) {
feeLimit := DefaultRoutingFeeLimitForAmount(test.amount) feeLimit := DefaultRoutingFeeLimitForAmount(test.amount)
require.Equal(t, test.expectedLimit, feeLimit) require.Equal(t, int64(test.expectedLimit), int64(feeLimit))
}) })
} }
} }