diff --git a/channeldb/invoice_test.go b/channeldb/invoice_test.go index 8f0f2848..ec54353d 100644 --- a/channeldb/invoice_test.go +++ b/channeldb/invoice_test.go @@ -2425,15 +2425,6 @@ func TestDeleteInvoices(t *testing.T) { // Restore the hash. invoicesToDelete[0].PayHash[2] ^= 3 - // XOR one byte of one of the references' payment address and attempt - // to delete. - invoicesToDelete[1].PayAddr[5] ^= 7 - require.Error(t, db.DeleteInvoice(invoicesToDelete)) - assertInvoiceCount(3) - - // Restore the payment address. - invoicesToDelete[1].PayAddr[5] ^= 7 - // XOR the second invoice's payment settle index as it is settled, and // attempt to delete. invoicesToDelete[1].SettleIndex ^= 11 diff --git a/channeldb/invoices.go b/channeldb/invoices.go index 9e3e7326..146e8d88 100644 --- a/channeldb/invoices.go +++ b/channeldb/invoices.go @@ -2305,15 +2305,19 @@ func (d *DB) DeleteInvoice(invoicesToDelete []InvoiceDeleteRef) error { // fetched invoice key matches the one in the // payment address index. key := payAddrIndex.Get(ref.PayAddr[:]) - if !bytes.Equal(key, invoiceKey) { - return fmt.Errorf("unknown invoice " + - "in pay addr index") - } - - // Delete from the payment address index. - err := payAddrIndex.Delete(ref.PayAddr[:]) - if err != nil { - return err + if bytes.Equal(key, invoiceKey) { + // Delete from the payment address index. + // Note that since the payment address + // index has been introduced with an + // empty migration it may be possible + // that the index doesn't have an entry + // for this invoice. + // ref: https://github.com/lightningnetwork/lnd/pull/4285/commits/cbf71b5452fa1d3036a43309e490787c5f7f08dc#r426368127 + if err := payAddrIndex.Delete( + ref.PayAddr[:], + ); err != nil { + return err + } } }