github.com/celestiaorg/celestia-node@v0.15.0-beta.1/nodebuilder/header/cmd/header.go (about)

     1  package cmd
     2  
     3  import (
     4  	"encoding/hex"
     5  	"fmt"
     6  	"strconv"
     7  
     8  	"github.com/spf13/cobra"
     9  
    10  	cmdnode "github.com/celestiaorg/celestia-node/cmd"
    11  )
    12  
    13  func init() {
    14  	Cmd.AddCommand(
    15  		localHeadCmd,
    16  		networkHeadCmd,
    17  		getByHashCmd,
    18  		getByHeightCmd,
    19  		syncStateCmd,
    20  	)
    21  }
    22  
    23  var Cmd = &cobra.Command{
    24  	Use:               "header [command]",
    25  	Short:             "Allows interaction with the Header Module via JSON-RPC",
    26  	Args:              cobra.NoArgs,
    27  	PersistentPreRunE: cmdnode.InitClient,
    28  }
    29  
    30  var localHeadCmd = &cobra.Command{
    31  	Use:   "local-head",
    32  	Short: "Returns the ExtendedHeader from the chain head.",
    33  	Args:  cobra.NoArgs,
    34  	RunE: func(cmd *cobra.Command, args []string) error {
    35  		client, err := cmdnode.ParseClientFromCtx(cmd.Context())
    36  		if err != nil {
    37  			return err
    38  		}
    39  		defer client.Close()
    40  
    41  		header, err := client.Header.LocalHead(cmd.Context())
    42  		return cmdnode.PrintOutput(header, err, nil)
    43  	},
    44  }
    45  
    46  var networkHeadCmd = &cobra.Command{
    47  	Use:   "network-head",
    48  	Short: "Provides the Syncer's view of the current network head.",
    49  	Args:  cobra.NoArgs,
    50  	RunE: func(cmd *cobra.Command, args []string) error {
    51  		client, err := cmdnode.ParseClientFromCtx(cmd.Context())
    52  		if err != nil {
    53  			return err
    54  		}
    55  		defer client.Close()
    56  
    57  		header, err := client.Header.NetworkHead(cmd.Context())
    58  		return cmdnode.PrintOutput(header, err, nil)
    59  	},
    60  }
    61  
    62  var getByHashCmd = &cobra.Command{
    63  	Use:   "get-by-hash",
    64  	Short: "Returns the header of the given hash from the node's header store.",
    65  	Args:  cobra.ExactArgs(1),
    66  	RunE: func(cmd *cobra.Command, args []string) error {
    67  		client, err := cmdnode.ParseClientFromCtx(cmd.Context())
    68  		if err != nil {
    69  			return err
    70  		}
    71  		defer client.Close()
    72  
    73  		hash, err := hex.DecodeString(args[0])
    74  		if err != nil {
    75  			return fmt.Errorf("error decoding a hash: expected a hex encoded string:%v", err)
    76  		}
    77  		header, err := client.Header.GetByHash(cmd.Context(), hash)
    78  		return cmdnode.PrintOutput(header, err, nil)
    79  	},
    80  }
    81  
    82  var getByHeightCmd = &cobra.Command{
    83  	Use:   "get-by-height",
    84  	Short: "Returns the ExtendedHeader at the given height if it is currently available.",
    85  	Args:  cobra.ExactArgs(1),
    86  	RunE: func(cmd *cobra.Command, args []string) error {
    87  		client, err := cmdnode.ParseClientFromCtx(cmd.Context())
    88  		if err != nil {
    89  			return err
    90  		}
    91  		defer client.Close()
    92  
    93  		height, err := strconv.ParseUint(args[0], 10, 64)
    94  		if err != nil {
    95  			return fmt.Errorf("error parsing a height:%v", err)
    96  		}
    97  
    98  		header, err := client.Header.GetByHeight(cmd.Context(), height)
    99  		return cmdnode.PrintOutput(header, err, nil)
   100  	},
   101  }
   102  
   103  var syncStateCmd = &cobra.Command{
   104  	Use:   "sync-state",
   105  	Short: "Returns the current state of the header Syncer.",
   106  	Args:  cobra.NoArgs,
   107  	RunE: func(cmd *cobra.Command, args []string) error {
   108  		client, err := cmdnode.ParseClientFromCtx(cmd.Context())
   109  		if err != nil {
   110  			return err
   111  		}
   112  		defer client.Close()
   113  
   114  		header, err := client.Header.SyncState(cmd.Context())
   115  		return cmdnode.PrintOutput(header, err, nil)
   116  	},
   117  }