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:
parent
1354a46170
commit
363caa441a
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user