istanbul-tools/cmd/istanbul/address/cmd.go

50 lines
1.1 KiB
Go

package address
import (
"crypto/ecdsa"
"encoding/hex"
"fmt"
"github.com/ethereum/go-ethereum/p2p/enode"
"github.com/ethereum/go-ethereum/crypto"
"github.com/urfave/cli"
)
var (
AddressCommand = cli.Command{
Name: "address",
Action: address,
Usage: "Extract validator address",
Flags: []cli.Flag{
nodeKeyHexFlag,
nodeIdHexFlag,
},
Description: `Extract validator address`,
}
)
func address(ctx *cli.Context) error {
if (!ctx.IsSet(nodeKeyHexFlag.Name) && !ctx.IsSet(nodeIdHexFlag.Name)) || (ctx.IsSet(nodeKeyHexFlag.Name) && ctx.IsSet(nodeIdHexFlag.Name)) {
return cli.NewExitError("Must supply nodekey or nodeid hex", 10)
}
var publicKey ecdsa.PublicKey
if ctx.IsSet(nodeKeyHexFlag.Name) {
nodeKeyHex := ctx.String(nodeKeyHexFlag.Name)
privKey, err := crypto.HexToECDSA(nodeKeyHex)
if err != nil {
return err
}
publicKey = privKey.PublicKey
}
if ctx.IsSet(nodeIdHexFlag.Name) {
pubKey, err := enode.HexPubkey(ctx.String(nodeIdHexFlag.Name))
if err != nil {
return err
}
publicKey = *pubKey
}
fmt.Printf("0x%s\n", hex.EncodeToString(crypto.PubkeyToAddress(publicKey).Bytes()))
return nil
}