channeldb: store payment request with invoices
This commit is contained in:
parent
07ea3e039f
commit
5ed31b1030
@ -29,6 +29,19 @@ func randInvoice(value lnwire.MilliSatoshi) (*Invoice, error) {
|
|||||||
i.Memo = []byte("memo")
|
i.Memo = []byte("memo")
|
||||||
i.Receipt = []byte("recipt")
|
i.Receipt = []byte("recipt")
|
||||||
|
|
||||||
|
// Create a random byte slice of MaxPaymentRequestSize bytes to be used
|
||||||
|
// as a dummy paymentrequest, and determine if it should be set based
|
||||||
|
// on one of the random bytes.
|
||||||
|
var r [MaxPaymentRequestSize]byte
|
||||||
|
if _, err := rand.Read(r[:]); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if r[0]&1 == 0 {
|
||||||
|
i.PaymentRequest = r[:]
|
||||||
|
} else {
|
||||||
|
i.PaymentRequest = []byte("")
|
||||||
|
}
|
||||||
|
|
||||||
return i, nil
|
return i, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,6 +63,7 @@ func TestInvoiceWorkflow(t *testing.T) {
|
|||||||
}
|
}
|
||||||
fakeInvoice.Memo = []byte("memo")
|
fakeInvoice.Memo = []byte("memo")
|
||||||
fakeInvoice.Receipt = []byte("recipt")
|
fakeInvoice.Receipt = []byte("recipt")
|
||||||
|
fakeInvoice.PaymentRequest = []byte("")
|
||||||
copy(fakeInvoice.Terms.PaymentPreimage[:], rev[:])
|
copy(fakeInvoice.Terms.PaymentPreimage[:], rev[:])
|
||||||
fakeInvoice.Terms.Value = lnwire.NewMSatFromSatoshis(10000)
|
fakeInvoice.Terms.Value = lnwire.NewMSatFromSatoshis(10000)
|
||||||
|
|
||||||
|
@ -43,6 +43,12 @@ const (
|
|||||||
// MaxReceiptSize is the maximum size of the payment receipt stored
|
// MaxReceiptSize is the maximum size of the payment receipt stored
|
||||||
// within the database along side incoming/outgoing invoices.
|
// within the database along side incoming/outgoing invoices.
|
||||||
MaxReceiptSize = 1024
|
MaxReceiptSize = 1024
|
||||||
|
|
||||||
|
// MaxPaymentRequestSize is the max size of a a payment request for
|
||||||
|
// this invoice.
|
||||||
|
// TODO(halseth): determine the max length payment request when field
|
||||||
|
// lengths are final.
|
||||||
|
MaxPaymentRequestSize = 4096
|
||||||
)
|
)
|
||||||
|
|
||||||
// ContractTerm is a companion struct to the Invoice struct. This struct houses
|
// ContractTerm is a companion struct to the Invoice struct. This struct houses
|
||||||
@ -86,6 +92,10 @@ type Invoice struct {
|
|||||||
// TODO(roasbeef): document scheme.
|
// TODO(roasbeef): document scheme.
|
||||||
Receipt []byte
|
Receipt []byte
|
||||||
|
|
||||||
|
// PaymentRequest is an optional field where a payment request created
|
||||||
|
// for this invoice can be stored.
|
||||||
|
PaymentRequest []byte
|
||||||
|
|
||||||
// CreationDate is the exact time the invoice was created.
|
// CreationDate is the exact time the invoice was created.
|
||||||
CreationDate time.Time
|
CreationDate time.Time
|
||||||
|
|
||||||
@ -108,6 +118,11 @@ func validateInvoice(i *Invoice) error {
|
|||||||
"of length %v was provided", MaxReceiptSize,
|
"of length %v was provided", MaxReceiptSize,
|
||||||
len(i.Receipt))
|
len(i.Receipt))
|
||||||
}
|
}
|
||||||
|
if len(i.PaymentRequest) > MaxPaymentRequestSize {
|
||||||
|
return fmt.Errorf("max length of payment request is %v, length "+
|
||||||
|
"provided was %v", MaxPaymentRequestSize,
|
||||||
|
len(i.PaymentRequest))
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -306,6 +321,9 @@ func serializeInvoice(w io.Writer, i *Invoice) error {
|
|||||||
if err := wire.WriteVarBytes(w, 0, i.Receipt[:]); err != nil {
|
if err := wire.WriteVarBytes(w, 0, i.Receipt[:]); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err := wire.WriteVarBytes(w, 0, i.PaymentRequest[:]); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
birthBytes, err := i.CreationDate.MarshalBinary()
|
birthBytes, err := i.CreationDate.MarshalBinary()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -361,6 +379,11 @@ func deserializeInvoice(r io.Reader) (*Invoice, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
invoice.PaymentRequest, err = wire.ReadVarBytes(r, 0, MaxPaymentRequestSize, "")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
birthBytes, err := wire.ReadVarBytes(r, 0, 300, "birth")
|
birthBytes, err := wire.ReadVarBytes(r, 0, 300, "birth")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -20,6 +20,7 @@ func makeFakePayment() *OutgoingPayment {
|
|||||||
CreationDate: time.Unix(time.Now().Unix(), 0),
|
CreationDate: time.Unix(time.Now().Unix(), 0),
|
||||||
Memo: []byte("fake memo"),
|
Memo: []byte("fake memo"),
|
||||||
Receipt: []byte("fake receipt"),
|
Receipt: []byte("fake receipt"),
|
||||||
|
PaymentRequest: []byte(""),
|
||||||
}
|
}
|
||||||
|
|
||||||
copy(fakeInvoice.Terms.PaymentPreimage[:], rev[:])
|
copy(fakeInvoice.Terms.PaymentPreimage[:], rev[:])
|
||||||
@ -69,6 +70,8 @@ func makeRandomFakePayment() (*OutgoingPayment, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fakeInvoice.PaymentRequest = []byte("")
|
||||||
|
|
||||||
preImg, err := randomBytes(32, 33)
|
preImg, err := randomBytes(32, 33)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
Loading…
Reference in New Issue
Block a user