github.com/SmartMeshFoundation/Spectrum@v0.0.0-20220621030607-452a266fee1e/cmd/evm/main.go (about)

     1  // Copyright 2014 The Spectrum Authors
     2  // This file is part of Spectrum.
     3  //
     4  // Spectrum 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  // Spectrum 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 Spectrum. 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/SmartMeshFoundation/Spectrum/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. If '-' is specified, code is read from stdin ",
    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  	ReceiverFlag = cli.StringFlag{
   106  		Name:  "receiver",
   107  		Usage: "The transaction receiver (execution context)",
   108  	}
   109  	DisableMemoryFlag = cli.BoolFlag{
   110  		Name:  "nomemory",
   111  		Usage: "disable memory output",
   112  	}
   113  	DisableStackFlag = cli.BoolFlag{
   114  		Name:  "nostack",
   115  		Usage: "disable stack output",
   116  	}
   117  )
   118  
   119  func init() {
   120  	app.Flags = []cli.Flag{
   121  		CreateFlag,
   122  		DebugFlag,
   123  		VerbosityFlag,
   124  		CodeFlag,
   125  		CodeFileFlag,
   126  		GasFlag,
   127  		PriceFlag,
   128  		ValueFlag,
   129  		DumpFlag,
   130  		InputFlag,
   131  		DisableGasMeteringFlag,
   132  		MemProfileFlag,
   133  		CPUProfileFlag,
   134  		StatDumpFlag,
   135  		GenesisFlag,
   136  		MachineFlag,
   137  		SenderFlag,
   138  		ReceiverFlag,
   139  		DisableMemoryFlag,
   140  		DisableStackFlag,
   141  	}
   142  	app.Commands = []cli.Command{
   143  		compileCommand,
   144  		disasmCommand,
   145  		runCommand,
   146  		stateTestCommand,
   147  	}
   148  }
   149  
   150  func main() {
   151  	if err := app.Run(os.Args); err != nil {
   152  		fmt.Fprintln(os.Stderr, err)
   153  		os.Exit(1)
   154  	}
   155  }