allow wallet import to import keys in go-filecoin key format
This commit is contained in:
parent
f6c260c49f
commit
fb287e8385
@ -13,6 +13,7 @@ import (
|
|||||||
types "github.com/filecoin-project/lotus/chain/types"
|
types "github.com/filecoin-project/lotus/chain/types"
|
||||||
"github.com/filecoin-project/lotus/chain/wallet"
|
"github.com/filecoin-project/lotus/chain/wallet"
|
||||||
"github.com/filecoin-project/specs-actors/actors/crypto"
|
"github.com/filecoin-project/specs-actors/actors/crypto"
|
||||||
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
"gopkg.in/urfave/cli.v2"
|
"gopkg.in/urfave/cli.v2"
|
||||||
)
|
)
|
||||||
@ -202,6 +203,13 @@ var walletImport = &cli.Command{
|
|||||||
Name: "import",
|
Name: "import",
|
||||||
Usage: "import keys",
|
Usage: "import keys",
|
||||||
ArgsUsage: "[<path> (optional, will read from stdin if omitted)]",
|
ArgsUsage: "[<path> (optional, will read from stdin if omitted)]",
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "format",
|
||||||
|
Usage: "specify input format for key",
|
||||||
|
Value: "hex-lotus",
|
||||||
|
},
|
||||||
|
},
|
||||||
Action: func(cctx *cli.Context) error {
|
Action: func(cctx *cli.Context) error {
|
||||||
api, closer, err := GetFullNodeAPI(cctx)
|
api, closer, err := GetFullNodeAPI(cctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -210,7 +218,7 @@ var walletImport = &cli.Command{
|
|||||||
defer closer()
|
defer closer()
|
||||||
ctx := ReqContext(cctx)
|
ctx := ReqContext(cctx)
|
||||||
|
|
||||||
var hexdata []byte
|
var inpdata []byte
|
||||||
if !cctx.Args().Present() || cctx.Args().First() == "-" {
|
if !cctx.Args().Present() || cctx.Args().First() == "-" {
|
||||||
reader := bufio.NewReader(os.Stdin)
|
reader := bufio.NewReader(os.Stdin)
|
||||||
fmt.Print("Enter private key: ")
|
fmt.Print("Enter private key: ")
|
||||||
@ -218,23 +226,54 @@ var walletImport = &cli.Command{
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
hexdata = indata
|
inpdata = indata
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
fdata, err := ioutil.ReadFile(cctx.Args().First())
|
fdata, err := ioutil.ReadFile(cctx.Args().First())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
hexdata = fdata
|
inpdata = fdata
|
||||||
}
|
|
||||||
data, err := hex.DecodeString(strings.TrimSpace(string(hexdata)))
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var ki types.KeyInfo
|
var ki types.KeyInfo
|
||||||
if err := json.Unmarshal(data, &ki); err != nil {
|
switch cctx.String("format") {
|
||||||
return err
|
case "hex-lotus":
|
||||||
|
data, err := hex.DecodeString(strings.TrimSpace(string(inpdata)))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := json.Unmarshal(data, &ki); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
case "json-lotus":
|
||||||
|
if err := json.Unmarshal(inpdata, &ki); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
case "gfc-json":
|
||||||
|
var f struct {
|
||||||
|
KeyInfo []struct {
|
||||||
|
PrivateKey []byte
|
||||||
|
SigType int
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err := json.Unmarshal(inpdata, &f); err != nil {
|
||||||
|
return xerrors.Errorf("failed to parse go-filecoin key: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
gk := f.KeyInfo[0]
|
||||||
|
ki.PrivateKey = gk.PrivateKey
|
||||||
|
switch gk.SigType {
|
||||||
|
case 1:
|
||||||
|
ki.Type = wallet.KTSecp256k1
|
||||||
|
case 2:
|
||||||
|
ki.Type = wallet.KTBLS
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("unrecognized key type: %d", gk.SigType)
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("unrecognized format: %s", cctx.String("format"))
|
||||||
}
|
}
|
||||||
|
|
||||||
addr, err := api.WalletImport(ctx, &ki)
|
addr, err := api.WalletImport(ctx, &ki)
|
||||||
|
Loading…
Reference in New Issue
Block a user