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.
This commit is contained in:
Conner Fromknecht 2019-12-20 01:05:08 -08:00
parent fb6cf21948
commit 8f5d78c875
No known key found for this signature in database
GPG Key ID: E7D737B67FA592C7
9 changed files with 22 additions and 149 deletions

@ -88,7 +88,7 @@ func buildRoute(ctx *cli.Context) error {
return err
}
printJSON(route)
printRespJSON(route)
return nil
}

@ -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
}

@ -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
}

@ -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
}

@ -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
}

@ -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
}

@ -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),
}
}

1
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

2
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=