From 8f5d78c875b8eca436f7ee2e86e743afee262386 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 20 Dec 2019 01:05:08 -0800 Subject: [PATCH] build+lncli: default to hex encoding for byte slices This commit swaps out golang/protobuf/jsonpb for a custom variant that by default prints byte slices as hex, which is more useful for our setting. Some existing wrapper structs are removed as they can now be printed directly with the new jsonpb. !!! NOTE !!! This commit introduces a breaking change to lncli listinvoices since payment hashes and preimages will now be printed in hex instead of base64. --- cmd/lncli/cmd_build_route.go | 2 +- cmd/lncli/cmd_query_mission_control.go | 30 +------------ cmd/lncli/commands.go | 59 ++++++-------------------- cmd/lncli/invoicesrpc_active.go | 4 +- cmd/lncli/watchtower_active.go | 11 +---- cmd/lncli/wtclient.go | 12 +----- cmd/lncli/wtclient_types.go | 50 ---------------------- go.mod | 1 + go.sum | 2 + 9 files changed, 22 insertions(+), 149 deletions(-) delete mode 100644 cmd/lncli/wtclient_types.go diff --git a/cmd/lncli/cmd_build_route.go b/cmd/lncli/cmd_build_route.go index 64cda08f..685989d4 100644 --- a/cmd/lncli/cmd_build_route.go +++ b/cmd/lncli/cmd_build_route.go @@ -88,7 +88,7 @@ func buildRoute(ctx *cli.Context) error { return err } - printJSON(route) + printRespJSON(route) return nil } diff --git a/cmd/lncli/cmd_query_mission_control.go b/cmd/lncli/cmd_query_mission_control.go index a35c2bb8..6071d0a4 100644 --- a/cmd/lncli/cmd_query_mission_control.go +++ b/cmd/lncli/cmd_query_mission_control.go @@ -4,7 +4,6 @@ package main import ( "context" - "encoding/hex" "github.com/lightningnetwork/lnd/lnrpc/routerrpc" @@ -31,34 +30,7 @@ func queryMissionControl(ctx *cli.Context) error { return err } - type displayPairHistory struct { - NodeFrom, NodeTo string - SuccessTime, FailTime int64 - FailAmtSat, FailAmtMsat int64 - SuccessAmtSat, SuccessAmtMsat int64 - } - - displayResp := struct { - Pairs []displayPairHistory - }{} - - for _, n := range snapshot.Pairs { - displayResp.Pairs = append( - displayResp.Pairs, - displayPairHistory{ - NodeFrom: hex.EncodeToString(n.NodeFrom), - NodeTo: hex.EncodeToString(n.NodeTo), - FailTime: n.History.FailTime, - SuccessTime: n.History.SuccessTime, - FailAmtSat: n.History.FailAmtSat, - FailAmtMsat: n.History.FailAmtMsat, - SuccessAmtSat: n.History.SuccessAmtSat, - SuccessAmtMsat: n.History.SuccessAmtMsat, - }, - ) - } - - printJSON(displayResp) + printRespJSON(snapshot) return nil } diff --git a/cmd/lncli/commands.go b/cmd/lncli/commands.go index 244420c6..8da7931a 100644 --- a/cmd/lncli/commands.go +++ b/cmd/lncli/commands.go @@ -5,7 +5,6 @@ import ( "bytes" "context" "encoding/hex" - "encoding/json" "errors" "fmt" "io" @@ -20,8 +19,9 @@ import ( "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" - "github.com/golang/protobuf/jsonpb" - "github.com/golang/protobuf/proto" + "github.com/lightninglabs/protobuf-hex-display/json" + "github.com/lightninglabs/protobuf-hex-display/jsonpb" + "github.com/lightninglabs/protobuf-hex-display/proto" "github.com/lightningnetwork/lnd/lnrpc" "github.com/lightningnetwork/lnd/lnrpc/routerrpc" "github.com/lightningnetwork/lnd/routing/route" @@ -2427,15 +2427,7 @@ func sendPaymentRequest(ctx *cli.Context, req *lnrpc.SendRequest) error { paymentStream.CloseSend() - printJSON(struct { - E string `json:"payment_error"` - P string `json:"payment_preimage"` - R *lnrpc.Route `json:"payment_route"` - }{ - E: resp.PaymentError, - P: hex.EncodeToString(resp.PaymentPreimage), - R: resp.PaymentRoute, - }) + printRespJSON(resp) // If we get a payment error back, we pass an error // up to main which eventually calls fatal() and returns @@ -2637,15 +2629,7 @@ func sendToRouteRequest(ctx *cli.Context, req *lnrpc.SendToRouteRequest) error { return err } - printJSON(struct { - E string `json:"payment_error"` - P string `json:"payment_preimage"` - R *lnrpc.Route `json:"payment_route"` - }{ - E: resp.PaymentError, - P: hex.EncodeToString(resp.PaymentPreimage), - R: resp.PaymentRoute, - }) + printRespJSON(resp) return nil } @@ -2762,15 +2746,7 @@ func addInvoice(ctx *cli.Context) error { return err } - printJSON(struct { - RHash string `json:"r_hash"` - PayReq string `json:"pay_req"` - AddIndex uint64 `json:"add_index"` - }{ - RHash: hex.EncodeToString(resp.RHash), - PayReq: resp.PaymentRequest, - AddIndex: resp.AddIndex, - }) + printRespJSON(resp) return nil } @@ -3856,14 +3832,11 @@ func exportChanBackup(ctx *cli.Context) error { printJSON(struct { ChanPoint string `json:"chan_point"` - ChanBackup string `json:"chan_backup"` + ChanBackup []byte `json:"chan_backup"` }{ - ChanPoint: chanPoint.String(), - ChanBackup: hex.EncodeToString( - chanBackup.ChanBackup, - ), - }, - ) + ChanPoint: chanPoint.String(), + ChanBackup: chanBackup.ChanBackup, + }) return nil } @@ -3901,16 +3874,8 @@ func exportChanBackup(ctx *cli.Context) error { }.String()) } - printJSON(struct { - ChanPoints []string `json:"chan_points"` - MultiChanBackup string `json:"multi_chan_backup"` - }{ - ChanPoints: chanPoints, - MultiChanBackup: hex.EncodeToString( - chanBackup.MultiChanBackup.MultiChanBackup, - ), - }, - ) + printRespJSON(chanBackup) + return nil } diff --git a/cmd/lncli/invoicesrpc_active.go b/cmd/lncli/invoicesrpc_active.go index 75b7090c..d769336d 100644 --- a/cmd/lncli/invoicesrpc_active.go +++ b/cmd/lncli/invoicesrpc_active.go @@ -81,7 +81,7 @@ func settleInvoice(ctx *cli.Context) error { return err } - printJSON(resp) + printRespJSON(resp) return nil } @@ -134,7 +134,7 @@ func cancelInvoice(ctx *cli.Context) error { return err } - printJSON(resp) + printRespJSON(resp) return nil } diff --git a/cmd/lncli/watchtower_active.go b/cmd/lncli/watchtower_active.go index bfa9af66..489013f8 100644 --- a/cmd/lncli/watchtower_active.go +++ b/cmd/lncli/watchtower_active.go @@ -4,7 +4,6 @@ package main import ( "context" - "encoding/hex" "github.com/lightningnetwork/lnd/lnrpc/watchtowerrpc" "github.com/urfave/cli" @@ -51,15 +50,7 @@ func towerInfo(ctx *cli.Context) error { return err } - printJSON(struct { - Pubkey string `json:"pubkey"` - Listeners []string `json:"listeners"` - URIs []string `json:"uris"` - }{ - Pubkey: hex.EncodeToString(resp.Pubkey), - Listeners: resp.Listeners, - URIs: resp.Uris, - }) + printRespJSON(resp) return nil } diff --git a/cmd/lncli/wtclient.go b/cmd/lncli/wtclient.go index bcc0a4eb..5f887fc9 100644 --- a/cmd/lncli/wtclient.go +++ b/cmd/lncli/wtclient.go @@ -170,16 +170,8 @@ func listTowers(ctx *cli.Context) error { return err } - var listTowersResp = struct { - Towers []*Tower `json:"towers"` - }{ - Towers: make([]*Tower, len(resp.Towers)), - } - for i, tower := range resp.Towers { - listTowersResp.Towers[i] = NewTowerFromProto(tower) - } + printRespJSON(resp) - printJSON(listTowersResp) return nil } @@ -224,7 +216,7 @@ func getTower(ctx *cli.Context) error { return err } - printJSON(NewTowerFromProto(resp)) + printRespJSON(resp) return nil } diff --git a/cmd/lncli/wtclient_types.go b/cmd/lncli/wtclient_types.go deleted file mode 100644 index 4192bef0..00000000 --- a/cmd/lncli/wtclient_types.go +++ /dev/null @@ -1,50 +0,0 @@ -package main - -import ( - "encoding/hex" - - "github.com/lightningnetwork/lnd/lnrpc/wtclientrpc" -) - -// TowerSession encompasses information about a tower session. -type TowerSession struct { - NumBackups uint32 `json:"num_backups"` - NumPendingBackups uint32 `json:"num_pending_backups"` - MaxBackups uint32 `json:"max_backups"` - SweepSatPerByte uint32 `json:"sweep_sat_per_byte"` -} - -// NewTowerSessionsFromProto converts a set of tower sessions from their RPC -// type to a CLI-friendly type. -func NewTowerSessionsFromProto(sessions []*wtclientrpc.TowerSession) []*TowerSession { - towerSessions := make([]*TowerSession, 0, len(sessions)) - for _, session := range sessions { - towerSessions = append(towerSessions, &TowerSession{ - NumBackups: session.NumBackups, - NumPendingBackups: session.NumPendingBackups, - MaxBackups: session.MaxBackups, - SweepSatPerByte: session.SweepSatPerByte, - }) - } - return towerSessions -} - -// Tower encompasses information about a registered watchtower. -type Tower struct { - PubKey string `json:"pubkey"` - Addresses []string `json:"addresses"` - ActiveSessionCandidate bool `json:"active_session_candidate"` - NumSessions uint32 `json:"num_sessions"` - Sessions []*TowerSession `json:"sessions"` -} - -// NewTowerFromProto converts a tower from its RPC type to a CLI-friendly type. -func NewTowerFromProto(tower *wtclientrpc.Tower) *Tower { - return &Tower{ - PubKey: hex.EncodeToString(tower.Pubkey), - Addresses: tower.Addresses, - ActiveSessionCandidate: tower.ActiveSessionCandidate, - NumSessions: tower.NumSessions, - Sessions: NewTowerSessionsFromProto(tower.Sessions), - } -} diff --git a/go.mod b/go.mod index 94787091..8eb8cf4f 100644 --- a/go.mod +++ b/go.mod @@ -34,6 +34,7 @@ require ( github.com/juju/version v0.0.0-20180108022336-b64dbd566305 // indirect github.com/kkdai/bstream v0.0.0-20181106074824-b3251f7901ec github.com/lightninglabs/neutrino v0.11.0 + github.com/lightninglabs/protobuf-hex-display v1.3.3-0.20191212020323-b444784ce75d github.com/lightningnetwork/lightning-onion v0.0.0-20191214001659-f34e9dc1651d github.com/lightningnetwork/lnd/cert v1.0.0 github.com/lightningnetwork/lnd/queue v1.0.2 diff --git a/go.sum b/go.sum index c34fd1a1..84782ca1 100644 --- a/go.sum +++ b/go.sum @@ -134,6 +134,8 @@ github.com/lightninglabs/neutrino v0.11.0 h1:lPpYFCtsfJX2W5zI4pWycPmbbBdr7zU+Baf github.com/lightninglabs/neutrino v0.11.0/go.mod h1:CuhF0iuzg9Sp2HO6ZgXgayviFTn1QHdSTJlMncK80wg= github.com/lightningnetwork/lightning-onion v0.0.0-20191214001659-f34e9dc1651d h1:U50MHOOeL6gR3Ee/l0eMvZMpmRo+ydzmlQuIruCyCsA= github.com/lightningnetwork/lightning-onion v0.0.0-20191214001659-f34e9dc1651d/go.mod h1:rigfi6Af/KqsF7Za0hOgcyq2PNH4AN70AaMRxcJkff4= +github.com/lightninglabs/protobuf-hex-display v1.3.3-0.20191212020323-b444784ce75d h1:QWD/5MPnaZfUVP7P8wLa4M8Td2DI7XXHXt2vhVtUgGI= +github.com/lightninglabs/protobuf-hex-display v1.3.3-0.20191212020323-b444784ce75d/go.mod h1:KDb67YMzoh4eudnzClmvs2FbiLG9vxISmLApUkCa4uI= github.com/ltcsuite/ltcd v0.0.0-20190101042124-f37f8bf35796 h1:sjOGyegMIhvgfq5oaue6Td+hxZuf3tDC8lAPrFldqFw= github.com/ltcsuite/ltcd v0.0.0-20190101042124-f37f8bf35796/go.mod h1:3p7ZTf9V1sNPI5H8P3NkTFF4LuwMdPl2DodF60qAKqY= github.com/ltcsuite/ltcutil v0.0.0-20181217130922-17f3b04680b6/go.mod h1:8Vg/LTOO0KYa/vlHWJ6XZAevPQThGH5sufO0Hrou/lA=