From 351aa9819ab082bad294d30d839fd9281b6ad3b0 Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Thu, 25 Aug 2022 22:06:16 +0200 Subject: [PATCH] multi: add new flags and tests --- cmd/chantools/dumpchannels.go | 66 ++++++++++++++++++- .../zombierecovery_makeoffer_test.go | 31 +++++++++ 2 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 cmd/chantools/zombierecovery_makeoffer_test.go diff --git a/cmd/chantools/dumpchannels.go b/cmd/chantools/dumpchannels.go index b36f45c..5bec361 100644 --- a/cmd/chantools/dumpchannels.go +++ b/cmd/chantools/dumpchannels.go @@ -11,8 +11,10 @@ import ( ) type dumpChannelsCommand struct { - ChannelDB string - Closed bool + ChannelDB string + Closed bool + Pending bool + WaitingClose bool cmd *cobra.Command } @@ -37,6 +39,14 @@ given lnd channel.db gile in a human readable format.`, &cc.Closed, "closed", false, "dump closed channels instead of "+ "open", ) + cc.cmd.Flags().BoolVar( + &cc.Pending, "pending", false, "dump pending channels instead "+ + "of open", + ) + cc.cmd.Flags().BoolVar( + &cc.WaitingClose, "waiting_close", false, "dump waiting close "+ + "channels instead of open", + ) return cc.cmd } @@ -52,9 +62,23 @@ func (c *dumpChannelsCommand) Execute(_ *cobra.Command, _ []string) error { } defer func() { _ = db.Close() }() + if (c.Closed && c.Pending) || (c.Closed && c.WaitingClose) || + (c.Pending && c.WaitingClose) || + (c.Closed && c.Pending && c.WaitingClose) { + + return fmt.Errorf("can only specify one flag at a time") + } + if c.Closed { return dumpClosedChannelInfo(db.ChannelStateDB()) } + if c.Pending { + return dumpPendingChannelInfo(db.ChannelStateDB()) + } + if c.WaitingClose { + return dumpWaitingCloseChannelInfo(db.ChannelStateDB()) + } + return dumpOpenChannelInfo(db.ChannelStateDB()) } @@ -95,3 +119,41 @@ func dumpClosedChannelInfo(chanDb *channeldb.ChannelStateDB) error { return nil } + +func dumpPendingChannelInfo(chanDb *channeldb.ChannelStateDB) error { + channels, err := chanDb.FetchPendingChannels() + if err != nil { + return err + } + + dumpChannels, err := dump.OpenChannelDump(channels, chainParams) + if err != nil { + return fmt.Errorf("error converting to dump format: %w", err) + } + + spew.Dump(dumpChannels) + + // For the tests, also log as trace level which is disabled by default. + log.Tracef(spew.Sdump(dumpChannels)) + + return nil +} + +func dumpWaitingCloseChannelInfo(chanDb *channeldb.ChannelStateDB) error { + channels, err := chanDb.FetchWaitingCloseChannels() + if err != nil { + return err + } + + dumpChannels, err := dump.OpenChannelDump(channels, chainParams) + if err != nil { + return fmt.Errorf("error converting to dump format: %w", err) + } + + spew.Dump(dumpChannels) + + // For the tests, also log as trace level which is disabled by default. + log.Tracef(spew.Sdump(dumpChannels)) + + return nil +} diff --git a/cmd/chantools/zombierecovery_makeoffer_test.go b/cmd/chantools/zombierecovery_makeoffer_test.go new file mode 100644 index 0000000..6a536d9 --- /dev/null +++ b/cmd/chantools/zombierecovery_makeoffer_test.go @@ -0,0 +1,31 @@ +package main + +import ( + "encoding/hex" + "testing" + + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/chaincfg" + "github.com/stretchr/testify/require" +) + +var ( + key1Bytes, _ = hex.DecodeString( + "0201943d78d61c8ad50ba57164830f536c156d8d89d979448bef3e67f564" + + "ea0ab6", + ) + key1, _ = btcec.ParsePubKey(key1Bytes) + key2Bytes, _ = hex.DecodeString( + "038b88de18064024e9da4dfc9c804283b3077a265dcd73ad3615b50badcb" + + "debd5b", + ) + key2, _ = btcec.ParsePubKey(key2Bytes) + addr = "bc1qp5jnhnavt32fjwhnf5ttpvvym7e0syp79q5l9skz545q62d8u2uq05" + + "ul63" +) + +func TestMatchScript(t *testing.T) { + ok, _, err := matchScript(addr, key1, key2, &chaincfg.MainNetParams) + require.NoError(t, err) + require.True(t, ok) +}