Skip to content

Commit a95f475

Browse files
committed
Add closed channels to dumpchannels command
1 parent 3a8d95c commit a95f475

File tree

8 files changed

+95
-16
lines changed

8 files changed

+95
-16
lines changed

cmd/chantools/chanbackup.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ func (c *chanBackupCommand) Execute(_ []string) error {
4646
return fmt.Errorf("channel DB is required")
4747
}
4848
db, err := channeldb.Open(
49-
path.Dir(c.ChannelDB), channeldb.OptionSetSyncFreelist(true),
49+
path.Dir(c.ChannelDB), path.Base(c.ChannelDB),
50+
channeldb.OptionSetSyncFreelist(true),
5051
channeldb.OptionReadOnly(true),
5152
)
5253
if err != nil {

cmd/chantools/dumpchannels.go

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111

1212
type dumpChannelsCommand struct {
1313
ChannelDB string `long:"channeldb" description:"The lnd channel.db file to dump the channels from."`
14+
Closed bool `long:"closed" description:"Dump all closed channels instead of all open channels."`
1415
}
1516

1617
func (c *dumpChannelsCommand) Execute(_ []string) error {
@@ -21,26 +22,46 @@ func (c *dumpChannelsCommand) Execute(_ []string) error {
2122
return fmt.Errorf("channel DB is required")
2223
}
2324
db, err := channeldb.Open(
24-
path.Dir(c.ChannelDB), channeldb.OptionSetSyncFreelist(true),
25+
path.Dir(c.ChannelDB), path.Base(c.ChannelDB),
26+
channeldb.OptionSetSyncFreelist(true),
2527
channeldb.OptionReadOnly(true),
2628
)
2729
if err != nil {
2830
return fmt.Errorf("error opening rescue DB: %v", err)
2931
}
30-
return dumpChannelInfo(db)
32+
33+
if c.Closed {
34+
return dumpClosedChannelInfo(db)
35+
}
36+
return dumpOpenChannelInfo(db)
3137
}
3238

33-
func dumpChannelInfo(chanDb *channeldb.DB) error {
39+
func dumpOpenChannelInfo(chanDb *channeldb.DB) error {
3440
channels, err := chanDb.FetchAllChannels()
3541
if err != nil {
3642
return err
3743
}
3844

39-
dumpChannels, err := dump.ChannelDump(channels, chainParams)
45+
dumpChannels, err := dump.OpenChannelDump(channels, chainParams)
4046
if err != nil {
4147
return fmt.Errorf("error converting to dump format: %v", err)
4248
}
4349

4450
spew.Dump(dumpChannels)
4551
return nil
4652
}
53+
54+
func dumpClosedChannelInfo(chanDb *channeldb.DB) error {
55+
channels, err := chanDb.FetchClosedChannels(false)
56+
if err != nil {
57+
return err
58+
}
59+
60+
dumpChannels, err := dump.ClosedChannelDump(channels, chainParams)
61+
if err != nil {
62+
return fmt.Errorf("error converting to dump format: %v", err)
63+
}
64+
65+
spew.Dump(dumpChannels)
66+
return nil
67+
}

cmd/chantools/forceclose.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ func (c *forceCloseCommand) Execute(_ []string) error {
5050
return fmt.Errorf("rescue DB is required")
5151
}
5252
db, err := channeldb.Open(
53-
path.Dir(c.ChannelDB), channeldb.OptionSetSyncFreelist(true),
53+
path.Dir(c.ChannelDB), path.Base(c.ChannelDB),
54+
channeldb.OptionSetSyncFreelist(true),
5455
channeldb.OptionReadOnly(true),
5556
)
5657
if err != nil {

cmd/chantools/main.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import (
2323

2424
const (
2525
defaultAPIURL = "https://blockstream.info/api"
26-
version = "0.2.0"
26+
version = "0.3.0"
2727
)
2828

2929
var (
@@ -170,7 +170,7 @@ func parseInputType(cfg *config) ([]*dataformat.SummaryEntry, error) {
170170

171171
case cfg.FromChannelDB != "":
172172
db, err := channeldb.Open(
173-
path.Dir(cfg.FromChannelDB),
173+
path.Dir(cfg.FromChannelDB), path.Base(cfg.FromChannelDB),
174174
channeldb.OptionSetSyncFreelist(true),
175175
channeldb.OptionReadOnly(true),
176176
)

cmd/chantools/rescueclosed.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ func (c *rescueClosedCommand) Execute(_ []string) error {
6161
return fmt.Errorf("rescue DB is required")
6262
}
6363
db, err := channeldb.Open(
64-
path.Dir(c.ChannelDB), channeldb.OptionSetSyncFreelist(true),
64+
path.Dir(c.ChannelDB), path.Base(c.ChannelDB),
65+
channeldb.OptionSetSyncFreelist(true),
6566
channeldb.OptionReadOnly(true),
6667
)
6768
if err != nil {

dump/dump.go

Lines changed: 59 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,26 @@ type OpenChannel struct {
7373
RemoteShutdownScript lnwire.DeliveryAddress
7474
}
7575

76+
// ClosedChannel is the information we want to dump from a closed channel in
77+
// lnd's channel DB. See `channeldb.ChannelCloseSummary` for information about
78+
// the fields.
79+
type ClosedChannel struct {
80+
ChanPoint string
81+
ShortChanID lnwire.ShortChannelID
82+
ChainHash chainhash.Hash
83+
ClosingTXID string
84+
RemotePub string
85+
Capacity btcutil.Amount
86+
CloseHeight uint32
87+
SettledBalance btcutil.Amount
88+
TimeLockedBalance btcutil.Amount
89+
CloseType string
90+
IsPending bool
91+
RemoteCurrentRevocation string
92+
RemoteNextRevocation string
93+
LocalChanConfig ChannelConfig
94+
}
95+
7696
// ChannelConfig is the information we want to dump from a channel
7797
// configuration. See `channeldb.ChannelConfig` for more information about the
7898
// fields.
@@ -92,10 +112,10 @@ type KeyDescriptor struct {
92112
PubKey string
93113
}
94114

95-
// ChannelDump converts the channels in the given channel DB into a dumpable
96-
// format.
97-
func ChannelDump(channels []*channeldb.OpenChannel, params *chaincfg.Params) (
98-
[]OpenChannel, error) {
115+
// OpenChannelDump converts the open channels in the given channel DB into a
116+
// dumpable format.
117+
func OpenChannelDump(channels []*channeldb.OpenChannel,
118+
params *chaincfg.Params) ([]OpenChannel, error) {
99119

100120
dumpChannels := make([]OpenChannel, len(channels))
101121
for idx, channel := range channels {
@@ -154,6 +174,41 @@ func ChannelDump(channels []*channeldb.OpenChannel, params *chaincfg.Params) (
154174
return dumpChannels, nil
155175
}
156176

177+
// ClosedChannelDump converts the closed channels in the given channel DB into a
178+
// dumpable format.
179+
func ClosedChannelDump(channels []*channeldb.ChannelCloseSummary,
180+
params *chaincfg.Params) ([]ClosedChannel, error) {
181+
182+
dumpChannels := make([]ClosedChannel, len(channels))
183+
for idx, channel := range channels {
184+
dumpChannels[idx] = ClosedChannel{
185+
ChanPoint: channel.ChanPoint.String(),
186+
ShortChanID: channel.ShortChanID,
187+
ChainHash: channel.ChainHash,
188+
ClosingTXID: channel.ClosingTXID.String(),
189+
RemotePub: PubKeyToString(channel.RemotePub),
190+
Capacity: channel.Capacity,
191+
CloseHeight: channel.CloseHeight,
192+
SettledBalance: channel.SettledBalance,
193+
TimeLockedBalance: channel.TimeLockedBalance,
194+
CloseType: fmt.Sprintf(
195+
"%d", channel.CloseType,
196+
),
197+
IsPending: channel.IsPending,
198+
RemoteCurrentRevocation: PubKeyToString(
199+
channel.RemoteCurrentRevocation,
200+
),
201+
RemoteNextRevocation: PubKeyToString(
202+
channel.RemoteNextRevocation,
203+
),
204+
LocalChanConfig: ToChannelConfig(
205+
params, channel.LocalChanConfig,
206+
),
207+
}
208+
}
209+
return dumpChannels, nil
210+
}
211+
157212
// BackupDump converts the given multi backup into a dumpable format.
158213
func BackupDump(multi *chanbackup.Multi, params *chaincfg.Params) []BackupSingle {
159214

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@ require (
2121
gopkg.in/yaml.v2 v2.2.3 // indirect
2222
)
2323

24-
replace github.com/lightningnetwork/lnd => github.com/guggero/lnd v0.9.0-beta-rc1.0.20200307101759-2650bff06031
24+
replace github.com/lightningnetwork/lnd => github.com/guggero/lnd v0.9.0-beta-rc4.0.20200826102054-8c9171307182
2525

2626
go 1.13

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,8 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92Bcuy
9797
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
9898
github.com/grpc-ecosystem/grpc-gateway v1.8.6 h1:XvND7+MPP7Jp+JpqSZ7naSl5nVZf6k0LbL1V3EKh0zc=
9999
github.com/grpc-ecosystem/grpc-gateway v1.8.6/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
100-
github.com/guggero/lnd v0.9.0-beta-rc1.0.20200307101759-2650bff06031 h1:G7UpjWLXdmFi1gYVidq6c/EJaH/eX0HixAOVxxAT/K0=
101-
github.com/guggero/lnd v0.9.0-beta-rc1.0.20200307101759-2650bff06031/go.mod h1:bMBXSbO0hwk9HmZSbI04SDTHxTK/iEOvzfzQkNSIJmU=
100+
github.com/guggero/lnd v0.9.0-beta-rc4.0.20200826102054-8c9171307182 h1:VMQ3vCjVGhT1k1agfGMEDbtqtw6xpXGfgO3xaQ/TyLM=
101+
github.com/guggero/lnd v0.9.0-beta-rc4.0.20200826102054-8c9171307182/go.mod h1:bMBXSbO0hwk9HmZSbI04SDTHxTK/iEOvzfzQkNSIJmU=
102102
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
103103
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
104104
github.com/jackpal/gateway v1.0.5 h1:qzXWUJfuMdlLMtt0a3Dgt+xkWQiA5itDEITVJtuSwMc=

0 commit comments

Comments
 (0)