aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/evm/main.go
blob: e85d31d03d183314d5cddf0a96ad2d56ce8fef7e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
// Copyright 2014 The go-ethereum Authors
// This file is part of go-ethereum.
//
// go-ethereum is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// go-ethereum is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.

// evm executes EVM code snippets.
package main

import (
    "fmt"
    "math/big"
    "os"

    "github.com/ethereum/go-ethereum/cmd/utils"
    "gopkg.in/urfave/cli.v1"
)

var gitCommit = "" // Git SHA1 commit hash of the release (set via linker flags)

var (
    app = utils.NewApp(gitCommit, "the evm command line interface")

    DebugFlag = cli.BoolFlag{
        Name:  "debug",
        Usage: "output full trace logs",
    }
    MemProfileFlag = cli.StringFlag{
        Name:  "memprofile",
        Usage: "creates a memory profile at the given path",
    }
    CPUProfileFlag = cli.StringFlag{
        Name:  "cpuprofile",
        Usage: "creates a CPU profile at the given path",
    }
    StatDumpFlag = cli.BoolFlag{
        Name:  "statdump",
        Usage: "displays stack and heap memory information",
    }
    CodeFlag = cli.StringFlag{
        Name:  "code",
        Usage: "EVM code",
    }
    CodeFileFlag = cli.StringFlag{
        Name:  "codefile",
        Usage: "file containing EVM code",
    }
    GasFlag = cli.Uint64Flag{
        Name:  "gas",
        Usage: "gas limit for the evm",
        Value: 10000000000,
    }
    PriceFlag = utils.BigFlag{
        Name:  "price",
        Usage: "price set for the evm",
        Value: new(big.Int),
    }
    ValueFlag = utils.BigFlag{
        Name:  "value",
        Usage: "value set for the evm",
        Value: new(big.Int),
    }
    DumpFlag = cli.BoolFlag{
        Name:  "dump",
        Usage: "dumps the state after the run",
    }
    InputFlag = cli.StringFlag{
        Name:  "input",
        Usage: "input for the EVM",
    }
    VerbosityFlag = cli.IntFlag{
        Name:  "verbosity",
        Usage: "sets the verbosity level",
    }
    CreateFlag = cli.BoolFlag{
        Name:  "create",
        Usage: "indicates the action should be create rather than call",
    }
    DisableGasMeteringFlag = cli.BoolFlag{
        Name:  "nogasmetering",
        Usage: "disable gas metering",
    }
)

func init() {
    app.Flags = []cli.Flag{
        CreateFlag,
        DebugFlag,
        VerbosityFlag,
        CodeFlag,
        CodeFileFlag,
        GasFlag,
        PriceFlag,
        ValueFlag,
        DumpFlag,
        InputFlag,
        DisableGasMeteringFlag,
        MemProfileFlag,
        CPUProfileFlag,
        StatDumpFlag,
    }
    app.Commands = []cli.Command{
        compileCommand,
        disasmCommand,
        runCommand,
    }
}

func main() {
    if err := app.Run(os.Args); err != nil {
        fmt.Fprintln(os.Stderr, err)
        os.Exit(1)
    }
}