+++ /dev/null
-package commands
-
-import (
- "encoding/hex"
- "os"
- "strconv"
- "unicode"
-
- "github.com/spf13/cobra"
- jww "github.com/spf13/jwalterweatherman"
-
- chainjson "github.com/vapor/encoding/json"
- "github.com/vapor/util"
-)
-
-func init() {
- getDifficultyCmd.PersistentFlags().StringVar(&blockHash, "hash", "", "hash of block")
- getDifficultyCmd.PersistentFlags().IntVar(&blockHeight, "height", 0, "height of block")
-
- getHashRateCmd.PersistentFlags().StringVar(&blockHash, "hash", "", "hash of block")
- getHashRateCmd.PersistentFlags().IntVar(&blockHeight, "height", 0, "height of block")
-}
-
-var (
- blockHash = ""
- blockHeight = 0
-)
-
-var getBlockHashCmd = &cobra.Command{
- Use: "get-block-hash",
- Short: "Get the hash of most recent block",
- Args: cobra.NoArgs,
- Run: func(cmd *cobra.Command, args []string) {
- data, exitCode := util.ClientCall("get-block-hash")
- if exitCode != util.Success {
- os.Exit(exitCode)
- }
- printJSON(data)
- },
-}
-
-var getBlockCountCmd = &cobra.Command{
- Use: "get-block-count",
- Short: "Get the number of most recent block",
- Args: cobra.NoArgs,
- Run: func(cmd *cobra.Command, args []string) {
- data, exitCode := util.ClientCall("/get-block-count")
- if exitCode != util.Success {
- os.Exit(exitCode)
- }
- printJSON(data)
- },
-}
-
-var getBlockCmd = &cobra.Command{
- Use: "get-block <hash> | <height>",
- Short: "Get a whole block matching the given hash or height",
- Args: cobra.ExactArgs(1),
- Run: func(cmd *cobra.Command, args []string) {
- var hash chainjson.HexBytes
- var height uint64
- var err error
- isNumber := false
-
- for _, ch := range args[0] {
- // check whether the char is hex digit
- if !(unicode.IsNumber(ch) || (ch >= 'a' && ch <= 'f') || (ch >= 'A' && ch <= 'F')) {
- jww.ERROR.Printf("Invalid value for hash or height")
- os.Exit(util.ErrLocalExe)
- }
-
- if !unicode.IsNumber(ch) {
- isNumber = true
- }
- }
-
- if isNumber {
- if len(args[0]) != 64 {
- jww.ERROR.Printf("Invalid hash length")
- os.Exit(util.ErrLocalExe)
- }
-
- hash, err = hex.DecodeString(args[0])
- if err != nil {
- jww.ERROR.Println(err)
- os.Exit(util.ErrLocalExe)
- }
- } else {
- height, err = strconv.ParseUint(args[0], 10, 64)
- if err != nil {
- jww.ERROR.Printf("Invalid height value")
- os.Exit(util.ErrLocalExe)
- }
- }
-
- blockReq := &struct {
- BlockHeight uint64 `json:"block_height"`
- BlockHash chainjson.HexBytes `json:"block_hash"`
- }{BlockHeight: height, BlockHash: hash}
-
- data, exitCode := util.ClientCall("/get-block", blockReq)
- if exitCode != util.Success {
- os.Exit(exitCode)
- }
- printJSON(data)
- },
-}
-
-var getBlockHeaderCmd = &cobra.Command{
- Use: "get-block-header <hash> | <height>",
- Short: "Get the header of a block matching the given hash or height",
- Args: cobra.ExactArgs(1),
- Run: func(cmd *cobra.Command, args []string) {
- var hash chainjson.HexBytes
- var height uint64
- var err error
- isNumber := false
-
- for _, ch := range args[0] {
- // check whether the char is hex digit
- if !(unicode.IsNumber(ch) || (ch >= 'a' && ch <= 'f') || (ch >= 'A' && ch <= 'F')) {
- jww.ERROR.Printf("Invalid value for hash or height")
- os.Exit(util.ErrLocalExe)
- }
-
- if !unicode.IsNumber(ch) {
- isNumber = true
- }
- }
-
- if isNumber {
- if len(args[0]) != 64 {
- jww.ERROR.Printf("Invalid hash length")
- os.Exit(util.ErrLocalExe)
- }
-
- hash, err = hex.DecodeString(args[0])
- if err != nil {
- jww.ERROR.Println(err)
- os.Exit(util.ErrLocalExe)
- }
- } else {
- height, err = strconv.ParseUint(args[0], 10, 64)
- if err != nil {
- jww.ERROR.Printf("Invalid height value")
- os.Exit(util.ErrLocalExe)
- }
- }
-
- req := &struct {
- BlockHeight uint64 `json:"block_height"`
- BlockHash chainjson.HexBytes `json:"block_hash"`
- }{BlockHeight: height, BlockHash: hash}
-
- data, exitCode := util.ClientCall("/get-block-header", req)
- if exitCode != util.Success {
- os.Exit(exitCode)
- }
- printJSON(data)
- },
-}
-
-var getDifficultyCmd = &cobra.Command{
- Use: "get-difficulty",
- Short: "Get the difficulty of most recent block",
- Args: cobra.NoArgs,
- Run: func(cmd *cobra.Command, args []string) {
- var hash chainjson.HexBytes
- var err error
-
- if blockHash != "" {
- hash, err = hex.DecodeString(blockHash)
- if err != nil {
- jww.ERROR.Println(err)
- os.Exit(util.ErrLocalExe)
- }
- }
-
- req := &struct {
- BlockHeight uint64 `json:"block_height"`
- BlockHash chainjson.HexBytes `json:"block_hash"`
- }{BlockHeight: uint64(blockHeight), BlockHash: hash}
-
- data, exitCode := util.ClientCall("/get-difficulty", req)
- if exitCode != util.Success {
- os.Exit(exitCode)
- }
- printJSON(data)
- },
-}
-
-var getHashRateCmd = &cobra.Command{
- Use: "get-hash-rate",
- Short: "Get the nonce of most recent block",
- Args: cobra.NoArgs,
- Run: func(cmd *cobra.Command, args []string) {
- var hash chainjson.HexBytes
- var err error
-
- if blockHash != "" {
- hash, err = hex.DecodeString(blockHash)
- if err != nil {
- jww.ERROR.Println(err)
- os.Exit(util.ErrLocalExe)
- }
- }
-
- req := &struct {
- BlockHeight uint64 `json:"block_height"`
- BlockHash chainjson.HexBytes `json:"block_hash"`
- }{BlockHeight: uint64(blockHeight), BlockHash: hash}
-
- data, exitCode := util.ClientCall("/get-hash-rate", req)
- if exitCode != util.Success {
- os.Exit(exitCode)
- }
- printJSON(data)
- },
-}