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  }