Skip to content

Commit 3044d9f

Browse files
committed
lnd: add ExtractChannel function
1 parent f9343e5 commit 3044d9f

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

lnd/chanbackup.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ import (
44
"bytes"
55
"fmt"
66

7+
"github.com/btcsuite/btcd/btcutil/hdkeychain"
8+
"github.com/btcsuite/btcd/chaincfg"
9+
"github.com/lightninglabs/chantools/dump"
710
"github.com/lightningnetwork/lnd/chanbackup"
811
"github.com/lightningnetwork/lnd/channeldb"
912
"github.com/lightningnetwork/lnd/keychain"
@@ -35,3 +38,32 @@ func CreateChannelBackup(db *channeldb.DB, multiFile *chanbackup.MultiFile,
3538
}
3639
return nil
3740
}
41+
42+
// ExtractChannel extracts a single channel from the given backup file and
43+
// returns it as a dump.BackupSingle struct.
44+
func ExtractChannel(extendedKey *hdkeychain.ExtendedKey,
45+
chainParams *chaincfg.Params, multiFilePath,
46+
channelPoint string) (*dump.BackupSingle, error) {
47+
48+
multiFile := chanbackup.NewMultiFile(multiFilePath)
49+
keyRing := &HDKeyRing{
50+
ExtendedKey: extendedKey,
51+
ChainParams: chainParams,
52+
}
53+
54+
multi, err := multiFile.ExtractMulti(keyRing)
55+
if err != nil {
56+
return nil, fmt.Errorf("could not extract multi file: %w", err)
57+
}
58+
59+
channels := dump.BackupDump(multi, chainParams)
60+
for _, channel := range channels {
61+
channel := channel
62+
63+
if channel.FundingOutpoint == channelPoint {
64+
return &channel, nil
65+
}
66+
}
67+
68+
return nil, fmt.Errorf("channel %s not found in backup", channelPoint)
69+
}

0 commit comments

Comments
 (0)