channeldb: validate feature dependencies when adding invoice
This commit is contained in:
parent
7bed359296
commit
7e2f5a184b
@ -8,6 +8,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/lightningnetwork/lnd/clock"
|
"github.com/lightningnetwork/lnd/clock"
|
||||||
|
"github.com/lightningnetwork/lnd/feature"
|
||||||
"github.com/lightningnetwork/lnd/lntypes"
|
"github.com/lightningnetwork/lnd/lntypes"
|
||||||
"github.com/lightningnetwork/lnd/lnwire"
|
"github.com/lightningnetwork/lnd/lnwire"
|
||||||
"github.com/lightningnetwork/lnd/record"
|
"github.com/lightningnetwork/lnd/record"
|
||||||
@ -1658,3 +1659,30 @@ func TestDeleteInvoices(t *testing.T) {
|
|||||||
assertInvoiceCount(0)
|
assertInvoiceCount(0)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestAddInvoiceInvalidFeatureDeps asserts that inserting an invoice with
|
||||||
|
// invalid transitive feature dependencies fails with the appropriate error.
|
||||||
|
func TestAddInvoiceInvalidFeatureDeps(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
db, cleanup, err := MakeTestDB()
|
||||||
|
require.NoError(t, err, "unable to make test db")
|
||||||
|
defer cleanup()
|
||||||
|
|
||||||
|
invoice, err := randInvoice(500)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
invoice.Terms.Features = lnwire.NewFeatureVector(
|
||||||
|
lnwire.NewRawFeatureVector(
|
||||||
|
lnwire.TLVOnionPayloadOptional,
|
||||||
|
lnwire.MPPOptional,
|
||||||
|
),
|
||||||
|
lnwire.Features,
|
||||||
|
)
|
||||||
|
|
||||||
|
hash := invoice.Terms.PaymentPreimage.Hash()
|
||||||
|
_, err = db.AddInvoice(invoice, hash)
|
||||||
|
require.Error(t, err, feature.NewErrMissingFeatureDep(
|
||||||
|
lnwire.PaymentAddrOptional,
|
||||||
|
))
|
||||||
|
}
|
||||||
|
@ -10,6 +10,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/lightningnetwork/lnd/channeldb/kvdb"
|
"github.com/lightningnetwork/lnd/channeldb/kvdb"
|
||||||
|
"github.com/lightningnetwork/lnd/feature"
|
||||||
"github.com/lightningnetwork/lnd/htlcswitch/hop"
|
"github.com/lightningnetwork/lnd/htlcswitch/hop"
|
||||||
"github.com/lightningnetwork/lnd/lntypes"
|
"github.com/lightningnetwork/lnd/lntypes"
|
||||||
"github.com/lightningnetwork/lnd/lnwire"
|
"github.com/lightningnetwork/lnd/lnwire"
|
||||||
@ -674,6 +675,11 @@ func validateInvoice(i *Invoice, paymentHash lntypes.Hash) error {
|
|||||||
return errors.New("invoice must have a feature vector")
|
return errors.New("invoice must have a feature vector")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err := feature.ValidateDeps(i.Terms.Features)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if i.Terms.PaymentPreimage == nil && !i.HodlInvoice {
|
if i.Terms.PaymentPreimage == nil && !i.HodlInvoice {
|
||||||
return errors.New("non-hodl invoices must have a preimage")
|
return errors.New("non-hodl invoices must have a preimage")
|
||||||
}
|
}
|
||||||
|
@ -111,7 +111,10 @@ var (
|
|||||||
Value: testInvoiceAmt,
|
Value: testInvoiceAmt,
|
||||||
Expiry: time.Hour,
|
Expiry: time.Hour,
|
||||||
Features: lnwire.NewFeatureVector(
|
Features: lnwire.NewFeatureVector(
|
||||||
lnwire.NewRawFeatureVector(lnwire.PaymentAddrRequired),
|
lnwire.NewRawFeatureVector(
|
||||||
|
lnwire.TLVOnionPayloadOptional,
|
||||||
|
lnwire.PaymentAddrRequired,
|
||||||
|
),
|
||||||
lnwire.Features,
|
lnwire.Features,
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
@ -124,7 +127,10 @@ var (
|
|||||||
Value: testInvoiceAmt,
|
Value: testInvoiceAmt,
|
||||||
Expiry: time.Hour,
|
Expiry: time.Hour,
|
||||||
Features: lnwire.NewFeatureVector(
|
Features: lnwire.NewFeatureVector(
|
||||||
lnwire.NewRawFeatureVector(lnwire.PaymentAddrOptional),
|
lnwire.NewRawFeatureVector(
|
||||||
|
lnwire.TLVOnionPayloadOptional,
|
||||||
|
lnwire.PaymentAddrOptional,
|
||||||
|
),
|
||||||
lnwire.Features,
|
lnwire.Features,
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user