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/btcsuite/btcd/wire"
|
||||||
"github.com/coreos/bbolt"
|
"github.com/coreos/bbolt"
|
||||||
"github.com/go-errors/errors"
|
"github.com/go-errors/errors"
|
||||||
|
"github.com/lightningnetwork/lnd/lnwire"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -616,6 +617,54 @@ func (d *DB) FetchClosedChannel(chanID *wire.OutPoint) (*ChannelCloseSummary, er
|
|||||||
return chanSummary, nil
|
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
|
// MarkChanFullyClosed marks a channel as fully closed within the database. A
|
||||||
// channel should be marked as fully closed if the channel was initially
|
// channel should be marked as fully closed if the channel was initially
|
||||||
// cooperatively closed and it's reached a single confirmation, or after all
|
// cooperatively closed and it's reached a single confirmation, or after all
|
||||||
|
Loading…
Reference in New Issue
Block a user