2019-12-09 15:09:23 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/hex"
|
|
|
|
"encoding/json"
|
|
|
|
"io"
|
|
|
|
"io/ioutil"
|
|
|
|
"os"
|
|
|
|
"strings"
|
|
|
|
"text/template"
|
|
|
|
|
|
|
|
"gopkg.in/urfave/cli.v2"
|
|
|
|
|
2020-02-11 01:04:20 +00:00
|
|
|
_ "github.com/filecoin-project/lotus/lib/sigs/bls"
|
|
|
|
_ "github.com/filecoin-project/lotus/lib/sigs/secp"
|
|
|
|
|
2019-12-09 15:09:23 +00:00
|
|
|
"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)
|
|
|
|
},
|
|
|
|
}
|