85 lines
1.4 KiB
Go
85 lines
1.4 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"encoding/hex"
|
||
|
"encoding/json"
|
||
|
"io"
|
||
|
"io/ioutil"
|
||
|
"os"
|
||
|
"strings"
|
||
|
"text/template"
|
||
|
|
||
|
"gopkg.in/urfave/cli.v2"
|
||
|
|
||
|
"github.com/filecoin-project/lotus/chain/types"
|
||
|
"github.com/filecoin-project/lotus/chain/wallet"
|
||
|
)
|
||
|
|
||
|
type walletInfo struct {
|
||
|
Type string
|
||
|
Address string
|
||
|
PublicKey string
|
||
|
}
|
||
|
|
||
|
func (wi walletInfo) String() string {
|
||
|
bs, _ := json.Marshal(wi)
|
||
|
return string(bs)
|
||
|
}
|
||
|
|
||
|
var keyinfoCmd = &cli.Command{
|
||
|
Name: "keyinfo",
|
||
|
Description: "decode a keyinfo",
|
||
|
Flags: []cli.Flag{
|
||
|
&cli.StringFlag{
|
||
|
Name: "format",
|
||
|
Value: "{{.Address}}",
|
||
|
Usage: "Format to output",
|
||
|
},
|
||
|
},
|
||
|
Action: func(cctx *cli.Context) error {
|
||
|
format := cctx.String("format")
|
||
|
|
||
|
var input io.Reader
|
||
|
|
||
|
if cctx.Args().Len() == 0 {
|
||
|
input = os.Stdin
|
||
|
} else {
|
||
|
input = strings.NewReader(cctx.Args().First())
|
||
|
}
|
||
|
|
||
|
bytes, err := ioutil.ReadAll(input)
|
||
|
|
||
|
data, err := hex.DecodeString(strings.TrimSpace(string(bytes)))
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
var ki types.KeyInfo
|
||
|
if err := json.Unmarshal(data, &ki); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
key, err := wallet.NewKey(ki)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
bs, err := json.Marshal(key)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
var wi walletInfo
|
||
|
if err := json.Unmarshal(bs, &wi); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
tmpl, err := template.New("").Parse(format)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
return tmpl.Execute(os.Stdout, wi)
|
||
|
},
|
||
|
}
|