rpc: allow wumbo invoices

In this commit, we remove the restriction surrounding the largest
invoices that we'll allow a user to create. After #3967 has landed,
users will be able to send in _aggregate_ a payment larger than the
current max HTLC size limit in the network. As a result, we can just
treat that value as the system's MTU, and allow users to request
payments it multiples of that MTU value.

A follow up to this PR at a later time will also allow wumbo _channels_.
However, that requires us to tweak the way we scale CSV values, as post
wumbo, there is no true channel size limit, only the
_local_ limit of a given node. We also need to implement a way for nodes
to signal to other nodes their accepted max channel size.
This commit is contained in:
Olaoluwa Osuntokun 2020-03-12 18:07:09 -07:00
parent 1354a46170
commit 363caa441a
No known key found for this signature in database
GPG Key ID: BC13F65E2DC84465
6 changed files with 0 additions and 32 deletions

@ -37,9 +37,6 @@ type AddInvoiceConfig struct {
// that's backed by the identity private key of the running lnd node. // that's backed by the identity private key of the running lnd node.
NodeSigner *netann.NodeSigner NodeSigner *netann.NodeSigner
// MaxPaymentMSat is the maximum allowed payment.
MaxPaymentMSat lnwire.MilliSatoshi
// DefaultCLTVExpiry is the default invoice expiry if no values is // DefaultCLTVExpiry is the default invoice expiry if no values is
// specified. // specified.
DefaultCLTVExpiry uint32 DefaultCLTVExpiry uint32
@ -167,15 +164,6 @@ func AddInvoice(ctx context.Context, cfg *AddInvoiceConfig,
amtMSat := invoice.Value amtMSat := invoice.Value
// The value of the invoice must also not exceed the current soft-limit
// on the largest payment within the network.
if amtMSat > cfg.MaxPaymentMSat {
return nil, nil, fmt.Errorf("payment of %v is too large, max "+
"payment allowed is %v", invoice.Value,
cfg.MaxPaymentMSat.ToSatoshis(),
)
}
// We also create an encoded payment request which allows the // We also create an encoded payment request which allows the
// caller to compactly send the invoice to the payer. We'll create a // caller to compactly send the invoice to the payer. We'll create a
// list of options to be added to the encoded payment request. For now // list of options to be added to the encoded payment request. For now

@ -40,9 +40,6 @@ type Config struct {
// that's backed by the identity private key of the running lnd node. // that's backed by the identity private key of the running lnd node.
NodeSigner *netann.NodeSigner NodeSigner *netann.NodeSigner
// MaxPaymentMSat is the maximum allowed payment.
MaxPaymentMSat lnwire.MilliSatoshi
// DefaultCLTVExpiry is the default invoice expiry if no values is // DefaultCLTVExpiry is the default invoice expiry if no values is
// specified. // specified.
DefaultCLTVExpiry uint32 DefaultCLTVExpiry uint32

@ -250,7 +250,6 @@ func (s *Server) AddHoldInvoice(ctx context.Context,
IsChannelActive: s.cfg.IsChannelActive, IsChannelActive: s.cfg.IsChannelActive,
ChainParams: s.cfg.ChainParams, ChainParams: s.cfg.ChainParams,
NodeSigner: s.cfg.NodeSigner, NodeSigner: s.cfg.NodeSigner,
MaxPaymentMSat: s.cfg.MaxPaymentMSat,
DefaultCLTVExpiry: s.cfg.DefaultCLTVExpiry, DefaultCLTVExpiry: s.cfg.DefaultCLTVExpiry,
ChanDB: s.cfg.ChanDB, ChanDB: s.cfg.ChanDB,
GenInvoiceFeatures: s.cfg.GenInvoiceFeatures, GenInvoiceFeatures: s.cfg.GenInvoiceFeatures,

@ -698,18 +698,6 @@ func (r *RouterBackend) extractIntentFromSendRequest(
payIntent.DestFeatures = features payIntent.DestFeatures = features
} }
// Currently, within the bootstrap phase of the network, we limit the
// largest payment size allotted to (2^32) - 1 mSAT or 4.29 million
// satoshis.
if payIntent.Amount > r.MaxPaymentMSat {
// In this case, we'll send an error to the caller, but
// continue our loop for the next payment.
return payIntent, fmt.Errorf("payment of %v is too large, "+
"max payment allowed is %v", payIntent.Amount,
r.MaxPaymentMSat)
}
// Check for disallowed payments to self. // Check for disallowed payments to self.
if !rpcPayReq.AllowSelfPayment && payIntent.Target == r.SelfNode { if !rpcPayReq.AllowSelfPayment && payIntent.Target == r.SelfNode {
return nil, errors.New("self-payments not allowed") return nil, errors.New("self-payments not allowed")

@ -4305,7 +4305,6 @@ func (r *rpcServer) AddInvoice(ctx context.Context,
IsChannelActive: r.server.htlcSwitch.HasActiveLink, IsChannelActive: r.server.htlcSwitch.HasActiveLink,
ChainParams: activeNetParams.Params, ChainParams: activeNetParams.Params,
NodeSigner: r.server.nodeSigner, NodeSigner: r.server.nodeSigner,
MaxPaymentMSat: MaxPaymentMSat,
DefaultCLTVExpiry: defaultDelta, DefaultCLTVExpiry: defaultDelta,
ChanDB: r.server.chanDB, ChanDB: r.server.chanDB,
GenInvoiceFeatures: func() *lnwire.FeatureVector { GenInvoiceFeatures: func() *lnwire.FeatureVector {

@ -202,9 +202,6 @@ func (s *subRPCServerConfigs) PopulateDependencies(cc *chainControl,
subCfgValue.FieldByName("NodeSigner").Set( subCfgValue.FieldByName("NodeSigner").Set(
reflect.ValueOf(nodeSigner), reflect.ValueOf(nodeSigner),
) )
subCfgValue.FieldByName("MaxPaymentMSat").Set(
reflect.ValueOf(MaxPaymentMSat),
)
defaultDelta := cfg.Bitcoin.TimeLockDelta defaultDelta := cfg.Bitcoin.TimeLockDelta
if registeredChains.PrimaryChain() == litecoinChain { if registeredChains.PrimaryChain() == litecoinChain {
defaultDelta = cfg.Litecoin.TimeLockDelta defaultDelta = cfg.Litecoin.TimeLockDelta