mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-08-31 17:51:33 +02:00
multi: add explicit hodl invoice flag to invoice
Previously it wasn't possible to store a preimage in the invoice database and signal that a payment should not be settled right away. The only way to hold a payment was to insert the magic UnknownPreimage value in the invoice database. This commit introduces a distinct flag to signal that an invoice is a hold invoice and thereby allows the preimage to be present in the database already. Preparation for (key send) hodl invoices for which we already know the preimage.
This commit is contained in:
@@ -20,7 +20,10 @@ var (
|
||||
)
|
||||
|
||||
func randInvoice(value lnwire.MilliSatoshi) (*Invoice, error) {
|
||||
var pre, payAddr [32]byte
|
||||
var (
|
||||
pre lntypes.Preimage
|
||||
payAddr [32]byte
|
||||
)
|
||||
if _, err := rand.Read(pre[:]); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -32,7 +35,7 @@ func randInvoice(value lnwire.MilliSatoshi) (*Invoice, error) {
|
||||
CreationDate: testNow,
|
||||
Terms: ContractTerm{
|
||||
Expiry: 4000,
|
||||
PaymentPreimage: pre,
|
||||
PaymentPreimage: &pre,
|
||||
PaymentAddr: payAddr,
|
||||
Value: value,
|
||||
Features: emptyFeatures,
|
||||
@@ -360,13 +363,18 @@ func TestInvoiceCancelSingleHtlc(t *testing.T) {
|
||||
t.Fatalf("unable to make test db: %v", err)
|
||||
}
|
||||
|
||||
preimage := lntypes.Preimage{1}
|
||||
paymentHash := preimage.Hash()
|
||||
|
||||
testInvoice := &Invoice{
|
||||
Htlcs: map[CircuitKey]*InvoiceHTLC{},
|
||||
Terms: ContractTerm{
|
||||
Value: lnwire.NewMSatFromSatoshis(10000),
|
||||
Features: emptyFeatures,
|
||||
PaymentPreimage: &preimage,
|
||||
},
|
||||
}
|
||||
testInvoice.Terms.Value = lnwire.NewMSatFromSatoshis(10000)
|
||||
testInvoice.Terms.Features = emptyFeatures
|
||||
|
||||
var paymentHash lntypes.Hash
|
||||
if _, err := db.AddInvoice(testInvoice, paymentHash); err != nil {
|
||||
t.Fatalf("unable to find invoice: %v", err)
|
||||
}
|
||||
@@ -1059,15 +1067,20 @@ func TestCustomRecords(t *testing.T) {
|
||||
t.Fatalf("unable to make test db: %v", err)
|
||||
}
|
||||
|
||||
preimage := lntypes.Preimage{1}
|
||||
paymentHash := preimage.Hash()
|
||||
|
||||
testInvoice := &Invoice{
|
||||
Htlcs: map[CircuitKey]*InvoiceHTLC{},
|
||||
Terms: ContractTerm{
|
||||
Value: lnwire.NewMSatFromSatoshis(10000),
|
||||
Features: emptyFeatures,
|
||||
PaymentPreimage: &preimage,
|
||||
},
|
||||
}
|
||||
testInvoice.Terms.Value = lnwire.NewMSatFromSatoshis(10000)
|
||||
testInvoice.Terms.Features = emptyFeatures
|
||||
|
||||
var paymentHash lntypes.Hash
|
||||
if _, err := db.AddInvoice(testInvoice, paymentHash); err != nil {
|
||||
t.Fatalf("unable to find invoice: %v", err)
|
||||
t.Fatalf("unable to add invoice: %v", err)
|
||||
}
|
||||
|
||||
// Accept an htlc with custom records on this invoice.
|
||||
|
Reference in New Issue
Block a user