github.com/decred/dcrlnd@v0.7.6/channeldb/graph_extended.go (about) 1 package channeldb 2 3 import ( 4 "github.com/decred/dcrlnd/kvdb" 5 ) 6 7 var ( 8 // knownSpentBucket is the key of a top-level bucket that tracks 9 // channels that are known to be spent by their short channel id. 10 knownSpentBucket = []byte("channel-known-spent") 11 ) 12 13 // MarkKnownSpent marks a channel as known to having been spent (i.e. closed) 14 // on-chain. 15 func (c *ChannelGraph) MarkKnownSpent(channelID uint64) error { 16 return kvdb.Update(c.db, func(tx kvdb.RwTx) error { 17 index, err := tx.CreateTopLevelBucket(knownSpentBucket) 18 if err != nil { 19 return err 20 } 21 var k [8]byte 22 var v [1]byte = [1]byte{0x00} 23 byteOrder.PutUint64(k[:], channelID) 24 return index.Put(k[:], v[:]) 25 }, func() {}) 26 } 27 28 // IsKnownSpent returns if the channel is known to be spent on-chain. 29 func (c *ChannelGraph) IsKnownSpent(channelID uint64) (bool, error) { 30 var knownSpent bool 31 err := kvdb.View(c.db, func(tx kvdb.RTx) error { 32 index := tx.ReadBucket(knownSpentBucket) 33 if index == nil { 34 return nil 35 } 36 37 var k [8]byte 38 byteOrder.PutUint64(k[:], channelID) 39 v := index.Get(k[:]) 40 knownSpent = len(v) > 0 && v[0] == 0x00 41 return nil 42 }, func() { knownSpent = false }) 43 44 return knownSpent, err 45 }