• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

lightningnetwork / lnd / 16811814134

07 Aug 2025 05:46PM UTC coverage: 57.463% (-9.5%) from 66.947%
16811814134

Pull #9844

github

web-flow
Merge 4b08ee16d into 2269859d9
Pull Request #9844: Refactor Payment PR 3

434 of 645 new or added lines in 17 files covered. (67.29%)

28260 existing lines in 457 files now uncovered.

99053 of 172378 relevant lines covered (57.46%)

1.78 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

68.67
/channeldb/mp_payment.go
1
package channeldb
2

3
import (
4
        "bytes"
5
        "io"
6
        "math"
7
        "time"
8

9
        "github.com/btcsuite/btcd/wire"
10
        "github.com/lightningnetwork/lnd/lnwire"
11
        paymentsdb "github.com/lightningnetwork/lnd/payments/db"
12
)
13

14
// serializeHTLCSettleInfo serializes the details of a settled htlc.
15
func serializeHTLCSettleInfo(w io.Writer, s *paymentsdb.HTLCSettleInfo) error {
3✔
16
        if _, err := w.Write(s.Preimage[:]); err != nil {
3✔
17
                return err
×
18
        }
×
19

20
        if err := serializeTime(w, s.SettleTime); err != nil {
3✔
21
                return err
×
22
        }
×
23

24
        return nil
3✔
25
}
26

27
// deserializeHTLCSettleInfo deserializes the details of a settled htlc.
28
func deserializeHTLCSettleInfo(r io.Reader) (*paymentsdb.HTLCSettleInfo, error) {
3✔
29
        s := &paymentsdb.HTLCSettleInfo{}
3✔
30
        if _, err := io.ReadFull(r, s.Preimage[:]); err != nil {
3✔
31
                return nil, err
×
32
        }
×
33

34
        var err error
3✔
35
        s.SettleTime, err = deserializeTime(r)
3✔
36
        if err != nil {
3✔
37
                return nil, err
×
38
        }
×
39

40
        return s, nil
3✔
41
}
42

43
// serializeHTLCFailInfo serializes the details of a failed htlc including the
44
// wire failure.
45
func serializeHTLCFailInfo(w io.Writer, f *paymentsdb.HTLCFailInfo) error {
3✔
46
        if err := serializeTime(w, f.FailTime); err != nil {
3✔
47
                return err
×
48
        }
×
49

50
        // Write failure. If there is no failure message, write an empty
51
        // byte slice.
52
        var messageBytes bytes.Buffer
3✔
53
        if f.Message != nil {
6✔
54
                err := lnwire.EncodeFailureMessage(&messageBytes, f.Message, 0)
3✔
55
                if err != nil {
3✔
56
                        return err
×
57
                }
×
58
        }
59
        if err := wire.WriteVarBytes(w, 0, messageBytes.Bytes()); err != nil {
3✔
60
                return err
×
61
        }
×
62

63
        return WriteElements(w, byte(f.Reason), f.FailureSourceIndex)
3✔
64
}
65

66
// deserializeHTLCFailInfo deserializes the details of a failed htlc including
67
// the wire failure.
68
func deserializeHTLCFailInfo(r io.Reader) (*paymentsdb.HTLCFailInfo, error) {
3✔
69
        f := &paymentsdb.HTLCFailInfo{}
3✔
70
        var err error
3✔
71
        f.FailTime, err = deserializeTime(r)
3✔
72
        if err != nil {
3✔
73
                return nil, err
×
74
        }
×
75

76
        // Read failure.
77
        failureBytes, err := wire.ReadVarBytes(
3✔
78
                r, 0, math.MaxUint16, "failure",
3✔
79
        )
3✔
80
        if err != nil {
3✔
81
                return nil, err
×
82
        }
×
83
        if len(failureBytes) > 0 {
6✔
84
                f.Message, err = lnwire.DecodeFailureMessage(
3✔
85
                        bytes.NewReader(failureBytes), 0,
3✔
86
                )
3✔
87
                if err != nil {
3✔
88
                        return nil, err
×
89
                }
×
90
        }
91

92
        var reason byte
3✔
93
        err = ReadElements(r, &reason, &f.FailureSourceIndex)
3✔
94
        if err != nil {
3✔
95
                return nil, err
×
96
        }
×
97
        f.Reason = paymentsdb.HTLCFailReason(reason)
3✔
98

3✔
99
        return f, nil
3✔
100
}
101

102
// deserializeTime deserializes time as unix nanoseconds.
103
func deserializeTime(r io.Reader) (time.Time, error) {
3✔
104
        var scratch [8]byte
3✔
105
        if _, err := io.ReadFull(r, scratch[:]); err != nil {
3✔
106
                return time.Time{}, err
×
107
        }
×
108

109
        // Convert to time.Time. Interpret unix nano time zero as a zero
110
        // time.Time value.
111
        unixNano := byteOrder.Uint64(scratch[:])
3✔
112
        if unixNano == 0 {
3✔
UNCOV
113
                return time.Time{}, nil
×
UNCOV
114
        }
×
115

116
        return time.Unix(0, int64(unixNano)), nil
3✔
117
}
118

119
// serializeTime serializes time as unix nanoseconds.
120
func serializeTime(w io.Writer, t time.Time) error {
3✔
121
        var scratch [8]byte
3✔
122

3✔
123
        // Convert to unix nano seconds, but only if time is non-zero. Calling
3✔
124
        // UnixNano() on a zero time yields an undefined result.
3✔
125
        var unixNano int64
3✔
126
        if !t.IsZero() {
6✔
127
                unixNano = t.UnixNano()
3✔
128
        }
3✔
129

130
        byteOrder.PutUint64(scratch[:], uint64(unixNano))
3✔
131
        _, err := w.Write(scratch[:])
3✔
132
        return err
3✔
133
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc