@@ -11,8 +11,10 @@ import (
1111)
1212
1313type dumpChannelsCommand struct {
14- ChannelDB string
15- Closed bool
14+ ChannelDB string
15+ Closed bool
16+ Pending bool
17+ WaitingClose bool
1618
1719 cmd * cobra.Command
1820}
@@ -37,6 +39,14 @@ given lnd channel.db gile in a human readable format.`,
3739 & cc .Closed , "closed" , false , "dump closed channels instead of " +
3840 "open" ,
3941 )
42+ cc .cmd .Flags ().BoolVar (
43+ & cc .Pending , "pending" , false , "dump pending channels instead " +
44+ "of open" ,
45+ )
46+ cc .cmd .Flags ().BoolVar (
47+ & cc .WaitingClose , "waiting_close" , false , "dump waiting close " +
48+ "channels instead of open" ,
49+ )
4050
4151 return cc .cmd
4252}
@@ -52,9 +62,23 @@ func (c *dumpChannelsCommand) Execute(_ *cobra.Command, _ []string) error {
5262 }
5363 defer func () { _ = db .Close () }()
5464
65+ if (c .Closed && c .Pending ) || (c .Closed && c .WaitingClose ) ||
66+ (c .Pending && c .WaitingClose ) ||
67+ (c .Closed && c .Pending && c .WaitingClose ) {
68+
69+ return fmt .Errorf ("can only specify one flag at a time" )
70+ }
71+
5572 if c .Closed {
5673 return dumpClosedChannelInfo (db .ChannelStateDB ())
5774 }
75+ if c .Pending {
76+ return dumpPendingChannelInfo (db .ChannelStateDB ())
77+ }
78+ if c .WaitingClose {
79+ return dumpWaitingCloseChannelInfo (db .ChannelStateDB ())
80+ }
81+
5882 return dumpOpenChannelInfo (db .ChannelStateDB ())
5983}
6084
@@ -95,3 +119,41 @@ func dumpClosedChannelInfo(chanDb *channeldb.ChannelStateDB) error {
95119
96120 return nil
97121}
122+
123+ func dumpPendingChannelInfo (chanDb * channeldb.ChannelStateDB ) error {
124+ channels , err := chanDb .FetchPendingChannels ()
125+ if err != nil {
126+ return err
127+ }
128+
129+ dumpChannels , err := dump .OpenChannelDump (channels , chainParams )
130+ if err != nil {
131+ return fmt .Errorf ("error converting to dump format: %w" , err )
132+ }
133+
134+ spew .Dump (dumpChannels )
135+
136+ // For the tests, also log as trace level which is disabled by default.
137+ log .Tracef (spew .Sdump (dumpChannels ))
138+
139+ return nil
140+ }
141+
142+ func dumpWaitingCloseChannelInfo (chanDb * channeldb.ChannelStateDB ) error {
143+ channels , err := chanDb .FetchWaitingCloseChannels ()
144+ if err != nil {
145+ return err
146+ }
147+
148+ dumpChannels , err := dump .OpenChannelDump (channels , chainParams )
149+ if err != nil {
150+ return fmt .Errorf ("error converting to dump format: %w" , err )
151+ }
152+
153+ spew .Dump (dumpChannels )
154+
155+ // For the tests, also log as trace level which is disabled by default.
156+ log .Tracef (spew .Sdump (dumpChannels ))
157+
158+ return nil
159+ }
0 commit comments