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 }