diff --git a/cli/client.go b/cli/client.go index 3bfc5de70..9787df37e 100644 --- a/cli/client.go +++ b/cli/client.go @@ -8,7 +8,9 @@ import ( "text/tabwriter" "github.com/ipfs/go-cid" + "github.com/ipfs/go-cidutil/cidenc" "github.com/libp2p/go-libp2p-core/peer" + "github.com/multiformats/go-multibase" "golang.org/x/xerrors" "gopkg.in/urfave/cli.v2" @@ -21,6 +23,32 @@ import ( "github.com/filecoin-project/lotus/chain/types" ) +var CidBaseFlag = cli.StringFlag{ + Name: "cid-base", + Hidden: true, + Value: "base32", + Usage: "Multibase encoding used for version 1 CIDs in output.", + DefaultText: "base32", +} + +// GetCidEncoder returns an encoder using the `cid-base` flag if provided, or +// the default (Base32) encoder if not. +func GetCidEncoder(cctx *cli.Context) (cidenc.Encoder, error) { + val := cctx.String("cid-base") + + e := cidenc.Encoder{Base: multibase.MustNewEncoder(multibase.Base32)} + + if val != "" { + var err error + e.Base, err = multibase.EncoderByName(val) + if err != nil { + return e, err + } + } + + return e, nil +} + var clientCmd = &cli.Command{ Name: "client", Usage: "Make deals, store data, retrieve data", @@ -46,6 +74,7 @@ var clientImportCmd = &cli.Command{ Name: "car", Usage: "import from a car file instead of a regular file", }, + &CidBaseFlag, }, Action: func(cctx *cli.Context) error { api, closer, err := GetFullNodeAPI(cctx) @@ -67,7 +96,14 @@ var clientImportCmd = &cli.Command{ if err != nil { return err } - fmt.Println(c.String()) + + encoder, err := GetCidEncoder(cctx) + if err != nil { + return err + } + + fmt.Println(encoder.Encode(c)) + return nil }, } @@ -76,6 +112,9 @@ var clientCommPCmd = &cli.Command{ Name: "commP", Usage: "calculate the piece-cid (commP) of a CAR file", ArgsUsage: "[inputFile minerAddress]", + Flags: []cli.Flag{ + &CidBaseFlag, + }, Action: func(cctx *cli.Context) error { api, closer, err := GetFullNodeAPI(cctx) if err != nil { @@ -94,11 +133,16 @@ var clientCommPCmd = &cli.Command{ } ret, err := api.ClientCalcCommP(ctx, cctx.Args().Get(0), miner) - if err != nil { return err } - fmt.Println("CID: ", ret.Root) + + encoder, err := GetCidEncoder(cctx) + if err != nil { + return err + } + + fmt.Println("CID: ", encoder.Encode(ret.Root)) fmt.Println("Piece size: ", ret.Size) return nil }, @@ -137,6 +181,9 @@ var clientCarGenCmd = &cli.Command{ var clientLocalCmd = &cli.Command{ Name: "local", Usage: "List locally imported data", + Flags: []cli.Flag{ + &CidBaseFlag, + }, Action: func(cctx *cli.Context) error { api, closer, err := GetFullNodeAPI(cctx) if err != nil { @@ -149,8 +196,14 @@ var clientLocalCmd = &cli.Command{ if err != nil { return err } + + encoder, err := GetCidEncoder(cctx) + if err != nil { + return err + } + for _, v := range list { - fmt.Printf("%s %s %d %s\n", v.Key, v.FilePath, v.Size, v.Status) + fmt.Printf("%s %s %d %s\n", encoder.Encode(v.Key), v.FilePath, v.Size, v.Status) } return nil }, @@ -178,6 +231,7 @@ var clientDealCmd = &cli.Command{ Usage: "specify the epoch that the deal should start at", Value: -1, }, + &CidBaseFlag, }, Action: func(cctx *cli.Context) error { api, closer, err := GetFullNodeAPI(cctx) @@ -263,7 +317,13 @@ var clientDealCmd = &cli.Command{ return err } - fmt.Println(proposal) + encoder, err := GetCidEncoder(cctx) + if err != nil { + return err + } + + fmt.Println(encoder.Encode(*proposal)) + return nil }, } diff --git a/go.mod b/go.mod index b594dd8d0..44a921aa2 100644 --- a/go.mod +++ b/go.mod @@ -44,6 +44,7 @@ require ( github.com/ipfs/go-block-format v0.0.2 github.com/ipfs/go-blockservice v0.1.3 github.com/ipfs/go-cid v0.0.6-0.20200501230655-7c82f3b81c00 + github.com/ipfs/go-cidutil v0.0.2 github.com/ipfs/go-datastore v0.4.4 github.com/ipfs/go-ds-badger2 v0.1.0 github.com/ipfs/go-filestore v1.0.0 @@ -95,6 +96,7 @@ require ( github.com/multiformats/go-multiaddr v0.2.2 github.com/multiformats/go-multiaddr-dns v0.2.0 github.com/multiformats/go-multiaddr-net v0.1.5 + github.com/multiformats/go-multibase v0.0.2 github.com/multiformats/go-multihash v0.0.13 github.com/opentracing/opentracing-go v1.1.0 github.com/stretchr/objx v0.2.0 // indirect diff --git a/go.sum b/go.sum index c05655afa..f209c20cf 100644 --- a/go.sum +++ b/go.sum @@ -345,6 +345,8 @@ github.com/ipfs/go-cid v0.0.4/go.mod h1:4LLaPOQwmk5z9LBgQnpkivrx8BJjUyGwTXCd5Xfj github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= github.com/ipfs/go-cid v0.0.6-0.20200501230655-7c82f3b81c00 h1:QN88Q0kT2QiDaLxpR/SDsqOBtNIEF/F3n96gSDUimkA= github.com/ipfs/go-cid v0.0.6-0.20200501230655-7c82f3b81c00/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= +github.com/ipfs/go-cidutil v0.0.2 h1:CNOboQf1t7Qp0nuNh8QMmhJs0+Q//bRL1axtCnIB1Yo= +github.com/ipfs/go-cidutil v0.0.2/go.mod h1:ewllrvrxG6AMYStla3GD7Cqn+XYSLqjK0vc+086tB6s= github.com/ipfs/go-datastore v0.0.1/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE= github.com/ipfs/go-datastore v0.0.5/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE= github.com/ipfs/go-datastore v0.1.0/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE=