Merge pull request #3390 from joostjager/invoice-circuits
channeldb+cnct+invoices: track invoice htlcs
This commit is contained in:
26 files changed
+1993
-1010
No files matched your search
@@ -14,10 +14,8 @@ import (
|
||||
// which may search, lookup and settle invoices.
|
||||
type InvoiceDatabase interface {
|
||||
// LookupInvoice attempts to look up an invoice according to its 32
|
||||
// byte payment hash. This method should also reutrn the min final CLTV
|
||||
// delta for this invoice. We'll use this to ensure that the HTLC
|
||||
// extended to us gives us enough time to settle as we prescribe.
|
||||
LookupInvoice(lntypes.Hash) (channeldb.Invoice, uint32, error)
|
||||
// byte payment hash.
|
||||
LookupInvoice(lntypes.Hash) (channeldb.Invoice, error)
|
||||
|
||||
// NotifyExitHopHtlc attempts to mark an invoice as settled. If the
|
||||
// invoice is a debug invoice, then this method is a noop as debug
|
||||
@@ -28,7 +26,7 @@ type InvoiceDatabase interface {
|
||||
// for decoding purposes.
|
||||
NotifyExitHopHtlc(payHash lntypes.Hash, paidAmount lnwire.MilliSatoshi,
|
||||
expiry uint32, currentHeight int32,
|
||||
hodlChan chan<- interface{},
|
||||
circuitKey channeldb.CircuitKey, hodlChan chan<- interface{},
|
||||
eob []byte) (*invoices.HodlEvent, error)
|
||||
|
||||
// CancelInvoice attempts to cancel the invoice corresponding to the
|
||||
|
||||
+6
-1
@@ -2878,9 +2878,14 @@ func (l *channelLink) processExitHop(pd *lnwallet.PaymentDescriptor,
|
||||
// receive back a resolution event.
|
||||
invoiceHash := lntypes.Hash(pd.RHash)
|
||||
|
||||
circuitKey := channeldb.CircuitKey{
|
||||
ChanID: l.ShortChanID(),
|
||||
HtlcID: pd.HtlcIndex,
|
||||
}
|
||||
|
||||
event, err := l.cfg.Registry.NotifyExitHopHtlc(
|
||||
invoiceHash, pd.Amount, pd.Timeout, int32(heightNow),
|
||||
l.hodlQueue.ChanIn(), eob,
|
||||
circuitKey, l.hodlQueue.ChanIn(), eob,
|
||||
)
|
||||
|
||||
switch err {
|
||||
|
||||
@@ -238,7 +238,7 @@ func TestChannelLinkSingleHopPayment(t *testing.T) {
|
||||
|
||||
// Check that alice invoice was settled and bandwidth of HTLC
|
||||
// links was changed.
|
||||
invoice, _, err := receiver.registry.LookupInvoice(rhash)
|
||||
invoice, err := receiver.registry.LookupInvoice(rhash)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to get invoice: %v", err)
|
||||
}
|
||||
@@ -498,7 +498,7 @@ func testChannelLinkMultiHopPayment(t *testing.T,
|
||||
|
||||
// Check that Carol invoice was settled and bandwidth of HTLC
|
||||
// links were changed.
|
||||
invoice, _, err := receiver.registry.LookupInvoice(rhash)
|
||||
invoice, err := receiver.registry.LookupInvoice(rhash)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to get invoice: %v", err)
|
||||
}
|
||||
@@ -912,7 +912,7 @@ func TestUpdateForwardingPolicy(t *testing.T) {
|
||||
|
||||
// Carol's invoice should now be shown as settled as the payment
|
||||
// succeeded.
|
||||
invoice, _, err := n.carolServer.registry.LookupInvoice(payResp)
|
||||
invoice, err := n.carolServer.registry.LookupInvoice(payResp)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to get invoice: %v", err)
|
||||
}
|
||||
@@ -1030,7 +1030,7 @@ func TestChannelLinkMultiHopInsufficientPayment(t *testing.T) {
|
||||
|
||||
// Check that alice invoice wasn't settled and bandwidth of htlc
|
||||
// links hasn't been changed.
|
||||
invoice, _, err := receiver.registry.LookupInvoice(rhash)
|
||||
invoice, err := receiver.registry.LookupInvoice(rhash)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to get invoice: %v", err)
|
||||
}
|
||||
@@ -1215,7 +1215,7 @@ func TestChannelLinkMultiHopUnknownNextHop(t *testing.T) {
|
||||
|
||||
// Check that alice invoice wasn't settled and bandwidth of htlc
|
||||
// links hasn't been changed.
|
||||
invoice, _, err := receiver.registry.LookupInvoice(rhash)
|
||||
invoice, err := receiver.registry.LookupInvoice(rhash)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to get invoice: %v", err)
|
||||
}
|
||||
@@ -1330,7 +1330,7 @@ func TestChannelLinkMultiHopDecodeError(t *testing.T) {
|
||||
|
||||
// Check that alice invoice wasn't settled and bandwidth of htlc
|
||||
// links hasn't been changed.
|
||||
invoice, _, err := receiver.registry.LookupInvoice(rhash)
|
||||
invoice, err := receiver.registry.LookupInvoice(rhash)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to get invoice: %v", err)
|
||||
}
|
||||
@@ -3455,7 +3455,7 @@ func TestChannelRetransmission(t *testing.T) {
|
||||
|
||||
// Check that alice invoice wasn't settled and
|
||||
// bandwidth of htlc links hasn't been changed.
|
||||
invoice, _, err = receiver.registry.LookupInvoice(rhash)
|
||||
invoice, err = receiver.registry.LookupInvoice(rhash)
|
||||
if err != nil {
|
||||
err = errors.Errorf("unable to get invoice: %v", err)
|
||||
continue
|
||||
@@ -3974,7 +3974,7 @@ func TestChannelLinkAcceptOverpay(t *testing.T) {
|
||||
|
||||
// Even though we sent 2x what was asked for, Carol should still have
|
||||
// accepted the payment and marked it as settled.
|
||||
invoice, _, err := receiver.registry.LookupInvoice(rhash)
|
||||
invoice, err := receiver.registry.LookupInvoice(rhash)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to get invoice: %v", err)
|
||||
}
|
||||
|
||||
+7
-8
@@ -768,13 +768,9 @@ func newMockRegistry(minDelta uint32) *mockInvoiceRegistry {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
decodeExpiry := func(invoice string) (uint32, error) {
|
||||
return testInvoiceCltvExpiry, nil
|
||||
}
|
||||
|
||||
finalCltvRejectDelta := int32(5)
|
||||
|
||||
registry := invoices.NewRegistry(cdb, decodeExpiry, finalCltvRejectDelta)
|
||||
registry := invoices.NewRegistry(cdb, finalCltvRejectDelta)
|
||||
registry.Start()
|
||||
|
||||
return &mockInvoiceRegistry{
|
||||
@@ -783,7 +779,9 @@ func newMockRegistry(minDelta uint32) *mockInvoiceRegistry {
|
||||
}
|
||||
}
|
||||
|
||||
func (i *mockInvoiceRegistry) LookupInvoice(rHash lntypes.Hash) (channeldb.Invoice, uint32, error) {
|
||||
func (i *mockInvoiceRegistry) LookupInvoice(rHash lntypes.Hash) (
|
||||
channeldb.Invoice, error) {
|
||||
|
||||
return i.registry.LookupInvoice(rHash)
|
||||
}
|
||||
|
||||
@@ -793,10 +791,11 @@ func (i *mockInvoiceRegistry) SettleHodlInvoice(preimage lntypes.Preimage) error
|
||||
|
||||
func (i *mockInvoiceRegistry) NotifyExitHopHtlc(rhash lntypes.Hash,
|
||||
amt lnwire.MilliSatoshi, expiry uint32, currentHeight int32,
|
||||
hodlChan chan<- interface{}, eob []byte) (*invoices.HodlEvent, error) {
|
||||
circuitKey channeldb.CircuitKey, hodlChan chan<- interface{},
|
||||
eob []byte) (*invoices.HodlEvent, error) {
|
||||
|
||||
event, err := i.registry.NotifyExitHopHtlc(
|
||||
rhash, amt, expiry, currentHeight, hodlChan, eob,
|
||||
rhash, amt, expiry, currentHeight, circuitKey, hodlChan, eob,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
@@ -557,6 +557,7 @@ func generatePaymentWithPreimage(invoiceAmt, htlcAmt lnwire.MilliSatoshi,
|
||||
Value: invoiceAmt,
|
||||
PaymentPreimage: preimage,
|
||||
},
|
||||
FinalCltvDelta: testInvoiceCltvExpiry,
|
||||
}
|
||||
|
||||
htlc := &lnwire.UpdateAddHTLC{
|
||||
|
||||
Reference in new issue
Block a user