github.com/unicornultrafoundation/go-u2u@v1.0.0-rc1.0.20240205080301-e74a83d3fadc/cmd/u2u/launcher/validator.go (about)

     1  package launcher
     2  
     3  import (
     4  	"github.com/pkg/errors"
     5  	cli "gopkg.in/urfave/cli.v1"
     6  
     7  	"github.com/unicornultrafoundation/go-helios/native/idx"
     8  
     9  	"github.com/unicornultrafoundation/go-u2u/gossip/emitter"
    10  	"github.com/unicornultrafoundation/go-u2u/integration/makefakegenesis"
    11  	"github.com/unicornultrafoundation/go-u2u/native/validatorpk"
    12  )
    13  
    14  var validatorIDFlag = cli.UintFlag{
    15  	Name:  "validator.id",
    16  	Usage: "ID of a validator to create events from",
    17  	Value: 0,
    18  }
    19  
    20  var validatorPubkeyFlag = cli.StringFlag{
    21  	Name:  "validator.pubkey",
    22  	Usage: "Public key of a validator to create events from",
    23  	Value: "",
    24  }
    25  
    26  var validatorPasswordFlag = cli.StringFlag{
    27  	Name:  "validator.password",
    28  	Usage: "Password to unlock validator private key",
    29  	Value: "",
    30  }
    31  
    32  // setValidatorID retrieves the validator ID either from the directly specified
    33  // command line flags or from the keystore if CLI indexed.
    34  func setValidator(ctx *cli.Context, cfg *emitter.Config) error {
    35  	// Extract the current validator address, new flag overriding legacy one
    36  	if ctx.GlobalIsSet(FakeNetFlag.Name) {
    37  		id, num, err := parseFakeGen(ctx.GlobalString(FakeNetFlag.Name))
    38  		if err != nil {
    39  			return err
    40  		}
    41  
    42  		if ctx.GlobalIsSet(validatorIDFlag.Name) && id != 0 {
    43  			return errors.New("specified validator ID with both --fakenet and --validator.id")
    44  		}
    45  
    46  		cfg.Validator.ID = id
    47  		validators := makefakegenesis.GetFakeValidators(num)
    48  		cfg.Validator.PubKey = validators.Map()[cfg.Validator.ID].PubKey
    49  	}
    50  
    51  	if ctx.GlobalIsSet(validatorIDFlag.Name) {
    52  		cfg.Validator.ID = idx.ValidatorID(ctx.GlobalInt(validatorIDFlag.Name))
    53  	}
    54  
    55  	if ctx.GlobalIsSet(validatorPubkeyFlag.Name) {
    56  		pk, err := validatorpk.FromString(ctx.GlobalString(validatorPubkeyFlag.Name))
    57  		if err != nil {
    58  			return err
    59  		}
    60  		cfg.Validator.PubKey = pk
    61  	}
    62  
    63  	if cfg.Validator.ID != 0 && cfg.Validator.PubKey.Empty() {
    64  		return errors.New("validator public key is not set")
    65  	}
    66  	return nil
    67  }