github.com/reapchain/go-reapchain@v0.2.15-0.20210609012950-9735c110c705/cmd/evm/main.go (about)

     1  // Copyright 2014 The go-ethereum Authors
     2  // This file is part of go-ethereum.
     3  //
     4  // go-ethereum is free software: you can redistribute it and/or modify
     5  // it under the terms of the GNU General Public License as published by
     6  // the Free Software Foundation, either version 3 of the License, or
     7  // (at your option) any later version.
     8  //
     9  // go-ethereum is distributed in the hope that it will be useful,
    10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    12  // GNU General Public License for more details.
    13  //
    14  // You should have received a copy of the GNU General Public License
    15  // along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
    16  
    17  // evm executes EVM code snippets.
    18  package main
    19  
    20  import (
    21  	"fmt"
    22  	"math/big"
    23  	"os"
    24  
    25  	"github.com/ethereum/go-ethereum/cmd/utils"
    26  	"gopkg.in/urfave/cli.v1"
    27  )
    28  
    29  var gitCommit = "" // Git SHA1 commit hash of the release (set via linker flags)
    30  
    31  var (
    32  	app = utils.NewApp(gitCommit, "the evm command line interface")
    33  
    34  	DebugFlag = cli.BoolFlag{
    35  		Name:  "debug",
    36  		Usage: "output full trace logs",
    37  	}
    38  	MemProfileFlag = cli.StringFlag{
    39  		Name:  "memprofile",
    40  		Usage: "creates a memory profile at the given path",
    41  	}
    42  	CPUProfileFlag = cli.StringFlag{
    43  		Name:  "cpuprofile",
    44  		Usage: "creates a CPU profile at the given path",
    45  	}
    46  	StatDumpFlag = cli.BoolFlag{
    47  		Name:  "statdump",
    48  		Usage: "displays stack and heap memory information",
    49  	}
    50  	CodeFlag = cli.StringFlag{
    51  		Name:  "code",
    52  		Usage: "EVM code",
    53  	}
    54  	CodeFileFlag = cli.StringFlag{
    55  		Name:  "codefile",
    56  		Usage: "file containing EVM code",
    57  	}
    58  	GasFlag = cli.Uint64Flag{
    59  		Name:  "gas",
    60  		Usage: "gas limit for the evm",
    61  		Value: 10000000000,
    62  	}
    63  	PriceFlag = utils.BigFlag{
    64  		Name:  "price",
    65  		Usage: "price set for the evm",
    66  		Value: new(big.Int),
    67  	}
    68  	ValueFlag = utils.BigFlag{
    69  		Name:  "value",
    70  		Usage: "value set for the evm",
    71  		Value: new(big.Int),
    72  	}
    73  	DumpFlag = cli.BoolFlag{
    74  		Name:  "dump",
    75  		Usage: "dumps the state after the run",
    76  	}
    77  	InputFlag = cli.StringFlag{
    78  		Name:  "input",
    79  		Usage: "input for the EVM",
    80  	}
    81  	VerbosityFlag = cli.IntFlag{
    82  		Name:  "verbosity",
    83  		Usage: "sets the verbosity level",
    84  	}
    85  	CreateFlag = cli.BoolFlag{
    86  		Name:  "create",
    87  		Usage: "indicates the action should be create rather than call",
    88  	}
    89  	DisableGasMeteringFlag = cli.BoolFlag{
    90  		Name:  "nogasmetering",
    91  		Usage: "disable gas metering",
    92  	}
    93  	GenesisFlag = cli.StringFlag{
    94  		Name:  "prestate",
    95  		Usage: "JSON file with prestate (genesis) config",
    96  	}
    97  	MachineFlag = cli.BoolFlag{
    98  		Name:  "json",
    99  		Usage: "output trace logs in machine readable format (json)",
   100  	}
   101  	SenderFlag = cli.StringFlag{
   102  		Name:  "sender",
   103  		Usage: "The transaction origin",
   104  	}
   105  )
   106  
   107  func init() {
   108  	app.Flags = []cli.Flag{
   109  		CreateFlag,
   110  		DebugFlag,
   111  		VerbosityFlag,
   112  		CodeFlag,
   113  		CodeFileFlag,
   114  		GasFlag,
   115  		PriceFlag,
   116  		ValueFlag,
   117  		DumpFlag,
   118  		InputFlag,
   119  		DisableGasMeteringFlag,
   120  		MemProfileFlag,
   121  		CPUProfileFlag,
   122  		StatDumpFlag,
   123  		GenesisFlag,
   124  		MachineFlag,
   125  		SenderFlag,
   126  	}
   127  	app.Commands = []cli.Command{
   128  		compileCommand,
   129  		disasmCommand,
   130  		runCommand,
   131  	}
   132  }
   133  
   134  func main() {
   135  	if err := app.Run(os.Args); err != nil {
   136  		fmt.Fprintln(os.Stderr, err)
   137  		os.Exit(1)
   138  	}
   139  }