-
Notifications
You must be signed in to change notification settings - Fork 27
/
main.go
57 lines (42 loc) · 1.45 KB
/
main.go
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
package main
import (
"flag"
"os"
"github.com/0xsha/ChainWalker/internal"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)
func main() {
// step I : get user settings
startPtr := flag.Int64("s", 14000000, "start block (int)")
endPtr := flag.Int64("e", 14010000, "end block (int)")
urlPtr := flag.String("u", "https://cloudflare-eth.com", "RCP/IPC endpoint")
evmPath := flag.String("ev", "/usr/local/bin/evm", "EVM path")
conPtr := flag.Int("c", 1, "concurrency")
debugPtr := flag.Bool("d", false, "sets log level to debug")
balancePtr := flag.Float64("b", 0, "minimum balance (default 0)")
outPtr := flag.String("o", "output/", "output directory")
helpPtr := flag.Bool("h", false, "shows usage")
printPtr := flag.Bool("p", false, "print on console only and do not download or disassemble contracts")
flag.Parse()
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr})
banner := `ChainWalker 1.0.3-alpha - Usage`
if *helpPtr {
log.Info().Msg(banner)
flag.PrintDefaults()
return
}
// setup zero-log
zerolog.SetGlobalLevel(zerolog.InfoLevel)
if *debugPtr {
// print-outs the bytecode
zerolog.SetGlobalLevel(zerolog.DebugLevel)
}
log.Info().Msg(banner)
// step II : download the contracts from requested blocks
internal.DownloadContractsEVM(*urlPtr, *startPtr, *endPtr, *balancePtr, *conPtr, *printPtr)
if !(*printPtr) {
// step III : disassemble EVM to opcode
internal.DisasmContractsEVM(*outPtr, *evmPath)
}
}