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

     1  package header
     2  
     3  import (
     4  	"encoding/hex"
     5  	"fmt"
     6  
     7  	"github.com/multiformats/go-multiaddr"
     8  	"github.com/spf13/cobra"
     9  	flag "github.com/spf13/pflag"
    10  )
    11  
    12  var (
    13  	headersTrustedHashFlag  = "headers.trusted-hash"
    14  	headersTrustedPeersFlag = "headers.trusted-peers"
    15  )
    16  
    17  // Flags gives a set of hardcoded Header package flags.
    18  func Flags() *flag.FlagSet {
    19  	flags := &flag.FlagSet{}
    20  
    21  	flags.AddFlagSet(TrustedPeersFlags())
    22  	flags.AddFlagSet(TrustedHashFlags())
    23  
    24  	return flags
    25  }
    26  
    27  // ParseFlags parses Header package flags from the given cmd and applies them to the passed config.
    28  func ParseFlags(cmd *cobra.Command, cfg *Config) error {
    29  	if err := ParseTrustedHashFlags(cmd, cfg); err != nil {
    30  		return err
    31  	}
    32  	return ParseTrustedPeerFlags(cmd, cfg)
    33  }
    34  
    35  // TrustedPeersFlags returns a set of flags.
    36  func TrustedPeersFlags() *flag.FlagSet {
    37  	flags := &flag.FlagSet{}
    38  	flags.StringSlice(
    39  		headersTrustedPeersFlag,
    40  		nil,
    41  		"Multiaddresses of a reliable peers to fetch headers from. (Format: multiformats.io/multiaddr)",
    42  	)
    43  	return flags
    44  }
    45  
    46  // ParseTrustedPeerFlags parses Header package flags from the given cmd and applies them to the
    47  // passed config.
    48  func ParseTrustedPeerFlags(
    49  	cmd *cobra.Command,
    50  	cfg *Config,
    51  ) error {
    52  	tpeers, err := cmd.Flags().GetStringSlice(headersTrustedPeersFlag)
    53  	if err != nil {
    54  		return err
    55  	}
    56  
    57  	for _, tpeer := range tpeers {
    58  		_, err := multiaddr.NewMultiaddr(tpeer)
    59  		if err != nil {
    60  			return fmt.Errorf("cmd: while parsing '%s' with peer addr '%s': %w", headersTrustedPeersFlag, tpeer, err)
    61  		}
    62  	}
    63  	cfg.TrustedPeers = append(cfg.TrustedPeers, tpeers...)
    64  	return nil
    65  }
    66  
    67  // TrustedHashFlags returns a set of flags related to configuring a `TrustedHash`.
    68  func TrustedHashFlags() *flag.FlagSet {
    69  	flags := &flag.FlagSet{}
    70  
    71  	flags.String(
    72  		headersTrustedHashFlag,
    73  		"",
    74  		"Hex encoded header hash. Used to subjectively initialize header synchronization",
    75  	)
    76  	return flags
    77  }
    78  
    79  // ParseTrustedHashFlags parses Header package flags from the given cmd and saves them to the
    80  // passed config.
    81  func ParseTrustedHashFlags(
    82  	cmd *cobra.Command,
    83  	cfg *Config,
    84  ) error {
    85  	hash := cmd.Flag(headersTrustedHashFlag).Value.String()
    86  	if hash != "" {
    87  		_, err := hex.DecodeString(hash)
    88  		if err != nil {
    89  			return fmt.Errorf("cmd: while parsing '%s': %w", headersTrustedHashFlag, err)
    90  		}
    91  
    92  		cfg.TrustedHash = hash
    93  	}
    94  	return nil
    95  }