From 6ec2ad11f45cb288bb8514202deb3e6da8d618ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20B=C3=B6ckli?= Date: Fri, 23 Aug 2024 08:47:26 +0200 Subject: [PATCH 1/2] Spread table across multiple tables of 10 columns each and render with style --- cmd/broadcaster-cli/app/keyset/utxos/table.go | 8 ++--- cmd/broadcaster-cli/app/keyset/utxos/utxos.go | 33 ++++++++++++++++--- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/cmd/broadcaster-cli/app/keyset/utxos/table.go b/cmd/broadcaster-cli/app/keyset/utxos/table.go index 33b4e0b43..710ea3b13 100644 --- a/cmd/broadcaster-cli/app/keyset/utxos/table.go +++ b/cmd/broadcaster-cli/app/keyset/utxos/table.go @@ -3,19 +3,19 @@ package utxos import ( "context" "errors" - "github.com/bitcoin-sv/arc/cmd/broadcaster-cli/helper" "log/slog" "sort" "strconv" "time" + "github.com/jedib0t/go-pretty/v6/table" + + "github.com/bitcoin-sv/arc/cmd/broadcaster-cli/helper" "github.com/bitcoin-sv/arc/internal/broadcaster" "github.com/bitcoin-sv/arc/pkg/keyset" - "github.com/jedib0t/go-pretty/v6/table" ) -func getUtxosTable(ctx context.Context, logger *slog.Logger, keySets map[string]*keyset.KeySet, isTestnet bool, wocClient broadcaster.UtxoClient, maxRows int) table.Writer { - t := table.NewWriter() +func getUtxosTable(ctx context.Context, logger *slog.Logger, t table.Writer, keySets map[string]*keyset.KeySet, isTestnet bool, wocClient broadcaster.UtxoClient, maxRows int) table.Writer { keyTotalOutputs := make([]int, len(keySets)) keyHeaderRow := make([]interface{}, 0) headerRow := make([]interface{}, 0) diff --git a/cmd/broadcaster-cli/app/keyset/utxos/utxos.go b/cmd/broadcaster-cli/app/keyset/utxos/utxos.go index 0328ae077..4548fed6b 100644 --- a/cmd/broadcaster-cli/app/keyset/utxos/utxos.go +++ b/cmd/broadcaster-cli/app/keyset/utxos/utxos.go @@ -7,10 +7,13 @@ import ( "os" "os/signal" - "github.com/bitcoin-sv/arc/cmd/broadcaster-cli/helper" - "github.com/bitcoin-sv/arc/internal/woc_client" + "github.com/jedib0t/go-pretty/v6/table" "github.com/spf13/cobra" "github.com/spf13/viper" + + "github.com/bitcoin-sv/arc/cmd/broadcaster-cli/helper" + "github.com/bitcoin-sv/arc/internal/woc_client" + "github.com/bitcoin-sv/arc/pkg/keyset" ) var Cmd = &cobra.Command{ @@ -46,8 +49,30 @@ var Cmd = &cobra.Command{ cancel() }() - t := getUtxosTable(ctx, logger, keySets, isTestnet, wocClient, maxRows) - fmt.Println(t.Render()) + names := helper.GetOrderedKeys(keySets) + counter := 0 + var t table.Writer + ksRow := map[string]*keyset.KeySet{} + for _, name := range names { + ksRow[name] = keySets[name] + if counter >= 9 { + t = table.NewWriter() + t := getUtxosTable(ctx, logger, t, ksRow, isTestnet, wocClient, maxRows) + t.SetStyle(table.StyleColoredBright) + fmt.Println(t.Render()) + fmt.Println() + ksRow = map[string]*keyset.KeySet{} + counter = 0 + continue + } + counter++ + } + if len(ksRow) > 0 { + t = table.NewWriter() + t := getUtxosTable(ctx, logger, t, ksRow, isTestnet, wocClient, maxRows) + t.SetStyle(table.StyleColoredBright) + fmt.Println(t.Render()) + } return nil }, From d14c77be0cd293c8d10857e4008a050900a8c671 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20B=C3=B6ckli?= Date: Fri, 23 Aug 2024 09:45:44 +0200 Subject: [PATCH 2/2] Display cross mark for 1 sat outputs and don't count to total --- cmd/broadcaster-cli/app/keyset/utxos/table.go | 13 ++++++++++++- go.mod | 1 + go.sum | 2 ++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/cmd/broadcaster-cli/app/keyset/utxos/table.go b/cmd/broadcaster-cli/app/keyset/utxos/table.go index 710ea3b13..cbab5a0ca 100644 --- a/cmd/broadcaster-cli/app/keyset/utxos/table.go +++ b/cmd/broadcaster-cli/app/keyset/utxos/table.go @@ -8,6 +8,7 @@ import ( "strconv" "time" + "github.com/enescakir/emoji" "github.com/jedib0t/go-pretty/v6/table" "github.com/bitcoin-sv/arc/cmd/broadcaster-cli/helper" @@ -63,12 +64,22 @@ func getUtxosTable(ctx context.Context, logger *slog.Logger, t table.Writer, key totalOutputs := 0 for _, satoshi := range satoshiSlice { + satString := strconv.FormatUint(satoshi, 10) + + if satoshi == 1 { + satString = satString + " " + emoji.CrossMark.String() + } columns[counter] = append(columns[counter], row{ - satoshis: strconv.FormatUint(satoshi, 10), + satoshis: satString, outputs: strconv.Itoa(outputsMap[satoshi]), }) + // Do not count 1-sat outputs, as they can't be used as utxos for transactions + if satoshi == 1 { + continue + } + totalOutputs += outputsMap[satoshi] } diff --git a/go.mod b/go.mod index 580050fa6..36d0165f9 100644 --- a/go.mod +++ b/go.mod @@ -64,6 +64,7 @@ require ( github.com/docker/go-connections v0.5.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/emicklei/go-restful/v3 v3.12.1 // indirect + github.com/enescakir/emoji v1.0.0 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/go-faster/city v1.0.1 // indirect github.com/go-faster/errors v0.6.1 // indirect diff --git a/go.sum b/go.sum index da414072e..ffe9f0946 100644 --- a/go.sum +++ b/go.sum @@ -61,6 +61,8 @@ github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4 github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/emicklei/go-restful/v3 v3.12.1 h1:PJMDIM/ak7btuL8Ex0iYET9hxM3CI2sjZtzpL63nKAU= github.com/emicklei/go-restful/v3 v3.12.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/enescakir/emoji v1.0.0 h1:W+HsNql8swfCQFtioDGDHCHri8nudlK1n5p2rHCJoog= +github.com/enescakir/emoji v1.0.0/go.mod h1:Bt1EKuLnKDTYpLALApstIkAjdDrS/8IAgTkKp+WKFD0= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=