graph/db: add gossip version aliases

Introduce gossipV1 and gossipV2 package-level aliases in sql_store.go
to reduce verbosity in version switch statements. Leave hard-coded
v1/v2 call sites untouched so remaining upgrades are obvious.

In other words, it is now easy to see where our remaining work in the
sql_store.go file is by just searching for instances of
`lnwire.GossipVersion1`.
This commit is contained in:
Elle Mouton committed 2026-02-20 08:46:59 +02:00
1 parent 3ea2423f25
commit 898e4ef854
1 file changed
+42 -36
+42 -36
View File
@@ -33,6 +33,11 @@ import (
"github.com/lightningnetwork/lnd/tor" "github.com/lightningnetwork/lnd/tor"
) )
const (
gossipV1 = lnwire.GossipVersion1
gossipV2 = lnwire.GossipVersion2
)
// SQLQueries is a subset of the sqlc.Querier interface that can be used to // SQLQueries is a subset of the sqlc.Querier interface that can be used to
// execute queries against the SQL graph tables. // execute queries against the SQL graph tables.
// //
@@ -305,7 +310,7 @@ func (s *SQLStore) HasV1Node(ctx context.Context,
err := s.db.ExecTx(ctx, sqldb.ReadTxOpt(), func(db SQLQueries) error { err := s.db.ExecTx(ctx, sqldb.ReadTxOpt(), func(db SQLQueries) error {
dbNode, err := db.GetNodeByPubKey( dbNode, err := db.GetNodeByPubKey(
ctx, sqlc.GetNodeByPubKeyParams{ ctx, sqlc.GetNodeByPubKeyParams{
Version: int16(lnwire.GossipVersion1), Version: int16(gossipV1),
PubKey: pubKey[:], PubKey: pubKey[:],
}, },
) )
@@ -869,11 +874,11 @@ func (s *SQLStore) updateEdgeCache(e *models.ChannelEdgePolicy,
// during the next query for this edge. // during the next query for this edge.
if entry, ok := s.rejectCache.get(e.Version, e.ChannelID); ok { if entry, ok := s.rejectCache.get(e.Version, e.ChannelID); ok {
switch e.Version { switch e.Version {
case lnwire.GossipVersion1: case gossipV1:
updateRejectCacheEntryV1( updateRejectCacheEntryV1(
&entry, isUpdate1, e.LastUpdate, &entry, isUpdate1, e.LastUpdate,
) )
case lnwire.GossipVersion2: case gossipV2:
updateRejectCacheEntryV2( updateRejectCacheEntryV2(
&entry, isUpdate1, e.LastBlockHeight, &entry, isUpdate1, e.LastBlockHeight,
) )
@@ -2242,7 +2247,7 @@ func (s *SQLStore) HasV1ChannelEdge(chanID uint64) (time.Time, time.Time, bool,
// We'll query the cache with the shared lock held to allow multiple // We'll query the cache with the shared lock held to allow multiple
// readers to access values in the cache concurrently if they exist. // readers to access values in the cache concurrently if they exist.
s.cacheMu.RLock() s.cacheMu.RLock()
if entry, ok := s.rejectCache.get(lnwire.GossipVersion1, chanID); ok { if entry, ok := s.rejectCache.get(gossipV1, chanID); ok {
s.cacheMu.RUnlock() s.cacheMu.RUnlock()
node1LastUpdate = time.Unix(entry.upd1Time, 0) node1LastUpdate = time.Unix(entry.upd1Time, 0)
node2LastUpdate = time.Unix(entry.upd2Time, 0) node2LastUpdate = time.Unix(entry.upd2Time, 0)
@@ -2258,7 +2263,7 @@ func (s *SQLStore) HasV1ChannelEdge(chanID uint64) (time.Time, time.Time, bool,
// The item was not found with the shared lock, so we'll acquire the // The item was not found with the shared lock, so we'll acquire the
// exclusive lock and check the cache again in case another method added // exclusive lock and check the cache again in case another method added
// the entry to the cache while no lock was held. // the entry to the cache while no lock was held.
if entry, ok := s.rejectCache.get(lnwire.GossipVersion1, chanID); ok { if entry, ok := s.rejectCache.get(gossipV1, chanID); ok {
node1LastUpdate = time.Unix(entry.upd1Time, 0) node1LastUpdate = time.Unix(entry.upd1Time, 0)
node2LastUpdate = time.Unix(entry.upd2Time, 0) node2LastUpdate = time.Unix(entry.upd2Time, 0)
exists, isZombie = entry.flags.unpack() exists, isZombie = entry.flags.unpack()
@@ -2271,7 +2276,7 @@ func (s *SQLStore) HasV1ChannelEdge(chanID uint64) (time.Time, time.Time, bool,
channel, err := db.GetChannelBySCID( channel, err := db.GetChannelBySCID(
ctx, sqlc.GetChannelBySCIDParams{ ctx, sqlc.GetChannelBySCIDParams{
Scid: chanIDB, Scid: chanIDB,
Version: int16(lnwire.GossipVersion1), Version: int16(gossipV1),
}, },
) )
if errors.Is(err, sql.ErrNoRows) { if errors.Is(err, sql.ErrNoRows) {
@@ -2279,7 +2284,7 @@ func (s *SQLStore) HasV1ChannelEdge(chanID uint64) (time.Time, time.Time, bool,
isZombie, err = db.IsZombieChannel( isZombie, err = db.IsZombieChannel(
ctx, sqlc.IsZombieChannelParams{ ctx, sqlc.IsZombieChannelParams{
Scid: chanIDB, Scid: chanIDB,
Version: int16(lnwire.GossipVersion1), Version: int16(gossipV1),
}, },
) )
if err != nil { if err != nil {
@@ -2296,7 +2301,7 @@ func (s *SQLStore) HasV1ChannelEdge(chanID uint64) (time.Time, time.Time, bool,
policy1, err := db.GetChannelPolicyByChannelAndNode( policy1, err := db.GetChannelPolicyByChannelAndNode(
ctx, sqlc.GetChannelPolicyByChannelAndNodeParams{ ctx, sqlc.GetChannelPolicyByChannelAndNodeParams{
Version: int16(lnwire.GossipVersion1), Version: int16(gossipV1),
ChannelID: channel.ID, ChannelID: channel.ID,
NodeID: channel.NodeID1, NodeID: channel.NodeID1,
}, },
@@ -2310,7 +2315,7 @@ func (s *SQLStore) HasV1ChannelEdge(chanID uint64) (time.Time, time.Time, bool,
policy2, err := db.GetChannelPolicyByChannelAndNode( policy2, err := db.GetChannelPolicyByChannelAndNode(
ctx, sqlc.GetChannelPolicyByChannelAndNodeParams{ ctx, sqlc.GetChannelPolicyByChannelAndNodeParams{
Version: int16(lnwire.GossipVersion1), Version: int16(gossipV1),
ChannelID: channel.ID, ChannelID: channel.ID,
NodeID: channel.NodeID2, NodeID: channel.NodeID2,
}, },
@@ -2330,7 +2335,7 @@ func (s *SQLStore) HasV1ChannelEdge(chanID uint64) (time.Time, time.Time, bool,
} }
s.rejectCache.insert( s.rejectCache.insert(
lnwire.GossipVersion1, chanID, gossipV1, chanID,
newRejectCacheEntryV1( newRejectCacheEntryV1(
node1LastUpdate, node2LastUpdate, exists, node1LastUpdate, node2LastUpdate, exists,
isZombie, isZombie,
@@ -2427,13 +2432,13 @@ func (s *SQLStore) HasChannelEdge(v lnwire.GossipVersion,
err) err)
} else if err == nil { } else if err == nil {
switch v { switch v {
case lnwire.GossipVersion1: case gossipV1:
if policy1.LastUpdate.Valid { if policy1.LastUpdate.Valid {
node1LastUpdate = time.Unix( node1LastUpdate = time.Unix(
policy1.LastUpdate.Int64, 0, policy1.LastUpdate.Int64, 0,
) )
} }
case lnwire.GossipVersion2: case gossipV2:
if policy1.BlockHeight.Valid { if policy1.BlockHeight.Valid {
node1Block = uint32( node1Block = uint32(
policy1.BlockHeight.Int64, policy1.BlockHeight.Int64,
@@ -2454,13 +2459,13 @@ func (s *SQLStore) HasChannelEdge(v lnwire.GossipVersion,
err) err)
} else if err == nil { } else if err == nil {
switch v { switch v {
case lnwire.GossipVersion1: case gossipV1:
if policy2.LastUpdate.Valid { if policy2.LastUpdate.Valid {
node2LastUpdate = time.Unix( node2LastUpdate = time.Unix(
policy2.LastUpdate.Int64, 0, policy2.LastUpdate.Int64, 0,
) )
} }
case lnwire.GossipVersion2: case gossipV2:
if policy2.BlockHeight.Valid { if policy2.BlockHeight.Valid {
node2Block = uint32( node2Block = uint32(
policy2.BlockHeight.Int64, policy2.BlockHeight.Int64,
@@ -2478,11 +2483,11 @@ func (s *SQLStore) HasChannelEdge(v lnwire.GossipVersion,
var entry rejectCacheEntry var entry rejectCacheEntry
switch v { switch v {
case lnwire.GossipVersion1: case gossipV1:
entry = newRejectCacheEntryV1( entry = newRejectCacheEntryV1(
node1LastUpdate, node2LastUpdate, exists, isZombie, node1LastUpdate, node2LastUpdate, exists, isZombie,
) )
case lnwire.GossipVersion2: case gossipV2:
entry = newRejectCacheEntryV2( entry = newRejectCacheEntryV2(
node1Block, node2Block, exists, isZombie, node1Block, node2Block, exists, isZombie,
) )
@@ -2544,9 +2549,9 @@ func (s *SQLStore) IsPublicNode(v lnwire.GossipVersion, pubKey [33]byte) (bool,
err := s.db.ExecTx(ctx, sqldb.ReadTxOpt(), func(db SQLQueries) error { err := s.db.ExecTx(ctx, sqldb.ReadTxOpt(), func(db SQLQueries) error {
var err error var err error
switch v { switch v {
case lnwire.GossipVersion1: case gossipV1:
isPublic, err = db.IsPublicV1Node(ctx, pubKey[:]) isPublic, err = db.IsPublicV1Node(ctx, pubKey[:])
case lnwire.GossipVersion2: case gossipV2:
isPublic, err = db.IsPublicV2Node(ctx, pubKey[:]) isPublic, err = db.IsPublicV2Node(ctx, pubKey[:])
} }
@@ -3205,7 +3210,7 @@ func (s *SQLStore) AddEdgeProof(scid lnwire.ShortChannelID,
err error err error
) )
switch proof.Version { switch proof.Version {
case lnwire.GossipVersion1: case gossipV1:
res, err = db.AddV1ChannelProof( res, err = db.AddV1ChannelProof(
ctx, sqlc.AddV1ChannelProofParams{ ctx, sqlc.AddV1ChannelProofParams{
Scid: scidBytes, Scid: scidBytes,
@@ -3216,7 +3221,7 @@ func (s *SQLStore) AddEdgeProof(scid lnwire.ShortChannelID,
}, },
) )
case lnwire.GossipVersion2: case gossipV2:
res, err = db.AddV2ChannelProof( res, err = db.AddV2ChannelProof(
ctx, sqlc.AddV2ChannelProofParams{ ctx, sqlc.AddV2ChannelProofParams{
Scid: scidBytes, Scid: scidBytes,
@@ -3691,7 +3696,8 @@ func updateChanEdgePolicy(ctx context.Context, tx SQLQueries,
Signature: edge.SigBytes, Signature: edge.SigBytes,
} }
if version == lnwire.GossipVersion1 { switch version {
case gossipV1:
params.LastUpdate = sqldb.SQLInt64(edge.LastUpdate.Unix()) params.LastUpdate = sqldb.SQLInt64(edge.LastUpdate.Unix())
params.Disabled = sql.NullBool{ params.Disabled = sql.NullBool{
Valid: true, Valid: true,
@@ -3701,7 +3707,7 @@ func updateChanEdgePolicy(ctx context.Context, tx SQLQueries,
Valid: edge.MessageFlags.HasMaxHtlc(), Valid: edge.MessageFlags.HasMaxHtlc(),
Int64: int64(edge.MaxHTLC), Int64: int64(edge.MaxHTLC),
} }
} else { case gossipV2:
params.BlockHeight = sqldb.SQLInt64( params.BlockHeight = sqldb.SQLInt64(
int64(edge.LastBlockHeight), int64(edge.LastBlockHeight),
) )
@@ -3718,7 +3724,7 @@ func updateChanEdgePolicy(ctx context.Context, tx SQLQueries,
// Convert the flat extra opaque data into a map of TLV types to // Convert the flat extra opaque data into a map of TLV types to
// values. // values.
extra := edge.ExtraSignedFields extra := edge.ExtraSignedFields
if version == lnwire.GossipVersion1 { if version == gossipV1 {
extra, err = marshalExtraOpaqueData(edge.ExtraOpaqueData) extra, err = marshalExtraOpaqueData(edge.ExtraOpaqueData)
if err != nil { if err != nil {
return node1Pub, node2Pub, false, fmt.Errorf( return node1Pub, node2Pub, false, fmt.Errorf(
@@ -3794,9 +3800,9 @@ func buildNode(ctx context.Context, cfg *sqldb.QueryConfig, db SQLQueries,
// and supported. // and supported.
func isKnownGossipVersion(v lnwire.GossipVersion) bool { func isKnownGossipVersion(v lnwire.GossipVersion) bool {
switch v { switch v {
case lnwire.GossipVersion1: case gossipV1:
return true return true
case lnwire.GossipVersion2: case gossipV2:
return true return true
default: default:
return false return false
@@ -3870,7 +3876,7 @@ func buildNodeWithBatchData(dbNode sqlc.GraphNode,
// Use preloaded extra fields. // Use preloaded extra fields.
if extraFields, exists := batchData.extraFields[dbNode.ID]; exists { if extraFields, exists := batchData.extraFields[dbNode.ID]; exists {
if v == lnwire.GossipVersion1 { if v == gossipV1 {
records := lnwire.CustomRecords(extraFields) records := lnwire.CustomRecords(extraFields)
recs, err := records.Serialize() recs, err := records.Serialize()
if err != nil { if err != nil {
@@ -3963,7 +3969,7 @@ func upsertNodeAncillaryData(ctx context.Context, db SQLQueries,
// Convert the flat extra opaque data into a map of TLV types to // Convert the flat extra opaque data into a map of TLV types to
// values. // values.
extra := node.ExtraSignedFields extra := node.ExtraSignedFields
if node.Version == lnwire.GossipVersion1 { if node.Version == gossipV1 {
extra, err = marshalExtraOpaqueData(node.ExtraOpaqueData) extra, err = marshalExtraOpaqueData(node.ExtraOpaqueData)
if err != nil { if err != nil {
return fmt.Errorf("unable to marshal extra opaque "+ return fmt.Errorf("unable to marshal extra opaque "+
@@ -4002,10 +4008,10 @@ func populateNodeParams(node *models.Node,
}) })
switch node.Version { switch node.Version {
case lnwire.GossipVersion1: case gossipV1:
lastUpdate = sqldb.SQLInt64(node.LastUpdate.Unix()) lastUpdate = sqldb.SQLInt64(node.LastUpdate.Unix())
case lnwire.GossipVersion2: case gossipV2:
lastBlockHeight = sqldb.SQLInt64(int64(node.LastBlockHeight)) lastBlockHeight = sqldb.SQLInt64(int64(node.LastBlockHeight))
default: default:
@@ -4582,7 +4588,7 @@ func insertChannel(ctx context.Context, db SQLQueries,
// Finally, insert any extra TLV fields in the channel announcement. // Finally, insert any extra TLV fields in the channel announcement.
extra := edge.ExtraSignedFields extra := edge.ExtraSignedFields
if v == lnwire.GossipVersion1 { if v == gossipV1 {
extra, err = marshalExtraOpaqueData(edge.ExtraOpaqueData) extra, err = marshalExtraOpaqueData(edge.ExtraOpaqueData)
if err != nil { if err != nil {
return fmt.Errorf("unable to marshal extra opaque "+ return fmt.Errorf("unable to marshal extra opaque "+
@@ -4728,7 +4734,7 @@ func buildEdgeInfoWithBatchData(chain chainhash.Hash,
// Build the appropriate channel based on version. // Build the appropriate channel based on version.
var channel *models.ChannelEdgeInfo var channel *models.ChannelEdgeInfo
switch v { switch v {
case lnwire.GossipVersion1: case gossipV1:
// For v1, serialize extras into ExtraOpaqueData. // For v1, serialize extras into ExtraOpaqueData.
recs, err := lnwire.CustomRecords(extras).Serialize() recs, err := lnwire.CustomRecords(extras).Serialize()
if err != nil { if err != nil {
@@ -4777,7 +4783,7 @@ func buildEdgeInfoWithBatchData(chain chainhash.Hash,
) )
} }
case lnwire.GossipVersion2: case gossipV2:
v2Fields := &models.ChannelV2Fields{ v2Fields := &models.ChannelV2Fields{
ExtraSignedFields: extras, ExtraSignedFields: extras,
} }
@@ -4879,14 +4885,14 @@ func getAndBuildChanPolicies(ctx context.Context, cfg *sqldb.QueryConfig,
// TODO(elle): update to support v2 policies. // TODO(elle): update to support v2 policies.
if dbPol1 != nil && if dbPol1 != nil &&
lnwire.GossipVersion(dbPol1.Version) != lnwire.GossipVersion1 { lnwire.GossipVersion(dbPol1.Version) != gossipV1 {
return nil, nil, fmt.Errorf("unsupported policy1 version: %d", return nil, nil, fmt.Errorf("unsupported policy1 version: %d",
dbPol1.Version) dbPol1.Version)
} }
if dbPol2 != nil && if dbPol2 != nil &&
lnwire.GossipVersion(dbPol2.Version) != lnwire.GossipVersion1 { lnwire.GossipVersion(dbPol2.Version) != gossipV1 {
return nil, nil, fmt.Errorf("unsupported policy2 version: %d", return nil, nil, fmt.Errorf("unsupported policy2 version: %d",
dbPol2.Version) dbPol2.Version)
@@ -4991,7 +4997,7 @@ func buildChanPolicy(isNode1 bool, dbPolicy sqlc.GraphChannelPolicy,
InboundFee: inboundFee, InboundFee: inboundFee,
} }
if p.Version == lnwire.GossipVersion1 { if p.Version != gossipV2 {
recs, err := lnwire.CustomRecords(extras).Serialize() recs, err := lnwire.CustomRecords(extras).Serialize()
if err != nil { if err != nil {
return nil, fmt.Errorf("unable to serialize extra "+ return nil, fmt.Errorf("unable to serialize extra "+
@@ -6358,7 +6364,7 @@ func handleZombieMarking(ctx context.Context, db SQLQueries,
if strictZombiePruning { if strictZombiePruning {
// TODO(elle): update for V2 last update times. // TODO(elle): update for V2 last update times.
if v != lnwire.GossipVersion1 { if v != gossipV1 {
return fmt.Errorf("strict zombie pruning only "+ return fmt.Errorf("strict zombie pruning only "+
"supported for gossip v1, got %v", v) "supported for gossip v1, got %v", v)
} }