invoices: fail HTLCs that target the wrong type of invoice
This commit is contained in:
parent
dba055de2d
commit
b0949054e5
@ -110,6 +110,10 @@ const (
|
||||
// payment.
|
||||
ResultMppInProgress
|
||||
|
||||
// ResultHtlcInvoiceTypeMismatch is returned when an AMP HTLC targets a
|
||||
// non-AMP invoice and vice versa.
|
||||
ResultHtlcInvoiceTypeMismatch
|
||||
|
||||
// ResultAmpError is returned when we receive invalid AMP parameters.
|
||||
ResultAmpError
|
||||
|
||||
@ -176,6 +180,9 @@ func (f FailResolutionResult) FailureString() string {
|
||||
case ResultMppInProgress:
|
||||
return "mpp reception in progress"
|
||||
|
||||
case ResultHtlcInvoiceTypeMismatch:
|
||||
return "htlc invoice type mismatch"
|
||||
|
||||
case ResultAmpError:
|
||||
return "invalid amp parameters"
|
||||
|
||||
|
@ -125,6 +125,21 @@ func updateMpp(ctx *invoiceUpdateCtx,
|
||||
inv *channeldb.Invoice) (*channeldb.InvoiceUpdateDesc,
|
||||
HtlcResolution, error) {
|
||||
|
||||
// Reject HTLCs to AMP invoices if they are missing an AMP payload, and
|
||||
// HTLCs to MPP invoices if they have an AMP payload.
|
||||
switch {
|
||||
|
||||
case inv.Terms.Features.RequiresFeature(lnwire.AMPRequired) &&
|
||||
ctx.amp == nil:
|
||||
|
||||
return nil, ctx.failRes(ResultHtlcInvoiceTypeMismatch), nil
|
||||
|
||||
case !inv.Terms.Features.RequiresFeature(lnwire.AMPRequired) &&
|
||||
ctx.amp != nil:
|
||||
|
||||
return nil, ctx.failRes(ResultHtlcInvoiceTypeMismatch), nil
|
||||
}
|
||||
|
||||
setID := ctx.setID()
|
||||
|
||||
// Start building the accept descriptor.
|
||||
|
Loading…
Reference in New Issue
Block a user