channeldb: don't cancel other HTLCs w/ diff setID once once is settled

With this change, we allow multiple users to concurrently pay the same
AMP invoice with distinct set IDs.
This commit is contained in:
Olaoluwa Osuntokun
2021-10-14 18:20:09 +02:00
parent 700bae16a3
commit c0f934e363
2 changed files with 12 additions and 7 deletions

View File

@@ -1669,7 +1669,9 @@ func testUpdateHTLCPreimages(t *testing.T, test updateHTLCPreimageTestCase) {
// Update the invoice with an accepted HTLC that also accepts the
// invoice.
ref := InvoiceRefByAddr(invoice.Terms.PaymentAddr)
dbInvoice, err := db.UpdateInvoice(ref, updateAcceptAMPHtlc(0, amt, setID, true))
dbInvoice, err := db.UpdateInvoice(
ref, updateAcceptAMPHtlc(0, amt, setID, true),
)
require.Nil(t, err)
htlcPreimages := make(map[CircuitKey]lntypes.Preimage)
@@ -2062,6 +2064,10 @@ func TestUpdateHTLC(t *testing.T) {
expErr: nil,
},
{
// With the newer AMP logic, this is now valid, as we
// want to be able to accept multiple settle attempts
// to a given pay_addr. In this case, the HTLC should
// remain in the accepted state.
name: "AMP settle valid preimage different htlc set",
input: InvoiceHTLC{
Amt: 5000,
@@ -2085,9 +2091,9 @@ func TestUpdateHTLC(t *testing.T) {
MppTotalAmt: 5000,
AcceptHeight: 100,
AcceptTime: testNow,
ResolveTime: testNow,
ResolveTime: time.Time{},
Expiry: 40,
State: HtlcStateCanceled,
State: HtlcStateAccepted,
CustomRecords: make(record.CustomSet),
AMP: &InvoiceHtlcAMPData{
Record: *ampRecord,