chanstate: use channel types in consumers

Move channelnotifier and invoice hop-hint code to the chanstate channel
types.

These consumers already depend on the chanstate store interfaces, so
they no longer need to refer to the channeldb compatibility aliases for
OpenChannel and ChannelCloseSummary.
This commit is contained in:
ziggie 2026-05-15 13:07:27 -03:00
parent 530301c19b
commit fea9c171ee
No known key found for this signature in database
GPG key ID: 1AFF9C4DCED6D666
4 changed files with 48 additions and 46 deletions

View file

@ -4,7 +4,6 @@ import (
"sync"
"github.com/btcsuite/btcd/wire/v2"
"github.com/lightningnetwork/lnd/channeldb"
"github.com/lightningnetwork/lnd/chanstate"
"github.com/lightningnetwork/lnd/subscribe"
)
@ -31,14 +30,14 @@ type PendingOpenChannelEvent struct {
// channel. This might not have been persisted to the channel DB yet
// because we are still waiting for the final message from the remote
// peer.
PendingChannel *channeldb.OpenChannel
PendingChannel *chanstate.OpenChannel
}
// OpenChannelEvent represents a new event where a channel goes from pending
// open to open.
type OpenChannelEvent struct {
// Channel is the channel that has become open.
Channel *channeldb.OpenChannel
Channel *chanstate.OpenChannel
}
// ActiveLinkEvent represents a new event where the link becomes active in the
@ -70,13 +69,13 @@ type InactiveChannelEvent struct {
// ClosedChannelEvent represents a new event where a channel becomes closed.
type ClosedChannelEvent struct {
// CloseSummary is the summary of the channel close that has occurred.
CloseSummary *channeldb.ChannelCloseSummary
CloseSummary *chanstate.ChannelCloseSummary
}
// ChannelUpdateEvent represents a new event where a channel's state is updated.
type ChannelUpdateEvent struct {
// Channel is the channel that has been updated.
Channel *channeldb.OpenChannel
Channel *chanstate.OpenChannel
}
// FullyResolvedChannelEvent represents a new event where a channel becomes
@ -148,7 +147,7 @@ func (c *ChannelNotifier) SubscribeChannelEvents() (*subscribe.Client, error) {
// persisted to the DB because we still wait for the final message from the
// remote peer.
func (c *ChannelNotifier) NotifyPendingOpenChannelEvent(chanPoint wire.OutPoint,
pendingChan *channeldb.OpenChannel) {
pendingChan *chanstate.OpenChannel) {
event := PendingOpenChannelEvent{
ChannelPoint: &chanPoint,
@ -200,7 +199,7 @@ func (c *ChannelNotifier) NotifyClosedChannelEvent(chanPoint wire.OutPoint) {
// IsPending field will typically be true at this point; callers should set it
// accordingly.
func (c *ChannelNotifier) NotifyEarlyClosedChannelEvent(
summary *channeldb.ChannelCloseSummary) {
summary *chanstate.ChannelCloseSummary) {
event := ClosedChannelEvent{CloseSummary: summary}
if err := c.ntfnServer.SendUpdate(event); err != nil {
@ -271,7 +270,7 @@ func (c *ChannelNotifier) NotifyInactiveChannelEvent(chanPoint wire.OutPoint) {
// NotifyChannelUpdateEvent notifies subscribers that a channel's state has been
// updated.
func (c *ChannelNotifier) NotifyChannelUpdateEvent(
channel *channeldb.OpenChannel) {
channel *chanstate.OpenChannel) {
event := ChannelUpdateEvent{Channel: channel}
if err := c.ntfnServer.SendUpdate(event); err != nil {

View file

@ -6,7 +6,7 @@ import (
"github.com/btcsuite/btcd/chainhash/v2"
"github.com/btcsuite/btcd/wire/v2"
"github.com/lightningnetwork/lnd/channeldb"
"github.com/lightningnetwork/lnd/chanstate"
"github.com/stretchr/testify/require"
)
@ -27,7 +27,7 @@ func TestChannelUpdateEvent(t *testing.T) {
defer sub.Cancel()
// Create a mock channel state.
channel := &channeldb.OpenChannel{}
channel := &chanstate.OpenChannel{}
// Notify the server of a channel update event.
ntfnServer.NotifyChannelUpdateEvent(channel)
@ -69,9 +69,9 @@ func TestNotifyEarlyClosedChannelEvent(t *testing.T) {
Hash: chainhash.Hash{0x01, 0x02, 0x03},
Index: 4,
}
summary := &channeldb.ChannelCloseSummary{
summary := &chanstate.ChannelCloseSummary{
ChanPoint: chanPoint,
CloseType: channeldb.CooperativeClose,
CloseType: chanstate.CooperativeClose,
IsPending: true,
}
@ -111,9 +111,9 @@ func TestNotifyEarlyClosedChannelEventSingleEvent(t *testing.T) {
require.NoError(t, err)
t.Cleanup(sub.Cancel)
summary := &channeldb.ChannelCloseSummary{
summary := &chanstate.ChannelCloseSummary{
ChanPoint: wire.OutPoint{Index: 7},
CloseType: channeldb.CooperativeClose,
CloseType: chanstate.CooperativeClose,
IsPending: true,
}
ntfnServer.NotifyEarlyClosedChannelEvent(summary)

View file

@ -17,7 +17,6 @@ import (
"github.com/btcsuite/btcd/chaincfg/v2"
"github.com/btcsuite/btcd/chainhash/v2"
"github.com/btcsuite/btcd/wire/v2"
"github.com/lightningnetwork/lnd/channeldb"
"github.com/lightningnetwork/lnd/chanstate"
"github.com/lightningnetwork/lnd/graph/db/models"
"github.com/lightningnetwork/lnd/invoices"
@ -732,7 +731,7 @@ type HopHintInfo struct {
ScidAliasFeature bool
}
func newHopHintInfo(c *channeldb.OpenChannel, isActive bool) *HopHintInfo {
func newHopHintInfo(c *chanstate.OpenChannel, isActive bool) *HopHintInfo {
isPublic := c.ChannelFlags&lnwire.FFAnnounceChannel != 0
return &HopHintInfo{
@ -783,7 +782,7 @@ type SelectHopHintsCfg struct {
// FetchAllChannels retrieves all open channels currently stored
// within the database.
FetchAllChannels func() ([]*channeldb.OpenChannel, error)
FetchAllChannels func() ([]*chanstate.OpenChannel, error)
// IsChannelActive checks whether the channel identified by the provided
// ChannelID is considered active.
@ -846,7 +845,7 @@ func sufficientHints(nHintsLeft int, currentAmount,
// getPotentialHints returns a slice of open channels that should be considered
// for the hopHint list in an invoice. The slice is sorted in descending order
// based on the remote balance.
func getPotentialHints(cfg *SelectHopHintsCfg) ([]*channeldb.OpenChannel,
func getPotentialHints(cfg *SelectHopHintsCfg) ([]*chanstate.OpenChannel,
error) {
// TODO(positiveblue): get the channels slice already filtered by
@ -856,7 +855,7 @@ func getPotentialHints(cfg *SelectHopHintsCfg) ([]*channeldb.OpenChannel,
return nil, err
}
privateChannels := make([]*channeldb.OpenChannel, 0, len(openChannels))
privateChannels := make([]*chanstate.OpenChannel, 0, len(openChannels))
for _, oc := range openChannels {
isPublic := oc.ChannelFlags&lnwire.FFAnnounceChannel != 0
if !isPublic {
@ -878,7 +877,7 @@ func getPotentialHints(cfg *SelectHopHintsCfg) ([]*channeldb.OpenChannel,
// shouldIncludeChannel returns true if the channel passes all the checks to
// be a hopHint in a given invoice.
func shouldIncludeChannel(cfg *SelectHopHintsCfg,
channel *channeldb.OpenChannel,
channel *chanstate.OpenChannel,
alreadyIncluded map[uint64]bool) (zpay32.HopHint, lnwire.MilliSatoshi,
bool) {
@ -924,7 +923,7 @@ func shouldIncludeChannel(cfg *SelectHopHintsCfg,
// descending priority.
func selectHopHints(cfg *SelectHopHintsCfg, nHintsLeft int,
targetBandwidth lnwire.MilliSatoshi,
potentialHints []*channeldb.OpenChannel,
potentialHints []*chanstate.OpenChannel,
alreadyIncluded map[uint64]bool) [][]zpay32.HopHint {
currentBandwidth := lnwire.MilliSatoshi(0)

View file

@ -8,7 +8,7 @@ import (
"github.com/btcsuite/btcd/btcec/v2"
"github.com/btcsuite/btcd/chainhash/v2"
"github.com/btcsuite/btcd/wire/v2"
"github.com/lightningnetwork/lnd/channeldb"
"github.com/lightningnetwork/lnd/chanstate"
"github.com/lightningnetwork/lnd/graph/db/models"
"github.com/lightningnetwork/lnd/invoices"
"github.com/lightningnetwork/lnd/lnwire"
@ -78,11 +78,15 @@ func (h *hopHintsConfigMock) GetAlias(
// FetchAllChannels retrieves all open channels currently stored
// within the database.
func (h *hopHintsConfigMock) FetchAllChannels() ([]*channeldb.OpenChannel,
func (h *hopHintsConfigMock) FetchAllChannels() ([]*chanstate.OpenChannel,
error) {
args := h.Mock.Called()
return args.Get(0).([]*channeldb.OpenChannel), args.Error(1)
channels, ok := args.Get(0).([]*chanstate.OpenChannel)
require.True(h.t, ok)
return channels, args.Error(1)
}
// FetchChannelEdgesByID attempts to lookup the two directed edges for
@ -121,7 +125,7 @@ func getTestPubKey() *btcec.PublicKey {
var shouldIncludeChannelTestCases = []struct {
name string
setupMock func(*hopHintsConfigMock)
channel *channeldb.OpenChannel
channel *chanstate.OpenChannel
alreadyIncluded map[uint64]bool
cfg *SelectHopHintsCfg
hopHint zpay32.HopHint
@ -131,7 +135,7 @@ var shouldIncludeChannelTestCases = []struct {
name: "already included channels should not be included " +
"again",
alreadyIncluded: map[uint64]bool{1: true},
channel: &channeldb.OpenChannel{
channel: &chanstate.OpenChannel{
ShortChannelID: lnwire.NewShortChanIDFromInt(1),
},
include: false,
@ -146,7 +150,7 @@ var shouldIncludeChannelTestCases = []struct {
"IsChannelActive", chanID,
).Once().Return(true)
},
channel: &channeldb.OpenChannel{
channel: &chanstate.OpenChannel{
FundingOutpoint: wire.OutPoint{
Index: 0,
},
@ -163,7 +167,7 @@ var shouldIncludeChannelTestCases = []struct {
"IsChannelActive", chanID,
).Once().Return(false)
},
channel: &channeldb.OpenChannel{
channel: &chanstate.OpenChannel{
FundingOutpoint: wire.OutPoint{
Index: 0,
},
@ -185,7 +189,7 @@ var shouldIncludeChannelTestCases = []struct {
"IsPublicNode", mock.Anything,
).Once().Return(false, nil)
},
channel: &channeldb.OpenChannel{
channel: &chanstate.OpenChannel{
FundingOutpoint: wire.OutPoint{
Index: 0,
},
@ -220,7 +224,7 @@ var shouldIncludeChannelTestCases = []struct {
"FetchChannelEdgesByID", mock.Anything,
).Once().Return(nil, nil, nil, fmt.Errorf("no edge"))
},
channel: &channeldb.OpenChannel{
channel: &chanstate.OpenChannel{
FundingOutpoint: wire.OutPoint{
Index: 0,
},
@ -256,12 +260,12 @@ var shouldIncludeChannelTestCases = []struct {
"GetAlias", mock.Anything,
).Once().Return(lnwire.ShortChannelID{}, nil)
},
channel: &channeldb.OpenChannel{
channel: &chanstate.OpenChannel{
FundingOutpoint: wire.OutPoint{
Index: 0,
},
IdentityPub: getTestPubKey(),
ChanType: channeldb.ScidAliasFeatureBit,
ChanType: chanstate.ScidAliasFeatureBit,
},
include: false,
}, {
@ -294,12 +298,12 @@ var shouldIncludeChannelTestCases = []struct {
"GetAlias", mock.Anything,
).Once().Return(alias, nil)
},
channel: &channeldb.OpenChannel{
channel: &chanstate.OpenChannel{
FundingOutpoint: wire.OutPoint{
Index: 0,
},
IdentityPub: getTestPubKey(),
ChanType: channeldb.ScidAliasFeatureBit,
ChanType: chanstate.ScidAliasFeatureBit,
},
include: false,
}, {
@ -347,7 +351,7 @@ var shouldIncludeChannelTestCases = []struct {
nil,
)
},
channel: &channeldb.OpenChannel{
channel: &chanstate.OpenChannel{
FundingOutpoint: wire.OutPoint{
Index: 1,
},
@ -394,7 +398,7 @@ var shouldIncludeChannelTestCases = []struct {
}, nil,
)
},
channel: &channeldb.OpenChannel{
channel: &chanstate.OpenChannel{
FundingOutpoint: wire.OutPoint{
Index: 1,
},
@ -447,13 +451,13 @@ var shouldIncludeChannelTestCases = []struct {
"GetAlias", mock.Anything,
).Once().Return(aliasSCID, nil)
},
channel: &channeldb.OpenChannel{
channel: &chanstate.OpenChannel{
FundingOutpoint: wire.OutPoint{
Index: 1,
},
IdentityPub: getTestPubKey(),
ShortChannelID: lnwire.NewShortChanIDFromInt(12),
ChanType: channeldb.ScidAliasFeatureBit,
ChanType: chanstate.ScidAliasFeatureBit,
},
hopHint: zpay32.HopHint{
NodeID: getTestPubKey(),
@ -571,7 +575,7 @@ var populateHopHintsTestCases = []struct {
setupMock: func(h *hopHintsConfigMock) {
fundingOutpoint := wire.OutPoint{Index: 9}
chanID := lnwire.NewChanIDFromOutPoint(fundingOutpoint)
allChannels := []*channeldb.OpenChannel{
allChannels := []*chanstate.OpenChannel{
{
FundingOutpoint: fundingOutpoint,
ShortChannelID: lnwire.NewShortChanIDFromInt(9),
@ -618,9 +622,9 @@ var populateHopHintsTestCases = []struct {
fundingOutpoint := wire.OutPoint{Index: 9}
chanID := lnwire.NewChanIDFromOutPoint(fundingOutpoint)
remoteBalance := lnwire.MilliSatoshi(10_000_000)
allChannels := []*channeldb.OpenChannel{
allChannels := []*chanstate.OpenChannel{
{
LocalCommitment: channeldb.ChannelCommitment{
LocalCommitment: chanstate.ChannelCommitment{
RemoteBalance: remoteBalance,
},
FundingOutpoint: fundingOutpoint,
@ -669,12 +673,12 @@ var populateHopHintsTestCases = []struct {
fundingOutpoint := wire.OutPoint{Index: 9}
chanID := lnwire.NewChanIDFromOutPoint(fundingOutpoint)
remoteBalance := lnwire.MilliSatoshi(10_000_000)
allChannels := []*channeldb.OpenChannel{
allChannels := []*chanstate.OpenChannel{
// Because the channels with higher remote balance have
// enough bandwidth we should never use this one.
{},
{
LocalCommitment: channeldb.ChannelCommitment{
LocalCommitment: chanstate.ChannelCommitment{
RemoteBalance: remoteBalance,
},
FundingOutpoint: fundingOutpoint,
@ -868,11 +872,11 @@ func setupMockTwoChannels(h *hopHintsConfigMock) (lnwire.ChannelID,
chanID2 := lnwire.NewChanIDFromOutPoint(fundingOutpoint2)
remoteBalance2 := lnwire.MilliSatoshi(1_000_000)
allChannels := []*channeldb.OpenChannel{
allChannels := []*chanstate.OpenChannel{
// After sorting we will first process chanID1 and then
// chanID2.
{
LocalCommitment: channeldb.ChannelCommitment{
LocalCommitment: chanstate.ChannelCommitment{
RemoteBalance: remoteBalance2,
},
FundingOutpoint: fundingOutpoint2,
@ -880,7 +884,7 @@ func setupMockTwoChannels(h *hopHintsConfigMock) (lnwire.ChannelID,
IdentityPub: getTestPubKey(),
},
{
LocalCommitment: channeldb.ChannelCommitment{
LocalCommitment: chanstate.ChannelCommitment{
RemoteBalance: remoteBalance1,
},
FundingOutpoint: fundingOutpoint1,