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 }