From eaece306b6c16efe642160f52d5e73a6a687d976 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Tue, 29 Sep 2020 11:17:23 +0200 Subject: [PATCH] wallet list cli: Print balances/nonces --- cli/wallet.go | 63 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 59 insertions(+), 4 deletions(-) diff --git a/cli/wallet.go b/cli/wallet.go index 27993a1ba3c..0d69673f917 100644 --- a/cli/wallet.go +++ b/cli/wallet.go @@ -9,13 +9,16 @@ import ( "os" "strings" + "github.com/urfave/cli/v2" + "golang.org/x/xerrors" + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/crypto" + types "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/chain/wallet" - "golang.org/x/xerrors" - - "github.com/urfave/cli/v2" + "github.com/filecoin-project/lotus/lib/tablewriter" ) var walletCmd = &cli.Command{ @@ -66,6 +69,13 @@ var walletNew = &cli.Command{ var walletList = &cli.Command{ Name: "list", Usage: "List wallet address", + Flags: []cli.Flag{ + &cli.BoolFlag{ + Name: "addr-only", + Usage: "Only print addresses", + Aliases: []string{"a"}, + }, + }, Action: func(cctx *cli.Context) error { api, closer, err := GetFullNodeAPI(cctx) if err != nil { @@ -79,9 +89,54 @@ var walletList = &cli.Command{ return err } + def, err := api.WalletDefaultAddress(ctx) + if err != nil { + return err + } + + tw := tablewriter.New( + tablewriter.Col("Address"), + tablewriter.Col("Balance"), + tablewriter.Col("Nonce"), + tablewriter.Col("Default"), + tablewriter.NewLineCol("Error")) + for _, addr := range addrs { - fmt.Println(addr.String()) + if cctx.Bool("addr-only") { + fmt.Println(addr.String()) + } else { + a, err := api.StateGetActor(ctx, addr, types.EmptyTSK) + if err != nil { + if !strings.Contains(err.Error(), "actor not found") { + tw.Write(map[string]interface{}{ + "Address": addr, + "Error": err, + }) + continue + } + + a = &types.Actor{ + Balance: big.Zero(), + } + } + + row := map[string]interface{}{ + "Address": addr, + "Balance": types.FIL(a.Balance), + "Nonce": a.Nonce, + } + if addr == def { + row["Default"] = "X" + } + + tw.Write(row) + } } + + if !cctx.Bool("addr-only") { + return tw.Flush(os.Stdout) + } + return nil }, }