aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/utils
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/utils')
-rw-r--r--cmd/utils/cmd.go15
-rw-r--r--cmd/utils/customflags.go86
-rw-r--r--cmd/utils/flags.go24
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.