Merge pull request #9525 from ellemouton/graph10

graph: Restrict interface to update channel proof instead of entire channel
This commit is contained in:
Oliver Gugger authored and GitHub committed 2025-02-18 11:34:38 -06:00
commit 31418e4b85
3 files changed
+16 -28

No files matched your search

+1 -8
View File
@@ -1441,14 +1441,7 @@ func (b *Builder) ForAllOutgoingChannels(cb func(*models.ChannelEdgeInfo,
func (b *Builder) AddProof(chanID lnwire.ShortChannelID, func (b *Builder) AddProof(chanID lnwire.ShortChannelID,
proof *models.ChannelAuthProof) error { proof *models.ChannelAuthProof) error {
info, _, _, err := b.cfg.Graph.FetchChannelEdgesByID(chanID.ToUint64()) return b.cfg.Graph.AddEdgeProof(chanID, proof)
if err != nil {
return err
}
info.AuthProof = proof
return b.cfg.Graph.UpdateChannelEdge(info)
} }
// IsStaleNode returns true if the graph source has a node announcement for the // IsStaleNode returns true if the graph source has a node announcement for the
+11 -14
View File
@@ -1317,19 +1317,17 @@ func (c *ChannelGraph) HasChannelEdge(
return upd1Time, upd2Time, exists, isZombie, nil return upd1Time, upd2Time, exists, isZombie, nil
} }
// UpdateChannelEdge retrieves and update edge of the graph database. Method // AddEdgeProof sets the proof of an existing edge in the graph database.
// only reserved for updating an edge info after its already been created. func (c *ChannelGraph) AddEdgeProof(chanID lnwire.ShortChannelID,
// In order to maintain this constraints, we return an error in the scenario proof *models.ChannelAuthProof) error {
// that an edge info hasn't yet been created yet, but someone attempts to update
// it.
func (c *ChannelGraph) UpdateChannelEdge(edge *models.ChannelEdgeInfo) error {
// Construct the channel's primary key which is the 8-byte channel ID. // Construct the channel's primary key which is the 8-byte channel ID.
var chanKey [8]byte var chanKey [8]byte
binary.BigEndian.PutUint64(chanKey[:], edge.ChannelID) binary.BigEndian.PutUint64(chanKey[:], chanID.ToUint64())
return kvdb.Update(c.db, func(tx kvdb.RwTx) error { return kvdb.Update(c.db, func(tx kvdb.RwTx) error {
edges := tx.ReadWriteBucket(edgeBucket) edges := tx.ReadWriteBucket(edgeBucket)
if edge == nil { if edges == nil {
return ErrEdgeNotFound return ErrEdgeNotFound
} }
@@ -1338,15 +1336,14 @@ func (c *ChannelGraph) UpdateChannelEdge(edge *models.ChannelEdgeInfo) error {
return ErrEdgeNotFound return ErrEdgeNotFound
} }
if edgeInfo := edgeIndex.Get(chanKey[:]); edgeInfo == nil { edge, err := fetchChanEdgeInfo(edgeIndex, chanKey[:])
return ErrEdgeNotFound if err != nil {
return err
} }
if c.graphCache != nil { edge.AuthProof = proof
c.graphCache.UpdateChannel(edge)
}
return putChanEdgeInfo(edgeIndex, edge, chanKey) return putChanEdgeInfo(edgeIndex, &edge, chanKey)
}, func() {}) }, func() {})
} }
+4 -6
View File
@@ -259,12 +259,10 @@ type DB interface {
*models.ChannelEdgePolicy, *models.ChannelEdgePolicy,
*models.ChannelEdgePolicy) error) error *models.ChannelEdgePolicy) error) error
// UpdateChannelEdge retrieves and update edge of the graph database. // AddEdgeProof sets the proof of an existing edge in the graph
// Method only reserved for updating an edge info after its already been // database.
// created. In order to maintain this constraints, we return an error in AddEdgeProof(chanID lnwire.ShortChannelID,
// the scenario that an edge info hasn't yet been created yet, but proof *models.ChannelAuthProof) error
// someone attempts to update it.
UpdateChannelEdge(edge *models.ChannelEdgeInfo) error
// IsPublicNode is a helper method that determines whether the node with // IsPublicNode is a helper method that determines whether the node with
// the given public key is seen as a public node in the graph from the // the given public key is seen as a public node in the graph from the