|
|
@ -4,6 +4,9 @@ import (
|
|
|
|
"bytes"
|
|
|
|
"bytes"
|
|
|
|
"fmt"
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"github.com/btcsuite/btcd/btcutil/hdkeychain"
|
|
|
|
|
|
|
|
"github.com/btcsuite/btcd/chaincfg"
|
|
|
|
|
|
|
|
"github.com/lightninglabs/chantools/dump"
|
|
|
|
"github.com/lightningnetwork/lnd/chanbackup"
|
|
|
|
"github.com/lightningnetwork/lnd/chanbackup"
|
|
|
|
"github.com/lightningnetwork/lnd/channeldb"
|
|
|
|
"github.com/lightningnetwork/lnd/channeldb"
|
|
|
|
"github.com/lightningnetwork/lnd/keychain"
|
|
|
|
"github.com/lightningnetwork/lnd/keychain"
|
|
|
@ -35,3 +38,32 @@ func CreateChannelBackup(db *channeldb.DB, multiFile *chanbackup.MultiFile,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ExtractChannel extracts a single channel from the given backup file and
|
|
|
|
|
|
|
|
// returns it as a dump.BackupSingle struct.
|
|
|
|
|
|
|
|
func ExtractChannel(extendedKey *hdkeychain.ExtendedKey,
|
|
|
|
|
|
|
|
chainParams *chaincfg.Params, multiFilePath,
|
|
|
|
|
|
|
|
channelPoint string) (*dump.BackupSingle, error) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
multiFile := chanbackup.NewMultiFile(multiFilePath)
|
|
|
|
|
|
|
|
keyRing := &HDKeyRing{
|
|
|
|
|
|
|
|
ExtendedKey: extendedKey,
|
|
|
|
|
|
|
|
ChainParams: chainParams,
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
multi, err := multiFile.ExtractMulti(keyRing)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
return nil, fmt.Errorf("could not extract multi file: %w", err)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
channels := dump.BackupDump(multi, chainParams)
|
|
|
|
|
|
|
|
for _, channel := range channels {
|
|
|
|
|
|
|
|
channel := channel
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if channel.FundingOutpoint == channelPoint {
|
|
|
|
|
|
|
|
return &channel, nil
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return nil, fmt.Errorf("channel %s not found in backup", channelPoint)
|
|
|
|
|
|
|
|
}
|
|
|
|