mirror of https://github.com/guggero/chantools
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
2.6 KiB
Go
95 lines
2.6 KiB
Go
4 years ago
|
package main
|
||
4 years ago
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"encoding/hex"
|
||
4 years ago
|
"fmt"
|
||
|
"path"
|
||
4 years ago
|
|
||
|
"github.com/davecgh/go-spew/spew"
|
||
4 years ago
|
"github.com/guggero/chantools/dump"
|
||
4 years ago
|
"github.com/lightningnetwork/lnd/channeldb"
|
||
|
"github.com/lightningnetwork/lnd/input"
|
||
|
)
|
||
|
|
||
4 years ago
|
type dumpChannelsCommand struct {
|
||
|
ChannelDB string `long:"channeldb" description:"The lnd channel.db file to dump the channels from."`
|
||
|
}
|
||
|
|
||
|
func (c *dumpChannelsCommand) Execute(_ []string) error {
|
||
|
// Check that we have a channel DB.
|
||
|
if c.ChannelDB == "" {
|
||
|
return fmt.Errorf("channel DB is required")
|
||
|
}
|
||
|
db, err := channeldb.Open(path.Dir(c.ChannelDB))
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("error opening rescue DB: %v", err)
|
||
|
}
|
||
|
return dumpChannelInfo(db)
|
||
|
}
|
||
|
|
||
4 years ago
|
func dumpChannelInfo(chanDb *channeldb.DB) error {
|
||
|
channels, err := chanDb.FetchAllChannels()
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
4 years ago
|
dumpChannels := make([]dump.OpenChannel, len(channels))
|
||
4 years ago
|
for idx, channel := range channels {
|
||
|
var buf bytes.Buffer
|
||
4 years ago
|
if channel.FundingTxn != nil {
|
||
|
err = channel.FundingTxn.Serialize(&buf)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
4 years ago
|
}
|
||
|
revPreimage, err := channel.RevocationProducer.AtIndex(
|
||
|
channel.LocalCommitment.CommitHeight,
|
||
|
)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
perCommitPoint := input.ComputeCommitmentPoint(revPreimage[:])
|
||
|
|
||
4 years ago
|
dumpChannels[idx] = dump.OpenChannel{
|
||
4 years ago
|
ChanType: channel.ChanType,
|
||
|
ChainHash: channel.ChainHash,
|
||
|
FundingOutpoint: channel.FundingOutpoint.String(),
|
||
|
ShortChannelID: channel.ShortChannelID,
|
||
|
IsPending: channel.IsPending,
|
||
|
IsInitiator: channel.IsInitiator,
|
||
|
ChanStatus: channel.ChanStatus(),
|
||
|
FundingBroadcastHeight: channel.FundingBroadcastHeight,
|
||
|
NumConfsRequired: channel.NumConfsRequired,
|
||
|
ChannelFlags: channel.ChannelFlags,
|
||
4 years ago
|
IdentityPub: dump.PubKeyToString(
|
||
4 years ago
|
channel.IdentityPub,
|
||
|
),
|
||
|
Capacity: channel.Capacity,
|
||
|
TotalMSatSent: channel.TotalMSatSent,
|
||
|
TotalMSatReceived: channel.TotalMSatReceived,
|
||
4 years ago
|
PerCommitPoint: dump.PubKeyToString(perCommitPoint),
|
||
|
LocalChanCfg: dump.ToChannelConfig(
|
||
|
channel.LocalChanCfg,
|
||
|
),
|
||
|
RemoteChanCfg: dump.ToChannelConfig(
|
||
|
channel.RemoteChanCfg,
|
||
|
),
|
||
|
LocalCommitment: channel.LocalCommitment,
|
||
|
RemoteCommitment: channel.RemoteCommitment,
|
||
|
RemoteCurrentRevocation: dump.PubKeyToString(
|
||
4 years ago
|
channel.RemoteCurrentRevocation,
|
||
|
),
|
||
4 years ago
|
RemoteNextRevocation: dump.PubKeyToString(
|
||
4 years ago
|
channel.RemoteNextRevocation,
|
||
|
),
|
||
|
FundingTxn: hex.EncodeToString(buf.Bytes()),
|
||
|
LocalShutdownScript: channel.LocalShutdownScript,
|
||
|
RemoteShutdownScript: channel.RemoteShutdownScript,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
spew.Dump(dumpChannels)
|
||
|
return nil
|
||
|
}
|