diff options
Diffstat (limited to 'cmd/utils')
-rw-r--r-- | cmd/utils/cmd.go | 15 | ||||
-rw-r--r-- | cmd/utils/customflags.go | 86 | ||||
-rw-r--r-- | cmd/utils/flags.go | 24 |
3 files changed, 75 insertions, 50 deletions
diff --git a/cmd/utils/cmd.go b/cmd/utils/cmd.go index 062b9c50d..843cb5b4e 100644 --- a/cmd/utils/cmd.go +++ b/cmd/utils/cmd.go @@ -23,11 +23,9 @@ import ( "io" "os" "os/signal" - "regexp" "runtime" "strings" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/internal/debug" @@ -82,19 +80,6 @@ func StartNode(stack *node.Node) { }() } -func FormatTransactionData(data string) []byte { - d := common.StringToByteFunc(data, func(s string) (ret []byte) { - slice := regexp.MustCompile(`\n|\s`).Split(s, 1000000000) - for _, dataItem := range slice { - d := common.FormatData(dataItem) - ret = append(ret, d...) - } - return - }) - - return d -} - func ImportChain(chain *core.BlockChain, fn string) error { // Watch for Ctrl-C while the import is running. // If a signal is received, the import will stop at the next batch. diff --git a/cmd/utils/customflags.go b/cmd/utils/customflags.go index 52cd7b8c7..00f28f2ec 100644 --- a/cmd/utils/customflags.go +++ b/cmd/utils/customflags.go @@ -17,12 +17,17 @@ package utils import ( + "errors" "flag" "fmt" + "math/big" "os" "os/user" "path" "strings" + + "github.com/ethereum/go-ethereum/common/math" + "gopkg.in/urfave/cli.v1" ) // Custom type which is registered in the flags library which cli uses for @@ -44,10 +49,9 @@ func (self *DirectoryString) Set(value string) error { // Custom cli.Flag type which expand the received string to an absolute path. // e.g. ~/.ethereum -> /home/username/.ethereum type DirectoryFlag struct { - Name string - Value DirectoryString - Usage string - EnvVar string + Name string + Value DirectoryString + Usage string } func (self DirectoryFlag) String() string { @@ -55,7 +59,7 @@ func (self DirectoryFlag) String() string { if len(self.Value.Value) > 0 { fmtString = "%s \"%v\"\t%v" } - return withEnvHint(self.EnvVar, fmt.Sprintf(fmtString, prefixedNames(self.Name), self.Value.Value, self.Usage)) + return fmt.Sprintf(fmtString, prefixedNames(self.Name), self.Value.Value, self.Usage) } func eachName(longName string, fn func(string)) { @@ -69,21 +73,65 @@ func eachName(longName string, fn func(string)) { // called by cli library, grabs variable from environment (if in env) // and adds variable to flag set for parsing. func (self DirectoryFlag) Apply(set *flag.FlagSet) { - if self.EnvVar != "" { - for _, envVar := range strings.Split(self.EnvVar, ",") { - envVar = strings.TrimSpace(envVar) - if envVal := os.Getenv(envVar); envVal != "" { - self.Value.Value = envVal - break - } - } - } - eachName(self.Name, func(name string) { set.Var(&self.Value, self.Name, self.Usage) }) } +// BigFlag is a command line flag that accepts 256 bit big integers in decimal or +// hexadecimal syntax. +type BigFlag struct { + Name string + Value *big.Int + Usage string +} + +// bigValue turns *big.Int into a flag.Value +type bigValue big.Int + +func (b *bigValue) String() string { + if b == nil { + return "" + } + return (*big.Int)(b).String() +} + +func (b *bigValue) Set(s string) error { + int, ok := math.ParseBig256(s) + if !ok { + return errors.New("invalid integer syntax") + } + *b = (bigValue)(*int) + return nil +} + +func (f BigFlag) GetName() string { + return f.Name +} + +func (f BigFlag) String() string { + fmtString := "%s %v\t%v" + if f.Value != nil { + fmtString = "%s \"%v\"\t%v" + } + return fmt.Sprintf(fmtString, prefixedNames(f.Name), f.Value, f.Usage) +} + +func (f BigFlag) Apply(set *flag.FlagSet) { + eachName(f.Name, func(name string) { + set.Var((*bigValue)(f.Value), f.Name, f.Usage) + }) +} + +// GlobalBig returns the value of a BigFlag from the global flag set. +func GlobalBig(ctx *cli.Context, name string) *big.Int { + val := ctx.GlobalGeneric(name) + if val == nil { + return nil + } + return (*big.Int)(val.(*bigValue)) +} + func prefixFor(name string) (prefix string) { if len(name) == 1 { prefix = "-" @@ -106,14 +154,6 @@ func prefixedNames(fullName string) (prefixed string) { return } -func withEnvHint(envVar, str string) string { - envText := "" - if envVar != "" { - envText = fmt.Sprintf(" [$%s]", strings.Join(strings.Split(envVar, ","), ", $")) - } - return str + envText -} - func (self DirectoryFlag) GetName() string { return self.Name } diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index a2e4ac814..25c3a1ada 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -179,10 +179,10 @@ var ( Usage: "Number of CPU threads to use for mining", Value: runtime.NumCPU(), } - TargetGasLimitFlag = cli.StringFlag{ + TargetGasLimitFlag = cli.Uint64Flag{ Name: "targetgaslimit", Usage: "Target gas limit sets the artificial target gas floor for the blocks to mine", - Value: params.GenesisGasLimit.String(), + Value: params.GenesisGasLimit.Uint64(), } AutoDAGFlag = cli.BoolFlag{ Name: "autodag", @@ -193,10 +193,10 @@ var ( Usage: "Public address for block mining rewards (default = first account created)", Value: "0", } - GasPriceFlag = cli.StringFlag{ + GasPriceFlag = BigFlag{ Name: "gasprice", Usage: "Minimal gas price to accept for mining a transactions", - Value: new(big.Int).Mul(big.NewInt(20), common.Shannon).String(), + Value: big.NewInt(20 * params.Shannon), } ExtraDataFlag = cli.StringFlag{ Name: "extradata", @@ -382,15 +382,15 @@ var ( } // Gas price oracle settings - GpoMinGasPriceFlag = cli.StringFlag{ + GpoMinGasPriceFlag = BigFlag{ Name: "gpomin", Usage: "Minimum suggested gas price", - Value: new(big.Int).Mul(big.NewInt(20), common.Shannon).String(), + Value: big.NewInt(20 * params.Shannon), } - GpoMaxGasPriceFlag = cli.StringFlag{ + GpoMaxGasPriceFlag = BigFlag{ Name: "gpomax", Usage: "Maximum suggested gas price", - Value: new(big.Int).Mul(big.NewInt(500), common.Shannon).String(), + Value: big.NewInt(500 * params.Shannon), } GpoFullBlockRatioFlag = cli.IntFlag{ Name: "gpofull", @@ -741,9 +741,9 @@ func RegisterEthService(ctx *cli.Context, stack *node.Node, extra []byte) { MinerThreads: ctx.GlobalInt(MinerThreadsFlag.Name), ExtraData: MakeMinerExtra(extra, ctx), DocRoot: ctx.GlobalString(DocRootFlag.Name), - GasPrice: common.String2Big(ctx.GlobalString(GasPriceFlag.Name)), - GpoMinGasPrice: common.String2Big(ctx.GlobalString(GpoMinGasPriceFlag.Name)), - GpoMaxGasPrice: common.String2Big(ctx.GlobalString(GpoMaxGasPriceFlag.Name)), + GasPrice: GlobalBig(ctx, GasPriceFlag.Name), + GpoMinGasPrice: GlobalBig(ctx, GpoMinGasPriceFlag.Name), + GpoMaxGasPrice: GlobalBig(ctx, GpoMaxGasPriceFlag.Name), GpoFullBlockRatio: ctx.GlobalInt(GpoFullBlockRatioFlag.Name), GpobaseStepDown: ctx.GlobalInt(GpobaseStepDownFlag.Name), GpobaseStepUp: ctx.GlobalInt(GpobaseStepUpFlag.Name), @@ -819,7 +819,7 @@ func RegisterEthStatsService(stack *node.Node, url string) { // SetupNetwork configures the system for either the main net or some test network. func SetupNetwork(ctx *cli.Context) { - params.TargetGasLimit = common.String2Big(ctx.GlobalString(TargetGasLimitFlag.Name)) + params.TargetGasLimit = new(big.Int).SetUint64(ctx.GlobalUint64(TargetGasLimitFlag.Name)) } // MakeChainConfig reads the chain configuration from the database in ctx.Datadir. |