paymentsdb: move serialization methods to kv_store file
What changed, and why it matters
This commit simply moves four existing helper functions (two for serializing and two for deserializing HTLC settlement/failure details) from one source file to another within the payments database package. No logic, behavior, or security properties of the code are changed.
No security action needed; treat as routine refactoring.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff is a pure code relocation: serializeHTLCSettleInfo, deserializeHTLCSettleInfo, serializeHTLCFailInfo, and deserializeHTLCFailInfo are removed from payments/db/payment.go and added to payments/db/kv_store.go with identical implementations. Imports (io, math, wire) are adjusted accordingly. There are no functional modifications, bug fixes, or security-related changes.
Changed components
payments/db/kv_store.gopayments/db/payment.goInspect captured patch +89 / −91
diff --git a/payments/db/kv_store.go b/payments/db/kv_store.go
index afc7dec..343f77e 100644
--- a/payments/db/kv_store.go
+++ b/payments/db/kv_store.go
@@ -7,6 +7,7 @@ import (
"errors"
"fmt"
"io"
+ "math"
"sort"
"sync"
"time"
@@ -2107,3 +2108,91 @@ func DeserializeRoute(r io.Reader) (route.Route, error) {
return rt, nil
}
+
+// serializeHTLCSettleInfo serializes the details of a settled htlc.
+func serializeHTLCSettleInfo(w io.Writer, s *HTLCSettleInfo) error {
+ if _, err := w.Write(s.Preimage[:]); err != nil {
+ return err
+ }
+
+ if err := serializeTime(w, s.SettleTime); err != nil {
+ return err
+ }
+
+ return nil
+}
+
+// deserializeHTLCSettleInfo deserializes the details of a settled htlc.
+func deserializeHTLCSettleInfo(r io.Reader) (*HTLCSettleInfo, error) {
+ s := &HTLCSettleInfo{}
+ if _, err := io.ReadFull(r, s.Preimage[:]); err != nil {
+ return nil, err
+ }
+
+ var err error
+ s.SettleTime, err = deserializeTime(r)
+ if err != nil {
+ return nil, err
+ }
+
+ return s, nil
+}
+
+// serializeHTLCFailInfo serializes the details of a failed htlc including the
+// wire failure.
+func serializeHTLCFailInfo(w io.Writer, f *HTLCFailInfo) error {
+ if err := serializeTime(w, f.FailTime); err != nil {
+ return err
+ }
+
+ // Write failure. If there is no failure message, write an empty
+ // byte slice.
+ var messageBytes bytes.Buffer
+ if f.Message != nil {
+ err := lnwire.EncodeFailureMessage(&messageBytes, f.Message, 0)
+ if err != nil {
+ return err
+ }
+ }
+ if err := wire.WriteVarBytes(w, 0, messageBytes.Bytes()); err != nil {
+ return err
+ }
+
+ return WriteElements(w, byte(f.Reason), f.FailureSourceIndex)
+}
+
+// deserializeHTLCFailInfo deserializes the details of a failed htlc including
+// the wire failure.
+func deserializeHTLCFailInfo(r io.Reader) (*HTLCFailInfo, error) {
+ f := &HTLCFailInfo{}
+ var err error
+ f.FailTime, err = deserializeTime(r)
+ if err != nil {
+ return nil, err
+ }
+
+ // Read failure.
+ failureBytes, err := wire.ReadVarBytes(
+ r, 0, math.MaxUint16, "failure",
+ )
+ if err != nil {
+ return nil, err
+ }
+ if len(failureBytes) > 0 {
+ f.Message, err = lnwire.DecodeFailureMessage(
+ bytes.NewReader(failureBytes), 0,
+ )
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ var reason byte
+ err = ReadElements(r, &reason, &f.FailureSourceIndex)
+ if err != nil {
+ return nil, err
+ }
+ f.Reason = HTLCFailReason(reason)
+
+ return f, nil
+}
diff --git a/payments/db/payment.go b/payments/db/payment.go
index 72338a4..2c5931a 100644
--- a/payments/db/payment.go
+++ b/payments/db/payment.go
@@ -4,12 +4,9 @@ import (
"bytes"
"errors"
"fmt"
- "io"
- "math"
"time"
"github.com/btcsuite/btcd/btcec/v2"
- "github.com/btcsuite/btcd/wire"
"github.com/davecgh/go-spew/spew"
sphinx "github.com/lightningnetwork/lightning-onion"
"github.com/lightningnetwork/lnd/lntypes"
@@ -650,94 +647,6 @@ func (m *MPPayment) AllowMoreAttempts() (bool, error) {
return true, nil
}
-// serializeHTLCSettleInfo serializes the details of a settled htlc.
-func serializeHTLCSettleInfo(w io.Writer, s *HTLCSettleInfo) error {
- if _, err := w.Write(s.Preimage[:]); err != nil {
- return err
- }
-
- if err := serializeTime(w, s.SettleTime); err != nil {
- return err
- }
-
- return nil
-}
-
-// deserializeHTLCSettleInfo deserializes the details of a settled htlc.
-func deserializeHTLCSettleInfo(r io.Reader) (*HTLCSettleInfo, error) {
- s := &HTLCSettleInfo{}
- if _, err := io.ReadFull(r, s.Preimage[:]); err != nil {
- return nil, err
- }
-
- var err error
- s.SettleTime, err = deserializeTime(r)
- if err != nil {
- return nil, err
- }
-
- return s, nil
-}
-
-// serializeHTLCFailInfo serializes the details of a failed htlc including the
-// wire failure.
-func serializeHTLCFailInfo(w io.Writer, f *HTLCFailInfo) error {
- if err := serializeTime(w, f.FailTime); err != nil {
- return err
- }
-
- // Write failure. If there is no failure message, write an empty
- // byte slice.
- var messageBytes bytes.Buffer
- if f.Message != nil {
- err := lnwire.EncodeFailureMessage(&messageBytes, f.Message, 0)
- if err != nil {
- return err
- }
- }
- if err := wire.WriteVarBytes(w, 0, messageBytes.Bytes()); err != nil {
- return err
- }
-
- return WriteElements(w, byte(f.Reason), f.FailureSourceIndex)
-}
-
-// deserializeHTLCFailInfo deserializes the details of a failed htlc including
-// the wire failure.
-func deserializeHTLCFailInfo(r io.Reader) (*HTLCFailInfo, error) {
- f := &HTLCFailInfo{}
- var err error
- f.FailTime, err = deserializeTime(r)
- if err != nil {
- return nil, err
- }
-
- // Read failure.
- failureBytes, err := wire.ReadVarBytes(
- r, 0, math.MaxUint16, "failure",
- )
- if err != nil {
- return nil, err
- }
- if len(failureBytes) > 0 {
- f.Message, err = lnwire.DecodeFailureMessage(
- bytes.NewReader(failureBytes), 0,
- )
- if err != nil {
- return nil, err
- }
- }
-
- var reason byte
- err = ReadElements(r, &reason, &f.FailureSourceIndex)
- if err != nil {
- return nil, err
- }
- f.Reason = HTLCFailReason(reason)
-
- return f, nil
-}
-
// generateSphinxPacket generates then encodes a sphinx packet which encodes
// the onion route specified by the passed layer 3 route. The blob returned
// from this function can immediately be included within an HTLC add packet to
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.