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 }