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

lightningnetwork / lnd / 15838907453

24 Jun 2025 01:26AM UTC coverage: 57.079% (-11.1%) from 68.172%
15838907453

Pull #9982

github

web-flow
Merge e42780be2 into 45c15646c
Pull Request #9982: lnwire+lnwallet: add LocalNonces field for splice nonce coordination w/ taproot channels

103 of 167 new or added lines in 5 files covered. (61.68%)

30191 existing lines in 463 files now uncovered.

96331 of 168768 relevant lines covered (57.08%)

0.6 hits per line

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

80.0
/htlcswitch/held_htlc_set.go
1
package htlcswitch
2

3
import (
4
        "errors"
5
        "fmt"
6

7
        "github.com/lightningnetwork/lnd/graph/db/models"
8
)
9

10
// heldHtlcSet keeps track of outstanding intercepted forwards. It exposes
11
// several methods to manipulate the underlying map structure in a consistent
12
// way.
13
type heldHtlcSet struct {
14
        set map[models.CircuitKey]InterceptedForward
15
}
16

17
func newHeldHtlcSet() *heldHtlcSet {
1✔
18
        return &heldHtlcSet{
1✔
19
                set: make(map[models.CircuitKey]InterceptedForward),
1✔
20
        }
1✔
21
}
1✔
22

23
// forEach iterates over all held forwards and calls the given callback for each
24
// of them.
25
func (h *heldHtlcSet) forEach(cb func(InterceptedForward)) {
1✔
26
        for _, fwd := range h.set {
2✔
27
                cb(fwd)
1✔
28
        }
1✔
29
}
30

31
// popAll calls the callback for each forward and removes them from the set.
32
func (h *heldHtlcSet) popAll(cb func(InterceptedForward)) {
1✔
33
        for _, fwd := range h.set {
2✔
34
                cb(fwd)
1✔
35
        }
1✔
36

37
        h.set = make(map[models.CircuitKey]InterceptedForward)
1✔
38
}
39

40
// popAutoFails calls the callback for each forward that has an auto-fail height
41
// equal or less then the specified pop height and removes them from the set.
42
func (h *heldHtlcSet) popAutoFails(height uint32, cb func(InterceptedForward)) {
1✔
43
        for key, fwd := range h.set {
2✔
44
                if uint32(fwd.Packet().AutoFailHeight) > height {
2✔
45
                        continue
1✔
46
                }
47

UNCOV
48
                cb(fwd)
×
UNCOV
49

×
UNCOV
50
                delete(h.set, key)
×
51
        }
52
}
53

54
// pop returns the specified forward and removes it from the set.
55
func (h *heldHtlcSet) pop(key models.CircuitKey) (InterceptedForward, error) {
1✔
56
        intercepted, ok := h.set[key]
1✔
57
        if !ok {
1✔
UNCOV
58
                return nil, fmt.Errorf("fwd %v not found", key)
×
UNCOV
59
        }
×
60

61
        delete(h.set, key)
1✔
62

1✔
63
        return intercepted, nil
1✔
64
}
65

66
// exists tests whether the specified forward is part of the set.
67
func (h *heldHtlcSet) exists(key models.CircuitKey) bool {
1✔
68
        _, ok := h.set[key]
1✔
69

1✔
70
        return ok
1✔
71
}
1✔
72

73
// push adds the specified forward to the set. An error is returned if the
74
// forward exists already.
75
func (h *heldHtlcSet) push(key models.CircuitKey,
76
        fwd InterceptedForward) error {
1✔
77

1✔
78
        if fwd == nil {
1✔
UNCOV
79
                return errors.New("nil fwd pushed")
×
UNCOV
80
        }
×
81

82
        if h.exists(key) {
1✔
UNCOV
83
                return errors.New("htlc already exists in set")
×
UNCOV
84
        }
×
85

86
        h.set[key] = fwd
1✔
87

1✔
88
        return nil
1✔
89
}
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