channeldb/db: define FetchClosedChannelForID
FetchClosedChannelForID is used to find the channel close summary given only a channel ID.
This commit is contained in:
parent
a9f93b2988
commit
45b132a954
@ -12,6 +12,7 @@ import (
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/coreos/bbolt"
|
||||
"github.com/go-errors/errors"
|
||||
"github.com/lightningnetwork/lnd/lnwire"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -616,6 +617,54 @@ func (d *DB) FetchClosedChannel(chanID *wire.OutPoint) (*ChannelCloseSummary, er
|
||||
return chanSummary, nil
|
||||
}
|
||||
|
||||
// FetchClosedChannelForID queries for a channel close summary using the
|
||||
// channel ID of the channel in question.
|
||||
func (d *DB) FetchClosedChannelForID(cid lnwire.ChannelID) (
|
||||
*ChannelCloseSummary, error) {
|
||||
|
||||
var chanSummary *ChannelCloseSummary
|
||||
if err := d.View(func(tx *bolt.Tx) error {
|
||||
closeBucket := tx.Bucket(closedChannelBucket)
|
||||
if closeBucket == nil {
|
||||
return ErrClosedChannelNotFound
|
||||
}
|
||||
|
||||
// The first 30 bytes of the channel ID and outpoint will be
|
||||
// equal.
|
||||
cursor := closeBucket.Cursor()
|
||||
op, c := cursor.Seek(cid[:30])
|
||||
|
||||
// We scan over all possible candidates for this channel ID.
|
||||
for ; op != nil && bytes.Compare(cid[:30], op[:30]) <= 0; op, c = cursor.Next() {
|
||||
var outPoint wire.OutPoint
|
||||
err := readOutpoint(bytes.NewReader(op), &outPoint)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// If the found outpoint does not correspond to this
|
||||
// channel ID, we continue.
|
||||
if !cid.IsChanPoint(&outPoint) {
|
||||
continue
|
||||
}
|
||||
|
||||
// Deserialize the close summary and return.
|
||||
r := bytes.NewReader(c)
|
||||
chanSummary, err = deserializeCloseChannelSummary(r)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
return ErrClosedChannelNotFound
|
||||
}); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return chanSummary, nil
|
||||
}
|
||||
|
||||
// MarkChanFullyClosed marks a channel as fully closed within the database. A
|
||||
// channel should be marked as fully closed if the channel was initially
|
||||
// cooperatively closed and it's reached a single confirmation, or after all
|
||||
|
Loading…
Reference in New Issue
Block a user